Skip to content

Instantly share code, notes, and snippets.

@ficolo
Created October 27, 2022 11:18
Show Gist options
  • Save ficolo/90580817ae29c42070c4fb5f54ac67d4 to your computer and use it in GitHub Desktop.
Save ficolo/90580817ae29c42070c4fb5f54ac67d4 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
var CollapsibleHeatMap=function(t){var n={};function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:i})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(e.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var r in t)e.d(i,r,function(n){return t[n]}.bind(null,r));return i},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s=3)}([,,,function(t,n,e){"use strict";e.r(n);var i=function(t,n){return t<n?-1:t>n?1:t>=n?0:NaN},r=function(t){var n;return 1===t.length&&(n=t,t=function(t,e){return i(n(t),e)}),{left:function(n,e,i,r){for(null==i&&(i=0),null==r&&(r=n.length);i<r;){var o=i+r>>>1;t(n[o],e)<0?i=o+1:r=o}return i},right:function(n,e,i,r){for(null==i&&(i=0),null==r&&(r=n.length);i<r;){var o=i+r>>>1;t(n[o],e)>0?r=o:i=o+1}return i}}};var o=r(i);o.right,o.left;function a(t,n){return[t,n]}var s=Array.prototype,u=(s.slice,s.map,function(t,n,e){t=+t,n=+n,e=(r=arguments.length)<2?(n=t,t=0,1):r<3?1:+e;for(var i=-1,r=0|Math.max(0,Math.ceil((n-t)/e)),o=new Array(r);++i<r;)o[i]=t+i*e;return o});Math.sqrt(50),Math.sqrt(10),Math.sqrt(2);var h=function(t){for(var n,e,i,r=t.length,o=-1,a=0;++o<r;)a+=t[o].length;for(e=new Array(a);--r>=0;)for(n=(i=t[r]).length;--n>=0;)e[--a]=i[n];return e};var c=Array.prototype.slice,l=function(t){return t},f=1,_=2,p=3,d=4,v=1e-6;function g(t){return"translate("+(t+.5)+",0)"}function y(t){return"translate(0,"+(t+.5)+")"}function m(t){return function(n){return+t(n)}}function x(t){var n=Math.max(0,t.bandwidth()-1)/2;return t.round()&&(n=Math.round(n)),function(e){return+t(e)+n}}function w(){return!this.__axis}function b(t,n){var e=[],i=null,r=null,o=6,a=6,s=3,u=t===f||t===d?-1:1,h=t===d||t===_?"x":"y",b=t===f||t===p?g:y;function M(c){var g=null==i?n.ticks?n.ticks.apply(n,e):n.domain():i,y=null==r?n.tickFormat?n.tickFormat.apply(n,e):l:r,M=Math.max(o,0)+s,k=n.range(),N=+k[0]+.5,C=+k[k.length-1]+.5,T=(n.bandwidth?x:m)(n.copy()),A=c.selection?c.selection():c,S=A.selectAll(".domain").data([null]),E=A.selectAll(".tick").data(g,n).order(),U=E.exit(),P=E.enter().append("g").attr("class","tick"),L=E.select("line"),R=E.select("text");S=S.merge(S.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),E=E.merge(P),L=L.merge(P.append("line").attr("stroke","currentColor").attr(h+"2",u*o)),R=R.merge(P.append("text").attr("fill","currentColor").attr(h,u*M).attr("dy",t===f?"0em":t===p?"0.71em":"0.32em")),c!==A&&(S=S.transition(c),E=E.transition(c),L=L.transition(c),R=R.transition(c),U=U.transition(c).attr("opacity",v).attr("transform",(function(t){return isFinite(t=T(t))?b(t):this.getAttribute("transform")})),P.attr("opacity",v).attr("transform",(function(t){var n=this.parentNode.__axis;return b(n&&isFinite(n=n(t))?n:T(t))}))),U.remove(),S.attr("d",t===d||t==_?a?"M"+u*a+","+N+"H0.5V"+C+"H"+u*a:"M0.5,"+N+"V"+C:a?"M"+N+","+u*a+"V0.5H"+C+"V"+u*a:"M"+N+",0.5H"+C),E.attr("opacity",1).attr("transform",(function(t){return b(T(t))})),L.attr(h+"2",u*o),R.attr(h,u*M).text(y),A.filter(w).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===_?"start":t===d?"end":"middle"),A.each((function(){this.__axis=T}))}return M.scale=function(t){return arguments.length?(n=t,M):n},M.ticks=function(){return e=c.call(arguments),M},M.tickArguments=function(t){return arguments.length?(e=null==t?[]:c.call(t),M):e.slice()},M.tickValues=function(t){return arguments.length?(i=null==t?null:c.call(t),M):i&&i.slice()},M.tickFormat=function(t){return arguments.length?(r=t,M):r},M.tickSize=function(t){return arguments.length?(o=a=+t,M):o},M.tickSizeInner=function(t){return arguments.length?(o=+t,M):o},M.tickSizeOuter=function(t){return arguments.length?(a=+t,M):a},M.tickPadding=function(t){return arguments.length?(s=+t,M):s},M}var M={value:function(){}};function k(){for(var t,n=0,e=arguments.length,i={};n<e;++n){if(!(t=arguments[n]+"")||t in i)throw new Error("illegal type: "+t);i[t]=[]}return new N(i)}function N(t){this._=t}function C(t,n){return t.trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");if(i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))}function T(t,n){for(var e,i=0,r=t.length;i<r;++i)if((e=t[i]).name===n)return e.value}function A(t,n,e){for(var i=0,r=t.length;i<r;++i)if(t[i].name===n){t[i]=M,t=t.slice(0,i).concat(t.slice(i+1));break}return null!=e&&t.push({name:n,value:e}),t}N.prototype=k.prototype={constructor:N,on:function(t,n){var e,i=this._,r=C(t+"",i),o=-1,a=r.length;if(!(arguments.length<2)){if(null!=n&&"function"!=typeof n)throw new Error("invalid callback: "+n);for(;++o<a;)if(e=(t=r[o]).type)i[e]=A(i[e],t.name,n);else if(null==n)for(e in i)i[e]=A(i[e],t.name,null);return this}for(;++o<a;)if((e=(t=r[o]).type)&&(e=T(i[e],t.name)))return e},copy:function(){var t={},n=this._;for(var e in n)t[e]=n[e].slice();return new N(t)},call:function(t,n){if((e=arguments.length-2)>0)for(var e,i,r=new Array(e),o=0;o<e;++o)r[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=0,e=(i=this._[t]).length;o<e;++o)i[o].value.apply(n,r)},apply:function(t,n,e){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var i=this._[t],r=0,o=i.length;r<o;++r)i[r].value.apply(n,e)}};var S=k,E="http://www.w3.org/1999/xhtml",U={svg:"http://www.w3.org/2000/svg",xhtml:E,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},P=function(t){var n=t+="",e=n.indexOf(":");return e>=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),U.hasOwnProperty(n)?{space:U[n],local:t}:t};function L(t){return function(){var n=this.ownerDocument,e=this.namespaceURI;return e===E&&n.documentElement.namespaceURI===E?n.createElement(t):n.createElementNS(e,t)}}function R(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}var D=function(t){var n=P(t);return(n.local?R:L)(n)};function j(){}var Y=function(t){return null==t?j:function(){return this.querySelector(t)}};function F(){return[]}var q=function(t){return null==t?F:function(){return this.querySelectorAll(t)}},H=function(t){return function(){return this.matches(t)}},O=function(t){return new Array(t.length)};function z(t,n){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=n}z.prototype={constructor:z,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,n){return this._parent.insertBefore(t,n)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var I="$";function X(t,n,e,i,r,o){for(var a,s=0,u=n.length,h=o.length;s<h;++s)(a=n[s])?(a.__data__=o[s],i[s]=a):e[s]=new z(t,o[s]);for(;s<u;++s)(a=n[s])&&(r[s]=a)}function B(t,n,e,i,r,o,a){var s,u,h,c={},l=n.length,f=o.length,_=new Array(l);for(s=0;s<l;++s)(u=n[s])&&(_[s]=h=I+a.call(u,u.__data__,s,n),h in c?r[s]=u:c[h]=u);for(s=0;s<f;++s)(u=c[h=I+a.call(t,o[s],s,o)])?(i[s]=u,u.__data__=o[s],c[h]=null):e[s]=new z(t,o[s]);for(s=0;s<l;++s)(u=n[s])&&c[_[s]]===u&&(r[s]=u)}function $(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function V(t){return function(){this.removeAttribute(t)}}function Z(t){return function(){this.removeAttributeNS(t.space,t.local)}}function W(t,n){return function(){this.setAttribute(t,n)}}function J(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}function Q(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}}function G(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}var K=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function tt(t){return function(){this.style.removeProperty(t)}}function nt(t,n,e){return function(){this.style.setProperty(t,n,e)}}function et(t,n,e){return function(){var i=n.apply(this,arguments);null==i?this.style.removeProperty(t):this.style.setProperty(t,i,e)}}function it(t,n){return t.style.getPropertyValue(n)||K(t).getComputedStyle(t,null).getPropertyValue(n)}function rt(t){return function(){delete this[t]}}function ot(t,n){return function(){this[t]=n}}function at(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}function st(t){return t.trim().split(/^|\s+/)}function ut(t){return t.classList||new ht(t)}function ht(t){this._node=t,this._names=st(t.getAttribute("class")||"")}function ct(t,n){for(var e=ut(t),i=-1,r=n.length;++i<r;)e.add(n[i])}function lt(t,n){for(var e=ut(t),i=-1,r=n.length;++i<r;)e.remove(n[i])}function ft(t){return function(){ct(this,t)}}function _t(t){return function(){lt(this,t)}}function pt(t,n){return function(){(n.apply(this,arguments)?ct:lt)(this,t)}}ht.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var n=this._names.indexOf(t);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function dt(){this.textContent=""}function vt(t){return function(){this.textContent=t}}function gt(t){return function(){var n=t.apply(this,arguments);this.textContent=null==n?"":n}}function yt(){this.innerHTML=""}function mt(t){return function(){this.innerHTML=t}}function xt(t){return function(){var n=t.apply(this,arguments);this.innerHTML=null==n?"":n}}function wt(){this.nextSibling&&this.parentNode.appendChild(this)}function bt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Mt(){return null}function kt(){var t=this.parentNode;t&&t.removeChild(this)}function Nt(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function Ct(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Tt={},At=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Tt={mouseenter:"mouseover",mouseleave:"mouseout"}));function St(t,n,e){return t=Et(t,n,e),function(n){var e=n.relatedTarget;e&&(e===this||8&e.compareDocumentPosition(this))||t.call(this,n)}}function Et(t,n,e){return function(i){var r=At;At=i;try{t.call(this,this.__data__,n,e)}finally{At=r}}}function Ut(t){return t.trim().split(/^|\s+/).map((function(t){var n="",e=t.indexOf(".");return e>=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}}))}function Pt(t){return function(){var n=this.__on;if(n){for(var e,i=0,r=-1,o=n.length;i<o;++i)e=n[i],t.type&&e.type!==t.type||e.name!==t.name?n[++r]=e:this.removeEventListener(e.type,e.listener,e.capture);++r?n.length=r:delete this.__on}}}function Lt(t,n,e){var i=Tt.hasOwnProperty(t.type)?St:Et;return function(r,o,a){var s,u=this.__on,h=i(n,o,a);if(u)for(var c=0,l=u.length;c<l;++c)if((s=u[c]).type===t.type&&s.name===t.name)return this.removeEventListener(s.type,s.listener,s.capture),this.addEventListener(s.type,s.listener=h,s.capture=e),void(s.value=n);this.addEventListener(t.type,h,e),s={type:t.type,name:t.name,value:n,listener:h,capture:e},u?u.push(s):this.__on=[s]}}function Rt(t,n,e){var i=K(t),r=i.CustomEvent;"function"==typeof r?r=new r(n,e):(r=i.document.createEvent("Event"),e?(r.initEvent(n,e.bubbles,e.cancelable),r.detail=e.detail):r.initEvent(n,!1,!1)),t.dispatchEvent(r)}function Dt(t,n){return function(){return Rt(this,t,n)}}function jt(t,n){return function(){return Rt(this,t,n.apply(this,arguments))}}var Yt=[null];function Ft(t,n){this._groups=t,this._parents=n}function qt(){return new Ft([[document.documentElement]],Yt)}Ft.prototype=qt.prototype={constructor:Ft,select:function(t){"function"!=typeof t&&(t=Y(t));for(var n=this._groups,e=n.length,i=new Array(e),r=0;r<e;++r)for(var o,a,s=n[r],u=s.length,h=i[r]=new Array(u),c=0;c<u;++c)(o=s[c])&&(a=t.call(o,o.__data__,c,s))&&("__data__"in o&&(a.__data__=o.__data__),h[c]=a);return new Ft(i,this._parents)},selectAll:function(t){"function"!=typeof t&&(t=q(t));for(var n=this._groups,e=n.length,i=[],r=[],o=0;o<e;++o)for(var a,s=n[o],u=s.length,h=0;h<u;++h)(a=s[h])&&(i.push(t.call(a,a.__data__,h,s)),r.push(a));return new Ft(i,r)},filter:function(t){"function"!=typeof t&&(t=H(t));for(var n=this._groups,e=n.length,i=new Array(e),r=0;r<e;++r)for(var o,a=n[r],s=a.length,u=i[r]=[],h=0;h<s;++h)(o=a[h])&&t.call(o,o.__data__,h,a)&&u.push(o);return new Ft(i,this._parents)},data:function(t,n){if(!t)return p=new Array(this.size()),c=-1,this.each((function(t){p[++c]=t})),p;var e,i=n?B:X,r=this._parents,o=this._groups;"function"!=typeof t&&(e=t,t=function(){return e});for(var a=o.length,s=new Array(a),u=new Array(a),h=new Array(a),c=0;c<a;++c){var l=r[c],f=o[c],_=f.length,p=t.call(l,l&&l.__data__,c,r),d=p.length,v=u[c]=new Array(d),g=s[c]=new Array(d);i(l,f,v,g,h[c]=new Array(_),p,n);for(var y,m,x=0,w=0;x<d;++x)if(y=v[x]){for(x>=w&&(w=x+1);!(m=g[w])&&++w<d;);y._next=m||null}}return(s=new Ft(s,r))._enter=u,s._exit=h,s},enter:function(){return new Ft(this._enter||this._groups.map(O),this._parents)},exit:function(){return new Ft(this._exit||this._groups.map(O),this._parents)},join:function(t,n,e){var i=this.enter(),r=this,o=this.exit();return i="function"==typeof t?t(i):i.append(t+""),null!=n&&(r=n(r)),null==e?o.remove():e(o),i&&r?i.merge(r).order():r},merge:function(t){for(var n=this._groups,e=t._groups,i=n.length,r=e.length,o=Math.min(i,r),a=new Array(i),s=0;s<o;++s)for(var u,h=n[s],c=e[s],l=h.length,f=a[s]=new Array(l),_=0;_<l;++_)(u=h[_]||c[_])&&(f[_]=u);for(;s<i;++s)a[s]=n[s];return new Ft(a,this._parents)},order:function(){for(var t=this._groups,n=-1,e=t.length;++n<e;)for(var i,r=t[n],o=r.length-1,a=r[o];--o>=0;)(i=r[o])&&(a&&4^i.compareDocumentPosition(a)&&a.parentNode.insertBefore(i,a),a=i);return this},sort:function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=$);for(var e=this._groups,i=e.length,r=new Array(i),o=0;o<i;++o){for(var a,s=e[o],u=s.length,h=r[o]=new Array(u),c=0;c<u;++c)(a=s[c])&&(h[c]=a);h.sort(n)}return new Ft(r,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){var t=new Array(this.size()),n=-1;return this.each((function(){t[++n]=this})),t},node:function(){for(var t=this._groups,n=0,e=t.length;n<e;++n)for(var i=t[n],r=0,o=i.length;r<o;++r){var a=i[r];if(a)return a}return null},size:function(){var t=0;return this.each((function(){++t})),t},empty:function(){return!this.node()},each:function(t){for(var n=this._groups,e=0,i=n.length;e<i;++e)for(var r,o=n[e],a=0,s=o.length;a<s;++a)(r=o[a])&&t.call(r,r.__data__,a,o);return this},attr:function(t,n){var e=P(t);if(arguments.length<2){var i=this.node();return e.local?i.getAttributeNS(e.space,e.local):i.getAttribute(e)}return this.each((null==n?e.local?Z:V:"function"==typeof n?e.local?G:Q:e.local?J:W)(e,n))},style:function(t,n,e){return arguments.length>1?this.each((null==n?tt:"function"==typeof n?et:nt)(t,n,null==e?"":e)):it(this.node(),t)},property:function(t,n){return arguments.length>1?this.each((null==n?rt:"function"==typeof n?at:ot)(t,n)):this.node()[t]},classed:function(t,n){var e=st(t+"");if(arguments.length<2){for(var i=ut(this.node()),r=-1,o=e.length;++r<o;)if(!i.contains(e[r]))return!1;return!0}return this.each(("function"==typeof n?pt:n?ft:_t)(e,n))},text:function(t){return arguments.length?this.each(null==t?dt:("function"==typeof t?gt:vt)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?yt:("function"==typeof t?xt:mt)(t)):this.node().innerHTML},raise:function(){return this.each(wt)},lower:function(){return this.each(bt)},append:function(t){var n="function"==typeof t?t:D(t);return this.select((function(){return this.appendChild(n.apply(this,arguments))}))},insert:function(t,n){var e="function"==typeof t?t:D(t),i=null==n?Mt:"function"==typeof n?n:Y(n);return this.select((function(){return this.insertBefore(e.apply(this,arguments),i.apply(this,arguments)||null)}))},remove:function(){return this.each(kt)},clone:function(t){return this.select(t?Ct:Nt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,n,e){var i,r,o=Ut(t+""),a=o.length;if(!(arguments.length<2)){for(s=n?Lt:Pt,null==e&&(e=!1),i=0;i<a;++i)this.each(s(o[i],n,e));return this}var s=this.node().__on;if(s)for(var u,h=0,c=s.length;h<c;++h)for(i=0,u=s[h];i<a;++i)if((r=o[i]).type===u.type&&r.name===u.name)return u.value},dispatch:function(t,n){return this.each(("function"==typeof n?jt:Dt)(t,n))}};var Ht=qt,Ot=function(t){return"string"==typeof t?new Ft([[document.querySelector(t)]],[document.documentElement]):new Ft([[t]],Yt)},zt=0;function It(){this._="@"+(++zt).toString(36)}It.prototype=function(){return new It}.prototype={constructor:It,get:function(t){for(var n=this._;!(n in t);)if(!(t=t.parentNode))return;return t[n]},set:function(t,n){return t[this._]=n},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var Xt=function(t){return"string"==typeof t?new Ft([document.querySelectorAll(t)],[document.documentElement]):new Ft([null==t?[]:t],Yt)};function Bt(t,n,e,i,r,o,a,s,u,h){this.target=t,this.type=n,this.subject=e,this.identifier=i,this.active=r,this.x=o,this.y=a,this.dx=s,this.dy=u,this._=h}Bt.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var $t=function(t,n,e){t.prototype=n.prototype=e,e.constructor=t};function Vt(t,n){var e=Object.create(t.prototype);for(var i in n)e[i]=n[i];return e}function Zt(){}var Wt="\\s*([+-]?\\d+)\\s*",Jt="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Qt="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Gt=/^#([0-9a-f]{3,8})$/,Kt=new RegExp("^rgb\\("+[Wt,Wt,Wt]+"\\)$"),tn=new RegExp("^rgb\\("+[Qt,Qt,Qt]+"\\)$"),nn=new RegExp("^rgba\\("+[Wt,Wt,Wt,Jt]+"\\)$"),en=new RegExp("^rgba\\("+[Qt,Qt,Qt,Jt]+"\\)$"),rn=new RegExp("^hsl\\("+[Jt,Qt,Qt]+"\\)$"),on=new RegExp("^hsla\\("+[Jt,Qt,Qt,Jt]+"\\)$"),an={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 sn(){return this.rgb().formatHex()}function un(){return this.rgb().formatRgb()}function hn(t){var n,e;return t=(t+"").trim().toLowerCase(),(n=Gt.exec(t))?(e=n[1].length,n=parseInt(n[1],16),6===e?cn(n):3===e?new pn(n>>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1):8===e?new pn(n>>24&255,n>>16&255,n>>8&255,(255&n)/255):4===e?new pn(n>>12&15|n>>8&240,n>>8&15|n>>4&240,n>>4&15|240&n,((15&n)<<4|15&n)/255):null):(n=Kt.exec(t))?new pn(n[1],n[2],n[3],1):(n=tn.exec(t))?new pn(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=nn.exec(t))?ln(n[1],n[2],n[3],n[4]):(n=en.exec(t))?ln(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=rn.exec(t))?yn(n[1],n[2]/100,n[3]/100,1):(n=on.exec(t))?yn(n[1],n[2]/100,n[3]/100,n[4]):an.hasOwnProperty(t)?cn(an[t]):"transparent"===t?new pn(NaN,NaN,NaN,0):null}function cn(t){return new pn(t>>16&255,t>>8&255,255&t,1)}function ln(t,n,e,i){return i<=0&&(t=n=e=NaN),new pn(t,n,e,i)}function fn(t){return t instanceof Zt||(t=hn(t)),t?new pn((t=t.rgb()).r,t.g,t.b,t.opacity):new pn}function _n(t,n,e,i){return 1===arguments.length?fn(t):new pn(t,n,e,null==i?1:i)}function pn(t,n,e,i){this.r=+t,this.g=+n,this.b=+e,this.opacity=+i}function dn(){return"#"+gn(this.r)+gn(this.g)+gn(this.b)}function vn(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function gn(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function yn(t,n,e,i){return i<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new wn(t,n,e,i)}function mn(t){if(t instanceof wn)return new wn(t.h,t.s,t.l,t.opacity);if(t instanceof Zt||(t=hn(t)),!t)return new wn;if(t instanceof wn)return t;var n=(t=t.rgb()).r/255,e=t.g/255,i=t.b/255,r=Math.min(n,e,i),o=Math.max(n,e,i),a=NaN,s=o-r,u=(o+r)/2;return s?(a=n===o?(e-i)/s+6*(e<i):e===o?(i-n)/s+2:(n-e)/s+4,s/=u<.5?o+r:2-o-r,a*=60):s=u>0&&u<1?0:a,new wn(a,s,u,t.opacity)}function xn(t,n,e,i){return 1===arguments.length?mn(t):new wn(t,n,e,null==i?1:i)}function wn(t,n,e,i){this.h=+t,this.s=+n,this.l=+e,this.opacity=+i}function bn(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Mn(t,n,e,i,r){var o=t*t,a=o*t;return((1-3*t+3*o-a)*n+(4-6*o+3*a)*e+(1+3*t+3*o-3*a)*i+a*r)/6}$t(Zt,hn,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:sn,formatHex:sn,formatHsl:function(){return mn(this).formatHsl()},formatRgb:un,toString:un}),$t(pn,_n,Vt(Zt,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new pn(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new pn(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){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:dn,formatHex:dn,formatRgb:vn,toString:vn})),$t(wn,xn,Vt(Zt,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new wn(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new wn(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),n=isNaN(t)||isNaN(this.s)?0:this.s,e=this.l,i=e+(e<.5?e:1-e)*n,r=2*e-i;return new pn(bn(t>=240?t-240:t+120,r,i),bn(t,r,i),bn(t<120?t+240:t-120,r,i),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var kn=function(t){return function(){return t}};function Nn(t,n){return function(e){return t+e*n}}function Cn(t,n){var e=n-t;return e?Nn(t,e>180||e<-180?e-360*Math.round(e/360):e):kn(isNaN(t)?n:t)}function Tn(t){return 1==(t=+t)?An:function(n,e){return e-n?function(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(i){return Math.pow(t+i*n,e)}}(n,e,t):kn(isNaN(n)?e:n)}}function An(t,n){var e=n-t;return e?Nn(t,e):kn(isNaN(t)?n:t)}var Sn=function t(n){var e=Tn(n);function i(t,n){var i=e((t=_n(t)).r,(n=_n(n)).r),r=e(t.g,n.g),o=e(t.b,n.b),a=An(t.opacity,n.opacity);return function(n){return t.r=i(n),t.g=r(n),t.b=o(n),t.opacity=a(n),t+""}}return i.gamma=t,i}(1);function En(t){return function(n){var e,i,r=n.length,o=new Array(r),a=new Array(r),s=new Array(r);for(e=0;e<r;++e)i=_n(n[e]),o[e]=i.r||0,a[e]=i.g||0,s[e]=i.b||0;return o=t(o),a=t(a),s=t(s),i.opacity=1,function(t){return i.r=o(t),i.g=a(t),i.b=s(t),i+""}}}En((function(t){var n=t.length-1;return function(e){var i=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),r=t[i],o=t[i+1],a=i>0?t[i-1]:2*r-o,s=i<n-1?t[i+2]:2*o-r;return Mn((e-i/n)*n,a,r,o,s)}})),En((function(t){var n=t.length;return function(e){var i=Math.floor(((e%=1)<0?++e:e)*n),r=t[(i+n-1)%n],o=t[i%n],a=t[(i+1)%n],s=t[(i+2)%n];return Mn((e-i/n)*n,r,o,a,s)}}));var Un=function(t,n){return n-=t=+t,function(e){return t+n*e}},Pn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Ln=new RegExp(Pn.source,"g");var Rn,Dn,jn,Yn,Fn=function(t,n){var e,i,r,o=Pn.lastIndex=Ln.lastIndex=0,a=-1,s=[],u=[];for(t+="",n+="";(e=Pn.exec(t))&&(i=Ln.exec(n));)(r=i.index)>o&&(r=n.slice(o,r),s[a]?s[a]+=r:s[++a]=r),(e=e[0])===(i=i[0])?s[a]?s[a]+=i:s[++a]=i:(s[++a]=null,u.push({i:a,x:Un(e,i)})),o=Ln.lastIndex;return o<n.length&&(r=n.slice(o),s[a]?s[a]+=r:s[++a]=r),s.length<2?u[0]?function(t){return function(n){return t(n)+""}}(u[0].x):function(t){return function(){return t}}(n):(n=u.length,function(t){for(var e,i=0;i<n;++i)s[(e=u[i]).i]=e.x(t);return s.join("")})},qn=180/Math.PI,Hn={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},On=function(t,n,e,i,r,o){var a,s,u;return(a=Math.sqrt(t*t+n*n))&&(t/=a,n/=a),(u=t*e+n*i)&&(e-=t*u,i-=n*u),(s=Math.sqrt(e*e+i*i))&&(e/=s,i/=s,u/=s),t*i<n*e&&(t=-t,n=-n,u=-u,a=-a),{translateX:r,translateY:o,rotate:Math.atan2(n,t)*qn,skewX:Math.atan(u)*qn,scaleX:a,scaleY:s}};function zn(t,n,e,i){function r(t){return t.length?t.pop()+" ":""}return function(o,a){var s=[],u=[];return o=t(o),a=t(a),function(t,i,r,o,a,s){if(t!==r||i!==o){var u=a.push("translate(",null,n,null,e);s.push({i:u-4,x:Un(t,r)},{i:u-2,x:Un(i,o)})}else(r||o)&&a.push("translate("+r+n+o+e)}(o.translateX,o.translateY,a.translateX,a.translateY,s,u),function(t,n,e,o){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(r(e)+"rotate(",null,i)-2,x:Un(t,n)})):n&&e.push(r(e)+"rotate("+n+i)}(o.rotate,a.rotate,s,u),function(t,n,e,o){t!==n?o.push({i:e.push(r(e)+"skewX(",null,i)-2,x:Un(t,n)}):n&&e.push(r(e)+"skewX("+n+i)}(o.skewX,a.skewX,s,u),function(t,n,e,i,o,a){if(t!==e||n!==i){var s=o.push(r(o)+"scale(",null,",",null,")");a.push({i:s-4,x:Un(t,e)},{i:s-2,x:Un(n,i)})}else 1===e&&1===i||o.push(r(o)+"scale("+e+","+i+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,s,u),o=a=null,function(t){for(var n,e=-1,i=u.length;++e<i;)s[(n=u[e]).i]=n.x(t);return s.join("")}}}var In=zn((function(t){return"none"===t?Hn:(Rn||(Rn=document.createElement("DIV"),Dn=document.documentElement,jn=document.defaultView),Rn.style.transform=t,t=jn.getComputedStyle(Dn.appendChild(Rn),null).getPropertyValue("transform"),Dn.removeChild(Rn),t=t.slice(7,-1).split(","),On(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))}),"px, ","px)","deg)"),Xn=zn((function(t){return null==t?Hn:(Yn||(Yn=document.createElementNS("http://www.w3.org/2000/svg","g")),Yn.setAttribute("transform",t),(t=Yn.transform.baseVal.consolidate())?(t=t.matrix,On(t.a,t.b,t.c,t.d,t.e,t.f)):Hn)}),", ",")",")");Math.SQRT2;function Bn(t){return function(n,e){var i=t((n=xn(n)).h,(e=xn(e)).h),r=An(n.s,e.s),o=An(n.l,e.l),a=An(n.opacity,e.opacity);return function(t){return n.h=i(t),n.s=r(t),n.l=o(t),n.opacity=a(t),n+""}}}Bn(Cn),Bn(An);var $n=Math.PI/180,Vn=180/Math.PI,Zn=.96422,Wn=1,Jn=.82521,Qn=4/29,Gn=6/29,Kn=3*Gn*Gn,te=Gn*Gn*Gn;function ne(t){if(t instanceof ie)return new ie(t.l,t.a,t.b,t.opacity);if(t instanceof ce)return le(t);t instanceof pn||(t=fn(t));var n,e,i=se(t.r),r=se(t.g),o=se(t.b),a=re((.2225045*i+.7168786*r+.0606169*o)/Wn);return i===r&&r===o?n=e=a:(n=re((.4360747*i+.3850649*r+.1430804*o)/Zn),e=re((.0139322*i+.0971045*r+.7141733*o)/Jn)),new ie(116*a-16,500*(n-a),200*(a-e),t.opacity)}function ee(t,n,e,i){return 1===arguments.length?ne(t):new ie(t,n,e,null==i?1:i)}function ie(t,n,e,i){this.l=+t,this.a=+n,this.b=+e,this.opacity=+i}function re(t){return t>te?Math.pow(t,1/3):t/Kn+Qn}function oe(t){return t>Gn?t*t*t:Kn*(t-Qn)}function ae(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function se(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function ue(t){if(t instanceof ce)return new ce(t.h,t.c,t.l,t.opacity);if(t instanceof ie||(t=ne(t)),0===t.a&&0===t.b)return new ce(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var n=Math.atan2(t.b,t.a)*Vn;return new ce(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function he(t,n,e,i){return 1===arguments.length?ue(t):new ce(t,n,e,null==i?1:i)}function ce(t,n,e,i){this.h=+t,this.c=+n,this.l=+e,this.opacity=+i}function le(t){if(isNaN(t.h))return new ie(t.l,0,0,t.opacity);var n=t.h*$n;return new ie(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}function fe(t){return function(n,e){var i=t((n=he(n)).h,(e=he(e)).h),r=An(n.c,e.c),o=An(n.l,e.l),a=An(n.opacity,e.opacity);return function(t){return n.h=i(t),n.c=r(t),n.l=o(t),n.opacity=a(t),n+""}}}$t(ie,ee,Vt(Zt,{brighter:function(t){return new ie(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new ie(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return new pn(ae(3.1338561*(n=Zn*oe(n))-1.6168667*(t=Wn*oe(t))-.4906146*(e=Jn*oe(e))),ae(-.9787684*n+1.9161415*t+.033454*e),ae(.0719453*n-.2289914*t+1.4052427*e),this.opacity)}})),$t(ce,he,Vt(Zt,{brighter:function(t){return new ce(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new ce(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return le(this).rgb()}}));fe(Cn),fe(An);var _e=-.29227,pe=-.90649,de=1.97294,ve=de*pe,ge=1.78277*de,ye=1.78277*_e- -.14861*pe;function me(t,n,e,i){return 1===arguments.length?function(t){if(t instanceof xe)return new xe(t.h,t.s,t.l,t.opacity);t instanceof pn||(t=fn(t));var n=t.r/255,e=t.g/255,i=t.b/255,r=(ye*i+ve*n-ge*e)/(ye+ve-ge),o=i-r,a=(de*(e-r)-_e*o)/pe,s=Math.sqrt(a*a+o*o)/(de*r*(1-r)),u=s?Math.atan2(a,o)*Vn-120:NaN;return new xe(u<0?u+360:u,s,r,t.opacity)}(t):new xe(t,n,e,null==i?1:i)}function xe(t,n,e,i){this.h=+t,this.s=+n,this.l=+e,this.opacity=+i}function we(t){return function n(e){function i(n,i){var r=t((n=me(n)).h,(i=me(i)).h),o=An(n.s,i.s),a=An(n.l,i.l),s=An(n.opacity,i.opacity);return function(t){return n.h=r(t),n.s=o(t),n.l=a(Math.pow(t,e)),n.opacity=s(t),n+""}}return e=+e,i.gamma=n,i}(1)}$t(xe,me,Vt(Zt,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new xe(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new xe(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*$n,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),i=Math.cos(t),r=Math.sin(t);return new pn(255*(n+e*(-.14861*i+1.78277*r)),255*(n+e*(_e*i+pe*r)),255*(n+e*(de*i)),this.opacity)}}));we(Cn),we(An);var be,Me,ke=0,Ne=0,Ce=0,Te=1e3,Ae=0,Se=0,Ee=0,Ue="object"==typeof performance&&performance.now?performance:Date,Pe="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Le(){return Se||(Pe(Re),Se=Ue.now()+Ee)}function Re(){Se=0}function De(){this._call=this._time=this._next=null}function je(t,n,e){var i=new De;return i.restart(t,n,e),i}function Ye(){Se=(Ae=Ue.now())+Ee,ke=Ne=0;try{!function(){Le(),++ke;for(var t,n=be;n;)(t=Se-n._time)>=0&&n._call.call(null,t),n=n._next;--ke}()}finally{ke=0,function(){var t,n,e=be,i=1/0;for(;e;)e._call?(i>e._time&&(i=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:be=n);Me=t,qe(i)}(),Se=0}}function Fe(){var t=Ue.now(),n=t-Ae;n>Te&&(Ee-=n,Ae=t)}function qe(t){ke||(Ne&&(Ne=clearTimeout(Ne)),t-Se>24?(t<1/0&&(Ne=setTimeout(Ye,t-Ue.now()-Ee)),Ce&&(Ce=clearInterval(Ce))):(Ce||(Ae=Ue.now(),Ce=setInterval(Fe,Te)),ke=1,Pe(Ye)))}De.prototype=je.prototype={constructor:De,restart:function(t,n,e){if("function"!=typeof t)throw new TypeError("callback is not a function");e=(null==e?Le():+e)+(null==n?0:+n),this._next||Me===this||(Me?Me._next=this:be=this,Me=this),this._call=t,this._time=e,qe()},stop:function(){this._call&&(this._call=null,this._time=1/0,qe())}};var He=function(t,n,e){var i=new De;return n=null==n?0:+n,i.restart((function(e){i.stop(),t(e+n)}),n,e),i},Oe=S("start","end","cancel","interrupt"),ze=[],Ie=0,Xe=1,Be=2,$e=3,Ve=4,Ze=5,We=6,Je=function(t,n,e,i,r,o){var a=t.__transition;if(a){if(e in a)return}else t.__transition={};!function(t,n,e){var i,r=t.__transition;function o(u){var h,c,l,f;if(e.state!==Xe)return s();for(h in r)if((f=r[h]).name===e.name){if(f.state===$e)return He(o);f.state===Ve?(f.state=We,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete r[h]):+h<n&&(f.state=We,f.timer.stop(),f.on.call("cancel",t,t.__data__,f.index,f.group),delete r[h])}if(He((function(){e.state===$e&&(e.state=Ve,e.timer.restart(a,e.delay,e.time),a(u))})),e.state=Be,e.on.call("start",t,t.__data__,e.index,e.group),e.state===Be){for(e.state=$e,i=new Array(l=e.tween.length),h=0,c=-1;h<l;++h)(f=e.tween[h].value.call(t,t.__data__,e.index,e.group))&&(i[++c]=f);i.length=c+1}}function a(n){for(var r=n<e.duration?e.ease.call(null,n/e.duration):(e.timer.restart(s),e.state=Ze,1),o=-1,a=i.length;++o<a;)i[o].call(t,r);e.state===Ze&&(e.on.call("end",t,t.__data__,e.index,e.group),s())}function s(){for(var i in e.state=We,e.timer.stop(),delete r[n],r)return;delete t.__transition}r[n]=e,e.timer=je((function(t){e.state=Xe,e.timer.restart(o,e.delay,e.time),e.delay<=t&&o(t-e.delay)}),0,e.time)}(t,e,{name:n,index:i,group:r,on:Oe,tween:ze,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:Ie})};function Qe(t,n){var e=Ke(t,n);if(e.state>Ie)throw new Error("too late; already scheduled");return e}function Ge(t,n){var e=Ke(t,n);if(e.state>$e)throw new Error("too late; already running");return e}function Ke(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("transition not found");return e}var ti=function(t,n){var e,i,r,o=t.__transition,a=!0;if(o){for(r in n=null==n?null:n+"",o)(e=o[r]).name===n?(i=e.state>Be&&e.state<Ze,e.state=We,e.timer.stop(),e.on.call(i?"interrupt":"cancel",t,t.__data__,e.index,e.group),delete o[r]):a=!1;a&&delete t.__transition}};function ni(t,n){var e,i;return function(){var r=Ge(this,t),o=r.tween;if(o!==e)for(var a=0,s=(i=e=o).length;a<s;++a)if(i[a].name===n){(i=i.slice()).splice(a,1);break}r.tween=i}}function ei(t,n,e){var i,r;if("function"!=typeof e)throw new Error;return function(){var o=Ge(this,t),a=o.tween;if(a!==i){r=(i=a).slice();for(var s={name:n,value:e},u=0,h=r.length;u<h;++u)if(r[u].name===n){r[u]=s;break}u===h&&r.push(s)}o.tween=r}}function ii(t,n,e){var i=t._id;return t.each((function(){var t=Ge(this,i);(t.value||(t.value={}))[n]=e.apply(this,arguments)})),function(t){return Ke(t,i).value[n]}}var ri=function(t,n){var e;return("number"==typeof n?Un:n instanceof hn?Sn:(e=hn(n))?(n=e,Sn):Fn)(t,n)};function oi(t){return function(){this.removeAttribute(t)}}function ai(t){return function(){this.removeAttributeNS(t.space,t.local)}}function si(t,n,e){var i,r,o=e+"";return function(){var a=this.getAttribute(t);return a===o?null:a===i?r:r=n(i=a,e)}}function ui(t,n,e){var i,r,o=e+"";return function(){var a=this.getAttributeNS(t.space,t.local);return a===o?null:a===i?r:r=n(i=a,e)}}function hi(t,n,e){var i,r,o;return function(){var a,s,u=e(this);if(null!=u)return(a=this.getAttribute(t))===(s=u+"")?null:a===i&&s===r?o:(r=s,o=n(i=a,u));this.removeAttribute(t)}}function ci(t,n,e){var i,r,o;return function(){var a,s,u=e(this);if(null!=u)return(a=this.getAttributeNS(t.space,t.local))===(s=u+"")?null:a===i&&s===r?o:(r=s,o=n(i=a,u));this.removeAttributeNS(t.space,t.local)}}function li(t,n){var e,i;function r(){var r=n.apply(this,arguments);return r!==i&&(e=(i=r)&&function(t,n){return function(e){this.setAttributeNS(t.space,t.local,n(e))}}(t,r)),e}return r._value=n,r}function fi(t,n){var e,i;function r(){var r=n.apply(this,arguments);return r!==i&&(e=(i=r)&&function(t,n){return function(e){this.setAttribute(t,n(e))}}(t,r)),e}return r._value=n,r}function _i(t,n){return function(){Qe(this,t).delay=+n.apply(this,arguments)}}function pi(t,n){return n=+n,function(){Qe(this,t).delay=n}}function di(t,n){return function(){Ge(this,t).duration=+n.apply(this,arguments)}}function vi(t,n){return n=+n,function(){Ge(this,t).duration=n}}function gi(t,n){if("function"!=typeof n)throw new Error;return function(){Ge(this,t).ease=n}}function yi(t,n,e){var i,r,o=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var n=t.indexOf(".");return n>=0&&(t=t.slice(0,n)),!t||"start"===t}))}(n)?Qe:Ge;return function(){var a=o(this,t),s=a.on;s!==i&&(r=(i=s).copy()).on(n,e),a.on=r}}var mi=Ht.prototype.constructor;function xi(t){return function(){this.style.removeProperty(t)}}function wi(t,n,e){var i,r;function o(){var o=n.apply(this,arguments);return o!==r&&(i=(r=o)&&function(t,n,e){return function(i){this.style.setProperty(t,n(i),e)}}(t,o,e)),i}return o._value=n,o}var bi=0;function Mi(t,n,e,i){this._groups=t,this._parents=n,this._name=e,this._id=i}function ki(){return++bi}var Ni=Ht.prototype;Mi.prototype=function(t){return Ht().transition(t)}.prototype={constructor:Mi,select:function(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=Y(t));for(var i=this._groups,r=i.length,o=new Array(r),a=0;a<r;++a)for(var s,u,h=i[a],c=h.length,l=o[a]=new Array(c),f=0;f<c;++f)(s=h[f])&&(u=t.call(s,s.__data__,f,h))&&("__data__"in s&&(u.__data__=s.__data__),l[f]=u,Je(l[f],n,e,f,l,Ke(s,e)));return new Mi(o,this._parents,n,e)},selectAll:function(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=q(t));for(var i=this._groups,r=i.length,o=[],a=[],s=0;s<r;++s)for(var u,h=i[s],c=h.length,l=0;l<c;++l)if(u=h[l]){for(var f,_=t.call(u,u.__data__,l,h),p=Ke(u,e),d=0,v=_.length;d<v;++d)(f=_[d])&&Je(f,n,e,d,_,p);o.push(_),a.push(u)}return new Mi(o,a,n,e)},filter:function(t){"function"!=typeof t&&(t=H(t));for(var n=this._groups,e=n.length,i=new Array(e),r=0;r<e;++r)for(var o,a=n[r],s=a.length,u=i[r]=[],h=0;h<s;++h)(o=a[h])&&t.call(o,o.__data__,h,a)&&u.push(o);return new Mi(i,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var n=this._groups,e=t._groups,i=n.length,r=e.length,o=Math.min(i,r),a=new Array(i),s=0;s<o;++s)for(var u,h=n[s],c=e[s],l=h.length,f=a[s]=new Array(l),_=0;_<l;++_)(u=h[_]||c[_])&&(f[_]=u);for(;s<i;++s)a[s]=n[s];return new Mi(a,this._parents,this._name,this._id)},selection:function(){return new mi(this._groups,this._parents)},transition:function(){for(var t=this._name,n=this._id,e=ki(),i=this._groups,r=i.length,o=0;o<r;++o)for(var a,s=i[o],u=s.length,h=0;h<u;++h)if(a=s[h]){var c=Ke(a,n);Je(a,t,e,h,s,{time:c.time+c.delay+c.duration,delay:0,duration:c.duration,ease:c.ease})}return new Mi(i,this._parents,t,e)},call:Ni.call,nodes:Ni.nodes,node:Ni.node,size:Ni.size,empty:Ni.empty,each:Ni.each,on:function(t,n){var e=this._id;return arguments.length<2?Ke(this.node(),e).on.on(t):this.each(yi(e,t,n))},attr:function(t,n){var e=P(t),i="transform"===e?Xn:ri;return this.attrTween(t,"function"==typeof n?(e.local?ci:hi)(e,i,ii(this,"attr."+t,n)):null==n?(e.local?ai:oi)(e):(e.local?ui:si)(e,i,n))},attrTween:function(t,n){var e="attr."+t;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(null==n)return this.tween(e,null);if("function"!=typeof n)throw new Error;var i=P(t);return this.tween(e,(i.local?li:fi)(i,n))},style:function(t,n,e){var i="transform"==(t+="")?In:ri;return null==n?this.styleTween(t,function(t,n){var e,i,r;return function(){var o=it(this,t),a=(this.style.removeProperty(t),it(this,t));return o===a?null:o===e&&a===i?r:r=n(e=o,i=a)}}(t,i)).on("end.style."+t,xi(t)):"function"==typeof n?this.styleTween(t,function(t,n,e){var i,r,o;return function(){var a=it(this,t),s=e(this),u=s+"";return null==s&&(this.style.removeProperty(t),u=s=it(this,t)),a===u?null:a===i&&u===r?o:(r=u,o=n(i=a,s))}}(t,i,ii(this,"style."+t,n))).each(function(t,n){var e,i,r,o,a="style."+n,s="end."+a;return function(){var u=Ge(this,t),h=u.on,c=null==u.value[a]?o||(o=xi(n)):void 0;h===e&&r===c||(i=(e=h).copy()).on(s,r=c),u.on=i}}(this._id,t)):this.styleTween(t,function(t,n,e){var i,r,o=e+"";return function(){var a=it(this,t);return a===o?null:a===i?r:r=n(i=a,e)}}(t,i,n),e).on("end.style."+t,null)},styleTween:function(t,n,e){var i="style."+(t+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==n)return this.tween(i,null);if("function"!=typeof n)throw new Error;return this.tween(i,wi(t,n,null==e?"":e))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var n=t(this);this.textContent=null==n?"":n}}(ii(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},remove:function(){return this.on("end.remove",(t=this._id,function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}));var t},tween:function(t,n){var e=this._id;if(t+="",arguments.length<2){for(var i,r=Ke(this.node(),e).tween,o=0,a=r.length;o<a;++o)if((i=r[o]).name===t)return i.value;return null}return this.each((null==n?ni:ei)(e,t,n))},delay:function(t){var n=this._id;return arguments.length?this.each(("function"==typeof t?_i:pi)(n,t)):Ke(this.node(),n).delay},duration:function(t){var n=this._id;return arguments.length?this.each(("function"==typeof t?di:vi)(n,t)):Ke(this.node(),n).duration},ease:function(t){var n=this._id;return arguments.length?this.each(gi(n,t)):Ke(this.node(),n).ease},end:function(){var t,n,e=this,i=e._id,r=e.size();return new Promise((function(o,a){var s={value:a},u={value:function(){0==--r&&o()}};e.each((function(){var e=Ge(this,i),r=e.on;r!==t&&((n=(t=r).copy())._.cancel.push(s),n._.interrupt.push(s),n._.end.push(u)),e.on=n}))}))}};(function t(n){function e(t){return Math.pow(t,n)}return n=+n,e.exponent=t,e})(3),function t(n){function e(t){return 1-Math.pow(1-t,n)}return n=+n,e.exponent=t,e}(3),function t(n){function e(t){return((t*=2)<=1?Math.pow(t,n):2-Math.pow(2-t,n))/2}return n=+n,e.exponent=t,e}(3),Math.PI;(function t(n){function e(t){return t*t*((n+1)*t-n)}return n=+n,e.overshoot=t,e})(1.70158),function t(n){function e(t){return--t*t*((n+1)*t+n)+1}return n=+n,e.overshoot=t,e}(1.70158),function t(n){function e(t){return((t*=2)<1?t*t*((n+1)*t-n):(t-=2)*t*((n+1)*t+n)+2)/2}return n=+n,e.overshoot=t,e}(1.70158);var Ci=2*Math.PI,Ti=(function t(n,e){var i=Math.asin(1/(n=Math.max(1,n)))*(e/=Ci);function r(t){return n*Math.pow(2,10*--t)*Math.sin((i-t)/e)}return r.amplitude=function(n){return t(n,e*Ci)},r.period=function(e){return t(n,e)},r}(1,.3),function t(n,e){var i=Math.asin(1/(n=Math.max(1,n)))*(e/=Ci);function r(t){return 1-n*Math.pow(2,-10*(t=+t))*Math.sin((t+i)/e)}return r.amplitude=function(n){return t(n,e*Ci)},r.period=function(e){return t(n,e)},r}(1,.3),function t(n,e){var i=Math.asin(1/(n=Math.max(1,n)))*(e/=Ci);function r(t){return((t=2*t-1)<0?n*Math.pow(2,10*t)*Math.sin((i-t)/e):2-n*Math.pow(2,-10*t)*Math.sin((i+t)/e))/2}return r.amplitude=function(n){return t(n,e*Ci)},r.period=function(e){return t(n,e)},r}(1,.3),{time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}});function Ai(t,n){for(var e;!(e=t.__transition)||!(e=e[n]);)if(!(t=t.parentNode))return Ti.time=Le(),Ti;return e}Ht.prototype.interrupt=function(t){return this.each((function(){ti(this,t)}))},Ht.prototype.transition=function(t){var n,e;t instanceof Mi?(n=t._id,t=t._name):(n=ki(),(e=Ti).time=Le(),t=null==t?null:t+"");for(var i=this._groups,r=i.length,o=0;o<r;++o)for(var a,s=i[o],u=s.length,h=0;h<u;++h)(a=s[h])&&Je(a,t,n,h,s,e||Ai(a,n));return new Mi(i,this._parents,t,n)};function Si(t){return[+t[0],+t[1]]}function Ei(t){return[Si(t[0]),Si(t[1])]}["w","e"].map(Ui),["n","s"].map(Ui),["n","w","e","s","nw","ne","sw","se"].map(Ui);function Ui(t){return{type:t}}Math.cos,Math.sin,Math.PI,Math.max;Array.prototype.slice;var Pi=Math.PI,Li=2*Pi,Ri=Li-1e-6;function Di(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function ji(){return new Di}Di.prototype=ji.prototype={constructor:Di,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,e,i){this._+="Q"+ +t+","+ +n+","+(this._x1=+e)+","+(this._y1=+i)},bezierCurveTo:function(t,n,e,i,r,o){this._+="C"+ +t+","+ +n+","+ +e+","+ +i+","+(this._x1=+r)+","+(this._y1=+o)},arcTo:function(t,n,e,i,r){t=+t,n=+n,e=+e,i=+i,r=+r;var o=this._x1,a=this._y1,s=e-t,u=i-n,h=o-t,c=a-n,l=h*h+c*c;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(l>1e-6)if(Math.abs(c*s-u*h)>1e-6&&r){var f=e-o,_=i-a,p=s*s+u*u,d=f*f+_*_,v=Math.sqrt(p),g=Math.sqrt(l),y=r*Math.tan((Pi-Math.acos((p+l-d)/(2*v*g)))/2),m=y/g,x=y/v;Math.abs(m-1)>1e-6&&(this._+="L"+(t+m*h)+","+(n+m*c)),this._+="A"+r+","+r+",0,0,"+ +(c*f>h*_)+","+(this._x1=t+x*s)+","+(this._y1=n+x*u)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,i,r,o){t=+t,n=+n,o=!!o;var a=(e=+e)*Math.cos(i),s=e*Math.sin(i),u=t+a,h=n+s,c=1^o,l=o?i-r:r-i;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+u+","+h:(Math.abs(this._x1-u)>1e-6||Math.abs(this._y1-h)>1e-6)&&(this._+="L"+u+","+h),e&&(l<0&&(l=l%Li+Li),l>Ri?this._+="A"+e+","+e+",0,1,"+c+","+(t-a)+","+(n-s)+"A"+e+","+e+",0,1,"+c+","+(this._x1=u)+","+(this._y1=h):l>1e-6&&(this._+="A"+e+","+e+",0,"+ +(l>=Pi)+","+c+","+(this._x1=t+e*Math.cos(r))+","+(this._y1=n+e*Math.sin(r))))},rect:function(t,n,e,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +i+"h"+-e+"Z"},toString:function(){return this._}};function Yi(){}function Fi(t,n){var e=new Yi;if(t instanceof Yi)t.each((function(t,n){e.set(n,t)}));else if(Array.isArray(t)){var i,r=-1,o=t.length;if(null==n)for(;++r<o;)e.set(r,t[r]);else for(;++r<o;)e.set(n(i=t[r],r,t),i)}else if(t)for(var a in t)e.set(a,t[a]);return e}Yi.prototype=Fi.prototype={constructor:Yi,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,n){return this["$"+t]=n,this},remove:function(t){var n="$"+t;return n in this&&delete this[n]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)"$"===n[0]&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)"$"===n[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var n in this)"$"===n[0]&&t(this[n],n.slice(1),this)}};var qi=Fi;function Hi(){}var Oi=qi.prototype;function zi(t,n){var e=new Hi;if(t instanceof Hi)t.each((function(t){e.add(t)}));else if(t){var i=-1,r=t.length;if(null==n)for(;++i<r;)e.add(t[i]);else for(;++i<r;)e.add(n(t[i],i,t))}return e}Hi.prototype=zi.prototype={constructor:Hi,has:Oi.has,add:function(t){return this["$"+(t+="")]=t,this},remove:Oi.remove,clear:Oi.clear,values:Oi.keys,size:Oi.size,empty:Oi.empty,each:Oi.each};Array.prototype.slice;var Ii={},Xi={},Bi=34,$i=10,Vi=13;function Zi(t){return new Function("d","return {"+t.map((function(t,n){return JSON.stringify(t)+": d["+n+"]"})).join(",")+"}")}function Wi(t){var n=Object.create(null),e=[];return t.forEach((function(t){for(var i in t)i in n||e.push(n[i]=i)})),e}function Ji(t,n){var e=t+"",i=e.length;return i<n?new Array(n-i+1).join(0)+e:e}function Qi(t){var n,e=t.getUTCHours(),i=t.getUTCMinutes(),r=t.getUTCSeconds(),o=t.getUTCMilliseconds();return isNaN(t)?"Invalid Date":((n=t.getUTCFullYear())<0?"-"+Ji(-n,6):n>9999?"+"+Ji(n,6):Ji(n,4))+"-"+Ji(t.getUTCMonth()+1,2)+"-"+Ji(t.getUTCDate(),2)+(o?"T"+Ji(e,2)+":"+Ji(i,2)+":"+Ji(r,2)+"."+Ji(o,3)+"Z":r?"T"+Ji(e,2)+":"+Ji(i,2)+":"+Ji(r,2)+"Z":i||e?"T"+Ji(e,2)+":"+Ji(i,2)+"Z":"")}var Gi=function(t){var n=new RegExp('["'+t+"\n\r]"),e=t.charCodeAt(0);function i(t,n){var i,r=[],o=t.length,a=0,s=0,u=o<=0,h=!1;function c(){if(u)return Xi;if(h)return h=!1,Ii;var n,i,r=a;if(t.charCodeAt(r)===Bi){for(;a++<o&&t.charCodeAt(a)!==Bi||t.charCodeAt(++a)===Bi;);return(n=a)>=o?u=!0:(i=t.charCodeAt(a++))===$i?h=!0:i===Vi&&(h=!0,t.charCodeAt(a)===$i&&++a),t.slice(r+1,n-1).replace(/""/g,'"')}for(;a<o;){if((i=t.charCodeAt(n=a++))===$i)h=!0;else if(i===Vi)h=!0,t.charCodeAt(a)===$i&&++a;else if(i!==e)continue;return t.slice(r,n)}return u=!0,t.slice(r,o)}for(t.charCodeAt(o-1)===$i&&--o,t.charCodeAt(o-1)===Vi&&--o;(i=c())!==Xi;){for(var l=[];i!==Ii&&i!==Xi;)l.push(i),i=c();n&&null==(l=n(l,s++))||r.push(l)}return r}function r(n,e){return n.map((function(n){return e.map((function(t){return a(n[t])})).join(t)}))}function o(n){return n.map(a).join(t)}function a(t){return null==t?"":t instanceof Date?Qi(t):n.test(t+="")?'"'+t.replace(/"/g,'""')+'"':t}return{parse:function(t,n){var e,r,o=i(t,(function(t,i){if(e)return e(t,i-1);r=t,e=n?function(t,n){var e=Zi(t);return function(i,r){return n(e(i),r,t)}}(t,n):Zi(t)}));return o.columns=r||[],o},parseRows:i,format:function(n,e){return null==e&&(e=Wi(n)),[e.map(a).join(t)].concat(r(n,e)).join("\n")},formatBody:function(t,n){return null==n&&(n=Wi(t)),r(t,n).join("\n")},formatRows:function(t){return t.map(o).join("\n")}}},Ki=Gi(","),tr=Ki.parse,nr=(Ki.parseRows,Ki.format,Ki.formatBody,Ki.formatRows,Gi("\t")),er=nr.parse;nr.parseRows,nr.format,nr.formatBody,nr.formatRows;function ir(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}var rr=function(t,n){return fetch(t,n).then(ir)};function or(t){return function(n,e,i){return 2===arguments.length&&"function"==typeof e&&(i=e,e=void 0),rr(n,e).then((function(n){return t(n,i)}))}}or(tr),or(er);function ar(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.json()}function sr(t){return function(n,e){return rr(n,e).then((function(n){return(new DOMParser).parseFromString(n,t)}))}}sr("application/xml"),sr("text/html"),sr("image/svg+xml");function ur(t,n,e,i){if(isNaN(n)||isNaN(e))return t;var r,o,a,s,u,h,c,l,f,_=t._root,p={data:i},d=t._x0,v=t._y0,g=t._x1,y=t._y1;if(!_)return t._root=p,t;for(;_.length;)if((h=n>=(o=(d+g)/2))?d=o:g=o,(c=e>=(a=(v+y)/2))?v=a:y=a,r=_,!(_=_[l=c<<1|h]))return r[l]=p,t;if(s=+t._x.call(null,_.data),u=+t._y.call(null,_.data),n===s&&e===u)return p.next=_,r?r[l]=p:t._root=p,t;do{r=r?r[l]=new Array(4):t._root=new Array(4),(h=n>=(o=(d+g)/2))?d=o:g=o,(c=e>=(a=(v+y)/2))?v=a:y=a}while((l=c<<1|h)==(f=(u>=a)<<1|s>=o));return r[f]=_,r[l]=p,t}var hr=function(t,n,e,i,r){this.node=t,this.x0=n,this.y0=e,this.x1=i,this.y1=r};function cr(t){return t[0]}function lr(t){return t[1]}function fr(t,n,e){var i=new _r(null==n?cr:n,null==e?lr:e,NaN,NaN,NaN,NaN);return null==t?i:i.addAll(t)}function _r(t,n,e,i,r,o){this._x=t,this._y=n,this._x0=e,this._y0=i,this._x1=r,this._y1=o,this._root=void 0}function pr(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}var dr=fr.prototype=_r.prototype;dr.copy=function(){var t,n,e=new _r(this._x,this._y,this._x0,this._y0,this._x1,this._y1),i=this._root;if(!i)return e;if(!i.length)return e._root=pr(i),e;for(t=[{source:i,target:e._root=new Array(4)}];i=t.pop();)for(var r=0;r<4;++r)(n=i.source[r])&&(n.length?t.push({source:n,target:i.target[r]=new Array(4)}):i.target[r]=pr(n));return e},dr.add=function(t){var n=+this._x.call(null,t),e=+this._y.call(null,t);return ur(this.cover(n,e),n,e,t)},dr.addAll=function(t){var n,e,i,r,o=t.length,a=new Array(o),s=new Array(o),u=1/0,h=1/0,c=-1/0,l=-1/0;for(e=0;e<o;++e)isNaN(i=+this._x.call(null,n=t[e]))||isNaN(r=+this._y.call(null,n))||(a[e]=i,s[e]=r,i<u&&(u=i),i>c&&(c=i),r<h&&(h=r),r>l&&(l=r));if(u>c||h>l)return this;for(this.cover(u,h).cover(c,l),e=0;e<o;++e)ur(this,a[e],s[e],t[e]);return this},dr.cover=function(t,n){if(isNaN(t=+t)||isNaN(n=+n))return this;var e=this._x0,i=this._y0,r=this._x1,o=this._y1;if(isNaN(e))r=(e=Math.floor(t))+1,o=(i=Math.floor(n))+1;else{for(var a,s,u=r-e,h=this._root;e>t||t>=r||i>n||n>=o;)switch(s=(n<i)<<1|t<e,(a=new Array(4))[s]=h,h=a,u*=2,s){case 0:r=e+u,o=i+u;break;case 1:e=r-u,o=i+u;break;case 2:r=e+u,i=o-u;break;case 3:e=r-u,i=o-u}this._root&&this._root.length&&(this._root=h)}return this._x0=e,this._y0=i,this._x1=r,this._y1=o,this},dr.data=function(){var t=[];return this.visit((function(n){if(!n.length)do{t.push(n.data)}while(n=n.next)})),t},dr.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},dr.find=function(t,n,e){var i,r,o,a,s,u,h,c=this._x0,l=this._y0,f=this._x1,_=this._y1,p=[],d=this._root;for(d&&p.push(new hr(d,c,l,f,_)),null==e?e=1/0:(c=t-e,l=n-e,f=t+e,_=n+e,e*=e);u=p.pop();)if(!(!(d=u.node)||(r=u.x0)>f||(o=u.y0)>_||(a=u.x1)<c||(s=u.y1)<l))if(d.length){var v=(r+a)/2,g=(o+s)/2;p.push(new hr(d[3],v,g,a,s),new hr(d[2],r,g,v,s),new hr(d[1],v,o,a,g),new hr(d[0],r,o,v,g)),(h=(n>=g)<<1|t>=v)&&(u=p[p.length-1],p[p.length-1]=p[p.length-1-h],p[p.length-1-h]=u)}else{var y=t-+this._x.call(null,d.data),m=n-+this._y.call(null,d.data),x=y*y+m*m;if(x<e){var w=Math.sqrt(e=x);c=t-w,l=n-w,f=t+w,_=n+w,i=d.data}}return i},dr.remove=function(t){if(isNaN(o=+this._x.call(null,t))||isNaN(a=+this._y.call(null,t)))return this;var n,e,i,r,o,a,s,u,h,c,l,f,_=this._root,p=this._x0,d=this._y0,v=this._x1,g=this._y1;if(!_)return this;if(_.length)for(;;){if((h=o>=(s=(p+v)/2))?p=s:v=s,(c=a>=(u=(d+g)/2))?d=u:g=u,n=_,!(_=_[l=c<<1|h]))return this;if(!_.length)break;(n[l+1&3]||n[l+2&3]||n[l+3&3])&&(e=n,f=l)}for(;_.data!==t;)if(i=_,!(_=_.next))return this;return(r=_.next)&&delete _.next,i?(r?i.next=r:delete i.next,this):n?(r?n[l]=r:delete n[l],(_=n[0]||n[1]||n[2]||n[3])&&_===(n[3]||n[2]||n[1]||n[0])&&!_.length&&(e?e[f]=_:this._root=_),this):(this._root=r,this)},dr.removeAll=function(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this},dr.root=function(){return this._root},dr.size=function(){var t=0;return this.visit((function(n){if(!n.length)do{++t}while(n=n.next)})),t},dr.visit=function(t){var n,e,i,r,o,a,s=[],u=this._root;for(u&&s.push(new hr(u,this._x0,this._y0,this._x1,this._y1));n=s.pop();)if(!t(u=n.node,i=n.x0,r=n.y0,o=n.x1,a=n.y1)&&u.length){var h=(i+o)/2,c=(r+a)/2;(e=u[3])&&s.push(new hr(e,h,c,o,a)),(e=u[2])&&s.push(new hr(e,i,c,h,a)),(e=u[1])&&s.push(new hr(e,h,r,o,c)),(e=u[0])&&s.push(new hr(e,i,r,h,c))}return this},dr.visitAfter=function(t){var n,e=[],i=[];for(this._root&&e.push(new hr(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var r=n.node;if(r.length){var o,a=n.x0,s=n.y0,u=n.x1,h=n.y1,c=(a+u)/2,l=(s+h)/2;(o=r[0])&&e.push(new hr(o,a,s,c,l)),(o=r[1])&&e.push(new hr(o,c,s,u,l)),(o=r[2])&&e.push(new hr(o,a,l,c,h)),(o=r[3])&&e.push(new hr(o,c,l,u,h))}i.push(n)}for(;n=i.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this},dr.x=function(t){return arguments.length?(this._x=t,this):this._x},dr.y=function(t){return arguments.length?(this._y=t,this):this._y};Math.PI,Math.sqrt(5);var vr=function(t,n){if((e=(t=n?t.toExponential(n-1):t.toExponential()).indexOf("e"))<0)return null;var e,i=t.slice(0,e);return[i.length>1?i[0]+i.slice(2):i,+t.slice(e+1)]},gr=function(t){return(t=vr(Math.abs(t)))?t[1]:NaN},yr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function mr(t){if(!(n=yr.exec(t)))throw new Error("invalid format: "+t);var n;return new xr({fill:n[1],align:n[2],sign:n[3],symbol:n[4],zero:n[5],width:n[6],comma:n[7],precision:n[8]&&n[8].slice(1),trim:n[9],type:n[10]})}function xr(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+""}mr.prototype=xr.prototype,xr.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 wr,br,Mr=function(t){t:for(var n,e=t.length,i=1,r=-1;i<e;++i)switch(t[i]){case".":r=n=i;break;case"0":0===r&&(r=i),n=i;break;default:if(r>0){if(!+t[i])break t;r=0}}return r>0?t.slice(0,r)+t.slice(n+1):t},kr=function(t,n){var e=vr(t,n);if(!e)return t+"";var i=e[0],r=e[1];return r<0?"0."+new Array(-r).join("0")+i:i.length>r+1?i.slice(0,r+1)+"."+i.slice(r+1):i+new Array(r-i.length+2).join("0")},Nr={"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return kr(100*t,n)},r:kr,s:function(t,n){var e=vr(t,n);if(!e)return t+"";var i=e[0],r=e[1],o=r-(wr=3*Math.max(-8,Math.min(8,Math.floor(r/3))))+1,a=i.length;return o===a?i:o>a?i+new Array(o-a+1).join("0"):o>0?i.slice(0,o)+"."+i.slice(o):"0."+new Array(1-o).join("0")+vr(t,Math.max(0,n+o-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Cr=function(t){return t},Tr=Array.prototype.map,Ar=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];br=function(t){var n,e,i=void 0===t.grouping||void 0===t.thousands?Cr:(n=Tr.call(t.grouping,Number),e=t.thousands+"",function(t,i){for(var r=t.length,o=[],a=0,s=n[0],u=0;r>0&&s>0&&(u+s+1>i&&(s=Math.max(1,i-u)),o.push(t.substring(r-=s,r+s)),!((u+=s+1)>i));)s=n[a=(a+1)%n.length];return o.reverse().join(e)}),r=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Cr:function(t){return function(n){return n.replace(/[0-9]/g,(function(n){return t[+n]}))}}(Tr.call(t.numerals,String)),u=void 0===t.percent?"%":t.percent+"",h=void 0===t.minus?"-":t.minus+"",c=void 0===t.nan?"NaN":t.nan+"";function l(t){var n=(t=mr(t)).fill,e=t.align,l=t.sign,f=t.symbol,_=t.zero,p=t.width,d=t.comma,v=t.precision,g=t.trim,y=t.type;"n"===y?(d=!0,y="g"):Nr[y]||(void 0===v&&(v=12),g=!0,y="g"),(_||"0"===n&&"="===e)&&(_=!0,n="0",e="=");var m="$"===f?r:"#"===f&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",x="$"===f?o:/[%p]/.test(y)?u:"",w=Nr[y],b=/[defgprs%]/.test(y);function M(t){var r,o,u,f=m,M=x;if("c"===y)M=w(t)+M,t="";else{var k=(t=+t)<0;if(t=isNaN(t)?c:w(Math.abs(t),v),g&&(t=Mr(t)),k&&0==+t&&(k=!1),f=(k?"("===l?l:h:"-"===l||"("===l?"":l)+f,M=("s"===y?Ar[8+wr/3]:"")+M+(k&&"("===l?")":""),b)for(r=-1,o=t.length;++r<o;)if(48>(u=t.charCodeAt(r))||u>57){M=(46===u?a+t.slice(r+1):t.slice(r))+M,t=t.slice(0,r);break}}d&&!_&&(t=i(t,1/0));var N=f.length+t.length+M.length,C=N<p?new Array(p-N+1).join(n):"";switch(d&&_&&(t=i(C+t,C.length?p-M.length:1/0),C=""),e){case"<":t=f+t+M+C;break;case"=":t=f+C+t+M;break;case"^":t=C.slice(0,N=C.length>>1)+f+t+M+C.slice(N);break;default:t=C+f+t+M}return s(t)}return v=void 0===v?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,v)):Math.max(0,Math.min(20,v)),M.toString=function(){return t+""},M}return{format:l,formatPrefix:function(t,n){var e=l(((t=mr(t)).type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(gr(n)/3))),r=Math.pow(10,-i),o=Ar[8+i/3];return function(t){return e(r*t)+o}}}}({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"}),br.format,br.formatPrefix;var Sr=function(){return new Er};function Er(){this.reset()}Er.prototype={constructor:Er,reset:function(){this.s=this.t=0},add:function(t){Pr(Ur,t,this.t),Pr(this,Ur.s,this.s),this.s?this.t+=Ur.t:this.s=Ur.t},valueOf:function(){return this.s}};var Ur=new Er;function Pr(t,n,e){var i=t.s=n+e,r=i-n,o=i-r;t.t=n-o+(e-r)}var Lr=1e-6,Rr=1e-12,Dr=Math.PI,jr=Dr/2,Yr=Dr/4,Fr=2*Dr,qr=Dr/180,Hr=Math.abs,Or=Math.atan,zr=Math.atan2,Ir=Math.cos,Xr=(Math.ceil,Math.exp),Br=(Math.floor,Math.log),$r=(Math.pow,Math.sin),Vr=Math.sign||function(t){return t>0?1:t<0?-1:0},Zr=Math.sqrt,Wr=Math.tan;function Jr(t){return t>1?0:t<-1?Dr:Math.acos(t)}function Qr(t){return t>1?jr:t<-1?-jr:Math.asin(t)}function Gr(){}Sr(),Sr();function Kr(t){var n=t[0],e=t[1],i=Ir(e);return[i*Ir(n),i*$r(n),$r(e)]}function to(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function no(t){var n=Zr(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}Sr();function eo(t,n){return[Hr(t)>Dr?t+Math.round(-t/Fr)*Fr:t,n]}eo.invert=eo;var io=function(){var t,n=[];return{point:function(n,e){t.push([n,e])},lineStart:function(){n.push(t=[])},lineEnd:Gr,rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))},result:function(){var e=n;return n=[],t=null,e}}},ro=function(t,n){return Hr(t[0]-n[0])<Lr&&Hr(t[1]-n[1])<Lr};function oo(t,n,e,i){this.x=t,this.z=n,this.o=e,this.e=i,this.v=!1,this.n=this.p=null}var ao=function(t,n,e,i,r){var o,a,s=[],u=[];if(t.forEach((function(t){if(!((n=t.length-1)<=0)){var n,e,i=t[0],a=t[n];if(ro(i,a)){for(r.lineStart(),o=0;o<n;++o)r.point((i=t[o])[0],i[1]);r.lineEnd()}else s.push(e=new oo(i,t,null,!0)),u.push(e.o=new oo(i,null,e,!1)),s.push(e=new oo(a,t,null,!1)),u.push(e.o=new oo(a,null,e,!0))}})),s.length){for(u.sort(n),so(s),so(u),o=0,a=u.length;o<a;++o)u[o].e=e=!e;for(var h,c,l=s[0];;){for(var f=l,_=!0;f.v;)if((f=f.n)===l)return;h=f.z,r.lineStart();do{if(f.v=f.o.v=!0,f.e){if(_)for(o=0,a=h.length;o<a;++o)r.point((c=h[o])[0],c[1]);else i(f.x,f.n.x,1,r);f=f.n}else{if(_)for(h=f.p.z,o=h.length-1;o>=0;--o)r.point((c=h[o])[0],c[1]);else i(f.x,f.p.x,-1,r);f=f.p}h=(f=f.o).z,_=!_}while(!f.v);r.lineEnd()}}};function so(t){if(n=t.length){for(var n,e,i=0,r=t[0];++i<n;)r.n=e=t[i],e.p=r,r=e;r.n=e=t[0],e.p=r}}var uo=Sr();function ho(t){return Hr(t[0])<=Dr?t[0]:Vr(t[0])*((Hr(t[0])+Dr)%Fr-Dr)}var co=function(t,n){var e=ho(n),i=n[1],r=$r(i),o=[$r(e),-Ir(e),0],a=0,s=0;uo.reset(),1===r?i=jr+Lr:-1===r&&(i=-jr-Lr);for(var u=0,h=t.length;u<h;++u)if(l=(c=t[u]).length)for(var c,l,f=c[l-1],_=ho(f),p=f[1]/2+Yr,d=$r(p),v=Ir(p),g=0;g<l;++g,_=m,d=w,v=b,f=y){var y=c[g],m=ho(y),x=y[1]/2+Yr,w=$r(x),b=Ir(x),M=m-_,k=M>=0?1:-1,N=k*M,C=N>Dr,T=d*w;if(uo.add(zr(T*k*$r(N),v*b+T*Ir(N))),a+=C?M+k*Fr:M,C^_>=e^m>=e){var A=to(Kr(f),Kr(y));no(A);var S=to(o,A);no(S);var E=(C^M>=0?-1:1)*Qr(S[2]);(i>E||i===E&&(A[0]||A[1]))&&(s+=C^M>=0?1:-1)}}return(a<-Lr||a<Lr&&uo<-Lr)^1&s},lo=function(t,n,e,i){return function(r){var o,a,s,u=n(r),c=io(),l=n(c),f=!1,_={point:p,lineStart:v,lineEnd:g,polygonStart:function(){_.point=y,_.lineStart=m,_.lineEnd=x,a=[],o=[]},polygonEnd:function(){_.point=p,_.lineStart=v,_.lineEnd=g,a=h(a);var t=co(o,i);a.length?(f||(r.polygonStart(),f=!0),ao(a,_o,t,e,r)):t&&(f||(r.polygonStart(),f=!0),r.lineStart(),e(null,null,1,r),r.lineEnd()),f&&(r.polygonEnd(),f=!1),a=o=null},sphere:function(){r.polygonStart(),r.lineStart(),e(null,null,1,r),r.lineEnd(),r.polygonEnd()}};function p(n,e){t(n,e)&&r.point(n,e)}function d(t,n){u.point(t,n)}function v(){_.point=d,u.lineStart()}function g(){_.point=p,u.lineEnd()}function y(t,n){s.push([t,n]),l.point(t,n)}function m(){l.lineStart(),s=[]}function x(){y(s[0][0],s[0][1]),l.lineEnd();var t,n,e,i,u=l.clean(),h=c.result(),_=h.length;if(s.pop(),o.push(s),s=null,_)if(1&u){if((n=(e=h[0]).length-1)>0){for(f||(r.polygonStart(),f=!0),r.lineStart(),t=0;t<n;++t)r.point((i=e[t])[0],i[1]);r.lineEnd()}}else _>1&&2&u&&h.push(h.pop().concat(h.shift())),a.push(h.filter(fo))}return _}};function fo(t){return t.length>1}function _o(t,n){return((t=t.x)[0]<0?t[1]-jr-Lr:jr-t[1])-((n=n.x)[0]<0?n[1]-jr-Lr:jr-n[1])}lo((function(){return!0}),(function(t){var n,e=NaN,i=NaN,r=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(o,a){var s=o>0?Dr:-Dr,u=Hr(o-e);Hr(u-Dr)<Lr?(t.point(e,i=(i+a)/2>0?jr:-jr),t.point(r,i),t.lineEnd(),t.lineStart(),t.point(s,i),t.point(o,i),n=0):r!==s&&u>=Dr&&(Hr(e-r)<Lr&&(e-=r*Lr),Hr(o-s)<Lr&&(o-=s*Lr),i=function(t,n,e,i){var r,o,a=$r(t-e);return Hr(a)>Lr?Or(($r(n)*(o=Ir(i))*$r(e)-$r(i)*(r=Ir(n))*$r(t))/(r*o*a)):(n+i)/2}(e,i,o,a),t.point(r,i),t.lineEnd(),t.lineStart(),t.point(s,i),n=0),t.point(e=o,i=a),r=s},lineEnd:function(){t.lineEnd(),e=i=NaN},clean:function(){return 2-n}}}),(function(t,n,e,i){var r;if(null==t)r=e*jr,i.point(-Dr,r),i.point(0,r),i.point(Dr,r),i.point(Dr,0),i.point(Dr,-r),i.point(0,-r),i.point(-Dr,-r),i.point(-Dr,0),i.point(-Dr,r);else if(Hr(t[0]-n[0])>Lr){var o=t[0]<n[0]?Dr:-Dr;r=e*o/2,i.point(-o,r),i.point(0,r),i.point(o,r)}else i.point(n[0],n[1])}),[-Dr,-jr]);Sr();Sr(),Sr();function po(t){this._context=t}po.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._context.moveTo(t,n),this._point=1;break;case 1:this._context.lineTo(t,n);break;default:this._context.moveTo(t+this._radius,n),this._context.arc(t,n,this._radius,0,Fr)}},result:Gr};Sr();function vo(){this._string=[]}function go(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}vo.prototype={_radius:4.5,_circle:go(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,n){switch(this._point){case 0:this._string.push("M",t,",",n),this._point=1;break;case 1:this._string.push("L",t,",",n);break;default:null==this._circle&&(this._circle=go(this._radius)),this._string.push("M",t,",",n,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};function yo(t){return function(n){var e=new mo;for(var i in t)e[i]=t[i];return e.stream=n,e}}function mo(){}mo.prototype={constructor:mo,point:function(t,n){this.stream.point(t,n)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};Ir(30*qr);yo({point:function(t,n){this.stream.point(t*qr,n*qr)}});function xo(t){return function(n,e){var i=Ir(n),r=Ir(e),o=t(i*r);return[o*r*$r(n),o*$r(e)]}}function wo(t){return function(n,e){var i=Zr(n*n+e*e),r=t(i),o=$r(r),a=Ir(r);return[zr(n*o,i*a),Qr(i&&e*o/i)]}}var bo=xo((function(t){return Zr(2/(1+t))}));bo.invert=wo((function(t){return 2*Qr(t/2)}));var Mo=xo((function(t){return(t=Jr(t))&&t/$r(t)}));Mo.invert=wo((function(t){return t}));function ko(t,n){return[t,Br(Wr((jr+n)/2))]}ko.invert=function(t,n){return[t,2*Or(Xr(n))-jr]};function No(t,n){return[t,n]}No.invert=No;var Co=1.340264,To=-.081106,Ao=893e-6,So=.003796,Eo=Zr(3)/2;function Uo(t,n){var e=Qr(Eo*$r(n)),i=e*e,r=i*i*i;return[t*Ir(e)/(Eo*(Co+3*To*i+r*(7*Ao+9*So*i))),e*(Co+To*i+r*(Ao+So*i))]}Uo.invert=function(t,n){for(var e,i=n,r=i*i,o=r*r*r,a=0;a<12&&(o=(r=(i-=e=(i*(Co+To*r+o*(Ao+So*r))-n)/(Co+3*To*r+o*(7*Ao+9*So*r)))*i)*r*r,!(Hr(e)<Rr));++a);return[Eo*t*(Co+3*To*r+o*(7*Ao+9*So*r))/Ir(i),Qr($r(i)/Eo)]};function Po(t,n){var e=Ir(n),i=Ir(t)*e;return[e*$r(t)/i,$r(n)/i]}Po.invert=wo(Or);function Lo(t,n){var e=n*n,i=e*e;return[t*(.8707-.131979*e+i*(i*(.003971*e-.001529*i)-.013791)),n*(1.007226+e*(.015085+i*(.028874*e-.044475-.005916*i)))]}Lo.invert=function(t,n){var e,i=n,r=25;do{var o=i*i,a=o*o;i-=e=(i*(1.007226+o*(.015085+a*(.028874*o-.044475-.005916*a)))-n)/(1.007226+o*(.045255+a*(.259866*o-.311325-.005916*11*a)))}while(Hr(e)>Lr&&--r>0);return[t/(.8707+(o=i*i)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),i]};function Ro(t,n){return[Ir(n)*$r(t),$r(n)]}Ro.invert=wo(Qr);function Do(t,n){var e=Ir(n),i=1+Ir(t)*e;return[e*$r(t)/i,$r(n)/i]}Do.invert=wo((function(t){return 2*Or(t)}));function jo(t,n){return[Br(Wr((jr+n)/2)),-t]}jo.invert=function(t,n){return[-n,2*Or(Xr(t))-jr]};function Yo(t){var n=0,e=t.children,i=e&&e.length;if(i)for(;--i>=0;)n+=e[i].value;else n=1;t.value=n}function Fo(t,n){var e,i,r,o,a,s=new zo(t),u=+t.value&&(s.value=t.value),h=[s];for(null==n&&(n=qo);e=h.pop();)if(u&&(e.value=+e.data.value),(r=n(e.data))&&(a=r.length))for(e.children=new Array(a),o=a-1;o>=0;--o)h.push(i=e.children[o]=new zo(r[o])),i.parent=e,i.depth=e.depth+1;return s.eachBefore(Oo)}function qo(t){return t.children}function Ho(t){t.data=t.data.data}function Oo(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function zo(t){this.data=t,this.depth=this.height=0,this.parent=null}zo.prototype=Fo.prototype={constructor:zo,count:function(){return this.eachAfter(Yo)},each:function(t){var n,e,i,r,o=this,a=[o];do{for(n=a.reverse(),a=[];o=n.pop();)if(t(o),e=o.children)for(i=0,r=e.length;i<r;++i)a.push(e[i])}while(a.length);return this},eachAfter:function(t){for(var n,e,i,r=this,o=[r],a=[];r=o.pop();)if(a.push(r),n=r.children)for(e=0,i=n.length;e<i;++e)o.push(n[e]);for(;r=a.pop();)t(r);return this},eachBefore:function(t){for(var n,e,i=this,r=[i];i=r.pop();)if(t(i),n=i.children)for(e=n.length-1;e>=0;--e)r.push(n[e]);return this},sum:function(t){return this.eachAfter((function(n){for(var e=+t(n.data)||0,i=n.children,r=i&&i.length;--r>=0;)e+=i[r].value;n.value=e}))},sort:function(t){return this.eachBefore((function(n){n.children&&n.children.sort(t)}))},path:function(t){for(var n=this,e=function(t,n){if(t===n)return t;var e=t.ancestors(),i=n.ancestors(),r=null;t=e.pop(),n=i.pop();for(;t===n;)r=t,t=e.pop(),n=i.pop();return r}(n,t),i=[n];n!==e;)n=n.parent,i.push(n);for(var r=i.length;t!==e;)i.splice(r,0,t),t=t.parent;return i},ancestors:function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},descendants:function(){var t=[];return this.each((function(n){t.push(n)})),t},leaves:function(){var t=[];return this.eachBefore((function(n){n.children||t.push(n)})),t},links:function(){var t=this,n=[];return t.each((function(e){e!==t&&n.push({source:e.parent,target:e})})),n},copy:function(){return Fo(this).eachBefore(Ho)}};Array.prototype.slice;var Io=function(t,n,e,i,r){for(var o,a=t.children,s=-1,u=a.length,h=t.value&&(i-n)/t.value;++s<u;)(o=a[s]).y0=e,o.y1=r,o.x0=n,o.x1=n+=o.value*h};function Xo(t,n){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=n}Xo.prototype=Object.create(zo.prototype);var Bo=function(t,n,e,i,r){for(var o,a=t.children,s=-1,u=a.length,h=t.value&&(r-e)/t.value;++s<u;)(o=a[s]).x0=n,o.x1=i,o.y0=e,o.y1=e+=o.value*h},$o=(1+Math.sqrt(5))/2;function Vo(t,n,e,i,r,o){for(var a,s,u,h,c,l,f,_,p,d,v,g=[],y=n.children,m=0,x=0,w=y.length,b=n.value;m<w;){u=r-e,h=o-i;do{c=y[x++].value}while(!c&&x<w);for(l=f=c,v=c*c*(d=Math.max(h/u,u/h)/(b*t)),p=Math.max(f/v,v/l);x<w;++x){if(c+=s=y[x].value,s<l&&(l=s),s>f&&(f=s),v=c*c*d,(_=Math.max(f/v,v/l))>p){c-=s;break}p=_}g.push(a={value:c,dice:u<h,children:y.slice(m,x)}),a.dice?Io(a,e,i,r,b?i+=h*c/b:o):Bo(a,e,i,b?e+=u*c/b:r,o),b-=c,m=x}return g}(function t(n){function e(t,e,i,r,o){Vo(n,t,e,i,r,o)}return e.ratio=function(n){return t((n=+n)>1?n:1)},e})($o),function t(n){function e(t,e,i,r,o){if((a=t._squarify)&&a.ratio===n)for(var a,s,u,h,c,l=-1,f=a.length,_=t.value;++l<f;){for(u=(s=a[l]).children,h=s.value=0,c=u.length;h<c;++h)s.value+=u[h].value;s.dice?Io(s,e,i,r,i+=(o-i)*s.value/_):Bo(s,e,i,e+=(r-e)*s.value/_,o),_-=s.value}else t._squarify=a=Vo(n,t,e,i,r,o),a.ratio=n}return e.ratio=function(n){return t((n=+n)>1?n:1)},e}($o);var Zo=function(){return Math.random()},Wo=(function t(n){function e(t,e){return t=null==t?0:+t,e=null==e?1:+e,1===arguments.length?(e=t,t=0):e-=t,function(){return n()*e+t}}return e.source=t,e}(Zo),function t(n){function e(t,e){var i,r;return t=null==t?0:+t,e=null==e?1:+e,function(){var o;if(null!=i)o=i,i=null;else do{i=2*n()-1,o=2*n()-1,r=i*i+o*o}while(!r||r>1);return t+e*o*Math.sqrt(-2*Math.log(r)/r)}}return e.source=t,e}(Zo)),Jo=(function t(n){function e(){var t=Wo.source(n).apply(this,arguments);return function(){return Math.exp(t())}}return e.source=t,e}(Zo),function t(n){function e(t){return function(){for(var e=0,i=0;i<t;++i)e+=n();return e}}return e.source=t,e}(Zo));(function t(n){function e(t){var e=Jo.source(n)(t);return function(){return e()/t}}return e.source=t,e})(Zo),function t(n){function e(t){return function(){return-Math.log(1-n())/t}}return e.source=t,e}(Zo);function Qo(t,n){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(n).domain(t)}return this}var Go=Array.prototype,Ko=(Go.map,Go.slice),ta={name:"implicit"};function na(){var t=qi(),n=[],e=[],i=ta;function r(r){var o=r+"",a=t.get(o);if(!a){if(i!==ta)return i;t.set(o,a=n.push(r))}return e[(a-1)%e.length]}return r.domain=function(e){if(!arguments.length)return n.slice();n=[],t=qi();for(var i,o,a=-1,s=e.length;++a<s;)t.has(o=(i=e[a])+"")||t.set(o,n.push(i));return r},r.range=function(t){return arguments.length?(e=Ko.call(t),r):e.slice()},r.unknown=function(t){return arguments.length?(i=t,r):i},r.copy=function(){return na(n,e).unknown(i)},Qo.apply(r,arguments),r}function ea(){var t,n,e=na().unknown(void 0),i=e.domain,r=e.range,o=[0,1],a=!1,s=0,h=0,c=.5;function l(){var e=i().length,l=o[1]<o[0],f=o[l-0],_=o[1-l];t=(_-f)/Math.max(1,e-s+2*h),a&&(t=Math.floor(t)),f+=(_-f-t*(e-s))*c,n=t*(1-s),a&&(f=Math.round(f),n=Math.round(n));var p=u(e).map((function(n){return f+t*n}));return r(l?p.reverse():p)}return delete e.unknown,e.domain=function(t){return arguments.length?(i(t),l()):i()},e.range=function(t){return arguments.length?(o=[+t[0],+t[1]],l()):o.slice()},e.rangeRound=function(t){return o=[+t[0],+t[1]],a=!0,l()},e.bandwidth=function(){return n},e.step=function(){return t},e.round=function(t){return arguments.length?(a=!!t,l()):a},e.padding=function(t){return arguments.length?(s=Math.min(1,h=+t),l()):s},e.paddingInner=function(t){return arguments.length?(s=Math.min(1,t),l()):s},e.paddingOuter=function(t){return arguments.length?(h=+t,l()):h},e.align=function(t){return arguments.length?(c=Math.max(0,Math.min(1,t)),l()):c},e.copy=function(){return ea(i(),o).round(a).paddingInner(s).paddingOuter(h).align(c)},Qo.apply(l(),arguments)}var ia=new Date,ra=new Date;function oa(t,n,e,i){function r(n){return t(n=0===arguments.length?new Date:new Date(+n)),n}return r.floor=function(n){return t(n=new Date(+n)),n},r.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},r.round=function(t){var n=r(t),e=r.ceil(t);return t-n<e-t?n:e},r.offset=function(t,e){return n(t=new Date(+t),null==e?1:Math.floor(e)),t},r.range=function(e,i,o){var a,s=[];if(e=r.ceil(e),o=null==o?1:Math.floor(o),!(e<i&&o>0))return s;do{s.push(a=new Date(+e)),n(e,o),t(e)}while(a<e&&e<i);return s},r.filter=function(e){return oa((function(n){if(n>=n)for(;t(n),!e(n);)n.setTime(n-1)}),(function(t,i){if(t>=t)if(i<0)for(;++i<=0;)for(;n(t,-1),!e(t););else for(;--i>=0;)for(;n(t,1),!e(t););}))},e&&(r.count=function(n,i){return ia.setTime(+n),ra.setTime(+i),t(ia),t(ra),Math.floor(e(ia,ra))},r.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?r.filter(i?function(n){return i(n)%t==0}:function(n){return r.count(0,n)%t==0}):r:null}),r}var aa=oa((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,n){t.setFullYear(t.getFullYear()+n)}),(function(t,n){return n.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));aa.every=function(t){return isFinite(t=Math.floor(t))&&t>0?oa((function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)}),(function(n,e){n.setFullYear(n.getFullYear()+e*t)})):null};var sa=aa,ua=(aa.range,oa((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,n){t.setMonth(t.getMonth()+n)}),(function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()}))),ha=(ua.range,6e4),ca=6048e5;function la(t){return oa((function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)}),(function(t,n){t.setDate(t.getDate()+7*n)}),(function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*ha)/ca}))}var fa=la(0),_a=la(1),pa=la(2),da=la(3),va=la(4),ga=la(5),ya=la(6),ma=(fa.range,_a.range,pa.range,da.range,va.range,ga.range,ya.range,oa((function(t){t.setHours(0,0,0,0)}),(function(t,n){t.setDate(t.getDate()+n)}),(function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*ha)/864e5}),(function(t){return t.getDate()-1}))),xa=ma,wa=(ma.range,oa((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-t.getMinutes()*ha)}),(function(t,n){t.setTime(+t+36e5*n)}),(function(t,n){return(n-t)/36e5}),(function(t){return t.getHours()}))),ba=(wa.range,oa((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,n){t.setTime(+t+n*ha)}),(function(t,n){return(n-t)/ha}),(function(t){return t.getMinutes()}))),Ma=(ba.range,oa((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,n){t.setTime(+t+1e3*n)}),(function(t,n){return(n-t)/1e3}),(function(t){return t.getUTCSeconds()}))),ka=(Ma.range,oa((function(){}),(function(t,n){t.setTime(+t+n)}),(function(t,n){return n-t})));ka.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?oa((function(n){n.setTime(Math.floor(n/t)*t)}),(function(n,e){n.setTime(+n+e*t)}),(function(n,e){return(e-n)/t})):ka:null};ka.range;function Na(t){return oa((function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)}),(function(t,n){t.setUTCDate(t.getUTCDate()+7*n)}),(function(t,n){return(n-t)/ca}))}var Ca=Na(0),Ta=Na(1),Aa=Na(2),Sa=Na(3),Ea=Na(4),Ua=Na(5),Pa=Na(6),La=(Ca.range,Ta.range,Aa.range,Sa.range,Ea.range,Ua.range,Pa.range,oa((function(t){t.setUTCHours(0,0,0,0)}),(function(t,n){t.setUTCDate(t.getUTCDate()+n)}),(function(t,n){return(n-t)/864e5}),(function(t){return t.getUTCDate()-1}))),Ra=La,Da=(La.range,oa((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)}),(function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()})));Da.every=function(t){return isFinite(t=Math.floor(t))&&t>0?oa((function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)}),(function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)})):null};var ja=Da;Da.range;function Ya(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Fa(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function qa(t,n,e){return{y:t,m:n,d:e,H:0,M:0,S:0,L:0}}var Ha,Oa={"-":"",_:" ",0:"0"},za=/^\s*\d+/,Ia=/^%/,Xa=/[\\^$*+?|[\]().{}]/g;function Ba(t,n,e){var i=t<0?"-":"",r=(i?-t:t)+"",o=r.length;return i+(o<e?new Array(e-o+1).join(n)+r:r)}function $a(t){return t.replace(Xa,"\\$&")}function Va(t){return new RegExp("^(?:"+t.map($a).join("|")+")","i")}function Za(t){for(var n={},e=-1,i=t.length;++e<i;)n[t[e].toLowerCase()]=e;return n}function Wa(t,n,e){var i=za.exec(n.slice(e,e+1));return i?(t.w=+i[0],e+i[0].length):-1}function Ja(t,n,e){var i=za.exec(n.slice(e,e+1));return i?(t.u=+i[0],e+i[0].length):-1}function Qa(t,n,e){var i=za.exec(n.slice(e,e+2));return i?(t.U=+i[0],e+i[0].length):-1}function Ga(t,n,e){var i=za.exec(n.slice(e,e+2));return i?(t.V=+i[0],e+i[0].length):-1}function Ka(t,n,e){var i=za.exec(n.slice(e,e+2));return i?(t.W=+i[0],e+i[0].length):-1}function ts(t,n,e){var i=za.exec(n.slice(e,e+4));return i?(t.y=+i[0],e+i[0].length):-1}function ns(t,n,e){var i=za.exec(n.slice(e,e+2));return i?(t.y=+i[0]+(+i[0]>68?1900:2e3),e+i[0].length):-1}function es(t,n,e){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(n.slice(e,e+6));return i?(t.Z=i[1]?0:-(i[2]+(i[3]||"00")),e+i[0].length):-1}function is(t,n,e){var i=za.exec(n.slice(e,e+1));return i?(t.q=3*i[0]-3,e+i[0].length):-1}function rs(t,n,e){var i=za.exec(n.slice(e,e+2));return i?(t.m=i[0]-1,e+i[0].length):-1}function os(t,n,e){var i=za.exec(n.slice(e,e+2));return i?(t.d=+i[0],e+i[0].length):-1}function as(t,n,e){var i=za.exec(n.slice(e,e+3));return i?(t.m=0,t.d=+i[0],e+i[0].length):-1}function ss(t,n,e){var i=za.exec(n.slice(e,e+2));return i?(t.H=+i[0],e+i[0].length):-1}function us(t,n,e){var i=za.exec(n.slice(e,e+2));return i?(t.M=+i[0],e+i[0].length):-1}function hs(t,n,e){var i=za.exec(n.slice(e,e+2));return i?(t.S=+i[0],e+i[0].length):-1}function cs(t,n,e){var i=za.exec(n.slice(e,e+3));return i?(t.L=+i[0],e+i[0].length):-1}function ls(t,n,e){var i=za.exec(n.slice(e,e+6));return i?(t.L=Math.floor(i[0]/1e3),e+i[0].length):-1}function fs(t,n,e){var i=Ia.exec(n.slice(e,e+1));return i?e+i[0].length:-1}function _s(t,n,e){var i=za.exec(n.slice(e));return i?(t.Q=+i[0],e+i[0].length):-1}function ps(t,n,e){var i=za.exec(n.slice(e));return i?(t.s=+i[0],e+i[0].length):-1}function ds(t,n){return Ba(t.getDate(),n,2)}function vs(t,n){return Ba(t.getHours(),n,2)}function gs(t,n){return Ba(t.getHours()%12||12,n,2)}function ys(t,n){return Ba(1+xa.count(sa(t),t),n,3)}function ms(t,n){return Ba(t.getMilliseconds(),n,3)}function xs(t,n){return ms(t,n)+"000"}function ws(t,n){return Ba(t.getMonth()+1,n,2)}function bs(t,n){return Ba(t.getMinutes(),n,2)}function Ms(t,n){return Ba(t.getSeconds(),n,2)}function ks(t){var n=t.getDay();return 0===n?7:n}function Ns(t,n){return Ba(fa.count(sa(t)-1,t),n,2)}function Cs(t,n){var e=t.getDay();return t=e>=4||0===e?va(t):va.ceil(t),Ba(va.count(sa(t),t)+(4===sa(t).getDay()),n,2)}function Ts(t){return t.getDay()}function As(t,n){return Ba(_a.count(sa(t)-1,t),n,2)}function Ss(t,n){return Ba(t.getFullYear()%100,n,2)}function Es(t,n){return Ba(t.getFullYear()%1e4,n,4)}function Us(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+Ba(n/60|0,"0",2)+Ba(n%60,"0",2)}function Ps(t,n){return Ba(t.getUTCDate(),n,2)}function Ls(t,n){return Ba(t.getUTCHours(),n,2)}function Rs(t,n){return Ba(t.getUTCHours()%12||12,n,2)}function Ds(t,n){return Ba(1+Ra.count(ja(t),t),n,3)}function js(t,n){return Ba(t.getUTCMilliseconds(),n,3)}function Ys(t,n){return js(t,n)+"000"}function Fs(t,n){return Ba(t.getUTCMonth()+1,n,2)}function qs(t,n){return Ba(t.getUTCMinutes(),n,2)}function Hs(t,n){return Ba(t.getUTCSeconds(),n,2)}function Os(t){var n=t.getUTCDay();return 0===n?7:n}function zs(t,n){return Ba(Ca.count(ja(t)-1,t),n,2)}function Is(t,n){var e=t.getUTCDay();return t=e>=4||0===e?Ea(t):Ea.ceil(t),Ba(Ea.count(ja(t),t)+(4===ja(t).getUTCDay()),n,2)}function Xs(t){return t.getUTCDay()}function Bs(t,n){return Ba(Ta.count(ja(t)-1,t),n,2)}function $s(t,n){return Ba(t.getUTCFullYear()%100,n,2)}function Vs(t,n){return Ba(t.getUTCFullYear()%1e4,n,4)}function Zs(){return"+0000"}function Ws(){return"%"}function Js(t){return+t}function Qs(t){return Math.floor(+t/1e3)}!function(t){Ha=function(t){var n=t.dateTime,e=t.date,i=t.time,r=t.periods,o=t.days,a=t.shortDays,s=t.months,u=t.shortMonths,h=Va(r),c=Za(r),l=Va(o),f=Za(o),_=Va(a),p=Za(a),d=Va(s),v=Za(s),g=Va(u),y=Za(u),m={a:function(t){return a[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return u[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:ds,e:ds,f:xs,H:vs,I:gs,j:ys,L:ms,m:ws,M:bs,p:function(t){return r[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Js,s:Qs,S:Ms,u:ks,U:Ns,V:Cs,w:Ts,W:As,x:null,X:null,y:Ss,Y:Es,Z:Us,"%":Ws},x={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return u[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Ps,e:Ps,f:Ys,H:Ls,I:Rs,j:Ds,L:js,m:Fs,M:qs,p:function(t){return r[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Js,s:Qs,S:Hs,u:Os,U:zs,V:Is,w:Xs,W:Bs,x:null,X:null,y:$s,Y:Vs,Z:Zs,"%":Ws},w={a:function(t,n,e){var i=_.exec(n.slice(e));return i?(t.w=p[i[0].toLowerCase()],e+i[0].length):-1},A:function(t,n,e){var i=l.exec(n.slice(e));return i?(t.w=f[i[0].toLowerCase()],e+i[0].length):-1},b:function(t,n,e){var i=g.exec(n.slice(e));return i?(t.m=y[i[0].toLowerCase()],e+i[0].length):-1},B:function(t,n,e){var i=d.exec(n.slice(e));return i?(t.m=v[i[0].toLowerCase()],e+i[0].length):-1},c:function(t,e,i){return k(t,n,e,i)},d:os,e:os,f:ls,H:ss,I:ss,j:as,L:cs,m:rs,M:us,p:function(t,n,e){var i=h.exec(n.slice(e));return i?(t.p=c[i[0].toLowerCase()],e+i[0].length):-1},q:is,Q:_s,s:ps,S:hs,u:Ja,U:Qa,V:Ga,w:Wa,W:Ka,x:function(t,n,i){return k(t,e,n,i)},X:function(t,n,e){return k(t,i,n,e)},y:ns,Y:ts,Z:es,"%":fs};function b(t,n){return function(e){var i,r,o,a=[],s=-1,u=0,h=t.length;for(e instanceof Date||(e=new Date(+e));++s<h;)37===t.charCodeAt(s)&&(a.push(t.slice(u,s)),null!=(r=Oa[i=t.charAt(++s)])?i=t.charAt(++s):r="e"===i?" ":"0",(o=n[i])&&(i=o(e,r)),a.push(i),u=s+1);return a.push(t.slice(u,s)),a.join("")}}function M(t,n){return function(e){var i,r,o=qa(1900,void 0,1);if(k(o,t,e+="",0)!=e.length)return null;if("Q"in o)return new Date(o.Q);if("s"in o)return new Date(1e3*o.s+("L"in o?o.L:0));if(!n||"Z"in o||(o.Z=0),"p"in o&&(o.H=o.H%12+12*o.p),void 0===o.m&&(o.m="q"in o?o.q:0),"V"in o){if(o.V<1||o.V>53)return null;"w"in o||(o.w=1),"Z"in o?(r=(i=Fa(qa(o.y,0,1))).getUTCDay(),i=r>4||0===r?Ta.ceil(i):Ta(i),i=Ra.offset(i,7*(o.V-1)),o.y=i.getUTCFullYear(),o.m=i.getUTCMonth(),o.d=i.getUTCDate()+(o.w+6)%7):(r=(i=Ya(qa(o.y,0,1))).getDay(),i=r>4||0===r?_a.ceil(i):_a(i),i=xa.offset(i,7*(o.V-1)),o.y=i.getFullYear(),o.m=i.getMonth(),o.d=i.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),r="Z"in o?Fa(qa(o.y,0,1)).getUTCDay():Ya(qa(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(r+5)%7:o.w+7*o.U-(r+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,Fa(o)):Ya(o)}}function k(t,n,e,i){for(var r,o,a=0,s=n.length,u=e.length;a<s;){if(i>=u)return-1;if(37===(r=n.charCodeAt(a++))){if(r=n.charAt(a++),!(o=w[r in Oa?n.charAt(a++):r])||(i=o(t,e,i))<0)return-1}else if(r!=e.charCodeAt(i++))return-1}return i}return(m.x=b(e,m),m.X=b(i,m),m.c=b(n,m),x.x=b(e,x),x.X=b(i,x),x.c=b(n,x),{format:function(t){var n=b(t+="",m);return n.toString=function(){return t},n},parse:function(t){var n=M(t+="",!1);return n.toString=function(){return t},n},utcFormat:function(t){var n=b(t+="",x);return n.toString=function(){return t},n},utcParse:function(t){var n=M(t+="",!0);return n.toString=function(){return t},n}})}(t),Ha.format,Ha.parse,Ha.utcFormat,Ha.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 Gs=oa((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,n){t.setUTCMonth(t.getUTCMonth()+n)}),(function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})),Ks=(Gs.range,oa((function(t){t.setUTCMinutes(0,0,0)}),(function(t,n){t.setTime(+t+36e5*n)}),(function(t,n){return(n-t)/36e5}),(function(t){return t.getUTCHours()}))),tu=(Ks.range,oa((function(t){t.setUTCSeconds(0,0)}),(function(t,n){t.setTime(+t+n*ha)}),(function(t,n){return(n-t)/ha}),(function(t){return t.getUTCMinutes()})));tu.range;Math.abs,Math.atan2,Math.cos,Math.max,Math.min,Math.sin,Math.sqrt;var nu=1e-12,eu=Math.PI,iu=2*eu;function ru(t){this._context=t}ru.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,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var ou=function(t){return new ru(t)};su(ou);function au(t){this._curve=t}function su(t){function n(n){return new au(t(n))}return n._curve=t,n}au.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};Array.prototype.slice;Math.sqrt(1/3);var uu=Math.sin(eu/10)/Math.sin(7*eu/10),hu=(Math.sin(iu/10),Math.cos(iu/10),Math.sqrt(3),Math.sqrt(3),Math.sqrt(12),function(){});function cu(t,n,e){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+n)/6,(t._y0+4*t._y1+e)/6)}function lu(t){this._context=t}lu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:cu(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:cu(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};function fu(t){this._context=t}fu.prototype={areaStart:hu,areaEnd:hu,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:cu(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};function _u(t){this._context=t}_u.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var e=(this._x0+4*this._x1+t)/6,i=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(e,i):this._context.moveTo(e,i);break;case 3:this._point=4;default:cu(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}};function pu(t,n){this._basis=new lu(t),this._beta=n}pu.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,e=t.length-1;if(e>0)for(var i,r=t[0],o=n[0],a=t[e]-r,s=n[e]-o,u=-1;++u<=e;)i=u/e,this._basis.point(this._beta*t[u]+(1-this._beta)*(r+i*a),this._beta*n[u]+(1-this._beta)*(o+i*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};(function t(n){function e(t){return 1===n?new lu(t):new pu(t,n)}return e.beta=function(n){return t(+n)},e})(.85);function du(t,n,e){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-n),t._y2+t._k*(t._y1-e),t._x2,t._y2)}function vu(t,n){this._context=t,this._k=(1-n)/6}vu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:du(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:du(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};(function t(n){function e(t){return new vu(t,n)}return e.tension=function(n){return t(+n)},e})(0);function gu(t,n){this._context=t,this._k=(1-n)/6}gu.prototype={areaStart:hu,areaEnd:hu,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:du(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};(function t(n){function e(t){return new gu(t,n)}return e.tension=function(n){return t(+n)},e})(0);function yu(t,n){this._context=t,this._k=(1-n)/6}yu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:du(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};(function t(n){function e(t){return new yu(t,n)}return e.tension=function(n){return t(+n)},e})(0);function mu(t,n,e){var i=t._x1,r=t._y1,o=t._x2,a=t._y2;if(t._l01_a>nu){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);i=(i*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,r=(r*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>nu){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*h+t._x1*t._l23_2a-n*t._l12_2a)/c,a=(a*h+t._y1*t._l23_2a-e*t._l12_2a)/c}t._context.bezierCurveTo(i,r,o,a,t._x2,t._y2)}function xu(t,n){this._context=t,this._alpha=n}xu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,i=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:mu(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};(function t(n){function e(t){return n?new xu(t,n):new vu(t,0)}return e.alpha=function(n){return t(+n)},e})(.5);function wu(t,n){this._context=t,this._alpha=n}wu.prototype={areaStart:hu,areaEnd:hu,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,i=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:mu(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};(function t(n){function e(t){return n?new wu(t,n):new gu(t,0)}return e.alpha=function(n){return t(+n)},e})(.5);function bu(t,n){this._context=t,this._alpha=n}bu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,i=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+i*i,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:mu(this,t,n)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};(function t(n){function e(t){return n?new bu(t,n):new yu(t,0)}return e.alpha=function(n){return t(+n)},e})(.5);function Mu(t){this._context=t}Mu.prototype={areaStart:hu,areaEnd:hu,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,n){t=+t,n=+n,this._point?this._context.lineTo(t,n):(this._point=1,this._context.moveTo(t,n))}};function ku(t){return t<0?-1:1}function Nu(t,n,e){var i=t._x1-t._x0,r=n-t._x1,o=(t._y1-t._y0)/(i||r<0&&-0),a=(e-t._y1)/(r||i<0&&-0),s=(o*r+a*i)/(i+r);return(ku(o)+ku(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Cu(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function Tu(t,n,e){var i=t._x0,r=t._y0,o=t._x1,a=t._y1,s=(o-i)/3;t._context.bezierCurveTo(i+s,r+s*n,o-s,a-s*e,o,a)}function Au(t){this._context=t}function Su(t){this._context=new Eu(t)}function Eu(t){this._context=t}function Uu(t){this._context=t}function Pu(t){var n,e,i=t.length-1,r=new Array(i),o=new Array(i),a=new Array(i);for(r[0]=0,o[0]=2,a[0]=t[0]+2*t[1],n=1;n<i-1;++n)r[n]=1,o[n]=4,a[n]=4*t[n]+2*t[n+1];for(r[i-1]=2,o[i-1]=7,a[i-1]=8*t[i-1]+t[i],n=1;n<i;++n)e=r[n]/o[n-1],o[n]-=e,a[n]-=e*a[n-1];for(r[i-1]=a[i-1]/o[i-1],n=i-2;n>=0;--n)r[n]=(a[n]-r[n+1])/o[n];for(o[i-1]=(t[i]+r[i-1])/2,n=0;n<i-1;++n)o[n]=2*t[n+1]-r[n+1];return[r,o]}Au.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Tu(this,this._t0,Cu(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var e=NaN;if(n=+n,(t=+t)!==this._x1||n!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,Tu(this,Cu(this,e=Nu(this,t,n)),e);break;default:Tu(this,this._t0,e=Nu(this,t,n))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=e}}},(Su.prototype=Object.create(Au.prototype)).point=function(t,n){Au.prototype.point.call(this,n,t)},Eu.prototype={moveTo:function(t,n){this._context.moveTo(n,t)},closePath:function(){this._context.closePath()},lineTo:function(t,n){this._context.lineTo(n,t)},bezierCurveTo:function(t,n,e,i,r,o){this._context.bezierCurveTo(n,t,i,e,o,r)}},Uu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,n=this._y,e=t.length;if(e)if(this._line?this._context.lineTo(t[0],n[0]):this._context.moveTo(t[0],n[0]),2===e)this._context.lineTo(t[1],n[1]);else for(var i=Pu(t),r=Pu(n),o=0,a=1;a<e;++o,++a)this._context.bezierCurveTo(i[0][o],r[0][o],i[1][o],r[1][o],t[a],n[a]);(this._line||0!==this._line&&1===e)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,n){this._x.push(+t),this._y.push(+n)}};function Lu(t,n){this._context=t,this._t=n}Lu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var e=this._x*(1-this._t)+t*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,n)}}this._x=t,this._y=n}};function Ru(){this._=null}function Du(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function ju(t,n){var e=n,i=n.R,r=e.U;r?r.L===e?r.L=i:r.R=i:t._=i,i.U=r,e.U=i,e.R=i.L,e.R&&(e.R.U=e),i.L=e}function Yu(t,n){var e=n,i=n.L,r=e.U;r?r.L===e?r.L=i:r.R=i:t._=i,i.U=r,e.U=i,e.L=i.R,e.L&&(e.L.U=e),i.R=e}function Fu(t){for(;t.L;)t=t.L;return t}Ru.prototype={constructor:Ru,insert:function(t,n){var e,i,r;if(t){if(n.P=t,n.N=t.N,t.N&&(t.N.P=n),t.N=n,t.R){for(t=t.R;t.L;)t=t.L;t.L=n}else t.R=n;e=t}else this._?(t=Fu(this._),n.P=null,n.N=t,t.P=t.L=n,e=t):(n.P=n.N=null,this._=n,e=null);for(n.L=n.R=null,n.U=e,n.C=!0,t=n;e&&e.C;)e===(i=e.U).L?(r=i.R)&&r.C?(e.C=r.C=!1,i.C=!0,t=i):(t===e.R&&(ju(this,e),e=(t=e).U),e.C=!1,i.C=!0,Yu(this,i)):(r=i.L)&&r.C?(e.C=r.C=!1,i.C=!0,t=i):(t===e.L&&(Yu(this,e),e=(t=e).U),e.C=!1,i.C=!0,ju(this,i)),e=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var n,e,i,r=t.U,o=t.L,a=t.R;if(e=o?a?Fu(a):o:a,r?r.L===t?r.L=e:r.R=e:this._=e,o&&a?(i=e.C,e.C=t.C,e.L=o,o.U=e,e!==a?(r=e.U,e.U=t.U,t=e.R,r.L=t,e.R=a,a.U=e):(e.U=r,r=e,t=e.R)):(i=t.C,t=e),t&&(t.U=r),!i)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===r.L){if((n=r.R).C&&(n.C=!1,r.C=!0,ju(this,r),n=r.R),n.L&&n.L.C||n.R&&n.R.C){n.R&&n.R.C||(n.L.C=!1,n.C=!0,Yu(this,n),n=r.R),n.C=r.C,r.C=n.R.C=!1,ju(this,r),t=this._;break}}else if((n=r.L).C&&(n.C=!1,r.C=!0,Yu(this,r),n=r.L),n.L&&n.L.C||n.R&&n.R.C){n.L&&n.L.C||(n.R.C=!1,n.C=!0,ju(this,n),n=r.L),n.C=r.C,r.C=n.L.C=!1,Yu(this,r),t=this._;break}n.C=!0,t=r,r=r.U}while(!t.C);t&&(t.C=!1)}}};var qu=Ru;function Hu(t,n,e,i){var r=[null,null],o=ch.push(r)-1;return r.left=t,r.right=n,e&&zu(r,t,n,e),i&&zu(r,n,t,i),uh[t.index].halfedges.push(o),uh[n.index].halfedges.push(o),r}function Ou(t,n,e){var i=[n,e];return i.left=t,i}function zu(t,n,e,i){t[0]||t[1]?t.left===e?t[1]=i:t[0]=i:(t[0]=i,t.left=n,t.right=e)}function Iu(t,n,e,i,r){var o,a=t[0],s=t[1],u=a[0],h=a[1],c=0,l=1,f=s[0]-u,_=s[1]-h;if(o=n-u,f||!(o>0)){if(o/=f,f<0){if(o<c)return;o<l&&(l=o)}else if(f>0){if(o>l)return;o>c&&(c=o)}if(o=i-u,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>c&&(c=o)}else if(f>0){if(o<c)return;o<l&&(l=o)}if(o=e-h,_||!(o>0)){if(o/=_,_<0){if(o<c)return;o<l&&(l=o)}else if(_>0){if(o>l)return;o>c&&(c=o)}if(o=r-h,_||!(o<0)){if(o/=_,_<0){if(o>l)return;o>c&&(c=o)}else if(_>0){if(o<c)return;o<l&&(l=o)}return!(c>0||l<1)||(c>0&&(t[0]=[u+c*f,h+c*_]),l<1&&(t[1]=[u+l*f,h+l*_]),!0)}}}}}function Xu(t,n,e,i,r){var o=t[1];if(o)return!0;var a,s,u=t[0],h=t.left,c=t.right,l=h[0],f=h[1],_=c[0],p=c[1],d=(l+_)/2,v=(f+p)/2;if(p===f){if(d<n||d>=i)return;if(l>_){if(u){if(u[1]>=r)return}else u=[d,e];o=[d,r]}else{if(u){if(u[1]<e)return}else u=[d,r];o=[d,e]}}else if(s=v-(a=(l-_)/(p-f))*d,a<-1||a>1)if(l>_){if(u){if(u[1]>=r)return}else u=[(e-s)/a,e];o=[(r-s)/a,r]}else{if(u){if(u[1]<e)return}else u=[(r-s)/a,r];o=[(e-s)/a,e]}else if(f<p){if(u){if(u[0]>=i)return}else u=[n,a*n+s];o=[i,a*i+s]}else{if(u){if(u[0]<n)return}else u=[i,a*i+s];o=[n,a*n+s]}return t[0]=u,t[1]=o,!0}function Bu(t,n){var e=t.site,i=n.left,r=n.right;return e===r&&(r=i,i=e),r?Math.atan2(r[1]-i[1],r[0]-i[0]):(e===i?(i=n[1],r=n[0]):(i=n[0],r=n[1]),Math.atan2(i[0]-r[0],r[1]-i[1]))}function $u(t,n){return n[+(n.left!==t.site)]}function Vu(t,n){return n[+(n.left===t.site)]}var Zu,Wu=[];function Ju(){Du(this),this.x=this.y=this.arc=this.site=this.cy=null}function Qu(t){var n=t.P,e=t.N;if(n&&e){var i=n.site,r=t.site,o=e.site;if(i!==o){var a=r[0],s=r[1],u=i[0]-a,h=i[1]-s,c=o[0]-a,l=o[1]-s,f=2*(u*l-h*c);if(!(f>=-fh)){var _=u*u+h*h,p=c*c+l*l,d=(l*_-h*p)/f,v=(u*p-c*_)/f,g=Wu.pop()||new Ju;g.arc=t,g.site=r,g.x=d+a,g.y=(g.cy=v+s)+Math.sqrt(d*d+v*v),t.circle=g;for(var y=null,m=hh._;m;)if(g.y<m.y||g.y===m.y&&g.x<=m.x){if(!m.L){y=m.P;break}m=m.L}else{if(!m.R){y=m;break}m=m.R}hh.insert(y,g),y||(Zu=g)}}}}function Gu(t){var n=t.circle;n&&(n.P||(Zu=n.N),hh.remove(n),Wu.push(n),Du(n),t.circle=null)}var Ku=[];function th(){Du(this),this.edge=this.site=this.circle=null}function nh(t){var n=Ku.pop()||new th;return n.site=t,n}function eh(t){Gu(t),sh.remove(t),Ku.push(t),Du(t)}function ih(t){var n=t.circle,e=n.x,i=n.cy,r=[e,i],o=t.P,a=t.N,s=[t];eh(t);for(var u=o;u.circle&&Math.abs(e-u.circle.x)<lh&&Math.abs(i-u.circle.cy)<lh;)o=u.P,s.unshift(u),eh(u),u=o;s.unshift(u),Gu(u);for(var h=a;h.circle&&Math.abs(e-h.circle.x)<lh&&Math.abs(i-h.circle.cy)<lh;)a=h.N,s.push(h),eh(h),h=a;s.push(h),Gu(h);var c,l=s.length;for(c=1;c<l;++c)h=s[c],u=s[c-1],zu(h.edge,u.site,h.site,r);u=s[0],(h=s[l-1]).edge=Hu(u.site,h.site,null,r),Qu(u),Qu(h)}function rh(t){for(var n,e,i,r,o=t[0],a=t[1],s=sh._;s;)if((i=oh(s,a)-o)>lh)s=s.L;else{if(!((r=o-ah(s,a))>lh)){i>-lh?(n=s.P,e=s):r>-lh?(n=s,e=s.N):n=e=s;break}if(!s.R){n=s;break}s=s.R}!function(t){uh[t.index]={site:t,halfedges:[]}}(t);var u=nh(t);if(sh.insert(n,u),n||e){if(n===e)return Gu(n),e=nh(n.site),sh.insert(u,e),u.edge=e.edge=Hu(n.site,u.site),Qu(n),void Qu(e);if(e){Gu(n),Gu(e);var h=n.site,c=h[0],l=h[1],f=t[0]-c,_=t[1]-l,p=e.site,d=p[0]-c,v=p[1]-l,g=2*(f*v-_*d),y=f*f+_*_,m=d*d+v*v,x=[(v*y-_*m)/g+c,(f*m-d*y)/g+l];zu(e.edge,h,p,x),u.edge=Hu(h,t,null,x),e.edge=Hu(t,p,null,x),Qu(n),Qu(e)}else u.edge=Hu(n.site,u.site)}}function oh(t,n){var e=t.site,i=e[0],r=e[1],o=r-n;if(!o)return i;var a=t.P;if(!a)return-1/0;var s=(e=a.site)[0],u=e[1],h=u-n;if(!h)return s;var c=s-i,l=1/o-1/h,f=c/h;return l?(-f+Math.sqrt(f*f-2*l*(c*c/(-2*h)-u+h/2+r-o/2)))/l+i:(i+s)/2}function ah(t,n){var e=t.N;if(e)return oh(e,n);var i=t.site;return i[1]===n?i[0]:1/0}var sh,uh,hh,ch,lh=1e-6,fh=1e-12;function _h(t,n){return n[1]-t[1]||n[0]-t[0]}function ph(t,n){var e,i,r,o=t.sort(_h).pop();for(ch=[],uh=new Array(t.length),sh=new qu,hh=new qu;;)if(r=Zu,o&&(!r||o[1]<r.y||o[1]===r.y&&o[0]<r.x))o[0]===e&&o[1]===i||(rh(o),e=o[0],i=o[1]),o=t.pop();else{if(!r)break;ih(r.arc)}if(function(){for(var t,n,e,i,r=0,o=uh.length;r<o;++r)if((t=uh[r])&&(i=(n=t.halfedges).length)){var a=new Array(i),s=new Array(i);for(e=0;e<i;++e)a[e]=e,s[e]=Bu(t,ch[n[e]]);for(a.sort((function(t,n){return s[n]-s[t]})),e=0;e<i;++e)s[e]=n[a[e]];for(e=0;e<i;++e)n[e]=s[e]}}(),n){var a=+n[0][0],s=+n[0][1],u=+n[1][0],h=+n[1][1];!function(t,n,e,i){for(var r,o=ch.length;o--;)Xu(r=ch[o],t,n,e,i)&&Iu(r,t,n,e,i)&&(Math.abs(r[0][0]-r[1][0])>lh||Math.abs(r[0][1]-r[1][1])>lh)||delete ch[o]}(a,s,u,h),function(t,n,e,i){var r,o,a,s,u,h,c,l,f,_,p,d,v=uh.length,g=!0;for(r=0;r<v;++r)if(o=uh[r]){for(a=o.site,s=(u=o.halfedges).length;s--;)ch[u[s]]||u.splice(s,1);for(s=0,h=u.length;s<h;)p=(_=Vu(o,ch[u[s]]))[0],d=_[1],l=(c=$u(o,ch[u[++s%h]]))[0],f=c[1],(Math.abs(p-l)>lh||Math.abs(d-f)>lh)&&(u.splice(s,0,ch.push(Ou(a,_,Math.abs(p-t)<lh&&i-d>lh?[t,Math.abs(l-t)<lh?f:i]:Math.abs(d-i)<lh&&e-p>lh?[Math.abs(f-i)<lh?l:e,i]:Math.abs(p-e)<lh&&d-n>lh?[e,Math.abs(l-e)<lh?f:n]:Math.abs(d-n)<lh&&p-t>lh?[Math.abs(f-n)<lh?l:t,n]:null))-1),++h);h&&(g=!1)}if(g){var y,m,x,w=1/0;for(r=0,g=null;r<v;++r)(o=uh[r])&&(x=(y=(a=o.site)[0]-t)*y+(m=a[1]-n)*m)<w&&(w=x,g=o);if(g){var b=[t,n],M=[t,i],k=[e,i],N=[e,n];g.halfedges.push(ch.push(Ou(a=g.site,b,M))-1,ch.push(Ou(a,M,k))-1,ch.push(Ou(a,k,N))-1,ch.push(Ou(a,N,b))-1)}}for(r=0;r<v;++r)(o=uh[r])&&(o.halfedges.length||delete uh[r])}(a,s,u,h)}this.edges=ch,this.cells=uh,sh=hh=ch=uh=null}ph.prototype={constructor:ph,polygons:function(){var t=this.edges;return this.cells.map((function(n){var e=n.halfedges.map((function(e){return $u(n,t[e])}));return e.data=n.site.data,e}))},triangles:function(){var t=[],n=this.edges;return this.cells.forEach((function(e,i){if(o=(r=e.halfedges).length)for(var r,o,a,s,u,h,c=e.site,l=-1,f=n[r[o-1]],_=f.left===c?f.right:f.left;++l<o;)a=_,_=(f=n[r[l]]).left===c?f.right:f.left,a&&_&&i<a.index&&i<_.index&&(u=a,h=_,((s=c)[0]-h[0])*(u[1]-s[1])-(s[0]-u[0])*(h[1]-s[1])<0)&&t.push([c.data,a.data,_.data])})),t},links:function(){return this.edges.filter((function(t){return t.right})).map((function(t){return{source:t.left.data,target:t.right.data}}))},find:function(t,n,e){for(var i,r,o=this,a=o._found||0,s=o.cells.length;!(r=o.cells[a]);)if(++a>=s)return null;var u=t-r.site[0],h=n-r.site[1],c=u*u+h*h;do{r=o.cells[i=a],a=null,r.halfedges.forEach((function(e){var i=o.edges[e],s=i.left;if(s!==r.site&&s||(s=i.right)){var u=t-s[0],h=n-s[1],l=u*u+h*h;l<c&&(c=l,a=s.index)}}))}while(null!==a);return o._found=i,null==e||c<=e*e?r.site:null}};function dh(t,n,e){this.k=t,this.x=n,this.y=e}dh.prototype={constructor:dh,scale:function(t){return 1===t?this:new dh(this.k*t,this.x,this.y)},translate:function(t,n){return 0===t&0===n?this:new dh(this.k,this.x+this.k*t,this.y+this.k*n)},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+")"}};var vh=new dh(1,0,0);dh.prototype;e(5);function gh(t,n){for(var e=0;e<n.length;e++){var i=n[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}e.d(n,"default",(function(){return yh}));var yh=function(){function t(n,e,i,r,o){!function(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}(this,t),this.height=e,this.width=n,this.margin=i,this.dataUrl=r,this.rootElement=o,this.data=null,this.initialPairing=null,this.scrolling=null}var n,e,i;return n=t,(e=[{key:"init",value:function(){var t=this,n=document.getElementById(this.rootElement);this.height=this.height,this.width=n.clientWidth,this.xAxisSvg=Ot(n).append("svg").attr("viewBox",[0,0,this.width,this.margin.top+2]).attr("preserveAspectRatio","xMinYMin meet").style("position","sticky").style("top",120).style("background-image","linear-gradient(to left bottom, #ffffff, #ffffff, #ffffff, #ffffff, #ffffff, #ffffff94)"),this.svg=Ot(n).append("svg").attr("viewBox",[0,0,this.width,this.height]).attr("preserveAspectRatio","xMinYMin meet");var e=null;Ot(n).on("scroll",(function(){t.scrolling=!0,clearTimeout(e),e=setTimeout((function(){return t.scrolling=!1}),66)}));var i,r=this.svg.append("defs");r.append("clipPath").attr("id","mainClip").append("rect").attr("x",this.margin.left+2).attr("y",0).attr("width",this.width-this.margin.right).attr("height",this.height-this.margin.bottom),r.append("clipPath").attr("id","xClip").append("rect").attr("x",this.margin.left+2).attr("y",0).attr("width",this.width-this.margin.right).attr("height",this.margin.top+2),r.append("clipPath").attr("id","yClip").append("rect").attr("x",0).attr("y",0).attr("width",this.margin.left+2).attr("height",this.height-this.margin.bottom),this.chartBody=this.svg.append("g").attr("class","chartBody").attr("clip-path","url(#mainClip)"),this.main=this.chartBody.append("g").attr("class","main").attr("transform","translate(1, -".concat(this.margin.top+2,")")),this.title=this.xAxisSvg.append("text").attr("class","title").attr("x",this.width/2).attr("y",20).style("text-anchor","middle"),this.gY=this.svg.append("g").attr("clip-path","url(#yClip)").append("g").attr("class","y-axis").attr("transform","translate(".concat(this.margin.left,", -").concat(this.margin.top,")")),this.gX=this.xAxisSvg.append("g").attr("clip-path","url(#xClip)").append("g").attr("class","x-axis").attr("transform","translate(0, ".concat(this.margin.top,")")),this.reds=na().domain([-1,1]).range(["#dedede8f","#ed7b25c4","#15a2b88f"]),this.x=ea().range([this.margin.left,this.width-this.margin.right]).padding(.05),this.y=ea().range([this.height,this.margin.top+2]).padding(.05),this.xAxis=(i=this.x,b(f,i)),this.yAxis=function(t){return b(d,t)}(this.y)}},{key:"load",value:function(){var t,n,e=this;return(t=this.dataUrl,n={headers:new Headers({"Content-Type":"application/js"})},fetch(t,n).then(ar)).then((function(t){e.data=e.dataAsNetwork(t),e.genes=e.data.nodes.filter((function(t){return"gene"===t.type})).sort((function(t,n){return t.name>n.name?1:n.name>t.name?-1:0})),e.procedures=e.data.nodes.filter((function(t){return"procedure"===t.type})).sort((function(t,n){return t.name>n.name?1:n.name>t.name?-1:0})),e.parameters=e.data.nodes.filter((function(t){return"parameter"===t.type})).sort((function(t,n){return t.name>n.name?1:n.name>t.name?-1:0})),e.rows=e.genes.reverse(),e.columns=e.procedures,e.render()}))}},{key:"render",value:function(t){var n=this,e=this.selectedProcedure?50:500,i=this.svg.transition().duration(e);this.selectedProcedure?this.xAxisSvg.select(".title").attr("class","title clickable-text").on("click",(function(){n.selectedProcedure=!1,n.columns=n.procedures,n.render()})).html("← Genes vs ".concat(this.selectedProcedure," parameters")):this.xAxisSvg.select(".title").attr("class","title").on("click",null).text("Genes vs Procedures");var r=function(t,n,e){var i,r,o,s,u=t.length,h=n.length,c=new Array(u*h);for(null==e&&(e=a),i=o=0;i<u;++i)for(s=t[i],r=0;r<h;++r,++o)c[o]=e(s,n[r]);return c}(this.rows,this.columns),o=null;o=this.initialMatrix&&!this.selectedProcedure?this.initialMatrix:r.reduce((function(t,e){void 0===t[e[0].id]&&(t[e[0].id]={name:e[0].name,procedures:{}});var i=n.data.links["".concat(e[0].id,"_").concat(e[1].id)],r=i?i.weight:-1;return r=r>0?1:r,t[e[0].id].procedures[e[1].id]={color:r,name:e[1].name},t}),{});var s=this.columns.map((function(t){return t.name})),u=this.rows.map((function(t){return t.name}));this.x.domain(s);var h=this.margin.top+40*this.rows.length;this.svg.attr("viewBox",[0,0,this.width,this.height>h?h:this.height]);var c=[this.height>h?h-this.margin.bottom:this.height-this.margin.bottom,this.margin.top+2];this.y.domain(u).range(c);var l=function(n){var e="columns"==t?s:u,i=e.indexOf(n);return 10*(e.length-Math.abs(e.length/2-i))},f=function(t){return l(t.name)};this.main.selectAll("svg").data(Object.keys(o)).join((function(t){t.append("svg").attr("height",n.y.bandwidth()).attr("y",(function(t){return n.y(o[t].name)})).each((function(t,e,i){Ot(i[e]).selectAll("rect").data(Object.keys(o[t].procedures),(function(n){return t.id+"_"+n})).join((function(e){return n.enterRect(e,o,t)}),(function(e){return n.updateRect(e,o,t)}),(function(t){return n.exitRect(t)}))}))}),(function(e){return e.transition(i).delay(t?f:0).attr("height",n.y.bandwidth()).attr("y",(function(t){return n.y(o[t].name)})).each((function(t,e,i){Ot(i[e]).selectAll("rect").data(Object.keys(o[t].procedures),(function(n){return t.id+"_"+n})).join((function(e){return n.enterRect(e,o,t)}),(function(e){return n.updateRect(e,o,t)}),(function(t){return n.exitRect(t)}))})),e}),(function(t){return t.transition(i).style("opacity",0).remove()})).transition(i).style("opacity",1);var _=this.selectedProcedure?"":" +";this.gX.transition(this.xAxisSvg.transition().duration(e)).delay(t?l:null).call(this.xAxis.tickFormat((function(t){return n.truncate.apply(t,[25,!0])+_}))).on("end",(function(){n.selectedProcedure?p.on("click",null).attr("class",""):p.on("click",(function(t){n.selectedProcedure=t,n.columns=n.parameters.filter((function(t){return t.id.startsWith(n.procedures.find((function(t){return t.name===n.selectedProcedure})).id+"|")})),n.render()})).attr("class","clickable-text")})),this.gY.transition(this.svg.transition().duration(e)).delay(t?l:null).call(this.yAxis);var p=this.gX.selectAll("text").attr("x",5).attr("dy",".55em").attr("transform",(function(t,n,e){return e[n].getAttribute("transform")?e[n].getAttribute("transform"):"rotate(-50)"})).style("text-anchor","start")}},{key:"sortRows",value:function(){this.rows.reverse(),this.render("rows")}},{key:"sortColumns",value:function(){this.columns.reverse(),this.render("columns")}},{key:"dataAsNetwork",value:function(t){t=t.facet_counts.facet_pivot["marker_accession_id,marker_symbol,procedure_name,parameter_name,significant"];var n=[],e={},i=new Set;return t.forEach((function(t){var r=t.pivot[0],o=t.value,a=r.value;i.has(o)||n.push({id:o,name:a,type:"gene"})&&i.add(o),r.pivot.forEach((function(t){var r=t.value;i.has(r)||n.push({id:r,name:r,type:"procedure"})&&i.add(r);var a={id:"".concat(o,"_").concat(r),source:o,target:r,weight:0};t.pivot.forEach((function(t){var s="".concat(r,"|").concat(t.value);i.has(s)||n.push({id:s,name:t.value,type:"parameter"})&&i.add(s);var u={id:"".concat(o,"_").concat(s),source:o,target:s,weight:0};t.pivot.forEach((function(t){t.value&&(a.weight++,u.weight++)})),e["".concat(o,"_").concat(s)]=u})),e["".concat(o,"_").concat(r)]=a}))})),{nodes:n,links:e}}},{key:"truncate",value:function(t,n){if(this.length<=t)return this;var e=this.substr(0,t-1);return(n?e.substr(0,e.lastIndexOf(" ")):e)+"..."}},{key:"mouseover",value:function(t,n){var e=this;this.scrolling||(this.gX.selectAll("text").classed("active",(function(t,e){return t===n})),this.gY.selectAll("text").classed("active",(function(n,e){return n===t})),this.main.append("rect").attr("x",0).attr("y",this.y(t)).attr("class","highlight-bar").attr("width",(function(){var t=e.x(n);return t?t-=e.x.padding()*e.x.bandwidth():t=0,t})).attr("height",this.y.bandwidth()),this.main.append("rect").attr("x",this.x(n)).attr("y",0).attr("class","highlight-bar").attr("width",this.x.bandwidth()).attr("height",(function(){var n=e.y(t);return n?n-=e.y.padding()*e.y.bandwidth():n=0,n})))}},{key:"mouseout",value:function(){Xt("text").classed("active",!1),Xt(".highlight-bar").remove()}},{key:"zoomed",value:function(){var t=At.transform;this.main.attr("transform",t),this.gX.attr("transform",vh.translate(t.x,this.margin.top).scale(t.k)),this.gX.selectAll("text").attr("transform",vh.scale(1/t.k)+" rotate(-45)"),this.gX.selectAll("line").attr("transform",vh.scale(1/t.k)),this.gY.attr("transform",vh.translate(this.margin.left,t.y).scale(t.k)),this.gY.selectAll("text").attr("transform",vh.scale(1/t.k)),this.gY.selectAll("line").attr("transform",vh.scale(1/t.k))}},{key:"resetted",value:function(){this.svg.call(this.zoom.transform,vh)}},{key:"filter",value:function(t,n){var e=this,i=function(t){return""===n||t.name.toLowerCase().indexOf(n.toLowerCase())>=0};"rows"==t?this.rows=this.genes.filter(i):this.selectedProcedure?this.columns=this.parameters.filter((function(t){return t.id.startsWith(e.procedures.find((function(t){return t.name===e.selectedProcedure})).id+"|")})).filter(i):this.columns=this.procedures.filter(i),this.render()}},{key:"enterRect",value:function(t,n,e){var i=this;t.append("rect").attr("transform",(function(t){return"translate(".concat(i.x(n[e].procedures[t].name),",0)")})).attr("fill",(function(t){return i.reds(n[e].procedures[t].color)})).attr("width",this.x.bandwidth()).attr("height","100%").on("mouseover",(function(t){return i.mouseover(n[e].name,n[e].procedures[t].name)})).on("mouseout",this.mouseout).on("click",(function(t){var r=n[e].procedures[t].name,o=i.selectedProcedure?"".concat(i.selectedProcedure," / ").concat(r):r;window.open("https://www.mousephenotype.org/data/genes/".concat(e,"?dataLifeStage=late&dataSearch=").concat(encodeURIComponent(o),"#alldatatable"),"_blank")}))}},{key:"updateRect",value:function(t,n,e){var i=this;return t.on("click",(function(t){var r=n[e].procedures[t].name,o=i.selectedProcedure?"".concat(i.selectedProcedure," / ").concat(r):r;window.open("https://www.mousephenotype.org/data/genes/".concat(e,"?dataLifeStage=late&dataSearch=").concat(encodeURIComponent(o),"#alldatatable"),"_blank")})).on("mouseover",(function(t){return i.mouseover(n[e].name,n[e].procedures[t].name)})).on("mouseout",this.mouseout).transition(this.svg.transition().duration(500)).attr("width",this.x.bandwidth()).attr("fill",(function(t){return i.reds(n[e].procedures[t].color)})).attr("transform",(function(t){return"translate(".concat(i.x(n[e].procedures[t].name),",0)")})),t}},{key:"exitRect",value:function(t){return t.remove()}},{key:"getRowCount",value:function(){return this.rows.length}}])&&gh(n.prototype,e),i&&gh(n,i),t}()},,function(t,n,e){var i=e(6);"string"==typeof i&&(i=[[t.i,i,""]]);var r={insert:"head",singleton:!1};e(8)(i,r);i.locals&&(t.exports=i.locals)},function(t,n,e){(t.exports=e(7)(!1)).push([t.i,".domain {\n vector-effect: non-scaling-stroke;\n stroke-width: 1px;\n}\n\n.active {\n font-weight: bold;\n}\n\n.highlight-bar {\nfill: #00000033;\n}\n\n.title, .legend {\n font-family: sans-serif;\n font-size: 16px;\n font-weight: bold;\n}\n\n.clickable-text {\ntext-decoration: underline;\ncursor: pointer;\n}\n\n#controls {\n display: flex;\n justify-content: space-evenly;\n}\n\n#heatmap {\n width: 100%;\n}\n\n.svg-container {\n display: inline-block;\n position: relative;\n width: 100%;\n padding-bottom: 100%;\n vertical-align: top;\n overflow: hidden;\n}\n\n.svg-content {\n display: inline-block;\n position: absolute;\n top: 0;\n left: 0;\n}",""])},function(t,n,e){"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e=function(t,n){var e=t[1]||"",i=t[3];if(!i)return e;if(n&&"function"==typeof btoa){var r=(a=i,s=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),u="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),"/*# ".concat(u," */")),o=i.sources.map((function(t){return"/*# sourceURL=".concat(i.sourceRoot).concat(t," */")}));return[e].concat(o).concat([r]).join("\n")}var a,s,u;return[e].join("\n")}(n,t);return n[2]?"@media ".concat(n[2],"{").concat(e,"}"):e})).join("")},n.i=function(t,e){"string"==typeof t&&(t=[[null,t,""]]);for(var i={},r=0;r<this.length;r++){var o=this[r][0];null!=o&&(i[o]=!0)}for(var a=0;a<t.length;a++){var s=t[a];null!=s[0]&&i[s[0]]||(e&&!s[2]?s[2]=e:e&&(s[2]="(".concat(s[2],") and (").concat(e,")")),n.push(s))}},n}},function(t,n,e){"use strict";var i,r={},o=function(){return void 0===i&&(i=Boolean(window&&document&&document.all&&!window.atob)),i},a=function(){var t={};return function(n){if(void 0===t[n]){var e=document.querySelector(n);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(t){e=null}t[n]=e}return t[n]}}();function s(t,n){for(var e=[],i={},r=0;r<t.length;r++){var o=t[r],a=n.base?o[0]+n.base:o[0],s={css:o[1],media:o[2],sourceMap:o[3]};i[a]?i[a].parts.push(s):e.push(i[a]={id:a,parts:[s]})}return e}function u(t,n){for(var e=0;e<t.length;e++){var i=t[e],o=r[i.id],a=0;if(o){for(o.refs++;a<o.parts.length;a++)o.parts[a](i.parts[a]);for(;a<i.parts.length;a++)o.parts.push(v(i.parts[a],n))}else{for(var s=[];a<i.parts.length;a++)s.push(v(i.parts[a],n));r[i.id]={id:i.id,refs:1,parts:s}}}}function h(t){var n=document.createElement("style");if(void 0===t.attributes.nonce){var i=e.nc;i&&(t.attributes.nonce=i)}if(Object.keys(t.attributes).forEach((function(e){n.setAttribute(e,t.attributes[e])})),"function"==typeof t.insert)t.insert(n);else{var r=a(t.insert||"head");if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}return n}var c,l=(c=[],function(t,n){return c[t]=n,c.filter(Boolean).join("\n")});function f(t,n,e,i){var r=e?"":i.css;if(t.styleSheet)t.styleSheet.cssText=l(n,r);else{var o=document.createTextNode(r),a=t.childNodes;a[n]&&t.removeChild(a[n]),a.length?t.insertBefore(o,a[n]):t.appendChild(o)}}function _(t,n,e){var i=e.css,r=e.media,o=e.sourceMap;if(r&&t.setAttribute("media",r),o&&btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleSheet)t.styleSheet.cssText=i;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(i))}}var p=null,d=0;function v(t,n){var e,i,r;if(n.singleton){var o=d++;e=p||(p=h(n)),i=f.bind(null,e,o,!1),r=f.bind(null,e,o,!0)}else e=h(n),i=_.bind(null,e,n),r=function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)};return i(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap)return;i(t=n)}else r()}}t.exports=function(t,n){(n=n||{}).attributes="object"==typeof n.attributes?n.attributes:{},n.singleton||"boolean"==typeof n.singleton||(n.singleton=o());var e=s(t,n);return u(e,n),function(t){for(var i=[],o=0;o<e.length;o++){var a=e[o],h=r[a.id];h&&(h.refs--,i.push(h))}t&&u(s(t,n),n);for(var c=0;c<i.length;c++){var l=i[c];if(0===l.refs){for(var f=0;f<l.parts.length;f++)l.parts[f]();delete r[l.id]}}}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzL2Rpc3QvcGFja2FnZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcGFpcnMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9jcm9zcy5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FycmF5LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RocmVzaG9sZC9zdHVyZ2VzLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVyZ2UuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy96aXAuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2FycmF5LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXhpcy5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbWF0Y2hlci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXR0ci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xhc3NlZC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaHRtbC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmFpc2UuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JlbW92ZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kaXNwYXRjaC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0QWxsLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2pvaW4uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vcmRlci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZXMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VtcHR5LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hcHBlbmQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9sb2NhbC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zb3VyY2VFdmVudC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RBbGwuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2V2ZW50LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9kcmFnLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvZGVmaW5lLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29sb3IuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpc0Nsb3NlZC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9wYXJzZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9kZWNvbXBvc2UuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy96b29tLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaHNsLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbWF0aC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2xhYi5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2hjbC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2N1YmVoZWxpeC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2N1YmVoZWxpeC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3F1YW50aXplLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvdGltZXIuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbnRlcnJ1cHQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyVHdlZW4uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZGVsYXkuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZWFzZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0aW9uLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlVHdlZW4uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdGV4dC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0QWxsLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2VuZC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvcG9seS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvc2luLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9iYWNrLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9lbGFzdGljLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vdHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2ludGVycnVwdC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2JydXNoLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvbWF0aC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2FycmF5LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvY2hvcmQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL21hcC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvc2V0LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvZGVuc2l0eS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9kc3YuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvY3N2LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL3Rzdi5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL3RleHQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9kc3YuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9qc29uLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMveG1sLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvYWRkLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvY292ZXIuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3kuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkdHJlZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2RhdGEuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9leHRlbnQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9maW5kLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcmVtb3ZlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcm9vdC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3NpemUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3Zpc2l0QWZ0ZXIuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9zaW11bGF0aW9uLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0U3BlY2lmaWVyLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0UHJlZml4QXV0by5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFJvdW5kZWQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvbG9jYWxlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdEdyb3VwLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2FkZGVyLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbm9vcC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hcmVhLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NhcnRlc2lhbi5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9ib3VuZHMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcm90YXRpb24uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2lyY2xlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvYnVmZmVyLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BvaW50RXF1YWwuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9yZWpvaW4uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9seWdvbkNvbnRhaW5zLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9hbnRpbWVyaWRpYW4uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbGVuZ3RoLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvYXJlYS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9tZWFzdXJlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvc3RyaW5nLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL3Jlc2FtcGxlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWwuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWxFcXVhbEFyZWEuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWxFcXVpZGlzdGFudC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL21lcmNhdG9yLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZXF1aXJlY3Rhbmd1bGFyLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWNFcXVpZGlzdGFudC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2VxdWFsRWFydGguanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9nbm9tb25pYy5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL25hdHVyYWxFYXJ0aDEuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9vcnRob2dyYXBoaWMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9zdGVyZW9ncmFwaGljLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vdHJhbnN2ZXJzZU1lcmNhdG9yLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9jb3VudC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2guanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hBZnRlci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaEJlZm9yZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc3VtLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zb3J0LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9hbmNlc3RvcnMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2Rlc2NlbmRhbnRzLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2xpbmtzLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2FycmF5LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvcm91bmQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9kaWNlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9zbGljZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NxdWFyaWZ5LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvcmVzcXVhcmlmeS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvaHVsbC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9kZWZhdWx0U291cmNlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL25vcm1hbC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy91bmlmb3JtLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2lyd2luSGFsbC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9sb2dOb3JtYWwuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvYmF0ZXMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZXhwb25lbnRpYWwuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvYXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9vcmRpbmFsLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvYmFuZC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZGF5LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9ob3VyLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taW51dGUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1dlZWsuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0RheS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjWWVhci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aW1lLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNNb250aC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjSG91ci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTWludXRlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbWF0aC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbGluZWFyLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvcmFkaWFsLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvZGlhbW9uZC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9jaXJjbGUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvc3Rhci5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL25vb3AuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvdHJpYW5nbGUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9zeW1ib2wvd3llLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYmFzaXMuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpc0Nsb3NlZC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2Jhc2lzT3Blbi5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2J1bmRsZS5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2FyZGluYWxDbG9zZWQuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbE9wZW4uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2F0bXVsbFJvbUNsb3NlZC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21PcGVuLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbGluZWFyQ2xvc2VkLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9uYXR1cmFsLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvc3RlcC5qcyIsIndlYnBhY2s6Ly9Db2xsYXBzaWJsZUhlYXRNYXAvLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvUmVkQmxhY2tUcmVlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9FZGdlLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9DZWxsLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9DaXJjbGUuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0JlYWNoLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9EaWFncmFtLmpzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vc3JjL2NvbGxhcHNpYmxlLWhlYXRtYXAuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vc3R5bGVzL2NvbGxhcHNpYmxlLWhlYXRtYXAuY3NzPzAyMDUiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vc3R5bGVzL2NvbGxhcHNpYmxlLWhlYXRtYXAuY3NzIiwid2VicGFjazovL0NvbGxhcHNpYmxlSGVhdE1hcC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vQ29sbGFwc2libGVIZWF0TWFwLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiYSIsImIiLCJOYU4iLCJmIiwiY29tcGFyZSIsImxlbmd0aCIsIngiLCJhc2NlbmRpbmciLCJsZWZ0IiwibG8iLCJoaSIsIm1pZCIsInJpZ2h0IiwiYXNjZW5kaW5nQmlzZWN0IiwiYmlzZWN0b3IiLCJwYWlyIiwiQXJyYXkiLCJzbGljZSIsIm1hcCIsInN0YXJ0Iiwic3RvcCIsInN0ZXAiLCJhcmd1bWVudHMiLCJNYXRoIiwibWF4IiwiY2VpbCIsInJhbmdlIiwic3FydCIsIm1lcmdlZCIsImFycmF5IiwiYXJyYXlzIiwiaiIsImVwc2lsb24iLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInkiLCJzY2FsZSIsIm9mZnNldCIsImJhbmR3aWR0aCIsInJvdW5kIiwiZW50ZXJpbmciLCJ0aGlzIiwiX19heGlzIiwib3JpZW50IiwidGlja0FyZ3VtZW50cyIsInRpY2tWYWx1ZXMiLCJ0aWNrRm9ybWF0IiwidGlja1NpemVJbm5lciIsInRpY2tTaXplT3V0ZXIiLCJ0aWNrUGFkZGluZyIsImsiLCJ0cmFuc2Zvcm0iLCJheGlzIiwiY29udGV4dCIsInZhbHVlcyIsInRpY2tzIiwiYXBwbHkiLCJkb21haW4iLCJmb3JtYXQiLCJzcGFjaW5nIiwicmFuZ2UwIiwicmFuZ2UxIiwicG9zaXRpb24iLCJjb3B5Iiwic2VsZWN0aW9uIiwicGF0aCIsInNlbGVjdEFsbCIsImRhdGEiLCJ0aWNrIiwib3JkZXIiLCJ0aWNrRXhpdCIsImV4aXQiLCJ0aWNrRW50ZXIiLCJlbnRlciIsImFwcGVuZCIsImF0dHIiLCJsaW5lIiwic2VsZWN0IiwidGV4dCIsIm1lcmdlIiwiaW5zZXJ0IiwidHJhbnNpdGlvbiIsImlzRmluaXRlIiwiZ2V0QXR0cmlidXRlIiwicGFyZW50Tm9kZSIsInJlbW92ZSIsImZpbHRlciIsImVhY2giLCJfIiwidGlja1NpemUiLCJub29wIiwiZGlzcGF0Y2giLCJFcnJvciIsIkRpc3BhdGNoIiwicGFyc2VUeXBlbmFtZXMiLCJ0eXBlbmFtZXMiLCJ0eXBlcyIsInRyaW0iLCJzcGxpdCIsImluZGV4T2YiLCJ0eXBlIiwic2V0IiwiY2FsbGJhY2siLCJjb25jYXQiLCJwdXNoIiwiY29uc3RydWN0b3IiLCJvbiIsInR5cGVuYW1lIiwiVCIsInRoYXQiLCJhcmdzIiwieGh0bWwiLCJzdmciLCJ4bGluayIsInhtbCIsInhtbG5zIiwicHJlZml4IiwibmFtZXNwYWNlcyIsInNwYWNlIiwibG9jYWwiLCJjcmVhdG9ySW5oZXJpdCIsImRvY3VtZW50Iiwib3duZXJEb2N1bWVudCIsInVyaSIsIm5hbWVzcGFjZVVSSSIsImRvY3VtZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdG9yRml4ZWQiLCJmdWxsbmFtZSIsIm5hbWVzcGFjZSIsIm5vbmUiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIiwibWF0Y2hlcyIsInVwZGF0ZSIsIkVudGVyTm9kZSIsInBhcmVudCIsImRhdHVtIiwiX25leHQiLCJfcGFyZW50IiwiX19kYXRhX18iLCJhcHBlbmRDaGlsZCIsImNoaWxkIiwiaW5zZXJ0QmVmb3JlIiwibmV4dCIsImtleVByZWZpeCIsImJpbmRJbmRleCIsImdyb3VwIiwibm9kZSIsImdyb3VwTGVuZ3RoIiwiZGF0YUxlbmd0aCIsImJpbmRLZXkiLCJrZXlWYWx1ZSIsIm5vZGVCeUtleVZhbHVlIiwia2V5VmFsdWVzIiwiYXR0clJlbW92ZSIsInJlbW92ZUF0dHJpYnV0ZSIsImF0dHJSZW1vdmVOUyIsInJlbW92ZUF0dHJpYnV0ZU5TIiwiYXR0ckNvbnN0YW50Iiwic2V0QXR0cmlidXRlIiwiYXR0ckNvbnN0YW50TlMiLCJzZXRBdHRyaWJ1dGVOUyIsImF0dHJGdW5jdGlvbiIsInYiLCJhdHRyRnVuY3Rpb25OUyIsImRlZmF1bHRWaWV3Iiwic3R5bGVSZW1vdmUiLCJzdHlsZSIsInJlbW92ZVByb3BlcnR5Iiwic3R5bGVDb25zdGFudCIsInByaW9yaXR5Iiwic2V0UHJvcGVydHkiLCJzdHlsZUZ1bmN0aW9uIiwic3R5bGVWYWx1ZSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRDb21wdXRlZFN0eWxlIiwicHJvcGVydHlSZW1vdmUiLCJwcm9wZXJ0eUNvbnN0YW50IiwicHJvcGVydHlGdW5jdGlvbiIsImNsYXNzQXJyYXkiLCJzdHJpbmciLCJjbGFzc0xpc3QiLCJDbGFzc0xpc3QiLCJfbm9kZSIsIl9uYW1lcyIsImNsYXNzZWRBZGQiLCJuYW1lcyIsImxpc3QiLCJhZGQiLCJjbGFzc2VkUmVtb3ZlIiwiY2xhc3NlZFRydWUiLCJjbGFzc2VkRmFsc2UiLCJjbGFzc2VkRnVuY3Rpb24iLCJqb2luIiwic3BsaWNlIiwiY29udGFpbnMiLCJ0ZXh0UmVtb3ZlIiwidGV4dENvbnRlbnQiLCJ0ZXh0Q29uc3RhbnQiLCJ0ZXh0RnVuY3Rpb24iLCJodG1sUmVtb3ZlIiwiaW5uZXJIVE1MIiwiaHRtbENvbnN0YW50IiwiaHRtbEZ1bmN0aW9uIiwicmFpc2UiLCJuZXh0U2libGluZyIsImxvd2VyIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RDaGlsZCIsImNvbnN0YW50TnVsbCIsInJlbW92ZUNoaWxkIiwic2VsZWN0aW9uX2Nsb25lU2hhbGxvdyIsImNsb25lTm9kZSIsInNlbGVjdGlvbl9jbG9uZURlZXAiLCJmaWx0ZXJFdmVudHMiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImZpbHRlckNvbnRleHRMaXN0ZW5lciIsImxpc3RlbmVyIiwiaW5kZXgiLCJjb250ZXh0TGlzdGVuZXIiLCJldmVudCIsInJlbGF0ZWQiLCJyZWxhdGVkVGFyZ2V0IiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJldmVudDEiLCJldmVudDAiLCJvblJlbW92ZSIsIl9fb24iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2FwdHVyZSIsIm9uQWRkIiwid3JhcCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNwYXRjaEV2ZW50IiwicGFyYW1zIiwid2luZG93IiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiZGV0YWlsIiwiZGlzcGF0Y2hDb25zdGFudCIsImRpc3BhdGNoRnVuY3Rpb24iLCJTZWxlY3Rpb24iLCJncm91cHMiLCJwYXJlbnRzIiwiX2dyb3VwcyIsIl9wYXJlbnRzIiwic3ViZ3JvdXBzIiwic3Vibm9kZSIsInN1Ymdyb3VwIiwic2VsZWN0b3JBbGwiLCJtYXRjaCIsIm1hdGNoZXIiLCJzaXplIiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwicHJldmlvdXMiLCJpMCIsImkxIiwiX2VudGVyIiwiX2V4aXQiLCJzcGFyc2UiLCJvbmVudGVyIiwib251cGRhdGUiLCJvbmV4aXQiLCJncm91cHMwIiwiZ3JvdXBzMSIsIm0wIiwibTEiLCJtaW4iLCJtZXJnZXMiLCJncm91cDAiLCJncm91cDEiLCJzb3J0IiwiY29tcGFyZU5vZGUiLCJzb3J0Z3JvdXBzIiwic29ydGdyb3VwIiwibm9kZXMiLCJlbXB0eSIsImdldEF0dHJpYnV0ZU5TIiwiY2xhc3NlZCIsImh0bWwiLCJjcmVhdG9yIiwiYmVmb3JlIiwiY2xvbmUiLCJkZWVwIiwibmV4dElkIiwiTG9jYWwiLCJ0b1N0cmluZyIsImlkIiwiRHJhZ0V2ZW50IiwidGFyZ2V0Iiwic3ViamVjdCIsImFjdGl2ZSIsImR4IiwiZHkiLCJpZGVudGlmaWVyIiwiZmFjdG9yeSIsImV4dGVuZCIsImRlZmluaXRpb24iLCJDb2xvciIsInJlSSIsInJlTiIsInJlUCIsInJlSGV4IiwicmVSZ2JJbnRlZ2VyIiwiUmVnRXhwIiwicmVSZ2JQZXJjZW50IiwicmVSZ2JhSW50ZWdlciIsInJlUmdiYVBlcmNlbnQiLCJyZUhzbFBlcmNlbnQiLCJyZUhzbGFQZXJjZW50IiwibmFtZWQiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsImNvbG9yX2Zvcm1hdEhleCIsInJnYiIsImZvcm1hdEhleCIsImNvbG9yX2Zvcm1hdFJnYiIsImZvcm1hdFJnYiIsInRvTG93ZXJDYXNlIiwiZXhlYyIsInBhcnNlSW50IiwicmdibiIsIlJnYiIsInJnYmEiLCJoc2xhIiwiZyIsInJnYkNvbnZlcnQiLCJvcGFjaXR5IiwicmdiX2Zvcm1hdEhleCIsImhleCIsInJnYl9mb3JtYXRSZ2IiLCJpc05hTiIsImgiLCJIc2wiLCJoc2xDb252ZXJ0IiwiaHNsIiwiaHNsMnJnYiIsIm0yIiwiYmFzaXMiLCJ0MSIsInYwIiwidjEiLCJ2MiIsInYzIiwidDIiLCJ0MyIsImRlZmluZSIsImNoYW5uZWxzIiwiYXNzaWduIiwiZGlzcGxheWFibGUiLCJmb3JtYXRIc2wiLCJicmlnaHRlciIsInBvdyIsImRhcmtlciIsImxpbmVhciIsImdhbW1hIiwibm9nYW1tYSIsImV4cG9uZW50aWFsIiwiY29sb3IiLCJlbmQiLCJyZ2JHYW1tYSIsInJnYlNwbGluZSIsInNwbGluZSIsImNvbG9ycyIsImZsb29yIiwicmVBIiwicmVCIiwic291cmNlIiwiY3NzTm9kZSIsImNzc1Jvb3QiLCJjc3NWaWV3Iiwic3ZnTm9kZSIsImFtIiwiYm0iLCJicyIsImJpIiwibGFzdEluZGV4IiwicSIsIm9uZSIsImRlZ3JlZXMiLCJQSSIsInJvdGF0ZSIsInNrZXdYIiwic2NhbGVYIiwic2NhbGVZIiwiZSIsImF0YW4yIiwiYXRhbiIsImludGVycG9sYXRlVHJhbnNmb3JtIiwicGFyc2UiLCJweENvbW1hIiwicHhQYXJlbiIsImRlZ1BhcmVuIiwicG9wIiwieGEiLCJ5YSIsInhiIiwieWIiLCJ0cmFuc2xhdGUiLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyIsImRlY29tcG9zZSIsImludGVycG9sYXRlVHJhbnNmb3JtU3ZnIiwiYmFzZVZhbCIsImNvbnNvbGlkYXRlIiwibWF0cml4IiwiU1FSVDIiLCJodWUiLCJkZWcycmFkIiwicmFkMmRlZyIsIlhuIiwiWW4iLCJabiIsImxhYkNvbnZlcnQiLCJMYWIiLCJIY2wiLCJoY2wybGFiIiwieiIsInJnYjJscmdiIiwieHl6MmxhYiIsImxhYiIsImxhYjJ4eXoiLCJscmdiMnJnYiIsImhjbENvbnZlcnQiLCJoY2wiLCJjb3MiLCJzaW4iLCJDIiwiRUQiLCJFQiIsIkJDX0RBIiwiQ3ViZWhlbGl4IiwiYmwiLCJjdWJlaGVsaXhDb252ZXJ0IiwiY3ViZWhlbGl4R2FtbWEiLCJjdWJlaGVsaXgiLCJjb3NoIiwic2luaCIsInRhc2tIZWFkIiwidGFza1RhaWwiLCJ0aW1lb3V0IiwicG9rZURlbGF5IiwiY2xvY2tMYXN0IiwiY2xvY2tOb3ciLCJjbG9ja1NrZXciLCJjbG9jayIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsInNldEZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsImNsZWFyTm93IiwiVGltZXIiLCJfY2FsbCIsIl90aW1lIiwidGltZXIiLCJkZWxheSIsInRpbWUiLCJyZXN0YXJ0Iiwid2FrZSIsInRpbWVyRmx1c2giLCJ0MCIsIkluZmluaXR5Iiwic2xlZXAiLCJuYXAiLCJwb2tlIiwiY2xlYXJUaW1lb3V0IiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwiVHlwZUVycm9yIiwiZWxhcHNlZCIsImVtcHR5T24iLCJlbXB0eVR3ZWVuIiwiQ1JFQVRFRCIsIlNDSEVEVUxFRCIsIlNUQVJUSU5HIiwiU1RBUlRFRCIsIlJVTk5JTkciLCJFTkRJTkciLCJFTkRFRCIsInNjaGVkdWxlcyIsIl9fdHJhbnNpdGlvbiIsInNlbGYiLCJ0d2VlbiIsInN0YXRlIiwiZHVyYXRpb24iLCJlYXNlIiwidGltaW5nIiwic2NoZWR1bGUiLCJ0d2VlblJlbW92ZSIsInR3ZWVuMCIsInR3ZWVuMSIsInR3ZWVuRnVuY3Rpb24iLCJ0d2VlblZhbHVlIiwiX2lkIiwiaW50ZXJwb2xhdGUiLCJ2YWx1ZTEiLCJzdHJpbmcwMCIsImludGVycG9sYXRlMCIsInN0cmluZzEiLCJzdHJpbmcwIiwic3RyaW5nMTAiLCJhdHRyVHdlZW5OUyIsImF0dHJJbnRlcnBvbGF0ZU5TIiwiX3ZhbHVlIiwiYXR0clR3ZWVuIiwiYXR0ckludGVycG9sYXRlIiwiZGVsYXlGdW5jdGlvbiIsImRlbGF5Q29uc3RhbnQiLCJkdXJhdGlvbkZ1bmN0aW9uIiwiZHVyYXRpb25Db25zdGFudCIsImVhc2VDb25zdGFudCIsIm9uRnVuY3Rpb24iLCJvbjAiLCJvbjEiLCJzaXQiLCJldmVyeSIsInN0eWxlVHdlZW4iLCJzdHlsZUludGVycG9sYXRlIiwiVHJhbnNpdGlvbiIsIl9uYW1lIiwibmV3SWQiLCJzZWxlY3Rpb25fcHJvdG90eXBlIiwiY2hpbGRyZW4iLCJpbmhlcml0IiwiaWQwIiwiaWQxIiwic3R5bGVOdWxsIiwibGlzdGVuZXIwIiwidW5kZWZpbmVkIiwic3R5bGVNYXliZVJlbW92ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiY2FuY2VsIiwiaW50ZXJydXB0IiwiY3VzdG9tIiwicG9seUluIiwiZXhwb25lbnQiLCJwb2x5T3V0IiwicG9seUluT3V0IiwiYmFja0luIiwib3ZlcnNob290IiwiYmFja091dCIsImJhY2tJbk91dCIsInRhdSIsImRlZmF1bHRUaW1pbmciLCJhc2luIiwiZWxhc3RpY0luIiwiYW1wbGl0dWRlIiwicGVyaW9kIiwiZWxhc3RpY091dCIsImVsYXN0aWNJbk91dCIsIm51bWJlcjEiLCJudW1iZXIyIiwidGF1RXBzaWxvbiIsIlBhdGgiLCJfeDAiLCJfeTAiLCJfeDEiLCJfeTEiLCJtb3ZlVG8iLCJjbG9zZVBhdGgiLCJsaW5lVG8iLCJxdWFkcmF0aWNDdXJ2ZVRvIiwieDEiLCJ5MSIsImJlemllckN1cnZlVG8iLCJ4MiIsInkyIiwiYXJjVG8iLCJ4MCIsInkwIiwieDIxIiwieTIxIiwieDAxIiwieTAxIiwibDAxXzIiLCJhYnMiLCJ4MjAiLCJ5MjAiLCJsMjFfMiIsImwyMF8yIiwibDIxIiwibDAxIiwiYWNvcyIsInQwMSIsInQyMSIsImFyYyIsImEwIiwiYTEiLCJjY3ciLCJjdyIsImRhIiwicmVjdCIsInciLCJNYXAiLCJpc0FycmF5IiwiaGFzIiwiY2xlYXIiLCJrZXlzIiwiZW50cmllcyIsInByb3RvIiwiRU9MIiwiRU9GIiwiUVVPVEUiLCJORVdMSU5FIiwiUkVUVVJOIiwib2JqZWN0Q29udmVydGVyIiwiY29sdW1ucyIsIkZ1bmN0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImluZmVyQ29sdW1ucyIsInJvd3MiLCJjb2x1bW5TZXQiLCJmb3JFYWNoIiwicm93IiwiY29sdW1uIiwicGFkIiwid2lkdGgiLCJmb3JtYXREYXRlIiwiZGF0ZSIsInllYXIiLCJob3VycyIsImdldFVUQ0hvdXJzIiwibWludXRlcyIsImdldFVUQ01pbnV0ZXMiLCJzZWNvbmRzIiwiZ2V0VVRDU2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwicmVGb3JtYXQiLCJkZWxpbWl0ZXIiLCJERUxJTUlURVIiLCJjaGFyQ29kZUF0IiwicGFyc2VSb3dzIiwiTiIsIkkiLCJlb2YiLCJlb2wiLCJ0b2tlbiIsInJlcGxhY2UiLCJwcmVmb3JtYXRCb2R5IiwiZm9ybWF0VmFsdWUiLCJmb3JtYXRSb3ciLCJ0ZXN0IiwiY29udmVydCIsImN1c3RvbUNvbnZlcnRlciIsImZvcm1hdEJvZHkiLCJmb3JtYXRSb3dzIiwiY3N2IiwiZHN2IiwiY3N2UGFyc2UiLCJ0c3YiLCJ0c3ZQYXJzZSIsInJlc3BvbnNlVGV4dCIsInJlc3BvbnNlIiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiZmV0Y2giLCJpbnB1dCIsImluaXQiLCJ0aGVuIiwiZHN2UGFyc2UiLCJyZXNwb25zZUpzb24iLCJqc29uIiwicGFyc2VyIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwidHJlZSIsInhtIiwieW0iLCJ4cCIsInlwIiwiYm90dG9tIiwiX3Jvb3QiLCJsZWFmIiwiX3giLCJfeSIsInF1YWR0cmVlIiwiUXVhZHRyZWUiLCJhZGRBbGwiLCJsZWFmX2NvcHkiLCJ0cmVlUHJvdG8iLCJjb3ZlciIsInh6IiwieXoiLCJ2aXNpdCIsImV4dGVudCIsImZpbmQiLCJ4MyIsInkzIiwicXVhZHMiLCJyYWRpdXMiLCJkMiIsInJldGFpbmVyIiwicmVtb3ZlQWxsIiwicm9vdCIsInZpc2l0QWZ0ZXIiLCJ0b0V4cG9uZW50aWFsIiwiY29lZmZpY2llbnQiLCJmb3JtYXREZWNpbWFsIiwicmUiLCJmb3JtYXRTcGVjaWZpZXIiLCJzcGVjaWZpZXIiLCJGb3JtYXRTcGVjaWZpZXIiLCJmaWxsIiwiYWxpZ24iLCJzaWduIiwic3ltYm9sIiwiemVybyIsImNvbW1hIiwicHJlY2lzaW9uIiwicHJlZml4RXhwb25lbnQiLCJvdXQiLCJ0b0ZpeGVkIiwidG9QcmVjaXNpb24iLCJmb3JtYXRSb3VuZGVkIiwidG9VcHBlckNhc2UiLCJwcmVmaXhlcyIsImxvY2FsZSIsImdyb3VwaW5nIiwidGhvdXNhbmRzIiwiTnVtYmVyIiwic3Vic3RyaW5nIiwicmV2ZXJzZSIsImN1cnJlbmN5UHJlZml4IiwiY3VycmVuY3kiLCJjdXJyZW5jeVN1ZmZpeCIsImRlY2ltYWwiLCJudW1lcmFscyIsImZvcm1hdE51bWVyYWxzIiwiU3RyaW5nIiwicGVyY2VudCIsIm1pbnVzIiwibmFuIiwibmV3Rm9ybWF0IiwiZm9ybWF0VHlwZXMiLCJzdWZmaXgiLCJmb3JtYXRUeXBlIiwibWF5YmVTdWZmaXgiLCJ2YWx1ZVByZWZpeCIsInZhbHVlU3VmZml4IiwidmFsdWVOZWdhdGl2ZSIsImZvcm1hdFRyaW0iLCJwYWRkaW5nIiwiZm9ybWF0UHJlZml4IiwiQWRkZXIiLCJyZXNldCIsInRlbXAiLCJ2YWx1ZU9mIiwiYWRkZXIiLCJidiIsImF2IiwicXVhcnRlclBpIiwicmFkaWFucyIsImV4cCIsImxvZyIsInNwaGVyaWNhbCIsImxhbWJkYSIsInBoaSIsImNvc1BoaSIsImNhcnRlc2lhbkNyb3NzIiwiY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZSIsInJvdGF0aW9uSWRlbnRpdHkiLCJpbnZlcnQiLCJsaW5lcyIsInBvaW50IiwibGluZVN0YXJ0IiwibGluZUVuZCIsInJlam9pbiIsInNoaWZ0IiwicmVzdWx0IiwiSW50ZXJzZWN0aW9uIiwicG9pbnRzIiwib3RoZXIiLCJlbnRyeSIsImNsaXAiLCJzZWdtZW50cyIsInNlZ21lbnQiLCJwMCIsInAxIiwicG9pbnRFcXVhbCIsInN0cmVhbSIsImNvbXBhcmVJbnRlcnNlY3Rpb24iLCJzdGFydEluc2lkZSIsImN1cnJlbnQiLCJpc1N1YmplY3QiLCJsb25naXR1ZGUiLCJzaW5QaGkiLCJub3JtYWwiLCJhbmdsZSIsIndpbmRpbmciLCJwb2x5Z29uIiwicmluZyIsInBvaW50MCIsImxhbWJkYTAiLCJwaGkwIiwic2luUGhpMCIsImNvc1BoaTAiLCJsYW1iZGExIiwic2luUGhpMSIsImNvc1BoaTEiLCJwb2ludDEiLCJwaGkxIiwiZGVsdGEiLCJhYnNEZWx0YSIsImFudGltZXJpZGlhbiIsImludGVyc2VjdGlvbiIsInBoaUFyYyIsInNpbmsiLCJjbGlwTGluZSIsInJpbmdCdWZmZXIiLCJyaW5nU2luayIsInBvbHlnb25TdGFydGVkIiwicG9seWdvblN0YXJ0IiwicG9pbnRSaW5nIiwicmluZ1N0YXJ0IiwicmluZ0VuZCIsInBvbHlnb25FbmQiLCJwb2x5Z29uQ29udGFpbnMiLCJzcGhlcmUiLCJwb2ludFZpc2libGUiLCJwb2ludExpbmUiLCJjbGVhbiIsInJpbmdTZWdtZW50cyIsInZhbGlkU2VnbWVudCIsInNpZ24wIiwic2lnbjEiLCJzaW5MYW1iZGEwTGFtYmRhMSIsImNsaXBBbnRpbWVyaWRpYW5JbnRlcnNlY3QiLCJmcm9tIiwidG8iLCJkaXJlY3Rpb24iLCJQYXRoQ29udGV4dCIsIl9jb250ZXh0IiwiX3JhZGl1cyIsInBvaW50UmFkaXVzIiwiX2xpbmUiLCJfcG9pbnQiLCJQYXRoU3RyaW5nIiwiX3N0cmluZyIsIl9jaXJjbGUiLCJ0cmFuc2Zvcm1lciIsIm1ldGhvZHMiLCJUcmFuc2Zvcm1TdHJlYW0iLCJhemltdXRoYWxSYXciLCJjeCIsImN5IiwiYXppbXV0aGFsSW52ZXJ0Iiwic2MiLCJjYyIsImF6aW11dGhhbEVxdWFsQXJlYVJhdyIsImN4Y3kiLCJhemltdXRoYWxFcXVpZGlzdGFudFJhdyIsIm1lcmNhdG9yUmF3IiwiZXF1aXJlY3Rhbmd1bGFyUmF3IiwiQTEiLCJBMiIsIkEzIiwiQTQiLCJNIiwiZXF1YWxFYXJ0aFJhdyIsImwyIiwibDYiLCJnbm9tb25pY1JhdyIsIm5hdHVyYWxFYXJ0aDFSYXciLCJwaGkyIiwicGhpNCIsIm9ydGhvZ3JhcGhpY1JhdyIsInN0ZXJlb2dyYXBoaWNSYXciLCJ0cmFuc3ZlcnNlTWVyY2F0b3JSYXciLCJzdW0iLCJoaWVyYXJjaHkiLCJjaGlsZHMiLCJOb2RlIiwidmFsdWVkIiwiZGVmYXVsdENoaWxkcmVuIiwiZGVwdGgiLCJlYWNoQmVmb3JlIiwiY29tcHV0ZUhlaWdodCIsImNvcHlEYXRhIiwiaGVpZ2h0IiwiY291bnQiLCJlYWNoQWZ0ZXIiLCJhbmNlc3RvciIsImFOb2RlcyIsImFuY2VzdG9ycyIsImJOb2RlcyIsImxlYXN0Q29tbW9uQW5jZXN0b3IiLCJkZXNjZW5kYW50cyIsImxlYXZlcyIsImxpbmtzIiwiVHJlZU5vZGUiLCJBIiwic3F1YXJpZnlSYXRpbyIsInJhdGlvIiwibm9kZVZhbHVlIiwic3VtVmFsdWUiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwibmV3UmF0aW8iLCJtaW5SYXRpbyIsImFscGhhIiwiYmV0YSIsImRpY2UiLCJzcXVhcmlmeSIsInJlc3F1YXJpZnkiLCJfc3F1YXJpZnkiLCJyYW5kb20iLCJyYW5kb21Vbmlmb3JtIiwic291cmNlUmFuZG9tVW5pZm9ybSIsInJhbmRvbU5vcm1hbCIsIm11Iiwic2lnbWEiLCJzb3VyY2VSYW5kb21Ob3JtYWwiLCJyYW5kb21Mb2dOb3JtYWwiLCJzb3VyY2VSYW5kb21Mb2dOb3JtYWwiLCJyYW5kb21JcndpbkhhbGwiLCJzb3VyY2VSYW5kb21JcndpbkhhbGwiLCJyYW5kb21CYXRlcyIsImlyd2luSGFsbCIsInNvdXJjZVJhbmRvbUJhdGVzIiwicmFuZG9tRXhwb25lbnRpYWwiLCJzb3VyY2VSYW5kb21FeHBvbmVudGlhbCIsImluaXRSYW5nZSIsImltcGxpY2l0Iiwib3JkaW5hbCIsInVua25vd24iLCJiYW5kIiwib3JkaW5hbFJhbmdlIiwicGFkZGluZ0lubmVyIiwicGFkZGluZ091dGVyIiwicmVzY2FsZSIsInJhbmdlUm91bmQiLCJuZXdJbnRlcnZhbCIsImZsb29yaSIsIm9mZnNldGkiLCJmaWVsZCIsImludGVydmFsIiwiZDAiLCJkMSIsInNldFRpbWUiLCJzZXRNb250aCIsInNldEhvdXJzIiwic2V0RnVsbFllYXIiLCJnZXRGdWxsWWVhciIsInNldERhdGUiLCJnZXRNb250aCIsImR1cmF0aW9uTWludXRlIiwiZHVyYXRpb25XZWVrIiwid2Vla2RheSIsImdldERhdGUiLCJnZXREYXkiLCJnZXRUaW1lem9uZU9mZnNldCIsInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRuZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5IiwiZ2V0TWlsbGlzZWNvbmRzIiwiZ2V0U2Vjb25kcyIsImdldE1pbnV0ZXMiLCJnZXRIb3VycyIsInV0Y1dlZWtkYXkiLCJzZXRVVENEYXRlIiwiZ2V0VVRDRGF5Iiwic2V0VVRDSG91cnMiLCJ1dGNTdW5kYXkiLCJ1dGNNb25kYXkiLCJ1dGNUdWVzZGF5IiwidXRjV2VkbmVzZGF5IiwidXRjVGh1cnNkYXkiLCJ1dGNGcmlkYXkiLCJ1dGNTYXR1cmRheSIsInV0Y0RheSIsInV0Y1llYXIiLCJzZXRVVENNb250aCIsInNldFVUQ0Z1bGxZZWFyIiwibG9jYWxEYXRlIiwiSCIsIlMiLCJMIiwidXRjRGF0ZSIsIlVUQyIsIm5ld0RhdGUiLCJwYWRzIiwibnVtYmVyUmUiLCJwZXJjZW50UmUiLCJyZXF1b3RlUmUiLCJyZXF1b3RlIiwiZm9ybWF0UmUiLCJmb3JtYXRMb29rdXAiLCJwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkiLCJwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkiLCJ1IiwicGFyc2VXZWVrTnVtYmVyU3VuZGF5IiwiVSIsInBhcnNlV2Vla051bWJlcklTTyIsIlYiLCJwYXJzZVdlZWtOdW1iZXJNb25kYXkiLCJXIiwicGFyc2VGdWxsWWVhciIsInBhcnNlWWVhciIsInBhcnNlWm9uZSIsIloiLCJwYXJzZVF1YXJ0ZXIiLCJwYXJzZU1vbnRoTnVtYmVyIiwicGFyc2VEYXlPZk1vbnRoIiwicGFyc2VEYXlPZlllYXIiLCJwYXJzZUhvdXIyNCIsInBhcnNlTWludXRlcyIsInBhcnNlU2Vjb25kcyIsInBhcnNlTWlsbGlzZWNvbmRzIiwicGFyc2VNaWNyb3NlY29uZHMiLCJwYXJzZUxpdGVyYWxQZXJjZW50IiwicGFyc2VVbml4VGltZXN0YW1wIiwiUSIsInBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMiLCJmb3JtYXREYXlPZk1vbnRoIiwiZm9ybWF0SG91cjI0IiwiZm9ybWF0SG91cjEyIiwiZm9ybWF0RGF5T2ZZZWFyIiwiZm9ybWF0TWlsbGlzZWNvbmRzIiwiZm9ybWF0TWljcm9zZWNvbmRzIiwiZm9ybWF0TW9udGhOdW1iZXIiLCJmb3JtYXRNaW51dGVzIiwiZm9ybWF0U2Vjb25kcyIsImZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkiLCJkYXkiLCJmb3JtYXRXZWVrTnVtYmVyU3VuZGF5IiwiZm9ybWF0V2Vla051bWJlcklTTyIsImZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0RnVsbFllYXIiLCJmb3JtYXRab25lIiwiZm9ybWF0VVRDRGF5T2ZNb250aCIsImZvcm1hdFVUQ0hvdXIyNCIsImZvcm1hdFVUQ0hvdXIxMiIsImZvcm1hdFVUQ0RheU9mWWVhciIsImZvcm1hdFVUQ01pbGxpc2Vjb25kcyIsImZvcm1hdFVUQ01pY3Jvc2Vjb25kcyIsImZvcm1hdFVUQ01vbnRoTnVtYmVyIiwiZm9ybWF0VVRDTWludXRlcyIsImZvcm1hdFVUQ1NlY29uZHMiLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5IiwiZG93IiwiZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSIsImZvcm1hdFVUQ1dlZWtOdW1iZXJJU08iLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5IiwiZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSIsImZvcm1hdFVUQ1llYXIiLCJmb3JtYXRVVENGdWxsWWVhciIsImZvcm1hdFVUQ1pvbmUiLCJmb3JtYXRMaXRlcmFsUGVyY2VudCIsImZvcm1hdFVuaXhUaW1lc3RhbXAiLCJmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyIsImxvY2FsZV9kYXRlVGltZSIsImRhdGVUaW1lIiwibG9jYWxlX2RhdGUiLCJsb2NhbGVfdGltZSIsImxvY2FsZV9wZXJpb2RzIiwicGVyaW9kcyIsImxvY2FsZV93ZWVrZGF5cyIsImRheXMiLCJsb2NhbGVfc2hvcnRXZWVrZGF5cyIsInNob3J0RGF5cyIsImxvY2FsZV9tb250aHMiLCJtb250aHMiLCJsb2NhbGVfc2hvcnRNb250aHMiLCJzaG9ydE1vbnRocyIsInBlcmlvZFJlIiwicGVyaW9kTG9va3VwIiwid2Vla2RheVJlIiwid2Vla2RheUxvb2t1cCIsInNob3J0V2Vla2RheVJlIiwic2hvcnRXZWVrZGF5TG9va3VwIiwibW9udGhSZSIsIm1vbnRoTG9va3VwIiwic2hvcnRNb250aFJlIiwic2hvcnRNb250aExvb2t1cCIsImZvcm1hdHMiLCJ1dGNGb3JtYXRzIiwicGFyc2VzIiwicGFyc2VTcGVjaWZpZXIiLCJjaGFyQXQiLCJuZXdQYXJzZSIsIndlZWsiLCJYIiwidXRjRm9ybWF0IiwidXRjUGFyc2UiLCJmb3JtYXRMb2NhbGUiLCJ1dGNNb250aCIsInV0Y0hvdXIiLCJzZXRVVENNaW51dGVzIiwidXRjTWludXRlIiwic2V0VVRDU2Vjb25kcyIsIkxpbmVhciIsImFyZWFTdGFydCIsImFyZWFFbmQiLCJjdXJ2ZVJhZGlhbCIsIlJhZGlhbCIsImN1cnZlIiwiX2N1cnZlIiwicmFkaWFsIiwia3IiLCJCYXNpcyIsIkJhc2lzQ2xvc2VkIiwiX3gyIiwiX3gzIiwiX3g0IiwiX3kyIiwiX3kzIiwiX3k0IiwiQmFzaXNPcGVuIiwiQnVuZGxlIiwiX2Jhc2lzIiwiX2JldGEiLCJidW5kbGUiLCJfayIsIkNhcmRpbmFsIiwidGVuc2lvbiIsImNhcmRpbmFsIiwiQ2FyZGluYWxDbG9zZWQiLCJfeDUiLCJfeTUiLCJDYXJkaW5hbE9wZW4iLCJfbDAxX2EiLCJfbDAxXzJhIiwiX2wxMl9hIiwiX2wxMl8yYSIsIl9sMjNfYSIsIl9sMjNfMmEiLCJDYXRtdWxsUm9tIiwiX2FscGhhIiwieDIzIiwieTIzIiwiY2F0bXVsbFJvbSIsIkNhdG11bGxSb21DbG9zZWQiLCJDYXRtdWxsUm9tT3BlbiIsIkxpbmVhckNsb3NlZCIsInNsb3BlMyIsImgwIiwiaDEiLCJzMCIsInMxIiwic2xvcGUyIiwiTW9ub3RvbmVYIiwiTW9ub3RvbmVZIiwiUmVmbGVjdENvbnRleHQiLCJOYXR1cmFsIiwiY29udHJvbFBvaW50cyIsIl90MCIsInB4IiwicHkiLCJTdGVwIiwiX3QiLCJSZWRCbGFja1RyZWUiLCJSZWRCbGFja05vZGUiLCJSIiwiUCIsIlJlZEJsYWNrUm90YXRlTGVmdCIsIlJlZEJsYWNrUm90YXRlUmlnaHQiLCJSZWRCbGFja0ZpcnN0IiwiYWZ0ZXIiLCJncmFuZHBhIiwidW5jbGUiLCJzaWJsaW5nIiwiY3JlYXRlRWRnZSIsImVkZ2UiLCJzZXRFZGdlRW5kIiwiY2VsbHMiLCJoYWxmZWRnZXMiLCJjcmVhdGVCb3JkZXJFZGdlIiwidmVydGV4IiwiY2xpcEVkZ2UiLCJheCIsImF5IiwiY29ubmVjdEVkZ2UiLCJmbSIsImZiIiwibHgiLCJseSIsInJ4IiwicnkiLCJmeCIsImZ5IiwiY2VsbEhhbGZlZGdlQW5nbGUiLCJjZWxsIiwic2l0ZSIsInZhIiwidmIiLCJjZWxsSGFsZmVkZ2VTdGFydCIsImNlbGxIYWxmZWRnZUVuZCIsImZpcnN0Q2lyY2xlIiwiY2lyY2xlUG9vbCIsIkNpcmNsZSIsImF0dGFjaENpcmNsZSIsImxBcmMiLCJyQXJjIiwibFNpdGUiLCJjU2l0ZSIsInJTaXRlIiwiYngiLCJieSIsImhhIiwiaGMiLCJjaXJjbGUiLCJkZXRhY2hDaXJjbGUiLCJiZWFjaFBvb2wiLCJCZWFjaCIsImNyZWF0ZUJlYWNoIiwiYmVhY2giLCJkZXRhY2hCZWFjaCIsImJlYWNoZXMiLCJyZW1vdmVCZWFjaCIsImRpc2FwcGVhcmluZyIsInVuc2hpZnQiLCJpQXJjIiwibkFyY3MiLCJhZGRCZWFjaCIsImR4bCIsImR4ciIsImRpcmVjdHJpeCIsImxlZnRCcmVha1BvaW50IiwicmlnaHRCcmVha1BvaW50IiwiY3JlYXRlQ2VsbCIsIm5ld0FyYyIsImhiIiwicmZvY3giLCJyZm9jeSIsInBieTIiLCJsZm9jeCIsImxmb2N5IiwicGxieTIiLCJobCIsImFieTIiLCJsZXhpY29ncmFwaGljIiwiRGlhZ3JhbSIsInNpdGVzIiwic29ydENlbGxIYWxmZWRnZXMiLCJjbGlwRWRnZXMiLCJpQ2VsbCIsImlIYWxmZWRnZSIsIm5IYWxmZWRnZXMiLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsIm5DZWxscyIsImRjIiwidjAwIiwidjAxIiwidjExIiwidjEwIiwiY2xpcENlbGxzIiwiZWRnZXMiLCJwb2x5Z29ucyIsInRyaWFuZ2xlcyIsImUxIiwiX2ZvdW5kIiwidngiLCJ2eSIsIlRyYW5zZm9ybSIsImFwcGx5WCIsImFwcGx5WSIsImxvY2F0aW9uIiwiaW52ZXJ0WCIsImludmVydFkiLCJyZXNjYWxlWCIsInJlc2NhbGVZIiwiQ29sbGFwc2libGVIZWF0TWFwIiwibWFyZ2luIiwiZGF0YVVybCIsInJvb3RFbGVtZW50IiwiaW5pdGlhbFBhaXJpbmciLCJzY3JvbGxpbmciLCJnZXRFbGVtZW50QnlJZCIsImNsaWVudFdpZHRoIiwieEF4aXNTdmciLCJ0b3AiLCJzY3JvbGxpbmdUaW1lT3V0IiwiY2xpcHMiLCJjaGFydEJvZHkiLCJtYWluIiwidGl0bGUiLCJnWSIsImdYIiwicmVkcyIsInNjYWxlT3JkaW5hbCIsInNjYWxlQmFuZCIsInhBeGlzIiwieUF4aXMiLCJheGlzTGVmdCIsImhlYWRlcnMiLCJIZWFkZXJzIiwiZGF0YUFzTmV0d29yayIsImdlbmVzIiwiaXRlbSIsInByb2NlZHVyZXMiLCJwYXJhbWV0ZXJzIiwicmVuZGVyIiwic29ydEJ5IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwic2VsZWN0ZWRQcm9jZWR1cmUiLCJwYWlyaW5nIiwidmFsdWUwIiwibjAiLCJ2YWx1ZXMwIiwibjEiLCJ2YWx1ZXMxIiwicmVkdWNlIiwiY3Jvc3MiLCJpbml0aWFsTWF0cml4IiwiYWNjIiwiY3VyIiwibGluayIsIndlaWdodCIsImNvbHVtbk5hbWVzIiwicm93TmFtZXMiLCJkeW5hbWljSGVpZ2h0IiwieVJhbmdlIiwibGFiZWwiLCJkZWxheUNlbGwiLCJnZW5lIiwicHJvY2VkdXJlIiwiZW50ZXJSZWN0IiwidXBkYXRlUmVjdCIsImV4aXRSZWN0IiwidHJ1bmNhdGUiLCJ4TGFiZWxzIiwicHJvY2VkdXJlTmFtZSIsInBhcmFtZXRlciIsInN0YXJ0c1dpdGgiLCJmYWNldF9jb3VudHMiLCJmYWNldF9waXZvdCIsIm5vZGVJZHMiLCJTZXQiLCJtZ2lQaXZvdCIsImdlbmVQaXZvdCIsInBpdm90IiwiZ2VuZUlkIiwicHJvY2VkdXJlTmFtZVBpdm90IiwiZ2VuZVByb2NlZHVyZUxpbmsiLCJwYXJhbWV0ZXJOYW1lUGl2b3QiLCJwYXJhbWV0ZXJJZCIsInByb2NlZHVyZVBhcmFtZXRlckxpbmsiLCJzaWduaWZpY2FudFBpdm90IiwidXNlV29yZEJvdW5kYXJ5Iiwic3ViU3RyaW5nIiwic3Vic3RyIiwibGFzdEluZGV4T2YiLCJ6b29tSWRlbnRpdHkiLCJ6b29tIiwiZmlsdGVyQnkiLCJmaWx0ZXJGdW5jIiwicmVjdFNlbGVjdGlvbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwidGFibGVGaWx0ZXIiLCJvcGVuIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29udGVudCIsIm9wdGlvbnMiLCJsb2NhbHMiLCJ1c2VTb3VyY2VNYXAiLCJjc3NNYXBwaW5nIiwiYnRvYSIsInNvdXJjZU1hcHBpbmciLCJzb3VyY2VNYXAiLCJiYXNlNjQiLCJ1bmVzY2FwZSIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlUm9vdCIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJtZWRpYVF1ZXJ5IiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsIl9pIiwibWVtbyIsInN0eWxlc0luRG9tIiwiaXNPbGRJRSIsIkJvb2xlYW4iLCJhbGwiLCJhdG9iIiwiZ2V0VGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJsaXN0VG9TdHlsZXMiLCJzdHlsZXMiLCJuZXdTdHlsZXMiLCJiYXNlIiwicGFydCIsImNzcyIsIm1lZGlhIiwicGFydHMiLCJhZGRTdHlsZXNUb0RvbSIsImRvbVN0eWxlIiwicmVmcyIsImFkZFN0eWxlIiwiaW5zZXJ0U3R5bGVFbGVtZW50IiwiYXR0cmlidXRlcyIsIm5vbmNlIiwidGV4dFN0b3JlIiwicmVwbGFjZVRleHQiLCJyZXBsYWNlbWVudCIsImFwcGx5VG9TaW5nbGV0b25UYWciLCJvYmoiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiY2hpbGROb2RlcyIsImFwcGx5VG9UYWciLCJzaW5nbGV0b24iLCJzaW5nbGV0b25Db3VudGVyIiwic3R5bGVJbmRleCIsInJlbW92ZVN0eWxlRWxlbWVudCIsIm5ld09iaiIsIm5ld0xpc3QiLCJtYXlSZW1vdmUiLCJfZG9tU3R5bGUiXSwibWFwcGluZ3MiOiJtQ0FDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUEwRGYsT0FyREFGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FB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QnBELEVBQVFvRCxZQUN2Q3BELEVBQVFvRCxVQUFZbEMsS0FHdEIsSUFBSVUsRUFBU0QsRUFBYWoxQyxFQUFNc3pDLEdBRWhDLE9BREFtQyxFQUFlUCxFQUFRNUIsR0FDaEIsU0FBZ0J5RCxHQUdyQixJQUZBLElBQUlDLEVBQVksR0FFUDlrRCxFQUFJLEVBQUdBLEVBQUlnakQsRUFBTzNnRCxPQUFRckMsSUFBSyxDQUN0QyxJQUFJbTlDLEVBQU82RixFQUFPaGpELEdBQ2R3akQsRUFBV25CLEVBQVlsRixFQUFLNW9DLElBRTVCaXZDLElBQ0ZBLEVBQVNDLE9BQ1RxQixFQUFVdDhDLEtBQUtnN0MsSUFJZnFCLEdBRUZ0QixFQURnQlIsRUFBYThCLEVBQVN6RCxHQUNaQSxHQUc1QixJQUFLLElBQUllLEVBQUssRUFBR0EsRUFBSzJDLEVBQVV6aUQsT0FBUTgvQyxJQUFNLENBQzVDLElBQUk0QyxFQUFZRCxFQUFVM0MsR0FFMUIsR0FBdUIsSUFBbkI0QyxFQUFVdEIsS0FBWSxDQUN4QixJQUFLLElBQUkxL0MsRUFBSSxFQUFHQSxFQUFJZ2hELEVBQVV6QixNQUFNamhELE9BQVEwQixJQUMxQ2doRCxFQUFVekIsTUFBTXYvQyxZQUdYcytDLEVBQVkwQyxFQUFVeHdDIiwiZmlsZSI6ImNvbGxhcHNpYmxlSGVhdG1hcC5idW5kbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMyk7XG4iLCJleHBvcnQgdmFyIG5hbWUgPSBcImQzXCI7XG5leHBvcnQgdmFyIHZlcnNpb24gPSBcIjUuMTIuMFwiO1xuZXhwb3J0IHZhciBkZXNjcmlwdGlvbiA9IFwiRGF0YS1Ecml2ZW4gRG9jdW1lbnRzXCI7XG5leHBvcnQgdmFyIGtleXdvcmRzID0gW1wiZG9tXCIsXCJ2aXN1YWxpemF0aW9uXCIsXCJzdmdcIixcImFuaW1hdGlvblwiLFwiY2FudmFzXCJdO1xuZXhwb3J0IHZhciBob21lcGFnZSA9IFwiaHR0cHM6Ly9kM2pzLm9yZ1wiO1xuZXhwb3J0IHZhciBsaWNlbnNlID0gXCJCU0QtMy1DbGF1c2VcIjtcbmV4cG9ydCB2YXIgYXV0aG9yID0ge1wibmFtZVwiOlwiTWlrZSBCb3N0b2NrXCIsXCJ1cmxcIjpcImh0dHBzOi8vYm9zdC5vY2tzLm9yZy9taWtlXCJ9O1xuZXhwb3J0IHZhciBtYWluID0gXCJkaXN0L2QzLm5vZGUuanNcIjtcbmV4cG9ydCB2YXIgdW5wa2cgPSBcImRpc3QvZDMubWluLmpzXCI7XG5leHBvcnQgdmFyIGpzZGVsaXZyID0gXCJkaXN0L2QzLm1pbi5qc1wiO1xuZXhwb3J0IHZhciBtb2R1bGUgPSBcImluZGV4LmpzXCI7XG5leHBvcnQgdmFyIHJlcG9zaXRvcnkgPSB7XCJ0eXBlXCI6XCJnaXRcIixcInVybFwiOlwiaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLmdpdFwifTtcbmV4cG9ydCB2YXIgZmlsZXMgPSBbXCJkaXN0LyoqLyouanNcIixcImluZGV4LmpzXCJdO1xuZXhwb3J0IHZhciBzY3JpcHRzID0ge1wicHJldGVzdFwiOlwicmltcmFmIGRpc3QgJiYgbWtkaXIgZGlzdCAmJiBqc29uMm1vZHVsZSBwYWNrYWdlLmpzb24gPiBkaXN0L3BhY2thZ2UuanMgJiYgcm9sbHVwIC1jXCIsXCJ0ZXN0XCI6XCJ0YXBlICd0ZXN0LyoqLyotdGVzdC5qcydcIixcInByZXB1Ymxpc2hPbmx5XCI6XCJ5YXJuIHRlc3RcIixcInBvc3RwdWJsaXNoXCI6XCJnaXQgcHVzaCAmJiBnaXQgcHVzaCAtLXRhZ3MgJiYgY2QgLi4vZDMuZ2l0aHViLmNvbSAmJiBnaXQgcHVsbCAmJiBjcCAuLi9kMy9kaXN0L2QzLmpzIGQzLnY1LmpzICYmIGNwIC4uL2QzL2Rpc3QvZDMubWluLmpzIGQzLnY1Lm1pbi5qcyAmJiBnaXQgYWRkIGQzLnY1LmpzIGQzLnY1Lm1pbi5qcyAmJiBnaXQgY29tbWl0IC1tIFxcXCJkMyAke25wbV9wYWNrYWdlX3ZlcnNpb259XFxcIiAmJiBnaXQgcHVzaCAmJiBjZCAtICYmIGNkIC4uL2QzLWJvd2VyICYmIGdpdCBwdWxsICYmIGNwIC4uL2QzL0xJQ0VOU0UgLi4vZDMvUkVBRE1FLm1kIC4uL2QzL2Rpc3QvZDMuanMgLi4vZDMvZGlzdC9kMy5taW4uanMgLiAmJiBnaXQgYWRkIC0tIExJQ0VOU0UgUkVBRE1FLm1kIGQzLmpzIGQzLm1pbi5qcyAmJiBnaXQgY29tbWl0IC1tIFxcXCIke25wbV9wYWNrYWdlX3ZlcnNpb259XFxcIiAmJiBnaXQgdGFnIC1hbSBcXFwiJHtucG1fcGFja2FnZV92ZXJzaW9ufVxcXCIgdiR7bnBtX3BhY2thZ2VfdmVyc2lvbn0gJiYgZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzICYmIGNkIC0gJiYgemlwIC1qIGRpc3QvZDMuemlwIC0tIExJQ0VOU0UgUkVBRE1FLm1kIEFQSS5tZCBDSEFOR0VTLm1kIGRpc3QvZDMuanMgZGlzdC9kMy5taW4uanNcIn07XG5leHBvcnQgdmFyIGRldkRlcGVuZGVuY2llcyA9IHtcImpzb24ybW9kdWxlXCI6XCIwLjBcIixcInJpbXJhZlwiOlwiMlwiLFwicm9sbHVwXCI6XCIxXCIsXCJyb2xsdXAtcGx1Z2luLWFzY2lpXCI6XCIwLjBcIixcInJvbGx1cC1wbHVnaW4tbm9kZS1yZXNvbHZlXCI6XCIzXCIsXCJyb2xsdXAtcGx1Z2luLXRlcnNlclwiOlwiNVwiLFwidGFwZVwiOlwiNFwifTtcbmV4cG9ydCB2YXIgZGVwZW5kZW5jaWVzID0ge1wiZDMtYXJyYXlcIjpcIjFcIixcImQzLWF4aXNcIjpcIjFcIixcImQzLWJydXNoXCI6XCIxXCIsXCJkMy1jaG9yZFwiOlwiMVwiLFwiZDMtY29sbGVjdGlvblwiOlwiMVwiLFwiZDMtY29sb3JcIjpcIjFcIixcImQzLWNvbnRvdXJcIjpcIjFcIixcImQzLWRpc3BhdGNoXCI6XCIxXCIsXCJkMy1kcmFnXCI6XCIxXCIsXCJkMy1kc3ZcIjpcIjFcIixcImQzLWVhc2VcIjpcIjFcIixcImQzLWZldGNoXCI6XCIxXCIsXCJkMy1mb3JjZVwiOlwiMVwiLFwiZDMtZm9ybWF0XCI6XCIxXCIsXCJkMy1nZW9cIjpcIjFcIixcImQzLWhpZXJhcmNoeVwiOlwiMVwiLFwiZDMtaW50ZXJwb2xhdGVcIjpcIjFcIixcImQzLXBhdGhcIjpcIjFcIixcImQzLXBvbHlnb25cIjpcIjFcIixcImQzLXF1YWR0cmVlXCI6XCIxXCIsXCJkMy1yYW5kb21cIjpcIjFcIixcImQzLXNjYWxlXCI6XCIyXCIsXCJkMy1zY2FsZS1jaHJvbWF0aWNcIjpcIjFcIixcImQzLXNlbGVjdGlvblwiOlwiMVwiLFwiZDMtc2hhcGVcIjpcIjFcIixcImQzLXRpbWVcIjpcIjFcIixcImQzLXRpbWUtZm9ybWF0XCI6XCIyXCIsXCJkMy10aW1lclwiOlwiMVwiLFwiZDMtdHJhbnNpdGlvblwiOlwiMVwiLFwiZDMtdm9yb25vaVwiOlwiMVwiLFwiZDMtem9vbVwiOlwiMVwifTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmdcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICBpZiAoY29tcGFyZS5sZW5ndGggPT09IDEpIGNvbXBhcmUgPSBhc2NlbmRpbmdDb21wYXJhdG9yKGNvbXBhcmUpO1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IGZ1bmN0aW9uKGEsIHgsIGxvLCBoaSkge1xuICAgICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICAgIGlmIChoaSA9PSBudWxsKSBoaSA9IGEubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgICAgdmFyIG1pZCA9IGxvICsgaGkgPj4+IDE7XG4gICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPCAwKSBsbyA9IG1pZCArIDE7XG4gICAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG87XG4gICAgfSxcbiAgICByaWdodDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA+IDApIGhpID0gbWlkO1xuICAgICAgICBlbHNlIGxvID0gbWlkICsgMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsbztcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZ0NvbXBhcmF0b3IoZikge1xuICByZXR1cm4gZnVuY3Rpb24oZCwgeCkge1xuICAgIHJldHVybiBhc2NlbmRpbmcoZihkKSwgeCk7XG4gIH07XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuaW1wb3J0IGJpc2VjdG9yIGZyb20gXCIuL2Jpc2VjdG9yXCI7XG5cbnZhciBhc2NlbmRpbmdCaXNlY3QgPSBiaXNlY3Rvcihhc2NlbmRpbmcpO1xuZXhwb3J0IHZhciBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDtcbmV4cG9ydCB2YXIgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheSwgZikge1xuICBpZiAoZiA9PSBudWxsKSBmID0gcGFpcjtcbiAgdmFyIGkgPSAwLCBuID0gYXJyYXkubGVuZ3RoIC0gMSwgcCA9IGFycmF5WzBdLCBwYWlycyA9IG5ldyBBcnJheShuIDwgMCA/IDAgOiBuKTtcbiAgd2hpbGUgKGkgPCBuKSBwYWlyc1tpXSA9IGYocCwgcCA9IGFycmF5WysraV0pO1xuICByZXR1cm4gcGFpcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWlyKGEsIGIpIHtcbiAgcmV0dXJuIFthLCBiXTtcbn1cbiIsImltcG9ydCB7cGFpcn0gZnJvbSBcIi4vcGFpcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzMCwgdmFsdWVzMSwgcmVkdWNlKSB7XG4gIHZhciBuMCA9IHZhbHVlczAubGVuZ3RoLFxuICAgICAgbjEgPSB2YWx1ZXMxLmxlbmd0aCxcbiAgICAgIHZhbHVlcyA9IG5ldyBBcnJheShuMCAqIG4xKSxcbiAgICAgIGkwLFxuICAgICAgaTEsXG4gICAgICBpLFxuICAgICAgdmFsdWUwO1xuXG4gIGlmIChyZWR1Y2UgPT0gbnVsbCkgcmVkdWNlID0gcGFpcjtcblxuICBmb3IgKGkwID0gaSA9IDA7IGkwIDwgbjA7ICsraTApIHtcbiAgICBmb3IgKHZhbHVlMCA9IHZhbHVlczBbaTBdLCBpMSA9IDA7IGkxIDwgbjE7ICsraTEsICsraSkge1xuICAgICAgdmFsdWVzW2ldID0gcmVkdWNlKHZhbHVlMCwgdmFsdWVzMVtpMV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG4iLCJ2YXIgYXJyYXkgPSBBcnJheS5wcm90b3R5cGU7XG5cbmV4cG9ydCB2YXIgc2xpY2UgPSBhcnJheS5zbGljZTtcbmV4cG9ydCB2YXIgbWFwID0gYXJyYXkubWFwO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpIHwgMCxcbiAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgcmFuZ2VbaV0gPSBzdGFydCArIGkgKiBzdGVwO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuIiwidmFyIGUxMCA9IE1hdGguc3FydCg1MCksXG4gICAgZTUgPSBNYXRoLnNxcnQoMTApLFxuICAgIGUyID0gTWF0aC5zcXJ0KDIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHJldmVyc2UsXG4gICAgICBpID0gLTEsXG4gICAgICBuLFxuICAgICAgdGlja3MsXG4gICAgICBzdGVwO1xuXG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBpZiAoc3RhcnQgPT09IHN0b3AgJiYgY291bnQgPiAwKSByZXR1cm4gW3N0YXJ0XTtcbiAgaWYgKHJldmVyc2UgPSBzdG9wIDwgc3RhcnQpIG4gPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gbjtcbiAgaWYgKChzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpKSA9PT0gMCB8fCAhaXNGaW5pdGUoc3RlcCkpIHJldHVybiBbXTtcblxuICBpZiAoc3RlcCA+IDApIHtcbiAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAvIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmZsb29yKHN0b3AgLyBzdGVwKTtcbiAgICB0aWNrcyA9IG5ldyBBcnJheShuID0gTWF0aC5jZWlsKHN0b3AgLSBzdGFydCArIDEpKTtcbiAgICB3aGlsZSAoKytpIDwgbikgdGlja3NbaV0gPSAoc3RhcnQgKyBpKSAqIHN0ZXA7XG4gIH0gZWxzZSB7XG4gICAgc3RhcnQgPSBNYXRoLmZsb29yKHN0YXJ0ICogc3RlcCk7XG4gICAgc3RvcCA9IE1hdGguY2VpbChzdG9wICogc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdGFydCAtIHN0b3AgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0IC0gaSkgLyBzdGVwO1xuICB9XG5cbiAgaWYgKHJldmVyc2UpIHRpY2tzLnJldmVyc2UoKTtcblxuICByZXR1cm4gdGlja3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgcG93ZXIgPSBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXApIC8gTWF0aC5MTjEwKSxcbiAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlcik7XG4gIHJldHVybiBwb3dlciA+PSAwXG4gICAgICA/IChlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDEpICogTWF0aC5wb3coMTAsIHBvd2VyKVxuICAgICAgOiAtTWF0aC5wb3coMTAsIC1wb3dlcikgLyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcDAgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgc3RlcDEgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwMCkgLyBNYXRoLkxOMTApKSxcbiAgICAgIGVycm9yID0gc3RlcDAgLyBzdGVwMTtcbiAgaWYgKGVycm9yID49IGUxMCkgc3RlcDEgKj0gMTA7XG4gIGVsc2UgaWYgKGVycm9yID49IGU1KSBzdGVwMSAqPSA1O1xuICBlbHNlIGlmIChlcnJvciA+PSBlMikgc3RlcDEgKj0gMjtcbiAgcmV0dXJuIHN0b3AgPCBzdGFydCA/IC1zdGVwMSA6IHN0ZXAxO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHJldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codmFsdWVzLmxlbmd0aCkgLyBNYXRoLkxOMikgKyAxO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHZhciBuID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgIG0sXG4gICAgICBpID0gLTEsXG4gICAgICBqID0gMCxcbiAgICAgIG1lcmdlZCxcbiAgICAgIGFycmF5O1xuXG4gIHdoaWxlICgrK2kgPCBuKSBqICs9IGFycmF5c1tpXS5sZW5ndGg7XG4gIG1lcmdlZCA9IG5ldyBBcnJheShqKTtcblxuICB3aGlsZSAoLS1uID49IDApIHtcbiAgICBhcnJheSA9IGFycmF5c1tuXTtcbiAgICBtID0gYXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlICgtLW0gPj0gMCkge1xuICAgICAgbWVyZ2VkWy0tal0gPSBhcnJheVttXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuIiwiaW1wb3J0IHRyYW5zcG9zZSBmcm9tIFwiLi90cmFuc3Bvc2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0cmFuc3Bvc2UoYXJndW1lbnRzKTtcbn1cbiIsImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eVwiO1xuXG52YXIgdG9wID0gMSxcbiAgICByaWdodCA9IDIsXG4gICAgYm90dG9tID0gMyxcbiAgICBsZWZ0ID0gNCxcbiAgICBlcHNpbG9uID0gMWUtNjtcblxuZnVuY3Rpb24gdHJhbnNsYXRlWCh4KSB7XG4gIHJldHVybiBcInRyYW5zbGF0ZShcIiArICh4ICsgMC41KSArIFwiLDApXCI7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVkoeSkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoMCxcIiArICh5ICsgMC41KSArIFwiKVwiO1xufVxuXG5mdW5jdGlvbiBudW1iZXIoc2NhbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gK3NjYWxlKGQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjZW50ZXIoc2NhbGUpIHtcbiAgdmFyIG9mZnNldCA9IE1hdGgubWF4KDAsIHNjYWxlLmJhbmR3aWR0aCgpIC0gMSkgLyAyOyAvLyBBZGp1c3QgZm9yIDAuNXB4IG9mZnNldC5cbiAgaWYgKHNjYWxlLnJvdW5kKCkpIG9mZnNldCA9IE1hdGgucm91bmQob2Zmc2V0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICByZXR1cm4gK3NjYWxlKGQpICsgb2Zmc2V0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbnRlcmluZygpIHtcbiAgcmV0dXJuICF0aGlzLl9fYXhpcztcbn1cblxuZnVuY3Rpb24gYXhpcyhvcmllbnQsIHNjYWxlKSB7XG4gIHZhciB0aWNrQXJndW1lbnRzID0gW10sXG4gICAgICB0aWNrVmFsdWVzID0gbnVsbCxcbiAgICAgIHRpY2tGb3JtYXQgPSBudWxsLFxuICAgICAgdGlja1NpemVJbm5lciA9IDYsXG4gICAgICB0aWNrU2l6ZU91dGVyID0gNixcbiAgICAgIHRpY2tQYWRkaW5nID0gMyxcbiAgICAgIGsgPSBvcmllbnQgPT09IHRvcCB8fCBvcmllbnQgPT09IGxlZnQgPyAtMSA6IDEsXG4gICAgICB4ID0gb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHQgPyBcInhcIiA6IFwieVwiLFxuICAgICAgdHJhbnNmb3JtID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBib3R0b20gPyB0cmFuc2xhdGVYIDogdHJhbnNsYXRlWTtcblxuICBmdW5jdGlvbiBheGlzKGNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWVzID0gdGlja1ZhbHVlcyA9PSBudWxsID8gKHNjYWxlLnRpY2tzID8gc2NhbGUudGlja3MuYXBwbHkoc2NhbGUsIHRpY2tBcmd1bWVudHMpIDogc2NhbGUuZG9tYWluKCkpIDogdGlja1ZhbHVlcyxcbiAgICAgICAgZm9ybWF0ID0gdGlja0Zvcm1hdCA9PSBudWxsID8gKHNjYWxlLnRpY2tGb3JtYXQgPyBzY2FsZS50aWNrRm9ybWF0LmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IGlkZW50aXR5KSA6IHRpY2tGb3JtYXQsXG4gICAgICAgIHNwYWNpbmcgPSBNYXRoLm1heCh0aWNrU2l6ZUlubmVyLCAwKSArIHRpY2tQYWRkaW5nLFxuICAgICAgICByYW5nZSA9IHNjYWxlLnJhbmdlKCksXG4gICAgICAgIHJhbmdlMCA9ICtyYW5nZVswXSArIDAuNSxcbiAgICAgICAgcmFuZ2UxID0gK3JhbmdlW3JhbmdlLmxlbmd0aCAtIDFdICsgMC41LFxuICAgICAgICBwb3NpdGlvbiA9IChzY2FsZS5iYW5kd2lkdGggPyBjZW50ZXIgOiBudW1iZXIpKHNjYWxlLmNvcHkoKSksXG4gICAgICAgIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQsXG4gICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5kYXRhKFtudWxsXSksXG4gICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh2YWx1ZXMsIHNjYWxlKS5vcmRlcigpLFxuICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLFxuICAgICAgICB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aWNrXCIpLFxuICAgICAgICBsaW5lID0gdGljay5zZWxlY3QoXCJsaW5lXCIpLFxuICAgICAgICB0ZXh0ID0gdGljay5zZWxlY3QoXCJ0ZXh0XCIpO1xuXG4gICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydChcInBhdGhcIiwgXCIudGlja1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZG9tYWluXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpKTtcblxuICAgIHRpY2sgPSB0aWNrLm1lcmdlKHRpY2tFbnRlcik7XG5cbiAgICBsaW5lID0gbGluZS5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKSk7XG5cbiAgICB0ZXh0ID0gdGV4dC5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgb3JpZW50ID09PSB0b3AgPyBcIjBlbVwiIDogb3JpZW50ID09PSBib3R0b20gPyBcIjAuNzFlbVwiIDogXCIwLjMyZW1cIikpO1xuXG4gICAgaWYgKGNvbnRleHQgIT09IHNlbGVjdGlvbikge1xuICAgICAgcGF0aCA9IHBhdGgudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICBsaW5lID0gbGluZS50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGV4dCA9IHRleHQudHJhbnNpdGlvbihjb250ZXh0KTtcblxuICAgICAgdGlja0V4aXQgPSB0aWNrRXhpdC50cmFuc2l0aW9uKGNvbnRleHQpXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gaXNGaW5pdGUoZCA9IHBvc2l0aW9uKGQpKSA/IHRyYW5zZm9ybShkKSA6IHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpOyB9KTtcblxuICAgICAgdGlja0VudGVyXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyB2YXIgcCA9IHRoaXMucGFyZW50Tm9kZS5fX2F4aXM7IHJldHVybiB0cmFuc2Zvcm0ocCAmJiBpc0Zpbml0ZShwID0gcChkKSkgPyBwIDogcG9zaXRpb24oZCkpOyB9KTtcbiAgICB9XG5cbiAgICB0aWNrRXhpdC5yZW1vdmUoKTtcblxuICAgIHBhdGhcbiAgICAgICAgLmF0dHIoXCJkXCIsIG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT0gcmlnaHRcbiAgICAgICAgICAgID8gKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCIsXCIgKyByYW5nZTAgKyBcIkgwLjVWXCIgKyByYW5nZTEgKyBcIkhcIiArIGsgKiB0aWNrU2l6ZU91dGVyIDogXCJNMC41LFwiICsgcmFuZ2UwICsgXCJWXCIgKyByYW5nZTEpXG4gICAgICAgICAgICA6ICh0aWNrU2l6ZU91dGVyID8gXCJNXCIgKyByYW5nZTAgKyBcIixcIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCJWMC41SFwiICsgcmFuZ2UxICsgXCJWXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgcmFuZ2UwICsgXCIsMC41SFwiICsgcmFuZ2UxKSk7XG5cbiAgICB0aWNrXG4gICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCAxKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiB0cmFuc2Zvcm0ocG9zaXRpb24oZCkpOyB9KTtcblxuICAgIGxpbmVcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcik7XG5cbiAgICB0ZXh0XG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAudGV4dChmb3JtYXQpO1xuXG4gICAgc2VsZWN0aW9uLmZpbHRlcihlbnRlcmluZylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCAxMClcbiAgICAgICAgLmF0dHIoXCJmb250LWZhbWlseVwiLCBcInNhbnMtc2VyaWZcIilcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBvcmllbnQgPT09IHJpZ2h0ID8gXCJzdGFydFwiIDogb3JpZW50ID09PSBsZWZ0ID8gXCJlbmRcIiA6IFwibWlkZGxlXCIpO1xuXG4gICAgc2VsZWN0aW9uXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkgeyB0aGlzLl9fYXhpcyA9IHBvc2l0aW9uOyB9KTtcbiAgfVxuXG4gIGF4aXMuc2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2NhbGUgPSBfLCBheGlzKSA6IHNjYWxlO1xuICB9O1xuXG4gIGF4aXMudGlja3MgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGlja0FyZ3VtZW50cyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSwgYXhpcztcbiAgfTtcblxuICBheGlzLnRpY2tBcmd1bWVudHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja0FyZ3VtZW50cyA9IF8gPT0gbnVsbCA/IFtdIDogc2xpY2UuY2FsbChfKSwgYXhpcykgOiB0aWNrQXJndW1lbnRzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrVmFsdWVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tWYWx1ZXMgPSBfID09IG51bGwgPyBudWxsIDogc2xpY2UuY2FsbChfKSwgYXhpcykgOiB0aWNrVmFsdWVzICYmIHRpY2tWYWx1ZXMuc2xpY2UoKTtcbiAgfTtcblxuICBheGlzLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja0Zvcm1hdCA9IF8sIGF4aXMpIDogdGlja0Zvcm1hdDtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSB0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVJbm5lcjtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplSW5uZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVJbm5lciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZU91dGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZU91dGVyO1xuICB9O1xuXG4gIGF4aXMudGlja1BhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1BhZGRpbmcgPSArXywgYXhpcykgOiB0aWNrUGFkZGluZztcbiAgfTtcblxuICByZXR1cm4gYXhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNUb3Aoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXModG9wLCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzUmlnaHQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMocmlnaHQsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNCb3R0b20oc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMoYm90dG9tLCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzTGVmdChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhsZWZ0LCBzY2FsZSk7XG59XG4iLCJ2YXIgbm9vcCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7fX07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKHQgPSBhcmd1bWVudHNbaV0gKyBcIlwiKSB8fCAodCBpbiBfKSkgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0eXBlOiBcIiArIHQpO1xuICAgIF9bdF0gPSBbXTtcbiAgfVxuICByZXR1cm4gbmV3IERpc3BhdGNoKF8pO1xufVxuXG5mdW5jdGlvbiBEaXNwYXRjaChfKSB7XG4gIHRoaXMuXyA9IF87XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcywgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIGlmICh0ICYmICF0eXBlcy5oYXNPd25Qcm9wZXJ0eSh0KSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHQpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5EaXNwYXRjaC5wcm90b3R5cGUgPSBkaXNwYXRjaC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBEaXNwYXRjaCxcbiAgb246IGZ1bmN0aW9uKHR5cGVuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBfID0gdGhpcy5fLFxuICAgICAgICBUID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiLCBfKSxcbiAgICAgICAgdCxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gVC5sZW5ndGg7XG5cbiAgICAvLyBJZiBubyBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZXR1cm4gdGhlIGNhbGxiYWNrIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpICYmICh0ID0gZ2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUpKSkgcmV0dXJuIHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgYSB0eXBlIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIC8vIE90aGVyd2lzZSwgaWYgYSBudWxsIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJlbW92ZSBjYWxsYmFja3Mgb2YgdGhlIGdpdmVuIG5hbWUuXG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgY2FsbGJhY2spO1xuICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNvcHk6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb3B5ID0ge30sIF8gPSB0aGlzLl87XG4gICAgZm9yICh2YXIgdCBpbiBfKSBjb3B5W3RdID0gX1t0XS5zbGljZSgpO1xuICAgIHJldHVybiBuZXcgRGlzcGF0Y2goY29weSk7XG4gIH0sXG4gIGNhbGw6IGZ1bmN0aW9uKHR5cGUsIHRoYXQpIHtcbiAgICBpZiAoKG4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMikgPiAwKSBmb3IgKHZhciBhcmdzID0gbmV3IEFycmF5KG4pLCBpID0gMCwgbiwgdDsgaSA8IG47ICsraSkgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbih0eXBlLCB0aGF0LCBhcmdzKSB7XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHZhciB0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXQodHlwZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoLCBjOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIGMudmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldCh0eXBlLCBuYW1lLCBjYWxsYmFjaykge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKHR5cGVbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgdHlwZVtpXSA9IG5vb3AsIHR5cGUgPSB0eXBlLnNsaWNlKDAsIGkpLmNvbmNhdCh0eXBlLnNsaWNlKGkgKyAxKSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkaXNwYXRjaDtcbiIsImV4cG9ydCB2YXIgeGh0bWwgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzdmc6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeGh0bWw6IHhodG1sLFxuICB4bGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHhtbDogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIlxufTtcbiIsImltcG9ydCBuYW1lc3BhY2VzIGZyb20gXCIuL25hbWVzcGFjZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgcHJlZml4ID0gbmFtZSArPSBcIlwiLCBpID0gcHJlZml4LmluZGV4T2YoXCI6XCIpO1xuICBpZiAoaSA+PSAwICYmIChwcmVmaXggPSBuYW1lLnNsaWNlKDAsIGkpKSAhPT0gXCJ4bWxuc1wiKSBuYW1lID0gbmFtZS5zbGljZShpICsgMSk7XG4gIHJldHVybiBuYW1lc3BhY2VzLmhhc093blByb3BlcnR5KHByZWZpeCkgPyB7c3BhY2U6IG5hbWVzcGFjZXNbcHJlZml4XSwgbG9jYWw6IG5hbWV9IDogbmFtZTtcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4vbmFtZXNwYWNlXCI7XG5pbXBvcnQge3hodG1sfSBmcm9tIFwiLi9uYW1lc3BhY2VzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0b3JJbmhlcml0KG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCxcbiAgICAgICAgdXJpID0gdGhpcy5uYW1lc3BhY2VVUkk7XG4gICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpXG4gICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgbmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0b3JGaXhlZChmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiAoZnVsbG5hbWUubG9jYWxcbiAgICAgID8gY3JlYXRvckZpeGVkXG4gICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG59XG4iLCJmdW5jdGlvbiBub25lKCkge31cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBub25lIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJmdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IGVtcHR5IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCB7RW50ZXJOb2RlfSBmcm9tIFwiLi9lbnRlclwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudFwiO1xuXG52YXIga2V5UHJlZml4ID0gXCIkXCI7IC8vIFByb3RlY3QgYWdhaW5zdCBrZXlzIGxpa2Ug4oCcX19wcm90b19f4oCdLlxuXG5mdW5jdGlvbiBiaW5kSW5kZXgocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSkge1xuICB2YXIgaSA9IDAsXG4gICAgICBub2RlLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGZpdCBpbnRvIHVwZGF0ZS5cbiAgLy8gUHV0IGFueSBudWxsIG5vZGVzIGludG8gZW50ZXIuXG4gIC8vIFB1dCBhbnkgcmVtYWluaW5nIGRhdGEgaW50byBlbnRlci5cbiAgZm9yICg7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBkb27igJl0IGZpdCBpbnRvIGV4aXQuXG4gIGZvciAoOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kS2V5KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEsIGtleSkge1xuICB2YXIgaSxcbiAgICAgIG5vZGUsXG4gICAgICBub2RlQnlLZXlWYWx1ZSA9IHt9LFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleVByZWZpeCArIGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICAgIGlmIChrZXlWYWx1ZSBpbiBub2RlQnlLZXlWYWx1ZSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleVByZWZpeCArIGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSk7XG4gICAgaWYgKG5vZGUgPSBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0pIHtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBhbnkgcmVtYWluaW5nIG5vZGVzIHRoYXQgd2VyZSBub3QgYm91bmQgdG8gZGF0YSB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAobm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVzW2ldXSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICBkYXRhID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaiA9IC0xO1xuICAgIHRoaXMuZWFjaChmdW5jdGlvbihkKSB7IGRhdGFbKytqXSA9IGQ7IH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIGJpbmQgPSBrZXkgPyBiaW5kS2V5IDogYmluZEluZGV4LFxuICAgICAgcGFyZW50cyA9IHRoaXMuX3BhcmVudHMsXG4gICAgICBncm91cHMgPSB0aGlzLl9ncm91cHM7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB2YWx1ZSA9IGNvbnN0YW50KHZhbHVlKTtcblxuICBmb3IgKHZhciBtID0gZ3JvdXBzLmxlbmd0aCwgdXBkYXRlID0gbmV3IEFycmF5KG0pLCBlbnRlciA9IG5ldyBBcnJheShtKSwgZXhpdCA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tqXSxcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbal0sXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgICBkYXRhID0gdmFsdWUuY2FsbChwYXJlbnQsIHBhcmVudCAmJiBwYXJlbnQuX19kYXRhX18sIGosIHBhcmVudHMpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmICghY29tcGFyZSkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiYgYiA/IGNvbXBhcmUoYS5fX2RhdGFfXywgYi5fX2RhdGFfXykgOiAhYSAtICFiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc29ydGdyb3VwID0gc29ydGdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc29ydGdyb3VwcywgdGhpcy5fcGFyZW50cykub3JkZXIoKTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi4vbmFtZXNwYWNlXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpO1xuICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICA6IG5vZGUuZ2V0QXR0cmlidXRlKGZ1bGxuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICByZXR1cm4gKG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIC8vIG5vZGUgaXMgYSBOb2RlXG4gICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XG4gICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbn1cbiIsImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93XCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iLCJmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgZGVsZXRlIHRoaXNbbmFtZV07XG4gICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgIDogcHJvcGVydHlDb25zdGFudCkobmFtZSwgdmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcbn1cbiIsImZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NMaXN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XG4gIHRoaXMuX25vZGUgPSBub2RlO1xuICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcbn1cblxuQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgdGhpcy5fbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKSA+PSAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRmFsc2UobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBuYW1lcyA9IGNsYXNzQXJyYXkobmFtZSArIFwiXCIpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxuICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xufVxuIiwiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIiwiZnVuY3Rpb24gcmFpc2UoKSB7XG4gIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJhaXNlKTtcbn1cbiIsImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvclwiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3RvclwiO1xuXG5mdW5jdGlvbiBjb25zdGFudE51bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBiZWZvcmUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKSxcbiAgICAgIHNlbGVjdCA9IGJlZm9yZSA9PSBudWxsID8gY29uc3RhbnROdWxsIDogdHlwZW9mIGJlZm9yZSA9PT0gXCJmdW5jdGlvblwiID8gYmVmb3JlIDogc2VsZWN0b3IoYmVmb3JlKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmluc2VydEJlZm9yZShjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiZnVuY3Rpb24gcmVtb3ZlKCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XG59XG4iLCJmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICByZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZShmYWxzZSksIHRoaXMubmV4dFNpYmxpbmcpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xuICByZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSh0cnVlKSwgdGhpcy5uZXh0U2libGluZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlZXApIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGRlZXAgPyBzZWxlY3Rpb25fY2xvbmVEZWVwIDogc2VsZWN0aW9uX2Nsb25lU2hhbGxvdyk7XG59XG4iLCJ2YXIgZmlsdGVyRXZlbnRzID0ge307XG5cbmV4cG9ydCB2YXIgZXZlbnQgPSBudWxsO1xuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICBpZiAoIShcIm9ubW91c2VlbnRlclwiIGluIGVsZW1lbnQpKSB7XG4gICAgZmlsdGVyRXZlbnRzID0ge21vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsIG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIn07XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlsdGVyQ29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCk7XG4gIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICBpZiAoIXJlbGF0ZWQgfHwgKHJlbGF0ZWQgIT09IHRoaXMgJiYgIShyZWxhdGVkLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpICYgOCkpKSB7XG4gICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKSB7XG4gIHJldHVybiBmdW5jdGlvbihldmVudDEpIHtcbiAgICB2YXIgZXZlbnQwID0gZXZlbnQ7IC8vIEV2ZW50cyBjYW4gYmUgcmVlbnRyYW50IChlLmcuLCBmb2N1cykuXG4gICAgZXZlbnQgPSBldmVudDE7XG4gICAgdHJ5IHtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgdGhpcy5fX2RhdGFfXywgaW5kZXgsIGdyb3VwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXZlbnQgPSBldmVudDA7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvblJlbW92ZSh0eXBlbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uO1xuICAgIGlmICghb24pIHJldHVybjtcbiAgICBmb3IgKHZhciBqID0gMCwgaSA9IC0xLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBpZiAobyA9IG9uW2pdLCAoIXR5cGVuYW1lLnR5cGUgfHwgby50eXBlID09PSB0eXBlbmFtZS50eXBlKSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5jYXB0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uWysraV0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoKytpKSBvbi5sZW5ndGggPSBpO1xuICAgIGVsc2UgZGVsZXRlIHRoaXMuX19vbjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25BZGQodHlwZW5hbWUsIHZhbHVlLCBjYXB0dXJlKSB7XG4gIHZhciB3cmFwID0gZmlsdGVyRXZlbnRzLmhhc093blByb3BlcnR5KHR5cGVuYW1lLnR5cGUpID8gZmlsdGVyQ29udGV4dExpc3RlbmVyIDogY29udGV4dExpc3RlbmVyO1xuICByZXR1cm4gZnVuY3Rpb24oZCwgaSwgZ3JvdXApIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb24sIG8sIGxpc3RlbmVyID0gd3JhcCh2YWx1ZSwgaSwgZ3JvdXApO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8uY2FwdHVyZSA9IGNhcHR1cmUpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBjYXB0dXJlOiBjYXB0dXJlfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGlmIChjYXB0dXJlID09IG51bGwpIGNhcHR1cmUgPSBmYWxzZTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgdGhpcy5lYWNoKG9uKHR5cGVuYW1lc1tpXSwgdmFsdWUsIGNhcHR1cmUpKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21FdmVudChldmVudDEsIGxpc3RlbmVyLCB0aGF0LCBhcmdzKSB7XG4gIHZhciBldmVudDAgPSBldmVudDtcbiAgZXZlbnQxLnNvdXJjZUV2ZW50ID0gZXZlbnQ7XG4gIGV2ZW50ID0gZXZlbnQxO1xuICB0cnkge1xuICAgIHJldHVybiBsaXN0ZW5lci5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBldmVudCA9IGV2ZW50MDtcbiAgfVxufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3dcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGxcIjtcbmltcG9ydCBzZWxlY3Rpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXRhIGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW50ZXIgZnJvbSBcIi4vZW50ZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fZXhpdCBmcm9tIFwiLi9leGl0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2pvaW4gZnJvbSBcIi4vam9pblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9vcmRlciBmcm9tIFwiLi9vcmRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9zb3J0IGZyb20gXCIuL3NvcnRcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2FsbCBmcm9tIFwiLi9jYWxsXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGVzIGZyb20gXCIuL25vZGVzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGUgZnJvbSBcIi4vbm9kZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9zaXplIGZyb20gXCIuL3NpemVcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW1wdHkgZnJvbSBcIi4vZW1wdHlcIjtcbmltcG9ydCBzZWxlY3Rpb25fZWFjaCBmcm9tIFwiLi9lYWNoXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2F0dHIgZnJvbSBcIi4vYXR0clwiO1xuaW1wb3J0IHNlbGVjdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9wcm9wZXJ0eSBmcm9tIFwiLi9wcm9wZXJ0eVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbGFzc2VkIGZyb20gXCIuL2NsYXNzZWRcIjtcbmltcG9ydCBzZWxlY3Rpb25fdGV4dCBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2h0bWwgZnJvbSBcIi4vaHRtbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9yYWlzZSBmcm9tIFwiLi9yYWlzZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9sb3dlciBmcm9tIFwiLi9sb3dlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9hcHBlbmQgZnJvbSBcIi4vYXBwZW5kXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2luc2VydCBmcm9tIFwiLi9pbnNlcnRcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbG9uZSBmcm9tIFwiLi9jbG9uZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXR1bSBmcm9tIFwiLi9kYXR1bVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9vbiBmcm9tIFwiLi9vblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9kaXNwYXRjaCBmcm9tIFwiLi9kaXNwYXRjaFwiO1xuXG5leHBvcnQgdmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3Rpb24oZ3JvdXBzLCBwYXJlbnRzKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSwgcm9vdCk7XG59XG5cblNlbGVjdGlvbi5wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2VsZWN0aW9uLFxuICBzZWxlY3Q6IHNlbGVjdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogc2VsZWN0aW9uX3NlbGVjdEFsbCxcbiAgZmlsdGVyOiBzZWxlY3Rpb25fZmlsdGVyLFxuICBkYXRhOiBzZWxlY3Rpb25fZGF0YSxcbiAgZW50ZXI6IHNlbGVjdGlvbl9lbnRlcixcbiAgZXhpdDogc2VsZWN0aW9uX2V4aXQsXG4gIGpvaW46IHNlbGVjdGlvbl9qb2luLFxuICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzZWxlY3RvckFsbCBmcm9tIFwiLi4vc2VsZWN0b3JBbGxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBtYXRjaGVyIGZyb20gXCIuLi9tYXRjaGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgZW50ZXIgPSB0eXBlb2Ygb25lbnRlciA9PT0gXCJmdW5jdGlvblwiID8gb25lbnRlcihlbnRlcikgOiBlbnRlci5hcHBlbmQob25lbnRlciArIFwiXCIpO1xuICBpZiAob251cGRhdGUgIT0gbnVsbCkgdXBkYXRlID0gb251cGRhdGUodXBkYXRlKTtcbiAgaWYgKG9uZXhpdCA9PSBudWxsKSBleGl0LnJlbW92ZSgpOyBlbHNlIG9uZXhpdChleGl0KTtcbiAgcmV0dXJuIGVudGVyICYmIHVwZGF0ZSA/IGVudGVyLm1lcmdlKHVwZGF0ZSkub3JkZXIoKSA6IHVwZGF0ZTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rpb24pIHtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gc2VsZWN0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKG1lcmdlcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAtMSwgbSA9IGdyb3Vwcy5sZW5ndGg7ICsraiA8IG07KSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSBncm91cC5sZW5ndGggLSAxLCBuZXh0ID0gZ3JvdXBbaV0sIG5vZGU7IC0taSA+PSAwOykge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBpZiAobmV4dCAmJiBub2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5leHQpIF4gNCkgbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBuZXh0KTtcbiAgICAgICAgbmV4dCA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBpID0gLTE7XG4gIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgbm9kZXNbKytpXSA9IHRoaXM7IH0pO1xuICByZXR1cm4gbm9kZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgKytzaXplOyB9KTtcbiAgcmV0dXJuIHNpemU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCJ2YXIgbmV4dElkID0gMDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9jYWwoKSB7XG4gIHJldHVybiBuZXcgTG9jYWw7XG59XG5cbmZ1bmN0aW9uIExvY2FsKCkge1xuICB0aGlzLl8gPSBcIkBcIiArICgrK25leHRJZCkudG9TdHJpbmcoMzYpO1xufVxuXG5Mb2NhbC5wcm90b3R5cGUgPSBsb2NhbC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBMb2NhbCxcbiAgZ2V0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGlkID0gdGhpcy5fO1xuICAgIHdoaWxlICghKGlkIGluIG5vZGUpKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICAgIHJldHVybiBub2RlW2lkXTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihub2RlLCB2YWx1ZSkge1xuICAgIHJldHVybiBub2RlW3RoaXMuX10gPSB2YWx1ZTtcbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuXyBpbiBub2RlICYmIGRlbGV0ZSBub2RlW3RoaXMuX107XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuIiwiaW1wb3J0IHtldmVudH0gZnJvbSBcIi4vc2VsZWN0aW9uL29uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY3VycmVudCA9IGV2ZW50LCBzb3VyY2U7XG4gIHdoaWxlIChzb3VyY2UgPSBjdXJyZW50LnNvdXJjZUV2ZW50KSBjdXJyZW50ID0gc291cmNlO1xuICByZXR1cm4gY3VycmVudDtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtzZWxlY3RvciA9PSBudWxsID8gW10gOiBzZWxlY3Rvcl0sIHJvb3QpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRHJhZ0V2ZW50KHRhcmdldCwgdHlwZSwgc3ViamVjdCwgaWQsIGFjdGl2ZSwgeCwgeSwgZHgsIGR5LCBkaXNwYXRjaCkge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zdWJqZWN0ID0gc3ViamVjdDtcbiAgdGhpcy5pZGVudGlmaWVyID0gaWQ7XG4gIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xuICB0aGlzLnggPSB4O1xuICB0aGlzLnkgPSB5O1xuICB0aGlzLmR4ID0gZHg7XG4gIHRoaXMuZHkgPSBkeTtcbiAgdGhpcy5fID0gZGlzcGF0Y2g7XG59XG5cbkRyYWdFdmVudC5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fLm9uLmFwcGx5KHRoaXMuXywgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlID09PSB0aGlzLl8gPyB0aGlzIDogdmFsdWU7XG59O1xuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2V2ZW50LCBjdXN0b21FdmVudCwgc2VsZWN0LCBtb3VzZSwgdG91Y2h9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBub2RyYWcsIHt5ZXNkcmFnfSBmcm9tIFwiLi9ub2RyYWcuanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgRHJhZ0V2ZW50IGZyb20gXCIuL2V2ZW50LmpzXCI7XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb250YWluZXIoKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRTdWJqZWN0KGQpIHtcbiAgcmV0dXJuIGQgPT0gbnVsbCA/IHt4OiBldmVudC54LCB5OiBldmVudC55fSA6IGQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGNvbnRhaW5lciA9IGRlZmF1bHRDb250YWluZXIsXG4gICAgICBzdWJqZWN0ID0gZGVmYXVsdFN1YmplY3QsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAgZ2VzdHVyZXMgPSB7fSxcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJkcmFnXCIsIFwiZW5kXCIpLFxuICAgICAgYWN0aXZlID0gMCxcbiAgICAgIG1vdXNlZG93bngsXG4gICAgICBtb3VzZWRvd255LFxuICAgICAgbW91c2Vtb3ZpbmcsXG4gICAgICB0b3VjaGVuZGluZyxcbiAgICAgIGNsaWNrRGlzdGFuY2UyID0gMDtcblxuICBmdW5jdGlvbiBkcmFnKHNlbGVjdGlvbikge1xuICAgIHNlbGVjdGlvblxuICAgICAgICAub24oXCJtb3VzZWRvd24uZHJhZ1wiLCBtb3VzZWRvd25lZClcbiAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxuICAgICAgICAub24oXCJ0b3VjaHN0YXJ0LmRyYWdcIiwgdG91Y2hzdGFydGVkKVxuICAgICAgICAub24oXCJ0b3VjaG1vdmUuZHJhZ1wiLCB0b3VjaG1vdmVkKVxuICAgICAgICAub24oXCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWdcIiwgdG91Y2hlbmRlZClcbiAgICAgICAgLnN0eWxlKFwidG91Y2gtYWN0aW9uXCIsIFwibm9uZVwiKVxuICAgICAgICAuc3R5bGUoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIiwgXCJyZ2JhKDAsMCwwLDApXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2Vkb3duZWQoKSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nIHx8ICFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBnZXN0dXJlID0gYmVmb3Jlc3RhcnQoXCJtb3VzZVwiLCBjb250YWluZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgbW91c2UsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKCFnZXN0dXJlKSByZXR1cm47XG4gICAgc2VsZWN0KGV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLmRyYWdcIiwgbW91c2Vtb3ZlZCwgdHJ1ZSkub24oXCJtb3VzZXVwLmRyYWdcIiwgbW91c2V1cHBlZCwgdHJ1ZSk7XG4gICAgbm9kcmFnKGV2ZW50LnZpZXcpO1xuICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICBtb3VzZW1vdmluZyA9IGZhbHNlO1xuICAgIG1vdXNlZG93bnggPSBldmVudC5jbGllbnRYO1xuICAgIG1vdXNlZG93bnkgPSBldmVudC5jbGllbnRZO1xuICAgIGdlc3R1cmUoXCJzdGFydFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlbW92ZWQoKSB7XG4gICAgbm9ldmVudCgpO1xuICAgIGlmICghbW91c2Vtb3ZpbmcpIHtcbiAgICAgIHZhciBkeCA9IGV2ZW50LmNsaWVudFggLSBtb3VzZWRvd254LCBkeSA9IGV2ZW50LmNsaWVudFkgLSBtb3VzZWRvd255O1xuICAgICAgbW91c2Vtb3ZpbmcgPSBkeCAqIGR4ICsgZHkgKiBkeSA+IGNsaWNrRGlzdGFuY2UyO1xuICAgIH1cbiAgICBnZXN0dXJlcy5tb3VzZShcImRyYWdcIik7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZXVwcGVkKCkge1xuICAgIHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZ1wiLCBudWxsKTtcbiAgICB5ZXNkcmFnKGV2ZW50LnZpZXcsIG1vdXNlbW92aW5nKTtcbiAgICBub2V2ZW50KCk7XG4gICAgZ2VzdHVyZXMubW91c2UoXCJlbmRcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaHN0YXJ0ZWQoKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIGMgPSBjb250YWluZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKGdlc3R1cmUgPSBiZWZvcmVzdGFydCh0b3VjaGVzW2ldLmlkZW50aWZpZXIsIGMsIHRvdWNoLCB0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICAgICAgZ2VzdHVyZShcInN0YXJ0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNobW92ZWQoKSB7XG4gICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKGdlc3R1cmUgPSBnZXN0dXJlc1t0b3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICAgIG5vZXZlbnQoKTtcbiAgICAgICAgZ2VzdHVyZShcImRyYWdcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hlbmRlZCgpIHtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XG5cbiAgICBpZiAodG91Y2hlbmRpbmcpIGNsZWFyVGltZW91dCh0b3VjaGVuZGluZyk7XG4gICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIDUwMCk7IC8vIEdob3N0IGNsaWNrcyBhcmUgZGVsYXllZCFcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoZ2VzdHVyZSA9IGdlc3R1cmVzW3RvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgICAgbm9wcm9wYWdhdGlvbigpO1xuICAgICAgICBnZXN0dXJlKFwiZW5kXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJlZm9yZXN0YXJ0KGlkLCBjb250YWluZXIsIHBvaW50LCB0aGF0LCBhcmdzKSB7XG4gICAgdmFyIHAgPSBwb2ludChjb250YWluZXIsIGlkKSwgcywgZHgsIGR5LFxuICAgICAgICBzdWJsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuY29weSgpO1xuXG4gICAgaWYgKCFjdXN0b21FdmVudChuZXcgRHJhZ0V2ZW50KGRyYWcsIFwiYmVmb3Jlc3RhcnRcIiwgcywgaWQsIGFjdGl2ZSwgcFswXSwgcFsxXSwgMCwgMCwgc3VibGlzdGVuZXJzKSwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoKGV2ZW50LnN1YmplY3QgPSBzID0gc3ViamVjdC5hcHBseSh0aGF0LCBhcmdzKSkgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZHggPSBzLnggLSBwWzBdIHx8IDA7XG4gICAgICBkeSA9IHMueSAtIHBbMV0gfHwgMDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pKSByZXR1cm47XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZ2VzdHVyZSh0eXBlKSB7XG4gICAgICB2YXIgcDAgPSBwLCBuO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJzdGFydFwiOiBnZXN0dXJlc1tpZF0gPSBnZXN0dXJlLCBuID0gYWN0aXZlKys7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiZW5kXCI6IGRlbGV0ZSBnZXN0dXJlc1tpZF0sIC0tYWN0aXZlOyAvLyBub2JyZWFrXG4gICAgICAgIGNhc2UgXCJkcmFnXCI6IHAgPSBwb2ludChjb250YWluZXIsIGlkKSwgbiA9IGFjdGl2ZTsgYnJlYWs7XG4gICAgICB9XG4gICAgICBjdXN0b21FdmVudChuZXcgRHJhZ0V2ZW50KGRyYWcsIHR5cGUsIHMsIGlkLCBuLCBwWzBdICsgZHgsIHBbMV0gKyBkeSwgcFswXSAtIHAwWzBdLCBwWzFdIC0gcDBbMV0sIHN1Ymxpc3RlbmVycyksIHN1Ymxpc3RlbmVycy5hcHBseSwgc3VibGlzdGVuZXJzLCBbdHlwZSwgdGhhdCwgYXJnc10pO1xuICAgIH07XG4gIH1cblxuICBkcmFnLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGRyYWcpIDogZmlsdGVyO1xuICB9O1xuXG4gIGRyYWcuY29udGFpbmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvbnRhaW5lciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIGRyYWcpIDogY29udGFpbmVyO1xuICB9O1xuXG4gIGRyYWcuc3ViamVjdCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdWJqZWN0ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgZHJhZykgOiBzdWJqZWN0O1xuICB9O1xuXG4gIGRyYWcudG91Y2hhYmxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRvdWNoYWJsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgZHJhZykgOiB0b3VjaGFibGU7XG4gIH07XG5cbiAgZHJhZy5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBkcmFnIDogdmFsdWU7XG4gIH07XG5cbiAgZHJhZy5jbGlja0Rpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsaWNrRGlzdGFuY2UyID0gKF8gPSArXykgKiBfLCBkcmFnKSA6IE1hdGguc3FydChjbGlja0Rpc3RhbmNlMik7XG4gIH07XG5cbiAgcmV0dXJuIGRyYWc7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixcbiAgICByZVAgPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcbiAgICByZUhleCA9IC9eIyhbMC05YS1mXXszLDh9KSQvLFxuICAgIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZUksIHJlSSwgcmVJXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlSSwgcmVJLCByZUksIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xcXFxcKFwiICsgW3JlTiwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsYVxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpO1xuXG52YXIgbmFtZWQgPSB7XG4gIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXG4gIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsXG4gIGFxdWE6IDB4MDBmZmZmLFxuICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcbiAgYXp1cmU6IDB4ZjBmZmZmLFxuICBiZWlnZTogMHhmNWY1ZGMsXG4gIGJpc3F1ZTogMHhmZmU0YzQsXG4gIGJsYWNrOiAweDAwMDAwMCxcbiAgYmxhbmNoZWRhbG1vbmQ6IDB4ZmZlYmNkLFxuICBibHVlOiAweDAwMDBmZixcbiAgYmx1ZXZpb2xldDogMHg4YTJiZTIsXG4gIGJyb3duOiAweGE1MmEyYSxcbiAgYnVybHl3b29kOiAweGRlYjg4NyxcbiAgY2FkZXRibHVlOiAweDVmOWVhMCxcbiAgY2hhcnRyZXVzZTogMHg3ZmZmMDAsXG4gIGNob2NvbGF0ZTogMHhkMjY5MWUsXG4gIGNvcmFsOiAweGZmN2Y1MCxcbiAgY29ybmZsb3dlcmJsdWU6IDB4NjQ5NWVkLFxuICBjb3Juc2lsazogMHhmZmY4ZGMsXG4gIGNyaW1zb246IDB4ZGMxNDNjLFxuICBjeWFuOiAweDAwZmZmZixcbiAgZGFya2JsdWU6IDB4MDAwMDhiLFxuICBkYXJrY3lhbjogMHgwMDhiOGIsXG4gIGRhcmtnb2xkZW5yb2Q6IDB4Yjg4NjBiLFxuICBkYXJrZ3JheTogMHhhOWE5YTksXG4gIGRhcmtncmVlbjogMHgwMDY0MDAsXG4gIGRhcmtncmV5OiAweGE5YTlhOSxcbiAgZGFya2toYWtpOiAweGJkYjc2YixcbiAgZGFya21hZ2VudGE6IDB4OGIwMDhiLFxuICBkYXJrb2xpdmVncmVlbjogMHg1NTZiMmYsXG4gIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxuICBkYXJrb3JjaGlkOiAweDk5MzJjYyxcbiAgZGFya3JlZDogMHg4YjAwMDAsXG4gIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxuICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLFxuICBkYXJrc2xhdGVibHVlOiAweDQ4M2Q4YixcbiAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXG4gIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLFxuICBkYXJrdHVycXVvaXNlOiAweDAwY2VkMSxcbiAgZGFya3Zpb2xldDogMHg5NDAwZDMsXG4gIGRlZXBwaW5rOiAweGZmMTQ5MyxcbiAgZGVlcHNreWJsdWU6IDB4MDBiZmZmLFxuICBkaW1ncmF5OiAweDY5Njk2OSxcbiAgZGltZ3JleTogMHg2OTY5NjksXG4gIGRvZGdlcmJsdWU6IDB4MWU5MGZmLFxuICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxuICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsXG4gIGZvcmVzdGdyZWVuOiAweDIyOGIyMixcbiAgZnVjaHNpYTogMHhmZjAwZmYsXG4gIGdhaW5zYm9ybzogMHhkY2RjZGMsXG4gIGdob3N0d2hpdGU6IDB4ZjhmOGZmLFxuICBnb2xkOiAweGZmZDcwMCxcbiAgZ29sZGVucm9kOiAweGRhYTUyMCxcbiAgZ3JheTogMHg4MDgwODAsXG4gIGdyZWVuOiAweDAwODAwMCxcbiAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLFxuICBncmV5OiAweDgwODA4MCxcbiAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxuICBob3RwaW5rOiAweGZmNjliNCxcbiAgaW5kaWFucmVkOiAweGNkNWM1YyxcbiAgaW5kaWdvOiAweDRiMDA4MixcbiAgaXZvcnk6IDB4ZmZmZmYwLFxuICBraGFraTogMHhmMGU2OGMsXG4gIGxhdmVuZGVyOiAweGU2ZTZmYSxcbiAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsXG4gIGxhd25ncmVlbjogMHg3Y2ZjMDAsXG4gIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXG4gIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsXG4gIGxpZ2h0Y29yYWw6IDB4ZjA4MDgwLFxuICBsaWdodGN5YW46IDB4ZTBmZmZmLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsXG4gIGxpZ2h0Z3JheTogMHhkM2QzZDMsXG4gIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxuICBsaWdodGdyZXk6IDB4ZDNkM2QzLFxuICBsaWdodHBpbms6IDB4ZmZiNmMxLFxuICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXG4gIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLFxuICBsaWdodHNreWJsdWU6IDB4ODdjZWZhLFxuICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXG4gIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSxcbiAgbGlnaHRzdGVlbGJsdWU6IDB4YjBjNGRlLFxuICBsaWdodHllbGxvdzogMHhmZmZmZTAsXG4gIGxpbWU6IDB4MDBmZjAwLFxuICBsaW1lZ3JlZW46IDB4MzJjZDMyLFxuICBsaW5lbjogMHhmYWYwZTYsXG4gIG1hZ2VudGE6IDB4ZmYwMGZmLFxuICBtYXJvb246IDB4ODAwMDAwLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcbiAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsXG4gIG1lZGl1bW9yY2hpZDogMHhiYTU1ZDMsXG4gIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXG4gIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSxcbiAgbWVkaXVtc2xhdGVibHVlOiAweDdiNjhlZSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxuICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLFxuICBtZWRpdW12aW9sZXRyZWQ6IDB4YzcxNTg1LFxuICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxuICBtaW50Y3JlYW06IDB4ZjVmZmZhLFxuICBtaXN0eXJvc2U6IDB4ZmZlNGUxLFxuICBtb2NjYXNpbjogMHhmZmU0YjUsXG4gIG5hdmFqb3doaXRlOiAweGZmZGVhZCxcbiAgbmF2eTogMHgwMDAwODAsXG4gIG9sZGxhY2U6IDB4ZmRmNWU2LFxuICBvbGl2ZTogMHg4MDgwMDAsXG4gIG9saXZlZHJhYjogMHg2YjhlMjMsXG4gIG9yYW5nZTogMHhmZmE1MDAsXG4gIG9yYW5nZXJlZDogMHhmZjQ1MDAsXG4gIG9yY2hpZDogMHhkYTcwZDYsXG4gIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxuICBwYWxlZ3JlZW46IDB4OThmYjk4LFxuICBwYWxldHVycXVvaXNlOiAweGFmZWVlZSxcbiAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXG4gIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LFxuICBwZWFjaHB1ZmY6IDB4ZmZkYWI5LFxuICBwZXJ1OiAweGNkODUzZixcbiAgcGluazogMHhmZmMwY2IsXG4gIHBsdW06IDB4ZGRhMGRkLFxuICBwb3dkZXJibHVlOiAweGIwZTBlNixcbiAgcHVycGxlOiAweDgwMDA4MCxcbiAgcmViZWNjYXB1cnBsZTogMHg2NjMzOTksXG4gIHJlZDogMHhmZjAwMDAsXG4gIHJvc3licm93bjogMHhiYzhmOGYsXG4gIHJveWFsYmx1ZTogMHg0MTY5ZTEsXG4gIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcbiAgc2FsbW9uOiAweGZhODA3MixcbiAgc2FuZHlicm93bjogMHhmNGE0NjAsXG4gIHNlYWdyZWVuOiAweDJlOGI1NyxcbiAgc2Vhc2hlbGw6IDB4ZmZmNWVlLFxuICBzaWVubmE6IDB4YTA1MjJkLFxuICBzaWx2ZXI6IDB4YzBjMGMwLFxuICBza3libHVlOiAweDg3Y2VlYixcbiAgc2xhdGVibHVlOiAweDZhNWFjZCxcbiAgc2xhdGVncmF5OiAweDcwODA5MCxcbiAgc2xhdGVncmV5OiAweDcwODA5MCxcbiAgc25vdzogMHhmZmZhZmEsXG4gIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcbiAgc3RlZWxibHVlOiAweDQ2ODJiNCxcbiAgdGFuOiAweGQyYjQ4YyxcbiAgdGVhbDogMHgwMDgwODAsXG4gIHRoaXN0bGU6IDB4ZDhiZmQ4LFxuICB0b21hdG86IDB4ZmY2MzQ3LFxuICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxuICB2aW9sZXQ6IDB4ZWU4MmVlLFxuICB3aGVhdDogMHhmNWRlYjMsXG4gIHdoaXRlOiAweGZmZmZmZixcbiAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsXG4gIHllbGxvdzogMHhmZmZmMDAsXG4gIHllbGxvd2dyZWVuOiAweDlhY2QzMlxufTtcblxuZGVmaW5lKENvbG9yLCBjb2xvciwge1xuICBjb3B5OiBmdW5jdGlvbihjaGFubmVscykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLCBjaGFubmVscyk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcbiAgcmV0dXJuIGhzbENvbnZlcnQodGhpcykuZm9ybWF0SHNsKCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdFJnYigpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xuICB2YXIgbSwgbDtcbiAgZm9ybWF0ID0gKGZvcm1hdCArIFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxuICAgICAgOiBsID09PSAzID8gbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpLCAxKSAvLyAjZjAwXG4gICAgICA6IGwgPT09IDggPyBuZXcgUmdiKG0gPj4gMjQgJiAweGZmLCBtID4+IDE2ICYgMHhmZiwgbSA+PiA4ICYgMHhmZiwgKG0gJiAweGZmKSAvIDB4ZmYpIC8vICNmZjAwMDAwMFxuICAgICAgOiBsID09PSA0ID8gbmV3IFJnYigobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXG4gICAgICA6IG51bGwpIC8vIGludmFsaWQgaGV4XG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiByZ2JfZm9ybWF0UmdiXG59KSk7XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuZykgfHwgMCkpICsgXCIsIFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbn1cblxuZnVuY3Rpb24gaGV4KHZhbHVlKSB7XG4gIHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XG4gIHJldHVybiAodmFsdWUgPCAxNiA/IFwiMFwiIDogXCJcIikgKyB2YWx1ZS50b1N0cmluZygxNik7XG59XG5cbmZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xuICBpZiAoYSA8PSAwKSBoID0gcyA9IGwgPSBOYU47XG4gIGVsc2UgaWYgKGwgPD0gMCB8fCBsID49IDEpIGggPSBzID0gTmFOO1xuICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IHRoaXMuaCAlIDM2MCArICh0aGlzLmggPCAwKSAqIDM2MCxcbiAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLFxuICAgICAgICBsID0gdGhpcy5sLFxuICAgICAgICBtMiA9IGwgKyAobCA8IDAuNSA/IGwgOiAxIC0gbCkgKiBzLFxuICAgICAgICBtMSA9IDIgKiBsIC0gbTI7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBoc2wycmdiKGggPj0gMjQwID8gaCAtIDI0MCA6IGggKyAxMjAsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGgsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpXG4gICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgZm9ybWF0SHNsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcImhzbChcIiA6IFwiaHNsYShcIilcbiAgICAgICAgKyAodGhpcy5oIHx8IDApICsgXCIsIFwiXG4gICAgICAgICsgKHRoaXMucyB8fCAwKSAqIDEwMCArIFwiJSwgXCJcbiAgICAgICAgKyAodGhpcy5sIHx8IDApICogMTAwICsgXCIlXCJcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG4vKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXG5mdW5jdGlvbiBoc2wycmdiKGgsIG0xLCBtMikge1xuICByZXR1cm4gKGggPCA2MCA/IG0xICsgKG0yIC0gbTEpICogaCAvIDYwXG4gICAgICA6IGggPCAxODAgPyBtMlxuICAgICAgOiBoIDwgMjQwID8gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MFxuICAgICAgOiBtMSkgKiAyNTU7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYmFzaXModDEsIHYwLCB2MSwgdjIsIHYzKSB7XG4gIHZhciB0MiA9IHQxICogdDEsIHQzID0gdDIgKiB0MTtcbiAgcmV0dXJuICgoMSAtIDMgKiB0MSArIDMgKiB0MiAtIHQzKSAqIHYwXG4gICAgICArICg0IC0gNiAqIHQyICsgMyAqIHQzKSAqIHYxXG4gICAgICArICgxICsgMyAqIHQxICsgMyAqIHQyIC0gMyAqIHQzKSAqIHYyXG4gICAgICArIHQzICogdjMpIC8gNjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSB0IDw9IDAgPyAodCA9IDApIDogdCA+PSAxID8gKHQgPSAxLCBuIC0gMSkgOiBNYXRoLmZsb29yKHQgKiBuKSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaV0sXG4gICAgICAgIHYyID0gdmFsdWVzW2kgKyAxXSxcbiAgICAgICAgdjAgPSBpID4gMCA/IHZhbHVlc1tpIC0gMV0gOiAyICogdjEgLSB2MixcbiAgICAgICAgdjMgPSBpIDwgbiAtIDEgPyB2YWx1ZXNbaSArIDJdIDogMiAqIHYyIC0gdjE7XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHVlKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdhbW1hKHkpIHtcbiAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGEgPyBleHBvbmVudGlhbChhLCBiLCB5KSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub2dhbW1hKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cbiIsImltcG9ydCB7cmdiIGFzIGNvbG9yUmdifSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBiYXNpcyBmcm9tIFwiLi9iYXNpc1wiO1xuaW1wb3J0IGJhc2lzQ2xvc2VkIGZyb20gXCIuL2Jhc2lzQ2xvc2VkXCI7XG5pbXBvcnQgbm9nYW1tYSwge2dhbW1hfSBmcm9tIFwiLi9jb2xvclwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gcmdiR2FtbWEoeSkge1xuICB2YXIgY29sb3IgPSBnYW1tYSh5KTtcblxuICBmdW5jdGlvbiByZ2Ioc3RhcnQsIGVuZCkge1xuICAgIHZhciByID0gY29sb3IoKHN0YXJ0ID0gY29sb3JSZ2Ioc3RhcnQpKS5yLCAoZW5kID0gY29sb3JSZ2IoZW5kKSkuciksXG4gICAgICAgIGcgPSBjb2xvcihzdGFydC5nLCBlbmQuZyksXG4gICAgICAgIGIgPSBjb2xvcihzdGFydC5iLCBlbmQuYiksXG4gICAgICAgIG9wYWNpdHkgPSBub2dhbW1hKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuciA9IHIodCk7XG4gICAgICBzdGFydC5nID0gZyh0KTtcbiAgICAgIHN0YXJ0LmIgPSBiKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cblxuICByZ2IuZ2FtbWEgPSByZ2JHYW1tYTtcblxuICByZXR1cm4gcmdiO1xufSkoMSk7XG5cbmZ1bmN0aW9uIHJnYlNwbGluZShzcGxpbmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbG9ycykge1xuICAgIHZhciBuID0gY29sb3JzLmxlbmd0aCxcbiAgICAgICAgciA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgZyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYiA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgaSwgY29sb3I7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgY29sb3IgPSBjb2xvclJnYihjb2xvcnNbaV0pO1xuICAgICAgcltpXSA9IGNvbG9yLnIgfHwgMDtcbiAgICAgIGdbaV0gPSBjb2xvci5nIHx8IDA7XG4gICAgICBiW2ldID0gY29sb3IuYiB8fCAwO1xuICAgIH1cbiAgICByID0gc3BsaW5lKHIpO1xuICAgIGcgPSBzcGxpbmUoZyk7XG4gICAgYiA9IHNwbGluZShiKTtcbiAgICBjb2xvci5vcGFjaXR5ID0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgY29sb3IuciA9IHIodCk7XG4gICAgICBjb2xvci5nID0gZyh0KTtcbiAgICAgIGNvbG9yLmIgPSBiKHQpO1xuICAgICAgcmV0dXJuIGNvbG9yICsgXCJcIjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIHJnYkJhc2lzID0gcmdiU3BsaW5lKGJhc2lzKTtcbmV4cG9ydCB2YXIgcmdiQmFzaXNDbG9zZWQgPSByZ2JTcGxpbmUoYmFzaXNDbG9zZWQpO1xuIiwiaW1wb3J0IHtiYXNpc30gZnJvbSBcIi4vYmFzaXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoKCh0ICU9IDEpIDwgMCA/ICsrdCA6IHQpICogbiksXG4gICAgICAgIHYwID0gdmFsdWVzWyhpICsgbiAtIDEpICUgbl0sXG4gICAgICAgIHYxID0gdmFsdWVzW2kgJSBuXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbKGkgKyAxKSAlIG5dLFxuICAgICAgICB2MyA9IHZhbHVlc1soaSArIDIpICUgbl07XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiIC09IGEsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIGIgKiB0O1xuICB9O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxudmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxcbiAgICByZUIgPSBuZXcgUmVnRXhwKHJlQS5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gemVybyhiKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25lKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYih0KSArIFwiXCI7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGJpID0gcmVBLmxhc3RJbmRleCA9IHJlQi5sYXN0SW5kZXggPSAwLCAvLyBzY2FuIGluZGV4IGZvciBuZXh0IG51bWJlciBpbiBiXG4gICAgICBhbSwgLy8gY3VycmVudCBtYXRjaCBpbiBhXG4gICAgICBibSwgLy8gY3VycmVudCBtYXRjaCBpbiBiXG4gICAgICBicywgLy8gc3RyaW5nIHByZWNlZGluZyBjdXJyZW50IG51bWJlciBpbiBiLCBpZiBhbnlcbiAgICAgIGkgPSAtMSwgLy8gaW5kZXggaW4gc1xuICAgICAgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcblxuICAvLyBDb2VyY2UgaW5wdXRzIHRvIHN0cmluZ3MuXG4gIGEgPSBhICsgXCJcIiwgYiA9IGIgKyBcIlwiO1xuXG4gIC8vIEludGVycG9sYXRlIHBhaXJzIG9mIG51bWJlcnMgaW4gYSAmIGIuXG4gIHdoaWxlICgoYW0gPSByZUEuZXhlYyhhKSlcbiAgICAgICYmIChibSA9IHJlQi5leGVjKGIpKSkge1xuICAgIGlmICgoYnMgPSBibS5pbmRleCkgPiBiaSkgeyAvLyBhIHN0cmluZyBwcmVjZWRlcyB0aGUgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYnMgPSBiLnNsaWNlKGJpLCBicyk7XG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gICAgfVxuICAgIGlmICgoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSkgeyAvLyBudW1iZXJzIGluIGEgJiBiIG1hdGNoXG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBibTsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYm07XG4gICAgfSBlbHNlIHsgLy8gaW50ZXJwb2xhdGUgbm9uLW1hdGNoaW5nIG51bWJlcnNcbiAgICAgIHNbKytpXSA9IG51bGw7XG4gICAgICBxLnB1c2goe2k6IGksIHg6IG51bWJlcihhbSwgYm0pfSk7XG4gICAgfVxuICAgIGJpID0gcmVCLmxhc3RJbmRleDtcbiAgfVxuXG4gIC8vIEFkZCByZW1haW5zIG9mIGIuXG4gIGlmIChiaSA8IGIubGVuZ3RoKSB7XG4gICAgYnMgPSBiLnNsaWNlKGJpKTtcbiAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICBlbHNlIHNbKytpXSA9IGJzO1xuICB9XG5cbiAgLy8gU3BlY2lhbCBvcHRpbWl6YXRpb24gZm9yIG9ubHkgYSBzaW5nbGUgbWF0Y2guXG4gIC8vIE90aGVyd2lzZSwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgbnVtYmVycyBhbmQgcmVqb2luIHRoZSBzdHJpbmcuXG4gIHJldHVybiBzLmxlbmd0aCA8IDIgPyAocVswXVxuICAgICAgPyBvbmUocVswXS54KVxuICAgICAgOiB6ZXJvKGIpKVxuICAgICAgOiAoYiA9IHEubGVuZ3RoLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG87IGkgPCBiOyArK2kpIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgICAgICB9KTtcbn1cbiIsImltcG9ydCBkZWNvbXBvc2UsIHtpZGVudGl0eX0gZnJvbSBcIi4vZGVjb21wb3NlXCI7XG5cbnZhciBjc3NOb2RlLFxuICAgIGNzc1Jvb3QsXG4gICAgY3NzVmlldyxcbiAgICBzdmdOb2RlO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3ModmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBcIm5vbmVcIikgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIWNzc05vZGUpIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpLCBjc3NSb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBjc3NWaWV3ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gIGNzc05vZGUuc3R5bGUudHJhbnNmb3JtID0gdmFsdWU7XG4gIHZhbHVlID0gY3NzVmlldy5nZXRDb21wdXRlZFN0eWxlKGNzc1Jvb3QuYXBwZW5kQ2hpbGQoY3NzTm9kZSksIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJ0cmFuc2Zvcm1cIik7XG4gIGNzc1Jvb3QucmVtb3ZlQ2hpbGQoY3NzTm9kZSk7XG4gIHZhbHVlID0gdmFsdWUuc2xpY2UoNywgLTEpLnNwbGl0KFwiLFwiKTtcbiAgcmV0dXJuIGRlY29tcG9zZSgrdmFsdWVbMF0sICt2YWx1ZVsxXSwgK3ZhbHVlWzJdLCArdmFsdWVbM10sICt2YWx1ZVs0XSwgK3ZhbHVlWzVdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3ZnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghc3ZnTm9kZSkgc3ZnTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiZ1wiKTtcbiAgc3ZnTm9kZS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgdmFsdWUpO1xuICBpZiAoISh2YWx1ZSA9IHN2Z05vZGUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSkpIHJldHVybiBpZGVudGl0eTtcbiAgdmFsdWUgPSB2YWx1ZS5tYXRyaXg7XG4gIHJldHVybiBkZWNvbXBvc2UodmFsdWUuYSwgdmFsdWUuYiwgdmFsdWUuYywgdmFsdWUuZCwgdmFsdWUuZSwgdmFsdWUuZik7XG59XG4iLCJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlclwiO1xuaW1wb3J0IHtwYXJzZUNzcywgcGFyc2VTdmd9IGZyb20gXCIuL3BhcnNlXCI7XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlLCBweENvbW1hLCBweFBhcmVuLCBkZWdQYXJlbikge1xuXG4gIGZ1bmN0aW9uIHBvcChzKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoID8gcy5wb3AoKSArIFwiIFwiIDogXCJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChcInRyYW5zbGF0ZShcIiwgbnVsbCwgcHhDb21tYSwgbnVsbCwgcHhQYXJlbik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiIHx8IHliKSB7XG4gICAgICBzLnB1c2goXCJ0cmFuc2xhdGUoXCIgKyB4YiArIHB4Q29tbWEgKyB5YiArIHB4UGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJvdGF0ZShhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhIC0gYiA+IDE4MCkgYiArPSAzNjA7IGVsc2UgaWYgKGIgLSBhID4gMTgwKSBhICs9IDM2MDsgLy8gc2hvcnRlc3QgcGF0aFxuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBza2V3WChhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIsIG51bGwsIFwiLFwiLCBudWxsLCBcIilcIik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiICE9PSAxIHx8IHliICE9PSAxKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiArIHhiICsgXCIsXCIgKyB5YiArIFwiKVwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG4gICAgYSA9IHBhcnNlKGEpLCBiID0gcGFyc2UoYik7XG4gICAgdHJhbnNsYXRlKGEudHJhbnNsYXRlWCwgYS50cmFuc2xhdGVZLCBiLnRyYW5zbGF0ZVgsIGIudHJhbnNsYXRlWSwgcywgcSk7XG4gICAgcm90YXRlKGEucm90YXRlLCBiLnJvdGF0ZSwgcywgcSk7XG4gICAgc2tld1goYS5za2V3WCwgYi5za2V3WCwgcywgcSk7XG4gICAgc2NhbGUoYS5zY2FsZVgsIGEuc2NhbGVZLCBiLnNjYWxlWCwgYi5zY2FsZVksIHMsIHEpO1xuICAgIGEgPSBiID0gbnVsbDsgLy8gZ2NcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IHEubGVuZ3RoLCBvO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlU3ZnLCBcIiwgXCIsIFwiKVwiLCBcIilcIik7XG4iLCJ2YXIgcmhvID0gTWF0aC5TUVJUMixcbiAgICByaG8yID0gMixcbiAgICByaG80ID0gNCxcbiAgICBlcHNpbG9uMiA9IDFlLTEyO1xuXG5mdW5jdGlvbiBjb3NoKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSArIDEgLyB4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHNpbmgoeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoeCkpIC0gMSAvIHgpIC8gMjtcbn1cblxuZnVuY3Rpb24gdGFuaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCgyICogeCkpIC0gMSkgLyAoeCArIDEpO1xufVxuXG4vLyBwMCA9IFt1eDAsIHV5MCwgdzBdXG4vLyBwMSA9IFt1eDEsIHV5MSwgdzFdXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwMCwgcDEpIHtcbiAgdmFyIHV4MCA9IHAwWzBdLCB1eTAgPSBwMFsxXSwgdzAgPSBwMFsyXSxcbiAgICAgIHV4MSA9IHAxWzBdLCB1eTEgPSBwMVsxXSwgdzEgPSBwMVsyXSxcbiAgICAgIGR4ID0gdXgxIC0gdXgwLFxuICAgICAgZHkgPSB1eTEgLSB1eTAsXG4gICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5LFxuICAgICAgaSxcbiAgICAgIFM7XG5cbiAgLy8gU3BlY2lhbCBjYXNlIGZvciB1MCDiiYUgdTEuXG4gIGlmIChkMiA8IGVwc2lsb24yKSB7XG4gICAgUyA9IE1hdGgubG9nKHcxIC8gdzApIC8gcmhvO1xuICAgIGkgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB1eDAgKyB0ICogZHgsXG4gICAgICAgIHV5MCArIHQgKiBkeSxcbiAgICAgICAgdzAgKiBNYXRoLmV4cChyaG8gKiB0ICogUylcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhbCBjYXNlLlxuICBlbHNlIHtcbiAgICB2YXIgZDEgPSBNYXRoLnNxcnQoZDIpLFxuICAgICAgICBiMCA9ICh3MSAqIHcxIC0gdzAgKiB3MCArIHJobzQgKiBkMikgLyAoMiAqIHcwICogcmhvMiAqIGQxKSxcbiAgICAgICAgYjEgPSAodzEgKiB3MSAtIHcwICogdzAgLSByaG80ICogZDIpIC8gKDIgKiB3MSAqIHJobzIgKiBkMSksXG4gICAgICAgIHIwID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIwICogYjAgKyAxKSAtIGIwKSxcbiAgICAgICAgcjEgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjEgKiBiMSArIDEpIC0gYjEpO1xuICAgIFMgPSAocjEgLSByMCkgLyByaG87XG4gICAgaSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBzID0gdCAqIFMsXG4gICAgICAgICAgY29zaHIwID0gY29zaChyMCksXG4gICAgICAgICAgdSA9IHcwIC8gKHJobzIgKiBkMSkgKiAoY29zaHIwICogdGFuaChyaG8gKiBzICsgcjApIC0gc2luaChyMCkpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdXgwICsgdSAqIGR4LFxuICAgICAgICB1eTAgKyB1ICogZHksXG4gICAgICAgIHcwICogY29zaHIwIC8gY29zaChyaG8gKiBzICsgcjApXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIGkuZHVyYXRpb24gPSBTICogMTAwMDtcblxuICByZXR1cm4gaTtcbn1cbiIsImltcG9ydCB7aHNsIGFzIGNvbG9ySHNsfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBjb2xvciwge2h1ZX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZnVuY3Rpb24gaHNsKGh1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHZhciBoID0gaHVlKChzdGFydCA9IGNvbG9ySHNsKHN0YXJ0KSkuaCwgKGVuZCA9IGNvbG9ySHNsKGVuZCkpLmgpLFxuICAgICAgICBzID0gY29sb3Ioc3RhcnQucywgZW5kLnMpLFxuICAgICAgICBsID0gY29sb3Ioc3RhcnQubCwgZW5kLmwpLFxuICAgICAgICBvcGFjaXR5ID0gY29sb3Ioc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5oID0gaCh0KTtcbiAgICAgIHN0YXJ0LnMgPSBzKHQpO1xuICAgICAgc3RhcnQubCA9IGwodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBoc2woaHVlKTtcbmV4cG9ydCB2YXIgaHNsTG9uZyA9IGhzbChjb2xvcik7XG4iLCJleHBvcnQgdmFyIGRlZzJyYWQgPSBNYXRoLlBJIC8gMTgwO1xuZXhwb3J0IHZhciByYWQyZGVnID0gMTgwIC8gTWF0aC5QSTtcbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuaW1wb3J0IHtDb2xvciwgcmdiQ29udmVydCwgUmdifSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuaW1wb3J0IHtkZWcycmFkLCByYWQyZGVnfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbi8vIGh0dHBzOi8vb2JzZXJ2YWJsZWhxLmNvbS9AbWJvc3RvY2svbGFiLWFuZC1yZ2JcbnZhciBLID0gMTgsXG4gICAgWG4gPSAwLjk2NDIyLFxuICAgIFluID0gMSxcbiAgICBabiA9IDAuODI1MjEsXG4gICAgdDAgPSA0IC8gMjksXG4gICAgdDEgPSA2IC8gMjksXG4gICAgdDIgPSAzICogdDEgKiB0MSxcbiAgICB0MyA9IHQxICogdDEgKiB0MTtcblxuZnVuY3Rpb24gbGFiQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgTGFiKSByZXR1cm4gbmV3IExhYihvLmwsIG8uYSwgby5iLCBvLm9wYWNpdHkpO1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIGhjbDJsYWIobyk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSByZ2IybHJnYihvLnIpLFxuICAgICAgZyA9IHJnYjJscmdiKG8uZyksXG4gICAgICBiID0gcmdiMmxyZ2Ioby5iKSxcbiAgICAgIHkgPSB4eXoybGFiKCgwLjIyMjUwNDUgKiByICsgMC43MTY4Nzg2ICogZyArIDAuMDYwNjE2OSAqIGIpIC8gWW4pLCB4LCB6O1xuICBpZiAociA9PT0gZyAmJiBnID09PSBiKSB4ID0geiA9IHk7IGVsc2Uge1xuICAgIHggPSB4eXoybGFiKCgwLjQzNjA3NDcgKiByICsgMC4zODUwNjQ5ICogZyArIDAuMTQzMDgwNCAqIGIpIC8gWG4pO1xuICAgIHogPSB4eXoybGFiKCgwLjAxMzkzMjIgKiByICsgMC4wOTcxMDQ1ICogZyArIDAuNzE0MTczMyAqIGIpIC8gWm4pO1xuICB9XG4gIHJldHVybiBuZXcgTGFiKDExNiAqIHkgLSAxNiwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KSwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXkobCwgb3BhY2l0eSkge1xuICByZXR1cm4gbmV3IExhYihsLCAwLCAwLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMuYSA9ICthO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShMYWIsIGxhYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHkgPSAodGhpcy5sICsgMTYpIC8gMTE2LFxuICAgICAgICB4ID0gaXNOYU4odGhpcy5hKSA/IHkgOiB5ICsgdGhpcy5hIC8gNTAwLFxuICAgICAgICB6ID0gaXNOYU4odGhpcy5iKSA/IHkgOiB5IC0gdGhpcy5iIC8gMjAwO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeSA9IFluICogbGFiMnh5eih5KTtcbiAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgbHJnYjJyZ2IoIDMuMTMzODU2MSAqIHggLSAxLjYxNjg2NjcgKiB5IC0gMC40OTA2MTQ2ICogeiksXG4gICAgICBscmdiMnJnYigtMC45Nzg3Njg0ICogeCArIDEuOTE2MTQxNSAqIHkgKyAwLjAzMzQ1NDAgKiB6KSxcbiAgICAgIGxyZ2IycmdiKCAwLjA3MTk0NTMgKiB4IC0gMC4yMjg5OTE0ICogeSArIDEuNDA1MjQyNyAqIHopLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiB4eXoybGFiKHQpIHtcbiAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KHQpIHtcbiAgcmV0dXJuIHQgPiB0MSA/IHQgKiB0ICogdCA6IHQyICogKHQgLSB0MCk7XG59XG5cbmZ1bmN0aW9uIGxyZ2IycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJscmdiKHgpIHtcbiAgcmV0dXJuICh4IC89IDI1NSkgPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbmZ1bmN0aW9uIGhjbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIG5ldyBIY2woby5oLCBvLmMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIExhYikpIG8gPSBsYWJDb252ZXJ0KG8pO1xuICBpZiAoby5hID09PSAwICYmIG8uYiA9PT0gMCkgcmV0dXJuIG5ldyBIY2woTmFOLCAwIDwgby5sICYmIG8ubCA8IDEwMCA/IDAgOiBOYU4sIG8ubCwgby5vcGFjaXR5KTtcbiAgdmFyIGggPSBNYXRoLmF0YW4yKG8uYiwgby5hKSAqIHJhZDJkZWc7XG4gIHJldHVybiBuZXcgSGNsKGggPCAwID8gaCArIDM2MCA6IGgsIE1hdGguc3FydChvLmEgKiBvLmEgKyBvLmIgKiBvLmIpLCBvLmwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsY2gobCwgYywgaCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQobCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaGNsQ29udmVydChoKSA6IG5ldyBIY2woaCwgYywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMuYyA9ICtjO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmZ1bmN0aW9uIGhjbDJsYWIobykge1xuICBpZiAoaXNOYU4oby5oKSkgcmV0dXJuIG5ldyBMYWIoby5sLCAwLCAwLCBvLm9wYWNpdHkpO1xuICB2YXIgaCA9IG8uaCAqIGRlZzJyYWQ7XG4gIHJldHVybiBuZXcgTGFiKG8ubCwgTWF0aC5jb3MoaCkgKiBvLmMsIE1hdGguc2luKGgpICogby5jLCBvLm9wYWNpdHkpO1xufVxuXG5kZWZpbmUoSGNsLCBoY2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoY2wybGFiKHRoaXMpLnJnYigpO1xuICB9XG59KSk7XG4iLCJpbXBvcnQge2hjbCBhcyBjb2xvckhjbH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yXCI7XG5cbmZ1bmN0aW9uIGhjbChodWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckhjbChzdGFydCkpLmgsIChlbmQgPSBjb2xvckhjbChlbmQpKS5oKSxcbiAgICAgICAgYyA9IGNvbG9yKHN0YXJ0LmMsIGVuZC5jKSxcbiAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICBzdGFydC5jID0gYyh0KTtcbiAgICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaGNsKGh1ZSk7XG5leHBvcnQgdmFyIGhjbExvbmcgPSBoY2woY29sb3IpO1xuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2IsIGRhcmtlciwgYnJpZ2h0ZXJ9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZzJyYWQsIHJhZDJkZWd9IGZyb20gXCIuL21hdGguanNcIjtcblxudmFyIEEgPSAtMC4xNDg2MSxcbiAgICBCID0gKzEuNzgyNzcsXG4gICAgQyA9IC0wLjI5MjI3LFxuICAgIEQgPSAtMC45MDY0OSxcbiAgICBFID0gKzEuOTcyOTQsXG4gICAgRUQgPSBFICogRCxcbiAgICBFQiA9IEUgKiBCLFxuICAgIEJDX0RBID0gQiAqIEMgLSBEICogQTtcblxuZnVuY3Rpb24gY3ViZWhlbGl4Q29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgQ3ViZWhlbGl4KSByZXR1cm4gbmV3IEN1YmVoZWxpeChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBsID0gKEJDX0RBICogYiArIEVEICogciAtIEVCICogZykgLyAoQkNfREEgKyBFRCAtIEVCKSxcbiAgICAgIGJsID0gYiAtIGwsXG4gICAgICBrID0gKEUgKiAoZyAtIGwpIC0gQyAqIGJsKSAvIEQsXG4gICAgICBzID0gTWF0aC5zcXJ0KGsgKiBrICsgYmwgKiBibCkgLyAoRSAqIGwgKiAoMSAtIGwpKSwgLy8gTmFOIGlmIGw9MCBvciBsPTFcbiAgICAgIGggPSBzID8gTWF0aC5hdGFuMihrLCBibCkgKiByYWQyZGVnIC0gMTIwIDogTmFOO1xuICByZXR1cm4gbmV3IEN1YmVoZWxpeChoIDwgMCA/IGggKyAzNjAgOiBoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGN1YmVoZWxpeENvbnZlcnQoaCkgOiBuZXcgQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoQ3ViZWhlbGl4LCBjdWJlaGVsaXgsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSBpc05hTih0aGlzLmgpID8gMCA6ICh0aGlzLmggKyAxMjApICogZGVnMnJhZCxcbiAgICAgICAgbCA9ICt0aGlzLmwsXG4gICAgICAgIGEgPSBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyAqIGwgKiAoMSAtIGwpLFxuICAgICAgICBjb3NoID0gTWF0aC5jb3MoaCksXG4gICAgICAgIHNpbmggPSBNYXRoLnNpbihoKTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIDI1NSAqIChsICsgYSAqIChBICogY29zaCArIEIgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoQyAqIGNvc2ggKyBEICogc2luaCkpLFxuICAgICAgMjU1ICogKGwgKyBhICogKEUgKiBjb3NoKSksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG4iLCJpbXBvcnQge2N1YmVoZWxpeCBhcyBjb2xvckN1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yXCI7XG5cbmZ1bmN0aW9uIGN1YmVoZWxpeChodWUpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBjdWJlaGVsaXhHYW1tYSh5KSB7XG4gICAgeSA9ICt5O1xuXG4gICAgZnVuY3Rpb24gY3ViZWhlbGl4KHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBoID0gaHVlKChzdGFydCA9IGNvbG9yQ3ViZWhlbGl4KHN0YXJ0KSkuaCwgKGVuZCA9IGNvbG9yQ3ViZWhlbGl4KGVuZCkpLmgpLFxuICAgICAgICAgIHMgPSBjb2xvcihzdGFydC5zLCBlbmQucyksXG4gICAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgICBvcGFjaXR5ID0gY29sb3Ioc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICAgIHN0YXJ0LnMgPSBzKHQpO1xuICAgICAgICBzdGFydC5sID0gbChNYXRoLnBvdyh0LCB5KSk7XG4gICAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjdWJlaGVsaXguZ2FtbWEgPSBjdWJlaGVsaXhHYW1tYTtcblxuICAgIHJldHVybiBjdWJlaGVsaXg7XG4gIH0pKDEpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjdWJlaGVsaXgoaHVlKTtcbmV4cG9ydCB2YXIgY3ViZWhlbGl4TG9uZyA9IGN1YmVoZWxpeChjb2xvcik7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnRlcnBvbGF0b3IsIG4pIHtcbiAgdmFyIHNhbXBsZXMgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBzYW1wbGVzW2ldID0gaW50ZXJwb2xhdG9yKGkgLyAobiAtIDEpKTtcbiAgcmV0dXJuIHNhbXBsZXM7XG59XG4iLCJ2YXIgZnJhbWUgPSAwLCAvLyBpcyBhbiBhbmltYXRpb24gZnJhbWUgcGVuZGluZz9cbiAgICB0aW1lb3V0ID0gMCwgLy8gaXMgYSB0aW1lb3V0IHBlbmRpbmc/XG4gICAgaW50ZXJ2YWwgPSAwLCAvLyBhcmUgYW55IHRpbWVycyBhY3RpdmU/XG4gICAgcG9rZURlbGF5ID0gMTAwMCwgLy8gaG93IGZyZXF1ZW50bHkgd2UgY2hlY2sgZm9yIGNsb2NrIHNrZXdcbiAgICB0YXNrSGVhZCxcbiAgICB0YXNrVGFpbCxcbiAgICBjbG9ja0xhc3QgPSAwLFxuICAgIGNsb2NrTm93ID0gMCxcbiAgICBjbG9ja1NrZXcgPSAwLFxuICAgIGNsb2NrID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSBcIm9iamVjdFwiICYmIHBlcmZvcm1hbmNlLm5vdyA/IHBlcmZvcm1hbmNlIDogRGF0ZSxcbiAgICBzZXRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogZnVuY3Rpb24oZikgeyBzZXRUaW1lb3V0KGYsIDE3KTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIGNsb2NrTm93IHx8IChzZXRGcmFtZShjbGVhck5vdyksIGNsb2NrTm93ID0gY2xvY2subm93KCkgKyBjbG9ja1NrZXcpO1xufVxuXG5mdW5jdGlvbiBjbGVhck5vdygpIHtcbiAgY2xvY2tOb3cgPSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZXIoKSB7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl90aW1lID1cbiAgdGhpcy5fbmV4dCA9IG51bGw7XG59XG5cblRpbWVyLnByb3RvdHlwZSA9IHRpbWVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRpbWVyLFxuICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICB0aW1lID0gKHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWUpICsgKGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5KTtcbiAgICBpZiAoIXRoaXMuX25leHQgJiYgdGFza1RhaWwgIT09IHRoaXMpIHtcbiAgICAgIGlmICh0YXNrVGFpbCkgdGFza1RhaWwuX25leHQgPSB0aGlzO1xuICAgICAgZWxzZSB0YXNrSGVhZCA9IHRoaXM7XG4gICAgICB0YXNrVGFpbCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuX2NhbGwgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aW1lID0gdGltZTtcbiAgICBzbGVlcCgpO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY2FsbCkge1xuICAgICAgdGhpcy5fY2FsbCA9IG51bGw7XG4gICAgICB0aGlzLl90aW1lID0gSW5maW5pdHk7XG4gICAgICBzbGVlcCgpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgdC5yZXN0YXJ0KGNhbGxiYWNrLCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXJGbHVzaCgpIHtcbiAgbm93KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lLCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gICsrZnJhbWU7IC8vIFByZXRlbmQgd2XigJl2ZSBzZXQgYW4gYWxhcm0sIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5LlxuICB2YXIgdCA9IHRhc2tIZWFkLCBlO1xuICB3aGlsZSAodCkge1xuICAgIGlmICgoZSA9IGNsb2NrTm93IC0gdC5fdGltZSkgPj0gMCkgdC5fY2FsbC5jYWxsKG51bGwsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7VGltZXJ9IGZyb20gXCIuL3RpbWVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgZGVsYXkgPSBkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheTtcbiAgdC5yZXN0YXJ0KGZ1bmN0aW9uKGVsYXBzZWQpIHtcbiAgICB0LnN0b3AoKTtcbiAgICBjYWxsYmFjayhlbGFwc2VkICsgZGVsYXkpO1xuICB9LCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge3RpbWVyLCB0aW1lb3V0fSBmcm9tIFwiZDMtdGltZXJcIjtcblxudmFyIGVtcHR5T24gPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiZW5kXCIsIFwiY2FuY2VsXCIsIFwiaW50ZXJydXB0XCIpO1xudmFyIGVtcHR5VHdlZW4gPSBbXTtcblxuZXhwb3J0IHZhciBDUkVBVEVEID0gMDtcbmV4cG9ydCB2YXIgU0NIRURVTEVEID0gMTtcbmV4cG9ydCB2YXIgU1RBUlRJTkcgPSAyO1xuZXhwb3J0IHZhciBTVEFSVEVEID0gMztcbmV4cG9ydCB2YXIgUlVOTklORyA9IDQ7XG5leHBvcnQgdmFyIEVORElORyA9IDU7XG5leHBvcnQgdmFyIEVOREVEID0gNjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgbmFtZSwgaWQsIGluZGV4LCBncm91cCwgdGltaW5nKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZXMpIG5vZGUuX190cmFuc2l0aW9uID0ge307XG4gIGVsc2UgaWYgKGlkIGluIHNjaGVkdWxlcykgcmV0dXJuO1xuICBjcmVhdGUobm9kZSwgaWQsIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIGluZGV4OiBpbmRleCwgLy8gRm9yIGNvbnRleHQgZHVyaW5nIGNhbGxiYWNrLlxuICAgIGdyb3VwOiBncm91cCwgLy8gRm9yIGNvbnRleHQgZHVyaW5nIGNhbGxiYWNrLlxuICAgIG9uOiBlbXB0eU9uLFxuICAgIHR3ZWVuOiBlbXB0eVR3ZWVuLFxuICAgIHRpbWU6IHRpbWluZy50aW1lLFxuICAgIGRlbGF5OiB0aW1pbmcuZGVsYXksXG4gICAgZHVyYXRpb246IHRpbWluZy5kdXJhdGlvbixcbiAgICBlYXNlOiB0aW1pbmcuZWFzZSxcbiAgICB0aW1lcjogbnVsbCxcbiAgICBzdGF0ZTogQ1JFQVRFRFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gZ2V0KG5vZGUsIGlkKTtcbiAgaWYgKHNjaGVkdWxlLnN0YXRlID4gQ1JFQVRFRCkgdGhyb3cgbmV3IEVycm9yKFwidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gZ2V0KG5vZGUsIGlkKTtcbiAgaWYgKHNjaGVkdWxlLnN0YXRlID4gU1RBUlRFRCkgdGhyb3cgbmV3IEVycm9yKFwidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZ1wiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlIHx8ICEoc2NoZWR1bGUgPSBzY2hlZHVsZVtpZF0pKSB0aHJvdyBuZXcgRXJyb3IoXCJ0cmFuc2l0aW9uIG5vdCBmb3VuZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGUobm9kZSwgaWQsIHNlbGYpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgdHdlZW47XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc2VsZiB0aW1lciB3aGVuIHRoZSB0cmFuc2l0aW9uIGlzIGNyZWF0ZWQuXG4gIC8vIE5vdGUgdGhlIGFjdHVhbCBkZWxheSBpcyBub3Qga25vd24gdW50aWwgdGhlIGZpcnN0IGNhbGxiYWNrIVxuICBzY2hlZHVsZXNbaWRdID0gc2VsZjtcbiAgc2VsZi50aW1lciA9IHRpbWVyKHNjaGVkdWxlLCAwLCBzZWxmLnRpbWUpO1xuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKGVsYXBzZWQpIHtcbiAgICBzZWxmLnN0YXRlID0gU0NIRURVTEVEO1xuICAgIHNlbGYudGltZXIucmVzdGFydChzdGFydCwgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcblxuICAgIC8vIElmIHRoZSBlbGFwc2VkIGRlbGF5IGlzIGxlc3MgdGhhbiBvdXIgZmlyc3Qgc2xlZXAsIHN0YXJ0IGltbWVkaWF0ZWx5LlxuICAgIGlmIChzZWxmLmRlbGF5IDw9IGVsYXBzZWQpIHN0YXJ0KGVsYXBzZWQgLSBzZWxmLmRlbGF5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0KGVsYXBzZWQpIHtcbiAgICB2YXIgaSwgaiwgbiwgbztcblxuICAgIC8vIElmIHRoZSBzdGF0ZSBpcyBub3QgU0NIRURVTEVELCB0aGVuIHdlIHByZXZpb3VzbHkgZXJyb3JlZCBvbiBzdGFydC5cbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU0NIRURVTEVEKSByZXR1cm4gc3RvcCgpO1xuXG4gICAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgICAgbyA9IHNjaGVkdWxlc1tpXTtcbiAgICAgIGlmIChvLm5hbWUgIT09IHNlbGYubmFtZSkgY29udGludWU7XG5cbiAgICAgIC8vIFdoaWxlIHRoaXMgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHN0YXJ0aW5nIHRyYW5zaXRpb24gZHVyaW5nIHRoaXMgZnJhbWUsXG4gICAgICAvLyBkZWZlciBzdGFydGluZyBhbiBpbnRlcnJ1cHRpbmcgdHJhbnNpdGlvbiB1bnRpbCB0aGF0IHRyYW5zaXRpb24gaGFzIGFcbiAgICAgIC8vIGNoYW5jZSB0byB0aWNrIChhbmQgcG9zc2libHkgZW5kKTsgc2VlIGQzL2QzLXRyYW5zaXRpb24jNTQhXG4gICAgICBpZiAoby5zdGF0ZSA9PT0gU1RBUlRFRCkgcmV0dXJuIHRpbWVvdXQoc3RhcnQpO1xuXG4gICAgICAvLyBJbnRlcnJ1cHQgdGhlIGFjdGl2ZSB0cmFuc2l0aW9uLCBpZiBhbnkuXG4gICAgICBpZiAoby5zdGF0ZSA9PT0gUlVOTklORykge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBvLm9uLmNhbGwoXCJpbnRlcnJ1cHRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgby5pbmRleCwgby5ncm91cCk7XG4gICAgICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gICAgICB9XG5cbiAgICAgIC8vIENhbmNlbCBhbnkgcHJlLWVtcHRlZCB0cmFuc2l0aW9ucy5cbiAgICAgIGVsc2UgaWYgKCtpIDwgaWQpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiY2FuY2VsXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZmVyIHRoZSBmaXJzdCB0aWNrIHRvIGVuZCBvZiB0aGUgY3VycmVudCBmcmFtZTsgc2VlIGQzL2QzIzE1NzYuXG4gICAgLy8gTm90ZSB0aGUgdHJhbnNpdGlvbiBtYXkgYmUgY2FuY2VsZWQgYWZ0ZXIgc3RhcnQgYW5kIGJlZm9yZSB0aGUgZmlyc3QgdGljayFcbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBzY2hlZHVsZWQgYmVmb3JlIHRoZSBzdGFydCBldmVudDsgc2VlIGQzL2QzLXRyYW5zaXRpb24jMTYhXG4gICAgLy8gQXNzdW1pbmcgdGhpcyBpcyBzdWNjZXNzZnVsLCBzdWJzZXF1ZW50IGNhbGxiYWNrcyBnbyBzdHJhaWdodCB0byB0aWNrLlxuICAgIHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gU1RBUlRFRCkge1xuICAgICAgICBzZWxmLnN0YXRlID0gUlVOTklORztcbiAgICAgICAgc2VsZi50aW1lci5yZXN0YXJ0KHRpY2ssIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG4gICAgICAgIHRpY2soZWxhcHNlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgc3RhcnQgZXZlbnQuXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIHR3ZWVuIGFyZSBpbml0aWFsaXplZC5cbiAgICBzZWxmLnN0YXRlID0gU1RBUlRJTkc7XG4gICAgc2VsZi5vbi5jYWxsKFwic3RhcnRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNUQVJUSU5HKSByZXR1cm47IC8vIGludGVycnVwdGVkXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJURUQ7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSB0d2VlbiwgZGVsZXRpbmcgbnVsbCB0d2Vlbi5cbiAgICB0d2VlbiA9IG5ldyBBcnJheShuID0gc2VsZi50d2Vlbi5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAsIGogPSAtMTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG8gPSBzZWxmLnR3ZWVuW2ldLnZhbHVlLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCkpIHtcbiAgICAgICAgdHdlZW5bKytqXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIHR3ZWVuLmxlbmd0aCA9IGogKyAxO1xuICB9XG5cbiAgZnVuY3Rpb24gdGljayhlbGFwc2VkKSB7XG4gICAgdmFyIHQgPSBlbGFwc2VkIDwgc2VsZi5kdXJhdGlvbiA/IHNlbGYuZWFzZS5jYWxsKG51bGwsIGVsYXBzZWQgLyBzZWxmLmR1cmF0aW9uKSA6IChzZWxmLnRpbWVyLnJlc3RhcnQoc3RvcCksIHNlbGYuc3RhdGUgPSBFTkRJTkcsIDEpLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSB0d2Vlbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgdHdlZW5baV0uY2FsbChub2RlLCB0KTtcbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgZW5kIGV2ZW50LlxuICAgIGlmIChzZWxmLnN0YXRlID09PSBFTkRJTkcpIHtcbiAgICAgIHNlbGYub24uY2FsbChcImVuZFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICAgIHN0b3AoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wKCkge1xuICAgIHNlbGYuc3RhdGUgPSBFTkRFRDtcbiAgICBzZWxmLnRpbWVyLnN0b3AoKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2lkXTtcbiAgICBmb3IgKHZhciBpIGluIHNjaGVkdWxlcykgcmV0dXJuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgc2NoZWR1bGUub24uY2FsbChhY3RpdmUgPyBcImludGVycnVwdFwiIDogXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiB0d2VlblJlbW92ZShpZCwgbmFtZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gdHdlZW4wID0gdHdlZW47XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xID0gdHdlZW4xLnNsaWNlKCk7XG4gICAgICAgICAgdHdlZW4xLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0d2VlbkZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9ICh0d2VlbjAgPSB0d2Vlbikuc2xpY2UoKTtcbiAgICAgIGZvciAodmFyIHQgPSB7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfSwgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMVtpXSA9IHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpID09PSBuKSB0d2VlbjEucHVzaCh0KTtcbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgbmFtZSArPSBcIlwiO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciB0d2VlbiA9IGdldCh0aGlzLm5vZGUoKSwgaWQpLnR3ZWVuO1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4ubGVuZ3RoLCB0OyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHQgPSB0d2VlbltpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gdC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsID8gdHdlZW5SZW1vdmUgOiB0d2VlbkZ1bmN0aW9uKShpZCwgbmFtZSwgdmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR3ZWVuVmFsdWUodHJhbnNpdGlvbiwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdHJhbnNpdGlvbi5faWQ7XG5cbiAgdHJhbnNpdGlvbi5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCk7XG4gICAgKHNjaGVkdWxlLnZhbHVlIHx8IChzY2hlZHVsZS52YWx1ZSA9IHt9KSlbbmFtZV0gPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXQobm9kZSwgaWQpLnZhbHVlW25hbWVdO1xuICB9O1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJnYiwgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBjO1xuICByZXR1cm4gKHR5cGVvZiBiID09PSBcIm51bWJlclwiID8gaW50ZXJwb2xhdGVOdW1iZXJcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gaW50ZXJwb2xhdGVSZ2JcbiAgICAgIDogKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIGludGVycG9sYXRlUmdiKVxuICAgICAgOiBpbnRlcnBvbGF0ZVN0cmluZykoYSwgYik7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtU3ZnIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGVcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCwgdmFsdWUxID0gdmFsdWUodGhpcyksIHN0cmluZzE7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKSwgaSA9IGZ1bGxuYW1lID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHRoaXMuYXR0clR3ZWVuKG5hbWUsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKShmdWxsbmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcImF0dHIuXCIgKyBuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHZhbHVlID09IG51bGwgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKShmdWxsbmFtZSlcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKGZ1bGxuYW1lLCBpLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZnVuY3Rpb24gYXR0ckludGVycG9sYXRlKG5hbWUsIGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCBpKHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgaSh0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG52YXIgU2VsZWN0aW9uID0gc2VsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2dyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtQ3NzIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7c3R5bGV9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2VlblwiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlXCI7XG5cbmZ1bmN0aW9uIHN0eWxlTnVsbChuYW1lLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHN0cmluZzEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCBzdHJpbmcxMCA9IHN0cmluZzEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHZhbHVlMSA9IHZhbHVlKHRoaXMpLFxuICAgICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHN0cmluZzEgPSB2YWx1ZTEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVNYXliZVJlbW92ZShpZCwgbmFtZSkge1xuICB2YXIgb24wLCBvbjEsIGxpc3RlbmVyMCwga2V5ID0gXCJzdHlsZS5cIiArIG5hbWUsIGV2ZW50ID0gXCJlbmQuXCIgKyBrZXksIHJlbW92ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIG9uID0gc2NoZWR1bGUub24sXG4gICAgICAgIGxpc3RlbmVyID0gc2NoZWR1bGUudmFsdWVba2V5XSA9PSBudWxsID8gcmVtb3ZlIHx8IChyZW1vdmUgPSBzdHlsZVJlbW92ZShuYW1lKSkgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKG9uICE9PSBvbjAgfHwgbGlzdGVuZXIwICE9PSBsaXN0ZW5lcikgKG9uMSA9IChvbjAgPSBvbikuY29weSgpKS5vbihldmVudCwgbGlzdGVuZXIwID0gbGlzdGVuZXIpO1xuXG4gICAgc2NoZWR1bGUub24gPSBvbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgaSA9IChuYW1lICs9IFwiXCIpID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZU51bGwobmFtZSwgaSkpXG4gICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBzdHlsZVJlbW92ZShuYW1lKSlcbiAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVGdW5jdGlvbihuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwic3R5bGUuXCIgKyBuYW1lLCB2YWx1ZSkpKVxuICAgICAgLmVhY2goc3R5bGVNYXliZVJlbW92ZSh0aGlzLl9pZCwgbmFtZSkpXG4gICAgOiB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUNvbnN0YW50KG5hbWUsIGksIHZhbHVlKSwgcHJpb3JpdHkpXG4gICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBudWxsKTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkodCksIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIHQsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0ID0gKGkwID0gaSkgJiYgc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSk7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBrZXkgPSBcInN0eWxlLlwiICsgKG5hbWUgKz0gXCJcIik7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSk7XG59XG4iLCJpbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuXCI7XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWUxID09IG51bGwgPyBcIlwiIDogdmFsdWUxO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy50d2VlbihcInRleHRcIiwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGV4dEZ1bmN0aW9uKHR3ZWVuVmFsdWUodGhpcywgXCJ0ZXh0XCIsIHZhbHVlKSlcbiAgICAgIDogdGV4dENvbnN0YW50KHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0ciBmcm9tIFwiLi9hdHRyXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyVHdlZW4gZnJvbSBcIi4vYXR0clR3ZWVuXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kZWxheSBmcm9tIFwiLi9kZWxheVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2UgZnJvbSBcIi4vZWFzZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlclwiO1xuaW1wb3J0IHRyYW5zaXRpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2VcIjtcbmltcG9ydCB0cmFuc2l0aW9uX29uIGZyb20gXCIuL29uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGVUd2VlbiBmcm9tIFwiLi9zdHlsZVR3ZWVuXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHdlZW4gZnJvbSBcIi4vdHdlZW5cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2VuZCBmcm9tIFwiLi9lbmRcIjtcblxudmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFRyYW5zaXRpb24oZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCkge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xuICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgdGhpcy5faWQgPSBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3Rpb24oKS50cmFuc2l0aW9uKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuXG52YXIgc2VsZWN0aW9uX3Byb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGU7XG5cblRyYW5zaXRpb24ucHJvdG90eXBlID0gdHJhbnNpdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2l0aW9uLFxuICBzZWxlY3Q6IHRyYW5zaXRpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHRyYW5zaXRpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHRyYW5zaXRpb25fZmlsdGVyLFxuICBtZXJnZTogdHJhbnNpdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiB0cmFuc2l0aW9uX3NlbGVjdGlvbixcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbl90cmFuc2l0aW9uLFxuICBjYWxsOiBzZWxlY3Rpb25fcHJvdG90eXBlLmNhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9wcm90b3R5cGUuZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9wcm90b3R5cGUuZWFjaCxcbiAgb246IHRyYW5zaXRpb25fb24sXG4gIGF0dHI6IHRyYW5zaXRpb25fYXR0cixcbiAgYXR0clR3ZWVuOiB0cmFuc2l0aW9uX2F0dHJUd2VlbixcbiAgc3R5bGU6IHRyYW5zaXRpb25fc3R5bGUsXG4gIHN0eWxlVHdlZW46IHRyYW5zaXRpb25fc3R5bGVUd2VlbixcbiAgdGV4dDogdHJhbnNpdGlvbl90ZXh0LFxuICByZW1vdmU6IHRyYW5zaXRpb25fcmVtb3ZlLFxuICB0d2VlbjogdHJhbnNpdGlvbl90d2VlbixcbiAgZGVsYXk6IHRyYW5zaXRpb25fZGVsYXksXG4gIGR1cmF0aW9uOiB0cmFuc2l0aW9uX2R1cmF0aW9uLFxuICBlYXNlOiB0cmFuc2l0aW9uX2Vhc2UsXG4gIGVuZDogdHJhbnNpdGlvbl9lbmRcbn07XG4iLCJpbXBvcnQge3NlbGVjdG9yfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICBzY2hlZHVsZShzdWJncm91cFtpXSwgbmFtZSwgaWQsIGksIHN1Ymdyb3VwLCBnZXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yQWxsfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCksIGNoaWxkLCBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkKSwgayA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGsgPCBsOyArK2spIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPSBjaGlsZHJlbltrXSkge1xuICAgICAgICAgICAgc2NoZWR1bGUoY2hpbGQsIG5hbWUsIGlkLCBrLCBjaGlsZHJlbiwgaW5oZXJpdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKGNoaWxkcmVuKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0cmFuc2l0aW9uKSB7XG4gIGlmICh0cmFuc2l0aW9uLl9pZCAhPT0gdGhpcy5faWQpIHRocm93IG5ldyBFcnJvcjtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gdHJhbnNpdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQwID0gdGhpcy5faWQsXG4gICAgICBpZDEgPSBuZXdJZCgpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHZhciBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkMCk7XG4gICAgICAgIHNjaGVkdWxlKG5vZGUsIG5hbWUsIGlkMSwgaSwgZ3JvdXAsIHtcbiAgICAgICAgICB0aW1lOiBpbmhlcml0LnRpbWUgKyBpbmhlcml0LmRlbGF5ICsgaW5oZXJpdC5kdXJhdGlvbixcbiAgICAgICAgICBkZWxheTogMCxcbiAgICAgICAgICBkdXJhdGlvbjogaW5oZXJpdC5kdXJhdGlvbixcbiAgICAgICAgICBlYXNlOiBpbmhlcml0LmVhc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQxKTtcbn1cbiIsImltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG9uMCwgb24xLCB0aGF0ID0gdGhpcywgaWQgPSB0aGF0Ll9pZCwgc2l6ZSA9IHRoYXQuc2l6ZSgpO1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGNhbmNlbCA9IHt2YWx1ZTogcmVqZWN0fSxcbiAgICAgICAgZW5kID0ge3ZhbHVlOiBmdW5jdGlvbigpIHsgaWYgKC0tc2l6ZSA9PT0gMCkgcmVzb2x2ZSgpOyB9fTtcblxuICAgIHRoYXQuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgICAgb24gPSBzY2hlZHVsZS5vbjtcblxuICAgICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICAgIGlmIChvbiAhPT0gb24wKSB7XG4gICAgICAgIG9uMSA9IChvbjAgPSBvbikuY29weSgpO1xuICAgICAgICBvbjEuXy5jYW5jZWwucHVzaChjYW5jZWwpO1xuICAgICAgICBvbjEuXy5pbnRlcnJ1cHQucHVzaChjYW5jZWwpO1xuICAgICAgICBvbjEuXy5lbmQucHVzaChlbmQpO1xuICAgICAgfVxuXG4gICAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCJ2YXIgZXhwb25lbnQgPSAzO1xuXG5leHBvcnQgdmFyIHBvbHlJbiA9IChmdW5jdGlvbiBjdXN0b20oZSkge1xuICBlID0gK2U7XG5cbiAgZnVuY3Rpb24gcG9seUluKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3codCwgZSk7XG4gIH1cblxuICBwb2x5SW4uZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlJbjtcbn0pKGV4cG9uZW50KTtcblxuZXhwb3J0IHZhciBwb2x5T3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5T3V0KHQpIHtcbiAgICByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCBlKTtcbiAgfVxuXG4gIHBvbHlPdXQuZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlPdXQ7XG59KShleHBvbmVudCk7XG5cbmV4cG9ydCB2YXIgcG9seUluT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5SW5PdXQodCkge1xuICAgIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IE1hdGgucG93KHQsIGUpIDogMiAtIE1hdGgucG93KDIgLSB0LCBlKSkgLyAyO1xuICB9XG5cbiAgcG9seUluT3V0LmV4cG9uZW50ID0gY3VzdG9tO1xuXG4gIHJldHVybiBwb2x5SW5PdXQ7XG59KShleHBvbmVudCk7XG4iLCJ2YXIgcGkgPSBNYXRoLlBJLFxuICAgIGhhbGZQaSA9IHBpIC8gMjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNpbkluKHQpIHtcbiAgcmV0dXJuIDEgLSBNYXRoLmNvcyh0ICogaGFsZlBpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbk91dCh0KSB7XG4gIHJldHVybiBNYXRoLnNpbih0ICogaGFsZlBpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbkluT3V0KHQpIHtcbiAgcmV0dXJuICgxIC0gTWF0aC5jb3MocGkgKiB0KSkgLyAyO1xufVxuIiwidmFyIG92ZXJzaG9vdCA9IDEuNzAxNTg7XG5cbmV4cG9ydCB2YXIgYmFja0luID0gKGZ1bmN0aW9uIGN1c3RvbShzKSB7XG4gIHMgPSArcztcblxuICBmdW5jdGlvbiBiYWNrSW4odCkge1xuICAgIHJldHVybiB0ICogdCAqICgocyArIDEpICogdCAtIHMpO1xuICB9XG5cbiAgYmFja0luLm92ZXJzaG9vdCA9IGN1c3RvbTtcblxuICByZXR1cm4gYmFja0luO1xufSkob3ZlcnNob290KTtcblxuZXhwb3J0IHZhciBiYWNrT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShzKSB7XG4gIHMgPSArcztcblxuICBmdW5jdGlvbiBiYWNrT3V0KHQpIHtcbiAgICByZXR1cm4gLS10ICogdCAqICgocyArIDEpICogdCArIHMpICsgMTtcbiAgfVxuXG4gIGJhY2tPdXQub3ZlcnNob290ID0gY3VzdG9tO1xuXG4gIHJldHVybiBiYWNrT3V0O1xufSkob3ZlcnNob290KTtcblxuZXhwb3J0IHZhciBiYWNrSW5PdXQgPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tJbk91dCh0KSB7XG4gICAgcmV0dXJuICgodCAqPSAyKSA8IDEgPyB0ICogdCAqICgocyArIDEpICogdCAtIHMpIDogKHQgLT0gMikgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAyKSAvIDI7XG4gIH1cblxuICBiYWNrSW5PdXQub3ZlcnNob290ID0gY3VzdG9tO1xuXG4gIHJldHVybiBiYWNrSW5PdXQ7XG59KShvdmVyc2hvb3QpO1xuIiwidmFyIHRhdSA9IDIgKiBNYXRoLlBJLFxuICAgIGFtcGxpdHVkZSA9IDEsXG4gICAgcGVyaW9kID0gMC4zO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNJbiA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljSW4odCkge1xuICAgIHJldHVybiBhICogTWF0aC5wb3coMiwgMTAgKiAtLXQpICogTWF0aC5zaW4oKHMgLSB0KSAvIHApO1xuICB9XG5cbiAgZWxhc3RpY0luLmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY0luLnBlcmlvZCA9IGZ1bmN0aW9uKHApIHsgcmV0dXJuIGN1c3RvbShhLCBwKTsgfTtcblxuICByZXR1cm4gZWxhc3RpY0luO1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNPdXQgPSAoZnVuY3Rpb24gY3VzdG9tKGEsIHApIHtcbiAgdmFyIHMgPSBNYXRoLmFzaW4oMSAvIChhID0gTWF0aC5tYXgoMSwgYSkpKSAqIChwIC89IHRhdSk7XG5cbiAgZnVuY3Rpb24gZWxhc3RpY091dCh0KSB7XG4gICAgcmV0dXJuIDEgLSBhICogTWF0aC5wb3coMiwgLTEwICogKHQgPSArdCkpICogTWF0aC5zaW4oKHQgKyBzKSAvIHApO1xuICB9XG5cbiAgZWxhc3RpY091dC5hbXBsaXR1ZGUgPSBmdW5jdGlvbihhKSB7IHJldHVybiBjdXN0b20oYSwgcCAqIHRhdSk7IH07XG4gIGVsYXN0aWNPdXQucGVyaW9kID0gZnVuY3Rpb24ocCkgeyByZXR1cm4gY3VzdG9tKGEsIHApOyB9O1xuXG4gIHJldHVybiBlbGFzdGljT3V0O1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuXG5leHBvcnQgdmFyIGVsYXN0aWNJbk91dCA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljSW5PdXQodCkge1xuICAgIHJldHVybiAoKHQgPSB0ICogMiAtIDEpIDwgMFxuICAgICAgICA/IGEgKiBNYXRoLnBvdygyLCAxMCAqIHQpICogTWF0aC5zaW4oKHMgLSB0KSAvIHApXG4gICAgICAgIDogMiAtIGEgKiBNYXRoLnBvdygyLCAtMTAgKiB0KSAqIE1hdGguc2luKChzICsgdCkgLyBwKSkgLyAyO1xuICB9XG5cbiAgZWxhc3RpY0luT3V0LmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY0luT3V0LnBlcmlvZCA9IGZ1bmN0aW9uKHApIHsgcmV0dXJuIGN1c3RvbShhLCBwKTsgfTtcblxuICByZXR1cm4gZWxhc3RpY0luT3V0O1xufSkoYW1wbGl0dWRlLCBwZXJpb2QpO1xuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4uL3RyYW5zaXRpb24vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9zY2hlZHVsZVwiO1xuaW1wb3J0IHtlYXNlQ3ViaWNJbk91dH0gZnJvbSBcImQzLWVhc2VcIjtcbmltcG9ydCB7bm93fSBmcm9tIFwiZDMtdGltZXJcIjtcblxudmFyIGRlZmF1bHRUaW1pbmcgPSB7XG4gIHRpbWU6IG51bGwsIC8vIFNldCBvbiB1c2UuXG4gIGRlbGF5OiAwLFxuICBkdXJhdGlvbjogMjUwLFxuICBlYXNlOiBlYXNlQ3ViaWNJbk91dFxufTtcblxuZnVuY3Rpb24gaW5oZXJpdChub2RlLCBpZCkge1xuICB2YXIgdGltaW5nO1xuICB3aGlsZSAoISh0aW1pbmcgPSBub2RlLl9fdHJhbnNpdGlvbikgfHwgISh0aW1pbmcgPSB0aW1pbmdbaWRdKSkge1xuICAgIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFRpbWluZy50aW1lID0gbm93KCksIGRlZmF1bHRUaW1pbmc7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aW1pbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGlkLFxuICAgICAgdGltaW5nO1xuXG4gIGlmIChuYW1lIGluc3RhbmNlb2YgVHJhbnNpdGlvbikge1xuICAgIGlkID0gbmFtZS5faWQsIG5hbWUgPSBuYW1lLl9uYW1lO1xuICB9IGVsc2Uge1xuICAgIGlkID0gbmV3SWQoKSwgKHRpbWluZyA9IGRlZmF1bHRUaW1pbmcpLnRpbWUgPSBub3coKSwgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNjaGVkdWxlKG5vZGUsIG5hbWUsIGlkLCBpLCBncm91cCwgdGltaW5nIHx8IGluaGVyaXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY3ViaWNJbih0KSB7XG4gIHJldHVybiB0ICogdCAqIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY091dCh0KSB7XG4gIHJldHVybiAtLXQgKiB0ICogdCArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY0luT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gdCAqIHQgKiB0IDogKHQgLT0gMikgKiB0ICogdCArIDIpIC8gMjtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ludGVycnVwdCBmcm9tIFwiLi9pbnRlcnJ1cHRcIjtcbmltcG9ydCBzZWxlY3Rpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uXCI7XG5cbnNlbGVjdGlvbi5wcm90b3R5cGUuaW50ZXJydXB0ID0gc2VsZWN0aW9uX2ludGVycnVwdDtcbnNlbGVjdGlvbi5wcm90b3R5cGUudHJhbnNpdGlvbiA9IHNlbGVjdGlvbl90cmFuc2l0aW9uO1xuIiwiaW1wb3J0IGludGVycnVwdCBmcm9tIFwiLi4vaW50ZXJydXB0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpbnRlcnJ1cHQodGhpcywgbmFtZSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2N1c3RvbUV2ZW50LCBldmVudCwgdG91Y2gsIG1vdXNlLCBzZWxlY3R9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7aW50ZXJydXB0fSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgQnJ1c2hFdmVudCBmcm9tIFwiLi9ldmVudC5qc1wiO1xuaW1wb3J0IG5vZXZlbnQsIHtub3Byb3BhZ2F0aW9ufSBmcm9tIFwiLi9ub2V2ZW50LmpzXCI7XG5cbnZhciBNT0RFX0RSQUcgPSB7bmFtZTogXCJkcmFnXCJ9LFxuICAgIE1PREVfU1BBQ0UgPSB7bmFtZTogXCJzcGFjZVwifSxcbiAgICBNT0RFX0hBTkRMRSA9IHtuYW1lOiBcImhhbmRsZVwifSxcbiAgICBNT0RFX0NFTlRFUiA9IHtuYW1lOiBcImNlbnRlclwifTtcblxuZnVuY3Rpb24gbnVtYmVyMShlKSB7XG4gIHJldHVybiBbK2VbMF0sICtlWzFdXTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyMihlKSB7XG4gIHJldHVybiBbbnVtYmVyMShlWzBdKSwgbnVtYmVyMShlWzFdKV07XG59XG5cbmZ1bmN0aW9uIHRvdWNoZXIoaWRlbnRpZmllcikge1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRvdWNoKHRhcmdldCwgZXZlbnQudG91Y2hlcywgaWRlbnRpZmllcik7XG4gIH07XG59XG5cbnZhciBYID0ge1xuICBuYW1lOiBcInhcIixcbiAgaGFuZGxlczogW1wid1wiLCBcImVcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeCwgZSkgeyByZXR1cm4geCA9PSBudWxsID8gbnVsbCA6IFtbK3hbMF0sIGVbMF1bMV1dLCBbK3hbMV0sIGVbMV1bMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzBdLCB4eVsxXVswXV07IH1cbn07XG5cbnZhciBZID0ge1xuICBuYW1lOiBcInlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcInNcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeSwgZSkgeyByZXR1cm4geSA9PSBudWxsID8gbnVsbCA6IFtbZVswXVswXSwgK3lbMF1dLCBbZVsxXVswXSwgK3lbMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzFdLCB4eVsxXVsxXV07IH1cbn07XG5cbnZhciBYWSA9IHtcbiAgbmFtZTogXCJ4eVwiLFxuICBoYW5kbGVzOiBbXCJuXCIsIFwid1wiLCBcImVcIiwgXCJzXCIsIFwibndcIiwgXCJuZVwiLCBcInN3XCIsIFwic2VcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ID09IG51bGwgPyBudWxsIDogbnVtYmVyMih4eSk7IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5OyB9XG59O1xuXG52YXIgY3Vyc29ycyA9IHtcbiAgb3ZlcmxheTogXCJjcm9zc2hhaXJcIixcbiAgc2VsZWN0aW9uOiBcIm1vdmVcIixcbiAgbjogXCJucy1yZXNpemVcIixcbiAgZTogXCJldy1yZXNpemVcIixcbiAgczogXCJucy1yZXNpemVcIixcbiAgdzogXCJldy1yZXNpemVcIixcbiAgbnc6IFwibndzZS1yZXNpemVcIixcbiAgbmU6IFwibmVzdy1yZXNpemVcIixcbiAgc2U6IFwibndzZS1yZXNpemVcIixcbiAgc3c6IFwibmVzdy1yZXNpemVcIlxufTtcblxudmFyIGZsaXBYID0ge1xuICBlOiBcIndcIixcbiAgdzogXCJlXCIsXG4gIG53OiBcIm5lXCIsXG4gIG5lOiBcIm53XCIsXG4gIHNlOiBcInN3XCIsXG4gIHN3OiBcInNlXCJcbn07XG5cbnZhciBmbGlwWSA9IHtcbiAgbjogXCJzXCIsXG4gIHM6IFwiblwiLFxuICBudzogXCJzd1wiLFxuICBuZTogXCJzZVwiLFxuICBzZTogXCJuZVwiLFxuICBzdzogXCJud1wiXG59O1xuXG52YXIgc2lnbnNYID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogbnVsbCxcbiAgZTogKzEsXG4gIHM6IG51bGwsXG4gIHc6IC0xLFxuICBudzogLTEsXG4gIG5lOiArMSxcbiAgc2U6ICsxLFxuICBzdzogLTFcbn07XG5cbnZhciBzaWduc1kgPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiAtMSxcbiAgZTogbnVsbCxcbiAgczogKzEsXG4gIHc6IG51bGwsXG4gIG53OiAtMSxcbiAgbmU6IC0xLFxuICBzZTogKzEsXG4gIHN3OiArMVxufTtcblxuZnVuY3Rpb24gdHlwZSh0KSB7XG4gIHJldHVybiB7dHlwZTogdH07XG59XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICBpZiAoc3ZnLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICBzdmcgPSBzdmcudmlld0JveC5iYXNlVmFsO1xuICAgIHJldHVybiBbW3N2Zy54LCBzdmcueV0sIFtzdmcueCArIHN2Zy53aWR0aCwgc3ZnLnkgKyBzdmcuaGVpZ2h0XV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtzdmcud2lkdGguYmFzZVZhbC52YWx1ZSwgc3ZnLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbi8vIExpa2UgZDMubG9jYWwsIGJ1dCB3aXRoIHRoZSBuYW1lIOKAnF9fYnJ1c2jigJ0gcmF0aGVyIHRoYW4gYXV0by1nZW5lcmF0ZWQuXG5mdW5jdGlvbiBsb2NhbChub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX2JydXNoKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICByZXR1cm4gbm9kZS5fX2JydXNoO1xufVxuXG5mdW5jdGlvbiBlbXB0eShleHRlbnQpIHtcbiAgcmV0dXJuIGV4dGVudFswXVswXSA9PT0gZXh0ZW50WzFdWzBdXG4gICAgICB8fCBleHRlbnRbMF1bMV0gPT09IGV4dGVudFsxXVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoU2VsZWN0aW9uKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fX2JydXNoO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS5kaW0ub3V0cHV0KHN0YXRlLnNlbGVjdGlvbikgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hYKCkge1xuICByZXR1cm4gYnJ1c2goWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFkoKSB7XG4gIHJldHVybiBicnVzaChZKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBicnVzaChYWSk7XG59XG5cbmZ1bmN0aW9uIGJydXNoKGRpbSkge1xuICB2YXIgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAga2V5cyA9IHRydWUsXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChicnVzaCwgXCJzdGFydFwiLCBcImJydXNoXCIsIFwiZW5kXCIpLFxuICAgICAgaGFuZGxlU2l6ZSA9IDYsXG4gICAgICB0b3VjaGVuZGluZztcblxuICBmdW5jdGlvbiBicnVzaChncm91cCkge1xuICAgIHZhciBvdmVybGF5ID0gZ3JvdXBcbiAgICAgICAgLnByb3BlcnR5KFwiX19icnVzaFwiLCBpbml0aWFsaXplKVxuICAgICAgLnNlbGVjdEFsbChcIi5vdmVybGF5XCIpXG4gICAgICAuZGF0YShbdHlwZShcIm92ZXJsYXlcIildKTtcblxuICAgIG92ZXJsYXkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJvdmVybGF5XCIpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KVxuICAgICAgLm1lcmdlKG92ZXJsYXkpXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBleHRlbnQgPSBsb2NhbCh0aGlzKS5leHRlbnQ7XG4gICAgICAgICAgc2VsZWN0KHRoaXMpXG4gICAgICAgICAgICAgIC5hdHRyKFwieFwiLCBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwieVwiLCBleHRlbnRbMF1bMV0pXG4gICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZXh0ZW50WzFdWzBdIC0gZXh0ZW50WzBdWzBdKVxuICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBleHRlbnRbMV1bMV0gLSBleHRlbnRbMF1bMV0pO1xuICAgICAgICB9KTtcblxuICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb25cIilcbiAgICAgIC5kYXRhKFt0eXBlKFwic2VsZWN0aW9uXCIpXSlcbiAgICAgIC5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInNlbGVjdGlvblwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLnNlbGVjdGlvbilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwiIzc3N1wiKVxuICAgICAgICAuYXR0cihcImZpbGwtb3BhY2l0eVwiLCAwLjMpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiI2ZmZlwiKVxuICAgICAgICAuYXR0cihcInNoYXBlLXJlbmRlcmluZ1wiLCBcImNyaXNwRWRnZXNcIik7XG5cbiAgICB2YXIgaGFuZGxlID0gZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgLmRhdGEoZGltLmhhbmRsZXMsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZTsgfSk7XG5cbiAgICBoYW5kbGUuZXhpdCgpLnJlbW92ZSgpO1xuXG4gICAgaGFuZGxlLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIFwiaGFuZGxlIGhhbmRsZS0tXCIgKyBkLnR5cGU7IH0pXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGN1cnNvcnNbZC50eXBlXTsgfSk7XG5cbiAgICBncm91cFxuICAgICAgICAuZWFjaChyZWRyYXcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAub24oXCJtb3VzZWRvd24uYnJ1c2hcIiwgc3RhcnRlZClcbiAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxuICAgICAgICAub24oXCJ0b3VjaHN0YXJ0LmJydXNoXCIsIHN0YXJ0ZWQpXG4gICAgICAgIC5vbihcInRvdWNobW92ZS5icnVzaFwiLCB0b3VjaG1vdmVkKVxuICAgICAgICAub24oXCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaFwiLCB0b3VjaGVuZGVkKVxuICAgICAgICAuc3R5bGUoXCJ0b3VjaC1hY3Rpb25cIiwgXCJub25lXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gIH1cblxuICBicnVzaC5tb3ZlID0gZnVuY3Rpb24oZ3JvdXAsIHNlbGVjdGlvbikge1xuICAgIGlmIChncm91cC5zZWxlY3Rpb24pIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLm9uKFwic3RhcnQuYnJ1c2hcIiwgZnVuY3Rpb24oKSB7IGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbigpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmVuZCgpOyB9KVxuICAgICAgICAgIC50d2VlbihcImJydXNoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMCA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24xID0gZGltLmlucHV0KHR5cGVvZiBzZWxlY3Rpb24gPT09IFwiZnVuY3Rpb25cIiA/IHNlbGVjdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShzZWxlY3Rpb24wLCBzZWxlY3Rpb24xKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdHdlZW4odCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zZWxlY3Rpb24gPSB0ID09PSAxICYmIHNlbGVjdGlvbjEgPT09IG51bGwgPyBudWxsIDogaSh0KTtcbiAgICAgICAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgICAgICAgIGVtaXQuYnJ1c2goKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjAgIT09IG51bGwgJiYgc2VsZWN0aW9uMSAhPT0gbnVsbCA/IHR3ZWVuIDogdHdlZW4oMSk7XG4gICAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoYXQuX19icnVzaCxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24xID0gZGltLmlucHV0KHR5cGVvZiBzZWxlY3Rpb24gPT09IFwiZnVuY3Rpb25cIiA/IHNlbGVjdGlvbi5hcHBseSh0aGF0LCBhcmdzKSA6IHNlbGVjdGlvbiwgc3RhdGUuZXh0ZW50KSxcbiAgICAgICAgICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmdzKS5iZWZvcmVzdGFydCgpO1xuXG4gICAgICAgICAgICBpbnRlcnJ1cHQodGhhdCk7XG4gICAgICAgICAgICBzdGF0ZS5zZWxlY3Rpb24gPSBzZWxlY3Rpb24xID09PSBudWxsID8gbnVsbCA6IHNlbGVjdGlvbjE7XG4gICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgIGVtaXQuc3RhcnQoKS5icnVzaCgpLmVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBicnVzaC5jbGVhciA9IGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgYnJ1c2gubW92ZShncm91cCwgbnVsbCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGlzKSxcbiAgICAgICAgc2VsZWN0aW9uID0gbG9jYWwodGhpcykuc2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBzZWxlY3Rpb25bMF1bMV0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdKTtcblxuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlW2QudHlwZS5sZW5ndGggLSAxXSA9PT0gXCJlXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVswXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbMF0gPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMV0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJuXCIgfHwgZC50eXBlID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJlXCIgfHwgZC50eXBlID09PSBcIndcIiA/IHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb24sLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgXCJub25lXCIpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICByZXR1cm4gKCFjbGVhbiAmJiB0aGF0Ll9fYnJ1c2guZW1pdHRlcikgfHwgbmV3IEVtaXR0ZXIodGhhdCwgYXJncyk7XG4gIH1cblxuICBmdW5jdGlvbiBFbWl0dGVyKHRoYXQsIGFyZ3MpIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5zdGF0ZSA9IHRoYXQuX19icnVzaDtcbiAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gIH1cblxuICBFbWl0dGVyLnByb3RvdHlwZSA9IHtcbiAgICBiZWZvcmVzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoKyt0aGlzLmFjdGl2ZSA9PT0gMSkgdGhpcy5zdGF0ZS5lbWl0dGVyID0gdGhpcywgdGhpcy5zdGFydGluZyA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0aW5nKSB0aGlzLnN0YXJ0aW5nID0gZmFsc2UsIHRoaXMuZW1pdChcInN0YXJ0XCIpO1xuICAgICAgZWxzZSB0aGlzLmVtaXQoXCJicnVzaFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYnJ1c2g6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5lbWl0KFwiYnJ1c2hcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkgZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlciwgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBjdXN0b21FdmVudChuZXcgQnJ1c2hFdmVudChicnVzaCwgdHlwZSwgZGltLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLCBsaXN0ZW5lcnMuYXBwbHksIGxpc3RlbmVycywgW3R5cGUsIHRoaXMudGhhdCwgdGhpcy5hcmdzXSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoKSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nICYmICFldmVudC50b3VjaGVzKSByZXR1cm47XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuXG4gICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICB0eXBlID0gZXZlbnQudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsXG4gICAgICAgIG1vZGUgPSAoa2V5cyAmJiBldmVudC5tZXRhS2V5ID8gdHlwZSA9IFwib3ZlcmxheVwiIDogdHlwZSkgPT09IFwic2VsZWN0aW9uXCIgPyBNT0RFX0RSQUcgOiAoa2V5cyAmJiBldmVudC5hbHRLZXkgPyBNT0RFX0NFTlRFUiA6IE1PREVfSEFORExFKSxcbiAgICAgICAgc2lnblggPSBkaW0gPT09IFkgPyBudWxsIDogc2lnbnNYW3R5cGVdLFxuICAgICAgICBzaWduWSA9IGRpbSA9PT0gWCA/IG51bGwgOiBzaWduc1lbdHlwZV0sXG4gICAgICAgIHN0YXRlID0gbG9jYWwodGhhdCksXG4gICAgICAgIGV4dGVudCA9IHN0YXRlLmV4dGVudCxcbiAgICAgICAgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uLFxuICAgICAgICBXID0gZXh0ZW50WzBdWzBdLCB3MCwgdzEsXG4gICAgICAgIE4gPSBleHRlbnRbMF1bMV0sIG4wLCBuMSxcbiAgICAgICAgRSA9IGV4dGVudFsxXVswXSwgZTAsIGUxLFxuICAgICAgICBTID0gZXh0ZW50WzFdWzFdLCBzMCwgczEsXG4gICAgICAgIGR4ID0gMCxcbiAgICAgICAgZHkgPSAwLFxuICAgICAgICBtb3ZpbmcsXG4gICAgICAgIHNoaWZ0aW5nID0gc2lnblggJiYgc2lnblkgJiYga2V5cyAmJiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgbG9ja1gsXG4gICAgICAgIGxvY2tZLFxuICAgICAgICBwb2ludGVyID0gZXZlbnQudG91Y2hlcyA/IHRvdWNoZXIoZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcikgOiBtb3VzZSxcbiAgICAgICAgcG9pbnQwID0gcG9pbnRlcih0aGF0KSxcbiAgICAgICAgcG9pbnQgPSBwb2ludDAsXG4gICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cywgdHJ1ZSkuYmVmb3Jlc3RhcnQoKTtcblxuICAgIGlmICh0eXBlID09PSBcIm92ZXJsYXlcIikge1xuICAgICAgaWYgKHNlbGVjdGlvbikgbW92aW5nID0gdHJ1ZTtcbiAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IFtcbiAgICAgICAgW3cwID0gZGltID09PSBZID8gVyA6IHBvaW50MFswXSwgbjAgPSBkaW0gPT09IFggPyBOIDogcG9pbnQwWzFdXSxcbiAgICAgICAgW2UwID0gZGltID09PSBZID8gRSA6IHcwLCBzMCA9IGRpbSA9PT0gWCA/IFMgOiBuMF1cbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHcwID0gc2VsZWN0aW9uWzBdWzBdO1xuICAgICAgbjAgPSBzZWxlY3Rpb25bMF1bMV07XG4gICAgICBlMCA9IHNlbGVjdGlvblsxXVswXTtcbiAgICAgIHMwID0gc2VsZWN0aW9uWzFdWzFdO1xuICAgIH1cblxuICAgIHcxID0gdzA7XG4gICAgbjEgPSBuMDtcbiAgICBlMSA9IGUwO1xuICAgIHMxID0gczA7XG5cbiAgICB2YXIgZ3JvdXAgPSBzZWxlY3QodGhhdClcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICB2YXIgb3ZlcmxheSA9IGdyb3VwLnNlbGVjdEFsbChcIi5vdmVybGF5XCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZV0pO1xuXG4gICAgaWYgKGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIGVtaXQubW92ZWQgPSBtb3ZlZDtcbiAgICAgIGVtaXQuZW5kZWQgPSBlbmRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBzZWxlY3QoZXZlbnQudmlldylcbiAgICAgICAgICAub24oXCJtb3VzZW1vdmUuYnJ1c2hcIiwgbW92ZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwibW91c2V1cC5icnVzaFwiLCBlbmRlZCwgdHJ1ZSk7XG4gICAgICBpZiAoa2V5cykgdmlld1xuICAgICAgICAgIC5vbihcImtleWRvd24uYnJ1c2hcIiwga2V5ZG93bmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcImtleXVwLmJydXNoXCIsIGtleXVwcGVkLCB0cnVlKVxuXG4gICAgICBkcmFnRGlzYWJsZShldmVudC52aWV3KTtcbiAgICB9XG5cbiAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgaW50ZXJydXB0KHRoYXQpO1xuICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgIGVtaXQuc3RhcnQoKTtcblxuICAgIGZ1bmN0aW9uIG1vdmVkKCkge1xuICAgICAgdmFyIHBvaW50MSA9IHBvaW50ZXIodGhhdCk7XG4gICAgICBpZiAoc2hpZnRpbmcgJiYgIWxvY2tYICYmICFsb2NrWSkge1xuICAgICAgICBpZiAoTWF0aC5hYnMocG9pbnQxWzBdIC0gcG9pbnRbMF0pID4gTWF0aC5hYnMocG9pbnQxWzFdIC0gcG9pbnRbMV0pKSBsb2NrWSA9IHRydWU7XG4gICAgICAgIGVsc2UgbG9ja1ggPSB0cnVlO1xuICAgICAgfVxuICAgICAgcG9pbnQgPSBwb2ludDE7XG4gICAgICBtb3ZpbmcgPSB0cnVlO1xuICAgICAgbm9ldmVudCgpO1xuICAgICAgbW92ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdmUoKSB7XG4gICAgICB2YXIgdDtcblxuICAgICAgZHggPSBwb2ludFswXSAtIHBvaW50MFswXTtcbiAgICAgIGR5ID0gcG9pbnRbMV0gLSBwb2ludDBbMV07XG5cbiAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIE1PREVfU1BBQ0U6XG4gICAgICAgIGNhc2UgTU9ERV9EUkFHOiB7XG4gICAgICAgICAgaWYgKHNpZ25YKSBkeCA9IE1hdGgubWF4KFcgLSB3MCwgTWF0aC5taW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkpIGR5ID0gTWF0aC5tYXgoTiAtIG4wLCBNYXRoLm1pbihTIC0gczAsIGR5KSksIG4xID0gbjAgKyBkeSwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTU9ERV9IQU5ETEU6IHtcbiAgICAgICAgICBpZiAoc2lnblggPCAwKSBkeCA9IE1hdGgubWF4KFcgLSB3MCwgTWF0aC5taW4oRSAtIHcwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblggPiAwKSBkeCA9IE1hdGgubWF4KFcgLSBlMCwgTWF0aC5taW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwLCBlMSA9IGUwICsgZHg7XG4gICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBuMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwO1xuICAgICAgICAgIGVsc2UgaWYgKHNpZ25ZID4gMCkgZHkgPSBNYXRoLm1heChOIC0gczAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTU9ERV9DRU5URVI6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIHcxID0gTWF0aC5tYXgoVywgTWF0aC5taW4oRSwgdzAgLSBkeCAqIHNpZ25YKSksIGUxID0gTWF0aC5tYXgoVywgTWF0aC5taW4oRSwgZTAgKyBkeCAqIHNpZ25YKSk7XG4gICAgICAgICAgaWYgKHNpZ25ZKSBuMSA9IE1hdGgubWF4KE4sIE1hdGgubWluKFMsIG4wIC0gZHkgKiBzaWduWSkpLCBzMSA9IE1hdGgubWF4KE4sIE1hdGgubWluKFMsIHMwICsgZHkgKiBzaWduWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlMSA8IHcxKSB7XG4gICAgICAgIHNpZ25YICo9IC0xO1xuICAgICAgICB0ID0gdzAsIHcwID0gZTAsIGUwID0gdDtcbiAgICAgICAgdCA9IHcxLCB3MSA9IGUxLCBlMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBYKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFhbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxIDwgbjEpIHtcbiAgICAgICAgc2lnblkgKj0gLTE7XG4gICAgICAgIHQgPSBuMCwgbjAgPSBzMCwgczAgPSB0O1xuICAgICAgICB0ID0gbjEsIG4xID0gczEsIHMxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFkpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWVt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSFcbiAgICAgIGlmIChsb2NrWCkgdzEgPSBzZWxlY3Rpb25bMF1bMF0sIGUxID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgaWYgKGxvY2tZKSBuMSA9IHNlbGVjdGlvblswXVsxXSwgczEgPSBzZWxlY3Rpb25bMV1bMV07XG5cbiAgICAgIGlmIChzZWxlY3Rpb25bMF1bMF0gIT09IHcxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzBdWzFdICE9PSBuMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVswXSAhPT0gZTFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMV0gIT09IHMxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IFtbdzEsIG4xXSwgW2UxLCBzMV1dO1xuICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgZW1pdC5icnVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZGVkKCkge1xuICAgICAgbm9wcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGlmICh0b3VjaGVuZGluZykgY2xlYXJUaW1lb3V0KHRvdWNoZW5kaW5nKTtcbiAgICAgICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIDUwMCk7IC8vIEdob3N0IGNsaWNrcyBhcmUgZGVsYXllZCFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgbW92aW5nKTtcbiAgICAgICAgdmlldy5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBncm91cC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIik7XG4gICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KTtcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIChvbiBzdGFydCkhXG4gICAgICBpZiAoZW1wdHkoc2VsZWN0aW9uKSkgc3RhdGUuc2VsZWN0aW9uID0gbnVsbCwgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICBlbWl0LmVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZCgpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSkge1xuICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRTsgdGFrZXMgcHJpb3JpdHkgb3ZlciBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9IQU5ETEUgfHwgbW9kZSA9PT0gTU9ERV9DRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTEgLSBkeDsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxIC0gZHg7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxIC0gZHk7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMSAtIGR5O1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfU1BBQ0U7XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5dXBwZWQoKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogeyAvLyBTSElGVFxuICAgICAgICAgIGlmIChzaGlmdGluZykge1xuICAgICAgICAgICAgbG9ja1ggPSBsb2NrWSA9IHNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0VcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9TUEFDRSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKCkge1xuICAgIGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5tb3ZlZCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hlbmRlZCgpIHtcbiAgICBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kZWQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fX2JydXNoIHx8IHtzZWxlY3Rpb246IG51bGx9O1xuICAgIHN0YXRlLmV4dGVudCA9IG51bWJlcjIoZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgIHN0YXRlLmRpbSA9IGRpbTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBicnVzaC5leHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXh0ZW50ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChudW1iZXIyKF8pKSwgYnJ1c2gpIDogZXh0ZW50O1xuICB9O1xuXG4gIGJydXNoLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IGZpbHRlcjtcbiAgfTtcblxuICBicnVzaC5oYW5kbGVTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhhbmRsZVNpemUgPSArXywgYnJ1c2gpIDogaGFuZGxlU2l6ZTtcbiAgfTtcblxuICBicnVzaC5rZXlNb2RpZmllcnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9ICEhXywgYnJ1c2gpIDoga2V5cztcbiAgfTtcblxuICBicnVzaC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBicnVzaCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBicnVzaDtcbn1cbiIsImV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgdGF1ID0gcGkgKiAyO1xuZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbiIsImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iLCJpbXBvcnQge3JhbmdlfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7bWF4LCB0YXV9IGZyb20gXCIuL21hdGhcIjtcblxuZnVuY3Rpb24gY29tcGFyZVZhbHVlKGNvbXBhcmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gY29tcGFyZShcbiAgICAgIGEuc291cmNlLnZhbHVlICsgYS50YXJnZXQudmFsdWUsXG4gICAgICBiLnNvdXJjZS52YWx1ZSArIGIudGFyZ2V0LnZhbHVlXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBwYWRBbmdsZSA9IDAsXG4gICAgICBzb3J0R3JvdXBzID0gbnVsbCxcbiAgICAgIHNvcnRTdWJncm91cHMgPSBudWxsLFxuICAgICAgc29ydENob3JkcyA9IG51bGw7XG5cbiAgZnVuY3Rpb24gY2hvcmQobWF0cml4KSB7XG4gICAgdmFyIG4gPSBtYXRyaXgubGVuZ3RoLFxuICAgICAgICBncm91cFN1bXMgPSBbXSxcbiAgICAgICAgZ3JvdXBJbmRleCA9IHJhbmdlKG4pLFxuICAgICAgICBzdWJncm91cEluZGV4ID0gW10sXG4gICAgICAgIGNob3JkcyA9IFtdLFxuICAgICAgICBncm91cHMgPSBjaG9yZHMuZ3JvdXBzID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBzdWJncm91cHMgPSBuZXcgQXJyYXkobiAqIG4pLFxuICAgICAgICBrLFxuICAgICAgICB4LFxuICAgICAgICB4MCxcbiAgICAgICAgZHgsXG4gICAgICAgIGksXG4gICAgICAgIGo7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBzdW0uXG4gICAgayA9IDAsIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHggPSAwLCBqID0gLTE7IHdoaWxlICgrK2ogPCBuKSB7XG4gICAgICAgIHggKz0gbWF0cml4W2ldW2pdO1xuICAgICAgfVxuICAgICAgZ3JvdXBTdW1zLnB1c2goeCk7XG4gICAgICBzdWJncm91cEluZGV4LnB1c2gocmFuZ2UobikpO1xuICAgICAgayArPSB4O1xuICAgIH1cblxuICAgIC8vIFNvcnQgZ3JvdXBz4oCmXG4gICAgaWYgKHNvcnRHcm91cHMpIGdyb3VwSW5kZXguc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICByZXR1cm4gc29ydEdyb3Vwcyhncm91cFN1bXNbYV0sIGdyb3VwU3Vtc1tiXSk7XG4gICAgfSk7XG5cbiAgICAvLyBTb3J0IHN1Ymdyb3Vwc+KAplxuICAgIGlmIChzb3J0U3ViZ3JvdXBzKSBzdWJncm91cEluZGV4LmZvckVhY2goZnVuY3Rpb24oZCwgaSkge1xuICAgICAgZC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRTdWJncm91cHMobWF0cml4W2ldW2FdLCBtYXRyaXhbaV1bYl0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBzdW0gdG8gc2NhbGluZyBmYWN0b3IgZm9yIFswLCAycGldLlxuICAgIC8vIFRPRE8gQWxsb3cgc3RhcnQgYW5kIGVuZCBhbmdsZSB0byBiZSBzcGVjaWZpZWQ/XG4gICAgLy8gVE9ETyBBbGxvdyBwYWRkaW5nIHRvIGJlIHNwZWNpZmllZCBhcyBwZXJjZW50YWdlP1xuICAgIGsgPSBtYXgoMCwgdGF1IC0gcGFkQW5nbGUgKiBuKSAvIGs7XG4gICAgZHggPSBrID8gcGFkQW5nbGUgOiB0YXUgLyBuO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgc3RhcnQgYW5kIGVuZCBhbmdsZSBmb3IgZWFjaCBncm91cCBhbmQgc3ViZ3JvdXAuXG4gICAgLy8gTm90ZTogT3BlcmEgaGFzIGEgYnVnIHJlb3JkZXJpbmcgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllcyFcbiAgICB4ID0gMCwgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikge1xuICAgICAgeDAgPSB4LCBqID0gLTE7IHdoaWxlICgrK2ogPCBuKSB7XG4gICAgICAgIHZhciBkaSA9IGdyb3VwSW5kZXhbaV0sXG4gICAgICAgICAgICBkaiA9IHN1Ymdyb3VwSW5kZXhbZGldW2pdLFxuICAgICAgICAgICAgdiA9IG1hdHJpeFtkaV1bZGpdLFxuICAgICAgICAgICAgYTAgPSB4LFxuICAgICAgICAgICAgYTEgPSB4ICs9IHYgKiBrO1xuICAgICAgICBzdWJncm91cHNbZGogKiBuICsgZGldID0ge1xuICAgICAgICAgIGluZGV4OiBkaSxcbiAgICAgICAgICBzdWJpbmRleDogZGosXG4gICAgICAgICAgc3RhcnRBbmdsZTogYTAsXG4gICAgICAgICAgZW5kQW5nbGU6IGExLFxuICAgICAgICAgIHZhbHVlOiB2XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBncm91cHNbZGldID0ge1xuICAgICAgICBpbmRleDogZGksXG4gICAgICAgIHN0YXJ0QW5nbGU6IHgwLFxuICAgICAgICBlbmRBbmdsZTogeCxcbiAgICAgICAgdmFsdWU6IGdyb3VwU3Vtc1tkaV1cbiAgICAgIH07XG4gICAgICB4ICs9IGR4O1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGNob3JkcyBmb3IgZWFjaCAobm9uLWVtcHR5KSBzdWJncm91cC1zdWJncm91cCBsaW5rLlxuICAgIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGogPSBpIC0gMTsgd2hpbGUgKCsraiA8IG4pIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHN1Ymdyb3Vwc1tqICogbiArIGldLFxuICAgICAgICAgICAgdGFyZ2V0ID0gc3ViZ3JvdXBzW2kgKiBuICsgal07XG4gICAgICAgIGlmIChzb3VyY2UudmFsdWUgfHwgdGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgY2hvcmRzLnB1c2goc291cmNlLnZhbHVlIDwgdGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgID8ge3NvdXJjZTogdGFyZ2V0LCB0YXJnZXQ6IHNvdXJjZX1cbiAgICAgICAgICAgICAgOiB7c291cmNlOiBzb3VyY2UsIHRhcmdldDogdGFyZ2V0fSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc29ydENob3JkcyA/IGNob3Jkcy5zb3J0KHNvcnRDaG9yZHMpIDogY2hvcmRzO1xuICB9XG5cbiAgY2hvcmQucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSBtYXgoMCwgXyksIGNob3JkKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIGNob3JkLnNvcnRHcm91cHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydEdyb3VwcyA9IF8sIGNob3JkKSA6IHNvcnRHcm91cHM7XG4gIH07XG5cbiAgY2hvcmQuc29ydFN1Ymdyb3VwcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0U3ViZ3JvdXBzID0gXywgY2hvcmQpIDogc29ydFN1Ymdyb3VwcztcbiAgfTtcblxuICBjaG9yZC5zb3J0Q2hvcmRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IHNvcnRDaG9yZHMgPSBudWxsIDogKHNvcnRDaG9yZHMgPSBjb21wYXJlVmFsdWUoXykpLl8gPSBfLCBjaG9yZCkgOiBzb3J0Q2hvcmRzICYmIHNvcnRDaG9yZHMuXztcbiAgfTtcblxuICByZXR1cm4gY2hvcmQ7XG59XG4iLCJ2YXIgcGkgPSBNYXRoLlBJLFxuICAgIHRhdSA9IDIgKiBwaSxcbiAgICBlcHNpbG9uID0gMWUtNixcbiAgICB0YXVFcHNpbG9uID0gdGF1IC0gZXBzaWxvbjtcblxuZnVuY3Rpb24gUGF0aCgpIHtcbiAgdGhpcy5feDAgPSB0aGlzLl95MCA9IC8vIHN0YXJ0IG9mIGN1cnJlbnQgc3VicGF0aFxuICB0aGlzLl94MSA9IHRoaXMuX3kxID0gbnVsbDsgLy8gZW5kIG9mIGN1cnJlbnQgc3VicGF0aFxuICB0aGlzLl8gPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBwYXRoKCkge1xuICByZXR1cm4gbmV3IFBhdGg7XG59XG5cblBhdGgucHJvdG90eXBlID0gcGF0aC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQYXRoLFxuICBtb3ZlVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGNsb3NlUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX3gxICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl94MSA9IHRoaXMuX3gwLCB0aGlzLl95MSA9IHRoaXMuX3kwO1xuICAgICAgdGhpcy5fICs9IFwiWlwiO1xuICAgIH1cbiAgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIHF1YWRyYXRpY0N1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIlFcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGJlemllckN1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiQ1wiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAoK3gyKSArIFwiLFwiICsgKCt5MikgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBhcmNUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHIpIHtcbiAgICB4MSA9ICt4MSwgeTEgPSAreTEsIHgyID0gK3gyLCB5MiA9ICt5MiwgciA9ICtyO1xuICAgIHZhciB4MCA9IHRoaXMuX3gxLFxuICAgICAgICB5MCA9IHRoaXMuX3kxLFxuICAgICAgICB4MjEgPSB4MiAtIHgxLFxuICAgICAgICB5MjEgPSB5MiAtIHkxLFxuICAgICAgICB4MDEgPSB4MCAtIHgxLFxuICAgICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgICBsMDFfMiA9IHgwMSAqIHgwMSArIHkwMSAqIHkwMTtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MSx5MSkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPciwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgwLHkwKT8gRG8gbm90aGluZy5cbiAgICBlbHNlIGlmICghKGwwMV8yID4gZXBzaWxvbikpO1xuXG4gICAgLy8gT3IsIGFyZSAoeDAseTApLCAoeDEseTEpIGFuZCAoeDIseTIpIGNvbGxpbmVhcj9cbiAgICAvLyBFcXVpdmFsZW50bHksIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4Mix5Mik/XG4gICAgLy8gT3IsIGlzIHRoZSByYWRpdXMgemVybz8gTGluZSB0byAoeDEseTEpLlxuICAgIGVsc2UgaWYgKCEoTWF0aC5hYnMoeTAxICogeDIxIC0geTIxICogeDAxKSA+IGVwc2lsb24pIHx8ICFyKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl8gKz0gXCJMXCIgKyAoeDEgKyB0MDEgKiB4MDEpICsgXCIsXCIgKyAoeTEgKyB0MDEgKiB5MDEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwwLFwiICsgKCsoeTAxICogeDIwID4geDAxICogeTIwKSkgKyBcIixcIiArICh0aGlzLl94MSA9IHgxICsgdDIxICogeDIxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEgKyB0MjEgKiB5MjEpO1xuICAgIH1cbiAgfSxcbiAgYXJjOiBmdW5jdGlvbih4LCB5LCByLCBhMCwgYTEsIGNjdykge1xuICAgIHggPSAreCwgeSA9ICt5LCByID0gK3IsIGNjdyA9ICEhY2N3O1xuICAgIHZhciBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIGVtcHR5PyBXZeKAmXJlIGRvbmUuXG4gICAgaWYgKCFyKSByZXR1cm47XG5cbiAgICAvLyBEb2VzIHRoZSBhbmdsZSBnbyB0aGUgd3Jvbmcgd2F5PyBGbGlwIHRoZSBkaXJlY3Rpb24uXG4gICAgaWYgKGRhIDwgMCkgZGEgPSBkYSAlIHRhdSArIHRhdTtcblxuICAgIC8vIElzIHRoaXMgYSBjb21wbGV0ZSBjaXJjbGU/IERyYXcgdHdvIGFyY3MgdG8gY29tcGxldGUgdGhlIGNpcmNsZS5cbiAgICBpZiAoZGEgPiB0YXVFcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh4IC0gZHgpICsgXCIsXCIgKyAoeSAtIGR5KSArIFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MCkgKyBcIixcIiArICh0aGlzLl95MSA9IHkwKTtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsXCIgKyAoKyhkYSA+PSBwaSkpICsgXCIsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSkpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKSk7XG4gICAgfVxuICB9LFxuICByZWN0OiBmdW5jdGlvbih4LCB5LCB3LCBoKSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpICsgXCJoXCIgKyAoK3cpICsgXCJ2XCIgKyAoK2gpICsgXCJoXCIgKyAoLXcpICsgXCJaXCI7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXRoO1xuIiwiZXhwb3J0IHZhciBwcmVmaXggPSBcIiRcIjtcblxuZnVuY3Rpb24gTWFwKCkge31cblxuTWFwLnByb3RvdHlwZSA9IG1hcC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBNYXAsXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBrZXkpIGluIHRoaXM7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXNbcHJlZml4ICsga2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpc1twcmVmaXggKyBrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5O1xuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGtleXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGtleXMucHVzaChwcm9wZXJ0eS5zbGljZSgxKSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sXG4gIHZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSB2YWx1ZXMucHVzaCh0aGlzW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSxcbiAgZW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSArK3NpemU7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGYodGhpc1twcm9wZXJ0eV0sIHByb3BlcnR5LnNsaWNlKDEpLCB0aGlzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwKG9iamVjdCwgZikge1xuICB2YXIgbWFwID0gbmV3IE1hcDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pO1xuXG4gIC8vIEluZGV4IGFycmF5IGJ5IG51bWVyaWMgaW5kZXggb3Igc3BlY2lmaWVkIGtleSBmdW5jdGlvbi5cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IG9iamVjdC5sZW5ndGgsXG4gICAgICAgIG87XG5cbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChpLCBvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC5cbiAgZWxzZSBpZiAob2JqZWN0KSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwgb2JqZWN0W2tleV0pO1xuXG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcDtcbiIsImltcG9ydCB7ZGVmYXVsdCBhcyBtYXAsIHByZWZpeH0gZnJvbSBcIi4vbWFwXCI7XG5cbmZ1bmN0aW9uIFNldCgpIHt9XG5cbnZhciBwcm90byA9IG1hcC5wcm90b3R5cGU7XG5cblNldC5wcm90b3R5cGUgPSBzZXQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2V0LFxuICBoYXM6IHByb3RvLmhhcyxcbiAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhbHVlICs9IFwiXCI7XG4gICAgdGhpc1twcmVmaXggKyB2YWx1ZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVtb3ZlOiBwcm90by5yZW1vdmUsXG4gIGNsZWFyOiBwcm90by5jbGVhcixcbiAgdmFsdWVzOiBwcm90by5rZXlzLFxuICBzaXplOiBwcm90by5zaXplLFxuICBlbXB0eTogcHJvdG8uZW1wdHksXG4gIGVhY2g6IHByb3RvLmVhY2hcbn07XG5cbmZ1bmN0aW9uIHNldChvYmplY3QsIGYpIHtcbiAgdmFyIHNldCA9IG5ldyBTZXQ7XG5cbiAgLy8gQ29weSBjb25zdHJ1Y3Rvci5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNldCkgb2JqZWN0LmVhY2goZnVuY3Rpb24odmFsdWUpIHsgc2V0LmFkZCh2YWx1ZSk7IH0pO1xuXG4gIC8vIE90aGVyd2lzZSwgYXNzdW1lIGl04oCZcyBhbiBhcnJheS5cbiAgZWxzZSBpZiAob2JqZWN0KSB7XG4gICAgdmFyIGkgPSAtMSwgbiA9IG9iamVjdC5sZW5ndGg7XG4gICAgaWYgKGYgPT0gbnVsbCkgd2hpbGUgKCsraSA8IG4pIHNldC5hZGQob2JqZWN0W2ldKTtcbiAgICBlbHNlIHdoaWxlICgrK2kgPCBuKSBzZXQuYWRkKGYob2JqZWN0W2ldLCBpLCBvYmplY3QpKTtcbiAgfVxuXG4gIHJldHVybiBzZXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldDtcbiIsInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBzbGljZSA9IGFycmF5LnNsaWNlO1xuIiwiaW1wb3J0IHttYXgsIHJhbmdlLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtibHVyWCwgYmx1cll9IGZyb20gXCIuL2JsdXJcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGNvbnRvdXJzIGZyb20gXCIuL2NvbnRvdXJzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRYKGQpIHtcbiAgcmV0dXJuIGRbMF07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRZKGQpIHtcbiAgcmV0dXJuIGRbMV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRXZWlnaHQoKSB7XG4gIHJldHVybiAxO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHggPSBkZWZhdWx0WCxcbiAgICAgIHkgPSBkZWZhdWx0WSxcbiAgICAgIHdlaWdodCA9IGRlZmF1bHRXZWlnaHQsXG4gICAgICBkeCA9IDk2MCxcbiAgICAgIGR5ID0gNTAwLFxuICAgICAgciA9IDIwLCAvLyBibHVyIHJhZGl1c1xuICAgICAgayA9IDIsIC8vIGxvZzIoZ3JpZCBjZWxsIHNpemUpXG4gICAgICBvID0gciAqIDMsIC8vIGdyaWQgb2Zmc2V0LCB0byBwYWQgZm9yIGJsdXJcbiAgICAgIG4gPSAoZHggKyBvICogMikgPj4gaywgLy8gZ3JpZCB3aWR0aFxuICAgICAgbSA9IChkeSArIG8gKiAyKSA+PiBrLCAvLyBncmlkIGhlaWdodFxuICAgICAgdGhyZXNob2xkID0gY29uc3RhbnQoMjApO1xuXG4gIGZ1bmN0aW9uIGRlbnNpdHkoZGF0YSkge1xuICAgIHZhciB2YWx1ZXMwID0gbmV3IEZsb2F0MzJBcnJheShuICogbSksXG4gICAgICAgIHZhbHVlczEgPSBuZXcgRmxvYXQzMkFycmF5KG4gKiBtKTtcblxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkLCBpLCBkYXRhKSB7XG4gICAgICB2YXIgeGkgPSAoK3goZCwgaSwgZGF0YSkgKyBvKSA+PiBrLFxuICAgICAgICAgIHlpID0gKCt5KGQsIGksIGRhdGEpICsgbykgPj4gayxcbiAgICAgICAgICB3aSA9ICt3ZWlnaHQoZCwgaSwgZGF0YSk7XG4gICAgICBpZiAoeGkgPj0gMCAmJiB4aSA8IG4gJiYgeWkgPj0gMCAmJiB5aSA8IG0pIHtcbiAgICAgICAgdmFsdWVzMFt4aSArIHlpICogbl0gKz0gd2k7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIE9wdGltaXplLlxuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuXG4gICAgdmFyIHR6ID0gdGhyZXNob2xkKHZhbHVlczApO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHopKSB7XG4gICAgICB2YXIgc3RvcCA9IG1heCh2YWx1ZXMwKTtcbiAgICAgIHR6ID0gdGlja1N0ZXAoMCwgc3RvcCwgdHopO1xuICAgICAgdHogPSByYW5nZSgwLCBNYXRoLmZsb29yKHN0b3AgLyB0eikgKiB0eiwgdHopO1xuICAgICAgdHouc2hpZnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udG91cnMoKVxuICAgICAgICAudGhyZXNob2xkcyh0eilcbiAgICAgICAgLnNpemUoW24sIG1dKVxuICAgICAgKHZhbHVlczApXG4gICAgICAgIC5tYXAodHJhbnNmb3JtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybShnZW9tZXRyeSkge1xuICAgIGdlb21ldHJ5LnZhbHVlICo9IE1hdGgucG93KDIsIC0yICogayk7IC8vIERlbnNpdHkgaW4gcG9pbnRzIHBlciBzcXVhcmUgcGl4ZWwuXG4gICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm1Qb2x5Z29uKTtcbiAgICByZXR1cm4gZ2VvbWV0cnk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1Qb2x5Z29uKGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm1SaW5nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVJpbmcoY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcy5mb3JFYWNoKHRyYW5zZm9ybVBvaW50KTtcbiAgfVxuXG4gIC8vIFRPRE8gT3B0aW1pemUuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50KGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXNbMF0gPSBjb29yZGluYXRlc1swXSAqIE1hdGgucG93KDIsIGspIC0gbztcbiAgICBjb29yZGluYXRlc1sxXSA9IGNvb3JkaW5hdGVzWzFdICogTWF0aC5wb3coMiwgaykgLSBvO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplKCkge1xuICAgIG8gPSByICogMztcbiAgICBuID0gKGR4ICsgbyAqIDIpID4+IGs7XG4gICAgbSA9IChkeSArIG8gKiAyKSA+PiBrO1xuICAgIHJldHVybiBkZW5zaXR5O1xuICB9XG5cbiAgZGVuc2l0eS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgZGVuc2l0eSkgOiB4O1xuICB9O1xuXG4gIGRlbnNpdHkueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGRlbnNpdHkpIDogeTtcbiAgfTtcblxuICBkZW5zaXR5LndlaWdodCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh3ZWlnaHQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgZGVuc2l0eSkgOiB3ZWlnaHQ7XG4gIH07XG5cbiAgZGVuc2l0eS5zaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtkeCwgZHldO1xuICAgIHZhciBfMCA9IE1hdGguY2VpbChfWzBdKSwgXzEgPSBNYXRoLmNlaWwoX1sxXSk7XG4gICAgaWYgKCEoXzAgPj0gMCkgJiYgIShfMCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzaXplXCIpO1xuICAgIHJldHVybiBkeCA9IF8wLCBkeSA9IF8xLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LmNlbGxTaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIDEgPDwgaztcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAxKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjZWxsIHNpemVcIik7XG4gICAgcmV0dXJuIGsgPSBNYXRoLmZsb29yKE1hdGgubG9nKF8pIC8gTWF0aC5MTjIpLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgZGVuc2l0eSkgOiB0aHJlc2hvbGQ7XG4gIH07XG5cbiAgZGVuc2l0eS5iYW5kd2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gTWF0aC5zcXJ0KHIgKiAociArIDEpKTtcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBiYW5kd2lkdGhcIik7XG4gICAgcmV0dXJuIHIgPSBNYXRoLnJvdW5kKChNYXRoLnNxcnQoNCAqIF8gKiBfICsgMSkgLSAxKSAvIDIpLCByZXNpemUoKTtcbiAgfTtcblxuICByZXR1cm4gZGVuc2l0eTtcbn1cbiIsInZhciBFT0wgPSB7fSxcbiAgICBFT0YgPSB7fSxcbiAgICBRVU9URSA9IDM0LFxuICAgIE5FV0xJTkUgPSAxMCxcbiAgICBSRVRVUk4gPSAxMztcblxuZnVuY3Rpb24gb2JqZWN0Q29udmVydGVyKGNvbHVtbnMpIHtcbiAgcmV0dXJuIG5ldyBGdW5jdGlvbihcImRcIiwgXCJyZXR1cm4ge1wiICsgY29sdW1ucy5tYXAoZnVuY3Rpb24obmFtZSwgaSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShuYW1lKSArIFwiOiBkW1wiICsgaSArIFwiXVwiO1xuICB9KS5qb2luKFwiLFwiKSArIFwifVwiKTtcbn1cblxuZnVuY3Rpb24gY3VzdG9tQ29udmVydGVyKGNvbHVtbnMsIGYpIHtcbiAgdmFyIG9iamVjdCA9IG9iamVjdENvbnZlcnRlcihjb2x1bW5zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHJvdywgaSkge1xuICAgIHJldHVybiBmKG9iamVjdChyb3cpLCBpLCBjb2x1bW5zKTtcbiAgfTtcbn1cblxuLy8gQ29tcHV0ZSB1bmlxdWUgY29sdW1ucyBpbiBvcmRlciBvZiBkaXNjb3ZlcnkuXG5mdW5jdGlvbiBpbmZlckNvbHVtbnMocm93cykge1xuICB2YXIgY29sdW1uU2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGNvbHVtbnMgPSBbXTtcblxuICByb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgZm9yICh2YXIgY29sdW1uIGluIHJvdykge1xuICAgICAgaWYgKCEoY29sdW1uIGluIGNvbHVtblNldCkpIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtblNldFtjb2x1bW5dID0gY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG5mdW5jdGlvbiBwYWQodmFsdWUsIHdpZHRoKSB7XG4gIHZhciBzID0gdmFsdWUgKyBcIlwiLCBsZW5ndGggPSBzLmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbigwKSArIHMgOiBzO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFyKHllYXIpIHtcbiAgcmV0dXJuIHllYXIgPCAwID8gXCItXCIgKyBwYWQoLXllYXIsIDYpXG4gICAgOiB5ZWFyID4gOTk5OSA/IFwiK1wiICsgcGFkKHllYXIsIDYpXG4gICAgOiBwYWQoeWVhciwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSkge1xuICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgICBtaW51dGVzID0gZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgICBzZWNvbmRzID0gZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgICBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBcIkludmFsaWQgRGF0ZVwiXG4gICAgICA6IGZvcm1hdFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCA0KSArIFwiLVwiICsgcGFkKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEsIDIpICsgXCItXCIgKyBwYWQoZGF0ZS5nZXRVVENEYXRlKCksIDIpXG4gICAgICArIChtaWxsaXNlY29uZHMgPyBcIlRcIiArIHBhZChob3VycywgMikgKyBcIjpcIiArIHBhZChtaW51dGVzLCAyKSArIFwiOlwiICsgcGFkKHNlY29uZHMsIDIpICsgXCIuXCIgKyBwYWQobWlsbGlzZWNvbmRzLCAzKSArIFwiWlwiXG4gICAgICA6IHNlY29uZHMgPyBcIlRcIiArIHBhZChob3VycywgMikgKyBcIjpcIiArIHBhZChtaW51dGVzLCAyKSArIFwiOlwiICsgcGFkKHNlY29uZHMsIDIpICsgXCJaXCJcbiAgICAgIDogbWludXRlcyB8fCBob3VycyA/IFwiVFwiICsgcGFkKGhvdXJzLCAyKSArIFwiOlwiICsgcGFkKG1pbnV0ZXMsIDIpICsgXCJaXCJcbiAgICAgIDogXCJcIik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlbGltaXRlcikge1xuICB2YXIgcmVGb3JtYXQgPSBuZXcgUmVnRXhwKFwiW1xcXCJcIiArIGRlbGltaXRlciArIFwiXFxuXFxyXVwiKSxcbiAgICAgIERFTElNSVRFUiA9IGRlbGltaXRlci5jaGFyQ29kZUF0KDApO1xuXG4gIGZ1bmN0aW9uIHBhcnNlKHRleHQsIGYpIHtcbiAgICB2YXIgY29udmVydCwgY29sdW1ucywgcm93cyA9IHBhcnNlUm93cyh0ZXh0LCBmdW5jdGlvbihyb3csIGkpIHtcbiAgICAgIGlmIChjb252ZXJ0KSByZXR1cm4gY29udmVydChyb3csIGkgLSAxKTtcbiAgICAgIGNvbHVtbnMgPSByb3csIGNvbnZlcnQgPSBmID8gY3VzdG9tQ29udmVydGVyKHJvdywgZikgOiBvYmplY3RDb252ZXJ0ZXIocm93KTtcbiAgICB9KTtcbiAgICByb3dzLmNvbHVtbnMgPSBjb2x1bW5zIHx8IFtdO1xuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VSb3dzKHRleHQsIGYpIHtcbiAgICB2YXIgcm93cyA9IFtdLCAvLyBvdXRwdXQgcm93c1xuICAgICAgICBOID0gdGV4dC5sZW5ndGgsXG4gICAgICAgIEkgPSAwLCAvLyBjdXJyZW50IGNoYXJhY3RlciBpbmRleFxuICAgICAgICBuID0gMCwgLy8gY3VycmVudCBsaW5lIG51bWJlclxuICAgICAgICB0LCAvLyBjdXJyZW50IHRva2VuXG4gICAgICAgIGVvZiA9IE4gPD0gMCwgLy8gY3VycmVudCB0b2tlbiBmb2xsb3dlZCBieSBFT0Y/XG4gICAgICAgIGVvbCA9IGZhbHNlOyAvLyBjdXJyZW50IHRva2VuIGZvbGxvd2VkIGJ5IEVPTD9cblxuICAgIC8vIFN0cmlwIHRoZSB0cmFpbGluZyBuZXdsaW5lLlxuICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoTiAtIDEpID09PSBORVdMSU5FKSAtLU47XG4gICAgaWYgKHRleHQuY2hhckNvZGVBdChOIC0gMSkgPT09IFJFVFVSTikgLS1OO1xuXG4gICAgZnVuY3Rpb24gdG9rZW4oKSB7XG4gICAgICBpZiAoZW9mKSByZXR1cm4gRU9GO1xuICAgICAgaWYgKGVvbCkgcmV0dXJuIGVvbCA9IGZhbHNlLCBFT0w7XG5cbiAgICAgIC8vIFVuZXNjYXBlIHF1b3Rlcy5cbiAgICAgIHZhciBpLCBqID0gSSwgYztcbiAgICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoaikgPT09IFFVT1RFKSB7XG4gICAgICAgIHdoaWxlIChJKysgPCBOICYmIHRleHQuY2hhckNvZGVBdChJKSAhPT0gUVVPVEUgfHwgdGV4dC5jaGFyQ29kZUF0KCsrSSkgPT09IFFVT1RFKTtcbiAgICAgICAgaWYgKChpID0gSSkgPj0gTikgZW9mID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAoKGMgPSB0ZXh0LmNoYXJDb2RlQXQoSSsrKSkgPT09IE5FV0xJTkUpIGVvbCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFJFVFVSTikgeyBlb2wgPSB0cnVlOyBpZiAodGV4dC5jaGFyQ29kZUF0KEkpID09PSBORVdMSU5FKSArK0k7IH1cbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UoaiArIDEsIGkgLSAxKS5yZXBsYWNlKC9cIlwiL2csIFwiXFxcIlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCBuZXh0IGRlbGltaXRlciBvciBuZXdsaW5lLlxuICAgICAgd2hpbGUgKEkgPCBOKSB7XG4gICAgICAgIGlmICgoYyA9IHRleHQuY2hhckNvZGVBdChpID0gSSsrKSkgPT09IE5FV0xJTkUpIGVvbCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFJFVFVSTikgeyBlb2wgPSB0cnVlOyBpZiAodGV4dC5jaGFyQ29kZUF0KEkpID09PSBORVdMSU5FKSArK0k7IH1cbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gREVMSU1JVEVSKSBjb250aW51ZTtcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UoaiwgaSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJldHVybiBsYXN0IHRva2VuIGJlZm9yZSBFT0YuXG4gICAgICByZXR1cm4gZW9mID0gdHJ1ZSwgdGV4dC5zbGljZShqLCBOKTtcbiAgICB9XG5cbiAgICB3aGlsZSAoKHQgPSB0b2tlbigpKSAhPT0gRU9GKSB7XG4gICAgICB2YXIgcm93ID0gW107XG4gICAgICB3aGlsZSAodCAhPT0gRU9MICYmIHQgIT09IEVPRikgcm93LnB1c2godCksIHQgPSB0b2tlbigpO1xuICAgICAgaWYgKGYgJiYgKHJvdyA9IGYocm93LCBuKyspKSA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlZm9ybWF0Qm9keShyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKGZ1bmN0aW9uKHJvdykge1xuICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gZm9ybWF0VmFsdWUocm93W2NvbHVtbl0pO1xuICAgICAgfSkuam9pbihkZWxpbWl0ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0KHJvd3MsIGNvbHVtbnMpIHtcbiAgICBpZiAoY29sdW1ucyA9PSBudWxsKSBjb2x1bW5zID0gaW5mZXJDb2x1bW5zKHJvd3MpO1xuICAgIHJldHVybiBbY29sdW1ucy5tYXAoZm9ybWF0VmFsdWUpLmpvaW4oZGVsaW1pdGVyKV0uY29uY2F0KHByZWZvcm1hdEJvZHkocm93cywgY29sdW1ucykpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRCb2R5KHJvd3MsIGNvbHVtbnMpIHtcbiAgICBpZiAoY29sdW1ucyA9PSBudWxsKSBjb2x1bW5zID0gaW5mZXJDb2x1bW5zKHJvd3MpO1xuICAgIHJldHVybiBwcmVmb3JtYXRCb2R5KHJvd3MsIGNvbHVtbnMpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRSb3dzKHJvd3MpIHtcbiAgICByZXR1cm4gcm93cy5tYXAoZm9ybWF0Um93KS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0Um93KHJvdykge1xuICAgIHJldHVybiByb3cubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIlxuICAgICAgICA6IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGZvcm1hdERhdGUodmFsdWUpXG4gICAgICAgIDogcmVGb3JtYXQudGVzdCh2YWx1ZSArPSBcIlwiKSA/IFwiXFxcIlwiICsgdmFsdWUucmVwbGFjZSgvXCIvZywgXCJcXFwiXFxcIlwiKSArIFwiXFxcIlwiXG4gICAgICAgIDogdmFsdWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBwYXJzZVJvd3M6IHBhcnNlUm93cyxcbiAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICBmb3JtYXRCb2R5OiBmb3JtYXRCb2R5LFxuICAgIGZvcm1hdFJvd3M6IGZvcm1hdFJvd3NcbiAgfTtcbn1cbiIsImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2XCI7XG5cbnZhciBjc3YgPSBkc3YoXCIsXCIpO1xuXG5leHBvcnQgdmFyIGNzdlBhcnNlID0gY3N2LnBhcnNlO1xuZXhwb3J0IHZhciBjc3ZQYXJzZVJvd3MgPSBjc3YucGFyc2VSb3dzO1xuZXhwb3J0IHZhciBjc3ZGb3JtYXQgPSBjc3YuZm9ybWF0O1xuZXhwb3J0IHZhciBjc3ZGb3JtYXRCb2R5ID0gY3N2LmZvcm1hdEJvZHk7XG5leHBvcnQgdmFyIGNzdkZvcm1hdFJvd3MgPSBjc3YuZm9ybWF0Um93cztcbiIsImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2XCI7XG5cbnZhciB0c3YgPSBkc3YoXCJcXHRcIik7XG5cbmV4cG9ydCB2YXIgdHN2UGFyc2UgPSB0c3YucGFyc2U7XG5leHBvcnQgdmFyIHRzdlBhcnNlUm93cyA9IHRzdi5wYXJzZVJvd3M7XG5leHBvcnQgdmFyIHRzdkZvcm1hdCA9IHRzdi5mb3JtYXQ7XG5leHBvcnQgdmFyIHRzdkZvcm1hdEJvZHkgPSB0c3YuZm9ybWF0Qm9keTtcbmV4cG9ydCB2YXIgdHN2Rm9ybWF0Um93cyA9IHRzdi5mb3JtYXRSb3dzO1xuIiwiZnVuY3Rpb24gcmVzcG9uc2VUZXh0KHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gZmV0Y2goaW5wdXQsIGluaXQpLnRoZW4ocmVzcG9uc2VUZXh0KTtcbn1cbiIsImltcG9ydCB7Y3N2UGFyc2UsIGRzdkZvcm1hdCwgdHN2UGFyc2V9IGZyb20gXCJkMy1kc3ZcIjtcbmltcG9ydCB0ZXh0IGZyb20gXCIuL3RleHRcIjtcblxuZnVuY3Rpb24gZHN2UGFyc2UocGFyc2UpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGlucHV0LCBpbml0LCByb3cpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgaW5pdCA9PT0gXCJmdW5jdGlvblwiKSByb3cgPSBpbml0LCBpbml0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0ZXh0KGlucHV0LCBpbml0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcGFyc2UocmVzcG9uc2UsIHJvdyk7XG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRzdihkZWxpbWl0ZXIsIGlucHV0LCBpbml0LCByb3cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIGluaXQgPT09IFwiZnVuY3Rpb25cIikgcm93ID0gaW5pdCwgaW5pdCA9IHVuZGVmaW5lZDtcbiAgdmFyIGZvcm1hdCA9IGRzdkZvcm1hdChkZWxpbWl0ZXIpO1xuICByZXR1cm4gdGV4dChpbnB1dCwgaW5pdCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xuICAgIHJldHVybiBmb3JtYXQucGFyc2UocmVzcG9uc2UsIHJvdyk7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIGNzdiA9IGRzdlBhcnNlKGNzdlBhcnNlKTtcbmV4cG9ydCB2YXIgdHN2ID0gZHN2UGFyc2UodHN2UGFyc2UpO1xuIiwiZnVuY3Rpb24gcmVzcG9uc2VKc29uKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gZmV0Y2goaW5wdXQsIGluaXQpLnRoZW4ocmVzcG9uc2VKc29uKTtcbn1cbiIsImltcG9ydCB0ZXh0IGZyb20gXCIuL3RleHRcIjtcblxuZnVuY3Rpb24gcGFyc2VyKHR5cGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGlucHV0LCBpbml0KSAge1xuICAgIHJldHVybiB0ZXh0KGlucHV0LCBpbml0KS50aGVuKGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIHJldHVybiAobmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHRleHQsIHR5cGUpO1xuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBwYXJzZXIoXCJhcHBsaWNhdGlvbi94bWxcIik7XG5cbmV4cG9ydCB2YXIgaHRtbCA9IHBhcnNlcihcInRleHQvaHRtbFwiKTtcblxuZXhwb3J0IHZhciBzdmcgPSBwYXJzZXIoXCJpbWFnZS9zdmcreG1sXCIpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICB2YXIgeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCksXG4gICAgICB5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKTtcbiAgcmV0dXJuIGFkZCh0aGlzLmNvdmVyKHgsIHkpLCB4LCB5LCBkKTtcbn1cblxuZnVuY3Rpb24gYWRkKHRyZWUsIHgsIHksIGQpIHtcbiAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm4gdHJlZTsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHBhcmVudCxcbiAgICAgIG5vZGUgPSB0cmVlLl9yb290LFxuICAgICAgbGVhZiA9IHtkYXRhOiBkfSxcbiAgICAgIHgwID0gdHJlZS5feDAsXG4gICAgICB5MCA9IHRyZWUuX3kwLFxuICAgICAgeDEgPSB0cmVlLl94MSxcbiAgICAgIHkxID0gdHJlZS5feTEsXG4gICAgICB4bSxcbiAgICAgIHltLFxuICAgICAgeHAsXG4gICAgICB5cCxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0cmVlLl9yb290ID0gbGVhZiwgdHJlZTtcblxuICAvLyBGaW5kIHRoZSBleGlzdGluZyBsZWFmIGZvciB0aGUgbmV3IHBvaW50LCBvciBhZGQgaXQuXG4gIHdoaWxlIChub2RlLmxlbmd0aCkge1xuICAgIGlmIChyaWdodCA9IHggPj0gKHhtID0gKHgwICsgeDEpIC8gMikpIHgwID0geG07IGVsc2UgeDEgPSB4bTtcbiAgICBpZiAoYm90dG9tID0geSA+PSAoeW0gPSAoeTAgKyB5MSkgLyAyKSkgeTAgPSB5bTsgZWxzZSB5MSA9IHltO1xuICAgIGlmIChwYXJlbnQgPSBub2RlLCAhKG5vZGUgPSBub2RlW2kgPSBib3R0b20gPDwgMSB8IHJpZ2h0XSkpIHJldHVybiBwYXJlbnRbaV0gPSBsZWFmLCB0cmVlO1xuICB9XG5cbiAgLy8gSXMgdGhlIG5ldyBwb2ludCBpcyBleGFjdGx5IGNvaW5jaWRlbnQgd2l0aCB0aGUgZXhpc3RpbmcgcG9pbnQ/XG4gIHhwID0gK3RyZWUuX3guY2FsbChudWxsLCBub2RlLmRhdGEpO1xuICB5cCA9ICt0cmVlLl95LmNhbGwobnVsbCwgbm9kZS5kYXRhKTtcbiAgaWYgKHggPT09IHhwICYmIHkgPT09IHlwKSByZXR1cm4gbGVhZi5uZXh0ID0gbm9kZSwgcGFyZW50ID8gcGFyZW50W2ldID0gbGVhZiA6IHRyZWUuX3Jvb3QgPSBsZWFmLCB0cmVlO1xuXG4gIC8vIE90aGVyd2lzZSwgc3BsaXQgdGhlIGxlYWYgbm9kZSB1bnRpbCB0aGUgb2xkIGFuZCBuZXcgcG9pbnQgYXJlIHNlcGFyYXRlZC5cbiAgZG8ge1xuICAgIHBhcmVudCA9IHBhcmVudCA/IHBhcmVudFtpXSA9IG5ldyBBcnJheSg0KSA6IHRyZWUuX3Jvb3QgPSBuZXcgQXJyYXkoNCk7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gIH0gd2hpbGUgKChpID0gYm90dG9tIDw8IDEgfCByaWdodCkgPT09IChqID0gKHlwID49IHltKSA8PCAxIHwgKHhwID49IHhtKSkpO1xuICByZXR1cm4gcGFyZW50W2pdID0gbm9kZSwgcGFyZW50W2ldID0gbGVhZiwgdHJlZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEFsbChkYXRhKSB7XG4gIHZhciBkLCBpLCBuID0gZGF0YS5sZW5ndGgsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHh6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgeXogPSBuZXcgQXJyYXkobiksXG4gICAgICB4MCA9IEluZmluaXR5LFxuICAgICAgeTAgPSBJbmZpbml0eSxcbiAgICAgIHgxID0gLUluZmluaXR5LFxuICAgICAgeTEgPSAtSW5maW5pdHk7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcG9pbnRzIGFuZCB0aGVpciBleHRlbnQuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCA9IGRhdGFbaV0pKSB8fCBpc05hTih5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKSkpIGNvbnRpbnVlO1xuICAgIHh6W2ldID0geDtcbiAgICB5eltpXSA9IHk7XG4gICAgaWYgKHggPCB4MCkgeDAgPSB4O1xuICAgIGlmICh4ID4geDEpIHgxID0geDtcbiAgICBpZiAoeSA8IHkwKSB5MCA9IHk7XG4gICAgaWYgKHkgPiB5MSkgeTEgPSB5O1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgd2VyZSBubyAodmFsaWQpIHBvaW50cywgYWJvcnQuXG4gIGlmICh4MCA+IHgxIHx8IHkwID4geTEpIHJldHVybiB0aGlzO1xuXG4gIC8vIEV4cGFuZCB0aGUgdHJlZSB0byBjb3ZlciB0aGUgbmV3IHBvaW50cy5cbiAgdGhpcy5jb3Zlcih4MCwgeTApLmNvdmVyKHgxLCB5MSk7XG5cbiAgLy8gQWRkIHRoZSBuZXcgcG9pbnRzLlxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgYWRkKHRoaXMsIHh6W2ldLCB5eltpXSwgZGF0YVtpXSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHkpIHtcbiAgaWYgKGlzTmFOKHggPSAreCkgfHwgaXNOYU4oeSA9ICt5KSkgcmV0dXJuIHRoaXM7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciB4MCA9IHRoaXMuX3gwLFxuICAgICAgeTAgPSB0aGlzLl95MCxcbiAgICAgIHgxID0gdGhpcy5feDEsXG4gICAgICB5MSA9IHRoaXMuX3kxO1xuXG4gIC8vIElmIHRoZSBxdWFkdHJlZSBoYXMgbm8gZXh0ZW50LCBpbml0aWFsaXplIHRoZW0uXG4gIC8vIEludGVnZXIgZXh0ZW50IGFyZSBuZWNlc3Nhcnkgc28gdGhhdCBpZiB3ZSBsYXRlciBkb3VibGUgdGhlIGV4dGVudCxcbiAgLy8gdGhlIGV4aXN0aW5nIHF1YWRyYW50IGJvdW5kYXJpZXMgZG9u4oCZdCBjaGFuZ2UgZHVlIHRvIGZsb2F0aW5nIHBvaW50IGVycm9yIVxuICBpZiAoaXNOYU4oeDApKSB7XG4gICAgeDEgPSAoeDAgPSBNYXRoLmZsb29yKHgpKSArIDE7XG4gICAgeTEgPSAoeTAgPSBNYXRoLmZsb29yKHkpKSArIDE7XG4gIH1cblxuICAvLyBPdGhlcndpc2UsIGRvdWJsZSByZXBlYXRlZGx5IHRvIGNvdmVyLlxuICBlbHNlIHtcbiAgICB2YXIgeiA9IHgxIC0geDAsXG4gICAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIGk7XG5cbiAgICB3aGlsZSAoeDAgPiB4IHx8IHggPj0geDEgfHwgeTAgPiB5IHx8IHkgPj0geTEpIHtcbiAgICAgIGkgPSAoeSA8IHkwKSA8PCAxIHwgKHggPCB4MCk7XG4gICAgICBwYXJlbnQgPSBuZXcgQXJyYXkoNCksIHBhcmVudFtpXSA9IG5vZGUsIG5vZGUgPSBwYXJlbnQsIHogKj0gMjtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIDA6IHgxID0geDAgKyB6LCB5MSA9IHkwICsgejsgYnJlYWs7XG4gICAgICAgIGNhc2UgMTogeDAgPSB4MSAtIHosIHkxID0geTAgKyB6OyBicmVhaztcbiAgICAgICAgY2FzZSAyOiB4MSA9IHgwICsgeiwgeTAgPSB5MSAtIHo7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IHgwID0geDEgLSB6LCB5MCA9IHkxIC0gejsgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jvb3QgJiYgdGhpcy5fcm9vdC5sZW5ndGgpIHRoaXMuX3Jvb3QgPSBub2RlO1xuICB9XG5cbiAgdGhpcy5feDAgPSB4MDtcbiAgdGhpcy5feTAgPSB5MDtcbiAgdGhpcy5feDEgPSB4MTtcbiAgdGhpcy5feTEgPSB5MTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCB4MCwgeTAsIHgxLCB5MSkge1xuICB0aGlzLm5vZGUgPSBub2RlO1xuICB0aGlzLngwID0geDA7XG4gIHRoaXMueTAgPSB5MDtcbiAgdGhpcy54MSA9IHgxO1xuICB0aGlzLnkxID0geTE7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGVmYXVsdFgoZCkge1xuICByZXR1cm4gZFswXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGlzLl94ID0gXywgdGhpcykgOiB0aGlzLl94O1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRZKGQpIHtcbiAgcmV0dXJuIGRbMV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhpcy5feSA9IF8sIHRoaXMpIDogdGhpcy5feTtcbn1cbiIsImltcG9ydCB0cmVlX2FkZCwge2FkZEFsbCBhcyB0cmVlX2FkZEFsbH0gZnJvbSBcIi4vYWRkXCI7XG5pbXBvcnQgdHJlZV9jb3ZlciBmcm9tIFwiLi9jb3ZlclwiO1xuaW1wb3J0IHRyZWVfZGF0YSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgdHJlZV9leHRlbnQgZnJvbSBcIi4vZXh0ZW50XCI7XG5pbXBvcnQgdHJlZV9maW5kIGZyb20gXCIuL2ZpbmRcIjtcbmltcG9ydCB0cmVlX3JlbW92ZSwge3JlbW92ZUFsbCBhcyB0cmVlX3JlbW92ZUFsbH0gZnJvbSBcIi4vcmVtb3ZlXCI7XG5pbXBvcnQgdHJlZV9yb290IGZyb20gXCIuL3Jvb3RcIjtcbmltcG9ydCB0cmVlX3NpemUgZnJvbSBcIi4vc2l6ZVwiO1xuaW1wb3J0IHRyZWVfdmlzaXQgZnJvbSBcIi4vdmlzaXRcIjtcbmltcG9ydCB0cmVlX3Zpc2l0QWZ0ZXIgZnJvbSBcIi4vdmlzaXRBZnRlclwiO1xuaW1wb3J0IHRyZWVfeCwge2RlZmF1bHRYfSBmcm9tIFwiLi94XCI7XG5pbXBvcnQgdHJlZV95LCB7ZGVmYXVsdFl9IGZyb20gXCIuL3lcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhZHRyZWUobm9kZXMsIHgsIHkpIHtcbiAgdmFyIHRyZWUgPSBuZXcgUXVhZHRyZWUoeCA9PSBudWxsID8gZGVmYXVsdFggOiB4LCB5ID09IG51bGwgPyBkZWZhdWx0WSA6IHksIE5hTiwgTmFOLCBOYU4sIE5hTik7XG4gIHJldHVybiBub2RlcyA9PSBudWxsID8gdHJlZSA6IHRyZWUuYWRkQWxsKG5vZGVzKTtcbn1cblxuZnVuY3Rpb24gUXVhZHRyZWUoeCwgeSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdGhpcy5feCA9IHg7XG4gIHRoaXMuX3kgPSB5O1xuICB0aGlzLl94MCA9IHgwO1xuICB0aGlzLl95MCA9IHkwO1xuICB0aGlzLl94MSA9IHgxO1xuICB0aGlzLl95MSA9IHkxO1xuICB0aGlzLl9yb290ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBsZWFmX2NvcHkobGVhZikge1xuICB2YXIgY29weSA9IHtkYXRhOiBsZWFmLmRhdGF9LCBuZXh0ID0gY29weTtcbiAgd2hpbGUgKGxlYWYgPSBsZWFmLm5leHQpIG5leHQgPSBuZXh0Lm5leHQgPSB7ZGF0YTogbGVhZi5kYXRhfTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbnZhciB0cmVlUHJvdG8gPSBxdWFkdHJlZS5wcm90b3R5cGUgPSBRdWFkdHJlZS5wcm90b3R5cGU7XG5cbnRyZWVQcm90by5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb3B5ID0gbmV3IFF1YWR0cmVlKHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSxcbiAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgbm9kZXMsXG4gICAgICBjaGlsZDtcblxuICBpZiAoIW5vZGUpIHJldHVybiBjb3B5O1xuXG4gIGlmICghbm9kZS5sZW5ndGgpIHJldHVybiBjb3B5Ll9yb290ID0gbGVhZl9jb3B5KG5vZGUpLCBjb3B5O1xuXG4gIG5vZGVzID0gW3tzb3VyY2U6IG5vZGUsIHRhcmdldDogY29weS5fcm9vdCA9IG5ldyBBcnJheSg0KX1dO1xuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGUuc291cmNlW2ldKSB7XG4gICAgICAgIGlmIChjaGlsZC5sZW5ndGgpIG5vZGVzLnB1c2goe3NvdXJjZTogY2hpbGQsIHRhcmdldDogbm9kZS50YXJnZXRbaV0gPSBuZXcgQXJyYXkoNCl9KTtcbiAgICAgICAgZWxzZSBub2RlLnRhcmdldFtpXSA9IGxlYWZfY29weShjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvcHk7XG59O1xuXG50cmVlUHJvdG8uYWRkID0gdHJlZV9hZGQ7XG50cmVlUHJvdG8uYWRkQWxsID0gdHJlZV9hZGRBbGw7XG50cmVlUHJvdG8uY292ZXIgPSB0cmVlX2NvdmVyO1xudHJlZVByb3RvLmRhdGEgPSB0cmVlX2RhdGE7XG50cmVlUHJvdG8uZXh0ZW50ID0gdHJlZV9leHRlbnQ7XG50cmVlUHJvdG8uZmluZCA9IHRyZWVfZmluZDtcbnRyZWVQcm90by5yZW1vdmUgPSB0cmVlX3JlbW92ZTtcbnRyZWVQcm90by5yZW1vdmVBbGwgPSB0cmVlX3JlbW92ZUFsbDtcbnRyZWVQcm90by5yb290ID0gdHJlZV9yb290O1xudHJlZVByb3RvLnNpemUgPSB0cmVlX3NpemU7XG50cmVlUHJvdG8udmlzaXQgPSB0cmVlX3Zpc2l0O1xudHJlZVByb3RvLnZpc2l0QWZ0ZXIgPSB0cmVlX3Zpc2l0QWZ0ZXI7XG50cmVlUHJvdG8ueCA9IHRyZWVfeDtcbnRyZWVQcm90by55ID0gdHJlZV95O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBkYXRhID0gW107XG4gIHRoaXMudmlzaXQoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGRvIGRhdGEucHVzaChub2RlLmRhdGEpOyB3aGlsZSAobm9kZSA9IG5vZGUubmV4dClcbiAgfSk7XG4gIHJldHVybiBkYXRhO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmNvdmVyKCtfWzBdWzBdLCArX1swXVsxXSkuY292ZXIoK19bMV1bMF0sICtfWzFdWzFdKVxuICAgICAgOiBpc05hTih0aGlzLl94MCkgPyB1bmRlZmluZWQgOiBbW3RoaXMuX3gwLCB0aGlzLl95MF0sIFt0aGlzLl94MSwgdGhpcy5feTFdXTtcbn1cbiIsImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSwgcmFkaXVzKSB7XG4gIHZhciBkYXRhLFxuICAgICAgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSxcbiAgICAgIHkxLFxuICAgICAgeDIsXG4gICAgICB5MixcbiAgICAgIHgzID0gdGhpcy5feDEsXG4gICAgICB5MyA9IHRoaXMuX3kxLFxuICAgICAgcXVhZHMgPSBbXSxcbiAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgcSxcbiAgICAgIGk7XG5cbiAgaWYgKG5vZGUpIHF1YWRzLnB1c2gobmV3IFF1YWQobm9kZSwgeDAsIHkwLCB4MywgeTMpKTtcbiAgaWYgKHJhZGl1cyA9PSBudWxsKSByYWRpdXMgPSBJbmZpbml0eTtcbiAgZWxzZSB7XG4gICAgeDAgPSB4IC0gcmFkaXVzLCB5MCA9IHkgLSByYWRpdXM7XG4gICAgeDMgPSB4ICsgcmFkaXVzLCB5MyA9IHkgKyByYWRpdXM7XG4gICAgcmFkaXVzICo9IHJhZGl1cztcbiAgfVxuXG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcblxuICAgIC8vIFN0b3Agc2VhcmNoaW5nIGlmIHRoaXMgcXVhZHJhbnQgY2Fu4oCZdCBjb250YWluIGEgY2xvc2VyIG5vZGUuXG4gICAgaWYgKCEobm9kZSA9IHEubm9kZSlcbiAgICAgICAgfHwgKHgxID0gcS54MCkgPiB4M1xuICAgICAgICB8fCAoeTEgPSBxLnkwKSA+IHkzXG4gICAgICAgIHx8ICh4MiA9IHEueDEpIDwgeDBcbiAgICAgICAgfHwgKHkyID0gcS55MSkgPCB5MCkgY29udGludWU7XG5cbiAgICAvLyBCaXNlY3QgdGhlIGN1cnJlbnQgcXVhZHJhbnQuXG4gICAgaWYgKG5vZGUubGVuZ3RoKSB7XG4gICAgICB2YXIgeG0gPSAoeDEgKyB4MikgLyAyLFxuICAgICAgICAgIHltID0gKHkxICsgeTIpIC8gMjtcblxuICAgICAgcXVhZHMucHVzaChcbiAgICAgICAgbmV3IFF1YWQobm9kZVszXSwgeG0sIHltLCB4MiwgeTIpLFxuICAgICAgICBuZXcgUXVhZChub2RlWzJdLCB4MSwgeW0sIHhtLCB5MiksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMV0sIHhtLCB5MSwgeDIsIHltKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVswXSwgeDEsIHkxLCB4bSwgeW0pXG4gICAgICApO1xuXG4gICAgICAvLyBWaXNpdCB0aGUgY2xvc2VzdCBxdWFkcmFudCBmaXJzdC5cbiAgICAgIGlmIChpID0gKHkgPj0geW0pIDw8IDEgfCAoeCA+PSB4bSkpIHtcbiAgICAgICAgcSA9IHF1YWRzW3F1YWRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBxdWFkc1txdWFkcy5sZW5ndGggLSAxXSA9IHF1YWRzW3F1YWRzLmxlbmd0aCAtIDEgLSBpXTtcbiAgICAgICAgcXVhZHNbcXVhZHMubGVuZ3RoIC0gMSAtIGldID0gcTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWaXNpdCB0aGlzIHBvaW50LiAoVmlzaXRpbmcgY29pbmNpZGVudCBwb2ludHMgaXNu4oCZdCBuZWNlc3NhcnkhKVxuICAgIGVsc2Uge1xuICAgICAgdmFyIGR4ID0geCAtICt0aGlzLl94LmNhbGwobnVsbCwgbm9kZS5kYXRhKSxcbiAgICAgICAgICBkeSA9IHkgLSArdGhpcy5feS5jYWxsKG51bGwsIG5vZGUuZGF0YSksXG4gICAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICAgIGlmIChkMiA8IHJhZGl1cykge1xuICAgICAgICB2YXIgZCA9IE1hdGguc3FydChyYWRpdXMgPSBkMik7XG4gICAgICAgIHgwID0geCAtIGQsIHkwID0geSAtIGQ7XG4gICAgICAgIHgzID0geCArIGQsIHkzID0geSArIGQ7XG4gICAgICAgIGRhdGEgPSBub2RlLmRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkKSB7XG4gIGlmIChpc05hTih4ID0gK3RoaXMuX3guY2FsbChudWxsLCBkKSkgfHwgaXNOYU4oeSA9ICt0aGlzLl95LmNhbGwobnVsbCwgZCkpKSByZXR1cm4gdGhpczsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHBhcmVudCxcbiAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgcmV0YWluZXIsXG4gICAgICBwcmV2aW91cyxcbiAgICAgIG5leHQsXG4gICAgICB4MCA9IHRoaXMuX3gwLFxuICAgICAgeTAgPSB0aGlzLl95MCxcbiAgICAgIHgxID0gdGhpcy5feDEsXG4gICAgICB5MSA9IHRoaXMuX3kxLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICB4bSxcbiAgICAgIHltLFxuICAgICAgcmlnaHQsXG4gICAgICBib3R0b20sXG4gICAgICBpLFxuICAgICAgajtcblxuICAvLyBJZiB0aGUgdHJlZSBpcyBlbXB0eSwgaW5pdGlhbGl6ZSB0aGUgcm9vdCBhcyBhIGxlYWYuXG4gIGlmICghbm9kZSkgcmV0dXJuIHRoaXM7XG5cbiAgLy8gRmluZCB0aGUgbGVhZiBub2RlIGZvciB0aGUgcG9pbnQuXG4gIC8vIFdoaWxlIGRlc2NlbmRpbmcsIGFsc28gcmV0YWluIHRoZSBkZWVwZXN0IHBhcmVudCB3aXRoIGEgbm9uLXJlbW92ZWQgc2libGluZy5cbiAgaWYgKG5vZGUubGVuZ3RoKSB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChyaWdodCA9IHggPj0gKHhtID0gKHgwICsgeDEpIC8gMikpIHgwID0geG07IGVsc2UgeDEgPSB4bTtcbiAgICBpZiAoYm90dG9tID0geSA+PSAoeW0gPSAoeTAgKyB5MSkgLyAyKSkgeTAgPSB5bTsgZWxzZSB5MSA9IHltO1xuICAgIGlmICghKHBhcmVudCA9IG5vZGUsIG5vZGUgPSBub2RlW2kgPSBib3R0b20gPDwgMSB8IHJpZ2h0XSkpIHJldHVybiB0aGlzO1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGJyZWFrO1xuICAgIGlmIChwYXJlbnRbKGkgKyAxKSAmIDNdIHx8IHBhcmVudFsoaSArIDIpICYgM10gfHwgcGFyZW50WyhpICsgMykgJiAzXSkgcmV0YWluZXIgPSBwYXJlbnQsIGogPSBpO1xuICB9XG5cbiAgLy8gRmluZCB0aGUgcG9pbnQgdG8gcmVtb3ZlLlxuICB3aGlsZSAobm9kZS5kYXRhICE9PSBkKSBpZiAoIShwcmV2aW91cyA9IG5vZGUsIG5vZGUgPSBub2RlLm5leHQpKSByZXR1cm4gdGhpcztcbiAgaWYgKG5leHQgPSBub2RlLm5leHQpIGRlbGV0ZSBub2RlLm5leHQ7XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvaW5jaWRlbnQgcG9pbnRzLCByZW1vdmUganVzdCB0aGUgcG9pbnQuXG4gIGlmIChwcmV2aW91cykgcmV0dXJuIChuZXh0ID8gcHJldmlvdXMubmV4dCA9IG5leHQgOiBkZWxldGUgcHJldmlvdXMubmV4dCksIHRoaXM7XG5cbiAgLy8gSWYgdGhpcyBpcyB0aGUgcm9vdCBwb2ludCwgcmVtb3ZlIGl0LlxuICBpZiAoIXBhcmVudCkgcmV0dXJuIHRoaXMuX3Jvb3QgPSBuZXh0LCB0aGlzO1xuXG4gIC8vIFJlbW92ZSB0aGlzIGxlYWYuXG4gIG5leHQgPyBwYXJlbnRbaV0gPSBuZXh0IDogZGVsZXRlIHBhcmVudFtpXTtcblxuICAvLyBJZiB0aGUgcGFyZW50IG5vdyBjb250YWlucyBleGFjdGx5IG9uZSBsZWFmLCBjb2xsYXBzZSBzdXBlcmZsdW91cyBwYXJlbnRzLlxuICBpZiAoKG5vZGUgPSBwYXJlbnRbMF0gfHwgcGFyZW50WzFdIHx8IHBhcmVudFsyXSB8fCBwYXJlbnRbM10pXG4gICAgICAmJiBub2RlID09PSAocGFyZW50WzNdIHx8IHBhcmVudFsyXSB8fCBwYXJlbnRbMV0gfHwgcGFyZW50WzBdKVxuICAgICAgJiYgIW5vZGUubGVuZ3RoKSB7XG4gICAgaWYgKHJldGFpbmVyKSByZXRhaW5lcltqXSA9IG5vZGU7XG4gICAgZWxzZSB0aGlzLl9yb290ID0gbm9kZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWxsKGRhdGEpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBkYXRhLmxlbmd0aDsgaSA8IG47ICsraSkgdGhpcy5yZW1vdmUoZGF0YVtpXSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9yb290O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzaXplID0gMDtcbiAgdGhpcy52aXNpdChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmxlbmd0aCkgZG8gKytzaXplOyB3aGlsZSAobm9kZSA9IG5vZGUubmV4dClcbiAgfSk7XG4gIHJldHVybiBzaXplO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgcXVhZHMgPSBbXSwgcSwgbm9kZSA9IHRoaXMuX3Jvb3QsIGNoaWxkLCB4MCwgeTAsIHgxLCB5MTtcbiAgaWYgKG5vZGUpIHF1YWRzLnB1c2gobmV3IFF1YWQobm9kZSwgdGhpcy5feDAsIHRoaXMuX3kwLCB0aGlzLl94MSwgdGhpcy5feTEpKTtcbiAgd2hpbGUgKHEgPSBxdWFkcy5wb3AoKSkge1xuICAgIGlmICghY2FsbGJhY2sobm9kZSA9IHEubm9kZSwgeDAgPSBxLngwLCB5MCA9IHEueTAsIHgxID0gcS54MSwgeTEgPSBxLnkxKSAmJiBub2RlLmxlbmd0aCkge1xuICAgICAgdmFyIHhtID0gKHgwICsgeDEpIC8gMiwgeW0gPSAoeTAgKyB5MSkgLyAyO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVszXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHltLCB4MSwgeTEpKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMl0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5bSwgeG0sIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzFdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeTAsIHgxLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVswXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeDAsIHkwLCB4bSwgeW0pKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQgUXVhZCBmcm9tIFwiLi9xdWFkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBxdWFkcyA9IFtdLCBuZXh0ID0gW10sIHE7XG4gIGlmICh0aGlzLl9yb290KSBxdWFkcy5wdXNoKG5ldyBRdWFkKHRoaXMuX3Jvb3QsIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSk7XG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcbiAgICB2YXIgbm9kZSA9IHEubm9kZTtcbiAgICBpZiAobm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciBjaGlsZCwgeDAgPSBxLngwLCB5MCA9IHEueTAsIHgxID0gcS54MSwgeTEgPSBxLnkxLCB4bSA9ICh4MCArIHgxKSAvIDIsIHltID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMF0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5MCwgeG0sIHltKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzFdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeTAsIHgxLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsyXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeDAsIHltLCB4bSwgeTEpKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbM10pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5bSwgeDEsIHkxKSk7XG4gICAgfVxuICAgIG5leHQucHVzaChxKTtcbiAgfVxuICB3aGlsZSAocSA9IG5leHQucG9wKCkpIHtcbiAgICBjYWxsYmFjayhxLm5vZGUsIHEueDAsIHEueTAsIHEueDEsIHEueTEpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge21hcH0gZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcbmltcG9ydCB7dGltZXJ9IGZyb20gXCJkMy10aW1lclwiO1xuXG5leHBvcnQgZnVuY3Rpb24geChkKSB7XG4gIHJldHVybiBkLng7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KGQpIHtcbiAgcmV0dXJuIGQueTtcbn1cblxudmFyIGluaXRpYWxSYWRpdXMgPSAxMCxcbiAgICBpbml0aWFsQW5nbGUgPSBNYXRoLlBJICogKDMgLSBNYXRoLnNxcnQoNSkpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2Rlcykge1xuICB2YXIgc2ltdWxhdGlvbixcbiAgICAgIGFscGhhID0gMSxcbiAgICAgIGFscGhhTWluID0gMC4wMDEsXG4gICAgICBhbHBoYURlY2F5ID0gMSAtIE1hdGgucG93KGFscGhhTWluLCAxIC8gMzAwKSxcbiAgICAgIGFscGhhVGFyZ2V0ID0gMCxcbiAgICAgIHZlbG9jaXR5RGVjYXkgPSAwLjYsXG4gICAgICBmb3JjZXMgPSBtYXAoKSxcbiAgICAgIHN0ZXBwZXIgPSB0aW1lcihzdGVwKSxcbiAgICAgIGV2ZW50ID0gZGlzcGF0Y2goXCJ0aWNrXCIsIFwiZW5kXCIpO1xuXG4gIGlmIChub2RlcyA9PSBudWxsKSBub2RlcyA9IFtdO1xuXG4gIGZ1bmN0aW9uIHN0ZXAoKSB7XG4gICAgdGljaygpO1xuICAgIGV2ZW50LmNhbGwoXCJ0aWNrXCIsIHNpbXVsYXRpb24pO1xuICAgIGlmIChhbHBoYSA8IGFscGhhTWluKSB7XG4gICAgICBzdGVwcGVyLnN0b3AoKTtcbiAgICAgIGV2ZW50LmNhbGwoXCJlbmRcIiwgc2ltdWxhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGljayhpdGVyYXRpb25zKSB7XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG5cbiAgICBpZiAoaXRlcmF0aW9ucyA9PT0gdW5kZWZpbmVkKSBpdGVyYXRpb25zID0gMTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaXRlcmF0aW9uczsgKytrKSB7XG4gICAgICBhbHBoYSArPSAoYWxwaGFUYXJnZXQgLSBhbHBoYSkgKiBhbHBoYURlY2F5O1xuXG4gICAgICBmb3JjZXMuZWFjaChmdW5jdGlvbiAoZm9yY2UpIHtcbiAgICAgICAgZm9yY2UoYWxwaGEpO1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS5meCA9PSBudWxsKSBub2RlLnggKz0gbm9kZS52eCAqPSB2ZWxvY2l0eURlY2F5O1xuICAgICAgICBlbHNlIG5vZGUueCA9IG5vZGUuZngsIG5vZGUudnggPSAwO1xuICAgICAgICBpZiAobm9kZS5meSA9PSBudWxsKSBub2RlLnkgKz0gbm9kZS52eSAqPSB2ZWxvY2l0eURlY2F5O1xuICAgICAgICBlbHNlIG5vZGUueSA9IG5vZGUuZnksIG5vZGUudnkgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaW11bGF0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZU5vZGVzKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gbm9kZXMubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUuaW5kZXggPSBpO1xuICAgICAgaWYgKG5vZGUuZnggIT0gbnVsbCkgbm9kZS54ID0gbm9kZS5meDtcbiAgICAgIGlmIChub2RlLmZ5ICE9IG51bGwpIG5vZGUueSA9IG5vZGUuZnk7XG4gICAgICBpZiAoaXNOYU4obm9kZS54KSB8fCBpc05hTihub2RlLnkpKSB7XG4gICAgICAgIHZhciByYWRpdXMgPSBpbml0aWFsUmFkaXVzICogTWF0aC5zcXJ0KGkpLCBhbmdsZSA9IGkgKiBpbml0aWFsQW5nbGU7XG4gICAgICAgIG5vZGUueCA9IHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgbm9kZS55ID0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzTmFOKG5vZGUudngpIHx8IGlzTmFOKG5vZGUudnkpKSB7XG4gICAgICAgIG5vZGUudnggPSBub2RlLnZ5ID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplRm9yY2UoZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UuaW5pdGlhbGl6ZSkgZm9yY2UuaW5pdGlhbGl6ZShub2Rlcyk7XG4gICAgcmV0dXJuIGZvcmNlO1xuICB9XG5cbiAgaW5pdGlhbGl6ZU5vZGVzKCk7XG5cbiAgcmV0dXJuIHNpbXVsYXRpb24gPSB7XG4gICAgdGljazogdGljayxcblxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0ZXBwZXIucmVzdGFydChzdGVwKSwgc2ltdWxhdGlvbjtcbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3RlcHBlci5zdG9wKCksIHNpbXVsYXRpb247XG4gICAgfSxcblxuICAgIG5vZGVzOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlcyA9IF8sIGluaXRpYWxpemVOb2RlcygpLCBmb3JjZXMuZWFjaChpbml0aWFsaXplRm9yY2UpLCBzaW11bGF0aW9uKSA6IG5vZGVzO1xuICAgIH0sXG5cbiAgICBhbHBoYTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSArXywgc2ltdWxhdGlvbikgOiBhbHBoYTtcbiAgICB9LFxuXG4gICAgYWxwaGFNaW46IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhTWluID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFNaW47XG4gICAgfSxcblxuICAgIGFscGhhRGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhRGVjYXkgPSArXywgc2ltdWxhdGlvbikgOiArYWxwaGFEZWNheTtcbiAgICB9LFxuXG4gICAgYWxwaGFUYXJnZXQ6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhVGFyZ2V0ID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFUYXJnZXQ7XG4gICAgfSxcblxuICAgIHZlbG9jaXR5RGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZlbG9jaXR5RGVjYXkgPSAxIC0gXywgc2ltdWxhdGlvbikgOiAxIC0gdmVsb2NpdHlEZWNheTtcbiAgICB9LFxuXG4gICAgZm9yY2U6IGZ1bmN0aW9uKG5hbWUsIF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMSA/ICgoXyA9PSBudWxsID8gZm9yY2VzLnJlbW92ZShuYW1lKSA6IGZvcmNlcy5zZXQobmFtZSwgaW5pdGlhbGl6ZUZvcmNlKF8pKSksIHNpbXVsYXRpb24pIDogZm9yY2VzLmdldChuYW1lKTtcbiAgICB9LFxuXG4gICAgZmluZDogZnVuY3Rpb24oeCwgeSwgcmFkaXVzKSB7XG4gICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgICBkeCxcbiAgICAgICAgICBkeSxcbiAgICAgICAgICBkMixcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIGNsb3Nlc3Q7XG5cbiAgICAgIGlmIChyYWRpdXMgPT0gbnVsbCkgcmFkaXVzID0gSW5maW5pdHk7XG4gICAgICBlbHNlIHJhZGl1cyAqPSByYWRpdXM7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBkeCA9IHggLSBub2RlLng7XG4gICAgICAgIGR5ID0geSAtIG5vZGUueTtcbiAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICAgICAgaWYgKGQyIDwgcmFkaXVzKSBjbG9zZXN0ID0gbm9kZSwgcmFkaXVzID0gZDI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbG9zZXN0O1xuICAgIH0sXG5cbiAgICBvbjogZnVuY3Rpb24obmFtZSwgXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gKGV2ZW50Lm9uKG5hbWUsIF8pLCBzaW11bGF0aW9uKSA6IGV2ZW50Lm9uKG5hbWUpO1xuICAgIH1cbiAgfTtcbn1cbiIsIi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWwoMS4yMykgcmV0dXJucyBbXCIxMjNcIiwgMF0uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4ID0gZm9ybWF0RGVjaW1hbChNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwiLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt+XVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLSggXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC5cXGQrKT8ofik/KFthLXolXSk/JC9pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcbiAgdmFyIG1hdGNoO1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XG4gICAgZmlsbDogbWF0Y2hbMV0sXG4gICAgYWxpZ246IG1hdGNoWzJdLFxuICAgIHNpZ246IG1hdGNoWzNdLFxuICAgIHN5bWJvbDogbWF0Y2hbNF0sXG4gICAgemVybzogbWF0Y2hbNV0sXG4gICAgd2lkdGg6IG1hdGNoWzZdLFxuICAgIGNvbW1hOiBtYXRjaFs3XSxcbiAgICBwcmVjaXNpb246IG1hdGNoWzhdICYmIG1hdGNoWzhdLnNsaWNlKDEpLFxuICAgIHRyaW06IG1hdGNoWzldLFxuICAgIHR5cGU6IG1hdGNoWzEwXVxuICB9KTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgdGhpcy5maWxsID0gc3BlY2lmaWVyLmZpbGwgPT09IHVuZGVmaW5lZCA/IFwiIFwiIDogc3BlY2lmaWVyLmZpbGwgKyBcIlwiO1xuICB0aGlzLmFsaWduID0gc3BlY2lmaWVyLmFsaWduID09PSB1bmRlZmluZWQgPyBcIj5cIiA6IHNwZWNpZmllci5hbGlnbiArIFwiXCI7XG4gIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcbiAgdGhpcy5zeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnN5bWJvbCArIFwiXCI7XG4gIHRoaXMuemVybyA9ICEhc3BlY2lmaWVyLnplcm87XG4gIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XG4gIHRoaXMuY29tbWEgPSAhIXNwZWNpZmllci5jb21tYTtcbiAgdGhpcy5wcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLnByZWNpc2lvbjtcbiAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcbiAgdGhpcy50eXBlID0gc3BlY2lmaWVyLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIudHlwZSArIFwiXCI7XG59XG5cbkZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgKyB0aGlzLmFsaWduXG4gICAgICArIHRoaXMuc2lnblxuICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgKyAodGhpcy56ZXJvID8gXCIwXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy53aWR0aCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IE1hdGgubWF4KDEsIHRoaXMud2lkdGggfCAwKSlcbiAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiLlwiICsgTWF0aC5tYXgoMCwgdGhpcy5wcmVjaXNpb24gfCAwKSlcbiAgICAgICsgKHRoaXMudHJpbSA/IFwiflwiIDogXCJcIilcbiAgICAgICsgdGhpcy50eXBlO1xufTtcbiIsIi8vIFRyaW1zIGluc2lnbmlmaWNhbnQgemVyb3MsIGUuZy4sIHJlcGxhY2VzIDEuMjAwMGsgd2l0aCAxLjJrLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocykge1xuICBvdXQ6IGZvciAodmFyIG4gPSBzLmxlbmd0aCwgaSA9IDEsIGkwID0gLTEsIGkxOyBpIDwgbjsgKytpKSB7XG4gICAgc3dpdGNoIChzW2ldKSB7XG4gICAgICBjYXNlIFwiLlwiOiBpMCA9IGkxID0gaTsgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOiBpZiAoaTAgPT09IDApIGkwID0gaTsgaTEgPSBpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IGlmIChpMCA+IDApIHsgaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpMCA9IDA7IH0gYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBpMCA+IDAgPyBzLnNsaWNlKDAsIGkwKSArIHMuc2xpY2UoaTEgKyAxKSA6IHM7XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCB2YXIgcHJlZml4RXhwb25lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsKHgsIHApO1xuICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcbiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgIGV4cG9uZW50ID0gZFsxXSxcbiAgICAgIGkgPSBleHBvbmVudCAtIChwcmVmaXhFeHBvbmVudCA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50IC8gMykpKSAqIDMpICsgMSxcbiAgICAgIG4gPSBjb2VmZmljaWVudC5sZW5ndGg7XG4gIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcbiAgICAgIDogaSA+IG4gPyBjb2VmZmljaWVudCArIG5ldyBBcnJheShpIC0gbiArIDEpLmpvaW4oXCIwXCIpXG4gICAgICA6IGkgPiAwID8gY29lZmZpY2llbnQuc2xpY2UoMCwgaSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGkpXG4gICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciBmb3JtYXQ7XG5leHBvcnQgdmFyIGZvcm1hdFByZWZpeDtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRlY2ltYWw6IFwiLlwiLFxuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXSxcbiAgbWludXM6IFwiLVwiXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgZm9ybWF0UHJlZml4ID0gbG9jYWxlLmZvcm1hdFByZWZpeDtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCJpbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuICh4ICogMTAwKS50b0ZpeGVkKHApOyB9LFxuICBcImJcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKTsgfSxcbiAgXCJjXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyBcIlwiOyB9LFxuICBcImRcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxMCk7IH0sXG4gIFwiZVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRXhwb25lbnRpYWwocCk7IH0sXG4gIFwiZlwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRml4ZWQocCk7IH0sXG4gIFwiZ1wiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvUHJlY2lzaW9uKHApOyB9LFxuICBcIm9cIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KTsgfSxcbiAgXCJwXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCk7IH0sXG4gIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcbiAgXCJYXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH0sXG4gIFwieFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cC5qc1wiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzLmpzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbS5qc1wiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzLmpzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsb2NhbGUpIHtcbiAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcbiAgICAgIGN1cnJlbmN5U3VmZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzFdICsgXCJcIixcbiAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxuICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgIG1pbnVzID0gbG9jYWxlLm1pbnVzID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IGxvY2FsZS5taW51cyArIFwiXCIsXG4gICAgICBuYW4gPSBsb2NhbGUubmFuID09PSB1bmRlZmluZWQgPyBcIk5hTlwiIDogbG9jYWxlLm5hbiArIFwiXCI7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCxcbiAgICAgICAgYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24sXG4gICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCxcbiAgICAgICAgemVybyA9IHNwZWNpZmllci56ZXJvLFxuICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsXG4gICAgICAgIHByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24sXG4gICAgICAgIHRyaW0gPSBzcGVjaWZpZXIudHJpbSxcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gVGhlIFwiXCIgdHlwZSwgYW5kIGFueSBpbnZhbGlkIHR5cGUsIGlzIGFuIGFsaWFzIGZvciBcIi4xMn5nXCIuXG4gICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gSWYgemVybyBmaWxsIGlzIHNwZWNpZmllZCwgcGFkZGluZyBnb2VzIGFmdGVyIHNpZ24gYW5kIGJlZm9yZSBkaWdpdHMuXG4gICAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICB2YXIgcHJlZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5UHJlZml4IDogc3ltYm9sID09PSBcIiNcIiAmJiAvW2JveFhdLy50ZXN0KHR5cGUpID8gXCIwXCIgKyB0eXBlLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lTdWZmaXggOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xuXG4gICAgLy8gV2hhdCBmb3JtYXQgZnVuY3Rpb24gc2hvdWxkIHdlIHVzZT9cbiAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xuICAgIHZhciBmb3JtYXRUeXBlID0gZm9ybWF0VHlwZXNbdHlwZV0sXG4gICAgICAgIG1heWJlU3VmZml4ID0gL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG5vdCBzcGVjaWZpZWQsXG4gICAgLy8gb3IgY2xhbXAgdGhlIHNwZWNpZmllZCBwcmVjaXNpb24gdG8gdGhlIHN1cHBvcnRlZCByYW5nZS5cbiAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgLy8gRm9yIGZpeGVkIHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMCwgMjBdLlxuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gNlxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgICB2YWx1ZSA9IGlzTmFOKHZhbHVlKSA/IG5hbiA6IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cbiAgICAgICAgaWYgKHRyaW0pIHZhbHVlID0gZm9ybWF0VHJpbSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gSWYgYSBuZWdhdGl2ZSB2YWx1ZSByb3VuZHMgdG8gemVybyBkdXJpbmcgZm9ybWF0dGluZywgdHJlYXQgYXMgcG9zaXRpdmUuXG4gICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCkgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgICAgICB2YWx1ZVByZWZpeCA9ICh2YWx1ZU5lZ2F0aXZlID8gKHNpZ24gPT09IFwiKFwiID8gc2lnbiA6IG1pbnVzKSA6IHNpZ24gPT09IFwiLVwiIHx8IHNpZ24gPT09IFwiKFwiID8gXCJcIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7XG5cbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiLy8gQWRkcyBmbG9hdGluZyBwb2ludCBudW1iZXJzIHdpdGggdHdpY2UgdGhlIG5vcm1hbCBwcmVjaXNpb24uXG4vLyBSZWZlcmVuY2U6IEouIFIuIFNoZXdjaHVrLCBBZGFwdGl2ZSBQcmVjaXNpb24gRmxvYXRpbmctUG9pbnQgQXJpdGhtZXRpYyBhbmRcbi8vIEZhc3QgUm9idXN0IEdlb21ldHJpYyBQcmVkaWNhdGVzLCBEaXNjcmV0ZSAmIENvbXB1dGF0aW9uYWwgR2VvbWV0cnkgMTgoMylcbi8vIDMwNeKAkzM2MyAoMTk5NykuXG4vLyBDb2RlIGFkYXB0ZWQgZnJvbSBHZW9ncmFwaGljTGliIGJ5IENoYXJsZXMgRi4gRi4gS2FybmV5LFxuLy8gaHR0cDovL2dlb2dyYXBoaWNsaWIuc291cmNlZm9yZ2UubmV0L1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBBZGRlcjtcbn1cblxuZnVuY3Rpb24gQWRkZXIoKSB7XG4gIHRoaXMucmVzZXQoKTtcbn1cblxuQWRkZXIucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogQWRkZXIsXG4gIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnMgPSAvLyByb3VuZGVkIHZhbHVlXG4gICAgdGhpcy50ID0gMDsgLy8gZXhhY3QgZXJyb3JcbiAgfSxcbiAgYWRkOiBmdW5jdGlvbih5KSB7XG4gICAgYWRkKHRlbXAsIHksIHRoaXMudCk7XG4gICAgYWRkKHRoaXMsIHRlbXAucywgdGhpcy5zKTtcbiAgICBpZiAodGhpcy5zKSB0aGlzLnQgKz0gdGVtcC50O1xuICAgIGVsc2UgdGhpcy5zID0gdGVtcC50O1xuICB9LFxuICB2YWx1ZU9mOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zO1xuICB9XG59O1xuXG52YXIgdGVtcCA9IG5ldyBBZGRlcjtcblxuZnVuY3Rpb24gYWRkKGFkZGVyLCBhLCBiKSB7XG4gIHZhciB4ID0gYWRkZXIucyA9IGEgKyBiLFxuICAgICAgYnYgPSB4IC0gYSxcbiAgICAgIGF2ID0geCAtIGJ2O1xuICBhZGRlci50ID0gKGEgLSBhdikgKyAoYiAtIGJ2KTtcbn1cbiIsImV4cG9ydCB2YXIgZXBzaWxvbiA9IDFlLTY7XG5leHBvcnQgdmFyIGVwc2lsb24yID0gMWUtMTI7XG5leHBvcnQgdmFyIHBpID0gTWF0aC5QSTtcbmV4cG9ydCB2YXIgaGFsZlBpID0gcGkgLyAyO1xuZXhwb3J0IHZhciBxdWFydGVyUGkgPSBwaSAvIDQ7XG5leHBvcnQgdmFyIHRhdSA9IHBpICogMjtcblxuZXhwb3J0IHZhciBkZWdyZWVzID0gMTgwIC8gcGk7XG5leHBvcnQgdmFyIHJhZGlhbnMgPSBwaSAvIDE4MDtcblxuZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFicztcbmV4cG9ydCB2YXIgYXRhbiA9IE1hdGguYXRhbjtcbmV4cG9ydCB2YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xuZXhwb3J0IHZhciBjb3MgPSBNYXRoLmNvcztcbmV4cG9ydCB2YXIgY2VpbCA9IE1hdGguY2VpbDtcbmV4cG9ydCB2YXIgZXhwID0gTWF0aC5leHA7XG5leHBvcnQgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbmV4cG9ydCB2YXIgbG9nID0gTWF0aC5sb2c7XG5leHBvcnQgdmFyIHBvdyA9IE1hdGgucG93O1xuZXhwb3J0IHZhciBzaW4gPSBNYXRoLnNpbjtcbmV4cG9ydCB2YXIgc2lnbiA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbih4KSB7IHJldHVybiB4ID4gMCA/IDEgOiB4IDwgMCA/IC0xIDogMDsgfTtcbmV4cG9ydCB2YXIgc3FydCA9IE1hdGguc3FydDtcbmV4cG9ydCB2YXIgdGFuID0gTWF0aC50YW47XG5cbmV4cG9ydCBmdW5jdGlvbiBhY29zKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gMCA6IHggPCAtMSA/IHBpIDogTWF0aC5hY29zKHgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNpbih4KSB7XG4gIHJldHVybiB4ID4gMSA/IGhhbGZQaSA6IHggPCAtMSA/IC1oYWxmUGkgOiBNYXRoLmFzaW4oeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXZlcnNpbih4KSB7XG4gIHJldHVybiAoeCA9IHNpbih4IC8gMikpICogeDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vb3AoKSB7fVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2F0YW4yLCBjb3MsIHF1YXJ0ZXJQaSwgcmFkaWFucywgc2luLCB0YXV9IGZyb20gXCIuL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuL25vb3BcIjtcbmltcG9ydCBzdHJlYW0gZnJvbSBcIi4vc3RyZWFtXCI7XG5cbmV4cG9ydCB2YXIgYXJlYVJpbmdTdW0gPSBhZGRlcigpO1xuXG52YXIgYXJlYVN1bSA9IGFkZGVyKCksXG4gICAgbGFtYmRhMDAsXG4gICAgcGhpMDAsXG4gICAgbGFtYmRhMCxcbiAgICBjb3NQaGkwLFxuICAgIHNpblBoaTA7XG5cbmV4cG9ydCB2YXIgYXJlYVN0cmVhbSA9IHtcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogbm9vcCxcbiAgbGluZUVuZDogbm9vcCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBhcmVhUmluZ1N1bS5yZXNldCgpO1xuICAgIGFyZWFTdHJlYW0ubGluZVN0YXJ0ID0gYXJlYVJpbmdTdGFydDtcbiAgICBhcmVhU3RyZWFtLmxpbmVFbmQgPSBhcmVhUmluZ0VuZDtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZWFSaW5nID0gK2FyZWFSaW5nU3VtO1xuICAgIGFyZWFTdW0uYWRkKGFyZWFSaW5nIDwgMCA/IHRhdSArIGFyZWFSaW5nIDogYXJlYVJpbmcpO1xuICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5saW5lRW5kID0gdGhpcy5wb2ludCA9IG5vb3A7XG4gIH0sXG4gIHNwaGVyZTogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN1bS5hZGQodGF1KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXJlYVJpbmdTdGFydCgpIHtcbiAgYXJlYVN0cmVhbS5wb2ludCA9IGFyZWFQb2ludEZpcnN0O1xufVxuXG5mdW5jdGlvbiBhcmVhUmluZ0VuZCgpIHtcbiAgYXJlYVBvaW50KGxhbWJkYTAwLCBwaGkwMCk7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludEZpcnN0KGxhbWJkYSwgcGhpKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnQ7XG4gIGxhbWJkYTAwID0gbGFtYmRhLCBwaGkwMCA9IHBoaTtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICBsYW1iZGEwID0gbGFtYmRhLCBjb3NQaGkwID0gY29zKHBoaSA9IHBoaSAvIDIgKyBxdWFydGVyUGkpLCBzaW5QaGkwID0gc2luKHBoaSk7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHBoaSA9IHBoaSAvIDIgKyBxdWFydGVyUGk7IC8vIGhhbGYgdGhlIGFuZ3VsYXIgZGlzdGFuY2UgZnJvbSBzb3V0aCBwb2xlXG5cbiAgLy8gU3BoZXJpY2FsIGV4Y2VzcyBFIGZvciBhIHNwaGVyaWNhbCB0cmlhbmdsZSB3aXRoIHZlcnRpY2VzOiBzb3V0aCBwb2xlLFxuICAvLyBwcmV2aW91cyBwb2ludCwgY3VycmVudCBwb2ludC4gIFVzZXMgYSBmb3JtdWxhIGRlcml2ZWQgZnJvbSBDYWdub2xp4oCZc1xuICAvLyB0aGVvcmVtLiAgU2VlIFRvZGh1bnRlciwgU3BoZXJpY2FsIFRyaWcuICgxODcxKSwgU2VjLiAxMDMsIEVxLiAoMikuXG4gIHZhciBkTGFtYmRhID0gbGFtYmRhIC0gbGFtYmRhMCxcbiAgICAgIHNkTGFtYmRhID0gZExhbWJkYSA+PSAwID8gMSA6IC0xLFxuICAgICAgYWRMYW1iZGEgPSBzZExhbWJkYSAqIGRMYW1iZGEsXG4gICAgICBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIHNpblBoaSA9IHNpbihwaGkpLFxuICAgICAgayA9IHNpblBoaTAgKiBzaW5QaGksXG4gICAgICB1ID0gY29zUGhpMCAqIGNvc1BoaSArIGsgKiBjb3MoYWRMYW1iZGEpLFxuICAgICAgdiA9IGsgKiBzZExhbWJkYSAqIHNpbihhZExhbWJkYSk7XG4gIGFyZWFSaW5nU3VtLmFkZChhdGFuMih2LCB1KSk7XG5cbiAgLy8gQWR2YW5jZSB0aGUgcHJldmlvdXMgcG9pbnRzLlxuICBsYW1iZGEwID0gbGFtYmRhLCBjb3NQaGkwID0gY29zUGhpLCBzaW5QaGkwID0gc2luUGhpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QpIHtcbiAgYXJlYVN1bS5yZXNldCgpO1xuICBzdHJlYW0ob2JqZWN0LCBhcmVhU3RyZWFtKTtcbiAgcmV0dXJuIGFyZWFTdW0gKiAyO1xufVxuIiwiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBzaW4sIHNxcnR9IGZyb20gXCIuL21hdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNwaGVyaWNhbChjYXJ0ZXNpYW4pIHtcbiAgcmV0dXJuIFthdGFuMihjYXJ0ZXNpYW5bMV0sIGNhcnRlc2lhblswXSksIGFzaW4oY2FydGVzaWFuWzJdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW4oc3BoZXJpY2FsKSB7XG4gIHZhciBsYW1iZGEgPSBzcGhlcmljYWxbMF0sIHBoaSA9IHNwaGVyaWNhbFsxXSwgY29zUGhpID0gY29zKHBoaSk7XG4gIHJldHVybiBbY29zUGhpICogY29zKGxhbWJkYSksIGNvc1BoaSAqIHNpbihsYW1iZGEpLCBzaW4ocGhpKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW5Eb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuQ3Jvc3MoYSwgYikge1xuICByZXR1cm4gW2FbMV0gKiBiWzJdIC0gYVsyXSAqIGJbMV0sIGFbMl0gKiBiWzBdIC0gYVswXSAqIGJbMl0sIGFbMF0gKiBiWzFdIC0gYVsxXSAqIGJbMF1dO1xufVxuXG4vLyBUT0RPIHJldHVybiBhXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuQWRkSW5QbGFjZShhLCBiKSB7XG4gIGFbMF0gKz0gYlswXSwgYVsxXSArPSBiWzFdLCBhWzJdICs9IGJbMl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW5TY2FsZSh2ZWN0b3IsIGspIHtcbiAgcmV0dXJuIFt2ZWN0b3JbMF0gKiBrLCB2ZWN0b3JbMV0gKiBrLCB2ZWN0b3JbMl0gKiBrXTtcbn1cblxuLy8gVE9ETyByZXR1cm4gZFxuZXhwb3J0IGZ1bmN0aW9uIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoZCkge1xuICB2YXIgbCA9IHNxcnQoZFswXSAqIGRbMF0gKyBkWzFdICogZFsxXSArIGRbMl0gKiBkWzJdKTtcbiAgZFswXSAvPSBsLCBkWzFdIC89IGwsIGRbMl0gLz0gbDtcbn1cbiIsImltcG9ydCBhZGRlciBmcm9tIFwiLi9hZGRlclwiO1xuaW1wb3J0IHthcmVhU3RyZWFtLCBhcmVhUmluZ1N1bX0gZnJvbSBcIi4vYXJlYVwiO1xuaW1wb3J0IHtjYXJ0ZXNpYW4sIGNhcnRlc2lhbkNyb3NzLCBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlLCBzcGhlcmljYWx9IGZyb20gXCIuL2NhcnRlc2lhblwiO1xuaW1wb3J0IHthYnMsIGRlZ3JlZXMsIGVwc2lsb24sIHJhZGlhbnN9IGZyb20gXCIuL21hdGhcIjtcbmltcG9ydCBzdHJlYW0gZnJvbSBcIi4vc3RyZWFtXCI7XG5cbnZhciBsYW1iZGEwLCBwaGkwLCBsYW1iZGExLCBwaGkxLCAvLyBib3VuZHNcbiAgICBsYW1iZGEyLCAvLyBwcmV2aW91cyBsYW1iZGEtY29vcmRpbmF0ZVxuICAgIGxhbWJkYTAwLCBwaGkwMCwgLy8gZmlyc3QgcG9pbnRcbiAgICBwMCwgLy8gcHJldmlvdXMgM0QgcG9pbnRcbiAgICBkZWx0YVN1bSA9IGFkZGVyKCksXG4gICAgcmFuZ2VzLFxuICAgIHJhbmdlO1xuXG52YXIgYm91bmRzU3RyZWFtID0ge1xuICBwb2ludDogYm91bmRzUG9pbnQsXG4gIGxpbmVTdGFydDogYm91bmRzTGluZVN0YXJ0LFxuICBsaW5lRW5kOiBib3VuZHNMaW5lRW5kLFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGJvdW5kc1N0cmVhbS5wb2ludCA9IGJvdW5kc1JpbmdQb2ludDtcbiAgICBib3VuZHNTdHJlYW0ubGluZVN0YXJ0ID0gYm91bmRzUmluZ1N0YXJ0O1xuICAgIGJvdW5kc1N0cmVhbS5saW5lRW5kID0gYm91bmRzUmluZ0VuZDtcbiAgICBkZWx0YVN1bS5yZXNldCgpO1xuICAgIGFyZWFTdHJlYW0ucG9seWdvblN0YXJ0KCk7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGFyZWFTdHJlYW0ucG9seWdvbkVuZCgpO1xuICAgIGJvdW5kc1N0cmVhbS5wb2ludCA9IGJvdW5kc1BvaW50O1xuICAgIGJvdW5kc1N0cmVhbS5saW5lU3RhcnQgPSBib3VuZHNMaW5lU3RhcnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVFbmQgPSBib3VuZHNMaW5lRW5kO1xuICAgIGlmIChhcmVhUmluZ1N1bSA8IDApIGxhbWJkYTAgPSAtKGxhbWJkYTEgPSAxODApLCBwaGkwID0gLShwaGkxID0gOTApO1xuICAgIGVsc2UgaWYgKGRlbHRhU3VtID4gZXBzaWxvbikgcGhpMSA9IDkwO1xuICAgIGVsc2UgaWYgKGRlbHRhU3VtIDwgLWVwc2lsb24pIHBoaTAgPSAtOTA7XG4gICAgcmFuZ2VbMF0gPSBsYW1iZGEwLCByYW5nZVsxXSA9IGxhbWJkYTE7XG4gIH0sXG4gIHNwaGVyZTogZnVuY3Rpb24oKSB7XG4gICAgbGFtYmRhMCA9IC0obGFtYmRhMSA9IDE4MCksIHBoaTAgPSAtKHBoaTEgPSA5MCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJvdW5kc1BvaW50KGxhbWJkYSwgcGhpKSB7XG4gIHJhbmdlcy5wdXNoKHJhbmdlID0gW2xhbWJkYTAgPSBsYW1iZGEsIGxhbWJkYTEgPSBsYW1iZGFdKTtcbiAgaWYgKHBoaSA8IHBoaTApIHBoaTAgPSBwaGk7XG4gIGlmIChwaGkgPiBwaGkxKSBwaGkxID0gcGhpO1xufVxuXG5mdW5jdGlvbiBsaW5lUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgdmFyIHAgPSBjYXJ0ZXNpYW4oW2xhbWJkYSAqIHJhZGlhbnMsIHBoaSAqIHJhZGlhbnNdKTtcbiAgaWYgKHAwKSB7XG4gICAgdmFyIG5vcm1hbCA9IGNhcnRlc2lhbkNyb3NzKHAwLCBwKSxcbiAgICAgICAgZXF1YXRvcmlhbCA9IFtub3JtYWxbMV0sIC1ub3JtYWxbMF0sIDBdLFxuICAgICAgICBpbmZsZWN0aW9uID0gY2FydGVzaWFuQ3Jvc3MoZXF1YXRvcmlhbCwgbm9ybWFsKTtcbiAgICBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKGluZmxlY3Rpb24pO1xuICAgIGluZmxlY3Rpb24gPSBzcGhlcmljYWwoaW5mbGVjdGlvbik7XG4gICAgdmFyIGRlbHRhID0gbGFtYmRhIC0gbGFtYmRhMixcbiAgICAgICAgc2lnbiA9IGRlbHRhID4gMCA/IDEgOiAtMSxcbiAgICAgICAgbGFtYmRhaSA9IGluZmxlY3Rpb25bMF0gKiBkZWdyZWVzICogc2lnbixcbiAgICAgICAgcGhpaSxcbiAgICAgICAgYW50aW1lcmlkaWFuID0gYWJzKGRlbHRhKSA+IDE4MDtcbiAgICBpZiAoYW50aW1lcmlkaWFuIF4gKHNpZ24gKiBsYW1iZGEyIDwgbGFtYmRhaSAmJiBsYW1iZGFpIDwgc2lnbiAqIGxhbWJkYSkpIHtcbiAgICAgIHBoaWkgPSBpbmZsZWN0aW9uWzFdICogZGVncmVlcztcbiAgICAgIGlmIChwaGlpID4gcGhpMSkgcGhpMSA9IHBoaWk7XG4gICAgfSBlbHNlIGlmIChsYW1iZGFpID0gKGxhbWJkYWkgKyAzNjApICUgMzYwIC0gMTgwLCBhbnRpbWVyaWRpYW4gXiAoc2lnbiAqIGxhbWJkYTIgPCBsYW1iZGFpICYmIGxhbWJkYWkgPCBzaWduICogbGFtYmRhKSkge1xuICAgICAgcGhpaSA9IC1pbmZsZWN0aW9uWzFdICogZGVncmVlcztcbiAgICAgIGlmIChwaGlpIDwgcGhpMCkgcGhpMCA9IHBoaWk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwaGkgPCBwaGkwKSBwaGkwID0gcGhpO1xuICAgICAgaWYgKHBoaSA+IHBoaTEpIHBoaTEgPSBwaGk7XG4gICAgfVxuICAgIGlmIChhbnRpbWVyaWRpYW4pIHtcbiAgICAgIGlmIChsYW1iZGEgPCBsYW1iZGEyKSB7XG4gICAgICAgIGlmIChhbmdsZShsYW1iZGEwLCBsYW1iZGEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTEgPSBsYW1iZGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYW5nbGUobGFtYmRhLCBsYW1iZGExKSA+IGFuZ2xlKGxhbWJkYTAsIGxhbWJkYTEpKSBsYW1iZGEwID0gbGFtYmRhO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobGFtYmRhMSA+PSBsYW1iZGEwKSB7XG4gICAgICAgIGlmIChsYW1iZGEgPCBsYW1iZGEwKSBsYW1iZGEwID0gbGFtYmRhO1xuICAgICAgICBpZiAobGFtYmRhID4gbGFtYmRhMSkgbGFtYmRhMSA9IGxhbWJkYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsYW1iZGEgPiBsYW1iZGEyKSB7XG4gICAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYTAsIGxhbWJkYSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMSA9IGxhbWJkYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoYW5nbGUobGFtYmRhLCBsYW1iZGExKSA+IGFuZ2xlKGxhbWJkYTAsIGxhbWJkYTEpKSBsYW1iZGEwID0gbGFtYmRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJhbmdlcy5wdXNoKHJhbmdlID0gW2xhbWJkYTAgPSBsYW1iZGEsIGxhbWJkYTEgPSBsYW1iZGFdKTtcbiAgfVxuICBpZiAocGhpIDwgcGhpMCkgcGhpMCA9IHBoaTtcbiAgaWYgKHBoaSA+IHBoaTEpIHBoaTEgPSBwaGk7XG4gIHAwID0gcCwgbGFtYmRhMiA9IGxhbWJkYTtcbn1cblxuZnVuY3Rpb24gYm91bmRzTGluZVN0YXJ0KCkge1xuICBib3VuZHNTdHJlYW0ucG9pbnQgPSBsaW5lUG9pbnQ7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc0xpbmVFbmQoKSB7XG4gIHJhbmdlWzBdID0gbGFtYmRhMCwgcmFuZ2VbMV0gPSBsYW1iZGExO1xuICBib3VuZHNTdHJlYW0ucG9pbnQgPSBib3VuZHNQb2ludDtcbiAgcDAgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBib3VuZHNSaW5nUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgaWYgKHAwKSB7XG4gICAgdmFyIGRlbHRhID0gbGFtYmRhIC0gbGFtYmRhMjtcbiAgICBkZWx0YVN1bS5hZGQoYWJzKGRlbHRhKSA+IDE4MCA/IGRlbHRhICsgKGRlbHRhID4gMCA/IDM2MCA6IC0zNjApIDogZGVsdGEpO1xuICB9IGVsc2Uge1xuICAgIGxhbWJkYTAwID0gbGFtYmRhLCBwaGkwMCA9IHBoaTtcbiAgfVxuICBhcmVhU3RyZWFtLnBvaW50KGxhbWJkYSwgcGhpKTtcbiAgbGluZVBvaW50KGxhbWJkYSwgcGhpKTtcbn1cblxuZnVuY3Rpb24gYm91bmRzUmluZ1N0YXJ0KCkge1xuICBhcmVhU3RyZWFtLmxpbmVTdGFydCgpO1xufVxuXG5mdW5jdGlvbiBib3VuZHNSaW5nRW5kKCkge1xuICBib3VuZHNSaW5nUG9pbnQobGFtYmRhMDAsIHBoaTAwKTtcbiAgYXJlYVN0cmVhbS5saW5lRW5kKCk7XG4gIGlmIChhYnMoZGVsdGFTdW0pID4gZXBzaWxvbikgbGFtYmRhMCA9IC0obGFtYmRhMSA9IDE4MCk7XG4gIHJhbmdlWzBdID0gbGFtYmRhMCwgcmFuZ2VbMV0gPSBsYW1iZGExO1xuICBwMCA9IG51bGw7XG59XG5cbi8vIEZpbmRzIHRoZSBsZWZ0LXJpZ2h0IGRpc3RhbmNlIGJldHdlZW4gdHdvIGxvbmdpdHVkZXMuXG4vLyBUaGlzIGlzIGFsbW9zdCB0aGUgc2FtZSBhcyAobGFtYmRhMSAtIGxhbWJkYTAgKyAzNjDCsCkgJSAzNjDCsCwgZXhjZXB0IHRoYXQgd2Ugd2FudFxuLy8gdGhlIGRpc3RhbmNlIGJldHdlZW4gwrExODDCsCB0byBiZSAzNjDCsC5cbmZ1bmN0aW9uIGFuZ2xlKGxhbWJkYTAsIGxhbWJkYTEpIHtcbiAgcmV0dXJuIChsYW1iZGExIC09IGxhbWJkYTApIDwgMCA/IGxhbWJkYTEgKyAzNjAgOiBsYW1iZGExO1xufVxuXG5mdW5jdGlvbiByYW5nZUNvbXBhcmUoYSwgYikge1xuICByZXR1cm4gYVswXSAtIGJbMF07XG59XG5cbmZ1bmN0aW9uIHJhbmdlQ29udGFpbnMocmFuZ2UsIHgpIHtcbiAgcmV0dXJuIHJhbmdlWzBdIDw9IHJhbmdlWzFdID8gcmFuZ2VbMF0gPD0geCAmJiB4IDw9IHJhbmdlWzFdIDogeCA8IHJhbmdlWzBdIHx8IHJhbmdlWzFdIDwgeDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZmVhdHVyZSkge1xuICB2YXIgaSwgbiwgYSwgYiwgbWVyZ2VkLCBkZWx0YU1heCwgZGVsdGE7XG5cbiAgcGhpMSA9IGxhbWJkYTEgPSAtKGxhbWJkYTAgPSBwaGkwID0gSW5maW5pdHkpO1xuICByYW5nZXMgPSBbXTtcbiAgc3RyZWFtKGZlYXR1cmUsIGJvdW5kc1N0cmVhbSk7XG5cbiAgLy8gRmlyc3QsIHNvcnQgcmFuZ2VzIGJ5IHRoZWlyIG1pbmltdW0gbG9uZ2l0dWRlcy5cbiAgaWYgKG4gPSByYW5nZXMubGVuZ3RoKSB7XG4gICAgcmFuZ2VzLnNvcnQocmFuZ2VDb21wYXJlKTtcblxuICAgIC8vIFRoZW4sIG1lcmdlIGFueSByYW5nZXMgdGhhdCBvdmVybGFwLlxuICAgIGZvciAoaSA9IDEsIGEgPSByYW5nZXNbMF0sIG1lcmdlZCA9IFthXTsgaSA8IG47ICsraSkge1xuICAgICAgYiA9IHJhbmdlc1tpXTtcbiAgICAgIGlmIChyYW5nZUNvbnRhaW5zKGEsIGJbMF0pIHx8IHJhbmdlQ29udGFpbnMoYSwgYlsxXSkpIHtcbiAgICAgICAgaWYgKGFuZ2xlKGFbMF0sIGJbMV0pID4gYW5nbGUoYVswXSwgYVsxXSkpIGFbMV0gPSBiWzFdO1xuICAgICAgICBpZiAoYW5nbGUoYlswXSwgYVsxXSkgPiBhbmdsZShhWzBdLCBhWzFdKSkgYVswXSA9IGJbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXJnZWQucHVzaChhID0gYik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmluYWxseSwgZmluZCB0aGUgbGFyZ2VzdCBnYXAgYmV0d2VlbiB0aGUgbWVyZ2VkIHJhbmdlcy5cbiAgICAvLyBUaGUgZmluYWwgYm91bmRpbmcgYm94IHdpbGwgYmUgdGhlIGludmVyc2Ugb2YgdGhpcyBnYXAuXG4gICAgZm9yIChkZWx0YU1heCA9IC1JbmZpbml0eSwgbiA9IG1lcmdlZC5sZW5ndGggLSAxLCBpID0gMCwgYSA9IG1lcmdlZFtuXTsgaSA8PSBuOyBhID0gYiwgKytpKSB7XG4gICAgICBiID0gbWVyZ2VkW2ldO1xuICAgICAgaWYgKChkZWx0YSA9IGFuZ2xlKGFbMV0sIGJbMF0pKSA+IGRlbHRhTWF4KSBkZWx0YU1heCA9IGRlbHRhLCBsYW1iZGEwID0gYlswXSwgbGFtYmRhMSA9IGFbMV07XG4gICAgfVxuICB9XG5cbiAgcmFuZ2VzID0gcmFuZ2UgPSBudWxsO1xuXG4gIHJldHVybiBsYW1iZGEwID09PSBJbmZpbml0eSB8fCBwaGkwID09PSBJbmZpbml0eVxuICAgICAgPyBbW05hTiwgTmFOXSwgW05hTiwgTmFOXV1cbiAgICAgIDogW1tsYW1iZGEwLCBwaGkwXSwgW2xhbWJkYTEsIHBoaTFdXTtcbn1cbiIsImltcG9ydCBjb21wb3NlIGZyb20gXCIuL2NvbXBvc2VcIjtcbmltcG9ydCB7YWJzLCBhc2luLCBhdGFuMiwgY29zLCBkZWdyZWVzLCBwaSwgcmFkaWFucywgc2luLCB0YXV9IGZyb20gXCIuL21hdGhcIjtcblxuZnVuY3Rpb24gcm90YXRpb25JZGVudGl0eShsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2FicyhsYW1iZGEpID4gcGkgPyBsYW1iZGEgKyBNYXRoLnJvdW5kKC1sYW1iZGEgLyB0YXUpICogdGF1IDogbGFtYmRhLCBwaGldO1xufVxuXG5yb3RhdGlvbklkZW50aXR5LmludmVydCA9IHJvdGF0aW9uSWRlbnRpdHk7XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVSYWRpYW5zKGRlbHRhTGFtYmRhLCBkZWx0YVBoaSwgZGVsdGFHYW1tYSkge1xuICByZXR1cm4gKGRlbHRhTGFtYmRhICU9IHRhdSkgPyAoZGVsdGFQaGkgfHwgZGVsdGFHYW1tYSA/IGNvbXBvc2Uocm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpLCByb3RhdGlvblBoaUdhbW1hKGRlbHRhUGhpLCBkZWx0YUdhbW1hKSlcbiAgICA6IHJvdGF0aW9uTGFtYmRhKGRlbHRhTGFtYmRhKSlcbiAgICA6IChkZWx0YVBoaSB8fCBkZWx0YUdhbW1hID8gcm90YXRpb25QaGlHYW1tYShkZWx0YVBoaSwgZGVsdGFHYW1tYSlcbiAgICA6IHJvdGF0aW9uSWRlbnRpdHkpO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGxhbWJkYSwgcGhpKSB7XG4gICAgcmV0dXJuIGxhbWJkYSArPSBkZWx0YUxhbWJkYSwgW2xhbWJkYSA+IHBpID8gbGFtYmRhIC0gdGF1IDogbGFtYmRhIDwgLXBpID8gbGFtYmRhICsgdGF1IDogbGFtYmRhLCBwaGldO1xuICB9O1xufVxuXG5mdW5jdGlvbiByb3RhdGlvbkxhbWJkYShkZWx0YUxhbWJkYSkge1xuICB2YXIgcm90YXRpb24gPSBmb3J3YXJkUm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpO1xuICByb3RhdGlvbi5pbnZlcnQgPSBmb3J3YXJkUm90YXRpb25MYW1iZGEoLWRlbHRhTGFtYmRhKTtcbiAgcmV0dXJuIHJvdGF0aW9uO1xufVxuXG5mdW5jdGlvbiByb3RhdGlvblBoaUdhbW1hKGRlbHRhUGhpLCBkZWx0YUdhbW1hKSB7XG4gIHZhciBjb3NEZWx0YVBoaSA9IGNvcyhkZWx0YVBoaSksXG4gICAgICBzaW5EZWx0YVBoaSA9IHNpbihkZWx0YVBoaSksXG4gICAgICBjb3NEZWx0YUdhbW1hID0gY29zKGRlbHRhR2FtbWEpLFxuICAgICAgc2luRGVsdGFHYW1tYSA9IHNpbihkZWx0YUdhbW1hKTtcblxuICBmdW5jdGlvbiByb3RhdGlvbihsYW1iZGEsIHBoaSkge1xuICAgIHZhciBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgICAgeCA9IGNvcyhsYW1iZGEpICogY29zUGhpLFxuICAgICAgICB5ID0gc2luKGxhbWJkYSkgKiBjb3NQaGksXG4gICAgICAgIHogPSBzaW4ocGhpKSxcbiAgICAgICAgayA9IHogKiBjb3NEZWx0YVBoaSArIHggKiBzaW5EZWx0YVBoaTtcbiAgICByZXR1cm4gW1xuICAgICAgYXRhbjIoeSAqIGNvc0RlbHRhR2FtbWEgLSBrICogc2luRGVsdGFHYW1tYSwgeCAqIGNvc0RlbHRhUGhpIC0geiAqIHNpbkRlbHRhUGhpKSxcbiAgICAgIGFzaW4oayAqIGNvc0RlbHRhR2FtbWEgKyB5ICogc2luRGVsdGFHYW1tYSlcbiAgICBdO1xuICB9XG5cbiAgcm90YXRpb24uaW52ZXJ0ID0gZnVuY3Rpb24obGFtYmRhLCBwaGkpIHtcbiAgICB2YXIgY29zUGhpID0gY29zKHBoaSksXG4gICAgICAgIHggPSBjb3MobGFtYmRhKSAqIGNvc1BoaSxcbiAgICAgICAgeSA9IHNpbihsYW1iZGEpICogY29zUGhpLFxuICAgICAgICB6ID0gc2luKHBoaSksXG4gICAgICAgIGsgPSB6ICogY29zRGVsdGFHYW1tYSAtIHkgKiBzaW5EZWx0YUdhbW1hO1xuICAgIHJldHVybiBbXG4gICAgICBhdGFuMih5ICogY29zRGVsdGFHYW1tYSArIHogKiBzaW5EZWx0YUdhbW1hLCB4ICogY29zRGVsdGFQaGkgKyBrICogc2luRGVsdGFQaGkpLFxuICAgICAgYXNpbihrICogY29zRGVsdGFQaGkgLSB4ICogc2luRGVsdGFQaGkpXG4gICAgXTtcbiAgfTtcblxuICByZXR1cm4gcm90YXRpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJvdGF0ZSkge1xuICByb3RhdGUgPSByb3RhdGVSYWRpYW5zKHJvdGF0ZVswXSAqIHJhZGlhbnMsIHJvdGF0ZVsxXSAqIHJhZGlhbnMsIHJvdGF0ZS5sZW5ndGggPiAyID8gcm90YXRlWzJdICogcmFkaWFucyA6IDApO1xuXG4gIGZ1bmN0aW9uIGZvcndhcmQoY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcyA9IHJvdGF0ZShjb29yZGluYXRlc1swXSAqIHJhZGlhbnMsIGNvb3JkaW5hdGVzWzFdICogcmFkaWFucyk7XG4gICAgcmV0dXJuIGNvb3JkaW5hdGVzWzBdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzWzFdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzO1xuICB9XG5cbiAgZm9yd2FyZC5pbnZlcnQgPSBmdW5jdGlvbihjb29yZGluYXRlcykge1xuICAgIGNvb3JkaW5hdGVzID0gcm90YXRlLmludmVydChjb29yZGluYXRlc1swXSAqIHJhZGlhbnMsIGNvb3JkaW5hdGVzWzFdICogcmFkaWFucyk7XG4gICAgcmV0dXJuIGNvb3JkaW5hdGVzWzBdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzWzFdICo9IGRlZ3JlZXMsIGNvb3JkaW5hdGVzO1xuICB9O1xuXG4gIHJldHVybiBmb3J3YXJkO1xufVxuIiwiaW1wb3J0IHtjYXJ0ZXNpYW4sIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UsIHNwaGVyaWNhbH0gZnJvbSBcIi4vY2FydGVzaWFuXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCB7YWNvcywgY29zLCBkZWdyZWVzLCBlcHNpbG9uLCByYWRpYW5zLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aFwiO1xuaW1wb3J0IHtyb3RhdGVSYWRpYW5zfSBmcm9tIFwiLi9yb3RhdGlvblwiO1xuXG4vLyBHZW5lcmF0ZXMgYSBjaXJjbGUgY2VudGVyZWQgYXQgWzDCsCwgMMKwXSwgd2l0aCBhIGdpdmVuIHJhZGl1cyBhbmQgcHJlY2lzaW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGNpcmNsZVN0cmVhbShzdHJlYW0sIHJhZGl1cywgZGVsdGEsIGRpcmVjdGlvbiwgdDAsIHQxKSB7XG4gIGlmICghZGVsdGEpIHJldHVybjtcbiAgdmFyIGNvc1JhZGl1cyA9IGNvcyhyYWRpdXMpLFxuICAgICAgc2luUmFkaXVzID0gc2luKHJhZGl1cyksXG4gICAgICBzdGVwID0gZGlyZWN0aW9uICogZGVsdGE7XG4gIGlmICh0MCA9PSBudWxsKSB7XG4gICAgdDAgPSByYWRpdXMgKyBkaXJlY3Rpb24gKiB0YXU7XG4gICAgdDEgPSByYWRpdXMgLSBzdGVwIC8gMjtcbiAgfSBlbHNlIHtcbiAgICB0MCA9IGNpcmNsZVJhZGl1cyhjb3NSYWRpdXMsIHQwKTtcbiAgICB0MSA9IGNpcmNsZVJhZGl1cyhjb3NSYWRpdXMsIHQxKTtcbiAgICBpZiAoZGlyZWN0aW9uID4gMCA/IHQwIDwgdDEgOiB0MCA+IHQxKSB0MCArPSBkaXJlY3Rpb24gKiB0YXU7XG4gIH1cbiAgZm9yICh2YXIgcG9pbnQsIHQgPSB0MDsgZGlyZWN0aW9uID4gMCA/IHQgPiB0MSA6IHQgPCB0MTsgdCAtPSBzdGVwKSB7XG4gICAgcG9pbnQgPSBzcGhlcmljYWwoW2Nvc1JhZGl1cywgLXNpblJhZGl1cyAqIGNvcyh0KSwgLXNpblJhZGl1cyAqIHNpbih0KV0pO1xuICAgIHN0cmVhbS5wb2ludChwb2ludFswXSwgcG9pbnRbMV0pO1xuICB9XG59XG5cbi8vIFJldHVybnMgdGhlIHNpZ25lZCBhbmdsZSBvZiBhIGNhcnRlc2lhbiBwb2ludCByZWxhdGl2ZSB0byBbY29zUmFkaXVzLCAwLCAwXS5cbmZ1bmN0aW9uIGNpcmNsZVJhZGl1cyhjb3NSYWRpdXMsIHBvaW50KSB7XG4gIHBvaW50ID0gY2FydGVzaWFuKHBvaW50KSwgcG9pbnRbMF0gLT0gY29zUmFkaXVzO1xuICBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKHBvaW50KTtcbiAgdmFyIHJhZGl1cyA9IGFjb3MoLXBvaW50WzFdKTtcbiAgcmV0dXJuICgoLXBvaW50WzJdIDwgMCA/IC1yYWRpdXMgOiByYWRpdXMpICsgdGF1IC0gZXBzaWxvbikgJSB0YXU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY2VudGVyID0gY29uc3RhbnQoWzAsIDBdKSxcbiAgICAgIHJhZGl1cyA9IGNvbnN0YW50KDkwKSxcbiAgICAgIHByZWNpc2lvbiA9IGNvbnN0YW50KDYpLFxuICAgICAgcmluZyxcbiAgICAgIHJvdGF0ZSxcbiAgICAgIHN0cmVhbSA9IHtwb2ludDogcG9pbnR9O1xuXG4gIGZ1bmN0aW9uIHBvaW50KHgsIHkpIHtcbiAgICByaW5nLnB1c2goeCA9IHJvdGF0ZSh4LCB5KSk7XG4gICAgeFswXSAqPSBkZWdyZWVzLCB4WzFdICo9IGRlZ3JlZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjaXJjbGUoKSB7XG4gICAgdmFyIGMgPSBjZW50ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgciA9IHJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpICogcmFkaWFucyxcbiAgICAgICAgcCA9IHByZWNpc2lvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpICogcmFkaWFucztcbiAgICByaW5nID0gW107XG4gICAgcm90YXRlID0gcm90YXRlUmFkaWFucygtY1swXSAqIHJhZGlhbnMsIC1jWzFdICogcmFkaWFucywgMCkuaW52ZXJ0O1xuICAgIGNpcmNsZVN0cmVhbShzdHJlYW0sIHIsIHAsIDEpO1xuICAgIGMgPSB7dHlwZTogXCJQb2x5Z29uXCIsIGNvb3JkaW5hdGVzOiBbcmluZ119O1xuICAgIHJpbmcgPSByb3RhdGUgPSBudWxsO1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgY2lyY2xlLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjZW50ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFsrX1swXSwgK19bMV1dKSwgY2lyY2xlKSA6IGNlbnRlcjtcbiAgfTtcblxuICBjaXJjbGUucmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBjaXJjbGUpIDogcmFkaXVzO1xuICB9O1xuXG4gIGNpcmNsZS5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJlY2lzaW9uID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGNpcmNsZSkgOiBwcmVjaXNpb247XG4gIH07XG5cbiAgcmV0dXJuIGNpcmNsZTtcbn1cbiIsImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbGluZXMgPSBbXSxcbiAgICAgIGxpbmU7XG4gIHJldHVybiB7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIGxpbmUucHVzaChbeCwgeV0pO1xuICAgIH0sXG4gICAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGxpbmVzLnB1c2gobGluZSA9IFtdKTtcbiAgICB9LFxuICAgIGxpbmVFbmQ6IG5vb3AsXG4gICAgcmVqb2luOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAxKSBsaW5lcy5wdXNoKGxpbmVzLnBvcCgpLmNvbmNhdChsaW5lcy5zaGlmdCgpKSk7XG4gICAgfSxcbiAgICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxpbmVzO1xuICAgICAgbGluZXMgPSBbXTtcbiAgICAgIGxpbmUgPSBudWxsO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQge2FicywgZXBzaWxvbn0gZnJvbSBcIi4vbWF0aFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhYnMoYVswXSAtIGJbMF0pIDwgZXBzaWxvbiAmJiBhYnMoYVsxXSAtIGJbMV0pIDwgZXBzaWxvbjtcbn1cbiIsImltcG9ydCBwb2ludEVxdWFsIGZyb20gXCIuLi9wb2ludEVxdWFsXCI7XG5cbmZ1bmN0aW9uIEludGVyc2VjdGlvbihwb2ludCwgcG9pbnRzLCBvdGhlciwgZW50cnkpIHtcbiAgdGhpcy54ID0gcG9pbnQ7XG4gIHRoaXMueiA9IHBvaW50cztcbiAgdGhpcy5vID0gb3RoZXI7IC8vIGFub3RoZXIgaW50ZXJzZWN0aW9uXG4gIHRoaXMuZSA9IGVudHJ5OyAvLyBpcyBhbiBlbnRyeT9cbiAgdGhpcy52ID0gZmFsc2U7IC8vIHZpc2l0ZWRcbiAgdGhpcy5uID0gdGhpcy5wID0gbnVsbDsgLy8gbmV4dCAmIHByZXZpb3VzXG59XG5cbi8vIEEgZ2VuZXJhbGl6ZWQgcG9seWdvbiBjbGlwcGluZyBhbGdvcml0aG06IGdpdmVuIGEgcG9seWdvbiB0aGF0IGhhcyBiZWVuIGN1dFxuLy8gaW50byBpdHMgdmlzaWJsZSBsaW5lIHNlZ21lbnRzLCBhbmQgcmVqb2lucyB0aGUgc2VnbWVudHMgYnkgaW50ZXJwb2xhdGluZ1xuLy8gYWxvbmcgdGhlIGNsaXAgZWRnZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlZ21lbnRzLCBjb21wYXJlSW50ZXJzZWN0aW9uLCBzdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIHN0cmVhbSkge1xuICB2YXIgc3ViamVjdCA9IFtdLFxuICAgICAgY2xpcCA9IFtdLFxuICAgICAgaSxcbiAgICAgIG47XG5cbiAgc2VnbWVudHMuZm9yRWFjaChmdW5jdGlvbihzZWdtZW50KSB7XG4gICAgaWYgKChuID0gc2VnbWVudC5sZW5ndGggLSAxKSA8PSAwKSByZXR1cm47XG4gICAgdmFyIG4sIHAwID0gc2VnbWVudFswXSwgcDEgPSBzZWdtZW50W25dLCB4O1xuXG4gICAgLy8gSWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50cyBvZiBhIHNlZ21lbnQgYXJlIGNvaW5jaWRlbnQsIHRoZW4gdHJlYXQgYXMgYVxuICAgIC8vIGNsb3NlZCByaW5nLiBUT0RPIGlmIGFsbCByaW5ncyBhcmUgY2xvc2VkLCB0aGVuIHRoZSB3aW5kaW5nIG9yZGVyIG9mIHRoZVxuICAgIC8vIGV4dGVyaW9yIHJpbmcgc2hvdWxkIGJlIGNoZWNrZWQuXG4gICAgaWYgKHBvaW50RXF1YWwocDAsIHAxKSkge1xuICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgc3RyZWFtLnBvaW50KChwMCA9IHNlZ21lbnRbaV0pWzBdLCBwMFsxXSk7XG4gICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1YmplY3QucHVzaCh4ID0gbmV3IEludGVyc2VjdGlvbihwMCwgc2VnbWVudCwgbnVsbCwgdHJ1ZSkpO1xuICAgIGNsaXAucHVzaCh4Lm8gPSBuZXcgSW50ZXJzZWN0aW9uKHAwLCBudWxsLCB4LCBmYWxzZSkpO1xuICAgIHN1YmplY3QucHVzaCh4ID0gbmV3IEludGVyc2VjdGlvbihwMSwgc2VnbWVudCwgbnVsbCwgZmFsc2UpKTtcbiAgICBjbGlwLnB1c2goeC5vID0gbmV3IEludGVyc2VjdGlvbihwMSwgbnVsbCwgeCwgdHJ1ZSkpO1xuICB9KTtcblxuICBpZiAoIXN1YmplY3QubGVuZ3RoKSByZXR1cm47XG5cbiAgY2xpcC5zb3J0KGNvbXBhcmVJbnRlcnNlY3Rpb24pO1xuICBsaW5rKHN1YmplY3QpO1xuICBsaW5rKGNsaXApO1xuXG4gIGZvciAoaSA9IDAsIG4gPSBjbGlwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGNsaXBbaV0uZSA9IHN0YXJ0SW5zaWRlID0gIXN0YXJ0SW5zaWRlO1xuICB9XG5cbiAgdmFyIHN0YXJ0ID0gc3ViamVjdFswXSxcbiAgICAgIHBvaW50cyxcbiAgICAgIHBvaW50O1xuXG4gIHdoaWxlICgxKSB7XG4gICAgLy8gRmluZCBmaXJzdCB1bnZpc2l0ZWQgaW50ZXJzZWN0aW9uLlxuICAgIHZhciBjdXJyZW50ID0gc3RhcnQsXG4gICAgICAgIGlzU3ViamVjdCA9IHRydWU7XG4gICAgd2hpbGUgKGN1cnJlbnQudikgaWYgKChjdXJyZW50ID0gY3VycmVudC5uKSA9PT0gc3RhcnQpIHJldHVybjtcbiAgICBwb2ludHMgPSBjdXJyZW50Lno7XG4gICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgIGRvIHtcbiAgICAgIGN1cnJlbnQudiA9IGN1cnJlbnQuby52ID0gdHJ1ZTtcbiAgICAgIGlmIChjdXJyZW50LmUpIHtcbiAgICAgICAgaWYgKGlzU3ViamVjdCkge1xuICAgICAgICAgIGZvciAoaSA9IDAsIG4gPSBwb2ludHMubGVuZ3RoOyBpIDwgbjsgKytpKSBzdHJlYW0ucG9pbnQoKHBvaW50ID0gcG9pbnRzW2ldKVswXSwgcG9pbnRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGludGVycG9sYXRlKGN1cnJlbnQueCwgY3VycmVudC5uLngsIDEsIHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1N1YmplY3QpIHtcbiAgICAgICAgICBwb2ludHMgPSBjdXJyZW50LnAuejtcbiAgICAgICAgICBmb3IgKGkgPSBwb2ludHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHN0cmVhbS5wb2ludCgocG9pbnQgPSBwb2ludHNbaV0pWzBdLCBwb2ludFsxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW50ZXJwb2xhdGUoY3VycmVudC54LCBjdXJyZW50LnAueCwgLTEsIHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucDtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm87XG4gICAgICBwb2ludHMgPSBjdXJyZW50Lno7XG4gICAgICBpc1N1YmplY3QgPSAhaXNTdWJqZWN0O1xuICAgIH0gd2hpbGUgKCFjdXJyZW50LnYpO1xuICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluayhhcnJheSkge1xuICBpZiAoIShuID0gYXJyYXkubGVuZ3RoKSkgcmV0dXJuO1xuICB2YXIgbixcbiAgICAgIGkgPSAwLFxuICAgICAgYSA9IGFycmF5WzBdLFxuICAgICAgYjtcbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBhLm4gPSBiID0gYXJyYXlbaV07XG4gICAgYi5wID0gYTtcbiAgICBhID0gYjtcbiAgfVxuICBhLm4gPSBiID0gYXJyYXlbMF07XG4gIGIucCA9IGE7XG59XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4vYWRkZXJcIjtcbmltcG9ydCB7Y2FydGVzaWFuLCBjYXJ0ZXNpYW5Dcm9zcywgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZX0gZnJvbSBcIi4vY2FydGVzaWFuXCI7XG5pbXBvcnQge2FicywgYXNpbiwgYXRhbjIsIGNvcywgZXBzaWxvbiwgaGFsZlBpLCBwaSwgcXVhcnRlclBpLCBzaWduLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aFwiO1xuXG52YXIgc3VtID0gYWRkZXIoKTtcblxuZnVuY3Rpb24gbG9uZ2l0dWRlKHBvaW50KSB7XG4gIGlmIChhYnMocG9pbnRbMF0pIDw9IHBpKVxuICAgIHJldHVybiBwb2ludFswXTtcbiAgZWxzZVxuICAgIHJldHVybiBzaWduKHBvaW50WzBdKSAqICgoYWJzKHBvaW50WzBdKSArIHBpKSAlIHRhdSAtIHBpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocG9seWdvbiwgcG9pbnQpIHtcbiAgdmFyIGxhbWJkYSA9IGxvbmdpdHVkZShwb2ludCksXG4gICAgICBwaGkgPSBwb2ludFsxXSxcbiAgICAgIHNpblBoaSA9IHNpbihwaGkpLFxuICAgICAgbm9ybWFsID0gW3NpbihsYW1iZGEpLCAtY29zKGxhbWJkYSksIDBdLFxuICAgICAgYW5nbGUgPSAwLFxuICAgICAgd2luZGluZyA9IDA7XG5cbiAgc3VtLnJlc2V0KCk7XG5cbiAgaWYgKHNpblBoaSA9PT0gMSkgcGhpID0gaGFsZlBpICsgZXBzaWxvbjtcbiAgZWxzZSBpZiAoc2luUGhpID09PSAtMSkgcGhpID0gLWhhbGZQaSAtIGVwc2lsb247XG5cbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBwb2x5Z29uLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKG0gPSAocmluZyA9IHBvbHlnb25baV0pLmxlbmd0aCkpIGNvbnRpbnVlO1xuICAgIHZhciByaW5nLFxuICAgICAgICBtLFxuICAgICAgICBwb2ludDAgPSByaW5nW20gLSAxXSxcbiAgICAgICAgbGFtYmRhMCA9IGxvbmdpdHVkZShwb2ludDApLFxuICAgICAgICBwaGkwID0gcG9pbnQwWzFdIC8gMiArIHF1YXJ0ZXJQaSxcbiAgICAgICAgc2luUGhpMCA9IHNpbihwaGkwKSxcbiAgICAgICAgY29zUGhpMCA9IGNvcyhwaGkwKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgKytqLCBsYW1iZGEwID0gbGFtYmRhMSwgc2luUGhpMCA9IHNpblBoaTEsIGNvc1BoaTAgPSBjb3NQaGkxLCBwb2ludDAgPSBwb2ludDEpIHtcbiAgICAgIHZhciBwb2ludDEgPSByaW5nW2pdLFxuICAgICAgICAgIGxhbWJkYTEgPSBsb25naXR1ZGUocG9pbnQxKSxcbiAgICAgICAgICBwaGkxID0gcG9pbnQxWzFdIC8gMiArIHF1YXJ0ZXJQaSxcbiAgICAgICAgICBzaW5QaGkxID0gc2luKHBoaTEpLFxuICAgICAgICAgIGNvc1BoaTEgPSBjb3MocGhpMSksXG4gICAgICAgICAgZGVsdGEgPSBsYW1iZGExIC0gbGFtYmRhMCxcbiAgICAgICAgICBzaWduID0gZGVsdGEgPj0gMCA/IDEgOiAtMSxcbiAgICAgICAgICBhYnNEZWx0YSA9IHNpZ24gKiBkZWx0YSxcbiAgICAgICAgICBhbnRpbWVyaWRpYW4gPSBhYnNEZWx0YSA+IHBpLFxuICAgICAgICAgIGsgPSBzaW5QaGkwICogc2luUGhpMTtcblxuICAgICAgc3VtLmFkZChhdGFuMihrICogc2lnbiAqIHNpbihhYnNEZWx0YSksIGNvc1BoaTAgKiBjb3NQaGkxICsgayAqIGNvcyhhYnNEZWx0YSkpKTtcbiAgICAgIGFuZ2xlICs9IGFudGltZXJpZGlhbiA/IGRlbHRhICsgc2lnbiAqIHRhdSA6IGRlbHRhO1xuXG4gICAgICAvLyBBcmUgdGhlIGxvbmdpdHVkZXMgZWl0aGVyIHNpZGUgb2YgdGhlIHBvaW504oCZcyBtZXJpZGlhbiAobGFtYmRhKSxcbiAgICAgIC8vIGFuZCBhcmUgdGhlIGxhdGl0dWRlcyBzbWFsbGVyIHRoYW4gdGhlIHBhcmFsbGVsIChwaGkpP1xuICAgICAgaWYgKGFudGltZXJpZGlhbiBeIGxhbWJkYTAgPj0gbGFtYmRhIF4gbGFtYmRhMSA+PSBsYW1iZGEpIHtcbiAgICAgICAgdmFyIGFyYyA9IGNhcnRlc2lhbkNyb3NzKGNhcnRlc2lhbihwb2ludDApLCBjYXJ0ZXNpYW4ocG9pbnQxKSk7XG4gICAgICAgIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoYXJjKTtcbiAgICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGNhcnRlc2lhbkNyb3NzKG5vcm1hbCwgYXJjKTtcbiAgICAgICAgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShpbnRlcnNlY3Rpb24pO1xuICAgICAgICB2YXIgcGhpQXJjID0gKGFudGltZXJpZGlhbiBeIGRlbHRhID49IDAgPyAtMSA6IDEpICogYXNpbihpbnRlcnNlY3Rpb25bMl0pO1xuICAgICAgICBpZiAocGhpID4gcGhpQXJjIHx8IHBoaSA9PT0gcGhpQXJjICYmIChhcmNbMF0gfHwgYXJjWzFdKSkge1xuICAgICAgICAgIHdpbmRpbmcgKz0gYW50aW1lcmlkaWFuIF4gZGVsdGEgPj0gMCA/IDEgOiAtMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpcnN0LCBkZXRlcm1pbmUgd2hldGhlciB0aGUgU291dGggcG9sZSBpcyBpbnNpZGUgb3Igb3V0c2lkZTpcbiAgLy9cbiAgLy8gSXQgaXMgaW5zaWRlIGlmOlxuICAvLyAqIHRoZSBwb2x5Z29uIHdpbmRzIGFyb3VuZCBpdCBpbiBhIGNsb2Nrd2lzZSBkaXJlY3Rpb24uXG4gIC8vICogdGhlIHBvbHlnb24gZG9lcyBub3QgKGN1bXVsYXRpdmVseSkgd2luZCBhcm91bmQgaXQsIGJ1dCBoYXMgYSBuZWdhdGl2ZVxuICAvLyAgIChjb3VudGVyLWNsb2Nrd2lzZSkgYXJlYS5cbiAgLy9cbiAgLy8gU2Vjb25kLCBjb3VudCB0aGUgKHNpZ25lZCkgbnVtYmVyIG9mIHRpbWVzIGEgc2VnbWVudCBjcm9zc2VzIGEgbGFtYmRhXG4gIC8vIGZyb20gdGhlIHBvaW50IHRvIHRoZSBTb3V0aCBwb2xlLiAgSWYgaXQgaXMgemVybywgdGhlbiB0aGUgcG9pbnQgaXMgdGhlXG4gIC8vIHNhbWUgc2lkZSBhcyB0aGUgU291dGggcG9sZS5cblxuICByZXR1cm4gKGFuZ2xlIDwgLWVwc2lsb24gfHwgYW5nbGUgPCBlcHNpbG9uICYmIHN1bSA8IC1lcHNpbG9uKSBeICh3aW5kaW5nICYgMSk7XG59XG4iLCJpbXBvcnQgY2xpcEJ1ZmZlciBmcm9tIFwiLi9idWZmZXJcIjtcbmltcG9ydCBjbGlwUmVqb2luIGZyb20gXCIuL3Jlam9pblwiO1xuaW1wb3J0IHtlcHNpbG9uLCBoYWxmUGl9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQgcG9seWdvbkNvbnRhaW5zIGZyb20gXCIuLi9wb2x5Z29uQ29udGFpbnNcIjtcbmltcG9ydCB7bWVyZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2ludFZpc2libGUsIGNsaXBMaW5lLCBpbnRlcnBvbGF0ZSwgc3RhcnQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHNpbmspIHtcbiAgICB2YXIgbGluZSA9IGNsaXBMaW5lKHNpbmspLFxuICAgICAgICByaW5nQnVmZmVyID0gY2xpcEJ1ZmZlcigpLFxuICAgICAgICByaW5nU2luayA9IGNsaXBMaW5lKHJpbmdCdWZmZXIpLFxuICAgICAgICBwb2x5Z29uU3RhcnRlZCA9IGZhbHNlLFxuICAgICAgICBwb2x5Z29uLFxuICAgICAgICBzZWdtZW50cyxcbiAgICAgICAgcmluZztcblxuICAgIHZhciBjbGlwID0ge1xuICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICBsaW5lRW5kOiBsaW5lRW5kLFxuICAgICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgY2xpcC5wb2ludCA9IHBvaW50UmluZztcbiAgICAgICAgY2xpcC5saW5lU3RhcnQgPSByaW5nU3RhcnQ7XG4gICAgICAgIGNsaXAubGluZUVuZCA9IHJpbmdFbmQ7XG4gICAgICAgIHNlZ21lbnRzID0gW107XG4gICAgICAgIHBvbHlnb24gPSBbXTtcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgY2xpcC5wb2ludCA9IHBvaW50O1xuICAgICAgICBjbGlwLmxpbmVTdGFydCA9IGxpbmVTdGFydDtcbiAgICAgICAgY2xpcC5saW5lRW5kID0gbGluZUVuZDtcbiAgICAgICAgc2VnbWVudHMgPSBtZXJnZShzZWdtZW50cyk7XG4gICAgICAgIHZhciBzdGFydEluc2lkZSA9IHBvbHlnb25Db250YWlucyhwb2x5Z29uLCBzdGFydCk7XG4gICAgICAgIGlmIChzZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoIXBvbHlnb25TdGFydGVkKSBzaW5rLnBvbHlnb25TdGFydCgpLCBwb2x5Z29uU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgY2xpcFJlam9pbihzZWdtZW50cywgY29tcGFyZUludGVyc2VjdGlvbiwgc3RhcnRJbnNpZGUsIGludGVycG9sYXRlLCBzaW5rKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydEluc2lkZSkge1xuICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIHNpbmsucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICBzaW5rLmxpbmVTdGFydCgpO1xuICAgICAgICAgIGludGVycG9sYXRlKG51bGwsIG51bGwsIDEsIHNpbmspO1xuICAgICAgICAgIHNpbmsubGluZUVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb2x5Z29uU3RhcnRlZCkgc2luay5wb2x5Z29uRW5kKCksIHBvbHlnb25TdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHNlZ21lbnRzID0gcG9seWdvbiA9IG51bGw7XG4gICAgICB9LFxuICAgICAgc3BoZXJlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgc2luay5wb2x5Z29uU3RhcnQoKTtcbiAgICAgICAgc2luay5saW5lU3RhcnQoKTtcbiAgICAgICAgaW50ZXJwb2xhdGUobnVsbCwgbnVsbCwgMSwgc2luayk7XG4gICAgICAgIHNpbmsubGluZUVuZCgpO1xuICAgICAgICBzaW5rLnBvbHlnb25FbmQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgICAgIGlmIChwb2ludFZpc2libGUobGFtYmRhLCBwaGkpKSBzaW5rLnBvaW50KGxhbWJkYSwgcGhpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2ludExpbmUobGFtYmRhLCBwaGkpIHtcbiAgICAgIGxpbmUucG9pbnQobGFtYmRhLCBwaGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVTdGFydCgpIHtcbiAgICAgIGNsaXAucG9pbnQgPSBwb2ludExpbmU7XG4gICAgICBsaW5lLmxpbmVTdGFydCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVFbmQoKSB7XG4gICAgICBjbGlwLnBvaW50ID0gcG9pbnQ7XG4gICAgICBsaW5lLmxpbmVFbmQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2ludFJpbmcobGFtYmRhLCBwaGkpIHtcbiAgICAgIHJpbmcucHVzaChbbGFtYmRhLCBwaGldKTtcbiAgICAgIHJpbmdTaW5rLnBvaW50KGxhbWJkYSwgcGhpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaW5nU3RhcnQoKSB7XG4gICAgICByaW5nU2luay5saW5lU3RhcnQoKTtcbiAgICAgIHJpbmcgPSBbXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaW5nRW5kKCkge1xuICAgICAgcG9pbnRSaW5nKHJpbmdbMF1bMF0sIHJpbmdbMF1bMV0pO1xuICAgICAgcmluZ1NpbmsubGluZUVuZCgpO1xuXG4gICAgICB2YXIgY2xlYW4gPSByaW5nU2luay5jbGVhbigpLFxuICAgICAgICAgIHJpbmdTZWdtZW50cyA9IHJpbmdCdWZmZXIucmVzdWx0KCksXG4gICAgICAgICAgaSwgbiA9IHJpbmdTZWdtZW50cy5sZW5ndGgsIG0sXG4gICAgICAgICAgc2VnbWVudCxcbiAgICAgICAgICBwb2ludDtcblxuICAgICAgcmluZy5wb3AoKTtcbiAgICAgIHBvbHlnb24ucHVzaChyaW5nKTtcbiAgICAgIHJpbmcgPSBudWxsO1xuXG4gICAgICBpZiAoIW4pIHJldHVybjtcblxuICAgICAgLy8gTm8gaW50ZXJzZWN0aW9ucy5cbiAgICAgIGlmIChjbGVhbiAmIDEpIHtcbiAgICAgICAgc2VnbWVudCA9IHJpbmdTZWdtZW50c1swXTtcbiAgICAgICAgaWYgKChtID0gc2VnbWVudC5sZW5ndGggLSAxKSA+IDApIHtcbiAgICAgICAgICBpZiAoIXBvbHlnb25TdGFydGVkKSBzaW5rLnBvbHlnb25TdGFydCgpLCBwb2x5Z29uU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgc2luay5saW5lU3RhcnQoKTtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgKytpKSBzaW5rLnBvaW50KChwb2ludCA9IHNlZ21lbnRbaV0pWzBdLCBwb2ludFsxXSk7XG4gICAgICAgICAgc2luay5saW5lRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWpvaW4gY29ubmVjdGVkIHNlZ21lbnRzLlxuICAgICAgLy8gVE9ETyByZXVzZSByaW5nQnVmZmVyLnJlam9pbigpP1xuICAgICAgaWYgKG4gPiAxICYmIGNsZWFuICYgMikgcmluZ1NlZ21lbnRzLnB1c2gocmluZ1NlZ21lbnRzLnBvcCgpLmNvbmNhdChyaW5nU2VnbWVudHMuc2hpZnQoKSkpO1xuXG4gICAgICBzZWdtZW50cy5wdXNoKHJpbmdTZWdtZW50cy5maWx0ZXIodmFsaWRTZWdtZW50KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaXA7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHZhbGlkU2VnbWVudChzZWdtZW50KSB7XG4gIHJldHVybiBzZWdtZW50Lmxlbmd0aCA+IDE7XG59XG5cbi8vIEludGVyc2VjdGlvbnMgYXJlIHNvcnRlZCBhbG9uZyB0aGUgY2xpcCBlZGdlLiBGb3IgYm90aCBhbnRpbWVyaWRpYW4gY3V0dGluZ1xuLy8gYW5kIGNpcmNsZSBjbGlwcGluZywgdGhlIHNhbWUgY29tcGFyaXNvbiBpcyB1c2VkLlxuZnVuY3Rpb24gY29tcGFyZUludGVyc2VjdGlvbihhLCBiKSB7XG4gIHJldHVybiAoKGEgPSBhLngpWzBdIDwgMCA/IGFbMV0gLSBoYWxmUGkgLSBlcHNpbG9uIDogaGFsZlBpIC0gYVsxXSlcbiAgICAgICAtICgoYiA9IGIueClbMF0gPCAwID8gYlsxXSAtIGhhbGZQaSAtIGVwc2lsb24gOiBoYWxmUGkgLSBiWzFdKTtcbn1cbiIsImltcG9ydCBjbGlwIGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQge2FicywgYXRhbiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIHBpLCBzaW59IGZyb20gXCIuLi9tYXRoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsaXAoXG4gIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgY2xpcEFudGltZXJpZGlhbkxpbmUsXG4gIGNsaXBBbnRpbWVyaWRpYW5JbnRlcnBvbGF0ZSxcbiAgWy1waSwgLWhhbGZQaV1cbik7XG5cbi8vIFRha2VzIGEgbGluZSBhbmQgY3V0cyBpbnRvIHZpc2libGUgc2VnbWVudHMuIFJldHVybiB2YWx1ZXM6IDAgLSB0aGVyZSB3ZXJlXG4vLyBpbnRlcnNlY3Rpb25zIG9yIHRoZSBsaW5lIHdhcyBlbXB0eTsgMSAtIG5vIGludGVyc2VjdGlvbnM7IDIgLSB0aGVyZSB3ZXJlXG4vLyBpbnRlcnNlY3Rpb25zLCBhbmQgdGhlIGZpcnN0IGFuZCBsYXN0IHNlZ21lbnRzIHNob3VsZCBiZSByZWpvaW5lZC5cbmZ1bmN0aW9uIGNsaXBBbnRpbWVyaWRpYW5MaW5lKHN0cmVhbSkge1xuICB2YXIgbGFtYmRhMCA9IE5hTixcbiAgICAgIHBoaTAgPSBOYU4sXG4gICAgICBzaWduMCA9IE5hTixcbiAgICAgIGNsZWFuOyAvLyBubyBpbnRlcnNlY3Rpb25zXG5cbiAgcmV0dXJuIHtcbiAgICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgY2xlYW4gPSAxO1xuICAgIH0sXG4gICAgcG9pbnQ6IGZ1bmN0aW9uKGxhbWJkYTEsIHBoaTEpIHtcbiAgICAgIHZhciBzaWduMSA9IGxhbWJkYTEgPiAwID8gcGkgOiAtcGksXG4gICAgICAgICAgZGVsdGEgPSBhYnMobGFtYmRhMSAtIGxhbWJkYTApO1xuICAgICAgaWYgKGFicyhkZWx0YSAtIHBpKSA8IGVwc2lsb24pIHsgLy8gbGluZSBjcm9zc2VzIGEgcG9sZVxuICAgICAgICBzdHJlYW0ucG9pbnQobGFtYmRhMCwgcGhpMCA9IChwaGkwICsgcGhpMSkgLyAyID4gMCA/IGhhbGZQaSA6IC1oYWxmUGkpO1xuICAgICAgICBzdHJlYW0ucG9pbnQoc2lnbjAsIHBoaTApO1xuICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgIHN0cmVhbS5wb2ludChzaWduMSwgcGhpMCk7XG4gICAgICAgIHN0cmVhbS5wb2ludChsYW1iZGExLCBwaGkwKTtcbiAgICAgICAgY2xlYW4gPSAwO1xuICAgICAgfSBlbHNlIGlmIChzaWduMCAhPT0gc2lnbjEgJiYgZGVsdGEgPj0gcGkpIHsgLy8gbGluZSBjcm9zc2VzIGFudGltZXJpZGlhblxuICAgICAgICBpZiAoYWJzKGxhbWJkYTAgLSBzaWduMCkgPCBlcHNpbG9uKSBsYW1iZGEwIC09IHNpZ24wICogZXBzaWxvbjsgLy8gaGFuZGxlIGRlZ2VuZXJhY2llc1xuICAgICAgICBpZiAoYWJzKGxhbWJkYTEgLSBzaWduMSkgPCBlcHNpbG9uKSBsYW1iZGExIC09IHNpZ24xICogZXBzaWxvbjtcbiAgICAgICAgcGhpMCA9IGNsaXBBbnRpbWVyaWRpYW5JbnRlcnNlY3QobGFtYmRhMCwgcGhpMCwgbGFtYmRhMSwgcGhpMSk7XG4gICAgICAgIHN0cmVhbS5wb2ludChzaWduMCwgcGhpMCk7XG4gICAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KHNpZ24xLCBwaGkwKTtcbiAgICAgICAgY2xlYW4gPSAwO1xuICAgICAgfVxuICAgICAgc3RyZWFtLnBvaW50KGxhbWJkYTAgPSBsYW1iZGExLCBwaGkwID0gcGhpMSk7XG4gICAgICBzaWduMCA9IHNpZ24xO1xuICAgIH0sXG4gICAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgbGFtYmRhMCA9IHBoaTAgPSBOYU47XG4gICAgfSxcbiAgICBjbGVhbjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gMiAtIGNsZWFuOyAvLyBpZiBpbnRlcnNlY3Rpb25zLCByZWpvaW4gZmlyc3QgYW5kIGxhc3Qgc2VnbWVudHNcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsaXBBbnRpbWVyaWRpYW5JbnRlcnNlY3QobGFtYmRhMCwgcGhpMCwgbGFtYmRhMSwgcGhpMSkge1xuICB2YXIgY29zUGhpMCxcbiAgICAgIGNvc1BoaTEsXG4gICAgICBzaW5MYW1iZGEwTGFtYmRhMSA9IHNpbihsYW1iZGEwIC0gbGFtYmRhMSk7XG4gIHJldHVybiBhYnMoc2luTGFtYmRhMExhbWJkYTEpID4gZXBzaWxvblxuICAgICAgPyBhdGFuKChzaW4ocGhpMCkgKiAoY29zUGhpMSA9IGNvcyhwaGkxKSkgKiBzaW4obGFtYmRhMSlcbiAgICAgICAgICAtIHNpbihwaGkxKSAqIChjb3NQaGkwID0gY29zKHBoaTApKSAqIHNpbihsYW1iZGEwKSlcbiAgICAgICAgICAvIChjb3NQaGkwICogY29zUGhpMSAqIHNpbkxhbWJkYTBMYW1iZGExKSlcbiAgICAgIDogKHBoaTAgKyBwaGkxKSAvIDI7XG59XG5cbmZ1bmN0aW9uIGNsaXBBbnRpbWVyaWRpYW5JbnRlcnBvbGF0ZShmcm9tLCB0bywgZGlyZWN0aW9uLCBzdHJlYW0pIHtcbiAgdmFyIHBoaTtcbiAgaWYgKGZyb20gPT0gbnVsbCkge1xuICAgIHBoaSA9IGRpcmVjdGlvbiAqIGhhbGZQaTtcbiAgICBzdHJlYW0ucG9pbnQoLXBpLCBwaGkpO1xuICAgIHN0cmVhbS5wb2ludCgwLCBwaGkpO1xuICAgIHN0cmVhbS5wb2ludChwaSwgcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQocGksIDApO1xuICAgIHN0cmVhbS5wb2ludChwaSwgLXBoaSk7XG4gICAgc3RyZWFtLnBvaW50KDAsIC1waGkpO1xuICAgIHN0cmVhbS5wb2ludCgtcGksIC1waGkpO1xuICAgIHN0cmVhbS5wb2ludCgtcGksIDApO1xuICAgIHN0cmVhbS5wb2ludCgtcGksIHBoaSk7XG4gIH0gZWxzZSBpZiAoYWJzKGZyb21bMF0gLSB0b1swXSkgPiBlcHNpbG9uKSB7XG4gICAgdmFyIGxhbWJkYSA9IGZyb21bMF0gPCB0b1swXSA/IHBpIDogLXBpO1xuICAgIHBoaSA9IGRpcmVjdGlvbiAqIGxhbWJkYSAvIDI7XG4gICAgc3RyZWFtLnBvaW50KC1sYW1iZGEsIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KDAsIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KGxhbWJkYSwgcGhpKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJlYW0ucG9pbnQodG9bMF0sIHRvWzFdKTtcbiAgfVxufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2FicywgYXRhbjIsIGNvcywgcmFkaWFucywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbVwiO1xuXG52YXIgbGVuZ3RoU3VtID0gYWRkZXIoKSxcbiAgICBsYW1iZGEwLFxuICAgIHNpblBoaTAsXG4gICAgY29zUGhpMDtcblxudmFyIGxlbmd0aFN0cmVhbSA9IHtcbiAgc3BoZXJlOiBub29wLFxuICBwb2ludDogbm9vcCxcbiAgbGluZVN0YXJ0OiBsZW5ndGhMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogbm9vcCxcbiAgcG9seWdvbkVuZDogbm9vcFxufTtcblxuZnVuY3Rpb24gbGVuZ3RoTGluZVN0YXJ0KCkge1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludEZpcnN0O1xuICBsZW5ndGhTdHJlYW0ubGluZUVuZCA9IGxlbmd0aExpbmVFbmQ7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aExpbmVFbmQoKSB7XG4gIGxlbmd0aFN0cmVhbS5wb2ludCA9IGxlbmd0aFN0cmVhbS5saW5lRW5kID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW4ocGhpKSwgY29zUGhpMCA9IGNvcyhwaGkpO1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIGRlbHRhID0gYWJzKGxhbWJkYSAtIGxhbWJkYTApLFxuICAgICAgY29zRGVsdGEgPSBjb3MoZGVsdGEpLFxuICAgICAgc2luRGVsdGEgPSBzaW4oZGVsdGEpLFxuICAgICAgeCA9IGNvc1BoaSAqIHNpbkRlbHRhLFxuICAgICAgeSA9IGNvc1BoaTAgKiBzaW5QaGkgLSBzaW5QaGkwICogY29zUGhpICogY29zRGVsdGEsXG4gICAgICB6ID0gc2luUGhpMCAqIHNpblBoaSArIGNvc1BoaTAgKiBjb3NQaGkgKiBjb3NEZWx0YTtcbiAgbGVuZ3RoU3VtLmFkZChhdGFuMihzcXJ0KHggKiB4ICsgeSAqIHkpLCB6KSk7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW5QaGksIGNvc1BoaTAgPSBjb3NQaGk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9iamVjdCkge1xuICBsZW5ndGhTdW0ucmVzZXQoKTtcbiAgc3RyZWFtKG9iamVjdCwgbGVuZ3RoU3RyZWFtKTtcbiAgcmV0dXJuICtsZW5ndGhTdW07XG59XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4uL2FkZGVyXCI7XG5pbXBvcnQge2Fic30gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wXCI7XG5cbnZhciBhcmVhU3VtID0gYWRkZXIoKSxcbiAgICBhcmVhUmluZ1N1bSA9IGFkZGVyKCksXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGFyZWFTdHJlYW0gPSB7XG4gIHBvaW50OiBub29wLFxuICBsaW5lU3RhcnQ6IG5vb3AsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN0cmVhbS5saW5lU3RhcnQgPSBhcmVhUmluZ1N0YXJ0O1xuICAgIGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3RyZWFtLmxpbmVTdGFydCA9IGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFTdHJlYW0ucG9pbnQgPSBub29wO1xuICAgIGFyZWFTdW0uYWRkKGFicyhhcmVhUmluZ1N1bSkpO1xuICAgIGFyZWFSaW5nU3VtLnJlc2V0KCk7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZWEgPSBhcmVhU3VtIC8gMjtcbiAgICBhcmVhU3VtLnJlc2V0KCk7XG4gICAgcmV0dXJuIGFyZWE7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFyZWFSaW5nU3RhcnQoKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnRGaXJzdDtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50Rmlyc3QoeCwgeSkge1xuICBhcmVhU3RyZWFtLnBvaW50ID0gYXJlYVBvaW50O1xuICB4MDAgPSB4MCA9IHgsIHkwMCA9IHkwID0geTtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50KHgsIHkpIHtcbiAgYXJlYVJpbmdTdW0uYWRkKHkwICogeCAtIHgwICogeSk7XG4gIHgwID0geCwgeTAgPSB5O1xufVxuXG5mdW5jdGlvbiBhcmVhUmluZ0VuZCgpIHtcbiAgYXJlYVBvaW50KHgwMCwgeTAwKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJlYVN0cmVhbTtcbiIsImltcG9ydCB7dGF1fSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3BcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGF0aENvbnRleHQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUGF0aENvbnRleHQucHJvdG90eXBlID0ge1xuICBfcmFkaXVzOiA0LjUsXG4gIHBvaW50UmFkaXVzOiBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JhZGl1cyA9IF8sIHRoaXM7XG4gIH0sXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSA9PT0gMCkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9wb2ludCA9IE5hTjtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgIHRoaXMuX3BvaW50ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4ICsgdGhpcy5fcmFkaXVzLCB5KTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5hcmMoeCwgeSwgdGhpcy5fcmFkaXVzLCAwLCB0YXUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlc3VsdDogbm9vcFxufTtcbiIsImltcG9ydCBhZGRlciBmcm9tIFwiLi4vYWRkZXJcIjtcbmltcG9ydCB7c3FydH0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wXCI7XG5cbnZhciBsZW5ndGhTdW0gPSBhZGRlcigpLFxuICAgIGxlbmd0aFJpbmcsXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGxlbmd0aFN0cmVhbSA9IHtcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnRGaXJzdDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKGxlbmd0aFJpbmcpIGxlbmd0aFBvaW50KHgwMCwgeTAwKTtcbiAgICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBub29wO1xuICB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGxlbmd0aFJpbmcgPSB0cnVlO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBsZW5ndGhSaW5nID0gbnVsbDtcbiAgfSxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gK2xlbmd0aFN1bTtcbiAgICBsZW5ndGhTdW0ucmVzZXQoKTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG59O1xuXG5mdW5jdGlvbiBsZW5ndGhQb2ludEZpcnN0KHgsIHkpIHtcbiAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnQ7XG4gIHgwMCA9IHgwID0geCwgeTAwID0geTAgPSB5O1xufVxuXG5mdW5jdGlvbiBsZW5ndGhQb2ludCh4LCB5KSB7XG4gIHgwIC09IHgsIHkwIC09IHk7XG4gIGxlbmd0aFN1bS5hZGQoc3FydCh4MCAqIHgwICsgeTAgKiB5MCkpO1xuICB4MCA9IHgsIHkwID0geTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGVuZ3RoU3RyZWFtO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGF0aFN0cmluZygpIHtcbiAgdGhpcy5fc3RyaW5nID0gW107XG59XG5cblBhdGhTdHJpbmcucHJvdG90eXBlID0ge1xuICBfcmFkaXVzOiA0LjUsXG4gIF9jaXJjbGU6IGNpcmNsZSg0LjUpLFxuICBwb2ludFJhZGl1czogZnVuY3Rpb24oXykge1xuICAgIGlmICgoXyA9ICtfKSAhPT0gdGhpcy5fcmFkaXVzKSB0aGlzLl9yYWRpdXMgPSBfLCB0aGlzLl9jaXJjbGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgPT09IDApIHRoaXMuX3N0cmluZy5wdXNoKFwiWlwiKTtcbiAgICB0aGlzLl9wb2ludCA9IE5hTjtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgdGhpcy5fc3RyaW5nLnB1c2goXCJNXCIsIHgsIFwiLFwiLCB5KTtcbiAgICAgICAgdGhpcy5fcG9pbnQgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9zdHJpbmcucHVzaChcIkxcIiwgeCwgXCIsXCIsIHkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuX2NpcmNsZSA9PSBudWxsKSB0aGlzLl9jaXJjbGUgPSBjaXJjbGUodGhpcy5fcmFkaXVzKTtcbiAgICAgICAgdGhpcy5fc3RyaW5nLnB1c2goXCJNXCIsIHgsIFwiLFwiLCB5LCB0aGlzLl9jaXJjbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX3N0cmluZy5sZW5ndGgpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9zdHJpbmcuam9pbihcIlwiKTtcbiAgICAgIHRoaXMuX3N0cmluZyA9IFtdO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjaXJjbGUocmFkaXVzKSB7XG4gIHJldHVybiBcIm0wLFwiICsgcmFkaXVzXG4gICAgICArIFwiYVwiICsgcmFkaXVzICsgXCIsXCIgKyByYWRpdXMgKyBcIiAwIDEsMSAwLFwiICsgLTIgKiByYWRpdXNcbiAgICAgICsgXCJhXCIgKyByYWRpdXMgKyBcIixcIiArIHJhZGl1cyArIFwiIDAgMSwxIDAsXCIgKyAyICogcmFkaXVzXG4gICAgICArIFwielwiO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWV0aG9kcykge1xuICByZXR1cm4ge1xuICAgIHN0cmVhbTogdHJhbnNmb3JtZXIobWV0aG9kcylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKG1ldGhvZHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBzID0gbmV3IFRyYW5zZm9ybVN0cmVhbTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykgc1trZXldID0gbWV0aG9kc1trZXldO1xuICAgIHMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHJldHVybiBzO1xuICB9O1xufVxuXG5mdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW0oKSB7fVxuXG5UcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNmb3JtU3RyZWFtLFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLnN0cmVhbS5wb2ludCh4LCB5KTsgfSxcbiAgc3BoZXJlOiBmdW5jdGlvbigpIHsgdGhpcy5zdHJlYW0uc3BoZXJlKCk7IH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7IHRoaXMuc3RyZWFtLmxpbmVTdGFydCgpOyB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHsgdGhpcy5zdHJlYW0ubGluZUVuZCgpOyB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgeyB0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKTsgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7IHRoaXMuc3RyZWFtLnBvbHlnb25FbmQoKTsgfVxufTtcbiIsImltcG9ydCB7Y2FydGVzaWFufSBmcm9tIFwiLi4vY2FydGVzaWFuXCI7XG5pbXBvcnQge2FicywgYXNpbiwgYXRhbjIsIGNvcywgZXBzaWxvbiwgcmFkaWFucywgc3FydH0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7dHJhbnNmb3JtZXJ9IGZyb20gXCIuLi90cmFuc2Zvcm1cIjtcblxudmFyIG1heERlcHRoID0gMTYsIC8vIG1heGltdW0gZGVwdGggb2Ygc3ViZGl2aXNpb25cbiAgICBjb3NNaW5EaXN0YW5jZSA9IGNvcygzMCAqIHJhZGlhbnMpOyAvLyBjb3MobWluaW11bSBhbmd1bGFyIGRpc3RhbmNlKVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwcm9qZWN0LCBkZWx0YTIpIHtcbiAgcmV0dXJuICtkZWx0YTIgPyByZXNhbXBsZShwcm9qZWN0LCBkZWx0YTIpIDogcmVzYW1wbGVOb25lKHByb2plY3QpO1xufVxuXG5mdW5jdGlvbiByZXNhbXBsZU5vbmUocHJvamVjdCkge1xuICByZXR1cm4gdHJhbnNmb3JtZXIoe1xuICAgIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgICB4ID0gcHJvamVjdCh4LCB5KTtcbiAgICAgIHRoaXMuc3RyZWFtLnBvaW50KHhbMF0sIHhbMV0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlc2FtcGxlKHByb2plY3QsIGRlbHRhMikge1xuXG4gIGZ1bmN0aW9uIHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgbGFtYmRhMCwgYTAsIGIwLCBjMCwgeDEsIHkxLCBsYW1iZGExLCBhMSwgYjEsIGMxLCBkZXB0aCwgc3RyZWFtKSB7XG4gICAgdmFyIGR4ID0geDEgLSB4MCxcbiAgICAgICAgZHkgPSB5MSAtIHkwLFxuICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgIGlmIChkMiA+IDQgKiBkZWx0YTIgJiYgZGVwdGgtLSkge1xuICAgICAgdmFyIGEgPSBhMCArIGExLFxuICAgICAgICAgIGIgPSBiMCArIGIxLFxuICAgICAgICAgIGMgPSBjMCArIGMxLFxuICAgICAgICAgIG0gPSBzcXJ0KGEgKiBhICsgYiAqIGIgKyBjICogYyksXG4gICAgICAgICAgcGhpMiA9IGFzaW4oYyAvPSBtKSxcbiAgICAgICAgICBsYW1iZGEyID0gYWJzKGFicyhjKSAtIDEpIDwgZXBzaWxvbiB8fCBhYnMobGFtYmRhMCAtIGxhbWJkYTEpIDwgZXBzaWxvbiA/IChsYW1iZGEwICsgbGFtYmRhMSkgLyAyIDogYXRhbjIoYiwgYSksXG4gICAgICAgICAgcCA9IHByb2plY3QobGFtYmRhMiwgcGhpMiksXG4gICAgICAgICAgeDIgPSBwWzBdLFxuICAgICAgICAgIHkyID0gcFsxXSxcbiAgICAgICAgICBkeDIgPSB4MiAtIHgwLFxuICAgICAgICAgIGR5MiA9IHkyIC0geTAsXG4gICAgICAgICAgZHogPSBkeSAqIGR4MiAtIGR4ICogZHkyO1xuICAgICAgaWYgKGR6ICogZHogLyBkMiA+IGRlbHRhMiAvLyBwZXJwZW5kaWN1bGFyIHByb2plY3RlZCBkaXN0YW5jZVxuICAgICAgICAgIHx8IGFicygoZHggKiBkeDIgKyBkeSAqIGR5MikgLyBkMiAtIDAuNSkgPiAwLjMgLy8gbWlkcG9pbnQgY2xvc2UgdG8gYW4gZW5kXG4gICAgICAgICAgfHwgYTAgKiBhMSArIGIwICogYjEgKyBjMCAqIGMxIDwgY29zTWluRGlzdGFuY2UpIHsgLy8gYW5ndWxhciBkaXN0YW5jZVxuICAgICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgyLCB5MiwgbGFtYmRhMiwgYSAvPSBtLCBiIC89IG0sIGMsIGRlcHRoLCBzdHJlYW0pO1xuICAgICAgICBzdHJlYW0ucG9pbnQoeDIsIHkyKTtcbiAgICAgICAgcmVzYW1wbGVMaW5lVG8oeDIsIHkyLCBsYW1iZGEyLCBhLCBiLCBjLCB4MSwgeTEsIGxhbWJkYTEsIGExLCBiMSwgYzEsIGRlcHRoLCBzdHJlYW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGxhbWJkYTAwLCB4MDAsIHkwMCwgYTAwLCBiMDAsIGMwMCwgLy8gZmlyc3QgcG9pbnRcbiAgICAgICAgbGFtYmRhMCwgeDAsIHkwLCBhMCwgYjAsIGMwOyAvLyBwcmV2aW91cyBwb2ludFxuXG4gICAgdmFyIHJlc2FtcGxlU3RyZWFtID0ge1xuICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICBsaW5lRW5kOiBsaW5lRW5kLFxuICAgICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsgc3RyZWFtLnBvbHlnb25TdGFydCgpOyByZXNhbXBsZVN0cmVhbS5saW5lU3RhcnQgPSByaW5nU3RhcnQ7IH0sXG4gICAgICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsgc3RyZWFtLnBvbHlnb25FbmQoKTsgcmVzYW1wbGVTdHJlYW0ubGluZVN0YXJ0ID0gbGluZVN0YXJ0OyB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvaW50KHgsIHkpIHtcbiAgICAgIHggPSBwcm9qZWN0KHgsIHkpO1xuICAgICAgc3RyZWFtLnBvaW50KHhbMF0sIHhbMV0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVTdGFydCgpIHtcbiAgICAgIHgwID0gTmFOO1xuICAgICAgcmVzYW1wbGVTdHJlYW0ucG9pbnQgPSBsaW5lUG9pbnQ7XG4gICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVBvaW50KGxhbWJkYSwgcGhpKSB7XG4gICAgICB2YXIgYyA9IGNhcnRlc2lhbihbbGFtYmRhLCBwaGldKSwgcCA9IHByb2plY3QobGFtYmRhLCBwaGkpO1xuICAgICAgcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MCA9IHBbMF0sIHkwID0gcFsxXSwgbGFtYmRhMCA9IGxhbWJkYSwgYTAgPSBjWzBdLCBiMCA9IGNbMV0sIGMwID0gY1syXSwgbWF4RGVwdGgsIHN0cmVhbSk7XG4gICAgICBzdHJlYW0ucG9pbnQoeDAsIHkwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lRW5kKCkge1xuICAgICAgcmVzYW1wbGVTdHJlYW0ucG9pbnQgPSBwb2ludDtcbiAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmluZ1N0YXJ0KCkge1xuICAgICAgbGluZVN0YXJ0KCk7XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IHJpbmdQb2ludDtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLmxpbmVFbmQgPSByaW5nRW5kO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdQb2ludChsYW1iZGEsIHBoaSkge1xuICAgICAgbGluZVBvaW50KGxhbWJkYTAwID0gbGFtYmRhLCBwaGkpLCB4MDAgPSB4MCwgeTAwID0geTAsIGEwMCA9IGEwLCBiMDAgPSBiMCwgYzAwID0gYzA7XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaW5nRW5kKCkge1xuICAgICAgcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MDAsIHkwMCwgbGFtYmRhMDAsIGEwMCwgYjAwLCBjMDAsIG1heERlcHRoLCBzdHJlYW0pO1xuICAgICAgcmVzYW1wbGVTdHJlYW0ubGluZUVuZCA9IGxpbmVFbmQ7XG4gICAgICBsaW5lRW5kKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc2FtcGxlU3RyZWFtO1xuICB9O1xufVxuIiwiaW1wb3J0IGNsaXBBbnRpbWVyaWRpYW4gZnJvbSBcIi4uL2NsaXAvYW50aW1lcmlkaWFuXCI7XG5pbXBvcnQgY2xpcENpcmNsZSBmcm9tIFwiLi4vY2xpcC9jaXJjbGVcIjtcbmltcG9ydCBjbGlwUmVjdGFuZ2xlIGZyb20gXCIuLi9jbGlwL3JlY3RhbmdsZVwiO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSBcIi4uL2NvbXBvc2VcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHlcIjtcbmltcG9ydCB7Y29zLCBkZWdyZWVzLCByYWRpYW5zLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge3JvdGF0ZVJhZGlhbnN9IGZyb20gXCIuLi9yb3RhdGlvblwiO1xuaW1wb3J0IHt0cmFuc2Zvcm1lcn0gZnJvbSBcIi4uL3RyYW5zZm9ybVwiO1xuaW1wb3J0IHtmaXRFeHRlbnQsIGZpdFNpemUsIGZpdFdpZHRoLCBmaXRIZWlnaHR9IGZyb20gXCIuL2ZpdFwiO1xuaW1wb3J0IHJlc2FtcGxlIGZyb20gXCIuL3Jlc2FtcGxlXCI7XG5cbnZhciB0cmFuc2Zvcm1SYWRpYW5zID0gdHJhbnNmb3JtZXIoe1xuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuc3RyZWFtLnBvaW50KHggKiByYWRpYW5zLCB5ICogcmFkaWFucyk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Sb3RhdGUocm90YXRlKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcih7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHZhciByID0gcm90YXRlKHgsIHkpO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sIHJbMV0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNjYWxlVHJhbnNsYXRlKGssIGR4LCBkeSkge1xuICBmdW5jdGlvbiB0cmFuc2Zvcm0oeCwgeSkge1xuICAgIHJldHVybiBbZHggKyBrICogeCwgZHkgLSBrICogeV07XG4gIH1cbiAgdHJhbnNmb3JtLmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4gWyh4IC0gZHgpIC8gaywgKGR5IC0geSkgLyBrXTtcbiAgfTtcbiAgcmV0dXJuIHRyYW5zZm9ybTtcbn1cblxuZnVuY3Rpb24gc2NhbGVUcmFuc2xhdGVSb3RhdGUoaywgZHgsIGR5LCBhbHBoYSkge1xuICB2YXIgY29zQWxwaGEgPSBjb3MoYWxwaGEpLFxuICAgICAgc2luQWxwaGEgPSBzaW4oYWxwaGEpLFxuICAgICAgYSA9IGNvc0FscGhhICogayxcbiAgICAgIGIgPSBzaW5BbHBoYSAqIGssXG4gICAgICBhaSA9IGNvc0FscGhhIC8gayxcbiAgICAgIGJpID0gc2luQWxwaGEgLyBrLFxuICAgICAgY2kgPSAoc2luQWxwaGEgKiBkeSAtIGNvc0FscGhhICogZHgpIC8gayxcbiAgICAgIGZpID0gKHNpbkFscGhhICogZHggKyBjb3NBbHBoYSAqIGR5KSAvIGs7XG4gIGZ1bmN0aW9uIHRyYW5zZm9ybSh4LCB5KSB7XG4gICAgcmV0dXJuIFthICogeCAtIGIgKiB5ICsgZHgsIGR5IC0gYiAqIHggLSBhICogeV07XG4gIH1cbiAgdHJhbnNmb3JtLmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4gW2FpICogeCAtIGJpICogeSArIGNpLCBmaSAtIGJpICogeCAtIGFpICogeV07XG4gIH07XG4gIHJldHVybiB0cmFuc2Zvcm07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByb2plY3Rpb24ocHJvamVjdCkge1xuICByZXR1cm4gcHJvamVjdGlvbk11dGF0b3IoZnVuY3Rpb24oKSB7IHJldHVybiBwcm9qZWN0OyB9KSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdGlvbk11dGF0b3IocHJvamVjdEF0KSB7XG4gIHZhciBwcm9qZWN0LFxuICAgICAgayA9IDE1MCwgLy8gc2NhbGVcbiAgICAgIHggPSA0ODAsIHkgPSAyNTAsIC8vIHRyYW5zbGF0ZVxuICAgICAgbGFtYmRhID0gMCwgcGhpID0gMCwgLy8gY2VudGVyXG4gICAgICBkZWx0YUxhbWJkYSA9IDAsIGRlbHRhUGhpID0gMCwgZGVsdGFHYW1tYSA9IDAsIHJvdGF0ZSwgLy8gcHJlLXJvdGF0ZVxuICAgICAgYWxwaGEgPSAwLCAvLyBwb3N0LXJvdGF0ZVxuICAgICAgdGhldGEgPSBudWxsLCBwcmVjbGlwID0gY2xpcEFudGltZXJpZGlhbiwgLy8gcHJlLWNsaXAgYW5nbGVcbiAgICAgIHgwID0gbnVsbCwgeTAsIHgxLCB5MSwgcG9zdGNsaXAgPSBpZGVudGl0eSwgLy8gcG9zdC1jbGlwIGV4dGVudFxuICAgICAgZGVsdGEyID0gMC41LCAvLyBwcmVjaXNpb25cbiAgICAgIHByb2plY3RSZXNhbXBsZSxcbiAgICAgIHByb2plY3RUcmFuc2Zvcm0sXG4gICAgICBwcm9qZWN0Um90YXRlVHJhbnNmb3JtLFxuICAgICAgY2FjaGUsXG4gICAgICBjYWNoZVN0cmVhbTtcblxuICBmdW5jdGlvbiBwcm9qZWN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIHByb2plY3RSb3RhdGVUcmFuc2Zvcm0ocG9pbnRbMF0gKiByYWRpYW5zLCBwb2ludFsxXSAqIHJhZGlhbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52ZXJ0KHBvaW50KSB7XG4gICAgcG9pbnQgPSBwcm9qZWN0Um90YXRlVHJhbnNmb3JtLmludmVydChwb2ludFswXSwgcG9pbnRbMV0pO1xuICAgIHJldHVybiBwb2ludCAmJiBbcG9pbnRbMF0gKiBkZWdyZWVzLCBwb2ludFsxXSAqIGRlZ3JlZXNdO1xuICB9XG5cbiAgcHJvamVjdGlvbi5zdHJlYW0gPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICByZXR1cm4gY2FjaGUgJiYgY2FjaGVTdHJlYW0gPT09IHN0cmVhbSA/IGNhY2hlIDogY2FjaGUgPSB0cmFuc2Zvcm1SYWRpYW5zKHRyYW5zZm9ybVJvdGF0ZShyb3RhdGUpKHByZWNsaXAocHJvamVjdFJlc2FtcGxlKHBvc3RjbGlwKGNhY2hlU3RyZWFtID0gc3RyZWFtKSkpKSk7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5wcmVjbGlwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHByZWNsaXAgPSBfLCB0aGV0YSA9IHVuZGVmaW5lZCwgcmVzZXQoKSkgOiBwcmVjbGlwO1xuICB9O1xuXG4gIHByb2plY3Rpb24ucG9zdGNsaXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocG9zdGNsaXAgPSBfLCB4MCA9IHkwID0geDEgPSB5MSA9IG51bGwsIHJlc2V0KCkpIDogcG9zdGNsaXA7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5jbGlwQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJlY2xpcCA9ICtfID8gY2xpcENpcmNsZSh0aGV0YSA9IF8gKiByYWRpYW5zKSA6ICh0aGV0YSA9IG51bGwsIGNsaXBBbnRpbWVyaWRpYW4pLCByZXNldCgpKSA6IHRoZXRhICogZGVncmVlcztcbiAgfTtcblxuICBwcm9qZWN0aW9uLmNsaXBFeHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocG9zdGNsaXAgPSBfID09IG51bGwgPyAoeDAgPSB5MCA9IHgxID0geTEgPSBudWxsLCBpZGVudGl0eSkgOiBjbGlwUmVjdGFuZ2xlKHgwID0gK19bMF1bMF0sIHkwID0gK19bMF1bMV0sIHgxID0gK19bMV1bMF0sIHkxID0gK19bMV1bMV0pLCByZXNldCgpKSA6IHgwID09IG51bGwgPyBudWxsIDogW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gIH07XG5cbiAgcHJvamVjdGlvbi5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChrID0gK18sIHJlY2VudGVyKCkpIDogaztcbiAgfTtcblxuICBwcm9qZWN0aW9uLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gK19bMF0sIHkgPSArX1sxXSwgcmVjZW50ZXIoKSkgOiBbeCwgeV07XG4gIH07XG5cbiAgcHJvamVjdGlvbi5jZW50ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobGFtYmRhID0gX1swXSAlIDM2MCAqIHJhZGlhbnMsIHBoaSA9IF9bMV0gJSAzNjAgKiByYWRpYW5zLCByZWNlbnRlcigpKSA6IFtsYW1iZGEgKiBkZWdyZWVzLCBwaGkgKiBkZWdyZWVzXTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkZWx0YUxhbWJkYSA9IF9bMF0gJSAzNjAgKiByYWRpYW5zLCBkZWx0YVBoaSA9IF9bMV0gJSAzNjAgKiByYWRpYW5zLCBkZWx0YUdhbW1hID0gXy5sZW5ndGggPiAyID8gX1syXSAlIDM2MCAqIHJhZGlhbnMgOiAwLCByZWNlbnRlcigpKSA6IFtkZWx0YUxhbWJkYSAqIGRlZ3JlZXMsIGRlbHRhUGhpICogZGVncmVlcywgZGVsdGFHYW1tYSAqIGRlZ3JlZXNdO1xuICB9O1xuXG4gIHByb2plY3Rpb24uYW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSBfICUgMzYwICogcmFkaWFucywgcmVjZW50ZXIoKSkgOiBhbHBoYSAqIGRlZ3JlZXM7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5wcmVjaXNpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJvamVjdFJlc2FtcGxlID0gcmVzYW1wbGUocHJvamVjdFRyYW5zZm9ybSwgZGVsdGEyID0gXyAqIF8pLCByZXNldCgpKSA6IHNxcnQoZGVsdGEyKTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmZpdEV4dGVudCA9IGZ1bmN0aW9uKGV4dGVudCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEV4dGVudChwcm9qZWN0aW9uLCBleHRlbnQsIG9iamVjdCk7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5maXRTaXplID0gZnVuY3Rpb24oc2l6ZSwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdFNpemUocHJvamVjdGlvbiwgc2l6ZSwgb2JqZWN0KTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmZpdFdpZHRoID0gZnVuY3Rpb24od2lkdGgsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRXaWR0aChwcm9qZWN0aW9uLCB3aWR0aCwgb2JqZWN0KTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmZpdEhlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEhlaWdodChwcm9qZWN0aW9uLCBoZWlnaHQsIG9iamVjdCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVjZW50ZXIoKSB7XG4gICAgdmFyIGNlbnRlciA9IHNjYWxlVHJhbnNsYXRlUm90YXRlKGssIDAsIDAsIGFscGhhKS5hcHBseShudWxsLCBwcm9qZWN0KGxhbWJkYSwgcGhpKSksXG4gICAgICAgIHRyYW5zZm9ybSA9IChhbHBoYSA/IHNjYWxlVHJhbnNsYXRlUm90YXRlIDogc2NhbGVUcmFuc2xhdGUpKGssIHggLSBjZW50ZXJbMF0sIHkgLSBjZW50ZXJbMV0sIGFscGhhKTtcbiAgICByb3RhdGUgPSByb3RhdGVSYWRpYW5zKGRlbHRhTGFtYmRhLCBkZWx0YVBoaSwgZGVsdGFHYW1tYSk7XG4gICAgcHJvamVjdFRyYW5zZm9ybSA9IGNvbXBvc2UocHJvamVjdCwgdHJhbnNmb3JtKTtcbiAgICBwcm9qZWN0Um90YXRlVHJhbnNmb3JtID0gY29tcG9zZShyb3RhdGUsIHByb2plY3RUcmFuc2Zvcm0pO1xuICAgIHByb2plY3RSZXNhbXBsZSA9IHJlc2FtcGxlKHByb2plY3RUcmFuc2Zvcm0sIGRlbHRhMik7XG4gICAgcmV0dXJuIHJlc2V0KCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjYWNoZSA9IGNhY2hlU3RyZWFtID0gbnVsbDtcbiAgICByZXR1cm4gcHJvamVjdGlvbjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBwcm9qZWN0ID0gcHJvamVjdEF0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcHJvamVjdGlvbi5pbnZlcnQgPSBwcm9qZWN0LmludmVydCAmJiBpbnZlcnQ7XG4gICAgcmV0dXJuIHJlY2VudGVyKCk7XG4gIH07XG59XG4iLCJpbXBvcnQge2FzaW4sIGF0YW4yLCBjb3MsIHNpbiwgc3FydH0gZnJvbSBcIi4uL21hdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGF6aW11dGhhbFJhdyhzY2FsZSkge1xuICByZXR1cm4gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciBjeCA9IGNvcyh4KSxcbiAgICAgICAgY3kgPSBjb3MoeSksXG4gICAgICAgIGsgPSBzY2FsZShjeCAqIGN5KTtcbiAgICByZXR1cm4gW1xuICAgICAgayAqIGN5ICogc2luKHgpLFxuICAgICAgayAqIHNpbih5KVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF6aW11dGhhbEludmVydChhbmdsZSkge1xuICByZXR1cm4gZnVuY3Rpb24oeCwgeSkge1xuICAgIHZhciB6ID0gc3FydCh4ICogeCArIHkgKiB5KSxcbiAgICAgICAgYyA9IGFuZ2xlKHopLFxuICAgICAgICBzYyA9IHNpbihjKSxcbiAgICAgICAgY2MgPSBjb3MoYyk7XG4gICAgcmV0dXJuIFtcbiAgICAgIGF0YW4yKHggKiBzYywgeiAqIGNjKSxcbiAgICAgIGFzaW4oeiAmJiB5ICogc2MgLyB6KVxuICAgIF07XG4gIH1cbn1cbiIsImltcG9ydCB7YXNpbiwgc3FydH0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7YXppbXV0aGFsUmF3LCBhemltdXRoYWxJbnZlcnR9IGZyb20gXCIuL2F6aW11dGhhbFwiO1xuaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IHZhciBhemltdXRoYWxFcXVhbEFyZWFSYXcgPSBhemltdXRoYWxSYXcoZnVuY3Rpb24oY3hjeSkge1xuICByZXR1cm4gc3FydCgyIC8gKDEgKyBjeGN5KSk7XG59KTtcblxuYXppbXV0aGFsRXF1YWxBcmVhUmF3LmludmVydCA9IGF6aW11dGhhbEludmVydChmdW5jdGlvbih6KSB7XG4gIHJldHVybiAyICogYXNpbih6IC8gMik7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKGF6aW11dGhhbEVxdWFsQXJlYVJhdylcbiAgICAgIC5zY2FsZSgxMjQuNzUpXG4gICAgICAuY2xpcEFuZ2xlKDE4MCAtIDFlLTMpO1xufVxuIiwiaW1wb3J0IHthY29zLCBzaW59IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge2F6aW11dGhhbFJhdywgYXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWxcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCB2YXIgYXppbXV0aGFsRXF1aWRpc3RhbnRSYXcgPSBhemltdXRoYWxSYXcoZnVuY3Rpb24oYykge1xuICByZXR1cm4gKGMgPSBhY29zKGMpKSAmJiBjIC8gc2luKGMpO1xufSk7XG5cbmF6aW11dGhhbEVxdWlkaXN0YW50UmF3LmludmVydCA9IGF6aW11dGhhbEludmVydChmdW5jdGlvbih6KSB7XG4gIHJldHVybiB6O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihhemltdXRoYWxFcXVpZGlzdGFudFJhdylcbiAgICAgIC5zY2FsZSg3OS40MTg4KVxuICAgICAgLmNsaXBBbmdsZSgxODAgLSAxZS0zKTtcbn1cbiIsImltcG9ydCB7YXRhbiwgZXhwLCBoYWxmUGksIGxvZywgcGksIHRhbiwgdGF1fSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHJvdGF0aW9uIGZyb20gXCIuLi9yb3RhdGlvblwiO1xuaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yUmF3KGxhbWJkYSwgcGhpKSB7XG4gIHJldHVybiBbbGFtYmRhLCBsb2codGFuKChoYWxmUGkgKyBwaGkpIC8gMikpXTtcbn1cblxubWVyY2F0b3JSYXcuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICByZXR1cm4gW3gsIDIgKiBhdGFuKGV4cCh5KSkgLSBoYWxmUGldO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBtZXJjYXRvclByb2plY3Rpb24obWVyY2F0b3JSYXcpXG4gICAgICAuc2NhbGUoOTYxIC8gdGF1KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yUHJvamVjdGlvbihwcm9qZWN0KSB7XG4gIHZhciBtID0gcHJvamVjdGlvbihwcm9qZWN0KSxcbiAgICAgIGNlbnRlciA9IG0uY2VudGVyLFxuICAgICAgc2NhbGUgPSBtLnNjYWxlLFxuICAgICAgdHJhbnNsYXRlID0gbS50cmFuc2xhdGUsXG4gICAgICBjbGlwRXh0ZW50ID0gbS5jbGlwRXh0ZW50LFxuICAgICAgeDAgPSBudWxsLCB5MCwgeDEsIHkxOyAvLyBjbGlwIGV4dGVudFxuXG4gIG0uc2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2NhbGUoXyksIHJlY2xpcCgpKSA6IHNjYWxlKCk7XG4gIH07XG5cbiAgbS50cmFuc2xhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodHJhbnNsYXRlKF8pLCByZWNsaXAoKSkgOiB0cmFuc2xhdGUoKTtcbiAgfTtcblxuICBtLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjZW50ZXIoXyksIHJlY2xpcCgpKSA6IGNlbnRlcigpO1xuICB9O1xuXG4gIG0uY2xpcEV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoXyA9PSBudWxsID8geDAgPSB5MCA9IHgxID0geTEgPSBudWxsIDogKHgwID0gK19bMF1bMF0sIHkwID0gK19bMF1bMV0sIHgxID0gK19bMV1bMF0sIHkxID0gK19bMV1bMV0pKSwgcmVjbGlwKCkpIDogeDAgPT0gbnVsbCA/IG51bGwgOiBbW3gwLCB5MF0sIFt4MSwgeTFdXTtcbiAgfTtcblxuICBmdW5jdGlvbiByZWNsaXAoKSB7XG4gICAgdmFyIGsgPSBwaSAqIHNjYWxlKCksXG4gICAgICAgIHQgPSBtKHJvdGF0aW9uKG0ucm90YXRlKCkpLmludmVydChbMCwgMF0pKTtcbiAgICByZXR1cm4gY2xpcEV4dGVudCh4MCA9PSBudWxsXG4gICAgICAgID8gW1t0WzBdIC0gaywgdFsxXSAtIGtdLCBbdFswXSArIGssIHRbMV0gKyBrXV0gOiBwcm9qZWN0ID09PSBtZXJjYXRvclJhd1xuICAgICAgICA/IFtbTWF0aC5tYXgodFswXSAtIGssIHgwKSwgeTBdLCBbTWF0aC5taW4odFswXSArIGssIHgxKSwgeTFdXVxuICAgICAgICA6IFtbeDAsIE1hdGgubWF4KHRbMV0gLSBrLCB5MCldLCBbeDEsIE1hdGgubWluKHRbMV0gKyBrLCB5MSldXSk7XG4gIH1cblxuICByZXR1cm4gcmVjbGlwKCk7XG59XG4iLCJpbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXJlY3Rhbmd1bGFyUmF3KGxhbWJkYSwgcGhpKSB7XG4gIHJldHVybiBbbGFtYmRhLCBwaGldO1xufVxuXG5lcXVpcmVjdGFuZ3VsYXJSYXcuaW52ZXJ0ID0gZXF1aXJlY3Rhbmd1bGFyUmF3O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oZXF1aXJlY3Rhbmd1bGFyUmF3KVxuICAgICAgLnNjYWxlKDE1Mi42Myk7XG59XG4iLCJpbXBvcnQge2FicywgYXRhbjIsIGNvcywgZXBzaWxvbiwgc2lnbiwgc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHtjb25pY1Byb2plY3Rpb259IGZyb20gXCIuL2NvbmljXCI7XG5pbXBvcnQge2VxdWlyZWN0YW5ndWxhclJhd30gZnJvbSBcIi4vZXF1aXJlY3Rhbmd1bGFyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25pY0VxdWlkaXN0YW50UmF3KHkwLCB5MSkge1xuICB2YXIgY3kwID0gY29zKHkwKSxcbiAgICAgIG4gPSB5MCA9PT0geTEgPyBzaW4oeTApIDogKGN5MCAtIGNvcyh5MSkpIC8gKHkxIC0geTApLFxuICAgICAgZyA9IGN5MCAvIG4gKyB5MDtcblxuICBpZiAoYWJzKG4pIDwgZXBzaWxvbikgcmV0dXJuIGVxdWlyZWN0YW5ndWxhclJhdztcblxuICBmdW5jdGlvbiBwcm9qZWN0KHgsIHkpIHtcbiAgICB2YXIgZ3kgPSBnIC0geSwgbnggPSBuICogeDtcbiAgICByZXR1cm4gW2d5ICogc2luKG54KSwgZyAtIGd5ICogY29zKG54KV07XG4gIH1cblxuICBwcm9qZWN0LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgZ3kgPSBnIC0geTtcbiAgICByZXR1cm4gW2F0YW4yKHgsIGFicyhneSkpIC8gbiAqIHNpZ24oZ3kpLCBnIC0gc2lnbihuKSAqIHNxcnQoeCAqIHggKyBneSAqIGd5KV07XG4gIH07XG5cbiAgcmV0dXJuIHByb2plY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gY29uaWNQcm9qZWN0aW9uKGNvbmljRXF1aWRpc3RhbnRSYXcpXG4gICAgICAuc2NhbGUoMTMxLjE1NClcbiAgICAgIC5jZW50ZXIoWzAsIDEzLjkzODldKTtcbn1cbiIsImltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge2FicywgYXNpbiwgY29zLCBlcHNpbG9uMiwgc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG52YXIgQTEgPSAxLjM0MDI2NCxcbiAgICBBMiA9IC0wLjA4MTEwNixcbiAgICBBMyA9IDAuMDAwODkzLFxuICAgIEE0ID0gMC4wMDM3OTYsXG4gICAgTSA9IHNxcnQoMykgLyAyLFxuICAgIGl0ZXJhdGlvbnMgPSAxMjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsRWFydGhSYXcobGFtYmRhLCBwaGkpIHtcbiAgdmFyIGwgPSBhc2luKE0gKiBzaW4ocGhpKSksIGwyID0gbCAqIGwsIGw2ID0gbDIgKiBsMiAqIGwyO1xuICByZXR1cm4gW1xuICAgIGxhbWJkYSAqIGNvcyhsKSAvIChNICogKEExICsgMyAqIEEyICogbDIgKyBsNiAqICg3ICogQTMgKyA5ICogQTQgKiBsMikpKSxcbiAgICBsICogKEExICsgQTIgKiBsMiArIGw2ICogKEEzICsgQTQgKiBsMikpXG4gIF07XG59XG5cbmVxdWFsRWFydGhSYXcuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICB2YXIgbCA9IHksIGwyID0gbCAqIGwsIGw2ID0gbDIgKiBsMiAqIGwyO1xuICBmb3IgKHZhciBpID0gMCwgZGVsdGEsIGZ5LCBmcHk7IGkgPCBpdGVyYXRpb25zOyArK2kpIHtcbiAgICBmeSA9IGwgKiAoQTEgKyBBMiAqIGwyICsgbDYgKiAoQTMgKyBBNCAqIGwyKSkgLSB5O1xuICAgIGZweSA9IEExICsgMyAqIEEyICogbDIgKyBsNiAqICg3ICogQTMgKyA5ICogQTQgKiBsMik7XG4gICAgbCAtPSBkZWx0YSA9IGZ5IC8gZnB5LCBsMiA9IGwgKiBsLCBsNiA9IGwyICogbDIgKiBsMjtcbiAgICBpZiAoYWJzKGRlbHRhKSA8IGVwc2lsb24yKSBicmVhaztcbiAgfVxuICByZXR1cm4gW1xuICAgIE0gKiB4ICogKEExICsgMyAqIEEyICogbDIgKyBsNiAqICg3ICogQTMgKyA5ICogQTQgKiBsMikpIC8gY29zKGwpLFxuICAgIGFzaW4oc2luKGwpIC8gTSlcbiAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihlcXVhbEVhcnRoUmF3KVxuICAgICAgLnNjYWxlKDE3Ny4xNTgpO1xufVxuIiwiaW1wb3J0IHthdGFuLCBjb3MsIHNpbn0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7YXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWxcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnbm9tb25pY1Jhdyh4LCB5KSB7XG4gIHZhciBjeSA9IGNvcyh5KSwgayA9IGNvcyh4KSAqIGN5O1xuICByZXR1cm4gW2N5ICogc2luKHgpIC8gaywgc2luKHkpIC8ga107XG59XG5cbmdub21vbmljUmF3LmludmVydCA9IGF6aW11dGhhbEludmVydChhdGFuKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKGdub21vbmljUmF3KVxuICAgICAgLnNjYWxlKDE0NC4wNDkpXG4gICAgICAuY2xpcEFuZ2xlKDYwKTtcbn1cbiIsImltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQge2FicywgZXBzaWxvbn0gZnJvbSBcIi4uL21hdGhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5hdHVyYWxFYXJ0aDFSYXcobGFtYmRhLCBwaGkpIHtcbiAgdmFyIHBoaTIgPSBwaGkgKiBwaGksIHBoaTQgPSBwaGkyICogcGhpMjtcbiAgcmV0dXJuIFtcbiAgICBsYW1iZGEgKiAoMC44NzA3IC0gMC4xMzE5NzkgKiBwaGkyICsgcGhpNCAqICgtMC4wMTM3OTEgKyBwaGk0ICogKDAuMDAzOTcxICogcGhpMiAtIDAuMDAxNTI5ICogcGhpNCkpKSxcbiAgICBwaGkgKiAoMS4wMDcyMjYgKyBwaGkyICogKDAuMDE1MDg1ICsgcGhpNCAqICgtMC4wNDQ0NzUgKyAwLjAyODg3NCAqIHBoaTIgLSAwLjAwNTkxNiAqIHBoaTQpKSlcbiAgXTtcbn1cblxubmF0dXJhbEVhcnRoMVJhdy5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gIHZhciBwaGkgPSB5LCBpID0gMjUsIGRlbHRhO1xuICBkbyB7XG4gICAgdmFyIHBoaTIgPSBwaGkgKiBwaGksIHBoaTQgPSBwaGkyICogcGhpMjtcbiAgICBwaGkgLT0gZGVsdGEgPSAocGhpICogKDEuMDA3MjI2ICsgcGhpMiAqICgwLjAxNTA4NSArIHBoaTQgKiAoLTAuMDQ0NDc1ICsgMC4wMjg4NzQgKiBwaGkyIC0gMC4wMDU5MTYgKiBwaGk0KSkpIC0geSkgL1xuICAgICAgICAoMS4wMDcyMjYgKyBwaGkyICogKDAuMDE1MDg1ICogMyArIHBoaTQgKiAoLTAuMDQ0NDc1ICogNyArIDAuMDI4ODc0ICogOSAqIHBoaTIgLSAwLjAwNTkxNiAqIDExICogcGhpNCkpKTtcbiAgfSB3aGlsZSAoYWJzKGRlbHRhKSA+IGVwc2lsb24gJiYgLS1pID4gMCk7XG4gIHJldHVybiBbXG4gICAgeCAvICgwLjg3MDcgKyAocGhpMiA9IHBoaSAqIHBoaSkgKiAoLTAuMTMxOTc5ICsgcGhpMiAqICgtMC4wMTM3OTEgKyBwaGkyICogcGhpMiAqIHBoaTIgKiAoMC4wMDM5NzEgLSAwLjAwMTUyOSAqIHBoaTIpKSkpLFxuICAgIHBoaVxuICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKG5hdHVyYWxFYXJ0aDFSYXcpXG4gICAgICAuc2NhbGUoMTc1LjI5NSk7XG59XG4iLCJpbXBvcnQge2FzaW4sIGNvcywgZXBzaWxvbiwgc2lufSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHthemltdXRoYWxJbnZlcnR9IGZyb20gXCIuL2F6aW11dGhhbFwiO1xuaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG9ydGhvZ3JhcGhpY1Jhdyh4LCB5KSB7XG4gIHJldHVybiBbY29zKHkpICogc2luKHgpLCBzaW4oeSldO1xufVxuXG5vcnRob2dyYXBoaWNSYXcuaW52ZXJ0ID0gYXppbXV0aGFsSW52ZXJ0KGFzaW4pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24ob3J0aG9ncmFwaGljUmF3KVxuICAgICAgLnNjYWxlKDI0OS41KVxuICAgICAgLmNsaXBBbmdsZSg5MCArIGVwc2lsb24pO1xufVxuIiwiaW1wb3J0IHthdGFuLCBjb3MsIHNpbn0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCB7YXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWxcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVyZW9ncmFwaGljUmF3KHgsIHkpIHtcbiAgdmFyIGN5ID0gY29zKHkpLCBrID0gMSArIGNvcyh4KSAqIGN5O1xuICByZXR1cm4gW2N5ICogc2luKHgpIC8gaywgc2luKHkpIC8ga107XG59XG5cbnN0ZXJlb2dyYXBoaWNSYXcuaW52ZXJ0ID0gYXppbXV0aGFsSW52ZXJ0KGZ1bmN0aW9uKHopIHtcbiAgcmV0dXJuIDIgKiBhdGFuKHopO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihzdGVyZW9ncmFwaGljUmF3KVxuICAgICAgLnNjYWxlKDI1MClcbiAgICAgIC5jbGlwQW5nbGUoMTQyKTtcbn1cbiIsImltcG9ydCB7YXRhbiwgZXhwLCBoYWxmUGksIGxvZywgdGFufSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHttZXJjYXRvclByb2plY3Rpb259IGZyb20gXCIuL21lcmNhdG9yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3ZlcnNlTWVyY2F0b3JSYXcobGFtYmRhLCBwaGkpIHtcbiAgcmV0dXJuIFtsb2codGFuKChoYWxmUGkgKyBwaGkpIC8gMikpLCAtbGFtYmRhXTtcbn1cblxudHJhbnN2ZXJzZU1lcmNhdG9yUmF3LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgcmV0dXJuIFsteSwgMiAqIGF0YW4oZXhwKHgpKSAtIGhhbGZQaV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG0gPSBtZXJjYXRvclByb2plY3Rpb24odHJhbnN2ZXJzZU1lcmNhdG9yUmF3KSxcbiAgICAgIGNlbnRlciA9IG0uY2VudGVyLFxuICAgICAgcm90YXRlID0gbS5yb3RhdGU7XG5cbiAgbS5jZW50ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBjZW50ZXIoWy1fWzFdLCBfWzBdXSkgOiAoXyA9IGNlbnRlcigpLCBbX1sxXSwgLV9bMF1dKTtcbiAgfTtcblxuICBtLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHJvdGF0ZShbX1swXSwgX1sxXSwgXy5sZW5ndGggPiAyID8gX1syXSArIDkwIDogOTBdKSA6IChfID0gcm90YXRlKCksIFtfWzBdLCBfWzFdLCBfWzJdIC0gOTBdKTtcbiAgfTtcblxuICByZXR1cm4gcm90YXRlKFswLCAwLCA5MF0pXG4gICAgICAuc2NhbGUoMTU5LjE1NSk7XG59XG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50XCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZVwiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlclwiO1xuaW1wb3J0IG5vZGVfc3VtIGZyb20gXCIuL3N1bVwiO1xuaW1wb3J0IG5vZGVfc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgbm9kZV9wYXRoIGZyb20gXCIuL3BhdGhcIjtcbmltcG9ydCBub2RlX2FuY2VzdG9ycyBmcm9tIFwiLi9hbmNlc3RvcnNcIjtcbmltcG9ydCBub2RlX2Rlc2NlbmRhbnRzIGZyb20gXCIuL2Rlc2NlbmRhbnRzXCI7XG5pbXBvcnQgbm9kZV9sZWF2ZXMgZnJvbSBcIi4vbGVhdmVzXCI7XG5pbXBvcnQgbm9kZV9saW5rcyBmcm9tIFwiLi9saW5rc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSBuZXcgTm9kZShkYXRhKSxcbiAgICAgIHZhbHVlZCA9ICtkYXRhLnZhbHVlICYmIChyb290LnZhbHVlID0gZGF0YS52YWx1ZSksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbcm9vdF0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcyxcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSBjaGlsZHJlbiA9IGRlZmF1bHRDaGlsZHJlbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKHZhbHVlZCkgbm9kZS52YWx1ZSA9ICtub2RlLmRhdGEudmFsdWU7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gbmV3IEFycmF5KG4pO1xuICAgICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldID0gbmV3IE5vZGUoY2hpbGRzW2ldKSk7XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG5vZGU7XG4gICAgICAgIGNoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3QuZWFjaEJlZm9yZShjb21wdXRlSGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gbm9kZV9jb3B5KCkge1xuICByZXR1cm4gaGllcmFyY2h5KHRoaXMpLmVhY2hCZWZvcmUoY29weURhdGEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY29weURhdGEobm9kZSkge1xuICBub2RlLmRhdGEgPSBub2RlLmRhdGEuZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVIZWlnaHQobm9kZSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgZG8gbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50KSAmJiAobm9kZS5oZWlnaHQgPCArK2hlaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTm9kZShkYXRhKSB7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuZGVwdGggPVxuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMucGFyZW50ID0gbnVsbDtcbn1cblxuTm9kZS5wcm90b3R5cGUgPSBoaWVyYXJjaHkucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTm9kZSxcbiAgY291bnQ6IG5vZGVfY291bnQsXG4gIGVhY2g6IG5vZGVfZWFjaCxcbiAgZWFjaEFmdGVyOiBub2RlX2VhY2hBZnRlcixcbiAgZWFjaEJlZm9yZTogbm9kZV9lYWNoQmVmb3JlLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHlcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIGN1cnJlbnQsIG5leHQgPSBbbm9kZV0sIGNoaWxkcmVuLCBpLCBuO1xuICBkbyB7XG4gICAgY3VycmVudCA9IG5leHQucmV2ZXJzZSgpLCBuZXh0ID0gW107XG4gICAgd2hpbGUgKG5vZGUgPSBjdXJyZW50LnBvcCgpKSB7XG4gICAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5leHQucHVzaChjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChuZXh0Lmxlbmd0aCk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgbmV4dCA9IFtdLCBjaGlsZHJlbiwgaSwgbjtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIG5leHQucHVzaChub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChub2RlID0gbmV4dC5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgY2hpbGRyZW4sIGk7XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIHN1bSA9ICt2YWx1ZShub2RlLmRhdGEpIHx8IDAsXG4gICAgICAgIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbixcbiAgICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgICB3aGlsZSAoLS1pID49IDApIHN1bSArPSBjaGlsZHJlbltpXS52YWx1ZTtcbiAgICBub2RlLnZhbHVlID0gc3VtO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uc29ydChjb21wYXJlKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZW5kKSB7XG4gIHZhciBzdGFydCA9IHRoaXMsXG4gICAgICBhbmNlc3RvciA9IGxlYXN0Q29tbW9uQW5jZXN0b3Ioc3RhcnQsIGVuZCksXG4gICAgICBub2RlcyA9IFtzdGFydF07XG4gIHdoaWxlIChzdGFydCAhPT0gYW5jZXN0b3IpIHtcbiAgICBzdGFydCA9IHN0YXJ0LnBhcmVudDtcbiAgICBub2Rlcy5wdXNoKHN0YXJ0KTtcbiAgfVxuICB2YXIgayA9IG5vZGVzLmxlbmd0aDtcbiAgd2hpbGUgKGVuZCAhPT0gYW5jZXN0b3IpIHtcbiAgICBub2Rlcy5zcGxpY2UoaywgMCwgZW5kKTtcbiAgICBlbmQgPSBlbmQucGFyZW50O1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cblxuZnVuY3Rpb24gbGVhc3RDb21tb25BbmNlc3RvcihhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gYTtcbiAgdmFyIGFOb2RlcyA9IGEuYW5jZXN0b3JzKCksXG4gICAgICBiTm9kZXMgPSBiLmFuY2VzdG9ycygpLFxuICAgICAgYyA9IG51bGw7XG4gIGEgPSBhTm9kZXMucG9wKCk7XG4gIGIgPSBiTm9kZXMucG9wKCk7XG4gIHdoaWxlIChhID09PSBiKSB7XG4gICAgYyA9IGE7XG4gICAgYSA9IGFOb2Rlcy5wb3AoKTtcbiAgICBiID0gYk5vZGVzLnBvcCgpO1xuICB9XG4gIHJldHVybiBjO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV07XG4gIHdoaWxlIChub2RlID0gbm9kZS5wYXJlbnQpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBbXTtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBsZWF2ZXMgPSBbXTtcbiAgdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGxlYXZlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsZWF2ZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHJvb3QgPSB0aGlzLCBsaW5rcyA9IFtdO1xuICByb290LmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlICE9PSByb290KSB7IC8vIERvbuKAmXQgaW5jbHVkZSB0aGUgcm9vdOKAmXMgcGFyZW50LCBpZiBhbnkuXG4gICAgICBsaW5rcy5wdXNoKHtzb3VyY2U6IG5vZGUucGFyZW50LCB0YXJnZXQ6IG5vZGV9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGlua3M7XG59XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZShhcnJheSkge1xuICB2YXIgbSA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIHQsXG4gICAgICBpO1xuXG4gIHdoaWxlIChtKSB7XG4gICAgaSA9IE1hdGgucmFuZG9tKCkgKiBtLS0gfCAwO1xuICAgIHQgPSBhcnJheVttXTtcbiAgICBhcnJheVttXSA9IGFycmF5W2ldO1xuICAgIGFycmF5W2ldID0gdDtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgbm9kZS54MCA9IE1hdGgucm91bmQobm9kZS54MCk7XG4gIG5vZGUueTAgPSBNYXRoLnJvdW5kKG5vZGUueTApO1xuICBub2RlLngxID0gTWF0aC5yb3VuZChub2RlLngxKTtcbiAgbm9kZS55MSA9IE1hdGgucm91bmQobm9kZS55MSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBub2RlcyA9IHBhcmVudC5jaGlsZHJlbixcbiAgICAgIG5vZGUsXG4gICAgICBpID0gLTEsXG4gICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgayA9IHBhcmVudC52YWx1ZSAmJiAoeDEgLSB4MCkgLyBwYXJlbnQudmFsdWU7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueTAgPSB5MCwgbm9kZS55MSA9IHkxO1xuICAgIG5vZGUueDAgPSB4MCwgbm9kZS54MSA9IHgwICs9IG5vZGUudmFsdWUgKiBrO1xuICB9XG59XG4iLCJpbXBvcnQge05vZGV9IGZyb20gXCIuL2hpZXJhcmNoeS9pbmRleFwiO1xuXG5mdW5jdGlvbiBkZWZhdWx0U2VwYXJhdGlvbihhLCBiKSB7XG4gIHJldHVybiBhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMjtcbn1cblxuLy8gZnVuY3Rpb24gcmFkaWFsU2VwYXJhdGlvbihhLCBiKSB7XG4vLyAgIHJldHVybiAoYS5wYXJlbnQgPT09IGIucGFyZW50ID8gMSA6IDIpIC8gYS5kZXB0aDtcbi8vIH1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBsZWZ0IGNvbnRvdXIgb2YgYSBzdWJ0cmVlIChvclxuLy8gc3ViZm9yZXN0KS4gSXQgcmV0dXJucyB0aGUgc3VjY2Vzc29yIG9mIHYgb24gdGhpcyBjb250b3VyLiBUaGlzIHN1Y2Nlc3NvciBpc1xuLy8gZWl0aGVyIGdpdmVuIGJ5IHRoZSBsZWZ0bW9zdCBjaGlsZCBvZiB2IG9yIGJ5IHRoZSB0aHJlYWQgb2Ygdi4gVGhlIGZ1bmN0aW9uXG4vLyByZXR1cm5zIG51bGwgaWYgYW5kIG9ubHkgaWYgdiBpcyBvbiB0aGUgaGlnaGVzdCBsZXZlbCBvZiBpdHMgc3VidHJlZS5cbmZ1bmN0aW9uIG5leHRMZWZ0KHYpIHtcbiAgdmFyIGNoaWxkcmVuID0gdi5jaGlsZHJlbjtcbiAgcmV0dXJuIGNoaWxkcmVuID8gY2hpbGRyZW5bMF0gOiB2LnQ7XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gd29ya3MgYW5hbG9nb3VzbHkgdG8gbmV4dExlZnQuXG5mdW5jdGlvbiBuZXh0UmlnaHQodikge1xuICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSA6IHYudDtcbn1cblxuLy8gU2hpZnRzIHRoZSBjdXJyZW50IHN1YnRyZWUgcm9vdGVkIGF0IHcrLiBUaGlzIGlzIGRvbmUgYnkgaW5jcmVhc2luZ1xuLy8gcHJlbGltKHcrKSBhbmQgbW9kKHcrKSBieSBzaGlmdC5cbmZ1bmN0aW9uIG1vdmVTdWJ0cmVlKHdtLCB3cCwgc2hpZnQpIHtcbiAgdmFyIGNoYW5nZSA9IHNoaWZ0IC8gKHdwLmkgLSB3bS5pKTtcbiAgd3AuYyAtPSBjaGFuZ2U7XG4gIHdwLnMgKz0gc2hpZnQ7XG4gIHdtLmMgKz0gY2hhbmdlO1xuICB3cC56ICs9IHNoaWZ0O1xuICB3cC5tICs9IHNoaWZ0O1xufVxuXG4vLyBBbGwgb3RoZXIgc2hpZnRzLCBhcHBsaWVkIHRvIHRoZSBzbWFsbGVyIHN1YnRyZWVzIGJldHdlZW4gdy0gYW5kIHcrLCBhcmVcbi8vIHBlcmZvcm1lZCBieSB0aGlzIGZ1bmN0aW9uLiBUbyBwcmVwYXJlIHRoZSBzaGlmdHMsIHdlIGhhdmUgdG8gYWRqdXN0XG4vLyBjaGFuZ2UodyspLCBzaGlmdCh3KyksIGFuZCBjaGFuZ2Uody0pLlxuZnVuY3Rpb24gZXhlY3V0ZVNoaWZ0cyh2KSB7XG4gIHZhciBzaGlmdCA9IDAsXG4gICAgICBjaGFuZ2UgPSAwLFxuICAgICAgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgIHc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIHcgPSBjaGlsZHJlbltpXTtcbiAgICB3LnogKz0gc2hpZnQ7XG4gICAgdy5tICs9IHNoaWZ0O1xuICAgIHNoaWZ0ICs9IHcucyArIChjaGFuZ2UgKz0gdy5jKTtcbiAgfVxufVxuXG4vLyBJZiB2aS3igJlzIGFuY2VzdG9yIGlzIGEgc2libGluZyBvZiB2LCByZXR1cm5zIHZpLeKAmXMgYW5jZXN0b3IuIE90aGVyd2lzZSxcbi8vIHJldHVybnMgdGhlIHNwZWNpZmllZCAoZGVmYXVsdCkgYW5jZXN0b3IuXG5mdW5jdGlvbiBuZXh0QW5jZXN0b3IodmltLCB2LCBhbmNlc3Rvcikge1xuICByZXR1cm4gdmltLmEucGFyZW50ID09PSB2LnBhcmVudCA/IHZpbS5hIDogYW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIFRyZWVOb2RlKG5vZGUsIGkpIHtcbiAgdGhpcy5fID0gbm9kZTtcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5BID0gbnVsbDsgLy8gZGVmYXVsdCBhbmNlc3RvclxuICB0aGlzLmEgPSB0aGlzOyAvLyBhbmNlc3RvclxuICB0aGlzLnogPSAwOyAvLyBwcmVsaW1cbiAgdGhpcy5tID0gMDsgLy8gbW9kXG4gIHRoaXMuYyA9IDA7IC8vIGNoYW5nZVxuICB0aGlzLnMgPSAwOyAvLyBzaGlmdFxuICB0aGlzLnQgPSBudWxsOyAvLyB0aHJlYWRcbiAgdGhpcy5pID0gaTsgLy8gbnVtYmVyXG59XG5cblRyZWVOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpO1xuXG5mdW5jdGlvbiB0cmVlUm9vdChyb290KSB7XG4gIHZhciB0cmVlID0gbmV3IFRyZWVOb2RlKHJvb3QsIDApLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVzID0gW3RyZWVdLFxuICAgICAgY2hpbGQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBpZiAoY2hpbGRyZW4gPSBub2RlLl8uY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBuZXcgQXJyYXkobiA9IGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV0gPSBuZXcgVHJlZU5vZGUoY2hpbGRyZW5baV0sIGkpKTtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAodHJlZS5wYXJlbnQgPSBuZXcgVHJlZU5vZGUobnVsbCwgMCkpLmNoaWxkcmVuID0gW3RyZWVdO1xuICByZXR1cm4gdHJlZTtcbn1cblxuLy8gTm9kZS1saW5rIHRyZWUgZGlhZ3JhbSB1c2luZyB0aGUgUmVpbmdvbGQtVGlsZm9yZCBcInRpZHlcIiBhbGdvcml0aG1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VwYXJhdGlvbiA9IGRlZmF1bHRTZXBhcmF0aW9uLFxuICAgICAgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgbm9kZVNpemUgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRyZWUocm9vdCkge1xuICAgIHZhciB0ID0gdHJlZVJvb3Qocm9vdCk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBsYXlvdXQgdXNpbmcgQnVjaGhlaW0gZXQgYWwu4oCZcyBhbGdvcml0aG0uXG4gICAgdC5lYWNoQWZ0ZXIoZmlyc3RXYWxrKSwgdC5wYXJlbnQubSA9IC10Lno7XG4gICAgdC5lYWNoQmVmb3JlKHNlY29uZFdhbGspO1xuXG4gICAgLy8gSWYgYSBmaXhlZCBub2RlIHNpemUgaXMgc3BlY2lmaWVkLCBzY2FsZSB4IGFuZCB5LlxuICAgIGlmIChub2RlU2l6ZSkgcm9vdC5lYWNoQmVmb3JlKHNpemVOb2RlKTtcblxuICAgIC8vIElmIGEgZml4ZWQgdHJlZSBzaXplIGlzIHNwZWNpZmllZCwgc2NhbGUgeCBhbmQgeSBiYXNlZCBvbiB0aGUgZXh0ZW50LlxuICAgIC8vIENvbXB1dGUgdGhlIGxlZnQtbW9zdCwgcmlnaHQtbW9zdCwgYW5kIGRlcHRoLW1vc3Qgbm9kZXMgZm9yIGV4dGVudHMuXG4gICAgZWxzZSB7XG4gICAgICB2YXIgbGVmdCA9IHJvb3QsXG4gICAgICAgICAgcmlnaHQgPSByb290LFxuICAgICAgICAgIGJvdHRvbSA9IHJvb3Q7XG4gICAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS54IDwgbGVmdC54KSBsZWZ0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUueCA+IHJpZ2h0LngpIHJpZ2h0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUuZGVwdGggPiBib3R0b20uZGVwdGgpIGJvdHRvbSA9IG5vZGU7XG4gICAgICB9KTtcbiAgICAgIHZhciBzID0gbGVmdCA9PT0gcmlnaHQgPyAxIDogc2VwYXJhdGlvbihsZWZ0LCByaWdodCkgLyAyLFxuICAgICAgICAgIHR4ID0gcyAtIGxlZnQueCxcbiAgICAgICAgICBreCA9IGR4IC8gKHJpZ2h0LnggKyBzICsgdHgpLFxuICAgICAgICAgIGt5ID0gZHkgLyAoYm90dG9tLmRlcHRoIHx8IDEpO1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgbm9kZS54ID0gKG5vZGUueCArIHR4KSAqIGt4O1xuICAgICAgICBub2RlLnkgPSBub2RlLmRlcHRoICoga3k7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGEgcHJlbGltaW5hcnkgeC1jb29yZGluYXRlIGZvciB2LiBCZWZvcmUgdGhhdCwgRklSU1QgV0FMSyBpc1xuICAvLyBhcHBsaWVkIHJlY3Vyc2l2ZWx5IHRvIHRoZSBjaGlsZHJlbiBvZiB2LCBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvblxuICAvLyBBUFBPUlRJT04uIEFmdGVyIHNwYWNpbmcgb3V0IHRoZSBjaGlsZHJlbiBieSBjYWxsaW5nIEVYRUNVVEUgU0hJRlRTLCB0aGVcbiAgLy8gbm9kZSB2IGlzIHBsYWNlZCB0byB0aGUgbWlkcG9pbnQgb2YgaXRzIG91dGVybW9zdCBjaGlsZHJlbi5cbiAgZnVuY3Rpb24gZmlyc3RXYWxrKHYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgICBzaWJsaW5ncyA9IHYucGFyZW50LmNoaWxkcmVuLFxuICAgICAgICB3ID0gdi5pID8gc2libGluZ3Nbdi5pIC0gMV0gOiBudWxsO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgZXhlY3V0ZVNoaWZ0cyh2KTtcbiAgICAgIHZhciBtaWRwb2ludCA9IChjaGlsZHJlblswXS56ICsgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0ueikgLyAyO1xuICAgICAgaWYgKHcpIHtcbiAgICAgICAgdi56ID0gdy56ICsgc2VwYXJhdGlvbih2Ll8sIHcuXyk7XG4gICAgICAgIHYubSA9IHYueiAtIG1pZHBvaW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdi56ID0gbWlkcG9pbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh3KSB7XG4gICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9uKHYuXywgdy5fKTtcbiAgICB9XG4gICAgdi5wYXJlbnQuQSA9IGFwcG9ydGlvbih2LCB3LCB2LnBhcmVudC5BIHx8IHNpYmxpbmdzWzBdKTtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGFsbCByZWFsIHgtY29vcmRpbmF0ZXMgYnkgc3VtbWluZyB1cCB0aGUgbW9kaWZpZXJzIHJlY3Vyc2l2ZWx5LlxuICBmdW5jdGlvbiBzZWNvbmRXYWxrKHYpIHtcbiAgICB2Ll8ueCA9IHYueiArIHYucGFyZW50Lm07XG4gICAgdi5tICs9IHYucGFyZW50Lm07XG4gIH1cblxuICAvLyBUaGUgY29yZSBvZiB0aGUgYWxnb3JpdGhtLiBIZXJlLCBhIG5ldyBzdWJ0cmVlIGlzIGNvbWJpbmVkIHdpdGggdGhlXG4gIC8vIHByZXZpb3VzIHN1YnRyZWVzLiBUaHJlYWRzIGFyZSB1c2VkIHRvIHRyYXZlcnNlIHRoZSBpbnNpZGUgYW5kIG91dHNpZGVcbiAgLy8gY29udG91cnMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWUgdXAgdG8gdGhlIGhpZ2hlc3QgY29tbW9uIGxldmVsLiBUaGVcbiAgLy8gdmVydGljZXMgdXNlZCBmb3IgdGhlIHRyYXZlcnNhbHMgYXJlIHZpKywgdmktLCB2by0sIGFuZCB2byssIHdoZXJlIHRoZVxuICAvLyBzdXBlcnNjcmlwdCBvIG1lYW5zIG91dHNpZGUgYW5kIGkgbWVhbnMgaW5zaWRlLCB0aGUgc3Vic2NyaXB0IC0gbWVhbnMgbGVmdFxuICAvLyBzdWJ0cmVlIGFuZCArIG1lYW5zIHJpZ2h0IHN1YnRyZWUuIEZvciBzdW1taW5nIHVwIHRoZSBtb2RpZmllcnMgYWxvbmcgdGhlXG4gIC8vIGNvbnRvdXIsIHdlIHVzZSByZXNwZWN0aXZlIHZhcmlhYmxlcyBzaSssIHNpLSwgc28tLCBhbmQgc28rLiBXaGVuZXZlciB0d29cbiAgLy8gbm9kZXMgb2YgdGhlIGluc2lkZSBjb250b3VycyBjb25mbGljdCwgd2UgY29tcHV0ZSB0aGUgbGVmdCBvbmUgb2YgdGhlXG4gIC8vIGdyZWF0ZXN0IHVuY29tbW9uIGFuY2VzdG9ycyB1c2luZyB0aGUgZnVuY3Rpb24gQU5DRVNUT1IgYW5kIGNhbGwgTU9WRVxuICAvLyBTVUJUUkVFIHRvIHNoaWZ0IHRoZSBzdWJ0cmVlIGFuZCBwcmVwYXJlIHRoZSBzaGlmdHMgb2Ygc21hbGxlciBzdWJ0cmVlcy5cbiAgLy8gRmluYWxseSwgd2UgYWRkIGEgbmV3IHRocmVhZCAoaWYgbmVjZXNzYXJ5KS5cbiAgZnVuY3Rpb24gYXBwb3J0aW9uKHYsIHcsIGFuY2VzdG9yKSB7XG4gICAgaWYgKHcpIHtcbiAgICAgIHZhciB2aXAgPSB2LFxuICAgICAgICAgIHZvcCA9IHYsXG4gICAgICAgICAgdmltID0gdyxcbiAgICAgICAgICB2b20gPSB2aXAucGFyZW50LmNoaWxkcmVuWzBdLFxuICAgICAgICAgIHNpcCA9IHZpcC5tLFxuICAgICAgICAgIHNvcCA9IHZvcC5tLFxuICAgICAgICAgIHNpbSA9IHZpbS5tLFxuICAgICAgICAgIHNvbSA9IHZvbS5tLFxuICAgICAgICAgIHNoaWZ0O1xuICAgICAgd2hpbGUgKHZpbSA9IG5leHRSaWdodCh2aW0pLCB2aXAgPSBuZXh0TGVmdCh2aXApLCB2aW0gJiYgdmlwKSB7XG4gICAgICAgIHZvbSA9IG5leHRMZWZ0KHZvbSk7XG4gICAgICAgIHZvcCA9IG5leHRSaWdodCh2b3ApO1xuICAgICAgICB2b3AuYSA9IHY7XG4gICAgICAgIHNoaWZ0ID0gdmltLnogKyBzaW0gLSB2aXAueiAtIHNpcCArIHNlcGFyYXRpb24odmltLl8sIHZpcC5fKTtcbiAgICAgICAgaWYgKHNoaWZ0ID4gMCkge1xuICAgICAgICAgIG1vdmVTdWJ0cmVlKG5leHRBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSwgdiwgc2hpZnQpO1xuICAgICAgICAgIHNpcCArPSBzaGlmdDtcbiAgICAgICAgICBzb3AgKz0gc2hpZnQ7XG4gICAgICAgIH1cbiAgICAgICAgc2ltICs9IHZpbS5tO1xuICAgICAgICBzaXAgKz0gdmlwLm07XG4gICAgICAgIHNvbSArPSB2b20ubTtcbiAgICAgICAgc29wICs9IHZvcC5tO1xuICAgICAgfVxuICAgICAgaWYgKHZpbSAmJiAhbmV4dFJpZ2h0KHZvcCkpIHtcbiAgICAgICAgdm9wLnQgPSB2aW07XG4gICAgICAgIHZvcC5tICs9IHNpbSAtIHNvcDtcbiAgICAgIH1cbiAgICAgIGlmICh2aXAgJiYgIW5leHRMZWZ0KHZvbSkpIHtcbiAgICAgICAgdm9tLnQgPSB2aXA7XG4gICAgICAgIHZvbS5tICs9IHNpcCAtIHNvbTtcbiAgICAgICAgYW5jZXN0b3IgPSB2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3I7XG4gIH1cblxuICBmdW5jdGlvbiBzaXplTm9kZShub2RlKSB7XG4gICAgbm9kZS54ICo9IGR4O1xuICAgIG5vZGUueSA9IG5vZGUuZGVwdGggKiBkeTtcbiAgfVxuXG4gIHRyZWUuc2VwYXJhdGlvbiA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzZXBhcmF0aW9uID0geCwgdHJlZSkgOiBzZXBhcmF0aW9uO1xuICB9O1xuXG4gIHRyZWUuc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IGZhbHNlLCBkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCB0cmVlKSA6IChub2RlU2l6ZSA/IG51bGwgOiBbZHgsIGR5XSk7XG4gIH07XG5cbiAgdHJlZS5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IHRydWUsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWUpIDogKG5vZGVTaXplID8gW2R4LCBkeV0gOiBudWxsKTtcbiAgfTtcblxuICByZXR1cm4gdHJlZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIG5vZGVzID0gcGFyZW50LmNoaWxkcmVuLFxuICAgICAgbm9kZSxcbiAgICAgIGkgPSAtMSxcbiAgICAgIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICBrID0gcGFyZW50LnZhbHVlICYmICh5MSAtIHkwKSAvIHBhcmVudC52YWx1ZTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS54MCA9IHgwLCBub2RlLngxID0geDE7XG4gICAgbm9kZS55MCA9IHkwLCBub2RlLnkxID0geTAgKz0gbm9kZS52YWx1ZSAqIGs7XG4gIH1cbn1cbiIsImltcG9ydCB0cmVlbWFwRGljZSBmcm9tIFwiLi9kaWNlXCI7XG5pbXBvcnQgdHJlZW1hcFNsaWNlIGZyb20gXCIuL3NsaWNlXCI7XG5cbmV4cG9ydCB2YXIgcGhpID0gKDEgKyBNYXRoLnNxcnQoNSkpIC8gMjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyaWZ5UmF0aW8ocmF0aW8sIHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIHJvd3MgPSBbXSxcbiAgICAgIG5vZGVzID0gcGFyZW50LmNoaWxkcmVuLFxuICAgICAgcm93LFxuICAgICAgbm9kZVZhbHVlLFxuICAgICAgaTAgPSAwLFxuICAgICAgaTEgPSAwLFxuICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgIGR4LCBkeSxcbiAgICAgIHZhbHVlID0gcGFyZW50LnZhbHVlLFxuICAgICAgc3VtVmFsdWUsXG4gICAgICBtaW5WYWx1ZSxcbiAgICAgIG1heFZhbHVlLFxuICAgICAgbmV3UmF0aW8sXG4gICAgICBtaW5SYXRpbyxcbiAgICAgIGFscGhhLFxuICAgICAgYmV0YTtcblxuICB3aGlsZSAoaTAgPCBuKSB7XG4gICAgZHggPSB4MSAtIHgwLCBkeSA9IHkxIC0geTA7XG5cbiAgICAvLyBGaW5kIHRoZSBuZXh0IG5vbi1lbXB0eSBub2RlLlxuICAgIGRvIHN1bVZhbHVlID0gbm9kZXNbaTErK10udmFsdWU7IHdoaWxlICghc3VtVmFsdWUgJiYgaTEgPCBuKTtcbiAgICBtaW5WYWx1ZSA9IG1heFZhbHVlID0gc3VtVmFsdWU7XG4gICAgYWxwaGEgPSBNYXRoLm1heChkeSAvIGR4LCBkeCAvIGR5KSAvICh2YWx1ZSAqIHJhdGlvKTtcbiAgICBiZXRhID0gc3VtVmFsdWUgKiBzdW1WYWx1ZSAqIGFscGhhO1xuICAgIG1pblJhdGlvID0gTWF0aC5tYXgobWF4VmFsdWUgLyBiZXRhLCBiZXRhIC8gbWluVmFsdWUpO1xuXG4gICAgLy8gS2VlcCBhZGRpbmcgbm9kZXMgd2hpbGUgdGhlIGFzcGVjdCByYXRpbyBtYWludGFpbnMgb3IgaW1wcm92ZXMuXG4gICAgZm9yICg7IGkxIDwgbjsgKytpMSkge1xuICAgICAgc3VtVmFsdWUgKz0gbm9kZVZhbHVlID0gbm9kZXNbaTFdLnZhbHVlO1xuICAgICAgaWYgKG5vZGVWYWx1ZSA8IG1pblZhbHVlKSBtaW5WYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgICAgIGlmIChub2RlVmFsdWUgPiBtYXhWYWx1ZSkgbWF4VmFsdWUgPSBub2RlVmFsdWU7XG4gICAgICBiZXRhID0gc3VtVmFsdWUgKiBzdW1WYWx1ZSAqIGFscGhhO1xuICAgICAgbmV3UmF0aW8gPSBNYXRoLm1heChtYXhWYWx1ZSAvIGJldGEsIGJldGEgLyBtaW5WYWx1ZSk7XG4gICAgICBpZiAobmV3UmF0aW8gPiBtaW5SYXRpbykgeyBzdW1WYWx1ZSAtPSBub2RlVmFsdWU7IGJyZWFrOyB9XG4gICAgICBtaW5SYXRpbyA9IG5ld1JhdGlvO1xuICAgIH1cblxuICAgIC8vIFBvc2l0aW9uIGFuZCByZWNvcmQgdGhlIHJvdyBvcmllbnRhdGlvbi5cbiAgICByb3dzLnB1c2gocm93ID0ge3ZhbHVlOiBzdW1WYWx1ZSwgZGljZTogZHggPCBkeSwgY2hpbGRyZW46IG5vZGVzLnNsaWNlKGkwLCBpMSl9KTtcbiAgICBpZiAocm93LmRpY2UpIHRyZWVtYXBEaWNlKHJvdywgeDAsIHkwLCB4MSwgdmFsdWUgPyB5MCArPSBkeSAqIHN1bVZhbHVlIC8gdmFsdWUgOiB5MSk7XG4gICAgZWxzZSB0cmVlbWFwU2xpY2Uocm93LCB4MCwgeTAsIHZhbHVlID8geDAgKz0gZHggKiBzdW1WYWx1ZSAvIHZhbHVlIDogeDEsIHkxKTtcbiAgICB2YWx1ZSAtPSBzdW1WYWx1ZSwgaTAgPSBpMTtcbiAgfVxuXG4gIHJldHVybiByb3dzO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKHJhdGlvKSB7XG5cbiAgZnVuY3Rpb24gc3F1YXJpZnkocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICAgIHNxdWFyaWZ5UmF0aW8ocmF0aW8sIHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpO1xuICB9XG5cbiAgc3F1YXJpZnkucmF0aW8gPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGN1c3RvbSgoeCA9ICt4KSA+IDEgPyB4IDogMSk7XG4gIH07XG5cbiAgcmV0dXJuIHNxdWFyaWZ5O1xufSkocGhpKTtcbiIsImltcG9ydCB0cmVlbWFwRGljZSBmcm9tIFwiLi9kaWNlXCI7XG5pbXBvcnQgdHJlZW1hcFNsaWNlIGZyb20gXCIuL3NsaWNlXCI7XG5pbXBvcnQge3BoaSwgc3F1YXJpZnlSYXRpb30gZnJvbSBcIi4vc3F1YXJpZnlcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShyYXRpbykge1xuXG4gIGZ1bmN0aW9uIHJlc3F1YXJpZnkocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICAgIGlmICgocm93cyA9IHBhcmVudC5fc3F1YXJpZnkpICYmIChyb3dzLnJhdGlvID09PSByYXRpbykpIHtcbiAgICAgIHZhciByb3dzLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBub2RlcyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGogPSAtMSxcbiAgICAgICAgICBuLFxuICAgICAgICAgIG0gPSByb3dzLmxlbmd0aCxcbiAgICAgICAgICB2YWx1ZSA9IHBhcmVudC52YWx1ZTtcblxuICAgICAgd2hpbGUgKCsraiA8IG0pIHtcbiAgICAgICAgcm93ID0gcm93c1tqXSwgbm9kZXMgPSByb3cuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IHJvdy52YWx1ZSA9IDAsIG4gPSBub2Rlcy5sZW5ndGg7IGkgPCBuOyArK2kpIHJvdy52YWx1ZSArPSBub2Rlc1tpXS52YWx1ZTtcbiAgICAgICAgaWYgKHJvdy5kaWNlKSB0cmVlbWFwRGljZShyb3csIHgwLCB5MCwgeDEsIHkwICs9ICh5MSAtIHkwKSAqIHJvdy52YWx1ZSAvIHZhbHVlKTtcbiAgICAgICAgZWxzZSB0cmVlbWFwU2xpY2Uocm93LCB4MCwgeTAsIHgwICs9ICh4MSAtIHgwKSAqIHJvdy52YWx1ZSAvIHZhbHVlLCB5MSk7XG4gICAgICAgIHZhbHVlIC09IHJvdy52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Ll9zcXVhcmlmeSA9IHJvd3MgPSBzcXVhcmlmeVJhdGlvKHJhdGlvLCBwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKTtcbiAgICAgIHJvd3MucmF0aW8gPSByYXRpbztcbiAgICB9XG4gIH1cblxuICByZXNxdWFyaWZ5LnJhdGlvID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBjdXN0b20oKHggPSAreCkgPiAxID8geCA6IDEpO1xuICB9O1xuXG4gIHJldHVybiByZXNxdWFyaWZ5O1xufSkocGhpKTtcbiIsImltcG9ydCBjcm9zcyBmcm9tIFwiLi9jcm9zc1wiO1xuXG5mdW5jdGlvbiBsZXhpY29ncmFwaGljT3JkZXIoYSwgYikge1xuICByZXR1cm4gYVswXSAtIGJbMF0gfHwgYVsxXSAtIGJbMV07XG59XG5cbi8vIENvbXB1dGVzIHRoZSB1cHBlciBjb252ZXggaHVsbCBwZXIgdGhlIG1vbm90b25lIGNoYWluIGFsZ29yaXRobS5cbi8vIEFzc3VtZXMgcG9pbnRzLmxlbmd0aCA+PSAzLCBpcyBzb3J0ZWQgYnkgeCwgdW5pcXVlIGluIHkuXG4vLyBSZXR1cm5zIGFuIGFycmF5IG9mIGluZGljZXMgaW50byBwb2ludHMgaW4gbGVmdC10by1yaWdodCBvcmRlci5cbmZ1bmN0aW9uIGNvbXB1dGVVcHBlckh1bGxJbmRleGVzKHBvaW50cykge1xuICB2YXIgbiA9IHBvaW50cy5sZW5ndGgsXG4gICAgICBpbmRleGVzID0gWzAsIDFdLFxuICAgICAgc2l6ZSA9IDI7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBuOyArK2kpIHtcbiAgICB3aGlsZSAoc2l6ZSA+IDEgJiYgY3Jvc3MocG9pbnRzW2luZGV4ZXNbc2l6ZSAtIDJdXSwgcG9pbnRzW2luZGV4ZXNbc2l6ZSAtIDFdXSwgcG9pbnRzW2ldKSA8PSAwKSAtLXNpemU7XG4gICAgaW5kZXhlc1tzaXplKytdID0gaTtcbiAgfVxuXG4gIHJldHVybiBpbmRleGVzLnNsaWNlKDAsIHNpemUpOyAvLyByZW1vdmUgcG9wcGVkIHBvaW50c1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2ludHMpIHtcbiAgaWYgKChuID0gcG9pbnRzLmxlbmd0aCkgPCAzKSByZXR1cm4gbnVsbDtcblxuICB2YXIgaSxcbiAgICAgIG4sXG4gICAgICBzb3J0ZWRQb2ludHMgPSBuZXcgQXJyYXkobiksXG4gICAgICBmbGlwcGVkUG9pbnRzID0gbmV3IEFycmF5KG4pO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHNvcnRlZFBvaW50c1tpXSA9IFsrcG9pbnRzW2ldWzBdLCArcG9pbnRzW2ldWzFdLCBpXTtcbiAgc29ydGVkUG9pbnRzLnNvcnQobGV4aWNvZ3JhcGhpY09yZGVyKTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgZmxpcHBlZFBvaW50c1tpXSA9IFtzb3J0ZWRQb2ludHNbaV1bMF0sIC1zb3J0ZWRQb2ludHNbaV1bMV1dO1xuXG4gIHZhciB1cHBlckluZGV4ZXMgPSBjb21wdXRlVXBwZXJIdWxsSW5kZXhlcyhzb3J0ZWRQb2ludHMpLFxuICAgICAgbG93ZXJJbmRleGVzID0gY29tcHV0ZVVwcGVySHVsbEluZGV4ZXMoZmxpcHBlZFBvaW50cyk7XG5cbiAgLy8gQ29uc3RydWN0IHRoZSBodWxsIHBvbHlnb24sIHJlbW92aW5nIHBvc3NpYmxlIGR1cGxpY2F0ZSBlbmRwb2ludHMuXG4gIHZhciBza2lwTGVmdCA9IGxvd2VySW5kZXhlc1swXSA9PT0gdXBwZXJJbmRleGVzWzBdLFxuICAgICAgc2tpcFJpZ2h0ID0gbG93ZXJJbmRleGVzW2xvd2VySW5kZXhlcy5sZW5ndGggLSAxXSA9PT0gdXBwZXJJbmRleGVzW3VwcGVySW5kZXhlcy5sZW5ndGggLSAxXSxcbiAgICAgIGh1bGwgPSBbXTtcblxuICAvLyBBZGQgdXBwZXIgaHVsbCBpbiByaWdodC10by1sIG9yZGVyLlxuICAvLyBUaGVuIGFkZCBsb3dlciBodWxsIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gIGZvciAoaSA9IHVwcGVySW5kZXhlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgaHVsbC5wdXNoKHBvaW50c1tzb3J0ZWRQb2ludHNbdXBwZXJJbmRleGVzW2ldXVsyXV0pO1xuICBmb3IgKGkgPSArc2tpcExlZnQ7IGkgPCBsb3dlckluZGV4ZXMubGVuZ3RoIC0gc2tpcFJpZ2h0OyArK2kpIGh1bGwucHVzaChwb2ludHNbc29ydGVkUG9pbnRzW2xvd2VySW5kZXhlc1tpXV1bMl1dKTtcblxuICByZXR1cm4gaHVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKTtcbn1cbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbU5vcm1hbChzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tTm9ybWFsKG11LCBzaWdtYSkge1xuICAgIHZhciB4LCByO1xuICAgIG11ID0gbXUgPT0gbnVsbCA/IDAgOiArbXU7XG4gICAgc2lnbWEgPSBzaWdtYSA9PSBudWxsID8gMSA6ICtzaWdtYTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgeTtcblxuICAgICAgLy8gSWYgYXZhaWxhYmxlLCB1c2UgdGhlIHNlY29uZCBwcmV2aW91c2x5LWdlbmVyYXRlZCB1bmlmb3JtIHJhbmRvbS5cbiAgICAgIGlmICh4ICE9IG51bGwpIHkgPSB4LCB4ID0gbnVsbDtcblxuICAgICAgLy8gT3RoZXJ3aXNlLCBnZW5lcmF0ZSBhIG5ldyB4IGFuZCB5LlxuICAgICAgZWxzZSBkbyB7XG4gICAgICAgIHggPSBzb3VyY2UoKSAqIDIgLSAxO1xuICAgICAgICB5ID0gc291cmNlKCkgKiAyIC0gMTtcbiAgICAgICAgciA9IHggKiB4ICsgeSAqIHk7XG4gICAgICB9IHdoaWxlICghciB8fCByID4gMSk7XG5cbiAgICAgIHJldHVybiBtdSArIHNpZ21hICogeSAqIE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHIpIC8gcik7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbU5vcm1hbC5zb3VyY2UgPSBzb3VyY2VSYW5kb21Ob3JtYWw7XG5cbiAgcmV0dXJuIHJhbmRvbU5vcm1hbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tVW5pZm9ybShzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tVW5pZm9ybShtaW4sIG1heCkge1xuICAgIG1pbiA9IG1pbiA9PSBudWxsID8gMCA6ICttaW47XG4gICAgbWF4ID0gbWF4ID09IG51bGwgPyAxIDogK21heDtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgbWF4ID0gbWluLCBtaW4gPSAwO1xuICAgIGVsc2UgbWF4IC09IG1pbjtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc291cmNlKCkgKiBtYXggKyBtaW47XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbVVuaWZvcm0uc291cmNlID0gc291cmNlUmFuZG9tVW5pZm9ybTtcblxuICByZXR1cm4gcmFuZG9tVW5pZm9ybTtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tSXJ3aW5IYWxsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21JcndpbkhhbGwobikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHN1bSA9IDAsIGkgPSAwOyBpIDwgbjsgKytpKSBzdW0gKz0gc291cmNlKCk7XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH07XG4gIH1cblxuICByYW5kb21JcndpbkhhbGwuc291cmNlID0gc291cmNlUmFuZG9tSXJ3aW5IYWxsO1xuXG4gIHJldHVybiByYW5kb21JcndpbkhhbGw7XG59KShkZWZhdWx0U291cmNlKTtcbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcbmltcG9ydCBub3JtYWwgZnJvbSBcIi4vbm9ybWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21Mb2dOb3JtYWwoc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbUxvZ05vcm1hbCgpIHtcbiAgICB2YXIgcmFuZG9tTm9ybWFsID0gbm9ybWFsLnNvdXJjZShzb3VyY2UpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE1hdGguZXhwKHJhbmRvbU5vcm1hbCgpKTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tTG9nTm9ybWFsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUxvZ05vcm1hbDtcblxuICByZXR1cm4gcmFuZG9tTG9nTm9ybWFsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iLCJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlXCI7XG5pbXBvcnQgaXJ3aW5IYWxsIGZyb20gXCIuL2lyd2luSGFsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tQmF0ZXMoc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbUJhdGVzKG4pIHtcbiAgICB2YXIgcmFuZG9tSXJ3aW5IYWxsID0gaXJ3aW5IYWxsLnNvdXJjZShzb3VyY2UpKG4pO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByYW5kb21JcndpbkhhbGwoKSAvIG47XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUJhdGVzLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUJhdGVzO1xuXG4gIHJldHVybiByYW5kb21CYXRlcztcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tRXhwb25lbnRpYWwoc291cmNlKSB7XG4gIGZ1bmN0aW9uIHJhbmRvbUV4cG9uZW50aWFsKGxhbWJkYSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAtTWF0aC5sb2coMSAtIHNvdXJjZSgpKSAvIGxhbWJkYTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tRXhwb25lbnRpYWwuc291cmNlID0gc291cmNlUmFuZG9tRXhwb25lbnRpYWw7XG5cbiAgcmV0dXJuIHJhbmRvbUV4cG9uZW50aWFsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMTogdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5pbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKS5kb21haW4oZG9tYWluKTsgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJ2YXIgYXJyYXkgPSBBcnJheS5wcm90b3R5cGU7XG5cbmV4cG9ydCB2YXIgbWFwID0gYXJyYXkubWFwO1xuZXhwb3J0IHZhciBzbGljZSA9IGFycmF5LnNsaWNlO1xuIiwiaW1wb3J0IHttYXB9IGZyb20gXCJkMy1jb2xsZWN0aW9uXCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IHZhciBpbXBsaWNpdCA9IHtuYW1lOiBcImltcGxpY2l0XCJ9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRpbmFsKCkge1xuICB2YXIgaW5kZXggPSBtYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgdmFyIGtleSA9IGQgKyBcIlwiLCBpID0gaW5kZXguZ2V0KGtleSk7XG4gICAgaWYgKCFpKSB7XG4gICAgICBpZiAodW5rbm93biAhPT0gaW1wbGljaXQpIHJldHVybiB1bmtub3duO1xuICAgICAgaW5kZXguc2V0KGtleSwgaSA9IGRvbWFpbi5wdXNoKGQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmdlWyhpIC0gMSkgJSByYW5nZS5sZW5ndGhdO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdLCBpbmRleCA9IG1hcCgpO1xuICAgIHZhciBpID0gLTEsIG4gPSBfLmxlbmd0aCwgZCwga2V5O1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWluZGV4LmhhcyhrZXkgPSAoZCA9IF9baV0pICsgXCJcIikpIGluZGV4LnNldChrZXksIGRvbWFpbi5wdXNoKGQpKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcmRpbmFsKGRvbWFpbiwgcmFuZ2UpLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsImltcG9ydCB7cmFuZ2UgYXMgc2VxdWVuY2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCBvcmRpbmFsIGZyb20gXCIuL29yZGluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmFuZCgpIHtcbiAgdmFyIHNjYWxlID0gb3JkaW5hbCgpLnVua25vd24odW5kZWZpbmVkKSxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbixcbiAgICAgIG9yZGluYWxSYW5nZSA9IHNjYWxlLnJhbmdlLFxuICAgICAgcmFuZ2UgPSBbMCwgMV0sXG4gICAgICBzdGVwLFxuICAgICAgYmFuZHdpZHRoLFxuICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgIHBhZGRpbmdJbm5lciA9IDAsXG4gICAgICBwYWRkaW5nT3V0ZXIgPSAwLFxuICAgICAgYWxpZ24gPSAwLjU7XG5cbiAgZGVsZXRlIHNjYWxlLnVua25vd247XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgbiA9IGRvbWFpbigpLmxlbmd0aCxcbiAgICAgICAgcmV2ZXJzZSA9IHJhbmdlWzFdIDwgcmFuZ2VbMF0sXG4gICAgICAgIHN0YXJ0ID0gcmFuZ2VbcmV2ZXJzZSAtIDBdLFxuICAgICAgICBzdG9wID0gcmFuZ2VbMSAtIHJldmVyc2VdO1xuICAgIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDEsIG4gLSBwYWRkaW5nSW5uZXIgKyBwYWRkaW5nT3V0ZXIgKiAyKTtcbiAgICBpZiAocm91bmQpIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgIHN0YXJ0ICs9IChzdG9wIC0gc3RhcnQgLSBzdGVwICogKG4gLSBwYWRkaW5nSW5uZXIpKSAqIGFsaWduO1xuICAgIGJhbmR3aWR0aCA9IHN0ZXAgKiAoMSAtIHBhZGRpbmdJbm5lcik7XG4gICAgaWYgKHJvdW5kKSBzdGFydCA9IE1hdGgucm91bmQoc3RhcnQpLCBiYW5kd2lkdGggPSBNYXRoLnJvdW5kKGJhbmR3aWR0aCk7XG4gICAgdmFyIHZhbHVlcyA9IHNlcXVlbmNlKG4pLm1hcChmdW5jdGlvbihpKSB7IHJldHVybiBzdGFydCArIHN0ZXAgKiBpOyB9KTtcbiAgICByZXR1cm4gb3JkaW5hbFJhbmdlKHJldmVyc2UgPyB2YWx1ZXMucmV2ZXJzZSgpIDogdmFsdWVzKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4oXyksIHJlc2NhbGUoKSkgOiBkb21haW4oKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IFsrX1swXSwgK19bMV1dLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IFsrX1swXSwgK19bMV1dLCByb3VuZCA9IHRydWUsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5iYW5kd2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYmFuZHdpZHRoO1xuICB9O1xuXG4gIHNjYWxlLnN0ZXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc3RlcDtcbiAgfTtcblxuICBzY2FsZS5yb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyb3VuZCA9ICEhXywgcmVzY2FsZSgpKSA6IHJvdW5kO1xuICB9O1xuXG4gIHNjYWxlLnBhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5taW4oMSwgcGFkZGluZ091dGVyID0gK18pLCByZXNjYWxlKCkpIDogcGFkZGluZ0lubmVyO1xuICB9O1xuXG4gIHNjYWxlLnBhZGRpbmdJbm5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nSW5uZXIgPSBNYXRoLm1pbigxLCBfKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ091dGVyID0gK18sIHJlc2NhbGUoKSkgOiBwYWRkaW5nT3V0ZXI7XG4gIH07XG5cbiAgc2NhbGUuYWxpZ24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxpZ24gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBhbGlnbjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGJhbmQoZG9tYWluKCksIHJhbmdlKVxuICAgICAgICAucm91bmQocm91bmQpXG4gICAgICAgIC5wYWRkaW5nSW5uZXIocGFkZGluZ0lubmVyKVxuICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgLmFsaWduKGFsaWduKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHJlc2NhbGUoKSwgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRpc2goc2NhbGUpIHtcbiAgdmFyIGNvcHkgPSBzY2FsZS5jb3B5O1xuXG4gIHNjYWxlLnBhZGRpbmcgPSBzY2FsZS5wYWRkaW5nT3V0ZXI7XG4gIGRlbGV0ZSBzY2FsZS5wYWRkaW5nSW5uZXI7XG4gIGRlbGV0ZSBzY2FsZS5wYWRkaW5nT3V0ZXI7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBwb2ludGlzaChjb3B5KCkpO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50KCkge1xuICByZXR1cm4gcG9pbnRpc2goYmFuZC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSk7XG59XG4iLCJ2YXIgdDAgPSBuZXcgRGF0ZSxcbiAgICB0MSA9IG5ldyBEYXRlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwID8gbmV3IERhdGUgOiBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdLCBwcmV2aW91cztcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9IGZ1bmN0aW9uKHRlc3QpIHtcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkge1xuICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsIC0xKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfSBlbHNlIHdoaWxlICgtLXN0ZXAgPj0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgeWVhciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG55ZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGRhdGUuZ2V0RnVsbFllYXIoKSAvIGspICogayk7XG4gICAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgeWVhcjtcbmV4cG9ydCB2YXIgeWVhcnMgPSB5ZWFyLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciBtb250aCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBtb250aDtcbmV4cG9ydCB2YXIgbW9udGhzID0gbW9udGgucmFuZ2U7XG4iLCJleHBvcnQgdmFyIGR1cmF0aW9uU2Vjb25kID0gMWUzO1xuZXhwb3J0IHZhciBkdXJhdGlvbk1pbnV0ZSA9IDZlNDtcbmV4cG9ydCB2YXIgZHVyYXRpb25Ib3VyID0gMzZlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25EYXkgPSA4NjRlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25XZWVrID0gNjA0OGU1O1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlLCBkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmZ1bmN0aW9uIHdlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIChkYXRlLmdldERheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgc3VuZGF5ID0gd2Vla2RheSgwKTtcbmV4cG9ydCB2YXIgbW9uZGF5ID0gd2Vla2RheSgxKTtcbmV4cG9ydCB2YXIgdHVlc2RheSA9IHdlZWtkYXkoMik7XG5leHBvcnQgdmFyIHdlZG5lc2RheSA9IHdlZWtkYXkoMyk7XG5leHBvcnQgdmFyIHRodXJzZGF5ID0gd2Vla2RheSg0KTtcbmV4cG9ydCB2YXIgZnJpZGF5ID0gd2Vla2RheSg1KTtcbmV4cG9ydCB2YXIgc2F0dXJkYXkgPSB3ZWVrZGF5KDYpO1xuXG5leHBvcnQgdmFyIHN1bmRheXMgPSBzdW5kYXkucmFuZ2U7XG5leHBvcnQgdmFyIG1vbmRheXMgPSBtb25kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHR1ZXNkYXlzID0gdHVlc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgd2VkbmVzZGF5cyA9IHdlZG5lc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdGh1cnNkYXlzID0gdGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIGZyaWRheXMgPSBmcmlkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHNhdHVyZGF5cyA9IHNhdHVyZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5LCBkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIGRheSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uRGF5O1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXREYXRlKCkgLSAxO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRheTtcbmV4cG9ydCB2YXIgZGF5cyA9IGRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXIsIGR1cmF0aW9uTWludXRlLCBkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIGhvdXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQgLSBkYXRlLmdldE1pbnV0ZXMoKSAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvdXI7XG5leHBvcnQgdmFyIGhvdXJzID0gaG91ci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBtaW51dGUgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbWludXRlO1xuZXhwb3J0IHZhciBtaW51dGVzID0gbWludXRlLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG52YXIgc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgc2Vjb25kO1xuZXhwb3J0IHZhciBzZWNvbmRzID0gc2Vjb25kLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciBtaWxsaXNlY29uZCA9IGludGVydmFsKGZ1bmN0aW9uKCkge1xuICAvLyBub29wXG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kIC0gc3RhcnQ7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxubWlsbGlzZWNvbmQuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIGsgPSBNYXRoLmZsb29yKGspO1xuICBpZiAoIWlzRmluaXRlKGspIHx8ICEoayA+IDApKSByZXR1cm4gbnVsbDtcbiAgaWYgKCEoayA+IDEpKSByZXR1cm4gbWlsbGlzZWNvbmQ7XG4gIHJldHVybiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRUaW1lKE1hdGguZmxvb3IoZGF0ZSAvIGspICogayk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogayk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGs7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWlsbGlzZWNvbmQ7XG5leHBvcnQgdmFyIG1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uV2Vla30gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZnVuY3Rpb24gdXRjV2Vla2RheShpKSB7XG4gIHJldHVybiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHV0Y1N1bmRheSA9IHV0Y1dlZWtkYXkoMCk7XG5leHBvcnQgdmFyIHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHV0Y1R1ZXNkYXkgPSB1dGNXZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXkgPSB1dGNXZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgdmFyIHV0Y0ZyaWRheSA9IHV0Y1dlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHV0Y1NhdHVyZGF5ID0gdXRjV2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNNb25kYXlzID0gdXRjTW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5cyA9IHV0Y1R1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1RodXJzZGF5cyA9IHV0Y1RodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNGcmlkYXlzID0gdXRjRnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkRheX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHV0Y0RheSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjRGF5O1xuZXhwb3J0IHZhciB1dGNEYXlzID0gdXRjRGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciB1dGNZZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGNZZWFyO1xuZXhwb3J0IHZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG4iLCJpbXBvcnQge1xuICB0aW1lRGF5LFxuICB0aW1lU3VuZGF5LFxuICB0aW1lTW9uZGF5LFxuICB0aW1lVGh1cnNkYXksXG4gIHRpbWVZZWFyLFxuICB1dGNEYXksXG4gIHV0Y1N1bmRheSxcbiAgdXRjTW9uZGF5LFxuICB1dGNUaHVyc2RheSxcbiAgdXRjWWVhclxufSBmcm9tIFwiZDMtdGltZVwiO1xuXG5mdW5jdGlvbiBsb2NhbERhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xufVxuXG5mdW5jdGlvbiB1dGNEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xufVxuXG5mdW5jdGlvbiBuZXdEYXRlKHksIG0sIGQpIHtcbiAgcmV0dXJuIHt5OiB5LCBtOiBtLCBkOiBkLCBIOiAwLCBNOiAwLCBTOiAwLCBMOiAwfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TG9jYWxlKGxvY2FsZSkge1xuICB2YXIgbG9jYWxlX2RhdGVUaW1lID0gbG9jYWxlLmRhdGVUaW1lLFxuICAgICAgbG9jYWxlX2RhdGUgPSBsb2NhbGUuZGF0ZSxcbiAgICAgIGxvY2FsZV90aW1lID0gbG9jYWxlLnRpbWUsXG4gICAgICBsb2NhbGVfcGVyaW9kcyA9IGxvY2FsZS5wZXJpb2RzLFxuICAgICAgbG9jYWxlX3dlZWtkYXlzID0gbG9jYWxlLmRheXMsXG4gICAgICBsb2NhbGVfc2hvcnRXZWVrZGF5cyA9IGxvY2FsZS5zaG9ydERheXMsXG4gICAgICBsb2NhbGVfbW9udGhzID0gbG9jYWxlLm1vbnRocyxcbiAgICAgIGxvY2FsZV9zaG9ydE1vbnRocyA9IGxvY2FsZS5zaG9ydE1vbnRocztcblxuICB2YXIgcGVyaW9kUmUgPSBmb3JtYXRSZShsb2NhbGVfcGVyaW9kcyksXG4gICAgICBwZXJpb2RMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgd2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIG1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfbW9udGhzKSxcbiAgICAgIG1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9tb250aHMpLFxuICAgICAgc2hvcnRNb250aFJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0TW9udGhzKTtcblxuICB2YXIgZm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0U2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0TWljcm9zZWNvbmRzLFxuICAgIFwiSFwiOiBmb3JtYXRIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdEhvdXIxMixcbiAgICBcImpcIjogZm9ybWF0RGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdE1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFF1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0Wm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgdXRjRm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRVVENTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0VVRDTWljcm9zZWNvbmRzLFxuICAgIFwiSFwiOiBmb3JtYXRVVENIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdFVUQ0hvdXIxMixcbiAgICBcImpcIjogZm9ybWF0VVRDRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRVVENNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdFVUQ01vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRVVENNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRVVENQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFVUQ1F1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRVVENTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRVVENXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRVVENZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRVVENGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgcGFyc2VzID0ge1xuICAgIFwiYVwiOiBwYXJzZVNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogcGFyc2VXZWVrZGF5LFxuICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXG4gICAgXCJCXCI6IHBhcnNlTW9udGgsXG4gICAgXCJjXCI6IHBhcnNlTG9jYWxlRGF0ZVRpbWUsXG4gICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImVcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBwYXJzZU1pY3Jvc2Vjb25kcyxcbiAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJJXCI6IHBhcnNlSG91cjI0LFxuICAgIFwialwiOiBwYXJzZURheU9mWWVhcixcbiAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IHBhcnNlTWludXRlcyxcbiAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgXCJxXCI6IHBhcnNlUXVhcnRlcixcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIFopIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld0RhdGUoMTkwMCwgdW5kZWZpbmVkLCAxKSxcbiAgICAgICAgICBpID0gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcgKz0gXCJcIiwgMCksXG4gICAgICAgICAgd2VlaywgZGF5O1xuICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIElmIGEgVU5JWCB0aW1lc3RhbXAgaXMgc3BlY2lmaWVkLCByZXR1cm4gaXQuXG4gICAgICBpZiAoXCJRXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQuUSk7XG4gICAgICBpZiAoXCJzXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQucyAqIDEwMDAgKyAoXCJMXCIgaW4gZCA/IGQuTCA6IDApKTtcblxuICAgICAgLy8gSWYgdGhpcyBpcyB1dGNQYXJzZSwgbmV2ZXIgdXNlIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAgICAgIGlmIChaICYmICEoXCJaXCIgaW4gZCkpIGQuWiA9IDA7XG5cbiAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXG4gICAgICBpZiAoXCJwXCIgaW4gZCkgZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjtcblxuICAgICAgLy8gSWYgdGhlIG1vbnRoIHdhcyBub3Qgc3BlY2lmaWVkLCBpbmhlcml0IGZyb20gdGhlIHF1YXJ0ZXIuXG4gICAgICBpZiAoZC5tID09PSB1bmRlZmluZWQpIGQubSA9IFwicVwiIGluIGQgPyBkLnEgOiAwO1xuXG4gICAgICAvLyBDb252ZXJ0IGRheS1vZi13ZWVrIGFuZCB3ZWVrLW9mLXllYXIgdG8gZGF5LW9mLXllYXIuXG4gICAgICBpZiAoXCJWXCIgaW4gZCkge1xuICAgICAgICBpZiAoZC5WIDwgMSB8fCBkLlYgPiA1MykgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSAxO1xuICAgICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0VVRDRGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdXRjTW9uZGF5LmNlaWwod2VlaykgOiB1dGNNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHV0Y0RheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldFVUQ0RhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2VlayA9IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0VVRDRGF5KCkgOiBsb2NhbERhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXREYXkoKTtcbiAgICAgICAgZC5tID0gMDtcbiAgICAgICAgZC5kID0gXCJXXCIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRheSArIDUpICUgNyA6IGQudyArIGQuVSAqIDcgLSAoZGF5ICsgNikgJSA3O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWVsZHMgYXJlIGludGVycHJldGVkIGFzIFVUQyBhbmQgdGhlblxuICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cbiAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgIGQuSCArPSBkLlogLyAxMDAgfCAwO1xuICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xuICAgICAgICByZXR1cm4gdXRjRGF0ZShkKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxuICAgICAgcmV0dXJuIGxvY2FsRGF0ZShkKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcsIGopIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICBtID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgYyxcbiAgICAgICAgcGFyc2U7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIGlmIChqID49IG0pIHJldHVybiAtMTtcbiAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckNvZGVBdChpKyspO1xuICAgICAgaWYgKGMgPT09IDM3KSB7XG4gICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckF0KGkrKyk7XG4gICAgICAgIHBhcnNlID0gcGFyc2VzW2MgaW4gcGFkcyA/IHNwZWNpZmllci5jaGFyQXQoaSsrKSA6IGNdO1xuICAgICAgICBpZiAoIXBhcnNlIHx8ICgoaiA9IHBhcnNlKGQsIHN0cmluZywgaikpIDwgMCkpIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYyAhPSBzdHJpbmcuY2hhckNvZGVBdChqKyspKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gajtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUGVyaW9kKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gcGVyaW9kUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQucCA9IHBlcmlvZExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0V2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0V2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSBzaG9ydFdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gd2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSB3ZWVrZGF5TG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0TW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gc2hvcnRNb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gbW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gbW9udGhMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGVUaW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX3RpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFBlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRRdWFydGVyKGQpIHtcbiAgICByZXR1cm4gMSArIH5+KGQuZ2V0TW9udGgoKSAvIDMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDTW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0VVRDSG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUXVhcnRlcihkKSB7XG4gICAgcmV0dXJuIDEgKyB+fihkLmdldFVUQ01vbnRoKCkgLyAzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgZmFsc2UpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfSxcbiAgICB1dGNGb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIHV0Y0Zvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICB1dGNQYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCB0cnVlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHBhZHMgPSB7XCItXCI6IFwiXCIsIFwiX1wiOiBcIiBcIiwgXCIwXCI6IFwiMFwifSxcbiAgICBudW1iZXJSZSA9IC9eXFxzKlxcZCsvLCAvLyBub3RlOiBpZ25vcmVzIG5leHQgZGlyZWN0aXZlXG4gICAgcGVyY2VudFJlID0gL14lLyxcbiAgICByZXF1b3RlUmUgPSAvW1xcXFxeJCorP3xbXFxdKCkue31dL2c7XG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZSwgZmlsbCwgd2lkdGgpIHtcbiAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyBcIi1cIiA6IFwiXCIsXG4gICAgICBzdHJpbmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArIFwiXCIsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICByZXR1cm4gc2lnbiArIChsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgKyBzdHJpbmcgOiBzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiByZXF1b3RlKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZShyZXF1b3RlUmUsIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZShuYW1lcykge1xuICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChyZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLCBcImlcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExvb2t1cChuYW1lcykge1xuICB2YXIgbWFwID0ge30sIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIG1hcFtuYW1lc1tpXS50b0xvd2VyQ2FzZSgpXSA9IGk7XG4gIHJldHVybiBtYXA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLncgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC51ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuVSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlcklTTyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlYgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5XID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdWxsWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNCkpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0gKyAoK25bMF0gPiA2OCA/IDE5MDAgOiAyMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVpvbmUoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gL14oWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/Ly5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLlogPSBuWzFdID8gMCA6IC0oblsyXSArIChuWzNdIHx8IFwiMDBcIikpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUXVhcnRlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnEgPSBuWzBdICogMyAtIDMsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pY3Jvc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLkwgPSBNYXRoLmZsb29yKG5bMF0gLyAxMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlEgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5zID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB0aW1lRGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lU3VuZGF5LmNvdW50KHRpbWVZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKHRpbWVUaHVyc2RheS5jb3VudCh0aW1lWWVhcihkKSwgZCkgKyAodGltZVllYXIoZCkuZ2V0RGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldERheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lTW9uZGF5LmNvdW50KHRpbWVZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRab25lKGQpIHtcbiAgdmFyIHogPSBkLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiAoeiA+IDAgPyBcIi1cIiA6ICh6ICo9IC0xLCBcIitcIikpXG4gICAgICArIHBhZCh6IC8gNjAgfCAwLCBcIjBcIiwgMilcbiAgICAgICsgcGFkKHogJSA2MCwgXCIwXCIsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0RhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHV0Y0RheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDU2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRvdyA9IGQuZ2V0VVRDRGF5KCk7XG4gIHJldHVybiBkb3cgPT09IDAgPyA3IDogZG93O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNTdW5kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENab25lKCkge1xuICByZXR1cm4gXCIrMDAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMaXRlcmFsUGVyY2VudCgpIHtcbiAgcmV0dXJuIFwiJVwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wKGQpIHtcbiAgcmV0dXJuICtkO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyhkKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKCtkIC8gMTAwMCk7XG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciB0aW1lRm9ybWF0O1xuZXhwb3J0IHZhciB0aW1lUGFyc2U7XG5leHBvcnQgdmFyIHV0Y0Zvcm1hdDtcbmV4cG9ydCB2YXIgdXRjUGFyc2U7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICBkYXRlVGltZTogXCIleCwgJVhcIixcbiAgZGF0ZTogXCIlLW0vJS1kLyVZXCIsXG4gIHRpbWU6IFwiJS1JOiVNOiVTICVwXCIsXG4gIHBlcmlvZHM6IFtcIkFNXCIsIFwiUE1cIl0sXG4gIGRheXM6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdLFxuICBzaG9ydERheXM6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgbW9udGhzOiBbXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXSxcbiAgc2hvcnRNb250aHM6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIHRpbWVGb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICB0aW1lUGFyc2UgPSBsb2NhbGUucGFyc2U7XG4gIHV0Y0Zvcm1hdCA9IGxvY2FsZS51dGNGb3JtYXQ7XG4gIHV0Y1BhcnNlID0gbG9jYWxlLnV0Y1BhcnNlO1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwiaW1wb3J0IHtiaXNlY3RvciwgdGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHt0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVNaWxsaXNlY29uZH0gZnJvbSBcImQzLXRpbWVcIjtcbmltcG9ydCB7dGltZUZvcm1hdH0gZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5pbXBvcnQge21hcH0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCBjb250aW51b3VzLCB7Y29weSwgaWRlbnRpdHl9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5pbXBvcnQgbmljZSBmcm9tIFwiLi9uaWNlXCI7XG5cbnZhciBkdXJhdGlvblNlY29uZCA9IDEwMDAsXG4gICAgZHVyYXRpb25NaW51dGUgPSBkdXJhdGlvblNlY29uZCAqIDYwLFxuICAgIGR1cmF0aW9uSG91ciA9IGR1cmF0aW9uTWludXRlICogNjAsXG4gICAgZHVyYXRpb25EYXkgPSBkdXJhdGlvbkhvdXIgKiAyNCxcbiAgICBkdXJhdGlvbldlZWsgPSBkdXJhdGlvbkRheSAqIDcsXG4gICAgZHVyYXRpb25Nb250aCA9IGR1cmF0aW9uRGF5ICogMzAsXG4gICAgZHVyYXRpb25ZZWFyID0gZHVyYXRpb25EYXkgKiAzNjU7XG5cbmZ1bmN0aW9uIGRhdGUodCkge1xuICByZXR1cm4gbmV3IERhdGUodCk7XG59XG5cbmZ1bmN0aW9uIG51bWJlcih0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgRGF0ZSA/ICt0IDogK25ldyBEYXRlKCt0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCwgZm9ybWF0KSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoaWRlbnRpdHksIGlkZW50aXR5KSxcbiAgICAgIGludmVydCA9IHNjYWxlLmludmVydCxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICB2YXIgZm9ybWF0TWlsbGlzZWNvbmQgPSBmb3JtYXQoXCIuJUxcIiksXG4gICAgICBmb3JtYXRTZWNvbmQgPSBmb3JtYXQoXCI6JVNcIiksXG4gICAgICBmb3JtYXRNaW51dGUgPSBmb3JtYXQoXCIlSTolTVwiKSxcbiAgICAgIGZvcm1hdEhvdXIgPSBmb3JtYXQoXCIlSSAlcFwiKSxcbiAgICAgIGZvcm1hdERheSA9IGZvcm1hdChcIiVhICVkXCIpLFxuICAgICAgZm9ybWF0V2VlayA9IGZvcm1hdChcIiViICVkXCIpLFxuICAgICAgZm9ybWF0TW9udGggPSBmb3JtYXQoXCIlQlwiKSxcbiAgICAgIGZvcm1hdFllYXIgPSBmb3JtYXQoXCIlWVwiKTtcblxuICB2YXIgdGlja0ludGVydmFscyA9IFtcbiAgICBbc2Vjb25kLCAgMSwgICAgICBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDE1LCAxNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAzMCwgMzAgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsICA1LCAgNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAxNSwgMTUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgIFsgIGhvdXIsICAxLCAgICAgIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgMywgIDMgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsIDEyLCAxMiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICAgZGF5LCAgMSwgICAgICBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgIFsgIHdlZWssICAxLCAgICAgIGR1cmF0aW9uV2VlayAgXSxcbiAgICBbIG1vbnRoLCAgMSwgICAgICBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgIFsgIHllYXIsICAxLCAgICAgIGR1cmF0aW9uWWVhciAgXVxuICBdO1xuXG4gIGZ1bmN0aW9uIHRpY2tGb3JtYXQoZGF0ZSkge1xuICAgIHJldHVybiAoc2Vjb25kKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbGxpc2Vjb25kXG4gICAgICAgIDogbWludXRlKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdFNlY29uZFxuICAgICAgICA6IGhvdXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWludXRlXG4gICAgICAgIDogZGF5KGRhdGUpIDwgZGF0ZSA/IGZvcm1hdEhvdXJcbiAgICAgICAgOiBtb250aChkYXRlKSA8IGRhdGUgPyAod2VlayhkYXRlKSA8IGRhdGUgPyBmb3JtYXREYXkgOiBmb3JtYXRXZWVrKVxuICAgICAgICA6IHllYXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TW9udGhcbiAgICAgICAgOiBmb3JtYXRZZWFyKShkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2tJbnRlcnZhbChpbnRlcnZhbCwgc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoaW50ZXJ2YWwgPT0gbnVsbCkgaW50ZXJ2YWwgPSAxMDtcblxuICAgIC8vIElmIGEgZGVzaXJlZCB0aWNrIGNvdW50IGlzIHNwZWNpZmllZCwgcGljayBhIHJlYXNvbmFibGUgdGljayBpbnRlcnZhbFxuICAgIC8vIGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgdGhlIGRvbWFpbiBhbmQgYSByb3VnaCBlc3RpbWF0ZSBvZiB0aWNrIHNpemUuXG4gICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgaW50ZXJ2YWwgaXMgYWxyZWFkeSBhIHRpbWUgaW50ZXJ2YWwgYW5kIHVzZSBpdC5cbiAgICBpZiAodHlwZW9mIGludGVydmFsID09PSBcIm51bWJlclwiKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGludGVydmFsLFxuICAgICAgICAgIGkgPSBiaXNlY3RvcihmdW5jdGlvbihpKSB7IHJldHVybiBpWzJdOyB9KS5yaWdodCh0aWNrSW50ZXJ2YWxzLCB0YXJnZXQpO1xuICAgICAgaWYgKGkgPT09IHRpY2tJbnRlcnZhbHMubGVuZ3RoKSB7XG4gICAgICAgIHN0ZXAgPSB0aWNrU3RlcChzdGFydCAvIGR1cmF0aW9uWWVhciwgc3RvcCAvIGR1cmF0aW9uWWVhciwgaW50ZXJ2YWwpO1xuICAgICAgICBpbnRlcnZhbCA9IHllYXI7XG4gICAgICB9IGVsc2UgaWYgKGkpIHtcbiAgICAgICAgaSA9IHRpY2tJbnRlcnZhbHNbdGFyZ2V0IC8gdGlja0ludGVydmFsc1tpIC0gMV1bMl0gPCB0aWNrSW50ZXJ2YWxzW2ldWzJdIC8gdGFyZ2V0ID8gaSAtIDEgOiBpXTtcbiAgICAgICAgc3RlcCA9IGlbMV07XG4gICAgICAgIGludGVydmFsID0gaVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXAgPSBNYXRoLm1heCh0aWNrU3RlcChzdGFydCwgc3RvcCwgaW50ZXJ2YWwpLCAxKTtcbiAgICAgICAgaW50ZXJ2YWwgPSBtaWxsaXNlY29uZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RlcCA9PSBudWxsID8gaW50ZXJ2YWwgOiBpbnRlcnZhbC5ldmVyeShzdGVwKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoaW52ZXJ0KHkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBkb21haW4obWFwLmNhbGwoXywgbnVtYmVyKSkgOiBkb21haW4oKS5tYXAoZGF0ZSk7XG4gIH07XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihpbnRlcnZhbCwgc3RlcCkge1xuICAgIHZhciBkID0gZG9tYWluKCksXG4gICAgICAgIHQwID0gZFswXSxcbiAgICAgICAgdDEgPSBkW2QubGVuZ3RoIC0gMV0sXG4gICAgICAgIHIgPSB0MSA8IHQwLFxuICAgICAgICB0O1xuICAgIGlmIChyKSB0ID0gdDAsIHQwID0gdDEsIHQxID0gdDtcbiAgICB0ID0gdGlja0ludGVydmFsKGludGVydmFsLCB0MCwgdDEsIHN0ZXApO1xuICAgIHQgPSB0ID8gdC5yYW5nZSh0MCwgdDEgKyAxKSA6IFtdOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgIHJldHVybiByID8gdC5yZXZlcnNlKCkgOiB0O1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgcmV0dXJuIHNwZWNpZmllciA9PSBudWxsID8gdGlja0Zvcm1hdCA6IGZvcm1hdChzcGVjaWZpZXIpO1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihpbnRlcnZhbCwgc3RlcCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIChpbnRlcnZhbCA9IHRpY2tJbnRlcnZhbChpbnRlcnZhbCwgZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBzdGVwKSlcbiAgICAgICAgPyBkb21haW4obmljZShkLCBpbnRlcnZhbCkpXG4gICAgICAgIDogc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBjYWxlbmRhcih5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsIGZvcm1hdCkpO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoY2FsZW5kYXIodGltZVllYXIsIHRpbWVNb250aCwgdGltZVdlZWssIHRpbWVEYXksIHRpbWVIb3VyLCB0aW1lTWludXRlLCB0aW1lU2Vjb25kLCB0aW1lTWlsbGlzZWNvbmQsIHRpbWVGb3JtYXQpLmRvbWFpbihbbmV3IERhdGUoMjAwMCwgMCwgMSksIG5ldyBEYXRlKDIwMDAsIDAsIDIpXSksIGFyZ3VtZW50cyk7XG59XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIHV0Y01vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01vbnRoO1xuZXhwb3J0IHZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXJ9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNIb3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDSG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNIb3VyO1xuZXhwb3J0IHZhciB1dGNIb3VycyA9IHV0Y0hvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNNaW51dGUgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDU2Vjb25kcygwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDTWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01pbnV0ZTtcbmV4cG9ydCB2YXIgdXRjTWludXRlcyA9IHV0Y01pbnV0ZS5yYW5nZTtcbiIsImV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnM7XG5leHBvcnQgdmFyIGF0YW4yID0gTWF0aC5hdGFuMjtcbmV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgc2luID0gTWF0aC5zaW47XG5leHBvcnQgdmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG5cbmV4cG9ydCB2YXIgZXBzaWxvbiA9IDFlLTEyO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgdGF1ID0gMiAqIHBpO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNvcyh4KSB7XG4gIHJldHVybiB4ID4gMSA/IDAgOiB4IDwgLTEgPyBwaSA6IE1hdGguYWNvcyh4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzaW4oeCkge1xuICByZXR1cm4geCA+PSAxID8gaGFsZlBpIDogeCA8PSAtMSA/IC1oYWxmUGkgOiBNYXRoLmFzaW4oeCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb25zdGFudCgpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImZ1bmN0aW9uIExpbmVhcihjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5MaW5lYXIucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpOyBicmVhaztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBMaW5lYXIoY29udGV4dCk7XG59XG4iLCJpbXBvcnQgY3VydmVMaW5lYXIgZnJvbSBcIi4vbGluZWFyXCI7XG5cbmV4cG9ydCB2YXIgY3VydmVSYWRpYWxMaW5lYXIgPSBjdXJ2ZVJhZGlhbChjdXJ2ZUxpbmVhcik7XG5cbmZ1bmN0aW9uIFJhZGlhbChjdXJ2ZSkge1xuICB0aGlzLl9jdXJ2ZSA9IGN1cnZlO1xufVxuXG5SYWRpYWwucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2N1cnZlLmFyZWFTdGFydCgpO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9jdXJ2ZS5hcmVhRW5kKCk7XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fY3VydmUubGluZVN0YXJ0KCk7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2N1cnZlLmxpbmVFbmQoKTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKGEsIHIpIHtcbiAgICB0aGlzLl9jdXJ2ZS5wb2ludChyICogTWF0aC5zaW4oYSksIHIgKiAtTWF0aC5jb3MoYSkpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdXJ2ZVJhZGlhbChjdXJ2ZSkge1xuXG4gIGZ1bmN0aW9uIHJhZGlhbChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBSYWRpYWwoY3VydmUoY29udGV4dCkpO1xuICB9XG5cbiAgcmFkaWFsLl9jdXJ2ZSA9IGN1cnZlO1xuXG4gIHJldHVybiByYWRpYWw7XG59XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuIiwidmFyIHRhbjMwID0gTWF0aC5zcXJ0KDEgLyAzKSxcbiAgICB0YW4zMF8yID0gdGFuMzAgKiAyO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgeSA9IE1hdGguc3FydChzaXplIC8gdGFuMzBfMiksXG4gICAgICAgIHggPSB5ICogdGFuMzA7XG4gICAgY29udGV4dC5tb3ZlVG8oMCwgLXkpO1xuICAgIGNvbnRleHQubGluZVRvKHgsIDApO1xuICAgIGNvbnRleHQubGluZVRvKDAsIHkpO1xuICAgIGNvbnRleHQubGluZVRvKC14LCAwKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtwaSwgdGF1fSBmcm9tIFwiLi4vbWF0aFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgciA9IE1hdGguc3FydChzaXplIC8gcGkpO1xuICAgIGNvbnRleHQubW92ZVRvKHIsIDApO1xuICAgIGNvbnRleHQuYXJjKDAsIDAsIHIsIDAsIHRhdSk7XG4gIH1cbn07XG4iLCJpbXBvcnQge3BpLCB0YXV9IGZyb20gXCIuLi9tYXRoXCI7XG5cbnZhciBrYSA9IDAuODkwODEzMDkxNTI5Mjg1MjI4MTAsXG4gICAga3IgPSBNYXRoLnNpbihwaSAvIDEwKSAvIE1hdGguc2luKDcgKiBwaSAvIDEwKSxcbiAgICBreCA9IE1hdGguc2luKHRhdSAvIDEwKSAqIGtyLFxuICAgIGt5ID0gLU1hdGguY29zKHRhdSAvIDEwKSAqIGtyO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgciA9IE1hdGguc3FydChzaXplICoga2EpLFxuICAgICAgICB4ID0ga3ggKiByLFxuICAgICAgICB5ID0ga3kgKiByO1xuICAgIGNvbnRleHQubW92ZVRvKDAsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4LCB5KTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IDU7ICsraSkge1xuICAgICAgdmFyIGEgPSB0YXUgKiBpIC8gNSxcbiAgICAgICAgICBjID0gTWF0aC5jb3MoYSksXG4gICAgICAgICAgcyA9IE1hdGguc2luKGEpO1xuICAgICAgY29udGV4dC5saW5lVG8ocyAqIHIsIC1jICogcik7XG4gICAgICBjb250ZXh0LmxpbmVUbyhjICogeCAtIHMgKiB5LCBzICogeCArIGMgKiB5KTtcbiAgICB9XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge31cbiIsInZhciBzcXJ0MyA9IE1hdGguc3FydCgzKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3OiBmdW5jdGlvbihjb250ZXh0LCBzaXplKSB7XG4gICAgdmFyIHkgPSAtTWF0aC5zcXJ0KHNpemUgLyAoc3FydDMgKiAzKSk7XG4gICAgY29udGV4dC5tb3ZlVG8oMCwgeSAqIDIpO1xuICAgIGNvbnRleHQubGluZVRvKC1zcXJ0MyAqIHksIC15KTtcbiAgICBjb250ZXh0LmxpbmVUbyhzcXJ0MyAqIHksIC15KTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwidmFyIGMgPSAtMC41LFxuICAgIHMgPSBNYXRoLnNxcnQoMykgLyAyLFxuICAgIGsgPSAxIC8gTWF0aC5zcXJ0KDEyKSxcbiAgICBhID0gKGsgLyAyICsgMSkgKiAzO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgciA9IE1hdGguc3FydChzaXplIC8gYSksXG4gICAgICAgIHgwID0gciAvIDIsXG4gICAgICAgIHkwID0gciAqIGssXG4gICAgICAgIHgxID0geDAsXG4gICAgICAgIHkxID0gciAqIGsgKyByLFxuICAgICAgICB4MiA9IC14MSxcbiAgICAgICAgeTIgPSB5MTtcbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDAgLSBzICogeTAsIHMgKiB4MCArIGMgKiB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgxIC0gcyAqIHkxLCBzICogeDEgKyBjICogeTEpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MiAtIHMgKiB5MiwgcyAqIHgyICsgYyAqIHkyKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDAgKyBzICogeTAsIGMgKiB5MCAtIHMgKiB4MCk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgxICsgcyAqIHkxLCBjICogeTEgLSBzICogeDEpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MiArIHMgKiB5MiwgYyAqIHkyIC0gcyAqIHgyKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIHBvaW50KHRoYXQsIHgsIHkpIHtcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKFxuICAgICgyICogdGhhdC5feDAgKyB0aGF0Ll94MSkgLyAzLFxuICAgICgyICogdGhhdC5feTAgKyB0aGF0Ll95MSkgLyAzLFxuICAgICh0aGF0Ll94MCArIDIgKiB0aGF0Ll94MSkgLyAzLFxuICAgICh0aGF0Ll95MCArIDIgKiB0aGF0Ll95MSkgLyAzLFxuICAgICh0aGF0Ll94MCArIDQgKiB0aGF0Ll94MSArIHgpIC8gNixcbiAgICAodGhhdC5feTAgKyA0ICogdGhhdC5feTEgKyB5KSAvIDZcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJhc2lzKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkJhc2lzLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl94MSwgdGhpcy5feTEpOyAvLyBwcm9jZWVkXG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLCB0aGlzLl95MSk7IGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5fY29udGV4dC5saW5lVG8oKDUgKiB0aGlzLl94MCArIHRoaXMuX3gxKSAvIDYsICg1ICogdGhpcy5feTAgKyB0aGlzLl95MSkgLyA2KTsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQmFzaXMoY29udGV4dCk7XG59XG4iLCJpbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcFwiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vYmFzaXNcIjtcblxuZnVuY3Rpb24gQmFzaXNDbG9zZWQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuQmFzaXNDbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gdGhpcy5feTMgPSB0aGlzLl95NCA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MiwgdGhpcy5feTIpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIgKyAyICogdGhpcy5feDMpIC8gMywgKHRoaXMuX3kyICsgMiAqIHRoaXMuX3kzKSAvIDMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMgKyAyICogdGhpcy5feDIpIC8gMywgKHRoaXMuX3kzICsgMiAqIHRoaXMuX3kyKSAvIDMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gyLCB0aGlzLl95Mik7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NCwgdGhpcy5feTQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gyID0geCwgdGhpcy5feTIgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl94MyA9IHgsIHRoaXMuX3kzID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5feDQgPSB4LCB0aGlzLl95NCA9IHk7IHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCArIDQgKiB0aGlzLl94MSArIHgpIC8gNiwgKHRoaXMuX3kwICsgNCAqIHRoaXMuX3kxICsgeSkgLyA2KTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCYXNpc0Nsb3NlZChjb250ZXh0KTtcbn1cbiIsImltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2Jhc2lzXCI7XG5cbmZ1bmN0aW9uIEJhc2lzT3Blbihjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5CYXNpc09wZW4ucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMykpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB2YXIgeDAgPSAodGhpcy5feDAgKyA0ICogdGhpcy5feDEgKyB4KSAvIDYsIHkwID0gKHRoaXMuX3kwICsgNCAqIHRoaXMuX3kxICsgeSkgLyA2OyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeDAsIHkwKSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgwLCB5MCk7IGJyZWFrO1xuICAgICAgY2FzZSAzOiB0aGlzLl9wb2ludCA9IDQ7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJhc2lzT3Blbihjb250ZXh0KTtcbn1cbiIsImltcG9ydCB7QmFzaXN9IGZyb20gXCIuL2Jhc2lzXCI7XG5cbmZ1bmN0aW9uIEJ1bmRsZShjb250ZXh0LCBiZXRhKSB7XG4gIHRoaXMuX2Jhc2lzID0gbmV3IEJhc2lzKGNvbnRleHQpO1xuICB0aGlzLl9iZXRhID0gYmV0YTtcbn1cblxuQnVuZGxlLnByb3RvdHlwZSA9IHtcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94ID0gW107XG4gICAgdGhpcy5feSA9IFtdO1xuICAgIHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeCA9IHRoaXMuX3gsXG4gICAgICAgIHkgPSB0aGlzLl95LFxuICAgICAgICBqID0geC5sZW5ndGggLSAxO1xuXG4gICAgaWYgKGogPiAwKSB7XG4gICAgICB2YXIgeDAgPSB4WzBdLFxuICAgICAgICAgIHkwID0geVswXSxcbiAgICAgICAgICBkeCA9IHhbal0gLSB4MCxcbiAgICAgICAgICBkeSA9IHlbal0gLSB5MCxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgdDtcblxuICAgICAgd2hpbGUgKCsraSA8PSBqKSB7XG4gICAgICAgIHQgPSBpIC8gajtcbiAgICAgICAgdGhpcy5fYmFzaXMucG9pbnQoXG4gICAgICAgICAgdGhpcy5fYmV0YSAqIHhbaV0gKyAoMSAtIHRoaXMuX2JldGEpICogKHgwICsgdCAqIGR4KSxcbiAgICAgICAgICB0aGlzLl9iZXRhICogeVtpXSArICgxIC0gdGhpcy5fYmV0YSkgKiAoeTAgKyB0ICogZHkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBudWxsO1xuICAgIHRoaXMuX2Jhc2lzLmxpbmVFbmQoKTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl94LnB1c2goK3gpO1xuICAgIHRoaXMuX3kucHVzaCgreSk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYmV0YSkge1xuXG4gIGZ1bmN0aW9uIGJ1bmRsZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGJldGEgPT09IDEgPyBuZXcgQmFzaXMoY29udGV4dCkgOiBuZXcgQnVuZGxlKGNvbnRleHQsIGJldGEpO1xuICB9XG5cbiAgYnVuZGxlLmJldGEgPSBmdW5jdGlvbihiZXRhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYmV0YSk7XG4gIH07XG5cbiAgcmV0dXJuIGJ1bmRsZTtcbn0pKDAuODUpO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIHBvaW50KHRoYXQsIHgsIHkpIHtcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKFxuICAgIHRoYXQuX3gxICsgdGhhdC5fayAqICh0aGF0Ll94MiAtIHRoYXQuX3gwKSxcbiAgICB0aGF0Ll95MSArIHRoYXQuX2sgKiAodGhhdC5feTIgLSB0aGF0Ll95MCksXG4gICAgdGhhdC5feDIgKyB0aGF0Ll9rICogKHRoYXQuX3gxIC0geCksXG4gICAgdGhhdC5feTIgKyB0aGF0Ll9rICogKHRoYXQuX3kxIC0geSksXG4gICAgdGhhdC5feDIsXG4gICAgdGhhdC5feTJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWwucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl94MSA9IHgsIHRoaXMuX3kxID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKHRlbnNpb24pIHtcblxuICBmdW5jdGlvbiBjYXJkaW5hbChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG5ldyBDYXJkaW5hbChjb250ZXh0LCB0ZW5zaW9uKTtcbiAgfVxuXG4gIGNhcmRpbmFsLnRlbnNpb24gPSBmdW5jdGlvbih0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrdGVuc2lvbik7XG4gIH07XG5cbiAgcmV0dXJuIGNhcmRpbmFsO1xufSkoMCk7XG4iLCJpbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcFwiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vY2FyZGluYWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENhcmRpbmFsQ2xvc2VkKGNvbnRleHQsIHRlbnNpb24pIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2sgPSAoMSAtIHRlbnNpb24pIC8gNjtcbn1cblxuQ2FyZGluYWxDbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9IHRoaXMuX3g1ID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSB0aGlzLl95MyA9IHRoaXMuX3k0ID0gdGhpcy5feTUgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDM6IHtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g0LCB0aGlzLl95NCk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDUsIHRoaXMuX3k1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl94MyA9IHgsIHRoaXMuX3kzID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQgPSB4LCB0aGlzLl95NCA9IHkpOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl94NSA9IHgsIHRoaXMuX3k1ID0geTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsQ2xvc2VkKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2NhcmRpbmFsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDYXJkaW5hbE9wZW4oY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbE9wZW4ucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDMpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95MikgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogdGhpcy5fcG9pbnQgPSA0OyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsT3Blbihjb250ZXh0LCB0ZW5zaW9uKTtcbiAgfVxuXG4gIGNhcmRpbmFsLnRlbnNpb24gPSBmdW5jdGlvbih0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrdGVuc2lvbik7XG4gIH07XG5cbiAgcmV0dXJuIGNhcmRpbmFsO1xufSkoMCk7XG4iLCJpbXBvcnQge2Vwc2lsb259IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge0NhcmRpbmFsfSBmcm9tIFwiLi9jYXJkaW5hbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB2YXIgeDEgPSB0aGF0Ll94MSxcbiAgICAgIHkxID0gdGhhdC5feTEsXG4gICAgICB4MiA9IHRoYXQuX3gyLFxuICAgICAgeTIgPSB0aGF0Ll95MjtcblxuICBpZiAodGhhdC5fbDAxX2EgPiBlcHNpbG9uKSB7XG4gICAgdmFyIGEgPSAyICogdGhhdC5fbDAxXzJhICsgMyAqIHRoYXQuX2wwMV9hICogdGhhdC5fbDEyX2EgKyB0aGF0Ll9sMTJfMmEsXG4gICAgICAgIG4gPSAzICogdGhhdC5fbDAxX2EgKiAodGhhdC5fbDAxX2EgKyB0aGF0Ll9sMTJfYSk7XG4gICAgeDEgPSAoeDEgKiBhIC0gdGhhdC5feDAgKiB0aGF0Ll9sMTJfMmEgKyB0aGF0Ll94MiAqIHRoYXQuX2wwMV8yYSkgLyBuO1xuICAgIHkxID0gKHkxICogYSAtIHRoYXQuX3kwICogdGhhdC5fbDEyXzJhICsgdGhhdC5feTIgKiB0aGF0Ll9sMDFfMmEpIC8gbjtcbiAgfVxuXG4gIGlmICh0aGF0Ll9sMjNfYSA+IGVwc2lsb24pIHtcbiAgICB2YXIgYiA9IDIgKiB0aGF0Ll9sMjNfMmEgKyAzICogdGhhdC5fbDIzX2EgKiB0aGF0Ll9sMTJfYSArIHRoYXQuX2wxMl8yYSxcbiAgICAgICAgbSA9IDMgKiB0aGF0Ll9sMjNfYSAqICh0aGF0Ll9sMjNfYSArIHRoYXQuX2wxMl9hKTtcbiAgICB4MiA9ICh4MiAqIGIgKyB0aGF0Ll94MSAqIHRoYXQuX2wyM18yYSAtIHggKiB0aGF0Ll9sMTJfMmEpIC8gbTtcbiAgICB5MiA9ICh5MiAqIGIgKyB0aGF0Ll95MSAqIHRoYXQuX2wyM18yYSAtIHkgKiB0aGF0Ll9sMTJfMmEpIC8gbTtcbiAgfVxuXG4gIHRoYXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh4MSwgeTEsIHgyLCB5MiwgdGhhdC5feDIsIHRoYXQuX3kyKTtcbn1cblxuZnVuY3Rpb24gQ2F0bXVsbFJvbShjb250ZXh0LCBhbHBoYSkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fYWxwaGEgPSBhbHBoYTtcbn1cblxuQ2F0bXVsbFJvbS5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogdGhpcy5wb2ludCh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSwgdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYTtcbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEsIHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYTtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGFscGhhKSB7XG5cbiAgZnVuY3Rpb24gY2F0bXVsbFJvbShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGFscGhhID8gbmV3IENhdG11bGxSb20oY29udGV4dCwgYWxwaGEpIDogbmV3IENhcmRpbmFsKGNvbnRleHQsIDApO1xuICB9XG5cbiAgY2F0bXVsbFJvbS5hbHBoYSA9IGZ1bmN0aW9uKGFscGhhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYWxwaGEpO1xuICB9O1xuXG4gIHJldHVybiBjYXRtdWxsUm9tO1xufSkoMC41KTtcbiIsImltcG9ydCB7Q2FyZGluYWxDbG9zZWR9IGZyb20gXCIuL2NhcmRpbmFsQ2xvc2VkXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcFwiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vY2F0bXVsbFJvbVwiO1xuXG5mdW5jdGlvbiBDYXRtdWxsUm9tQ2xvc2VkKGNvbnRleHQsIGFscGhhKSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl9hbHBoYSA9IGFscGhhO1xufVxuXG5DYXRtdWxsUm9tQ2xvc2VkLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBub29wLFxuICBhcmVhRW5kOiBub29wLFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9IHRoaXMuX3gzID0gdGhpcy5feDQgPSB0aGlzLl94NSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gdGhpcy5feTMgPSB0aGlzLl95NCA9IHRoaXMuX3k1ID0gTmFOO1xuICAgIHRoaXMuX2wwMV9hID0gdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYSA9XG4gICAgdGhpcy5fbDAxXzJhID0gdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhID1cbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDQsIHRoaXMuX3k0KTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NSwgdGhpcy5feTUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG5cbiAgICBpZiAodGhpcy5fcG9pbnQpIHtcbiAgICAgIHZhciB4MjMgPSB0aGlzLl94MiAtIHgsXG4gICAgICAgICAgeTIzID0gdGhpcy5feTIgLSB5O1xuICAgICAgdGhpcy5fbDIzX2EgPSBNYXRoLnNxcnQodGhpcy5fbDIzXzJhID0gTWF0aC5wb3coeDIzICogeDIzICsgeTIzICogeTIzLCB0aGlzLl9hbHBoYSkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl94MyA9IHgsIHRoaXMuX3kzID0geTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQgPSB4LCB0aGlzLl95NCA9IHkpOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl94NSA9IHgsIHRoaXMuX3k1ID0geTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSwgdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYTtcbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEsIHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYTtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGFscGhhKSB7XG5cbiAgZnVuY3Rpb24gY2F0bXVsbFJvbShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGFscGhhID8gbmV3IENhdG11bGxSb21DbG9zZWQoY29udGV4dCwgYWxwaGEpIDogbmV3IENhcmRpbmFsQ2xvc2VkKGNvbnRleHQsIDApO1xuICB9XG5cbiAgY2F0bXVsbFJvbS5hbHBoYSA9IGZ1bmN0aW9uKGFscGhhKSB7XG4gICAgcmV0dXJuIGN1c3RvbSgrYWxwaGEpO1xuICB9O1xuXG4gIHJldHVybiBjYXRtdWxsUm9tO1xufSkoMC41KTtcbiIsImltcG9ydCB7Q2FyZGluYWxPcGVufSBmcm9tIFwiLi9jYXJkaW5hbE9wZW5cIjtcbmltcG9ydCB7cG9pbnR9IGZyb20gXCIuL2NhdG11bGxSb21cIjtcblxuZnVuY3Rpb24gQ2F0bXVsbFJvbU9wZW4oY29udGV4dCwgYWxwaGEpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2FscGhhID0gYWxwaGE7XG59XG5cbkNhdG11bGxSb21PcGVuLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IE5hTjtcbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2EgPVxuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYSA9XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMykpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuXG4gICAgaWYgKHRoaXMuX3BvaW50KSB7XG4gICAgICB2YXIgeDIzID0gdGhpcy5feDIgLSB4LFxuICAgICAgICAgIHkyMyA9IHRoaXMuX3kyIC0geTtcbiAgICAgIHRoaXMuX2wyM19hID0gTWF0aC5zcXJ0KHRoaXMuX2wyM18yYSA9IE1hdGgucG93KHgyMyAqIHgyMyArIHkyMyAqIHkyMywgdGhpcy5fYWxwaGEpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95MikgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MiwgdGhpcy5feTIpOyBicmVhaztcbiAgICAgIGNhc2UgMzogdGhpcy5fcG9pbnQgPSA0OyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSwgdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYTtcbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEsIHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYTtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHRoaXMuX3gyLCB0aGlzLl94MiA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB0aGlzLl95MiwgdGhpcy5feTIgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gY3VzdG9tKGFscGhhKSB7XG5cbiAgZnVuY3Rpb24gY2F0bXVsbFJvbShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGFscGhhID8gbmV3IENhdG11bGxSb21PcGVuKGNvbnRleHQsIGFscGhhKSA6IG5ldyBDYXJkaW5hbE9wZW4oY29udGV4dCwgMCk7XG4gIH1cblxuICBjYXRtdWxsUm9tLmFscGhhID0gZnVuY3Rpb24oYWxwaGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCthbHBoYSk7XG4gIH07XG5cbiAgcmV0dXJuIGNhdG11bGxSb207XG59KSgwLjUpO1xuIiwiaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3BcIjtcblxuZnVuY3Rpb24gTGluZWFyQ2xvc2VkKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhckNsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9wb2ludCkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAodGhpcy5fcG9pbnQpIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgIGVsc2UgdGhpcy5fcG9pbnQgPSAxLCB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhckNsb3NlZChjb250ZXh0KTtcbn1cbiIsImZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgc2xvcGVzIG9mIHRoZSB0YW5nZW50cyAoSGVybWl0ZS10eXBlIGludGVycG9sYXRpb24pIGJhc2VkIG9uXG4vLyB0aGUgZm9sbG93aW5nIHBhcGVyOiBTdGVmZmVuLCBNLiAxOTkwLiBBIFNpbXBsZSBNZXRob2QgZm9yIE1vbm90b25pY1xuLy8gSW50ZXJwb2xhdGlvbiBpbiBPbmUgRGltZW5zaW9uLiBBc3Ryb25vbXkgYW5kIEFzdHJvcGh5c2ljcywgVm9sLiAyMzksIE5PLlxuLy8gTk9WKElJKSwgUC4gNDQzLCAxOTkwLlxuZnVuY3Rpb24gc2xvcGUzKHRoYXQsIHgyLCB5Mikge1xuICB2YXIgaDAgPSB0aGF0Ll94MSAtIHRoYXQuX3gwLFxuICAgICAgaDEgPSB4MiAtIHRoYXQuX3gxLFxuICAgICAgczAgPSAodGhhdC5feTEgLSB0aGF0Ll95MCkgLyAoaDAgfHwgaDEgPCAwICYmIC0wKSxcbiAgICAgIHMxID0gKHkyIC0gdGhhdC5feTEpIC8gKGgxIHx8IGgwIDwgMCAmJiAtMCksXG4gICAgICBwID0gKHMwICogaDEgKyBzMSAqIGgwKSAvIChoMCArIGgxKTtcbiAgcmV0dXJuIChzaWduKHMwKSArIHNpZ24oczEpKSAqIE1hdGgubWluKE1hdGguYWJzKHMwKSwgTWF0aC5hYnMoczEpLCAwLjUgKiBNYXRoLmFicyhwKSkgfHwgMDtcbn1cblxuLy8gQ2FsY3VsYXRlIGEgb25lLXNpZGVkIHNsb3BlLlxuZnVuY3Rpb24gc2xvcGUyKHRoYXQsIHQpIHtcbiAgdmFyIGggPSB0aGF0Ll94MSAtIHRoYXQuX3gwO1xuICByZXR1cm4gaCA/ICgzICogKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gaCAtIHQpIC8gMiA6IHQ7XG59XG5cbi8vIEFjY29yZGluZyB0byBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJpY19IZXJtaXRlX3NwbGluZSNSZXByZXNlbnRhdGlvbnNcbi8vIFwieW91IGNhbiBleHByZXNzIGN1YmljIEhlcm1pdGUgaW50ZXJwb2xhdGlvbiBpbiB0ZXJtcyBvZiBjdWJpYyBCw6l6aWVyIGN1cnZlc1xuLy8gd2l0aCByZXNwZWN0IHRvIHRoZSBmb3VyIHZhbHVlcyBwMCwgcDAgKyBtMCAvIDMsIHAxIC0gbTEgLyAzLCBwMVwiLlxuZnVuY3Rpb24gcG9pbnQodGhhdCwgdDAsIHQxKSB7XG4gIHZhciB4MCA9IHRoYXQuX3gwLFxuICAgICAgeTAgPSB0aGF0Ll95MCxcbiAgICAgIHgxID0gdGhhdC5feDEsXG4gICAgICB5MSA9IHRoYXQuX3kxLFxuICAgICAgZHggPSAoeDEgLSB4MCkgLyAzO1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oeDAgKyBkeCwgeTAgKyBkeCAqIHQwLCB4MSAtIGR4LCB5MSAtIGR4ICogdDEsIHgxLCB5MSk7XG59XG5cbmZ1bmN0aW9uIE1vbm90b25lWChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5Nb25vdG9uZVgucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPVxuICAgIHRoaXMuX3QwID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5fdDAsIHNsb3BlMih0aGlzLCB0aGlzLl90MCkpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgdDEgPSBOYU47XG5cbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAoeCA9PT0gdGhpcy5feDEgJiYgeSA9PT0gdGhpcy5feTEpIHJldHVybjsgLy8gSWdub3JlIGNvaW5jaWRlbnQgcG9pbnRzLlxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgcG9pbnQodGhpcywgc2xvcGUyKHRoaXMsIHQxID0gc2xvcGUzKHRoaXMsIHgsIHkpKSwgdDEpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gICAgdGhpcy5fdDAgPSB0MTtcbiAgfVxufVxuXG5mdW5jdGlvbiBNb25vdG9uZVkoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gbmV3IFJlZmxlY3RDb250ZXh0KGNvbnRleHQpO1xufVxuXG4oTW9ub3RvbmVZLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9ub3RvbmVYLnByb3RvdHlwZSkpLnBvaW50ID0gZnVuY3Rpb24oeCwgeSkge1xuICBNb25vdG9uZVgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcywgeSwgeCk7XG59O1xuXG5mdW5jdGlvbiBSZWZsZWN0Q29udGV4dChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5SZWZsZWN0Q29udGV4dC5wcm90b3R5cGUgPSB7XG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh5LCB4KTsgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHsgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTsgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuX2NvbnRleHQubGluZVRvKHksIHgpOyB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkgeyB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oeTEsIHgxLCB5MiwgeDIsIHksIHgpOyB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVYKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVgoY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb25vdG9uZVkoY29udGV4dCkge1xuICByZXR1cm4gbmV3IE1vbm90b25lWShjb250ZXh0KTtcbn1cbiIsImZ1bmN0aW9uIE5hdHVyYWwoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTmF0dXJhbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feCA9IFtdO1xuICAgIHRoaXMuX3kgPSBbXTtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHggPSB0aGlzLl94LFxuICAgICAgICB5ID0gdGhpcy5feSxcbiAgICAgICAgbiA9IHgubGVuZ3RoO1xuXG4gICAgaWYgKG4pIHtcbiAgICAgIHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4WzBdLCB5WzBdKSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHhbMF0sIHlbMF0pO1xuICAgICAgaWYgKG4gPT09IDIpIHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeFsxXSwgeVsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcHggPSBjb250cm9sUG9pbnRzKHgpLFxuICAgICAgICAgICAgcHkgPSBjb250cm9sUG9pbnRzKHkpO1xuICAgICAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMTsgaTEgPCBuOyArK2kwLCArK2kxKSB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHB4WzBdW2kwXSwgcHlbMF1baTBdLCBweFsxXVtpMF0sIHB5WzFdW2kwXSwgeFtpMV0sIHlbaTFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIG4gPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgICB0aGlzLl94ID0gdGhpcy5feSA9IG51bGw7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5feC5wdXNoKCt4KTtcbiAgICB0aGlzLl95LnB1c2goK3kpO1xuICB9XG59O1xuXG4vLyBTZWUgaHR0cHM6Ly93d3cucGFydGljbGVpbmNlbGwuY29tLzIwMTIvYmV6aWVyLXNwbGluZXMvIGZvciBkZXJpdmF0aW9uLlxuZnVuY3Rpb24gY29udHJvbFBvaW50cyh4KSB7XG4gIHZhciBpLFxuICAgICAgbiA9IHgubGVuZ3RoIC0gMSxcbiAgICAgIG0sXG4gICAgICBhID0gbmV3IEFycmF5KG4pLFxuICAgICAgYiA9IG5ldyBBcnJheShuKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkobik7XG4gIGFbMF0gPSAwLCBiWzBdID0gMiwgclswXSA9IHhbMF0gKyAyICogeFsxXTtcbiAgZm9yIChpID0gMTsgaSA8IG4gLSAxOyArK2kpIGFbaV0gPSAxLCBiW2ldID0gNCwgcltpXSA9IDQgKiB4W2ldICsgMiAqIHhbaSArIDFdO1xuICBhW24gLSAxXSA9IDIsIGJbbiAtIDFdID0gNywgcltuIC0gMV0gPSA4ICogeFtuIC0gMV0gKyB4W25dO1xuICBmb3IgKGkgPSAxOyBpIDwgbjsgKytpKSBtID0gYVtpXSAvIGJbaSAtIDFdLCBiW2ldIC09IG0sIHJbaV0gLT0gbSAqIHJbaSAtIDFdO1xuICBhW24gLSAxXSA9IHJbbiAtIDFdIC8gYltuIC0gMV07XG4gIGZvciAoaSA9IG4gLSAyOyBpID49IDA7IC0taSkgYVtpXSA9IChyW2ldIC0gYVtpICsgMV0pIC8gYltpXTtcbiAgYltuIC0gMV0gPSAoeFtuXSArIGFbbiAtIDFdKSAvIDI7XG4gIGZvciAoaSA9IDA7IGkgPCBuIC0gMTsgKytpKSBiW2ldID0gMiAqIHhbaSArIDFdIC0gYVtpICsgMV07XG4gIHJldHVybiBbYSwgYl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBOYXR1cmFsKGNvbnRleHQpO1xufVxuIiwiZnVuY3Rpb24gU3RlcChjb250ZXh0LCB0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl90ID0gdDtcbn1cblxuU3RlcC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoMCA8IHRoaXMuX3QgJiYgdGhpcy5fdCA8IDEgJiYgdGhpcy5fcG9pbnQgPT09IDIpIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHRoaXMuX3kpO1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICBpZiAodGhpcy5fbGluZSA+PSAwKSB0aGlzLl90ID0gMSAtIHRoaXMuX3QsIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuX3QgPD0gMCkge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHkpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB4MSA9IHRoaXMuX3ggKiAoMSAtIHRoaXMuX3QpICsgeCAqIHRoaXMuX3Q7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeDEsIHRoaXMuX3kpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgxLCB5KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5feCA9IHgsIHRoaXMuX3kgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwLjUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEJlZm9yZShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBBZnRlcihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAxKTtcbn1cbiIsImZ1bmN0aW9uIFJlZEJsYWNrVHJlZSgpIHtcbiAgdGhpcy5fID0gbnVsbDsgLy8gcm9vdCBub2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWRCbGFja05vZGUobm9kZSkge1xuICBub2RlLlUgPSAvLyBwYXJlbnQgbm9kZVxuICBub2RlLkMgPSAvLyBjb2xvciAtIHRydWUgZm9yIHJlZCwgZmFsc2UgZm9yIGJsYWNrXG4gIG5vZGUuTCA9IC8vIGxlZnQgbm9kZVxuICBub2RlLlIgPSAvLyByaWdodCBub2RlXG4gIG5vZGUuUCA9IC8vIHByZXZpb3VzIG5vZGVcbiAgbm9kZS5OID0gbnVsbDsgLy8gbmV4dCBub2RlXG59XG5cblJlZEJsYWNrVHJlZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBSZWRCbGFja1RyZWUsXG5cbiAgaW5zZXJ0OiBmdW5jdGlvbihhZnRlciwgbm9kZSkge1xuICAgIHZhciBwYXJlbnQsIGdyYW5kcGEsIHVuY2xlO1xuXG4gICAgaWYgKGFmdGVyKSB7XG4gICAgICBub2RlLlAgPSBhZnRlcjtcbiAgICAgIG5vZGUuTiA9IGFmdGVyLk47XG4gICAgICBpZiAoYWZ0ZXIuTikgYWZ0ZXIuTi5QID0gbm9kZTtcbiAgICAgIGFmdGVyLk4gPSBub2RlO1xuICAgICAgaWYgKGFmdGVyLlIpIHtcbiAgICAgICAgYWZ0ZXIgPSBhZnRlci5SO1xuICAgICAgICB3aGlsZSAoYWZ0ZXIuTCkgYWZ0ZXIgPSBhZnRlci5MO1xuICAgICAgICBhZnRlci5MID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFmdGVyLlIgPSBub2RlO1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gYWZ0ZXI7XG4gICAgfSBlbHNlIGlmICh0aGlzLl8pIHtcbiAgICAgIGFmdGVyID0gUmVkQmxhY2tGaXJzdCh0aGlzLl8pO1xuICAgICAgbm9kZS5QID0gbnVsbDtcbiAgICAgIG5vZGUuTiA9IGFmdGVyO1xuICAgICAgYWZ0ZXIuUCA9IGFmdGVyLkwgPSBub2RlO1xuICAgICAgcGFyZW50ID0gYWZ0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuUCA9IG5vZGUuTiA9IG51bGw7XG4gICAgICB0aGlzLl8gPSBub2RlO1xuICAgICAgcGFyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgbm9kZS5MID0gbm9kZS5SID0gbnVsbDtcbiAgICBub2RlLlUgPSBwYXJlbnQ7XG4gICAgbm9kZS5DID0gdHJ1ZTtcblxuICAgIGFmdGVyID0gbm9kZTtcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5DKSB7XG4gICAgICBncmFuZHBhID0gcGFyZW50LlU7XG4gICAgICBpZiAocGFyZW50ID09PSBncmFuZHBhLkwpIHtcbiAgICAgICAgdW5jbGUgPSBncmFuZHBhLlI7XG4gICAgICAgIGlmICh1bmNsZSAmJiB1bmNsZS5DKSB7XG4gICAgICAgICAgcGFyZW50LkMgPSB1bmNsZS5DID0gZmFsc2U7XG4gICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1ZTtcbiAgICAgICAgICBhZnRlciA9IGdyYW5kcGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGFmdGVyID09PSBwYXJlbnQuUikge1xuICAgICAgICAgICAgUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsIHBhcmVudCk7XG4gICAgICAgICAgICBhZnRlciA9IHBhcmVudDtcbiAgICAgICAgICAgIHBhcmVudCA9IGFmdGVyLlU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudC5DID0gZmFsc2U7XG4gICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1ZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsIGdyYW5kcGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bmNsZSA9IGdyYW5kcGEuTDtcbiAgICAgICAgaWYgKHVuY2xlICYmIHVuY2xlLkMpIHtcbiAgICAgICAgICBwYXJlbnQuQyA9IHVuY2xlLkMgPSBmYWxzZTtcbiAgICAgICAgICBncmFuZHBhLkMgPSB0cnVlO1xuICAgICAgICAgIGFmdGVyID0gZ3JhbmRwYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoYWZ0ZXIgPT09IHBhcmVudC5MKSB7XG4gICAgICAgICAgICBSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsIHBhcmVudCk7XG4gICAgICAgICAgICBhZnRlciA9IHBhcmVudDtcbiAgICAgICAgICAgIHBhcmVudCA9IGFmdGVyLlU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudC5DID0gZmFsc2U7XG4gICAgICAgICAgZ3JhbmRwYS5DID0gdHJ1ZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgZ3JhbmRwYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IGFmdGVyLlU7XG4gICAgfVxuICAgIHRoaXMuXy5DID0gZmFsc2U7XG4gIH0sXG5cbiAgcmVtb3ZlOiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUuTikgbm9kZS5OLlAgPSBub2RlLlA7XG4gICAgaWYgKG5vZGUuUCkgbm9kZS5QLk4gPSBub2RlLk47XG4gICAgbm9kZS5OID0gbm9kZS5QID0gbnVsbDtcblxuICAgIHZhciBwYXJlbnQgPSBub2RlLlUsXG4gICAgICAgIHNpYmxpbmcsXG4gICAgICAgIGxlZnQgPSBub2RlLkwsXG4gICAgICAgIHJpZ2h0ID0gbm9kZS5SLFxuICAgICAgICBuZXh0LFxuICAgICAgICByZWQ7XG5cbiAgICBpZiAoIWxlZnQpIG5leHQgPSByaWdodDtcbiAgICBlbHNlIGlmICghcmlnaHQpIG5leHQgPSBsZWZ0O1xuICAgIGVsc2UgbmV4dCA9IFJlZEJsYWNrRmlyc3QocmlnaHQpO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgaWYgKHBhcmVudC5MID09PSBub2RlKSBwYXJlbnQuTCA9IG5leHQ7XG4gICAgICBlbHNlIHBhcmVudC5SID0gbmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fID0gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAobGVmdCAmJiByaWdodCkge1xuICAgICAgcmVkID0gbmV4dC5DO1xuICAgICAgbmV4dC5DID0gbm9kZS5DO1xuICAgICAgbmV4dC5MID0gbGVmdDtcbiAgICAgIGxlZnQuVSA9IG5leHQ7XG4gICAgICBpZiAobmV4dCAhPT0gcmlnaHQpIHtcbiAgICAgICAgcGFyZW50ID0gbmV4dC5VO1xuICAgICAgICBuZXh0LlUgPSBub2RlLlU7XG4gICAgICAgIG5vZGUgPSBuZXh0LlI7XG4gICAgICAgIHBhcmVudC5MID0gbm9kZTtcbiAgICAgICAgbmV4dC5SID0gcmlnaHQ7XG4gICAgICAgIHJpZ2h0LlUgPSBuZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dC5VID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQgPSBuZXh0O1xuICAgICAgICBub2RlID0gbmV4dC5SO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWQgPSBub2RlLkM7XG4gICAgICBub2RlID0gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAobm9kZSkgbm9kZS5VID0gcGFyZW50O1xuICAgIGlmIChyZWQpIHJldHVybjtcbiAgICBpZiAobm9kZSAmJiBub2RlLkMpIHsgbm9kZS5DID0gZmFsc2U7IHJldHVybjsgfVxuXG4gICAgZG8ge1xuICAgICAgaWYgKG5vZGUgPT09IHRoaXMuXykgYnJlYWs7XG4gICAgICBpZiAobm9kZSA9PT0gcGFyZW50LkwpIHtcbiAgICAgICAgc2libGluZyA9IHBhcmVudC5SO1xuICAgICAgICBpZiAoc2libGluZy5DKSB7XG4gICAgICAgICAgc2libGluZy5DID0gZmFsc2U7XG4gICAgICAgICAgcGFyZW50LkMgPSB0cnVlO1xuICAgICAgICAgIFJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLCBwYXJlbnQpO1xuICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuUjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHNpYmxpbmcuTCAmJiBzaWJsaW5nLkwuQylcbiAgICAgICAgICAgIHx8IChzaWJsaW5nLlIgJiYgc2libGluZy5SLkMpKSB7XG4gICAgICAgICAgaWYgKCFzaWJsaW5nLlIgfHwgIXNpYmxpbmcuUi5DKSB7XG4gICAgICAgICAgICBzaWJsaW5nLkwuQyA9IGZhbHNlO1xuICAgICAgICAgICAgc2libGluZy5DID0gdHJ1ZTtcbiAgICAgICAgICAgIFJlZEJsYWNrUm90YXRlUmlnaHQodGhpcywgc2libGluZyk7XG4gICAgICAgICAgICBzaWJsaW5nID0gcGFyZW50LlI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNpYmxpbmcuQyA9IHBhcmVudC5DO1xuICAgICAgICAgIHBhcmVudC5DID0gc2libGluZy5SLkMgPSBmYWxzZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgcGFyZW50KTtcbiAgICAgICAgICBub2RlID0gdGhpcy5fO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWJsaW5nID0gcGFyZW50Lkw7XG4gICAgICAgIGlmIChzaWJsaW5nLkMpIHtcbiAgICAgICAgICBzaWJsaW5nLkMgPSBmYWxzZTtcbiAgICAgICAgICBwYXJlbnQuQyA9IHRydWU7XG4gICAgICAgICAgUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBwYXJlbnQpO1xuICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuTDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHNpYmxpbmcuTCAmJiBzaWJsaW5nLkwuQylcbiAgICAgICAgICB8fCAoc2libGluZy5SICYmIHNpYmxpbmcuUi5DKSkge1xuICAgICAgICAgIGlmICghc2libGluZy5MIHx8ICFzaWJsaW5nLkwuQykge1xuICAgICAgICAgICAgc2libGluZy5SLkMgPSBmYWxzZTtcbiAgICAgICAgICAgIHNpYmxpbmcuQyA9IHRydWU7XG4gICAgICAgICAgICBSZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgc2libGluZyk7XG4gICAgICAgICAgICBzaWJsaW5nID0gcGFyZW50Lkw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNpYmxpbmcuQyA9IHBhcmVudC5DO1xuICAgICAgICAgIHBhcmVudC5DID0gc2libGluZy5MLkMgPSBmYWxzZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsIHBhcmVudCk7XG4gICAgICAgICAgbm9kZSA9IHRoaXMuXztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2libGluZy5DID0gdHJ1ZTtcbiAgICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuVTtcbiAgICB9IHdoaWxlICghbm9kZS5DKTtcblxuICAgIGlmIChub2RlKSBub2RlLkMgPSBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gUmVkQmxhY2tSb3RhdGVMZWZ0KHRyZWUsIG5vZGUpIHtcbiAgdmFyIHAgPSBub2RlLFxuICAgICAgcSA9IG5vZGUuUixcbiAgICAgIHBhcmVudCA9IHAuVTtcblxuICBpZiAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC5MID09PSBwKSBwYXJlbnQuTCA9IHE7XG4gICAgZWxzZSBwYXJlbnQuUiA9IHE7XG4gIH0gZWxzZSB7XG4gICAgdHJlZS5fID0gcTtcbiAgfVxuXG4gIHEuVSA9IHBhcmVudDtcbiAgcC5VID0gcTtcbiAgcC5SID0gcS5MO1xuICBpZiAocC5SKSBwLlIuVSA9IHA7XG4gIHEuTCA9IHA7XG59XG5cbmZ1bmN0aW9uIFJlZEJsYWNrUm90YXRlUmlnaHQodHJlZSwgbm9kZSkge1xuICB2YXIgcCA9IG5vZGUsXG4gICAgICBxID0gbm9kZS5MLFxuICAgICAgcGFyZW50ID0gcC5VO1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50LkwgPT09IHApIHBhcmVudC5MID0gcTtcbiAgICBlbHNlIHBhcmVudC5SID0gcTtcbiAgfSBlbHNlIHtcbiAgICB0cmVlLl8gPSBxO1xuICB9XG5cbiAgcS5VID0gcGFyZW50O1xuICBwLlUgPSBxO1xuICBwLkwgPSBxLlI7XG4gIGlmIChwLkwpIHAuTC5VID0gcDtcbiAgcS5SID0gcDtcbn1cblxuZnVuY3Rpb24gUmVkQmxhY2tGaXJzdChub2RlKSB7XG4gIHdoaWxlIChub2RlLkwpIG5vZGUgPSBub2RlLkw7XG4gIHJldHVybiBub2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSZWRCbGFja1RyZWU7XG4iLCJpbXBvcnQge2NlbGxzLCBlZGdlcywgZXBzaWxvbn0gZnJvbSBcIi4vRGlhZ3JhbVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWRnZShsZWZ0LCByaWdodCwgdjAsIHYxKSB7XG4gIHZhciBlZGdlID0gW251bGwsIG51bGxdLFxuICAgICAgaW5kZXggPSBlZGdlcy5wdXNoKGVkZ2UpIC0gMTtcbiAgZWRnZS5sZWZ0ID0gbGVmdDtcbiAgZWRnZS5yaWdodCA9IHJpZ2h0O1xuICBpZiAodjApIHNldEVkZ2VFbmQoZWRnZSwgbGVmdCwgcmlnaHQsIHYwKTtcbiAgaWYgKHYxKSBzZXRFZGdlRW5kKGVkZ2UsIHJpZ2h0LCBsZWZ0LCB2MSk7XG4gIGNlbGxzW2xlZnQuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGluZGV4KTtcbiAgY2VsbHNbcmlnaHQuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGluZGV4KTtcbiAgcmV0dXJuIGVkZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCb3JkZXJFZGdlKGxlZnQsIHYwLCB2MSkge1xuICB2YXIgZWRnZSA9IFt2MCwgdjFdO1xuICBlZGdlLmxlZnQgPSBsZWZ0O1xuICByZXR1cm4gZWRnZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVkZ2VFbmQoZWRnZSwgbGVmdCwgcmlnaHQsIHZlcnRleCkge1xuICBpZiAoIWVkZ2VbMF0gJiYgIWVkZ2VbMV0pIHtcbiAgICBlZGdlWzBdID0gdmVydGV4O1xuICAgIGVkZ2UubGVmdCA9IGxlZnQ7XG4gICAgZWRnZS5yaWdodCA9IHJpZ2h0O1xuICB9IGVsc2UgaWYgKGVkZ2UubGVmdCA9PT0gcmlnaHQpIHtcbiAgICBlZGdlWzFdID0gdmVydGV4O1xuICB9IGVsc2Uge1xuICAgIGVkZ2VbMF0gPSB2ZXJ0ZXg7XG4gIH1cbn1cblxuLy8gTGlhbmfigJNCYXJza3kgbGluZSBjbGlwcGluZy5cbmZ1bmN0aW9uIGNsaXBFZGdlKGVkZ2UsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBhID0gZWRnZVswXSxcbiAgICAgIGIgPSBlZGdlWzFdLFxuICAgICAgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgdDAgPSAwLFxuICAgICAgdDEgPSAxLFxuICAgICAgZHggPSBieCAtIGF4LFxuICAgICAgZHkgPSBieSAtIGF5LFxuICAgICAgcjtcblxuICByID0geDAgLSBheDtcbiAgaWYgKCFkeCAmJiByID4gMCkgcmV0dXJuO1xuICByIC89IGR4O1xuICBpZiAoZHggPCAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfSBlbHNlIGlmIChkeCA+IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9XG5cbiAgciA9IHgxIC0gYXg7XG4gIGlmICghZHggJiYgciA8IDApIHJldHVybjtcbiAgciAvPSBkeDtcbiAgaWYgKGR4IDwgMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH0gZWxzZSBpZiAoZHggPiAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfVxuXG4gIHIgPSB5MCAtIGF5O1xuICBpZiAoIWR5ICYmIHIgPiAwKSByZXR1cm47XG4gIHIgLz0gZHk7XG4gIGlmIChkeSA8IDApIHtcbiAgICBpZiAociA8IHQwKSByZXR1cm47XG4gICAgaWYgKHIgPCB0MSkgdDEgPSByO1xuICB9IGVsc2UgaWYgKGR5ID4gMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH1cblxuICByID0geTEgLSBheTtcbiAgaWYgKCFkeSAmJiByIDwgMCkgcmV0dXJuO1xuICByIC89IGR5O1xuICBpZiAoZHkgPCAwKSB7XG4gICAgaWYgKHIgPiB0MSkgcmV0dXJuO1xuICAgIGlmIChyID4gdDApIHQwID0gcjtcbiAgfSBlbHNlIGlmIChkeSA+IDApIHtcbiAgICBpZiAociA8IHQwKSByZXR1cm47XG4gICAgaWYgKHIgPCB0MSkgdDEgPSByO1xuICB9XG5cbiAgaWYgKCEodDAgPiAwKSAmJiAhKHQxIDwgMSkpIHJldHVybiB0cnVlOyAvLyBUT0RPIEJldHRlciBjaGVjaz9cblxuICBpZiAodDAgPiAwKSBlZGdlWzBdID0gW2F4ICsgdDAgKiBkeCwgYXkgKyB0MCAqIGR5XTtcbiAgaWYgKHQxIDwgMSkgZWRnZVsxXSA9IFtheCArIHQxICogZHgsIGF5ICsgdDEgKiBkeV07XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0RWRnZShlZGdlLCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgdjEgPSBlZGdlWzFdO1xuICBpZiAodjEpIHJldHVybiB0cnVlO1xuXG4gIHZhciB2MCA9IGVkZ2VbMF0sXG4gICAgICBsZWZ0ID0gZWRnZS5sZWZ0LFxuICAgICAgcmlnaHQgPSBlZGdlLnJpZ2h0LFxuICAgICAgbHggPSBsZWZ0WzBdLFxuICAgICAgbHkgPSBsZWZ0WzFdLFxuICAgICAgcnggPSByaWdodFswXSxcbiAgICAgIHJ5ID0gcmlnaHRbMV0sXG4gICAgICBmeCA9IChseCArIHJ4KSAvIDIsXG4gICAgICBmeSA9IChseSArIHJ5KSAvIDIsXG4gICAgICBmbSxcbiAgICAgIGZiO1xuXG4gIGlmIChyeSA9PT0gbHkpIHtcbiAgICBpZiAoZnggPCB4MCB8fCBmeCA+PSB4MSkgcmV0dXJuO1xuICAgIGlmIChseCA+IHJ4KSB7XG4gICAgICBpZiAoIXYwKSB2MCA9IFtmeCwgeTBdO1xuICAgICAgZWxzZSBpZiAodjBbMV0gPj0geTEpIHJldHVybjtcbiAgICAgIHYxID0gW2Z4LCB5MV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdjApIHYwID0gW2Z4LCB5MV07XG4gICAgICBlbHNlIGlmICh2MFsxXSA8IHkwKSByZXR1cm47XG4gICAgICB2MSA9IFtmeCwgeTBdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmbSA9IChseCAtIHJ4KSAvIChyeSAtIGx5KTtcbiAgICBmYiA9IGZ5IC0gZm0gKiBmeDtcbiAgICBpZiAoZm0gPCAtMSB8fCBmbSA+IDEpIHtcbiAgICAgIGlmIChseCA+IHJ4KSB7XG4gICAgICAgIGlmICghdjApIHYwID0gWyh5MCAtIGZiKSAvIGZtLCB5MF07XG4gICAgICAgIGVsc2UgaWYgKHYwWzFdID49IHkxKSByZXR1cm47XG4gICAgICAgIHYxID0gWyh5MSAtIGZiKSAvIGZtLCB5MV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXYwKSB2MCA9IFsoeTEgLSBmYikgLyBmbSwgeTFdO1xuICAgICAgICBlbHNlIGlmICh2MFsxXSA8IHkwKSByZXR1cm47XG4gICAgICAgIHYxID0gWyh5MCAtIGZiKSAvIGZtLCB5MF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChseSA8IHJ5KSB7XG4gICAgICAgIGlmICghdjApIHYwID0gW3gwLCBmbSAqIHgwICsgZmJdO1xuICAgICAgICBlbHNlIGlmICh2MFswXSA+PSB4MSkgcmV0dXJuO1xuICAgICAgICB2MSA9IFt4MSwgZm0gKiB4MSArIGZiXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdjApIHYwID0gW3gxLCBmbSAqIHgxICsgZmJdO1xuICAgICAgICBlbHNlIGlmICh2MFswXSA8IHgwKSByZXR1cm47XG4gICAgICAgIHYxID0gW3gwLCBmbSAqIHgwICsgZmJdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVkZ2VbMF0gPSB2MDtcbiAgZWRnZVsxXSA9IHYxO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaXBFZGdlcyh4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgaSA9IGVkZ2VzLmxlbmd0aCxcbiAgICAgIGVkZ2U7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIGlmICghY29ubmVjdEVkZ2UoZWRnZSA9IGVkZ2VzW2ldLCB4MCwgeTAsIHgxLCB5MSlcbiAgICAgICAgfHwgIWNsaXBFZGdlKGVkZ2UsIHgwLCB5MCwgeDEsIHkxKVxuICAgICAgICB8fCAhKE1hdGguYWJzKGVkZ2VbMF1bMF0gLSBlZGdlWzFdWzBdKSA+IGVwc2lsb25cbiAgICAgICAgICAgIHx8IE1hdGguYWJzKGVkZ2VbMF1bMV0gLSBlZGdlWzFdWzFdKSA+IGVwc2lsb24pKSB7XG4gICAgICBkZWxldGUgZWRnZXNbaV07XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge2NyZWF0ZUJvcmRlckVkZ2V9IGZyb20gXCIuL0VkZ2VcIjtcbmltcG9ydCB7Y2VsbHMsIGVkZ2VzLCBlcHNpbG9ufSBmcm9tIFwiLi9EaWFncmFtXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDZWxsKHNpdGUpIHtcbiAgcmV0dXJuIGNlbGxzW3NpdGUuaW5kZXhdID0ge1xuICAgIHNpdGU6IHNpdGUsXG4gICAgaGFsZmVkZ2VzOiBbXVxuICB9O1xufVxuXG5mdW5jdGlvbiBjZWxsSGFsZmVkZ2VBbmdsZShjZWxsLCBlZGdlKSB7XG4gIHZhciBzaXRlID0gY2VsbC5zaXRlLFxuICAgICAgdmEgPSBlZGdlLmxlZnQsXG4gICAgICB2YiA9IGVkZ2UucmlnaHQ7XG4gIGlmIChzaXRlID09PSB2YikgdmIgPSB2YSwgdmEgPSBzaXRlO1xuICBpZiAodmIpIHJldHVybiBNYXRoLmF0YW4yKHZiWzFdIC0gdmFbMV0sIHZiWzBdIC0gdmFbMF0pO1xuICBpZiAoc2l0ZSA9PT0gdmEpIHZhID0gZWRnZVsxXSwgdmIgPSBlZGdlWzBdO1xuICBlbHNlIHZhID0gZWRnZVswXSwgdmIgPSBlZGdlWzFdO1xuICByZXR1cm4gTWF0aC5hdGFuMih2YVswXSAtIHZiWzBdLCB2YlsxXSAtIHZhWzFdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNlbGxIYWxmZWRnZVN0YXJ0KGNlbGwsIGVkZ2UpIHtcbiAgcmV0dXJuIGVkZ2VbKyhlZGdlLmxlZnQgIT09IGNlbGwuc2l0ZSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VsbEhhbGZlZGdlRW5kKGNlbGwsIGVkZ2UpIHtcbiAgcmV0dXJuIGVkZ2VbKyhlZGdlLmxlZnQgPT09IGNlbGwuc2l0ZSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydENlbGxIYWxmZWRnZXMoKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBoYWxmZWRnZXMsIGosIG07IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGNlbGwgPSBjZWxsc1tpXSkgJiYgKG0gPSAoaGFsZmVkZ2VzID0gY2VsbC5oYWxmZWRnZXMpLmxlbmd0aCkpIHtcbiAgICAgIHZhciBpbmRleCA9IG5ldyBBcnJheShtKSxcbiAgICAgICAgICBhcnJheSA9IG5ldyBBcnJheShtKTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBtOyArK2opIGluZGV4W2pdID0gaiwgYXJyYXlbal0gPSBjZWxsSGFsZmVkZ2VBbmdsZShjZWxsLCBlZGdlc1toYWxmZWRnZXNbal1dKTtcbiAgICAgIGluZGV4LnNvcnQoZnVuY3Rpb24oaSwgaikgeyByZXR1cm4gYXJyYXlbal0gLSBhcnJheVtpXTsgfSk7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbTsgKytqKSBhcnJheVtqXSA9IGhhbGZlZGdlc1tpbmRleFtqXV07XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbTsgKytqKSBoYWxmZWRnZXNbal0gPSBhcnJheVtqXTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaXBDZWxscyh4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgbkNlbGxzID0gY2VsbHMubGVuZ3RoLFxuICAgICAgaUNlbGwsXG4gICAgICBjZWxsLFxuICAgICAgc2l0ZSxcbiAgICAgIGlIYWxmZWRnZSxcbiAgICAgIGhhbGZlZGdlcyxcbiAgICAgIG5IYWxmZWRnZXMsXG4gICAgICBzdGFydCxcbiAgICAgIHN0YXJ0WCxcbiAgICAgIHN0YXJ0WSxcbiAgICAgIGVuZCxcbiAgICAgIGVuZFgsXG4gICAgICBlbmRZLFxuICAgICAgY292ZXIgPSB0cnVlO1xuXG4gIGZvciAoaUNlbGwgPSAwOyBpQ2VsbCA8IG5DZWxsczsgKytpQ2VsbCkge1xuICAgIGlmIChjZWxsID0gY2VsbHNbaUNlbGxdKSB7XG4gICAgICBzaXRlID0gY2VsbC5zaXRlO1xuICAgICAgaGFsZmVkZ2VzID0gY2VsbC5oYWxmZWRnZXM7XG4gICAgICBpSGFsZmVkZ2UgPSBoYWxmZWRnZXMubGVuZ3RoO1xuXG4gICAgICAvLyBSZW1vdmUgYW55IGRhbmdsaW5nIGNsaXBwZWQgZWRnZXMuXG4gICAgICB3aGlsZSAoaUhhbGZlZGdlLS0pIHtcbiAgICAgICAgaWYgKCFlZGdlc1toYWxmZWRnZXNbaUhhbGZlZGdlXV0pIHtcbiAgICAgICAgICBoYWxmZWRnZXMuc3BsaWNlKGlIYWxmZWRnZSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSW5zZXJ0IGFueSBib3JkZXIgZWRnZXMgYXMgbmVjZXNzYXJ5LlxuICAgICAgaUhhbGZlZGdlID0gMCwgbkhhbGZlZGdlcyA9IGhhbGZlZGdlcy5sZW5ndGg7XG4gICAgICB3aGlsZSAoaUhhbGZlZGdlIDwgbkhhbGZlZGdlcykge1xuICAgICAgICBlbmQgPSBjZWxsSGFsZmVkZ2VFbmQoY2VsbCwgZWRnZXNbaGFsZmVkZ2VzW2lIYWxmZWRnZV1dKSwgZW5kWCA9IGVuZFswXSwgZW5kWSA9IGVuZFsxXTtcbiAgICAgICAgc3RhcnQgPSBjZWxsSGFsZmVkZ2VTdGFydChjZWxsLCBlZGdlc1toYWxmZWRnZXNbKytpSGFsZmVkZ2UgJSBuSGFsZmVkZ2VzXV0pLCBzdGFydFggPSBzdGFydFswXSwgc3RhcnRZID0gc3RhcnRbMV07XG4gICAgICAgIGlmIChNYXRoLmFicyhlbmRYIC0gc3RhcnRYKSA+IGVwc2lsb24gfHwgTWF0aC5hYnMoZW5kWSAtIHN0YXJ0WSkgPiBlcHNpbG9uKSB7XG4gICAgICAgICAgaGFsZmVkZ2VzLnNwbGljZShpSGFsZmVkZ2UsIDAsIGVkZ2VzLnB1c2goY3JlYXRlQm9yZGVyRWRnZShzaXRlLCBlbmQsXG4gICAgICAgICAgICAgIE1hdGguYWJzKGVuZFggLSB4MCkgPCBlcHNpbG9uICYmIHkxIC0gZW5kWSA+IGVwc2lsb24gPyBbeDAsIE1hdGguYWJzKHN0YXJ0WCAtIHgwKSA8IGVwc2lsb24gPyBzdGFydFkgOiB5MV1cbiAgICAgICAgICAgICAgOiBNYXRoLmFicyhlbmRZIC0geTEpIDwgZXBzaWxvbiAmJiB4MSAtIGVuZFggPiBlcHNpbG9uID8gW01hdGguYWJzKHN0YXJ0WSAtIHkxKSA8IGVwc2lsb24gPyBzdGFydFggOiB4MSwgeTFdXG4gICAgICAgICAgICAgIDogTWF0aC5hYnMoZW5kWCAtIHgxKSA8IGVwc2lsb24gJiYgZW5kWSAtIHkwID4gZXBzaWxvbiA/IFt4MSwgTWF0aC5hYnMoc3RhcnRYIC0geDEpIDwgZXBzaWxvbiA/IHN0YXJ0WSA6IHkwXVxuICAgICAgICAgICAgICA6IE1hdGguYWJzKGVuZFkgLSB5MCkgPCBlcHNpbG9uICYmIGVuZFggLSB4MCA+IGVwc2lsb24gPyBbTWF0aC5hYnMoc3RhcnRZIC0geTApIDwgZXBzaWxvbiA/IHN0YXJ0WCA6IHgwLCB5MF1cbiAgICAgICAgICAgICAgOiBudWxsKSkgLSAxKTtcbiAgICAgICAgICArK25IYWxmZWRnZXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5IYWxmZWRnZXMpIGNvdmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgdGhlcmUgd2VyZW7igJl0IGFueSBlZGdlcywgaGF2ZSB0aGUgY2xvc2VzdCBzaXRlIGNvdmVyIHRoZSBleHRlbnQuXG4gIC8vIEl0IGRvZXNu4oCZdCBtYXR0ZXIgd2hpY2ggY29ybmVyIG9mIHRoZSBleHRlbnQgd2UgbWVhc3VyZSFcbiAgaWYgKGNvdmVyKSB7XG4gICAgdmFyIGR4LCBkeSwgZDIsIGRjID0gSW5maW5pdHk7XG5cbiAgICBmb3IgKGlDZWxsID0gMCwgY292ZXIgPSBudWxsOyBpQ2VsbCA8IG5DZWxsczsgKytpQ2VsbCkge1xuICAgICAgaWYgKGNlbGwgPSBjZWxsc1tpQ2VsbF0pIHtcbiAgICAgICAgc2l0ZSA9IGNlbGwuc2l0ZTtcbiAgICAgICAgZHggPSBzaXRlWzBdIC0geDA7XG4gICAgICAgIGR5ID0gc2l0ZVsxXSAtIHkwO1xuICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgICBpZiAoZDIgPCBkYykgZGMgPSBkMiwgY292ZXIgPSBjZWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb3Zlcikge1xuICAgICAgdmFyIHYwMCA9IFt4MCwgeTBdLCB2MDEgPSBbeDAsIHkxXSwgdjExID0gW3gxLCB5MV0sIHYxMCA9IFt4MSwgeTBdO1xuICAgICAgY292ZXIuaGFsZmVkZ2VzLnB1c2goXG4gICAgICAgIGVkZ2VzLnB1c2goY3JlYXRlQm9yZGVyRWRnZShzaXRlID0gY292ZXIuc2l0ZSwgdjAwLCB2MDEpKSAtIDEsXG4gICAgICAgIGVkZ2VzLnB1c2goY3JlYXRlQm9yZGVyRWRnZShzaXRlLCB2MDEsIHYxMSkpIC0gMSxcbiAgICAgICAgZWRnZXMucHVzaChjcmVhdGVCb3JkZXJFZGdlKHNpdGUsIHYxMSwgdjEwKSkgLSAxLFxuICAgICAgICBlZGdlcy5wdXNoKGNyZWF0ZUJvcmRlckVkZ2Uoc2l0ZSwgdjEwLCB2MDApKSAtIDFcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gTGFzdGx5IGRlbGV0ZSBhbnkgY2VsbHMgd2l0aCBubyBlZGdlczsgdGhlc2Ugd2VyZSBlbnRpcmVseSBjbGlwcGVkLlxuICBmb3IgKGlDZWxsID0gMDsgaUNlbGwgPCBuQ2VsbHM7ICsraUNlbGwpIHtcbiAgICBpZiAoY2VsbCA9IGNlbGxzW2lDZWxsXSkge1xuICAgICAgaWYgKCFjZWxsLmhhbGZlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIGNlbGxzW2lDZWxsXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7UmVkQmxhY2tOb2RlfSBmcm9tIFwiLi9SZWRCbGFja1RyZWVcIjtcbmltcG9ydCB7Y2lyY2xlcywgZXBzaWxvbjJ9IGZyb20gXCIuL0RpYWdyYW1cIjtcblxudmFyIGNpcmNsZVBvb2wgPSBbXTtcblxuZXhwb3J0IHZhciBmaXJzdENpcmNsZTtcblxuZnVuY3Rpb24gQ2lyY2xlKCkge1xuICBSZWRCbGFja05vZGUodGhpcyk7XG4gIHRoaXMueCA9XG4gIHRoaXMueSA9XG4gIHRoaXMuYXJjID1cbiAgdGhpcy5zaXRlID1cbiAgdGhpcy5jeSA9IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hDaXJjbGUoYXJjKSB7XG4gIHZhciBsQXJjID0gYXJjLlAsXG4gICAgICByQXJjID0gYXJjLk47XG5cbiAgaWYgKCFsQXJjIHx8ICFyQXJjKSByZXR1cm47XG5cbiAgdmFyIGxTaXRlID0gbEFyYy5zaXRlLFxuICAgICAgY1NpdGUgPSBhcmMuc2l0ZSxcbiAgICAgIHJTaXRlID0gckFyYy5zaXRlO1xuXG4gIGlmIChsU2l0ZSA9PT0gclNpdGUpIHJldHVybjtcblxuICB2YXIgYnggPSBjU2l0ZVswXSxcbiAgICAgIGJ5ID0gY1NpdGVbMV0sXG4gICAgICBheCA9IGxTaXRlWzBdIC0gYngsXG4gICAgICBheSA9IGxTaXRlWzFdIC0gYnksXG4gICAgICBjeCA9IHJTaXRlWzBdIC0gYngsXG4gICAgICBjeSA9IHJTaXRlWzFdIC0gYnk7XG5cbiAgdmFyIGQgPSAyICogKGF4ICogY3kgLSBheSAqIGN4KTtcbiAgaWYgKGQgPj0gLWVwc2lsb24yKSByZXR1cm47XG5cbiAgdmFyIGhhID0gYXggKiBheCArIGF5ICogYXksXG4gICAgICBoYyA9IGN4ICogY3ggKyBjeSAqIGN5LFxuICAgICAgeCA9IChjeSAqIGhhIC0gYXkgKiBoYykgLyBkLFxuICAgICAgeSA9IChheCAqIGhjIC0gY3ggKiBoYSkgLyBkO1xuXG4gIHZhciBjaXJjbGUgPSBjaXJjbGVQb29sLnBvcCgpIHx8IG5ldyBDaXJjbGU7XG4gIGNpcmNsZS5hcmMgPSBhcmM7XG4gIGNpcmNsZS5zaXRlID0gY1NpdGU7XG4gIGNpcmNsZS54ID0geCArIGJ4O1xuICBjaXJjbGUueSA9IChjaXJjbGUuY3kgPSB5ICsgYnkpICsgTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpOyAvLyB5IGJvdHRvbVxuXG4gIGFyYy5jaXJjbGUgPSBjaXJjbGU7XG5cbiAgdmFyIGJlZm9yZSA9IG51bGwsXG4gICAgICBub2RlID0gY2lyY2xlcy5fO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKGNpcmNsZS55IDwgbm9kZS55IHx8IChjaXJjbGUueSA9PT0gbm9kZS55ICYmIGNpcmNsZS54IDw9IG5vZGUueCkpIHtcbiAgICAgIGlmIChub2RlLkwpIG5vZGUgPSBub2RlLkw7XG4gICAgICBlbHNlIHsgYmVmb3JlID0gbm9kZS5QOyBicmVhazsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobm9kZS5SKSBub2RlID0gbm9kZS5SO1xuICAgICAgZWxzZSB7IGJlZm9yZSA9IG5vZGU7IGJyZWFrOyB9XG4gICAgfVxuICB9XG5cbiAgY2lyY2xlcy5pbnNlcnQoYmVmb3JlLCBjaXJjbGUpO1xuICBpZiAoIWJlZm9yZSkgZmlyc3RDaXJjbGUgPSBjaXJjbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRhY2hDaXJjbGUoYXJjKSB7XG4gIHZhciBjaXJjbGUgPSBhcmMuY2lyY2xlO1xuICBpZiAoY2lyY2xlKSB7XG4gICAgaWYgKCFjaXJjbGUuUCkgZmlyc3RDaXJjbGUgPSBjaXJjbGUuTjtcbiAgICBjaXJjbGVzLnJlbW92ZShjaXJjbGUpO1xuICAgIGNpcmNsZVBvb2wucHVzaChjaXJjbGUpO1xuICAgIFJlZEJsYWNrTm9kZShjaXJjbGUpO1xuICAgIGFyYy5jaXJjbGUgPSBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQge1JlZEJsYWNrTm9kZX0gZnJvbSBcIi4vUmVkQmxhY2tUcmVlXCI7XG5pbXBvcnQge2NyZWF0ZUNlbGx9IGZyb20gXCIuL0NlbGxcIjtcbmltcG9ydCB7YXR0YWNoQ2lyY2xlLCBkZXRhY2hDaXJjbGV9IGZyb20gXCIuL0NpcmNsZVwiO1xuaW1wb3J0IHtjcmVhdGVFZGdlLCBzZXRFZGdlRW5kfSBmcm9tIFwiLi9FZGdlXCI7XG5pbXBvcnQge2JlYWNoZXMsIGVwc2lsb259IGZyb20gXCIuL0RpYWdyYW1cIjtcblxudmFyIGJlYWNoUG9vbCA9IFtdO1xuXG5mdW5jdGlvbiBCZWFjaCgpIHtcbiAgUmVkQmxhY2tOb2RlKHRoaXMpO1xuICB0aGlzLmVkZ2UgPVxuICB0aGlzLnNpdGUgPVxuICB0aGlzLmNpcmNsZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJlYWNoKHNpdGUpIHtcbiAgdmFyIGJlYWNoID0gYmVhY2hQb29sLnBvcCgpIHx8IG5ldyBCZWFjaDtcbiAgYmVhY2guc2l0ZSA9IHNpdGU7XG4gIHJldHVybiBiZWFjaDtcbn1cblxuZnVuY3Rpb24gZGV0YWNoQmVhY2goYmVhY2gpIHtcbiAgZGV0YWNoQ2lyY2xlKGJlYWNoKTtcbiAgYmVhY2hlcy5yZW1vdmUoYmVhY2gpO1xuICBiZWFjaFBvb2wucHVzaChiZWFjaCk7XG4gIFJlZEJsYWNrTm9kZShiZWFjaCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVCZWFjaChiZWFjaCkge1xuICB2YXIgY2lyY2xlID0gYmVhY2guY2lyY2xlLFxuICAgICAgeCA9IGNpcmNsZS54LFxuICAgICAgeSA9IGNpcmNsZS5jeSxcbiAgICAgIHZlcnRleCA9IFt4LCB5XSxcbiAgICAgIHByZXZpb3VzID0gYmVhY2guUCxcbiAgICAgIG5leHQgPSBiZWFjaC5OLFxuICAgICAgZGlzYXBwZWFyaW5nID0gW2JlYWNoXTtcblxuICBkZXRhY2hCZWFjaChiZWFjaCk7XG5cbiAgdmFyIGxBcmMgPSBwcmV2aW91cztcbiAgd2hpbGUgKGxBcmMuY2lyY2xlXG4gICAgICAmJiBNYXRoLmFicyh4IC0gbEFyYy5jaXJjbGUueCkgPCBlcHNpbG9uXG4gICAgICAmJiBNYXRoLmFicyh5IC0gbEFyYy5jaXJjbGUuY3kpIDwgZXBzaWxvbikge1xuICAgIHByZXZpb3VzID0gbEFyYy5QO1xuICAgIGRpc2FwcGVhcmluZy51bnNoaWZ0KGxBcmMpO1xuICAgIGRldGFjaEJlYWNoKGxBcmMpO1xuICAgIGxBcmMgPSBwcmV2aW91cztcbiAgfVxuXG4gIGRpc2FwcGVhcmluZy51bnNoaWZ0KGxBcmMpO1xuICBkZXRhY2hDaXJjbGUobEFyYyk7XG5cbiAgdmFyIHJBcmMgPSBuZXh0O1xuICB3aGlsZSAockFyYy5jaXJjbGVcbiAgICAgICYmIE1hdGguYWJzKHggLSByQXJjLmNpcmNsZS54KSA8IGVwc2lsb25cbiAgICAgICYmIE1hdGguYWJzKHkgLSByQXJjLmNpcmNsZS5jeSkgPCBlcHNpbG9uKSB7XG4gICAgbmV4dCA9IHJBcmMuTjtcbiAgICBkaXNhcHBlYXJpbmcucHVzaChyQXJjKTtcbiAgICBkZXRhY2hCZWFjaChyQXJjKTtcbiAgICByQXJjID0gbmV4dDtcbiAgfVxuXG4gIGRpc2FwcGVhcmluZy5wdXNoKHJBcmMpO1xuICBkZXRhY2hDaXJjbGUockFyYyk7XG5cbiAgdmFyIG5BcmNzID0gZGlzYXBwZWFyaW5nLmxlbmd0aCxcbiAgICAgIGlBcmM7XG4gIGZvciAoaUFyYyA9IDE7IGlBcmMgPCBuQXJjczsgKytpQXJjKSB7XG4gICAgckFyYyA9IGRpc2FwcGVhcmluZ1tpQXJjXTtcbiAgICBsQXJjID0gZGlzYXBwZWFyaW5nW2lBcmMgLSAxXTtcbiAgICBzZXRFZGdlRW5kKHJBcmMuZWRnZSwgbEFyYy5zaXRlLCByQXJjLnNpdGUsIHZlcnRleCk7XG4gIH1cblxuICBsQXJjID0gZGlzYXBwZWFyaW5nWzBdO1xuICByQXJjID0gZGlzYXBwZWFyaW5nW25BcmNzIC0gMV07XG4gIHJBcmMuZWRnZSA9IGNyZWF0ZUVkZ2UobEFyYy5zaXRlLCByQXJjLnNpdGUsIG51bGwsIHZlcnRleCk7XG5cbiAgYXR0YWNoQ2lyY2xlKGxBcmMpO1xuICBhdHRhY2hDaXJjbGUockFyYyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRCZWFjaChzaXRlKSB7XG4gIHZhciB4ID0gc2l0ZVswXSxcbiAgICAgIGRpcmVjdHJpeCA9IHNpdGVbMV0sXG4gICAgICBsQXJjLFxuICAgICAgckFyYyxcbiAgICAgIGR4bCxcbiAgICAgIGR4cixcbiAgICAgIG5vZGUgPSBiZWFjaGVzLl87XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBkeGwgPSBsZWZ0QnJlYWtQb2ludChub2RlLCBkaXJlY3RyaXgpIC0geDtcbiAgICBpZiAoZHhsID4gZXBzaWxvbikgbm9kZSA9IG5vZGUuTDsgZWxzZSB7XG4gICAgICBkeHIgPSB4IC0gcmlnaHRCcmVha1BvaW50KG5vZGUsIGRpcmVjdHJpeCk7XG4gICAgICBpZiAoZHhyID4gZXBzaWxvbikge1xuICAgICAgICBpZiAoIW5vZGUuUikge1xuICAgICAgICAgIGxBcmMgPSBub2RlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLlI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZHhsID4gLWVwc2lsb24pIHtcbiAgICAgICAgICBsQXJjID0gbm9kZS5QO1xuICAgICAgICAgIHJBcmMgPSBub2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGR4ciA+IC1lcHNpbG9uKSB7XG4gICAgICAgICAgbEFyYyA9IG5vZGU7XG4gICAgICAgICAgckFyYyA9IG5vZGUuTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsQXJjID0gckFyYyA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQ2VsbChzaXRlKTtcbiAgdmFyIG5ld0FyYyA9IGNyZWF0ZUJlYWNoKHNpdGUpO1xuICBiZWFjaGVzLmluc2VydChsQXJjLCBuZXdBcmMpO1xuXG4gIGlmICghbEFyYyAmJiAhckFyYykgcmV0dXJuO1xuXG4gIGlmIChsQXJjID09PSByQXJjKSB7XG4gICAgZGV0YWNoQ2lyY2xlKGxBcmMpO1xuICAgIHJBcmMgPSBjcmVhdGVCZWFjaChsQXJjLnNpdGUpO1xuICAgIGJlYWNoZXMuaW5zZXJ0KG5ld0FyYywgckFyYyk7XG4gICAgbmV3QXJjLmVkZ2UgPSByQXJjLmVkZ2UgPSBjcmVhdGVFZGdlKGxBcmMuc2l0ZSwgbmV3QXJjLnNpdGUpO1xuICAgIGF0dGFjaENpcmNsZShsQXJjKTtcbiAgICBhdHRhY2hDaXJjbGUockFyYyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFyQXJjKSB7IC8vICYmIGxBcmNcbiAgICBuZXdBcmMuZWRnZSA9IGNyZWF0ZUVkZ2UobEFyYy5zaXRlLCBuZXdBcmMuc2l0ZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZWxzZSBsQXJjICE9PSByQXJjXG4gIGRldGFjaENpcmNsZShsQXJjKTtcbiAgZGV0YWNoQ2lyY2xlKHJBcmMpO1xuXG4gIHZhciBsU2l0ZSA9IGxBcmMuc2l0ZSxcbiAgICAgIGF4ID0gbFNpdGVbMF0sXG4gICAgICBheSA9IGxTaXRlWzFdLFxuICAgICAgYnggPSBzaXRlWzBdIC0gYXgsXG4gICAgICBieSA9IHNpdGVbMV0gLSBheSxcbiAgICAgIHJTaXRlID0gckFyYy5zaXRlLFxuICAgICAgY3ggPSByU2l0ZVswXSAtIGF4LFxuICAgICAgY3kgPSByU2l0ZVsxXSAtIGF5LFxuICAgICAgZCA9IDIgKiAoYnggKiBjeSAtIGJ5ICogY3gpLFxuICAgICAgaGIgPSBieCAqIGJ4ICsgYnkgKiBieSxcbiAgICAgIGhjID0gY3ggKiBjeCArIGN5ICogY3ksXG4gICAgICB2ZXJ0ZXggPSBbKGN5ICogaGIgLSBieSAqIGhjKSAvIGQgKyBheCwgKGJ4ICogaGMgLSBjeCAqIGhiKSAvIGQgKyBheV07XG5cbiAgc2V0RWRnZUVuZChyQXJjLmVkZ2UsIGxTaXRlLCByU2l0ZSwgdmVydGV4KTtcbiAgbmV3QXJjLmVkZ2UgPSBjcmVhdGVFZGdlKGxTaXRlLCBzaXRlLCBudWxsLCB2ZXJ0ZXgpO1xuICByQXJjLmVkZ2UgPSBjcmVhdGVFZGdlKHNpdGUsIHJTaXRlLCBudWxsLCB2ZXJ0ZXgpO1xuICBhdHRhY2hDaXJjbGUobEFyYyk7XG4gIGF0dGFjaENpcmNsZShyQXJjKTtcbn1cblxuZnVuY3Rpb24gbGVmdEJyZWFrUG9pbnQoYXJjLCBkaXJlY3RyaXgpIHtcbiAgdmFyIHNpdGUgPSBhcmMuc2l0ZSxcbiAgICAgIHJmb2N4ID0gc2l0ZVswXSxcbiAgICAgIHJmb2N5ID0gc2l0ZVsxXSxcbiAgICAgIHBieTIgPSByZm9jeSAtIGRpcmVjdHJpeDtcblxuICBpZiAoIXBieTIpIHJldHVybiByZm9jeDtcblxuICB2YXIgbEFyYyA9IGFyYy5QO1xuICBpZiAoIWxBcmMpIHJldHVybiAtSW5maW5pdHk7XG5cbiAgc2l0ZSA9IGxBcmMuc2l0ZTtcbiAgdmFyIGxmb2N4ID0gc2l0ZVswXSxcbiAgICAgIGxmb2N5ID0gc2l0ZVsxXSxcbiAgICAgIHBsYnkyID0gbGZvY3kgLSBkaXJlY3RyaXg7XG5cbiAgaWYgKCFwbGJ5MikgcmV0dXJuIGxmb2N4O1xuXG4gIHZhciBobCA9IGxmb2N4IC0gcmZvY3gsXG4gICAgICBhYnkyID0gMSAvIHBieTIgLSAxIC8gcGxieTIsXG4gICAgICBiID0gaGwgLyBwbGJ5MjtcblxuICBpZiAoYWJ5MikgcmV0dXJuICgtYiArIE1hdGguc3FydChiICogYiAtIDIgKiBhYnkyICogKGhsICogaGwgLyAoLTIgKiBwbGJ5MikgLSBsZm9jeSArIHBsYnkyIC8gMiArIHJmb2N5IC0gcGJ5MiAvIDIpKSkgLyBhYnkyICsgcmZvY3g7XG5cbiAgcmV0dXJuIChyZm9jeCArIGxmb2N4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHJpZ2h0QnJlYWtQb2ludChhcmMsIGRpcmVjdHJpeCkge1xuICB2YXIgckFyYyA9IGFyYy5OO1xuICBpZiAockFyYykgcmV0dXJuIGxlZnRCcmVha1BvaW50KHJBcmMsIGRpcmVjdHJpeCk7XG4gIHZhciBzaXRlID0gYXJjLnNpdGU7XG4gIHJldHVybiBzaXRlWzFdID09PSBkaXJlY3RyaXggPyBzaXRlWzBdIDogSW5maW5pdHk7XG59XG4iLCJpbXBvcnQge2FkZEJlYWNoLCByZW1vdmVCZWFjaH0gZnJvbSBcIi4vQmVhY2hcIjtcbmltcG9ydCB7c29ydENlbGxIYWxmZWRnZXMsIGNlbGxIYWxmZWRnZVN0YXJ0LCBjbGlwQ2VsbHN9IGZyb20gXCIuL0NlbGxcIjtcbmltcG9ydCB7Zmlyc3RDaXJjbGV9IGZyb20gXCIuL0NpcmNsZVwiO1xuaW1wb3J0IHtjbGlwRWRnZXN9IGZyb20gXCIuL0VkZ2VcIjtcbmltcG9ydCBSZWRCbGFja1RyZWUgZnJvbSBcIi4vUmVkQmxhY2tUcmVlXCI7XG5cbmV4cG9ydCB2YXIgZXBzaWxvbiA9IDFlLTY7XG5leHBvcnQgdmFyIGVwc2lsb24yID0gMWUtMTI7XG5leHBvcnQgdmFyIGJlYWNoZXM7XG5leHBvcnQgdmFyIGNlbGxzO1xuZXhwb3J0IHZhciBjaXJjbGVzO1xuZXhwb3J0IHZhciBlZGdlcztcblxuZnVuY3Rpb24gdHJpYW5nbGVBcmVhKGEsIGIsIGMpIHtcbiAgcmV0dXJuIChhWzBdIC0gY1swXSkgKiAoYlsxXSAtIGFbMV0pIC0gKGFbMF0gLSBiWzBdKSAqIChjWzFdIC0gYVsxXSk7XG59XG5cbmZ1bmN0aW9uIGxleGljb2dyYXBoaWMoYSwgYikge1xuICByZXR1cm4gYlsxXSAtIGFbMV1cbiAgICAgIHx8IGJbMF0gLSBhWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaWFncmFtKHNpdGVzLCBleHRlbnQpIHtcbiAgdmFyIHNpdGUgPSBzaXRlcy5zb3J0KGxleGljb2dyYXBoaWMpLnBvcCgpLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBjaXJjbGU7XG5cbiAgZWRnZXMgPSBbXTtcbiAgY2VsbHMgPSBuZXcgQXJyYXkoc2l0ZXMubGVuZ3RoKTtcbiAgYmVhY2hlcyA9IG5ldyBSZWRCbGFja1RyZWU7XG4gIGNpcmNsZXMgPSBuZXcgUmVkQmxhY2tUcmVlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY2lyY2xlID0gZmlyc3RDaXJjbGU7XG4gICAgaWYgKHNpdGUgJiYgKCFjaXJjbGUgfHwgc2l0ZVsxXSA8IGNpcmNsZS55IHx8IChzaXRlWzFdID09PSBjaXJjbGUueSAmJiBzaXRlWzBdIDwgY2lyY2xlLngpKSkge1xuICAgICAgaWYgKHNpdGVbMF0gIT09IHggfHwgc2l0ZVsxXSAhPT0geSkge1xuICAgICAgICBhZGRCZWFjaChzaXRlKTtcbiAgICAgICAgeCA9IHNpdGVbMF0sIHkgPSBzaXRlWzFdO1xuICAgICAgfVxuICAgICAgc2l0ZSA9IHNpdGVzLnBvcCgpO1xuICAgIH0gZWxzZSBpZiAoY2lyY2xlKSB7XG4gICAgICByZW1vdmVCZWFjaChjaXJjbGUuYXJjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc29ydENlbGxIYWxmZWRnZXMoKTtcblxuICBpZiAoZXh0ZW50KSB7XG4gICAgdmFyIHgwID0gK2V4dGVudFswXVswXSxcbiAgICAgICAgeTAgPSArZXh0ZW50WzBdWzFdLFxuICAgICAgICB4MSA9ICtleHRlbnRbMV1bMF0sXG4gICAgICAgIHkxID0gK2V4dGVudFsxXVsxXTtcbiAgICBjbGlwRWRnZXMoeDAsIHkwLCB4MSwgeTEpO1xuICAgIGNsaXBDZWxscyh4MCwgeTAsIHgxLCB5MSk7XG4gIH1cblxuICB0aGlzLmVkZ2VzID0gZWRnZXM7XG4gIHRoaXMuY2VsbHMgPSBjZWxscztcblxuICBiZWFjaGVzID1cbiAgY2lyY2xlcyA9XG4gIGVkZ2VzID1cbiAgY2VsbHMgPSBudWxsO1xufVxuXG5EaWFncmFtLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpYWdyYW0sXG5cbiAgcG9seWdvbnM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlZGdlcyA9IHRoaXMuZWRnZXM7XG5cbiAgICByZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24oY2VsbCkge1xuICAgICAgdmFyIHBvbHlnb24gPSBjZWxsLmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24oaSkgeyByZXR1cm4gY2VsbEhhbGZlZGdlU3RhcnQoY2VsbCwgZWRnZXNbaV0pOyB9KTtcbiAgICAgIHBvbHlnb24uZGF0YSA9IGNlbGwuc2l0ZS5kYXRhO1xuICAgICAgcmV0dXJuIHBvbHlnb247XG4gICAgfSk7XG4gIH0sXG5cbiAgdHJpYW5nbGVzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdHJpYW5nbGVzID0gW10sXG4gICAgICAgIGVkZ2VzID0gdGhpcy5lZGdlcztcblxuICAgIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihjZWxsLCBpKSB7XG4gICAgICBpZiAoIShtID0gKGhhbGZlZGdlcyA9IGNlbGwuaGFsZmVkZ2VzKS5sZW5ndGgpKSByZXR1cm47XG4gICAgICB2YXIgc2l0ZSA9IGNlbGwuc2l0ZSxcbiAgICAgICAgICBoYWxmZWRnZXMsXG4gICAgICAgICAgaiA9IC0xLFxuICAgICAgICAgIG0sXG4gICAgICAgICAgczAsXG4gICAgICAgICAgZTEgPSBlZGdlc1toYWxmZWRnZXNbbSAtIDFdXSxcbiAgICAgICAgICBzMSA9IGUxLmxlZnQgPT09IHNpdGUgPyBlMS5yaWdodCA6IGUxLmxlZnQ7XG5cbiAgICAgIHdoaWxlICgrK2ogPCBtKSB7XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIGUxID0gZWRnZXNbaGFsZmVkZ2VzW2pdXTtcbiAgICAgICAgczEgPSBlMS5sZWZ0ID09PSBzaXRlID8gZTEucmlnaHQgOiBlMS5sZWZ0O1xuICAgICAgICBpZiAoczAgJiYgczEgJiYgaSA8IHMwLmluZGV4ICYmIGkgPCBzMS5pbmRleCAmJiB0cmlhbmdsZUFyZWEoc2l0ZSwgczAsIHMxKSA8IDApIHtcbiAgICAgICAgICB0cmlhbmdsZXMucHVzaChbc2l0ZS5kYXRhLCBzMC5kYXRhLCBzMS5kYXRhXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG4gIH0sXG5cbiAgbGlua3M6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihlZGdlKSB7XG4gICAgICByZXR1cm4gZWRnZS5yaWdodDtcbiAgICB9KS5tYXAoZnVuY3Rpb24oZWRnZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBlZGdlLmxlZnQuZGF0YSxcbiAgICAgICAgdGFyZ2V0OiBlZGdlLnJpZ2h0LmRhdGFcbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgZmluZDogZnVuY3Rpb24oeCwgeSwgcmFkaXVzKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzLCBpMCwgaTEgPSB0aGF0Ll9mb3VuZCB8fCAwLCBuID0gdGhhdC5jZWxscy5sZW5ndGgsIGNlbGw7XG5cbiAgICAvLyBVc2UgdGhlIHByZXZpb3VzbHktZm91bmQgY2VsbCwgb3Igc3RhcnQgd2l0aCBhbiBhcmJpdHJhcnkgb25lLlxuICAgIHdoaWxlICghKGNlbGwgPSB0aGF0LmNlbGxzW2kxXSkpIGlmICgrK2kxID49IG4pIHJldHVybiBudWxsO1xuICAgIHZhciBkeCA9IHggLSBjZWxsLnNpdGVbMF0sIGR5ID0geSAtIGNlbGwuc2l0ZVsxXSwgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcblxuICAgIC8vIFRyYXZlcnNlIHRoZSBoYWxmLWVkZ2VzIHRvIGZpbmQgYSBjbG9zZXIgY2VsbCwgaWYgYW55LlxuICAgIGRvIHtcbiAgICAgIGNlbGwgPSB0aGF0LmNlbGxzW2kwID0gaTFdLCBpMSA9IG51bGw7XG4gICAgICBjZWxsLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGVkZ2UgPSB0aGF0LmVkZ2VzW2VdLCB2ID0gZWRnZS5sZWZ0O1xuICAgICAgICBpZiAoKHYgPT09IGNlbGwuc2l0ZSB8fCAhdikgJiYgISh2ID0gZWRnZS5yaWdodCkpIHJldHVybjtcbiAgICAgICAgdmFyIHZ4ID0geCAtIHZbMF0sIHZ5ID0geSAtIHZbMV0sIHYyID0gdnggKiB2eCArIHZ5ICogdnk7XG4gICAgICAgIGlmICh2MiA8IGQyKSBkMiA9IHYyLCBpMSA9IHYuaW5kZXg7XG4gICAgICB9KTtcbiAgICB9IHdoaWxlIChpMSAhPT0gbnVsbCk7XG5cbiAgICB0aGF0Ll9mb3VuZCA9IGkwO1xuXG4gICAgcmV0dXJuIHJhZGl1cyA9PSBudWxsIHx8IGQyIDw9IHJhZGl1cyAqIHJhZGl1cyA/IGNlbGwuc2l0ZSA6IG51bGw7XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBUcmFuc2Zvcm0oaywgeCwgeSkge1xuICB0aGlzLmsgPSBrO1xuICB0aGlzLnggPSB4O1xuICB0aGlzLnkgPSB5O1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNmb3JtLFxuICBzY2FsZTogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBrID09PSAxID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rICogaywgdGhpcy54LCB0aGlzLnkpO1xuICB9LFxuICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4geCA9PT0gMCAmIHkgPT09IDAgPyB0aGlzIDogbmV3IFRyYW5zZm9ybSh0aGlzLmssIHRoaXMueCArIHRoaXMuayAqIHgsIHRoaXMueSArIHRoaXMuayAqIHkpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gW3BvaW50WzBdICogdGhpcy5rICsgdGhpcy54LCBwb2ludFsxXSAqIHRoaXMuayArIHRoaXMueV07XG4gIH0sXG4gIGFwcGx5WDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4ICogdGhpcy5rICsgdGhpcy54O1xuICB9LFxuICBhcHBseVk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4geSAqIHRoaXMuayArIHRoaXMueTtcbiAgfSxcbiAgaW52ZXJ0OiBmdW5jdGlvbihsb2NhdGlvbikge1xuICAgIHJldHVybiBbKGxvY2F0aW9uWzBdIC0gdGhpcy54KSAvIHRoaXMuaywgKGxvY2F0aW9uWzFdIC0gdGhpcy55KSAvIHRoaXMua107XG4gIH0sXG4gIGludmVydFg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKHggLSB0aGlzLngpIC8gdGhpcy5rO1xuICB9LFxuICBpbnZlcnRZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuICh5IC0gdGhpcy55KSAvIHRoaXMuaztcbiAgfSxcbiAgcmVzY2FsZVg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geC5jb3B5KCkuZG9tYWluKHgucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLCB0aGlzKS5tYXAoeC5pbnZlcnQsIHgpKTtcbiAgfSxcbiAgcmVzY2FsZVk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4geS5jb3B5KCkuZG9tYWluKHkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLCB0aGlzKS5tYXAoeS5pbnZlcnQsIHkpKTtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIHRoaXMueCArIFwiLFwiICsgdGhpcy55ICsgXCIpIHNjYWxlKFwiICsgdGhpcy5rICsgXCIpXCI7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSBuZXcgVHJhbnNmb3JtKDEsIDAsIDApO1xuXG50cmFuc2Zvcm0ucHJvdG90eXBlID0gVHJhbnNmb3JtLnByb3RvdHlwZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtKG5vZGUpIHtcbiAgd2hpbGUgKCFub2RlLl9fem9vbSkgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHJldHVybiBpZGVudGl0eTtcbiAgcmV0dXJuIG5vZGUuX196b29tO1xufVxuIiwiaW1wb3J0IHtcbiAgc2VsZWN0LFxuICBzY2FsZU9yZGluYWwsXG4gIHNjYWxlQmFuZCxcbiAgYXhpc1RvcCxcbiAgYXhpc0xlZnQsXG4gIGpzb24sXG4gIGNyb3NzLFxuICBzZWxlY3RBbGwsXG4gIGV2ZW50LFxuICB6b29tSWRlbnRpdHlcbn0gZnJvbSBcImQzXCI7XG5pbXBvcnQgXCIuLy4uL3N0eWxlcy9jb2xsYXBzaWJsZS1oZWF0bWFwLmNzc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYXBzaWJsZUhlYXRNYXAge1xuICBjb25zdHJ1Y3Rvcih3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIGRhdGFVcmwsIHJvb3RFbGVtZW50KSB7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMubWFyZ2luID0gbWFyZ2luO1xuICAgIHRoaXMuZGF0YVVybCA9IGRhdGFVcmw7XG4gICAgdGhpcy5yb290RWxlbWVudCA9IHJvb3RFbGVtZW50O1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgdGhpcy5pbml0aWFsUGFpcmluZyA9IG51bGw7XG4gICAgdGhpcy5zY3JvbGxpbmcgPSBudWxsO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5yb290RWxlbWVudCk7XG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICB0aGlzLndpZHRoID0gcm9vdC5jbGllbnRXaWR0aDtcbiAgICB0aGlzLnhBeGlzU3ZnID0gc2VsZWN0KHJvb3QpXG4gICAgICAuYXBwZW5kKFwic3ZnXCIpXG4gICAgICAuYXR0cihcInZpZXdCb3hcIiwgWzAsIDAsIHRoaXMud2lkdGgsIHRoaXMubWFyZ2luLnRvcCArIDJdKVxuICAgICAgLmF0dHIoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pbllNaW4gbWVldFwiKVxuICAgICAgLnN0eWxlKFwicG9zaXRpb25cIiwgXCJzdGlja3lcIilcbiAgICAgIC5zdHlsZShcInRvcFwiLCAxMjApXG4gICAgICAvLy5zdHlsZShcInRvcFwiLCAyMClcbiAgICAgIC5zdHlsZShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWltYWdlXCIsXG4gICAgICAgIFwibGluZWFyLWdyYWRpZW50KHRvIGxlZnQgYm90dG9tLCAjZmZmZmZmLCAjZmZmZmZmLCAjZmZmZmZmLCAjZmZmZmZmLCAjZmZmZmZmLCAjZmZmZmZmOTQpXCJcbiAgICAgICk7XG4gICAgdGhpcy5zdmcgPSBzZWxlY3Qocm9vdClcbiAgICAgIC5hcHBlbmQoXCJzdmdcIilcbiAgICAgIC5hdHRyKFwidmlld0JveFwiLCBbMCwgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdKVxuICAgICAgLmF0dHIoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pbllNaW4gbWVldFwiKTtcbiAgICBsZXQgc2Nyb2xsaW5nVGltZU91dCA9IG51bGw7XG4gICAgc2VsZWN0KHJvb3QpLm9uKFwic2Nyb2xsXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsaW5nID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dChzY3JvbGxpbmdUaW1lT3V0KTtcbiAgICAgIHNjcm9sbGluZ1RpbWVPdXQgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLnNjcm9sbGluZyA9IGZhbHNlKSwgNjYpO1xuICAgIH0pO1xuXG4gICAgbGV0IGNsaXBzID0gdGhpcy5zdmcuYXBwZW5kKFwiZGVmc1wiKTtcbiAgICBjbGlwc1xuICAgICAgLmFwcGVuZChcImNsaXBQYXRoXCIpXG4gICAgICAuYXR0cihcImlkXCIsIFwibWFpbkNsaXBcIilcbiAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAuYXR0cihcInhcIiwgdGhpcy5tYXJnaW4ubGVmdCArIDIpXG4gICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy53aWR0aCAtIHRoaXMubWFyZ2luLnJpZ2h0KVxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQgLSB0aGlzLm1hcmdpbi5ib3R0b20pO1xuXG4gICAgY2xpcHNcbiAgICAgIC5hcHBlbmQoXCJjbGlwUGF0aFwiKVxuICAgICAgLmF0dHIoXCJpZFwiLCBcInhDbGlwXCIpXG4gICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMubWFyZ2luLmxlZnQgKyAyKVxuICAgICAgLmF0dHIoXCJ5XCIsIDApXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMud2lkdGggLSB0aGlzLm1hcmdpbi5yaWdodClcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMubWFyZ2luLnRvcCArIDIpO1xuXG4gICAgY2xpcHNcbiAgICAgIC5hcHBlbmQoXCJjbGlwUGF0aFwiKVxuICAgICAgLmF0dHIoXCJpZFwiLCBcInlDbGlwXCIpXG4gICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgLmF0dHIoXCJ4XCIsIDApXG4gICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5tYXJnaW4ubGVmdCArIDIpXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmhlaWdodCAtIHRoaXMubWFyZ2luLmJvdHRvbSk7XG5cbiAgICB0aGlzLmNoYXJ0Qm9keSA9IHRoaXMuc3ZnXG4gICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImNoYXJ0Qm9keVwiKVxuICAgICAgLmF0dHIoXCJjbGlwLXBhdGhcIiwgXCJ1cmwoI21haW5DbGlwKVwiKTtcblxuICAgIHRoaXMubWFpbiA9IHRoaXMuY2hhcnRCb2R5XG4gICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm1haW5cIilcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoMSwgLSR7dGhpcy5tYXJnaW4udG9wICsgMn0pYCk7XG5cbiAgICB0aGlzLnRpdGxlID0gdGhpcy54QXhpc1N2Z1xuICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZVwiKVxuICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMud2lkdGggLyAyKVxuICAgICAgLmF0dHIoXCJ5XCIsIDIwKVxuICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIik7XG5cbiAgICB0aGlzLmdZID0gdGhpcy5zdmdcbiAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAuYXR0cihcImNsaXAtcGF0aFwiLCBcInVybCgjeUNsaXApXCIpXG4gICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInktYXhpc1wiKVxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3RoaXMubWFyZ2luLmxlZnR9LCAtJHt0aGlzLm1hcmdpbi50b3B9KWApO1xuXG4gICAgdGhpcy5nWCA9IHRoaXMueEF4aXNTdmdcbiAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAuYXR0cihcImNsaXAtcGF0aFwiLCBcInVybCgjeENsaXApXCIpXG4gICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIngtYXhpc1wiKVxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgwLCAke3RoaXMubWFyZ2luLnRvcH0pYCk7XG5cbiAgICB0aGlzLnJlZHMgPSBzY2FsZU9yZGluYWwoKVxuICAgICAgLmRvbWFpbihbLTEsIDFdKVxuICAgICAgLnJhbmdlKFtcIiNkZWRlZGU4ZlwiLCBcIiNlZDdiMjVjNFwiLCBcIiMxNWEyYjg4ZlwiXSk7XG5cbiAgICB0aGlzLnggPSBzY2FsZUJhbmQoKVxuICAgICAgLnJhbmdlKFt0aGlzLm1hcmdpbi5sZWZ0LCB0aGlzLndpZHRoIC0gdGhpcy5tYXJnaW4ucmlnaHRdKVxuICAgICAgLnBhZGRpbmcoMC4wNSk7XG5cbiAgICB0aGlzLnkgPSBzY2FsZUJhbmQoKVxuICAgICAgLnJhbmdlKFt0aGlzLmhlaWdodCwgdGhpcy5tYXJnaW4udG9wICsgMl0pXG4gICAgICAucGFkZGluZygwLjA1KTtcblxuICAgIHRoaXMueEF4aXMgPSBheGlzVG9wKHRoaXMueCk7XG4gICAgdGhpcy55QXhpcyA9IGF4aXNMZWZ0KHRoaXMueSk7XG4gICAgLy8gdGhpcy56b29tID0gem9vbSgpXG4gICAgLy8gICAuc2NhbGVFeHRlbnQoWzEsIDEwXSlcbiAgICAvLyAgIC50cmFuc2xhdGVFeHRlbnQoW1xuICAgIC8vICAgICBbdGhpcy5tYXJnaW4ubGVmdCwgdGhpcy5tYXJnaW4udG9wICsgMl0sXG4gICAgLy8gICAgIFt0aGlzLndpZHRoLCB0aGlzLmhlaWdodF1cbiAgICAvLyAgIF0pXG4gICAgLy8gICAuZXh0ZW50KFtcbiAgICAvLyAgICAgW3RoaXMubWFyZ2luLmxlZnQsIHRoaXMubWFyZ2luLnRvcCArIDJdLFxuICAgIC8vICAgICBbdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdXG4gICAgLy8gICBdKVxuICAgIC8vICAgLm9uKFwiem9vbVwiLCAoKSA9PiB0aGlzLnpvb21lZCgpKTtcbiAgICAvLyB0aGlzLnN2Zy5jYWxsKHRoaXMuem9vbSk7XG4gIH1cblxuICBsb2FkKCkge1xuICAgIHJldHVybiBqc29uKHRoaXMuZGF0YVVybCwge1xuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzXCIgfSlcbiAgICB9KS50aGVuKGRhdGEgPT4ge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhQXNOZXR3b3JrKGRhdGEpO1xuICAgICAgdGhpcy5nZW5lcyA9IHRoaXMuZGF0YS5ub2Rlc1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSBcImdlbmVcIilcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IChhLm5hbWUgPiBiLm5hbWUgPyAxIDogYi5uYW1lID4gYS5uYW1lID8gLTEgOiAwKSk7XG4gICAgICB0aGlzLnByb2NlZHVyZXMgPSB0aGlzLmRhdGEubm9kZXNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gXCJwcm9jZWR1cmVcIilcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IChhLm5hbWUgPiBiLm5hbWUgPyAxIDogYi5uYW1lID4gYS5uYW1lID8gLTEgOiAwKSk7XG4gICAgICB0aGlzLnBhcmFtZXRlcnMgPSB0aGlzLmRhdGEubm9kZXNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gXCJwYXJhbWV0ZXJcIilcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IChhLm5hbWUgPiBiLm5hbWUgPyAxIDogYi5uYW1lID4gYS5uYW1lID8gLTEgOiAwKSk7XG4gICAgICB0aGlzLnJvd3MgPSB0aGlzLmdlbmVzLnJldmVyc2UoKTtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMucHJvY2VkdXJlcztcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoc29ydEJ5KSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9uID0gdGhpcy5zZWxlY3RlZFByb2NlZHVyZSA/IDUwIDogNTAwO1xuICAgIGNvbnN0IHRyYW5zaXRpb24gPSB0aGlzLnN2Zy50cmFuc2l0aW9uKCkuZHVyYXRpb24odHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByb2NlZHVyZSkge1xuICAgICAgdGhpcy54QXhpc1N2Z1xuICAgICAgICAuc2VsZWN0KFwiLnRpdGxlXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZSBjbGlja2FibGUtdGV4dFwiKVxuICAgICAgICAub24oXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2NlZHVyZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMucHJvY2VkdXJlcztcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9KVxuICAgICAgICAuaHRtbChg4oaQIEdlbmVzIHZzICR7dGhpcy5zZWxlY3RlZFByb2NlZHVyZX0gcGFyYW1ldGVyc2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnhBeGlzU3ZnXG4gICAgICAgIC5zZWxlY3QoXCIudGl0bGVcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRpdGxlXCIpXG4gICAgICAgIC5vbihcImNsaWNrXCIsIG51bGwpXG4gICAgICAgIC50ZXh0KFwiR2VuZXMgdnMgUHJvY2VkdXJlc1wiKTtcbiAgICB9XG4gICAgY29uc3QgcGFpcmluZyA9IGNyb3NzKHRoaXMucm93cywgdGhpcy5jb2x1bW5zKTtcbiAgICBsZXQgbWF0cml4ID0gbnVsbDtcbiAgICBpZiAodGhpcy5pbml0aWFsTWF0cml4ICYmICF0aGlzLnNlbGVjdGVkUHJvY2VkdXJlKSB7XG4gICAgICBtYXRyaXggPSB0aGlzLmluaXRpYWxNYXRyaXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdHJpeCA9IHBhaXJpbmcucmVkdWNlKChhY2MsIGN1cikgPT4ge1xuICAgICAgICBpZiAoYWNjW2N1clswXS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjY1tjdXJbMF0uaWRdID0geyBuYW1lOiBjdXJbMF0ubmFtZSwgcHJvY2VkdXJlczoge30gfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5kYXRhLmxpbmtzW2Ake2N1clswXS5pZH1fJHtjdXJbMV0uaWR9YF07XG4gICAgICAgIGxldCBjb2xvciA9IGxpbmsgPyBsaW5rLndlaWdodCA6IC0xO1xuICAgICAgICBjb2xvciA9IGNvbG9yID4gMCA/IDEgOiBjb2xvcjtcbiAgICAgICAgYWNjW2N1clswXS5pZF0ucHJvY2VkdXJlc1tjdXJbMV0uaWRdID0geyBjb2xvciwgbmFtZTogY3VyWzFdLm5hbWUgfTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRoaXMuY29sdW1ucy5tYXAoZyA9PiBnLm5hbWUpO1xuICAgIGNvbnN0IHJvd05hbWVzID0gdGhpcy5yb3dzLm1hcChwID0+IHAubmFtZSk7XG5cbiAgICB0aGlzLnguZG9tYWluKGNvbHVtbk5hbWVzKTtcbiAgICBjb25zdCBkeW5hbWljSGVpZ2h0ID0gdGhpcy5tYXJnaW4udG9wICsgdGhpcy5yb3dzLmxlbmd0aCAqIDQwO1xuICAgIHRoaXMuc3ZnLmF0dHIoXCJ2aWV3Qm94XCIsIFtcbiAgICAgIDAsXG4gICAgICAwLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0ID4gZHluYW1pY0hlaWdodCA/IGR5bmFtaWNIZWlnaHQgOiB0aGlzLmhlaWdodFxuICAgIF0pO1xuICAgIGNvbnN0IHlSYW5nZSA9IFtcbiAgICAgIHRoaXMuaGVpZ2h0ID4gZHluYW1pY0hlaWdodFxuICAgICAgICA/IGR5bmFtaWNIZWlnaHQgLSB0aGlzLm1hcmdpbi5ib3R0b21cbiAgICAgICAgOiB0aGlzLmhlaWdodCAtIHRoaXMubWFyZ2luLmJvdHRvbSxcbiAgICAgIHRoaXMubWFyZ2luLnRvcCArIDJcbiAgICBdO1xuICAgIHRoaXMueS5kb21haW4ocm93TmFtZXMpLnJhbmdlKHlSYW5nZSk7XG5cbiAgICBjb25zdCBkZWxheSA9IGxhYmVsID0+IHtcbiAgICAgIGNvbnN0IGRvbWFpbiA9IHNvcnRCeSA9PSBcImNvbHVtbnNcIiA/IGNvbHVtbk5hbWVzIDogcm93TmFtZXM7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRvbWFpbi5pbmRleE9mKGxhYmVsKTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9DZW50ZXIgPVxuICAgICAgICBkb21haW4ubGVuZ3RoIC0gTWF0aC5hYnMoZG9tYWluLmxlbmd0aCAvIDIgLSB2YWx1ZSk7XG4gICAgICByZXR1cm4gZGlzdGFuY2VUb0NlbnRlciAqIDEwO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWxheUNlbGwgPSBkID0+IHtcbiAgICAgIHJldHVybiBkZWxheShkLm5hbWUpO1xuICAgIH07XG5cbiAgICB0aGlzLm1haW5cbiAgICAgIC5zZWxlY3RBbGwoXCJzdmdcIilcbiAgICAgIC5kYXRhKE9iamVjdC5rZXlzKG1hdHJpeCkpXG4gICAgICAuam9pbihcbiAgICAgICAgZW50ZXIgPT4ge1xuICAgICAgICAgIGVudGVyXG4gICAgICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLnkuYmFuZHdpZHRoKCkpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZ2VuZSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnkobWF0cml4W2dlbmVdLm5hbWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5lYWNoKChnZW5lLCBpbmRleCwgbm9kZXMpID0+IHtcbiAgICAgICAgICAgICAgc2VsZWN0KG5vZGVzW2luZGV4XSlcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5kYXRhKFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobWF0cml4W2dlbmVdLnByb2NlZHVyZXMpLFxuICAgICAgICAgICAgICAgICAgcHJvY2VkdXJlID0+IGdlbmUuaWQgKyBcIl9cIiArIHByb2NlZHVyZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuam9pbihcbiAgICAgICAgICAgICAgICAgIGVudGVyID0+IHRoaXMuZW50ZXJSZWN0KGVudGVyLCBtYXRyaXgsIGdlbmUpLFxuICAgICAgICAgICAgICAgICAgdXBkYXRlID0+IHRoaXMudXBkYXRlUmVjdCh1cGRhdGUsIG1hdHJpeCwgZ2VuZSksXG4gICAgICAgICAgICAgICAgICBleGl0ID0+IHRoaXMuZXhpdFJlY3QoZXhpdClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZSA9PiB7XG4gICAgICAgICAgdXBkYXRlXG4gICAgICAgICAgICAudHJhbnNpdGlvbih0cmFuc2l0aW9uKVxuICAgICAgICAgICAgLmRlbGF5KHNvcnRCeSA/IGRlbGF5Q2VsbCA6IDApXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLnkuYmFuZHdpZHRoKCkpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZ2VuZSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnkobWF0cml4W2dlbmVdLm5hbWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5lYWNoKChnZW5lLCBpbmRleCwgbm9kZXMpID0+IHtcbiAgICAgICAgICAgICAgc2VsZWN0KG5vZGVzW2luZGV4XSlcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5kYXRhKFxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobWF0cml4W2dlbmVdLnByb2NlZHVyZXMpLFxuICAgICAgICAgICAgICAgICAgcHJvY2VkdXJlID0+IGdlbmUuaWQgKyBcIl9cIiArIHByb2NlZHVyZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuam9pbihcbiAgICAgICAgICAgICAgICAgIGVudGVyID0+IHRoaXMuZW50ZXJSZWN0KGVudGVyLCBtYXRyaXgsIGdlbmUpLFxuICAgICAgICAgICAgICAgICAgdXBkYXRlID0+IHRoaXMudXBkYXRlUmVjdCh1cGRhdGUsIG1hdHJpeCwgZ2VuZSksXG4gICAgICAgICAgICAgICAgICBleGl0ID0+IHRoaXMuZXhpdFJlY3QoZXhpdClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXhpdCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGV4aXRcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKHRyYW5zaXRpb24pXG4gICAgICAgICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIDApXG4gICAgICAgICAgICAucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC50cmFuc2l0aW9uKHRyYW5zaXRpb24pXG4gICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIDEpO1xuXG4gICAgbGV0IHN1ZmZpeCA9ICF0aGlzLnNlbGVjdGVkUHJvY2VkdXJlID8gXCIgK1wiIDogXCJcIjtcblxuICAgIHRoaXMuZ1hcbiAgICAgIC50cmFuc2l0aW9uKHRoaXMueEF4aXNTdmcudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRyYW5zaXRpb25EdXJhdGlvbikpXG4gICAgICAuZGVsYXkoc29ydEJ5ID8gZGVsYXkgOiBudWxsKVxuICAgICAgLmNhbGwoXG4gICAgICAgIHRoaXMueEF4aXMudGlja0Zvcm1hdChkID0+IHRoaXMudHJ1bmNhdGUuYXBwbHkoZCwgWzI1LCB0cnVlXSkgKyBzdWZmaXgpXG4gICAgICApXG4gICAgICAub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2NlZHVyZSkge1xuICAgICAgICAgIHhMYWJlbHMub24oXCJjbGlja1wiLCBudWxsKS5hdHRyKFwiY2xhc3NcIiwgXCJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeExhYmVsc1xuICAgICAgICAgICAgLm9uKFwiY2xpY2tcIiwgcHJvY2VkdXJlTmFtZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9jZWR1cmUgPSBwcm9jZWR1cmVOYW1lO1xuICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnBhcmFtZXRlcnMuZmlsdGVyKHBhcmFtZXRlciA9PlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlci5pZC5zdGFydHNXaXRoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZWR1cmVzLmZpbmQocCA9PiBwLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRQcm9jZWR1cmUpXG4gICAgICAgICAgICAgICAgICAgIC5pZCArIFwifFwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjbGlja2FibGUtdGV4dFwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5nWVxuICAgICAgLnRyYW5zaXRpb24odGhpcy5zdmcudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRyYW5zaXRpb25EdXJhdGlvbikpXG4gICAgICAuZGVsYXkoc29ydEJ5ID8gZGVsYXkgOiBudWxsKVxuICAgICAgLmNhbGwodGhpcy55QXhpcyk7XG5cbiAgICBjb25zdCB4TGFiZWxzID0gdGhpcy5nWFxuICAgICAgLnNlbGVjdEFsbChcInRleHRcIilcbiAgICAgIC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment