You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2 lines
540 KiB
JavaScript
2 lines
540 KiB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("ndarray"),require("get-pixels")):"function"==typeof define&&define.amd?define("Quagga",["ndarray","get-pixels"],t):"object"==typeof exports?exports.Quagga=t(require("ndarray"),require("get-pixels")):e.Quagga=t(e.ndarray,e["get-pixels"])}(global,function(e,t){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/",r(r.s=21)}([function(e,t){e.exports=function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}},function(e,t){function r(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function r(t){return e.exports=r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},r(t)}e.exports=r},function(e,t,r){var n=r(8),i=r(6);e.exports=function(e,t){return!t||"object"!==n(t)&&"function"!=typeof t?i(e):t}},function(e,t,r){var n=r(15);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&n(e,t)}},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t,r){r(3);var n=r(16);function i(t,r,a){return"undefined"!=typeof Reflect&&Reflect.get?e.exports=i=Reflect.get:e.exports=i=function(e,t,r){var i=n(e,t);if(i){var a=Object.getOwnPropertyDescriptor(i,t);return a.get?a.get.call(r):a.value}},i(t,r,a||t)}e.exports=i},function(e,t){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(t){return"function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?e.exports=n=function(e){return r(e)}:e.exports=n=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":r(e)},n(t)}e.exports=n},function(e,t,r){var n=r(12),i=r(13),a=r(14);e.exports=function(e){return n(e)||i(e)||a()}},function(e,t,r){e.exports=r(17)},function(e,t){function r(e,t,r,n,i,a,o){try{var s=e[a](o),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,i)}e.exports=function(e){return function(){var t=this,n=arguments;return new Promise(function(i,a){var o=e.apply(t,n);function s(e){r(o,i,a,s,u,"next",e)}function u(e){r(o,i,a,s,u,"throw",e)}s(void 0)})}}},function(e,t){e.exports=function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}},function(e,t){e.exports=function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}},function(e,t){function r(t,n){return e.exports=r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},r(t,n)}e.exports=r},function(e,t,r){var n=r(3);e.exports=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=n(e)););return e}},function(e,t,r){var n=function(){return this||"object"==typeof self&&self}()||Function("return this")(),i=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,a=i&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=r(18),i)n.regeneratorRuntime=a;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},function(e,t){!function(t){"use strict";var r,n=Object.prototype,i=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",s=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag",c="object"==typeof e,h=t.regeneratorRuntime;if(h)c&&(e.exports=h);else{(h=t.regeneratorRuntime=c?e.exports:{}).wrap=b;var l="suspendedStart",f="suspendedYield",d="executing",v="completed",_={},p={};p[o]=function(){return this};var g=Object.getPrototypeOf,y=g&&g(g(z([])));y&&y!==n&&i.call(y,o)&&(p=y);var m=C.prototype=x.prototype=Object.create(p);k.prototype=m.constructor=C,C.constructor=k,C[u]=k.displayName="GeneratorFunction",h.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},h.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,C):(e.__proto__=C,u in e||(e[u]="GeneratorFunction")),e.prototype=Object.create(m),e},h.awrap=function(e){return{__await:e}},A(S.prototype),S.prototype[s]=function(){return this},h.AsyncIterator=S,h.async=function(e,t,r,n){var i=new S(b(e,t,r,n));return h.isGeneratorFunction(t)?i:i.next().then(function(e){return e.done?e.value:i.next()})},A(m),m[u]="Generator",m[o]=function(){return this},m.toString=function(){return"[object Generator]"},h.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},h.values=z,R.prototype={constructor:R,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&i.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=r)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,i){return s.type="throw",s.arg=e,t.next=n,i&&(t.method="next",t.arg=r),!!i}for(var a=this.tryEntries.length-1;a>=0;--a){var o=this.tryEntries[a],s=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var u=i.call(o,"catchLoc"),c=i.call(o,"finallyLoc");if(u&&c){if(this.prev<o.catchLoc)return n(o.catchLoc,!0);if(this.prev<o.finallyLoc)return n(o.finallyLoc)}else if(u){if(this.prev<o.catchLoc)return n(o.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return n(o.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var a=n;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var o=a?a.completion:{};return o.type=e,o.arg=t,a?(this.method="next",this.next=a.finallyLoc,_):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),_},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),_}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var i=n.arg;O(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:z(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=r),_}}}function b(e,t,r,n){var i=t&&t.prototype instanceof x?t:x,a=Object.create(i.prototype),o=new R(n||[]);return a._invoke=function(e,t,r){var n=l;return function(i,a){if(n===d)throw new Error("Generator is already running");if(n===v){if("throw"===i)throw a;return I()}for(r.method=i,r.arg=a;;){var o=r.delegate;if(o){var s=E(o,r);if(s){if(s===_)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===l)throw n=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=d;var u=w(e,t,r);if("normal"===u.type){if(n=r.done?v:f,u.arg===_)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n=v,r.method="throw",r.arg=u.arg)}}}(e,r,o),a}function w(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}function x(){}function k(){}function C(){}function A(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function S(e){var t;this._invoke=function(r,n){function a(){return new Promise(function(t,a){!function t(r,n,a,o){var s=w(e[r],e,n);if("throw"!==s.type){var u=s.arg,c=u.value;return c&&"object"==typeof c&&i.call(c,"__await")?Promise.resolve(c.__await).then(function(e){t("next",e,a,o)},function(e){t("throw",e,a,o)}):Promise.resolve(c).then(function(e){u.value=e,a(u)},function(e){return t("throw",e,a,o)})}o(s.arg)}(r,n,t,a)})}return t=t?t.then(a,a):a()}}function E(e,t){var n=e.iterator[t.method];if(n===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=r,E(e,t),"throw"===t.method))return _;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return _}var i=w(n,e.iterator,t.arg);if("throw"===i.type)return t.method="throw",t.arg=i.arg,t.delegate=null,_;var a=i.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=r),t.delegate=null,_):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,_)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function R(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function z(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n<e.length;)if(i.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=r,t.done=!0,t};return a.next=a}}return{next:I}}function I(){return{value:r,done:!0}}}(function(){return this||"object"==typeof self&&self}()||Function("return this")())},function(t,r){t.exports=e},function(e,r){e.exports=t},function(e,t,r){"use strict";r.r(t);var n=r(2),i=r.n(n),a=r(1),o=r.n(a),s=r(0),u=r.n(s),c={drawPath:function(e,t,r,n){e&&e.length>1&&(t.strokeStyle=r,t.fillStyle=r,t.lineWidth=n,t.beginPath(),t.moveTo(e[0].x,e[0].y),e.slice(1).forEach(function(e){var r=e.x,n=e.y;return t.lineTo(r,n)}),t.closePath(),t.stroke())},drawImage:function(e,t,r,n){var i=n.getImageData(0,0,t,r),a=i.data,o=0|e.length,s=0|a.length;if(s/o!=4)return!1;for(;o--;){var u=e[o];a[--s]=255,a[--s]=u,a[--s]=u,a[--s]=u}return n.putImageData(i,0,0),!0}},h=function(){function e(t){i()(this,e),u()(this,"_canvas",void 0),u()(this,"_context",void 0),u()(this,"_config",void 0),u()(this,"_capacity",void 0),u()(this,"_capture",void 0),u()(this,"_results",void 0),this._results=new Array,this._config=t,this._capacity=t.capacity||20,this._capture=!0===t.capture,this._capture&&(this._canvas=document.createElement("canvas"),this._context=this._canvas.getContext("2d"))}return o()(e,[{key:"addResult",value:function(e,t,r,n){if(n&&this._capacity&&!this._contains(n)&&this._passesFilter(n)){var i={codeResult:n};this._capacity--,this._capture&&(this._canvas.width=t,this._canvas.height=r,c.drawImage(e,t,r,this._context),i.frame=this._canvas.toDataURL()),this._results.push(i)}}},{key:"getResults",value:function(){return this._results}},{key:"_contains",value:function(e){return this._config.blacklist&&this._config.blacklist.some(function(t){return Object.keys(t).every(function(r){return t[r]===e[r]})})}},{key:"_passesFilter",value:function(e){return"function"!=typeof this._config.filter||this._config.filter(e)}}]),e}(),l={},f=function(){function e(){i()(this,e)}return o()(e,null,[{key:"subscribe",value:function(e,t,r){var n;if("function"==typeof t)n={callback:t,async:r};else if(!(n=t).callback)throw"Callback was not specified on options";d(e).subscriptions.push(n)}},{key:"publish",value:function(e,t){var r=d(e),n=r.subscriptions;n.filter(function(e){return!!e.once}).forEach(function(e){return v(e,t)}),r.subscriptions=n.filter(function(e){return!e.once}),r.subscriptions.forEach(function(e){return v(e,t)})}},{key:"once",value:function(t,r,n){e.subscribe(t,{callback:r,async:n,once:!0})}},{key:"unsubscribe",value:function(e,t){if(e){var r=d(e);r.subscriptions=r&&t?r.subscriptions.filter(function(e){return e.callback!==t}):[]}else l={}}}]),e}();function d(e){return l[e]||(l[e]={subscriptions:[]}),l[e]}function v(e,t){e.async?setTimeout(function(){e.callback(t)},4):e.callback(t)}function _(e,t){var r=e[0],n=e[1],i=e[2],a=i*n,o=a*(1-Math.abs(r/60%2-1)),s=i-a,u=0,c=0,h=0;return r<60?(u=a,c=o):r<120?(u=o,c=a):r<180?(c=a,h=o):r<240?(c=o,h=a):r<300?(u=o,h=a):r<360&&(u=a,h=o),(t=t||[0,0,0])[0]=255*(u+s)|0,t[1]=255*(c+s)|0,t[2]=255*(h+s)|0,t}var p=function(){function e(t,r,n,a){i()(this,e),u()(this,"data",void 0),u()(this,"size",void 0),r?this.data=r:(this.data=new(n||Uint8Array)(t.x*t.y),a&&this.data.fill(0)),this.size=t}return o()(e,[{key:"inImageWithBorder",value:function(e,t){return e.x>=t&&e.y>=t&&e.x<this.size.x-t&&e.y<this.size.y-t}},{key:"subImageAsCopy",value:function(e,t,r){for(var n=e.size.y,i=e.size.x,a=0;a<i;a++)for(var o=0;o<n;o++)e.data[o*i+a]=this.data[(r+o)*this.size.x+t+a]}},{key:"get",value:function(e,t){return this.data[t*this.size.x+e]}},{key:"set",value:function(e,t,r){return this.data[t*this.size.x+e]=r,this}},{key:"zeroBorder",value:function(){for(var e=this.size.x,t=this.size.y,r=this.data,n=0;n<e;n++)r[n]=r[(t-1)*e+n]=0;for(var i=1;i<t-1;i++)r[i*e]=r[i*e+(e-1)]=0}},{key:"invert",value:function(){for(var e=this.data,t=e.length;t--;)e[t]=e[t]?0:1}},{key:"moments",value:function(e){var t=this.size.y,r=this.size.x,n=new Array,i=new Array;if(e<=0)return i;for(var a=0;a<e;a++)n[a]={m00:0,m01:0,m10:0,m11:0,m02:0,m20:0,theta:0,rad:0};for(var o=0;o<t;o++)for(var s=o*o,u=0;u<r;u++){var c=this.data[o*r+u];if(c>0){var h=n[c-1];h.m00+=1,h.m01+=o,h.m10+=u,h.m11+=u*o,h.m02+=s,h.m20+=u*u}}for(var l=Math.PI,f=l/4,d=0;d<e;d++){var v=n[d];if(!isNaN(v.m00)&&0!==v.m00){var _=v.m10/v.m00,p=v.m01/v.m00,g=v.m11/v.m00-_*p,y=v.m02/v.m00-p*p,m=v.m20/v.m00-_*_,b=.5*Math.atan((y-m)/(2*g))+(g>=0?f:-f)+l;v.theta=(180*b/l+90)%180-90,v.theta<0&&(v.theta+=180),v.rad=b>l?b-l:b,v.x=Math.cos(b),v.y=Math.sin(b),i.push(v)}}return i}},{key:"show",value:function(e,t){var r=this.size.y,n=this.size.x,i=e.getImageData(0,0,n,r),a=i.data,o=0;t||(t=1);for(var s=0;s<r;s++)for(var u=0;u<n;u++){var c=s*n+u;o=this.get(u,s)*t,a[4*c+0]=o,a[4*c+1]=o,a[4*c+2]=o,a[4*c+3]=255}e.putImageData(i,0,0)}},{key:"overlay",value:function(e,t,r,n){var i=[0,1,1],a=[255,255,255],o=[0,0,0],s=e.getImageData(r,n,this.size.x,this.size.y),u=s.data;(!t||t<0||t>360)&&(t=360);for(var c=this.data.length;c--;){i[0]=this.data[c]*t;var h=i[0]<=0?a:i[0]>=360?o:_(i);u[4*c+0]=h[0],u[4*c+1]=h[1],u[4*c+2]=h[2],u[4*c+3]=255}e.putImageData(s,r,n)}}]),e}(),g=r(8),y=r.n(g);function m(){for(var e=function(e){return e&&"object"===y()(e)},t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return r.reduce(function(t,r){return r&&Object.keys(r).forEach(function(n){var i=t[n],a=r[n];Array.isArray(i)&&Array.isArray(a)?t[n]=a:e(i)&&e(a)?t[n]=m(i,a):t[n]=a}),t},{})}var b,w={inputStream:{type:"ImageStream",sequence:!1,size:800,area:{top:"0%",right:"0%",left:"0%",bottom:"0%"},singleChannel:!1},locate:!0,numOfWorkers:0,decoder:{readers:["code_128_reader"]},locator:{halfSample:!0,patchSize:"medium"}},x=r(9),k=r.n(x),C=r(4),A=r.n(C),S=r(3),E=r.n(S),P=r(5),O=r.n(P);!function(e){e[e.Forward=1]="Forward",e[e.Reverse=-1]="Reverse"}(b||(b={}));var R=function(){function e(t,r){i()(this,e),u()(this,"_singleCodeError",void 0),u()(this,"_averageCodeError",void 0),u()(this,"_format",void 0),u()(this,"_row",void 0),u()(this,"config",void 0),u()(this,"supplements",void 0),this._format="unknown",this._row=[],this.config=t||{},this.supplements=r}return o()(e,[{key:"SINGLE_CODE_ERROR",get:function(){return this._singleCodeError}},{key:"AVERAGE_CODE_ERROR",get:function(){return this._averageCodeError}},{key:"FORMAT",get:function(){return this._format}}],[{key:"Exception",get:function(){return{StartNotFoundException:"Start-Info was not found!",CodeNotFoundException:"Code could not be found!",PatternNotFoundException:"Pattern could not be found!"}}}]),o()(e,[{key:"_findPattern",value:function(e,t,r,n){var i=new Array(e.length),a={error:Number.MAX_VALUE,code:-1,start:0,end:0},o=this.AVERAGE_CODE_ERROR,s=0;t||(t=this._nextSet(this._row)),i.fill(0);for(var u=t;u<this._row.length;u++)if(this._row[u]^r)i[s]++;else{if(s===i.length-1){var c=this._matchPattern(i,e);if(c<o)return a.error=c,a.start=u-i.reduce(function(e,t){return e+t},0),a.end=u,a;if(!n)return null;for(var h=0;h<i.length-2;h++)i[h]=i[h+2];i[i.length-2]=0,i[i.length-1]=0,s--}else s++;i[s]=1,r=r?0:1}return null}},{key:"_nextUnset",value:function(e,t){for(var r=t||0;r<e.length;r++)if(!e[r])return r;return e.length}},{key:"_nextSet",value:function(e,t){for(var r=t||0;r<e.length;r++)if(e[r])return r;return e.length}},{key:"_matchRange",value:function(e,t,r){for(var n=e<0?0:e;n<t;n++)if(this._row[n]!==r)return!1;return!0}},{key:"_matchPattern",value:function(e,t,r){var n=0,i=0,a=0;r=r||this.SINGLE_CODE_ERROR||1;for(var o=0;o<e.length;o++)i+=e[o],a+=t[o];if(i<a)return Number.MAX_VALUE;var s=i/a;r*=s;for(var u=0;u<e.length;u++){var c=e[u],h=t[u]*s,l=Math.abs(c-h)/h;if(l>r)return Number.MAX_VALUE;n+=l}return n/a}},{key:"_correctBars",value:function(e,t,r){for(var n=r.length,i=0;n--;)(i=e[r[n]]*(1-(1-t)/2))>1&&(e[r[n]]=i)}},{key:"decodePattern",value:function(e){this._row=e;var t=this.decode();return null===t?(this._row.reverse(),(t=this.decode())&&(t.direction=b.Reverse,t.start=this._row.length-t.start,t.end=this._row.length-t.end)):t.direction=b.Forward,t&&(t.format=this.FORMAT),t}},{key:"_fillCounters",value:function(e,t,r){var n=new Array,i=0;n[i]=0;for(var a=e;a<t;a++)this._row[a]^r?n[i]++:(n[++i]=1,r=r?0:1);return n}},{key:"_toCounters",value:function(e,t){var r=t.length,n=this._row.length,i=this._row[e]?0:1,a=0;t.fill(0);for(var o=e;o<n;o++)if(this._row[o]^i)t[a]++;else{if(++a===r)break;t[a]=1,i=i?0:1}return t}}]),e}(),z=[[2,1,2,2,2,2],[2,2,2,1,2,2],[2,2,2,2,2,1],[1,2,1,2,2,3],[1,2,1,3,2,2],[1,3,1,2,2,2],[1,2,2,2,1,3],[1,2,2,3,1,2],[1,3,2,2,1,2],[2,2,1,2,1,3],[2,2,1,3,1,2],[2,3,1,2,1,2],[1,1,2,2,3,2],[1,2,2,1,3,2],[1,2,2,2,3,1],[1,1,3,2,2,2],[1,2,3,1,2,2],[1,2,3,2,2,1],[2,2,3,2,1,1],[2,2,1,1,3,2],[2,2,1,2,3,1],[2,1,3,2,1,2],[2,2,3,1,1,2],[3,1,2,1,3,1],[3,1,1,2,2,2],[3,2,1,1,2,2],[3,2,1,2,2,1],[3,1,2,2,1,2],[3,2,2,1,1,2],[3,2,2,2,1,1],[2,1,2,1,2,3],[2,1,2,3,2,1],[2,3,2,1,2,1],[1,1,1,3,2,3],[1,3,1,1,2,3],[1,3,1,3,2,1],[1,1,2,3,1,3],[1,3,2,1,1,3],[1,3,2,3,1,1],[2,1,1,3,1,3],[2,3,1,1,1,3],[2,3,1,3,1,1],[1,1,2,1,3,3],[1,1,2,3,3,1],[1,3,2,1,3,1],[1,1,3,1,2,3],[1,1,3,3,2,1],[1,3,3,1,2,1],[3,1,3,1,2,1],[2,1,1,3,3,1],[2,3,1,1,3,1],[2,1,3,1,1,3],[2,1,3,3,1,1],[2,1,3,1,3,1],[3,1,1,1,2,3],[3,1,1,3,2,1],[3,3,1,1,2,1],[3,1,2,1,1,3],[3,1,2,3,1,1],[3,3,2,1,1,1],[3,1,4,1,1,1],[2,2,1,4,1,1],[4,3,1,1,1,1],[1,1,1,2,2,4],[1,1,1,4,2,2],[1,2,1,1,2,4],[1,2,1,4,2,1],[1,4,1,1,2,2],[1,4,1,2,2,1],[1,1,2,2,1,4],[1,1,2,4,1,2],[1,2,2,1,1,4],[1,2,2,4,1,1],[1,4,2,1,1,2],[1,4,2,2,1,1],[2,4,1,2,1,1],[2,2,1,1,1,4],[4,1,3,1,1,1],[2,4,1,1,1,2],[1,3,4,1,1,1],[1,1,1,2,4,2],[1,2,1,1,4,2],[1,2,1,2,4,1],[1,1,4,2,1,2],[1,2,4,1,1,2],[1,2,4,2,1,1],[4,1,1,2,1,2],[4,2,1,1,1,2],[4,2,1,2,1,1],[2,1,2,1,4,1],[2,1,4,1,2,1],[4,1,2,1,2,1],[1,1,1,1,4,3],[1,1,1,3,4,1],[1,3,1,1,4,1],[1,1,4,1,1,3],[1,1,4,3,1,1],[4,1,1,1,1,3],[4,1,1,3,1,1],[1,1,3,1,4,1],[1,1,4,1,3,1],[3,1,1,1,4,1],[4,1,1,1,3,1],[2,1,1,4,1,2],[2,1,1,2,1,4],[2,1,1,2,3,2],[2,3,3,1,1,1,2]],I=[0,2,4],W=[1,3,5],D=function(e){function t(){var e;return i()(this,t),(e=A()(this,E()(t).call(this)))._format="code_128",e._singleCodeError=.64,e._averageCodeError=.3,e}return O()(t,e),o()(t,[{key:"_decodeCode",value:function(e,t){for(var r=[0,0,0,0,0,0],n=e,i={error:Number.MAX_VALUE,code:-1,start:e,end:e,correction:{bar:1,space:1}},a=this.AVERAGE_CODE_ERROR,o=this._row[n]?0:1,s=0,u=n;u<this._row.length;u++)if(this._row[u]^o)r[s]++;else{if(s===r.length-1){t&&this._correct(r,t);for(var c=0;c<z.length;c++){var h=this._matchPattern(r,z[c]);h<i.error&&(i.code=c,i.error=h)}if(i.end=u,-1===i.code||i.error>a)return null;var l=z[i.code];return l&&(i.correction.bar=this._calculateCorrection(l,r,I),i.correction.space=this._calculateCorrection(l,r,W)),i}r[++s]=1,o=o?0:1}return null}},{key:"_correct",value:function(e,t){this._correctBars(e,t.bar,I),this._correctBars(e,t.space,W)}},{key:"_findStart",value:function(){for(var e,t=[0,0,0,0,0,0],r=this._nextSet(this._row),n={error:Number.MAX_VALUE,code:-1,start:0,end:0,correction:{bar:1,space:1}},i=this.AVERAGE_CODE_ERROR,a=0,o=0,s=r;s<this._row.length;s++)if(this._row[s]^a)t[o]++;else{if(o===t.length-1){e=0;for(var u=0;u<t.length;u++)e+=t[u];for(var c=103;c<=105;c++){var h=this._matchPattern(t,z[c]);h<n.error&&(n.code=c,n.error=h)}if(n.error<i)return n.start=s-e,n.end=s,n.correction.bar=this._calculateCorrection(z[n.code],t,I),n.correction.space=this._calculateCorrection(z[n.code],t,W),n;for(var l=0;l<4;l++)t[l]=t[l+2];t[4]=0,t[5]=0,o--}else o++;t[o]=1,a=a?0:1}return null}},{key:"decode",value:function(){var e,t,r=new Array,n=this._findStart(),i=null,a=!1,o=0,s=0,u=new Array,c=new Array,h=!1,l=!0;if(null===n)return null;switch(i={code:n.code,start:n.start,end:n.end,correction:{bar:n.correction.bar,space:n.correction.space}},c.push(i),s=i.code,i.code){case 103:e=101;break;case 104:e=100;break;case 105:e=99;break;default:return null}for(;!a;){if(t=h,h=!1,null!==(i=this._decodeCode(i.end,i.correction)))switch(106!==i.code&&(l=!0),106!==i.code&&(u.push(i.code),s+=++o*i.code),c.push(i),e){case 101:if(i.code<64)r.push(String.fromCharCode(32+i.code));else if(i.code<96)r.push(String.fromCharCode(i.code-64));else switch(106!==i.code&&(l=!1),i.code){case 98:h=!0,e=100;break;case 100:e=100;break;case 99:e=99;break;case 106:a=!0}break;case 100:if(i.code<96)r.push(String.fromCharCode(32+i.code));else switch(106!==i.code&&(l=!1),i.code){case 98:h=!0,e=101;break;case 101:e=101;break;case 99:e=99;break;case 106:a=!0}break;case 99:if(i.code<100)r.push(i.code<10?"0"+i.code:i.code);else switch(106!==i.code&&(l=!1),i.code){case 101:e=101;break;case 100:e=100;break;case 106:a=!0}}else a=!0;t&&(e=101===e?100:101)}return null===i?null:(i.end=this._nextUnset(this._row,i.end),this._verifyTrailingWhitespace(i)?(s-=o*u[u.length-1])%103!==u[u.length-1]?null:r.length?(l&&r.splice(r.length-1,1),{code:r.join(""),start:n.start,end:i.end,codeset:e,startInfo:n,decodedCodes:c,endInfo:i}):null:null)}},{key:"_verifyTrailingWhitespace",value:function(e){var t=e.end+(e.end-e.start)/2;return t<this._row.length&&this._matchRange(e.end,t,0)?e:null}},{key:"_calculateCorrection",value:function(e,t,r){for(var n=0,i=0,a=r.length;a--;)i+=e[r[a]],n+=t[r[a]];return i/n}}]),t}(R),T=new Uint16Array(k()("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%").map(function(e){return e.charCodeAt(0)})),L=new Uint16Array([52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,148,168,162,138,42]),j=function(e){function t(){var e;return i()(this,t),(e=A()(this,E()(t).call(this)))._format="code_39",e}return O()(t,e),o()(t,[{key:"decode",value:function(){var e=this._findStart();if(!e)return null;var t,r,n=new Array,i=new Uint16Array(9),a=this._nextSet(this._row,e.end);do{this._toCounters(a,i);var o=this._toPattern(i);if(o<0)return null;if(null===(t=this._patternToChar(o)))return null;n.push(t),r=a,a+=i.reduce(function(e,t){return e+t},0),a=this._nextSet(this._row,a)}while("*"!==t);return n.pop(),n.length&&this._verifyTrailingWhitespace(r,a,i)?{code:n.join(""),start:e.start,end:a,startInfo:e,decodedCodes:n}:null}},{key:"_patternToChar",value:function(e){for(var t=0;t<L.length;t++)if(L[t]===e)return String.fromCharCode(T[t]);return null}},{key:"_verifyTrailingWhitespace",value:function(e,t,r){var n=r.reduce(function(e,t){return e+t},0);return 3*(t-e-n)>=n}},{key:"_findNextWidth",value:function(e,t){for(var r=Number.MAX_VALUE,n=0;n<e.length;n++)e[n]<r&&e[n]>t&&(r=e[n]);return r}},{key:"_toPattern",value:function(e){for(var t,r=e.length,n=0,i=r,a=0;i>3;){n=this._findNextWidth(e,n),i=0,t=0;for(var o=0;o<r;o++)e[o]>n&&(t|=1<<r-1-o,i++,a+=e[o]);if(3===i){for(var s=0;s<r&&i>0;s++)if(e[s]>n&&(i--,2*e[s]>=a))return-1;return t}}return-1}},{key:"_findStart",value:function(){for(var e,t=this._nextSet(this._row),r=t,n=new Uint16Array(9),i=0,a=0,o=t;o<this._row.length;o++)if(this._row[o]^a)n[i]++;else{if(i===n.length-1){if(148===this._toPattern(n)&&(e=0|Math.max(0,r-(o-r)/4),this._matchRange(e,r,0)))return{start:r,end:o};r+=n[0]+n[1];for(var s=0;s<7;s++)n[s]=n[s+2];n[7]=0,n[8]=0,i--}else i++;n[i]=1,a=a?0:1}return null}}]),t}(R),M=r(7),G=r.n(M),U=function(e){function t(){var e;return i()(this,t),(e=A()(this,E()(t).call(this)))._format="code_39_vin",e}return O()(t,e),o()(t,[{key:"decode",value:function(){var e=G()(E()(t.prototype),"decode",this).call(this);if(!e)return null;var r=e.code;return r?(r=r.replace(/[IOQ]/g,""),/[A-Z0-9]{17}/.test(r)&&this._checkChecksum(r)?(e.code=r,e):null):null}},{key:"_checkChecksum",value:function(e){return!!e}}]),t}(j),N=r(6),H=r.n(N),B=k()("0123456789-$:/.+ABCD").map(function(e){return e.charCodeAt(0)}),F=[3,6,9,96,18,66,33,36,48,72,12,24,69,81,84,21,26,41,11,14],V=[26,41,11,14],q=function(e){function t(){var e;return i()(this,t),e=A()(this,E()(t).call(this)),u()(H()(e),"_counters",void 0),e._format="codabar",e._counters=[],e}return O()(t,e),o()(t,[{key:"decode",value:function(){this._counters=this._fillCounters(this._nextUnset(this._row),this._row.length,1);var e=this._findStart();if(!e)return null;var t,r=new Array,n=e.startCounter;do{if((t=this._toPattern(n))<0)return null;var i=this._patternToChar(t);if(null===i)return null;if(r.push(i),n+=8,r.length>1&&V.some(function(e){return e===t}))break}while(n<this._counters.length);if(r.length-2<4||!V.some(function(e){return e===t}))return null;if(!this._verifyWhitespace(e.startCounter,n-8))return null;if(!this._validateResult(r,e.startCounter))return null;n=n>this._counters.length?this._counters.length:n;var a=e.start+this._sumCounters(e.startCounter,n-8);return{code:r.join(""),start:e.start,end:a,startInfo:e,decodedCodes:r}}},{key:"_verifyWhitespace",value:function(e,t){return(e-1<=0||this._counters[e-1]>=this._calculatePatternLength(e)/2)&&(t+8>=this._counters.length||this._counters[t+7]>=this._calculatePatternLength(t)/2)}},{key:"_calculatePatternLength",value:function(e){for(var t=0,r=e;r<e+7;r++)t+=this._counters[r];return t}},{key:"_thresholdResultPattern",value:function(e,t){for(var r={space:{narrow:{size:0,counts:0,min:0,max:Number.MAX_VALUE},wide:{size:0,counts:0,min:0,max:Number.MAX_VALUE}},bar:{narrow:{size:0,counts:0,min:0,max:Number.MAX_VALUE},wide:{size:0,counts:0,min:0,max:Number.MAX_VALUE}}},n=t,i=0;i<e.length;i++){for(var a=this._charToPattern(e[i]),o=6;o>=0;o--){var s=2==(1&o)?r.bar:r.space,u=1==(1&a)?s.wide:s.narrow;u.size+=this._counters[n+o],u.counts++,a>>=1}n+=8}return["space","bar"].forEach(function(e){var t=r[e];t.wide.min=Math.floor((t.narrow.size/t.narrow.counts+t.wide.size/t.wide.counts)/2),t.narrow.max=Math.ceil(t.wide.min),t.wide.max=Math.ceil((2*t.wide.size+1.5)/t.wide.counts)}),r}},{key:"_charToPattern",value:function(e){for(var t=e.charCodeAt(0),r=0;r<B.length;r++)if(B[r]===t)return F[r];return 0}},{key:"_validateResult",value:function(e,t){for(var r=this._thresholdResultPattern(e,t),n=t,i=0;i<e.length;i++){for(var a=this._charToPattern(e[i]),o=6;o>=0;o--){var s=0==(1&o)?r.bar:r.space,u=1==(1&a)?s.wide:s.narrow,c=this._counters[n+o];if(c<u.min||c>u.max)return!1;a>>=1}n+=8}return!0}},{key:"_patternToChar",value:function(e){for(var t=0;t<F.length;t++)if(F[t]===e)return String.fromCharCode(B[t]);return null}},{key:"_computeAlternatingThreshold",value:function(e,t){for(var r=Number.MAX_VALUE,n=0,i=e;i<t;i+=2){var a=this._counters[i];a>n&&(n=a),a<r&&(r=a)}return(r+n)/2|0}},{key:"_toPattern",value:function(e){var t=e+7;if(t>this._counters.length)return-1;for(var r=this._computeAlternatingThreshold(e,t),n=this._computeAlternatingThreshold(e+1,t),i=64,a=0,o=0;o<7;o++){var s=0==(1&o)?r:n;this._counters[e+o]>s&&(a|=i),i>>=1}return a}},{key:"_sumCounters",value:function(e,t){for(var r=0,n=e;n<t;n++)r+=this._counters[n];return r}},{key:"_findStart",value:function(){for(var e=this,t=this._nextUnset(this._row),r=function(r){var n=e._toPattern(r);if(-1!==n&&V.some(function(e){return e===n})){var i=(t+=e._sumCounters(0,r))+e._sumCounters(r,r+8);return{v:{start:t,end:i,startCounter:r,endCounter:r+8}}}},n=1;n<this._counters.length;n++){var i=r(n);if("object"===y()(i))return i.v}return null}}]),t}(R);function X(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}var Y,Q=[1,1,2],Z=[[3,2,1,1],[2,2,2,1],[2,1,2,2],[1,4,1,1],[1,1,3,2],[1,2,3,1],[1,1,1,4],[1,3,1,2],[1,2,1,3],[3,1,1,2],[1,1,2,3],[1,2,2,2],[2,2,1,2],[1,1,4,1],[2,3,1,1],[1,3,2,1],[4,1,1,1],[2,1,3,1],[3,1,2,1],[2,1,1,3]],K=[0,11,13,14,19,25,28,21,22,26],J=function(e){function t(e,r){var n;return i()(this,t),(n=A()(this,E()(t).call(this,m({supplements:[]},e),r)))._format="ean_13",n._singleCodeError=.7,n._averageCodeError=.48,n}return O()(t,e),o()(t,[{key:"CODE_L_START",get:function(){return 0}},{key:"CODE_G_START",get:function(){return 10}},{key:"START_PATTERN",get:function(){return[1,1,1]}},{key:"STOP_PATTERN",get:function(){return[1,1,1]}},{key:"MIDDLE_PATTERN",get:function(){return[1,1,1,1,1]}}]),o()(t,[{key:"_decodeCode",value:function(e,t){var r=[0,0,0,0],n=e,i={error:Number.MAX_VALUE,code:-1,start:e,end:e},a=this.AVERAGE_CODE_ERROR,o=this._row[n]?0:1,s=0;t||(t=Z.length);for(var u=n;u<this._row.length;u++)if(this._row[u]^o)r[s]++;else{if(s===r.length-1){for(var c=0;c<t;c++){var h=this._matchPattern(r,Z[c]);h<i.error&&(i.code=c,i.error=h)}return i.end=u,i.error>a?null:i}r[++s]=1,o=o?0:1}return null}},{key:"_findStart",value:function(){for(var e,t=this._nextSet(this._row);!e;){if(!(e=this._findPattern(this.START_PATTERN,t,0,!0)))return null;var r=e.start-(e.end-e.start);if(r>=0&&this._matchRange(r,e.start,0))return e;t=e.end,e=null}return null}},{key:"_verifyTrailingWhitespace",value:function(e){var t=e.end+(e.end-e.start);return t<this._row.length&&this._matchRange(e.end,t,0)?e:null}},{key:"_findEnd",value:function(e,t){var r=this._findPattern(this.STOP_PATTERN,e,t,!1);return null!==r?this._verifyTrailingWhitespace(r):null}},{key:"_calculateFirstDigit",value:function(e){for(var t=0;t<K.length;t++)if(e===K[t])return t;return null}},{key:"_decodePayload",value:function(e,t,r){for(var n=0,i=0;i<6;i++){if(!(e=this._decodeCode(e.end)))return null;e.code>=this.CODE_G_START?(e.code-=this.CODE_G_START,n|=1<<5-i):n|=0<<5-i,t.push(e.code),r.push(e)}var a=this._calculateFirstDigit(n);if(null===a)return null;if(t.unshift(a),null===(e=this._findPattern(this.MIDDLE_PATTERN,e.end,1,!1)))return null;r.push(e);for(var o=0;o<6;o++){if(!(e=this._decodeCode(e.end,this.CODE_G_START)))return null;r.push(e),t.push(e.code)}return e}},{key:"decode",value:function(){var e=new Array,t=new Array,r={},n=this._findStart();if(!n)return null;var i={code:n.code,start:n.start,end:n.end};if(t.push(i),!(i=this._decodePayload(i,e,t)))return null;if(!(i=this._findEnd(i.end,0)))return null;if(t.push(i),!this._checksum(e))return null;if(this.supplements.length>0){var a=this._decodeExtensions(i.end);if(!a)return null;var o=a.decodedCodes[a.decodedCodes.length-1],s={start:o.start+((o.end-o.start)/2|0),end:o.end};if(!this._verifyTrailingWhitespace(s))return null;r={supplement:a,code:e.join("")+a.code}}return function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?X(r,!0).forEach(function(t){u()(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):X(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({code:e.join(""),start:n.start,end:i.end,startInfo:n,decodedCodes:t},r)}},{key:"_decodeExtensions",value:function(e){var t=this._nextSet(this._row,e),r=this._findPattern(Q,t,0,!1);if(null===r)return null;for(var n=0;n<this.supplements.length;n++){var i=this.supplements[n].decode(this._row,r.end);if(null!==i)return{code:i.code,start:t,startInfo:r,end:i.end,decodedCodes:i.decodedCodes}}return null}},{key:"_checksum",value:function(e){for(var t=0,r=e.length-2;r>=0;r-=2)t+=e[r];t*=3;for(var n=e.length-1;n>=0;n-=2)t+=e[n];return t%10==0}}]),t}(R),$=function(e){function t(e,r){var n;return i()(this,t),(n=A()(this,E()(t).call(this,e,r)))._format="ean_8",n}return O()(t,e),o()(t,[{key:"_decodePayload",value:function(e,t,r){for(var n=0;n<4;n++){if(!(e=this._decodeCode(e.end,this.CODE_G_START)))return null;t.push(e.code),r.push(e)}if(null===(e=this._findPattern(this.MIDDLE_PATTERN,e.end,1,!1)))return null;r.push(e);for(var i=0;i<4;i++){if(!(e=this._decodeCode(e.end,this.CODE_G_START)))return null;r.push(e),t.push(e.code)}return e}}]),t}(J),ee=function(e){function t(e,r){var n;return i()(this,t),(n=A()(this,E()(t).call(this,e,r)))._format="ean_2",n}return O()(t,e),o()(t,[{key:"decode",value:function(e,t){var r,n=e.length,i=new Array,a=new Array,o=t,s=0;this._row=e;for(var u=0;u<2&&o<n;u++){if(!(r=this._decodeCode(o)))return null;a.push(r),i.push(r.code%10),r.code>=this.CODE_G_START&&(s|=1<<1-u),1!==u&&(o=this._nextSet(this._row,r.end),o=this._nextUnset(this._row,o))}return 2!==i.length||parseInt(i.join(""))%4!==s?null:{code:i.join(""),decodedCodes:a,end:r.end}}}]),t}(J),te=function(e){function t(e,r){var n;return i()(this,t),(n=A()(this,E()(t).call(this,e,r)))._format="ean_5",n}return O()(t,e),o()(t,[{key:"CHECK_DIGIT_ENCODINGS",get:function(){return[24,20,18,17,12,6,3,10,9,5]}}]),o()(t,[{key:"decode",value:function(e,t){var r,n=e.length,i=new Array,a=new Array,o=0,s=t;this._row=e;for(var u=0;u<5&&s<n;u++){if(!(r=this._decodeCode(s)))return null;a.push(r),i.push(r.code%10),r.code>=this.CODE_G_START&&(o|=1<<4-u),4!==u&&(s=this._nextSet(this._row,r.end),s=this._nextUnset(this._row,s))}return 5!==i.length?null:this._extensionChecksum(i)!==this._determineCheckDigit(o)?null:{code:i.join(""),decodedCodes:a,end:r.end}}},{key:"_determineCheckDigit",value:function(e){for(var t=0;t<10;t++)if(e===this.CHECK_DIGIT_ENCODINGS[t])return t;return null}},{key:"_extensionChecksum",value:function(e){for(var t=e.length,r=0,n=t-2;n>=0;n-=2)r+=e[n];r*=3;for(var i=t-1;i>=0;i-=2)r+=e[i];return(r*=3)%10}}]),t}(J),re=function(e){function t(e,r){var n;return i()(this,t),(n=A()(this,E()(t).call(this,e,r)))._format="upc_a",n}return O()(t,e),o()(t,[{key:"decode",value:function(){var e=G()(E()(t.prototype),"decode",this).call(this);return e&&e.code&&13===e.code.length&&"0"===e.code.charAt(0)?(e.code=e.code.substring(1),e):null}}]),t}(J),ne=[[56,52,50,49,44,38,35,42,41,37],[7,11,13,14,19,25,28,21,22,26]],ie=function(e){function t(e,r){var n;return i()(this,t),(n=A()(this,E()(t).call(this,e,r)))._format="upc_e",n}return O()(t,e),o()(t,[{key:"STOP_PATTERN",get:function(){return[1/6*7,1/6*7,1/6*7,1/6*7,1/6*7,1/6*7]}}]),o()(t,[{key:"_decodePayload",value:function(e,t,r){for(var n=0,i=0;i<6;i++){if(!(e=this._decodeCode(e.end)))return null;e.code>=this.CODE_G_START&&(e.code=e.code-this.CODE_G_START,n|=1<<5-i),t.push(e.code),r.push(e)}return this._determineParity(n,t)?e:null}},{key:"_determineParity",value:function(e,t){for(var r=0;r<ne.length;r++)for(var n=0;n<ne[r].length;n++)if(e===ne[r][n])return t.unshift(r),t.push(n),!0;return!1}},{key:"_convertToUPCA",value:function(e){var t=e[e.length-2],r=[e[0]];return(r=t<=2?r.concat(e.slice(1,3)).concat([t,0,0,0,0]).concat(e.slice(3,6)):3===t?r.concat(e.slice(1,4)).concat([0,0,0,0,0]).concat(e.slice(4,6)):4===t?r.concat(e.slice(1,5)).concat([0,0,0,0,0,e[5]]):r.concat(e.slice(1,6)).concat([0,0,0,0,t])).push(e[e.length-1]),r}},{key:"_checksum",value:function(e){return G()(E()(t.prototype),"_checksum",this).call(this,this._convertToUPCA(e))}},{key:"_findEnd",value:function(e,r){return 1,G()(E()(t.prototype),"_findEnd",this).call(this,e,1)}},{key:"_verifyTrailingWhitespace",value:function(e){var t=e.end+(e.end-e.start)/2;return t<this._row.length&&this._matchRange(e.end,t,0)?e:null}}]),t}(J),ae=[1,1,1,1],oe=[1,1,3],se=[[1,1,3,3,1],[3,1,1,1,3],[1,3,1,1,3],[3,3,1,1,1],[1,1,3,1,3],[3,1,3,1,1],[1,3,3,1,1],[1,1,1,3,3],[3,1,1,3,1],[1,3,1,3,1]],ue=function(e){function t(e){var r;return i()(this,t),r=A()(this,E()(t).call(this,m({normalizeBarSpaceWidth:!1},e))),u()(H()(r),"_barSpaceRatio",void 0),r._barSpaceRatio=[1,1],r._format="i2of5",r.config.normalizeBarSpaceWidth?(r._singleCodeError=.38,r._averageCodeError=.09):(r._singleCodeError=.78,r._averageCodeError=.38),r}return O()(t,e),o()(t,[{key:"decode",value:function(){var e=this._findStart();if(!e)return null;var t=this._findEnd();if(!t)return null;var r=this._fillCounters(e.end,t.start,0);if(r.length%10!=0)return null;var n=new Array,i=new Array;return i.push(e),!this._decodePayload(r,n,i)||n.length%2!=0||n.length<6?null:(i.push(t),{code:n.join(""),start:e.start,end:t.end,startInfo:e,decodedCodes:i})}},{key:"_matchPattern",value:function(e,r){if(this.config.normalizeBarSpaceWidth){for(var n=[0,0],i=[0,0],a=[0,0],o=0;o<e.length;o++)n[o%2]+=e[o],i[o%2]+=r[o];a[0]=i[0]/n[0],a[1]=i[1]/n[1],a[0]=Math.max(Math.min(a[0],5),.2),a[1]=Math.max(Math.min(a[1],5),.2),this._barSpaceRatio=a;for(var s=0;s<e.length;s++)e[s]*=this._barSpaceRatio[s%2]}return G()(E()(t.prototype),"_matchPattern",this).call(this,e,r)}},{key:"_findStart",value:function(){for(var e,t=this._nextSet(this._row);!e;){if(!(e=this._findPattern(ae,t,0,!0)))return null;var r=e.end-e.start>>2,n=e.start-10*r;if(n>=0&&this._matchRange(n,e.start,0))return e;t=e.end,e=null}return null}},{key:"_verifyTrailingWhitespace",value:function(e){var t=e.end+(e.end-e.start)/2;return t<this._row.length&&this._matchRange(e.end,t,0)?e:null}},{key:"_findEnd",value:function(){this._row.reverse();var e=this._findPattern(oe,void 0,0,!1);if(this._row.reverse(),null===e)return null;var t=e.start;return e.start=this._row.length-e.end,e.end=this._row.length-t,null!==e?this._verifyTrailingWhitespace(e):null}},{key:"_decodeCode",value:function(e){for(var t={error:Number.MAX_VALUE,code:-1,start:0,end:0},r=0;r<se.length;r++){var n=this._matchPattern(e,se[r]);n<t.error&&(t.code=r,t.error=n)}return t.error<this.AVERAGE_CODE_ERROR?t:null}},{key:"_decodePayload",value:function(e,t,r){for(var n,i,a=e.length,o=[0,0,0,0,0],s=[0,0,0,0,0],u=0;u<a;){for(var c=0;c<5;c++)o[c]=e[u]*this._barSpaceRatio[0],s[c]=e[u+1]*this._barSpaceRatio[1],u+=2;if(!(n=this._decodeCode(o)))return null;if(!(i=this._decodeCode(s)))return null;t.push(n.code,i.code),r.push(n,i)}return[n,i]}}]),t}(R),ce=[3,1,3,1,1,1],he=[3,1,1,1,3],le=[[1,1,3,3,1],[3,1,1,1,3],[1,3,1,1,3],[3,3,1,1,1],[1,1,3,1,3],[3,1,3,1,1],[1,3,3,1,1],[1,1,1,3,3],[3,1,1,3,1],[1,3,1,3,1]],fe=ce.reduce(function(e,t){return e+t},0),de=function(e){function t(e){var r;return i()(this,t),r=A()(this,E()(t).call(this,e)),u()(H()(r),"_barSpaceRatio",void 0),r._barSpaceRatio=[1,1],r._format="2of5",r._singleCodeError=.78,r._averageCodeError=.3,r}return O()(t,e),o()(t,[{key:"decode",value:function(){var e=this._findStart();if(!e)return null;var t=this._findEnd();if(!t)return null;var r=this._fillCounters(e.end,t.start,0);if(r.length%10!=0)return null;var n=new Array,i=new Array;return i.push(e),!this._decodePayload(r,n,i)||n.length<5?null:(i.push(t),{code:n.join(""),start:e.start,end:t.end,startInfo:e,decodedCodes:i})}},{key:"_findStart",value:function(){for(var e,t=this._nextSet(this._row),r=1;!e;){if(!(e=this._findPattern(ce,t,0,!0)))return null;r=(e.end-e.start)/fe|0;var n=e.start-5*r;if(n>=0&&this._matchRange(n,e.start,0))return e;t=e.end,e=null}return null}},{key:"_verifyTrailingWhitespace",value:function(e){var t=e.end+(e.end-e.start)/2;return t<this._row.length&&this._matchRange(e.end,t,0)?e:null}},{key:"_findEnd",value:function(){this._row.reverse();var e=this._nextSet(this._row),t=this._findPattern(he,e,0,!0);if(this._row.reverse(),null===t)return null;var r=t.start;return t.start=this._row.length-t.end,t.end=this._row.length-r,null!==t?this._verifyTrailingWhitespace(t):null}},{key:"_decodeCode",value:function(e){for(var t={error:Number.MAX_VALUE,code:-1,start:0,end:0},r=0;r<le.length;r++){var n=this._matchPattern(e,le[r]);n<t.error&&(t.code=r,t.error=n)}return t.error<this.AVERAGE_CODE_ERROR?t:null}},{key:"_decodePayload",value:function(e,t,r){for(var n,i=e.length,a=[0,0,0,0,0],o=0;o<i;){for(var s=0;s<5;s++)a[s]=e[o]*this._barSpaceRatio[0],o+=2;if(!(n=this._decodeCode(a)))return null;t.push(n.code),r.push(n)}return n}}]),t}(R),ve=new Uint16Array(k()("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd*").map(function(e){return e.charCodeAt(0)})),_e=new Uint16Array([276,328,324,322,296,292,290,336,274,266,424,420,418,404,402,394,360,356,354,308,282,344,332,326,300,278,436,434,428,422,406,410,364,358,310,314,302,468,466,458,366,374,430,294,474,470,306,350]),pe={code_128_reader:D,ean_reader:J,ean_5_reader:te,ean_2_reader:ee,ean_8_reader:$,code_39_reader:j,code_39_vin_reader:U,codabar_reader:q,upc_reader:re,upc_e_reader:ie,i2of5_reader:ue,"2of5_reader":de,code_93_reader:function(e){function t(){var e;return i()(this,t),(e=A()(this,E()(t).call(this)))._format="code_93",e}return O()(t,e),o()(t,[{key:"decode",value:function(){var e=this._findStart();if(!e)return null;var t,r,n=new Array,i=new Uint16Array(6),a=this._nextSet(this._row,e.end);do{this._toCounters(a,i);var o=this._toPattern(i);if(o<0)return null;if(null===(t=this._patternToChar(o)))return null;n.push(t),r=a,a+=i.reduce(function(e,t){return e+t},0),a=this._nextSet(this._row,a)}while("*"!==t);return n.pop(),n.length&&this._verifyEnd(r,a)&&this._verifyChecksums(n)?(n=n.slice(0,n.length-2),null===(n=this._decodeExtended(n))?null:{code:n.join(""),start:e.start,end:a,startInfo:e,decodedCodes:n}):null}},{key:"_patternToChar",value:function(e){for(var t=0;t<_e.length;t++)if(_e[t]===e)return String.fromCharCode(ve[t]);return null}},{key:"_verifyEnd",value:function(e,t){return!(e===t||!this._row[t])}},{key:"_toPattern",value:function(e){for(var t=e.length,r=0,n=0,i=0;i<t;i++)n+=e[i];for(var a=0;a<t;a++){var o=Math.round(9*e[a]/n);if(o<1||o>4)return-1;if(0==(1&a))for(var s=0;s<o;s++)r=r<<1|1;else r<<=o}return r}},{key:"_findStart",value:function(){for(var e,t=new Uint16Array(6),r=this._nextSet(this._row),n=r,i=0,a=0,o=r;o<this._row.length;o++)if(this._row[o]^a)t[i]++;else{if(i===t.length-1){if(350===this._toPattern(t)&&(e=0|Math.max(0,n-(o-n)/4),this._matchRange(e,n,0)))return{start:n,end:o};n+=t[0]+t[1];for(var s=0;s<4;s++)t[s]=t[s+2];t[4]=0,t[5]=0,i--}else i++;t[i]=1,a=a?0:1}return null}},{key:"_decodeExtended",value:function(e){for(var t=e.length,r=new Array,n=0;n<t;n++){var i=e[n];if(i>="a"&&i<="d"){if(n>t-2)return null;var a=e[++n],o=a.charCodeAt(0),s=void 0;switch(i){case"a":if(!(a>="A"&&a<="Z"))return null;s=String.fromCharCode(o-64);break;case"b":if(a>="A"&&a<="E")s=String.fromCharCode(o-38);else if(a>="F"&&a<="J")s=String.fromCharCode(o-11);else if(a>="K"&&a<="O")s=String.fromCharCode(o+16);else if(a>="P"&&a<="S")s=String.fromCharCode(o+43);else{if(!(a>="T"&&a<="Z"))return null;s=String.fromCharCode(127)}break;case"c":if(a>="A"&&a<="O")s=String.fromCharCode(o-32);else{if("Z"!==a)return null;s=":"}break;case"d":if(!(a>="A"&&a<="Z"))return null;s=String.fromCharCode(o+32)}r.push(s)}else r.push(i)}return r}},{key:"_verifyChecksums",value:function(e){return this._matchCheckChar(e,e.length-2,20)&&this._matchCheckChar(e,e.length-1,15)}},{key:"_matchCheckChar",value:function(e,t,r){var n=e.slice(0,t),i=n.length,a=n.reduce(function(e,t,n){return e+((-1*n+(i-1))%r+1)*ve.indexOf(t.charCodeAt(0))},0);return ve[a%47]===e[t].charCodeAt(0)}}]),t}(R)};function ge(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}!function(e){e[e.Up=1]="Up",e[e.Down=-1]="Down"}(Y||(Y={}));var ye,me=function(e,t,r){var n,i,a=0|t.x,o=0|t.y,s=0|r.x,u=0|r.y,c=Math.abs(u-o)>Math.abs(s-a),h=[],l=e.data,f=e.size.x,d=255,v=0;function _(e,t){i=l[t*f+e],d=i<d?i:d,v=i>v?i:v,h.push(i)}c&&(n=a,a=o,o=n,n=s,s=u,u=n),a>s&&(n=a,a=s,s=n,n=o,o=u,u=n);for(var p=s-a,g=Math.abs(u-o),y=p/2|0,m=o,b=o<u?1:-1,w=a;w<s;w++)c?_(m,w):_(w,m),(y-=g)<0&&(m+=b,y+=p);return{line:h,min:d,max:v}},be=function(e){var t=e.min,r=e.max,n=e.line,i=t+(r-t)/2,a=new Array,o=(r-t)/12,s=-o,c=n[0]>i?Y.Up:Y.Down;a.push({pos:0,val:n[0]});for(var h=0;h<n.length-2;h++){var l=n[h+1]-n[h],f=n[h+2]-n[h+1],d=void 0;c!==(d=l+f<s&&n[h+1]<1.5*i?Y.Down:l+f>o&&n[h+1]>.5*i?Y.Up:c)&&(a.push({pos:h,val:n[h]}),c=d)}a.push({pos:n.length,val:n[n.length-1]});for(var v=a[0].pos;v<a[1].pos;v++)n[v]=n[v]>i?0:1;for(var _=1;_<a.length-1;_++){o=a[_+1].val>a[_].val?a[_].val+(a[_+1].val-a[_].val)/3*2|0:a[_+1].val+(a[_].val-a[_+1].val)/3|0;for(var p=a[_].pos;p<a[_+1].pos;p++)n[p]=n[p]>o?0:1}return function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ge(r,!0).forEach(function(t){u()(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ge(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},e,{threshold:o})},we=function(){function e(t,r){i()(this,e),u()(this,"_config",void 0),u()(this,"_inputImageWrapper",void 0),u()(this,"_frequencyCanvas",void 0),u()(this,"_patternCanvas",void 0),u()(this,"_overlayContext",void 0),u()(this,"_barcodeReaders",void 0),this._config=t,this._inputImageWrapper=r,this._barcodeReaders=[],this._initReaders()}return o()(e,[{key:"decodeFromBoundingBoxes",value:function(e){var t=this,r=null;if(e){if(this._config.multiple)return{barcodes:e.map(function(e){return t.decodeFromBoundingBox(e)}),boxes:e};e.some(function(e){return!!(r=t.decodeFromBoundingBox(e))})&&(r.boxes=e)}return r}},{key:"decodeFromBoundingBox",value:function(e){var t=this._getLine(e);if(null===t)return null;var r=Math.atan2(t[1].y-t[0].y,t[1].x-t[0].x);t=this._getExtendedLine(t,r);var n=this._tryDecode(t);return null===n&&(n=this._tryDecodeBruteForce(e,t,r)),null===n?null:{angle:r,box:e,codeResult:n.codeResult,line:t,pattern:n.barcodeLine.line,threshold:n.barcodeLine.threshold}}},{key:"setReaders",value:function(e){this._config.readers=e,this._barcodeReaders.length=0,this._initReaders()}},{key:"_initReaders",value:function(){var e=this;this._config.readers.forEach(function(t){var r,n={},i=[];"object"===y()(t)?(r=t.format,n=t.config||{}):"string"==typeof t&&(r=t),n.supplements&&(i=n.supplements.map(function(e){return new pe[e]})),e._barcodeReaders.push(new pe[r](n,i))})}},{key:"_getExtendedLine",value:function(e,t){function r(r){var n=r*Math.sin(t),i=r*Math.cos(t);e[0].y-=n,e[0].x-=i,e[1].y+=n,e[1].x+=i}var n=.1*Math.sqrt(Math.pow(e[1].y-e[0].y,2)+Math.pow(e[1].x-e[0].x,2))|0;for(r(n);n>1&&(!this._inputImageWrapper.inImageWithBorder(e[0],0)||!this._inputImageWrapper.inImageWithBorder(e[1],0));)r(-(n>>=1));return e}},{key:"_getLine",value:function(e){return[{x:(e[1].x+e[0].x)/2,y:(e[1].y+e[0].y)/2},{x:(e[3].x+e[2].x)/2,y:(e[3].y+e[2].y)/2}]}},{key:"_tryDecode",value:function(e){var t=me(this._inputImageWrapper,e[0],e[1]);t=be(t);var r=null;return this._barcodeReaders.some(function(e){return!!(r=e.decodePattern(t.line))}),r?{codeResult:r,barcodeLine:t}:null}},{key:"_tryDecodeBruteForce",value:function(e,t,r){for(var n=Math.sqrt(Math.pow(e[1].x-e[0].x,2)+Math.pow(e[1].y-e[0].y,2)),i=Math.sin(r),a=Math.cos(r),o=1;o<16;o++){var s=n/16*o*(o%2==0?-1:1);t[0].y+=s*i,t[0].x-=s*a,t[1].y+=s*i,t[1].x-=s*a;var u=this._tryDecode(t);if(u)return u}return null}},{key:"_printFrequency",value:function(e){var t=this._frequencyCanvas.getContext("2d");this._frequencyCanvas.width=e.length,this._frequencyCanvas.height=256,t.beginPath(),t.strokeStyle="blue";for(var r=0;r<e.length;r++)t.moveTo(r,255),t.lineTo(r,255-e[r]);t.closePath(),t.stroke()}},{key:"_printPattern",value:function(e){var t=this._patternCanvas.getContext("2d");this._patternCanvas.width=e.length,t.fillStyle="black";for(var r=0;r<e.length;r++)1===e[r]&&t.fillRect(r,0,1,100)}},{key:"_drawPath",value:function(e,t,r){c.drawPath(e,this._overlayContext,t,r)}}]),e}(),xe=r(10),ke=r.n(xe),Ce=r(11),Ae=r.n(Ce);var Se,Ee,Pe={request:(Ee=Ae()(ke.a.mark(function e(t,r){var n;return ke.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=Pe.pickConstraints(r),e.next=3,i=n,navigator.mediaDevices&&"function"==typeof navigator.mediaDevices.getUserMedia?navigator.mediaDevices.getUserMedia(i):Promise.reject(new Error("getUserMedia is not defined"));case 3:return ye=e.sent,t.srcObject=ye,t.setAttribute("autoplay",""),t.setAttribute("muted",""),t.setAttribute("playsinline",""),e.abrupt("return",new Promise(function(e){return t.addEventListener("loadedmetadata",function(){t.play(),e()})}).then(Oe.bind(null,t)));case 9:case"end":return e.stop()}var i},e)})),function(e,t){return Ee.apply(this,arguments)}),release:function(){var e=ye&&ye.getVideoTracks();e&&e.length&&e[0].stop(),ye=null},enumerateVideoDevices:(Se=Ae()(ke.a.mark(function e(){var t;return ke.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,navigator.mediaDevices&&"function"==typeof navigator.mediaDevices.enumerateDevices?navigator.mediaDevices.enumerateDevices():Promise.reject(new Error("enumerateDevices is not defined"));case 2:return t=e.sent,e.abrupt("return",t.filter(function(e){return"videoinput"===e.kind}));case 4:case"end":return e.stop()}},e)})),function(){return Se.apply(this,arguments)}),getActiveStreamLabel:function(){var e=Pe.getActiveTrack();return e?e.label:""},getActiveTrack:function(){var e=ye&&ye.getVideoTracks();return e&&e.length?e[0]:null},pickConstraints:function(e){var t=e.width,r=e.height,n=e.facingMode,i=e.aspectRatio,a=e.deviceId,o=e,s=o.minAspectRatio,u=o.facing;return void 0!==s&&s>0&&(i=s,console.log("WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead")),void 0!==u&&(n=u,console.log("WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'")),{audio:!1,video:a&&n?{width:t,height:r,aspectRatio:i,deviceId:a}:{width:t,height:r,facingMode:n,aspectRatio:i,deviceId:a}}}};function Oe(e){var t=e.videoWidth,r=e.videoHeight;return new Promise(function(e,n){var i=10;!function a(){i>0?t>10&&r>10?e():window.setTimeout(a,500):n("Unable to play video stream. Is webcam working?"),i--}()})}var Re=r(19),ze=function(){function e(t){i()(this,e),u()(this,"_inputStream",void 0),u()(this,"_streamConfig",void 0),u()(this,"_data",void 0),u()(this,"_canvasData",void 0),u()(this,"_grayData",void 0),u()(this,"_canvasImageArray",void 0),u()(this,"_grayImageArray",void 0),u()(this,"_targetImageArray",void 0),u()(this,"_canvasHeight",void 0),u()(this,"_canvasWidth",void 0),u()(this,"_videoHeight",void 0),u()(this,"_videoWidth",void 0),u()(this,"_height",void 0),u()(this,"_width",void 0),u()(this,"_stepSizeX",void 0),u()(this,"_stepSizeY",void 0),u()(this,"_topLeft",void 0),this._inputStream=t,this._streamConfig=t.config,this._videoHeight=t.realHeight,this._videoWidth=t.realWidth,this._canvasHeight=t.canvasHeight,this._canvasWidth=t.canvasWidth,this._width=t.width,this._height=t.height,this._topLeft=t.topLeft,this._data=new Uint8Array(this._width*this._height),this._grayData=new Uint8Array(this._videoWidth*this._videoHeight),this._canvasData=new Uint8Array(this._canvasWidth*this._canvasHeight),this._grayImageArray=Re(this._grayData,[this._videoHeight,this._videoWidth]).transpose(1,0),this._canvasImageArray=Re(this._canvasData,[this._canvasHeight,this._canvasWidth]).transpose(1,0),this._targetImageArray=this._canvasImageArray.hi(this._topLeft.x+this._width,this._topLeft.y+this._height).lo(this._topLeft.x,this._topLeft.y),this._stepSizeX=this._videoWidth/this._canvasWidth,this._stepSizeY=this._videoHeight/this._canvasHeight,console.log("FrameGrabber",JSON.stringify({videoSize:this._grayImageArray.shape,canvasSize:this._canvasImageArray.shape,stepSize:[this._stepSizeX,this._stepSizeY],size:this._targetImageArray.shape,topLeft:this._topLeft}))}return o()(e,[{key:"grab",value:function(e){this._data=e;var t=this._inputStream.getFrame();return!!t&&(this._scaleAndCrop(t),!0)}},{key:"_scaleAndCrop",value:function(e){this._computeGray(e.data);for(var t=0;t<this._canvasHeight;t++)for(var r=0;r<this._canvasWidth;r++)this._canvasImageArray.set(r,t,0|Ie(this._grayImageArray,r*this._stepSizeX,t*this._stepSizeY));if(this._targetImageArray.shape[0]!==this._width||this._targetImageArray.shape[1]!==this._height)throw new Error("Shapes do not match!");for(var n=0;n<this._height;n++)for(var i=0;i<this._width;i++)this._data[n*this._width+i]=this._targetImageArray.get(i,n)}},{key:"_computeGray",value:function(e){var t=e.length;if(this._streamConfig&&this._streamConfig.singleChannel)for(var r=0,n=0;r<t;r+=4,n++)this._data[n]=e[r];else for(var i=0,a=0;i<t;i+=4,a++)this._data[a]=.299*e[i]+.587*e[i+1]+.114*e[i+2]|0}}]),e}();function Ie(e,t,r){var n=Math.floor(t),i=t-n,a=0<=n&&n<e.shape[0],o=0<=n+1&&n+1<e.shape[0],s=Math.floor(r),u=r-s,c=0<=s&&s<e.shape[1],h=0<=s+1&&s+1<e.shape[1],l=a&&c?e.get(n,s):0,f=a&&h?e.get(n,s+1):0;return(1-u)*((1-i)*l+i*(o&&c?e.get(n+1,s):0))+u*((1-i)*f+i*(o&&h?e.get(n+1,s+1):0))}function We(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}var De=function(){function e(){i()(this,e),u()(this,"_calculatedHeight",void 0),u()(this,"_calculatedWidth",void 0),u()(this,"_canvasHeight",void 0),u()(this,"_canvasWidth",void 0),u()(this,"_config",void 0),u()(this,"_eventNames",void 0),u()(this,"_eventHandlers",void 0),u()(this,"_topLeft",void 0),this._canvasWidth=0,this._canvasHeight=0,this._config=null,this._eventNames=["canrecord","ended"],this._eventHandlers=new Map,this._topLeft={x:0,y:0}}return o()(e,[{key:"setCanvasSize",value:function(e,t){this._canvasWidth=e,this._canvasHeight=t}},{key:"addEventListener",value:function(e,t,r){-1!==this._eventNames.indexOf(e)&&(this._eventHandlers.has(e)||this._eventHandlers.set(e,new Array),this._eventHandlers.get(e).push(t))}},{key:"clearEventHandlers",value:function(){this._eventHandlers.clear()}},{key:"trigger",value:function(e,t){var r=this,n=this._eventHandlers.get(e);n&&n.forEach(function(e){return e.apply(r,t)})}},{key:"height",get:function(){return this._calculatedHeight},set:function(e){this._calculatedHeight=e}},{key:"width",get:function(){return this._calculatedWidth},set:function(e){this._calculatedWidth=e}},{key:"topLeft",get:function(){return function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?We(r,!0).forEach(function(t){u()(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):We(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},this._topLeft)},set:function(e){this._topLeft.x=e.x,this._topLeft.y=e.y}},{key:"canvasHeight",get:function(){return this._canvasHeight}},{key:"canvasWidth",get:function(){return this._canvasWidth}}]),e}();function Te(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}var Le=r(20),je=function(e){function t(){var e;return i()(this,t),e=A()(this,E()(t).call(this)),u()(H()(e),"_baseUrl",void 0),u()(H()(e),"_ended",void 0),u()(H()(e),"_frame",void 0),u()(H()(e),"_height",void 0),u()(H()(e),"_loaded",void 0),u()(H()(e),"_offset",void 0),u()(H()(e),"_size",void 0),u()(H()(e),"_width",void 0),e._canvasHeight=0,e._canvasWidth=0,e._baseUrl=null,e._ended=!1,e._frame=null,e._height=0,e._loaded=!1,e._offset=1,e._size=0,e._width=0,e}return O()(t,e),o()(t,[{key:"setAttribute",value:function(){}},{key:"pause",value:function(){}},{key:"play",value:function(){}},{key:"getFrame",value:function(){return this._loaded?this._frame:null}},{key:"_loadImages",value:function(){var e=this;this._loaded=!1,Le(this._baseUrl,this._config.mime,function(t,r){t&&(console.log(t),process.exit(1)),e._loaded=!0,e._frame=r,console.log(r.shape),e._width=0|r.shape[0],e._height=0|r.shape[1],e._canvasWidth=e._calculatedWidth=e._config.size?e._width>e._height?e._config.size:e._width*e._config.size/e._height|0:e._width,e._canvasHeight=e._calculatedHeight=e._config.size?e._width>e._height?e._height*e._config.size/e._width|0:e._config.size:e._height,setTimeout(function(){return e.trigger("canrecord",[])},0)},this._offset,this._size,this._config.sequence)}},{key:"realHeight",get:function(){return this._height}},{key:"realWidth",get:function(){return this._width}},{key:"config",get:function(){return this._config},set:function(e){this._config=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Te(r,!0).forEach(function(t){u()(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Te(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},e),this._baseUrl=e.src||"",this._loadImages()}},{key:"ended",get:function(){return this._ended}},{key:"currentTime",set:function(e){}}]),t}(De);function Me(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}var Ge=function(e){function t(e){var r;return i()(this,t),r=A()(this,E()(t).call(this)),u()(H()(r),"_video",void 0),r._video=e,r}return O()(t,e),o()(t,[{key:"setAttribute",value:function(e,t){this._video.setAttribute(e,t)}},{key:"pause",value:function(){this._video.pause()}},{key:"play",value:function(){this._video.play()}},{key:"addEventListener",value:function(e,r,n){G()(E()(t.prototype),"addEventListener",this).call(this,e,r,n),-1===this._eventNames.indexOf(e)&&this._video.addEventListener(e,r,n)}},{key:"clearEventHandlers",value:function(){G()(E()(t.prototype),"clearEventHandlers",this).call(this)}},{key:"trigger",value:function(e,r){"canrecord"===e&&this._initSize(),G()(E()(t.prototype),"trigger",this).call(this,e,r)}},{key:"getFrame",value:function(){return this._video}},{key:"_initSize",value:function(){var e=this._video.videoWidth,t=this._video.videoHeight;this._canvasWidth=this._calculatedWidth=this._config.size?e>t?this._config.size:e*this._config.size/t|0:e,this._canvasHeight=this._calculatedHeight=this._config.size?e>t?t*this._config.size/e|0:this._config.size:t}},{key:"realHeight",get:function(){return this._video.videoHeight}},{key:"realWidth",get:function(){return this._video.videoWidth}},{key:"config",get:function(){return this._config},set:function(e){this._config=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Me(r,!0).forEach(function(t){u()(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Me(r).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},e),this._video.src=e.src||""}},{key:"ended",get:function(){return this._video.ended}},{key:"currentTime",set:function(e){"LiveStream"!==this._config.type&&(this._video.currentTime=e)}}]),t}(De),Ue=function(e){function t(e){return i()(this,t),e.setAttribute("autoplay",""),A()(this,E()(t).call(this,e))}return O()(t,e),o()(t,[{key:"ended",get:function(){return!1}}]),t}(Ge);function Ne(e){for(var t=new Array,r=new Array,n=1;n*n<=e;n++)e%n==0&&(t.push(n),n*n!==e&&r.unshift(e/n|0));return t.concat(r)}function He(e,t){var r=t.x,n=t.y,i=0|Math.max(0|r,0|n),a=[8,10,15,20,32,60,80],o={"x-small":5,small:4,medium:3,large:2,"x-large":1},s=o[e]||0|o.medium,u=0|a[s],c=i/u|0;function h(e){for(var t=0,r=0|e[e.length>>1];t<e.length-1&&e[t]<c;)t++;return t>0&&(r=Math.abs(e[t]-c)>Math.abs(e[t-1]-c)?0|e[t-1]:0|e[t]),c/r<a[s+1]/a[s]&&c/r>a[s-1]/a[s]?{x:r,y:r}:null}return h(function(e,t){if(e===t)return Ne(e);for(var r=e>t?e:t,n=e>t?t:e,i=new Array,a=new Array,o=1;o*o<=n;o++)if(r%o==0&&n%o==0){i.push(o);var s=n/o|0;o!==s&&r%s==0&&a.unshift()}return i.concat(a)}(r,n))||h(Ne(i))||h(Ne(c*u))}function Be(e,t){var r=e.width,n=e.height,i=t.halfSample?1:0,a=e.config;if(a&&a.area){var o=function(e,t,r){var n={width:e,height:t},i=Object.keys(r).reduce(function(e,t){var i=r[t],a=function(e){return{value:parseFloat(e),unit:e.indexOf("%")===e.length-1?"%":e.indexOf("px")===e.length-2?"px":"%"}}(i),o=Fe[t](a,n);return e[t]=o,e},{});return{topLeft:{x:i.left,y:i.top},width:i.right-i.left,height:i.bottom-i.top}}(r,n,a.area);e.topLeft=o.topLeft,e.setCanvasSize(r,n),r=o.width,n=o.height}var s={x:r>>i,y:n>>i},u=He(t.patchSize,s);if(e.width=(s.x/u.x<<i)*u.x|0,e.height=(s.y/u.y<<i)*u.y|0,e.width%u.x==0&&e.height%u.y==0)return!0;throw new Error("Image dimensions do not comply with the current settings: width (".concat(r,") and height (").concat(n,") must be a multiple of ").concat(u.x))}var Fe={bottom:function(e,t){var r=t.height;return"%"===e.unit?r-r*e.value/100|0:"px"===e.unit?r-e.value:r},left:function(e,t){var r=t.width;return"%"===e.unit?r*e.value/100|0:"px"===e.unit?e.value:0},right:function(e,t){var r=t.width;return"%"===e.unit?r-r*e.value/100|0:"px"===e.unit?r-e.value:r},top:function(e,t){var r=t.height;return"%"===e.unit?r*e.value/100|0:"px"===e.unit?e.value:0}};var Ve=function(){function e(t,r){i()(this,e),u()(this,"_threshold",void 0),u()(this,"_moments",void 0),u()(this,"_center",void 0),this._threshold=t,this._moments=new Array,this._center={rad:0,x:0,y:0},r&&this.add(r)}return o()(e,null,[{key:"clusterize",value:function(t,r){var n=new Array;return t.forEach(function(t){var i=n.find(function(e){return e.fits(t)});i?i.add(t):n.push(new e(r,t))}),n}}]),o()(e,[{key:"add",value:function(e){this._moments.push(e),this._center.rad=this._moments.reduce(function(e,t){return e+t.rad},0)/this._moments.length,this._center.x=Math.cos(this._center.rad),this._center.y=Math.sin(this._center.rad)}},{key:"fits",value:function(e){return Math.abs(e.x*this._center.x+e.y*this._center.y)>this._threshold}},{key:"moments",get:function(){return this._moments}}]),e}();function qe(e,t){var r=e.x,n=e.y;return{x:t[0]*r+t[2]*n,y:t[1]*r+t[3]*n}}function Xe(e,t){t||(t=8);var r=8-t,n=function(e,t){t||(t=8);for(var r=e.data,n=8-t,i=new Int32Array(1<<t),a=r.length;a--;)i[r[a]>>n]++;return i}(e,t),i=[0],a=(1<<t)-1;function o(e,t){for(var r=0,i=e;i<=t;i++)r+=n[i];return r}function s(e,t){for(var r=0,i=e;i<=t;i++)r+=i*n[i];return r}for(var u=1;u<a;u++){var c=o(0,u),h=o(u+1,a),l=c*h||1,f=s(0,u)*h-s(u+1,a)*c;i[u]=f*f/l}return i.reduce(function(e,t,r,n){return t>n[e]?r:e},0)<<r}var Ye,Qe,Ze=[[0,1],[1,1],[1,0],[1,-1],[0,-1],[-1,-1],[-1,0],[-1,1]],Ke=function(){function e(t,r){i()(this,e),u()(this,"_imageData",void 0),u()(this,"_labelData",void 0),u()(this,"_width",void 0),this._imageData=t.data,this._labelData=r.data,this._width=t.size.x}return o()(e,[{key:"trace",value:function(e,t,r,n){for(var i=0;i<7;i++){var a=e.cy+Ze[e.dir][0]|0,o=e.cx+Ze[e.dir][1]|0,s=a*this._width+o|0;if(this._imageData[s]===t&&(0===this._labelData[s]||this._labelData[s]===r))return this._labelData[s]=r,e.cx=o,e.cy=a,!0;0===this._labelData[s]&&(this._labelData[s]=n),e.dir=(e.dir+1)%8}return!1}},{key:"contourTracing",value:function(e,t,r,n,i){var a=null,o={cx:t,cy:e,dir:0};if(this.trace(o,n,r,i)){var s=a={x:t,y:e,dir:o.dir,next:null,prev:null},u=o.dir,c={x:o.cx,y:o.cy,dir:0,next:null,prev:s};s.next=c,s=c;do{o.dir=(o.dir+6)%8,this.trace(o,n,r,i),u!==o.dir?(s.dir=o.dir,c={x:o.cx,y:o.cy,dir:0,next:null,prev:s},s.next=c,s=c):(s.dir=u,s.x=o.cx,s.y=o.cy),u=o.dir}while(o.cx!==t||o.cy!==e);a.prev=s.prev,s.prev.next=a}return a}}]),e}();!function(e){e[e.Outside=-32767]="Outside",e[e.Inside=-32766]="Inside"}(Ye||(Ye={})),function(e){e[e.CW=0]="CW",e[e.CCW=1]="CCW",e[e.Unknown=2]="Unknown"}(Qe||(Qe={}));var Je=function(){function e(t,r){i()(this,e),u()(this,"_width",void 0),u()(this,"_height",void 0),u()(this,"_tracer",void 0),u()(this,"_imageData",void 0),u()(this,"_labelData",void 0),this._imageData=t.data,this._labelData=r.data,this._width=t.size.x,this._height=t.size.y,this._tracer=new Ke(t,r)}return o()(e,[{key:"rasterize",value:function(e){for(var t=new Array,r=0;r<400;r++)t[r]=0;t[0]=this._imageData[0];for(var n,i=null,a=0,o=1;o<this._height-1;o++)for(var s=0,u=t[0],c=1;c<this._width-1;c++){var h=o*this._width+c;if(0===this._labelData[h]){var l=this._imageData[h];if(l!==u)if(0===s){var f=a+1;t[f]=l,u=l;var d=this._tracer.contourTracing(o,c,f,l,Ye.Outside);if(null!==d){a++,s=f;var v={dir:Qe.CW,index:s,firstVertex:d,nextPeer:i,insideContours:null};null!==i&&(i.previousPeer=v),i=v}}else{var _=this._tracer.contourTracing(o,c,Ye.Inside,l,s);if(null!==_){var p={dir:0===e?Qe.CCW:Qe.CW,firstVertex:_,index:e,insideContours:null};for(n=i;null!==n&&n.index!==s;)n=n.nextPeer;null!==n&&(p.nextPeer=n.insideContours,null!==n.insideContours&&(n.insideContours.previousPeer=p),n.insideContours=p)}}else this._labelData[h]=s}else this._labelData[h]===Ye.Inside?(s=0,u=this._imageData[h]):this._labelData[h]===Ye.Outside?(s=0,u=t[0]):u=t[s=this._labelData[h]]}for(n=i;null!==n;)n.index=e,n=n.nextPeer;return{cc:i,count:a}}},{key:"drawContour",value:function(e,t){var r=e.getContext("2d");r.strokeStyle="red",r.fillStyle="red",r.lineWidth=1;for(var n=t,i=n&&n.insideContours;null!==n;){var a=i||n;switch(i=null!==i?i.nextPeer:(n=n.nextPeer)&&n.insideContours,a.dir){case Qe.CW:r.strokeStyle="red";break;case Qe.CCW:r.strokeStyle="blue";break;case Qe.Unknown:r.strokeStyle="green"}var o=a.firstVertex;r.beginPath(),r.moveTo(o.x,o.y);do{o=o.next,r.lineTo(o.x,o.y)}while(o!==a.firstVertex);r.stroke()}}}]),e}();var $e,et,tt,rt,nt,it,at,ot,st,ut,ct=function(e,t,r){"use asm";var n=new e.Uint8Array(r),i=t.size|0,a=e.Math.imul;function o(e,t){e=e|0;t=t|0;var r=0,a=0,o=0,s=0,u=0,c=0,h=0,l=0;for(r=1;(r|0)<(i-1|0);r=r+1|0){l=l+i|0;for(a=1;(a|0)<(i-1|0);a=a+1|0){s=l-i|0;u=l+i|0;c=a-1|0;h=a+1|0;o=(n[e+s+c|0]|0)+(n[e+s+h|0]|0)+(n[e+l+a|0]|0)+(n[e+u+c|0]|0)+(n[e+u+h|0]|0)|0;if((o|0)==(5|0)){n[t+l+a|0]=1}else{n[t+l+a|0]=0}}}return}function s(e,t,r){e=e|0;t=t|0;r=r|0;var o=0;o=a(i,i)|0;while((o|0)>0){o=o-1|0;n[r+o|0]=(n[e+o|0]|0)-(n[t+o|0]|0)|0}}function u(e,t,r){e=e|0;t=t|0;r=r|0;var o=0;o=a(i,i)|0;while((o|0)>0){o=o-1|0;n[r+o|0]=n[e+o|0]|0|(n[t+o|0]|0)|0}}function c(e){e=e|0;var t=0,r=0;r=a(i,i)|0;while((r|0)>0){r=r-1|0;t=(t|0)+(n[e+r|0]|0)|0}return t|0}function h(e,t){e=e|0;t=t|0;var r=0;r=a(i,i)|0;while((r|0)>0){r=r-1|0;n[e+r|0]=t}}function l(e,t){e=e|0;t=t|0;var r=0,a=0,o=0,s=0,u=0,c=0,h=0,l=0;for(r=1;(r|0)<(i-1|0);r=r+1|0){l=l+i|0;for(a=1;(a|0)<(i-1|0);a=a+1|0){s=l-i|0;u=l+i|0;c=a-1|0;h=a+1|0;o=(n[e+s+c|0]|0)+(n[e+s+h|0]|0)+(n[e+l+a|0]|0)+(n[e+u+c|0]|0)+(n[e+u+h|0]|0)|0;if((o|0)>(0|0)){n[t+l+a|0]=1}else{n[t+l+a|0]=0}}}return}function f(e,t){e=e|0;t=t|0;var r=0;r=a(i,i)|0;while((r|0)>0){r=r-1|0;n[t+r|0]=n[e+r|0]|0}}function d(e){e=e|0;var t=0,r=0;for(t=0;(t|0)<(i-1|0);t=t+1|0){n[e+t|0]=0;n[e+r|0]=0;r=r+i-1|0;n[e+r|0]=0;r=r+1|0}for(t=0;(t|0)<(i|0);t=t+1|0){n[e+r|0]=0;r=r+1|0}}function v(){var e=0,t=0,r=0,n=0,v=0,_=0;t=a(i,i)|0;r=t+t|0;n=r+t|0;h(n,0);d(e);do{o(e,t);l(t,r);s(e,r,r);u(n,r,n);f(t,e);v=c(e)|0;_=(v|0)==0|0}while(!_)}return{skeletonize:v}},ht=function(){function e(t,r){i()(this,e),u()(this,"_config",void 0),u()(this,"_inputImageWrapper",void 0),u()(this,"_currentImageWrapper",void 0),u()(this,"_skelImageWrapper",void 0),u()(this,"_subImageWrapper",void 0),u()(this,"_labelImageWrapper",void 0),u()(this,"_binaryImageWrapper",void 0),u()(this,"_patchGrid",void 0),u()(this,"_patchLabelGrid",void 0),u()(this,"_imageToPatchGrid",void 0),u()(this,"_patchSize",void 0),u()(this,"_binaryContext",void 0),u()(this,"_numPatches",void 0),u()(this,"_skeletonizer",void 0),this._config=r,this._inputImageWrapper=t,this._numPatches={x:0,y:0},this._initBuffers(),this._initCanvas()}return o()(e,[{key:"locate",value:function(){this._config.halfSample&&function(e,t){for(var r=e.data,n=e.size.x,i=t.data,a=r.length,o=n>>1,s=0,u=n,c=0;u<a;){for(var h=0;h<o;h++)i[c]=r[s]+r[s+1]+r[u]+r[u+1]>>2,c++,s+=2,u+=2;s+=n,u+=n}}(this._inputImageWrapper,this._currentImageWrapper),this._binarizeImage();var e=this._findPatches();if(e.length<this._numPatches.x*this._numPatches.y*.05)return null;var t=this._rasterizeAngularSimilarity(e);if(t<1)return null;var r=this._findBiggestConnectedAreas(t);return 0===r.length?null:this._findBoxes(r,t)}},{key:"_initBuffers",value:function(){this._config.halfSample?this._currentImageWrapper=new p({x:this._inputImageWrapper.size.x/2|0,y:this._inputImageWrapper.size.y/2|0}):this._currentImageWrapper=this._inputImageWrapper,this._patchSize=He(this._config.patchSize,this._currentImageWrapper.size),this._numPatches.x=this._currentImageWrapper.size.x/this._patchSize.x|0,this._numPatches.y=this._currentImageWrapper.size.y/this._patchSize.y|0,this._binaryImageWrapper=new p(this._currentImageWrapper.size,void 0,Uint8Array,!1),this._labelImageWrapper=new p(this._patchSize,void 0,Array,!0);var e=new ArrayBuffer(65536);this._subImageWrapper=new p(this._patchSize,new Uint8Array(e,0,this._patchSize.x*this._patchSize.y)),this._skelImageWrapper=new p(this._patchSize,new Uint8Array(e,this._patchSize.x*this._patchSize.y*3,this._patchSize.x*this._patchSize.y),void 0,!0),this._skeletonizer=ct("undefined"!=typeof window?window:"undefined"!=typeof self?self:global,{size:this._patchSize.x},e);var t={x:this._currentImageWrapper.size.x/this._subImageWrapper.size.x|0,y:this._currentImageWrapper.size.y/this._subImageWrapper.size.y|0};this._patchLabelGrid=new p(t,void 0,Int32Array,!0),this._patchGrid=new p(t,void 0,void 0,!0),this._imageToPatchGrid=new Array(this._patchLabelGrid.data.length)}},{key:"_initCanvas",value:function(){if(!this._config.useWorker&&"undefined"!=typeof document){var e=document.createElement("canvas");e.className="binaryBuffer",e.width=this._binaryImageWrapper.size.x,e.height=this._binaryImageWrapper.size.y,this._binaryContext=e.getContext("2d")}}},{key:"_boxFromPatches",value:function(e){var t=e.reduce(function(e,t){t.pos;return e+t.rad},0)/e.length;(t=(180*t/Math.PI+90)%180-90)<0&&(t+=180),t=(180-t)*Math.PI/180;var r=Math.cos(t),n=Math.sin(t),i=new Float32Array([r,n,-n,r]),a=function(e){var t=e[0],r=e[1],n=e[2],i=e[3],a=t*i-n*r;return a?new Float32Array([i/a,-r/a,-n/a,t/a]):null}(i);e.forEach(function(e){for(var t=e.box,r=0;r<4;r++)t[r]=qe(t[r],i)});var o=this._binaryImageWrapper.size.x,s=this._binaryImageWrapper.size.y,u=-o,c=-s;e.forEach(function(e){e.box.forEach(function(e){var t=e.x,r=e.y;t<o&&(o=t),t>u&&(u=t),r<s&&(s=r),r>c&&(c=r)})});var h=[{x:o,y:s},{x:u,y:s},{x:u,y:c},{x:o,y:c}];return h=h.map(function(e){return qe(e,a)}),this._config.halfSample&&(h=h.map(function(e){var t=e.x,r=e.y;return{x:2*t,y:r*=2}})),h}},{key:"_binarizeImage",value:function(){var e,t,r,n;e=this._currentImageWrapper,t=this._binaryImageWrapper,r=Xe(e),n=t.data,e.data.forEach(function(e,t){n[t]=e<r?1:0}),this._binaryImageWrapper.zeroBorder()}},{key:"_findPatches",value:function(){for(var e=new Array,t=0;t<this._numPatches.x;t++)for(var r=0;r<this._numPatches.y;r++){var n=this._subImageWrapper.size.x*t,i=this._subImageWrapper.size.y*r;this._skeletonize(n,i),this._skelImageWrapper.zeroBorder(),this._labelImageWrapper.data.fill(0);var a=new Je(this._skelImageWrapper,this._labelImageWrapper).rasterize(0);0;var o=this._labelImageWrapper.moments(a.count),s=this._describePatch(o,r*this._numPatches.x+t,n,i);s&&e.push(s)}return e}},{key:"_findBiggestConnectedAreas",value:function(e){var t=new Array(e).fill(0);return this._patchLabelGrid.data.forEach(function(e){e>0&&t[e-1]++}),t.map(function(e,t){return{value:e,index:t}}).filter(function(e){return e.value>=5}).sort(function(e,t){return t.value-e.value}).map(function(e){return e.index+1})}},{key:"_findBoxes",value:function(e,t){var r=this,n=new Array;return e.forEach(function(e){var t=new Array;r._patchLabelGrid.data.forEach(function(n,i){n===e&&t.push(r._imageToPatchGrid[i])});var i=r._boxFromPatches(t);i&&n.push(i)}),n}},{key:"_similarMoments",value:function(e){return Ve.clusterize(e,.9).reduce(function(e,t){var r=t.moments.length;return r>e.count?{item:t,count:r}:e},{item:{moments:[]},count:0}).item.moments}},{key:"_skeletonize",value:function(e,t){this._binaryImageWrapper.subImageAsCopy(this._subImageWrapper,e,t),this._skeletonizer.skeletonize()}},{key:"_describePatch",value:function(e,t,r,n){if(e.length>1){var i=Math.ceil(this._patchSize.x/3),a=e.filter(function(e){return e.m00>i});if(a.length>1){var o=this._similarMoments(a),s=0|o.length;if(s>1&&s<<2>=3*a.length&&s<<2>e.length){var u=o.reduce(function(e,t){return e+t.rad},0)/s;return{index:t,pos:{x:r,y:n},box:[{x:r,y:n},{x:r+this._subImageWrapper.size.x,y:n},{x:r+this._subImageWrapper.size.x,y:n+this._subImageWrapper.size.y},{x:r,y:n+this._subImageWrapper.size.y}],moments:o,rad:u,x:Math.cos(u),y:Math.sin(u)}}}}return null}},{key:"_notYetProcessed",value:function(){for(var e=0;e<this._patchLabelGrid.data.length;e++)if(0===this._patchLabelGrid.data[e]&&1===this._patchGrid.data[e])return e;return this._patchLabelGrid.data.length}},{key:"_trace",value:function(e,t){var r=this,n=e%this._patchLabelGrid.size.x,i=e/this._patchLabelGrid.size.x|0;if(e<this._patchLabelGrid.data.length){var a=this._imageToPatchGrid[e];this._patchLabelGrid.data[e]=t,Ze.forEach(function(e){var o=i+e[0],s=n+e[1],u=o*r._patchLabelGrid.size.x+s;if(0===r._patchGrid.data[u])r._patchLabelGrid.data[u]=Number.MAX_VALUE;else if(0===r._patchLabelGrid.data[u]){var c=r._imageToPatchGrid[u];Math.abs(c.x*a.x+c.y*a.y)>.95&&r._trace(u,t)}})}}},{key:"_rasterizeAngularSimilarity",value:function(e){var t=this,r=0;this._patchGrid.data.fill(0),this._patchLabelGrid.data.fill(0),this._imageToPatchGrid.fill(null),e.forEach(function(e){t._imageToPatchGrid[e.index]=e,t._patchGrid.data[e.index]=1}),this._patchGrid.zeroBorder();for(var n=0;(n=this._notYetProcessed())<this._patchLabelGrid.data.length;)r++,this._trace(n,r);return r}},{key:"_drawRect",value:function(e,t,r,n){var i=e.x,a=e.y;this._binaryContext.strokeStyle=r,this._binaryContext.fillStyle=r,this._binaryContext.lineWidth=n||1,this._binaryContext.strokeRect(i,a,t.x,t.y)}},{key:"_drawPath",value:function(e,t,r){c.drawPath(e,this._binaryContext,t,r)}}]),e}(),lt={ctx:{image:null,overlay:null},dom:{image:null,overlay:null}},ft=new Array;t.default={init:function(e,t,r){ot=!0,ut=m(w,e),r?(ot=!1,dt(r),t()):function(e){var t;if("VideoStream"===ut.inputStream.type)t=document.createElement("video"),$e=new Ge(t);else if("ImageStream"===ut.inputStream.type)$e=new je;else if("LiveStream"===ut.inputStream.type){var r=vt();r&&((t=r.querySelector("video"))||(t=document.createElement("video"),r.appendChild(t))),$e=new Ue(t),Pe.request(t,ut.inputStream.constraints).then(function(){return $e.trigger("canrecord")},function(t){return e(t)})}$e.setAttribute("preload","auto"),$e.config=ut.inputStream,$e.addEventListener("canrecord",function(e){Be($e,ut.locator),function(){if("undefined"!=typeof document){var e=vt();if(lt.dom.image=document.querySelector("canvas.imgBuffer"),lt.dom.image||(lt.dom.image=document.createElement("canvas"),lt.dom.image.className="imgBuffer",e&&"ImageStream"===ut.inputStream.type&&e.appendChild(lt.dom.image)),lt.ctx.image=lt.dom.image.getContext("2d"),lt.dom.image.width=$e.canvasWidth,lt.dom.image.height=$e.canvasHeight,lt.dom.overlay=document.querySelector("canvas.drawingBuffer"),!lt.dom.overlay){lt.dom.overlay=document.createElement("canvas"),lt.dom.overlay.className="drawingBuffer",e&&e.appendChild(lt.dom.overlay);var t=document.createElement("br");t.setAttribute("clear","all"),e&&e.appendChild(t)}lt.ctx.overlay=lt.dom.overlay.getContext("2d"),lt.dom.overlay.width=$e.canvasWidth,lt.dom.overlay.height=$e.canvasHeight}}(),et=new ze($e,lt.dom.image),wt(ut.numOfWorkers,function(){0===ut.numOfWorkers&&dt(),$e.play(),e()})}.bind(this,e))}(t)},CameraAccess:Pe,ImageDebug:c,ImageWrapper:p,ResultCollector:h,get canvas(){return lt},start:function(){var e,t;ot&&"LiveStream"===ut.inputStream.type?(e=1e3/(ut.frequency||60),t=null,tt=!1,function r(n){t=t||n,tt||(n>=t&&(t+=e,yt()),window.requestAnimationFrame(r))}(performance.now())):yt()},stop:function(){tt=!0,wt(0),"LiveStream"===ut.inputStream.type&&(Pe.release(),$e.clearEventHandlers())},decodeSingle:function(e,t){var r=this;e=m({inputStream:{type:"ImageStream",sequence:!1,size:800,src:e.src},numOfWorkers:1,locator:{halfSample:!1}},e),this.init(e,function(){f.once("processed",function(e){r.stop(),t.call(null,e)},!0),r.start()})},pause:function(){tt=!0},onDetected:function(e){f.subscribe("detected",e)},offDetected:function(e){f.unsubscribe("detected",e)},onProcessed:function(e){f.subscribe("processed",e)},offProcessed:function(e){f.unsubscribe("processed",e)},setReaders:function(e){at?at.setReaders(e):ot&&ft.length>0&&ft.forEach(function(t){return t.worker.postMessage({cmd:"setReaders",readers:e})})},registerResultCollector:function(e){e&&"function"==typeof e.addResult&&(st=e)}};function dt(e){!function(e){rt=e||new p({x:$e.width,y:$e.height});0;it=[{x:0,y:0},{x:0,y:rt.size.y},{x:rt.size.x,y:rt.size.y},{x:rt.size.x,y:0}],nt=new ht(rt,ut.locator)}(e),at=new we(ut.decoder,rt)}function vt(){var e=ut.inputStream.target;if(e instanceof HTMLElement)return e;var t="string"==typeof e?e:"#interactive.viewport";return document.querySelector(t)}function _t(e,t){e.forEach(function(e){e.x+=t.x,e.y+=t.y})}function pt(e,t){var r=e;if(e&&ot){var n=$e.topLeft;0===n.x&&0===n.y||function e(t,r){t.barcodes&&t.barcodes.forEach(function(t){return e(t,r)}),t.line&&_t(t.line,r),t.box&&_t(t.box,r),t.boxes&&t.boxes.forEach(function(e){return _t(e,r)})}(e,n),function(e,t,r,n){t&&st&&(e.barcodes?e.barcodes.forEach(function(e){var i=e.codeResult;i&&st.addResult(t,r,n,i)}):e.codeResult&&st.addResult(t,r,n,e.codeResult))}(e,t,$e.canvasWidth,$e.canvasHeight),r=e.barcodes||e}f.publish("processed",r),function(e){return e&&(!!e.codeResult||e.barcodes&&e.barcodes.some(function(e){return!!e.codeResult}))}(e)&&f.publish("detected",r)}function gt(){var e=ut.locate?nt.locate():[it];pt(at.decodeFromBoundingBoxes(e),rt.data)}function yt(){if(ot)if(ft.length>0){var e=ft.find(function(e){return!e.busy});if(!e)return;var t=e.imageData;et.grab(t)&&(e.busy=!0,e.worker.postMessage({cmd:"process",imageData:t},[t.buffer]))}else et.grab(rt.data)&>();else gt()}function mt(e){var t,r,n=(t=__factorySource__||"",r=new Blob(["(".concat(bt.toString(),")(").concat(t,");")],{type:"text/javascript"}),window.URL.createObjectURL(r)),i={worker:new Worker(n),imageData:new Uint8Array($e.width*$e.height),busy:!0};i.worker.onmessage=function(t){var r=t.data;"initialized"===r.event?(URL.revokeObjectURL(n),i.busy=!1,i.imageData=new Uint8Array(r.imageData),e(i)):"processed"===r.event?(i.busy=!1,i.imageData=new Uint8Array(r.imageData),pt(r.result,i.imageData)):r.event},i.worker.postMessage({cmd:"init",size:{x:$e.width,y:$e.height},imageData:i.imageData,config:m(ut,{inputStream:{target:null}})},[i.imageData.buffer])}function bt(e){var t,r,n=self;!e||(t=e().default)?self.onmessage=function(e){var i=e.data;if("init"===i.cmd){var a=i.config;a.numOfWorkers=0,r=new t.ImageWrapper({x:i.size.x,y:i.size.y},new Uint8Array(i.imageData)),t.init(a,function(){return n.postMessage({event:"initialized",imageData:r.data},[r.data.buffer])},r),t.onProcessed(function(e){return n.postMessage({event:"processed",imageData:r.data,result:e},[r.data.buffer])})}else"process"===i.cmd?(r.data=new Uint8Array(i.imageData),t.start()):"setReaders"===i.cmd&&t.setReaders(i.readers)}:n.postMessage({event:"error",message:"Quagga could not be created"})}function wt(e,t){var r=e-ft.length;if(!(r>0))return r<0&&(ft.slice(r).forEach(function(e){e.worker.terminate()}),ft=ft.slice(0,r)),t&&t();for(var n=0;n<r;n++)mt(function(r){ft.push(r),ft.length>=e&&t&&t()})}}])});
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9RdWFnZ2Evd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1F1YWdnYS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9RdWFnZ2EvL1VzZXJzL2Fkb21yYXRjaGV2L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL1F1YWdnYS8vVXNlcnMvYWRvbXJhdGNoZXYvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy9Vc2Vycy9hZG9tcmF0Y2hldi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9RdWFnZ2EvL1VzZXJzL2Fkb21yYXRjaGV2L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL1F1YWdnYS8vVXNlcnMvYWRvbXJhdGNoZXYvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9RdWFnZ2EvL1VzZXJzL2Fkb21yYXRjaGV2L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovL1F1YWdnYS8vVXNlcnMvYWRvbXJhdGNoZXYvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL1F1YWdnYS8vVXNlcnMvYWRvbXJhdGNoZXYvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0LmpzIiwid2VicGFjazovL1F1YWdnYS8vVXNlcnMvYWRvbXJhdGNoZXYvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL1F1YWdnYS8vVXNlcnMvYWRvbXJhdGNoZXYvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy9Vc2Vycy9hZG9tcmF0Y2hldi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy9Vc2Vycy9hZG9tcmF0Y2hldi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovL1F1YWdnYS8vVXNlcnMvYWRvbXJhdGNoZXYvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy9Vc2Vycy9hZG9tcmF0Y2hldi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy9Vc2Vycy9hZG9tcmF0Y2hldi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9RdWFnZ2EvL1VzZXJzL2Fkb21yYXRjaGV2L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL1F1YWdnYS8vVXNlcnMvYWRvbXJhdGNoZXYvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc3VwZXJQcm9wQmFzZS5qcyIsIndlYnBhY2s6Ly9RdWFnZ2EvL1VzZXJzL2Fkb21yYXRjaGV2L25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUtbW9kdWxlLmpzIiwid2VicGFjazovL1F1YWdnYS8vVXNlcnMvYWRvbXJhdGNoZXYvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9RdWFnZ2EvZXh0ZXJuYWwgXCJuZGFycmF5XCIiLCJ3ZWJwYWNrOi8vUXVhZ2dhL2V4dGVybmFsIFwiZ2V0LXBpeGVsc1wiIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9jb21tb24vaW1hZ2UtZGVidWcudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL2FuYWx5dGljcy9yZXN1bHQtY29sbGVjdG9yLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9jb21tb24vZXZlbnRzLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9jb21tb24vaHN2MnJnYi50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvY29tbW9uL2ltYWdlLXdyYXBwZXIudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL2NvbW1vbi9tZXJnZS50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvY29uZmlnL2NvbmZpZy5ub2RlLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9yZWFkZXIvYmFyY29kZS1yZWFkZXIudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL3JlYWRlci9jb2RlLTEyOC1yZWFkZXIudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL3JlYWRlci9jb2RlLTM5LXJlYWRlci50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvcmVhZGVyL2NvZGUtMzktdmluLXJlYWRlci50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvcmVhZGVyL2NvZGFiYXItcmVhZGVyLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9yZWFkZXIvZWFuLXJlYWRlci50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvZGVjb2Rlci9icmVzZW5oYW0udHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL3JlYWRlci9lYW4tOC1yZWFkZXIudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL3JlYWRlci9lYW4tMi1yZWFkZXIudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL3JlYWRlci9lYW4tNS1yZWFkZXIudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL3JlYWRlci91cGMtcmVhZGVyLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9yZWFkZXIvdXBjLWUtcmVhZGVyLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9yZWFkZXIvaTJvZjUtcmVhZGVyLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9yZWFkZXIvMm9mNS1yZWFkZXIudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL3JlYWRlci9jb2RlLTkzLXJlYWRlci50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvcmVhZGVyL2luZGV4LnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9pbnB1dC9jYW1lcmEtYWNjZXNzLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9kZWNvZGVyL2JhcmNvZGUtZGVjb2Rlci50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvY29tbW9uL21lZGlhLWRldmljZXMudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL2lucHV0L2ZyYW1lLWdyYWJiZXIubm9kZS50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvaW5wdXQvaW5wdXQtc3RyZWFtLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9pbnB1dC9pbWFnZS1zdHJlYW0ubm9kZS50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvaW5wdXQvdmlkZW8tc3RyZWFtLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9pbnB1dC9saXZlLXN0cmVhbS50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvaW5wdXQvaW5wdXQtc3RyZWFtLXV0aWxzLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9jb21tb24vY2x1c3Rlci50cyIsIndlYnBhY2s6Ly9RdWFnZ2EvLi9zcmMvbG9jYXRvci9iYXJjb2RlLWxvY2F0b3ItdXRpbHMudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL2xvY2F0b3IvdHJhY2VyLnRzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9sb2NhdG9yL3Jhc3Rlcml6ZXIudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL2xvY2F0b3Ivc2tlbGV0b25pemVyLmpzIiwid2VicGFjazovL1F1YWdnYS8uL3NyYy9xdWFnZ2EudHMiLCJ3ZWJwYWNrOi8vUXVhZ2dhLy4vc3JjL2xvY2F0b3IvYmFyY29kZS1sb2NhdG9yLnRzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJnbG9iYWwiLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18xOV9fIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMjBfXyIsImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJvYmoiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJsZW5ndGgiLCJkZXNjcmlwdG9yIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJpbnN0YW5jZSIsIlR5cGVFcnJvciIsIl9nZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwic2VsZiIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNvbnN0cnVjdG9yIiwiUmVmZXJlbmNlRXJyb3IiLCJzdXBlclByb3BCYXNlIiwiX2dldCIsInJlY2VpdmVyIiwiUmVmbGVjdCIsImJhc2UiLCJkZXNjIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3R5cGVvZjIiLCJpdGVyYXRvciIsImFycmF5V2l0aG91dEhvbGVzIiwiaXRlcmFibGVUb0FycmF5Iiwibm9uSXRlcmFibGVTcHJlYWQiLCJhcnIiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJhcmciLCJpbmZvIiwiZXJyb3IiLCJkb25lIiwiUHJvbWlzZSIsInRoZW4iLCJmbiIsInRoaXMiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJhcnIyIiwiaXRlciIsInRvU3RyaW5nIiwiZnJvbSIsIl9zZXRQcm90b3R5cGVPZiIsImciLCJGdW5jdGlvbiIsImhhZFJ1bnRpbWUiLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiaW5kZXhPZiIsIm9sZFJ1bnRpbWUiLCJlIiwiT3AiLCJoYXNPd24iLCIkU3ltYm9sIiwiaXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnU3ltYm9sIiwiaW5Nb2R1bGUiLCJydW50aW1lIiwid3JhcCIsIkdlblN0YXRlU3VzcGVuZGVkU3RhcnQiLCJHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkIiwiR2VuU3RhdGVFeGVjdXRpbmciLCJHZW5TdGF0ZUNvbXBsZXRlZCIsIkNvbnRpbnVlU2VudGluZWwiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldFByb3RvIiwiTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUiLCJ2YWx1ZXMiLCJHcCIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiR2VuZXJhdG9yIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJnZW5GdW4iLCJjdG9yIiwibWFyayIsImF3cmFwIiwiX19hd2FpdCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIkFzeW5jSXRlcmF0b3IiLCJhc3luYyIsImlubmVyRm4iLCJvdXRlckZuIiwidHJ5TG9jc0xpc3QiLCJuZXh0IiwicmVzdWx0Iiwia2V5cyIsInB1c2giLCJyZXZlcnNlIiwicG9wIiwiQ29udGV4dCIsInJlc2V0Iiwic2tpcFRlbXBSZXNldCIsInByZXYiLCJzZW50IiwiX3NlbnQiLCJkZWxlZ2F0ZSIsIm1ldGhvZCIsInRyeUVudHJpZXMiLCJmb3JFYWNoIiwicmVzZXRUcnlFbnRyeSIsImNoYXJBdCIsImlzTmFOIiwic2xpY2UiLCJzdG9wIiwicm9vdFJlY29yZCIsImNvbXBsZXRpb24iLCJ0eXBlIiwicnZhbCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiZXhjZXB0aW9uIiwiY29udGV4dCIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsInJlY29yZCIsImVudHJ5IiwidHJ5TG9jIiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiRXJyb3IiLCJhYnJ1cHQiLCJmaW5hbGx5RW50cnkiLCJjb21wbGV0ZSIsImFmdGVyTG9jIiwiZmluaXNoIiwiY2F0Y2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwiaXRlcmFibGUiLCJyZXN1bHROYW1lIiwibmV4dExvYyIsInByb3RvR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiX2ludm9rZSIsInN0YXRlIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlUmVzdWx0IiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInRyeUNhdGNoIiwibWFrZUludm9rZU1ldGhvZCIsInByZXZpb3VzUHJvbWlzZSIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiaW52b2tlIiwidW53cmFwcGVkIiwicmV0dXJuIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsIml0ZXJhdG9yTWV0aG9kIiwiSW1hZ2VEZWJ1ZyIsImRyYXdQYXRoIiwicGF0aCIsImNvbG9yIiwibGluZVdpZHRoIiwic3Ryb2tlU3R5bGUiLCJmaWxsU3R5bGUiLCJiZWdpblBhdGgiLCJtb3ZlVG8iLCJ4IiwieSIsIl9yZWYiLCJsaW5lVG8iLCJjbG9zZVBhdGgiLCJzdHJva2UiLCJkcmF3SW1hZ2UiLCJpbWFnZURhdGEiLCJ3aWR0aCIsImhlaWdodCIsImNhbnZhc0RhdGEiLCJnZXRJbWFnZURhdGEiLCJkYXRhIiwiaW1hZ2VJbmRleCIsImNhbnZhc0luZGV4IiwicHV0SW1hZ2VEYXRhIiwiUmVzdWx0Q29sbGVjdG9yIiwiY29uZmlnIiwiY2xhc3NDYWxsQ2hlY2tfZGVmYXVsdCIsImRlZmluZVByb3BlcnR5X2RlZmF1bHQiLCJfcmVzdWx0cyIsIl9jb25maWciLCJfY2FwYWNpdHkiLCJjYXBhY2l0eSIsIl9jYXB0dXJlIiwiY2FwdHVyZSIsIl9jYW52YXMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJfY29udGV4dCIsImdldENvbnRleHQiLCJjcmVhdGVDbGFzc19kZWZhdWx0IiwiaW1hZ2VXaWR0aCIsImltYWdlSGVpZ2h0IiwiY29kZVJlc3VsdCIsIl9jb250YWlucyIsIl9wYXNzZXNGaWx0ZXIiLCJmcmFtZSIsInRvRGF0YVVSTCIsImJsYWNrbGlzdCIsInNvbWUiLCJpdGVtIiwiZXZlcnkiLCJmaWx0ZXIiLCJldmVudHMiLCJFdmVudHMiLCJldmVudCIsImNhbGxiYWNrIiwic3Vic2NyaXB0aW9uIiwiZ2V0RXZlbnQiLCJzdWJzY3JpcHRpb25zIiwiZXZlbnRJdGVtIiwib25jZSIsInB1Ymxpc2hTdWJzY3JpcHRpb24iLCJfcmVmMiIsInN1YnNjcmliZSIsImV2ZW50TmFtZSIsInNldFRpbWVvdXQiLCJoc3YycmdiIiwiaHN2IiwicmdiIiwiaCIsInYiLCJNYXRoIiwiYWJzIiwiYiIsIkltYWdlV3JhcHBlciIsInNpemUiLCJhcnJheVR5cGUiLCJpbml0aWFsaXplIiwiVWludDhBcnJheSIsImZpbGwiLCJwb2ludCIsImJvcmRlciIsImltYWdlV3JhcHBlciIsImZyb21YIiwiZnJvbVkiLCJzaXplWSIsInNpemVYIiwibGFiZWxDb3VudCIsImxhYmVsU3VtIiwibTAwIiwibTAxIiwibTEwIiwibTExIiwibTAyIiwibTIwIiwidGhldGEiLCJyYWQiLCJ5c3EiLCJ2YWwiLCJsYWJlbCIsIlBJIiwiUElfNCIsInhfIiwieV8iLCJtdTExIiwibXUwMiIsIm11MjAiLCJ0bXAiLCJhdGFuIiwiY29zIiwic2luIiwic2NhbGUiLCJjdXJyZW50IiwicGl4ZWwiLCJ3aGl0ZVJnYiIsImJsYWNrUmdiIiwibWVyZ2UiLCJpc09iamVjdCIsInR5cGVvZl9kZWZhdWx0IiwiX2xlbiIsIm9iamVjdHMiLCJfa2V5IiwicmVkdWNlIiwicFZhbCIsIm9WYWwiLCJCYXJjb2RlRGlyZWN0aW9uIiwiaW5wdXRTdHJlYW0iLCJzZXF1ZW5jZSIsImFyZWEiLCJ0b3AiLCJyaWdodCIsImxlZnQiLCJib3R0b20iLCJzaW5nbGVDaGFubmVsIiwibG9jYXRlIiwibnVtT2ZXb3JrZXJzIiwiZGVjb2RlciIsInJlYWRlcnMiLCJsb2NhdG9yIiwiaGFsZlNhbXBsZSIsInBhdGNoU2l6ZSIsIkJhcmNvZGVSZWFkZXIiLCJzdXBwbGVtZW50cyIsIl9mb3JtYXQiLCJfcm93IiwiX3NpbmdsZUNvZGVFcnJvciIsIl9hdmVyYWdlQ29kZUVycm9yIiwiU3RhcnROb3RGb3VuZEV4Y2VwdGlvbiIsIkNvZGVOb3RGb3VuZEV4Y2VwdGlvbiIsIlBhdHRlcm5Ob3RGb3VuZEV4Y2VwdGlvbiIsInBhdHRlcm4iLCJvZmZzZXQiLCJpc1doaXRlIiwidHJ5SGFyZGVyIiwiY291bnRlciIsImJlc3RNYXRjaCIsIk51bWJlciIsIk1BWF9WQUxVRSIsImNvZGUiLCJzdGFydCIsImVuZCIsImVwc2lsb24iLCJBVkVSQUdFX0NPREVfRVJST1IiLCJjb3VudGVyUG9zIiwiX25leHRTZXQiLCJfbWF0Y2hQYXR0ZXJuIiwic3VtIiwiaiIsImxpbmUiLCJtYXhTaW5nbGVFcnJvciIsIm1vZHVsbyIsIlNJTkdMRV9DT0RFX0VSUk9SIiwiYmFyV2lkdGgiLCJjb3VudCIsInNjYWxlZCIsInNpbmdsZUVycm9yIiwiY29ycmVjdGlvbiIsImluZGljZXMiLCJkZWNvZGUiLCJkaXJlY3Rpb24iLCJSZXZlcnNlIiwiRm9yd2FyZCIsImZvcm1hdCIsIkZPUk1BVCIsImNvdW50ZXJzIiwibnVtQ291bnRlcnMiLCJDT0RFX1BBVFRFUk4iLCJNT0RVTEVfSU5ESUNFUyIsIkNvZGUxMjhSZWFkZXIiLCJfQmFyY29kZVJlYWRlciIsIl90aGlzIiwicG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9kZWZhdWx0IiwiZ2V0UHJvdG90eXBlT2ZfZGVmYXVsdCIsImluaGVyaXRzX2RlZmF1bHQiLCJiYXIiLCJzcGFjZSIsIl9jb3JyZWN0IiwiZXhwZWN0ZWQiLCJfY2FsY3VsYXRlQ29ycmVjdGlvbiIsIl9jb3JyZWN0QmFycyIsImNvZGVzZXQiLCJ1bnNoaWZ0Iiwic3RhcnRJbmZvIiwiX2ZpbmRTdGFydCIsIm11bHRpcGxpZXIiLCJjaGVja3N1bSIsInJhd1Jlc3VsdCIsImRlY29kZWRDb2RlcyIsInNoaWZ0TmV4dCIsInJlbW92ZUxhc3RDaGFyYWN0ZXIiLCJfZGVjb2RlQ29kZSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIl9uZXh0VW5zZXQiLCJfdmVyaWZ5VHJhaWxpbmdXaGl0ZXNwYWNlIiwic3BsaWNlIiwiam9pbiIsImVuZEluZm8iLCJ0cmFpbGluZ1doaXRlc3BhY2VFbmQiLCJfbWF0Y2hSYW5nZSIsIm5vcm1hbGl6ZWQiLCJzdW1Ob3JtYWxpemVkIiwic3VtRXhwZWN0ZWQiLCJBTFBIQUJFVCIsIlVpbnQxNkFycmF5IiwidG9Db25zdW1hYmxlQXJyYXlfZGVmYXVsdCIsIm1hcCIsImNoYXIiLCJjaGFyQ29kZUF0IiwiQ0hBUkFDVEVSX0VOQ09ESU5HUyIsIkNvZGUzOVJlYWRlciIsImRlY29kZWRDaGFyIiwibGFzdFN0YXJ0IiwibmV4dFN0YXJ0IiwiX3RvQ291bnRlcnMiLCJfdG9QYXR0ZXJuIiwiX3BhdHRlcm5Ub0NoYXIiLCJwYXR0ZXJuU2l6ZSIsIm1pbldpZHRoIiwibWF4TmFycm93V2lkdGgiLCJudW1XaWRlQmFycyIsIndpZGVCYXJXaWR0aCIsIl9maW5kTmV4dFdpZHRoIiwid2hpdGVTcGFjZU11c3RTdGFydCIsInBhdHRlcm5TdGFydCIsIm1heCIsIkNvZGUzOVZJTlJlYWRlciIsIl9Db2RlMzlSZWFkZXIiLCJnZXRfZGVmYXVsdCIsInJlcGxhY2UiLCJ0ZXN0IiwiX2NoZWNrQ2hlY2tzdW0iLCJTVEFSVF9FTkQiLCJDb2RhYmFyUmVhZGVyIiwiYXNzZXJ0VGhpc0luaXRpYWxpemVkX2RlZmF1bHQiLCJfY291bnRlcnMiLCJfZmlsbENvdW50ZXJzIiwic3RhcnRDb3VudGVyIiwiX3ZlcmlmeVdoaXRlc3BhY2UiLCJfdmFsaWRhdGVSZXN1bHQiLCJfc3VtQ291bnRlcnMiLCJlbmRDb3VudGVyIiwiX2NhbGN1bGF0ZVBhdHRlcm5MZW5ndGgiLCJjYXRlZ29yaXphdGlvbiIsIm5hcnJvdyIsImNvdW50cyIsIm1pbiIsIndpZGUiLCJwb3MiLCJfY2hhclRvUGF0dGVybiIsImtpbmQiLCJjYXQiLCJmbG9vciIsImNlaWwiLCJjaGFyQ29kZSIsInRocmVzaG9sZCIsIl90aHJlc2hvbGRSZXN1bHRQYXR0ZXJuIiwiYmFyVGhyZXNob2xkIiwiX2NvbXB1dGVBbHRlcm5hdGluZ1RocmVzaG9sZCIsInNwYWNlVGhyZXNob2xkIiwiYml0bWFzayIsIl90aGlzMiIsIl9sb29wIiwiX3JldCIsIlNsb3BlIiwiRVhURU5TSU9OX1NUQVJUX1BBVFRFUk4iLCJDT0RFX0ZSRVFVRU5DWSIsIkVBTlJlYWRlciIsImNvZGVyYW5nZSIsIl9maW5kUGF0dGVybiIsIlNUQVJUX1BBVFRFUk4iLCJsZWFkaW5nV2hpdGVzcGFjZVN0YXJ0IiwiU1RPUF9QQVRURVJOIiwiY29kZUZyZXF1ZW5jeSIsIkNPREVfR19TVEFSVCIsImZpcnN0RGlnaXQiLCJfY2FsY3VsYXRlRmlyc3REaWdpdCIsIk1JRERMRV9QQVRURVJOIiwicmVzdWx0SW5mbyIsIl9kZWNvZGVQYXlsb2FkIiwiX2ZpbmRFbmQiLCJfY2hlY2tzdW0iLCJzdXBwbGVtZW50IiwiX2RlY29kZUV4dGVuc2lvbnMiLCJsYXN0Q29kZSIsIl9vYmplY3RTcHJlYWQiLCJFQU44UmVhZGVyIiwiX0VBTlJlYWRlciIsIkVBTjJSZWFkZXIiLCJyb3ciLCJwYXJzZUludCIsIkVBTjVSZWFkZXIiLCJfZXh0ZW5zaW9uQ2hlY2tzdW0iLCJfZGV0ZXJtaW5lQ2hlY2tEaWdpdCIsIkNIRUNLX0RJR0lUX0VOQ09ESU5HUyIsIlVQQ1JlYWRlciIsInN1YnN0cmluZyIsIlVQQ0VSZWFkZXIiLCJfZGV0ZXJtaW5lUGFyaXR5IiwibnJTeXN0ZW0iLCJsYXN0RGlnaXQiLCJ1cGNhIiwiY29uY2F0IiwiX2NvbnZlcnRUb1VQQ0EiLCJJMm9mNVJlYWRlciIsIm5vcm1hbGl6ZUJhclNwYWNlV2lkdGgiLCJfYmFyU3BhY2VSYXRpbyIsImNvdW50ZXJTdW0iLCJjb2RlU3VtIiwibmFycm93QmFyV2lkdGgiLCJjb2RlMCIsImNvZGUxIiwiY291bnRlckxlbmd0aCIsImNvdW50ZXIwIiwiY291bnRlcjEiLCJzdGFydFBhdHRlcm5MZW5ndGgiLCJUd29PZkZpdmVSZWFkZXIiLCJSZWFkZXJzIiwiY29kZV8xMjhfcmVhZGVyIiwiZWFuX3JlYWRlciIsImVhbl81X3JlYWRlciIsImVhbl8yX3JlYWRlciIsImVhbl84X3JlYWRlciIsImNvZGVfMzlfcmVhZGVyIiwiY29kZV8zOV92aW5fcmVhZGVyIiwiY29kYWJhcl9yZWFkZXIiLCJ1cGNfcmVhZGVyIiwidXBjX2VfcmVhZGVyIiwiaTJvZjVfcmVhZGVyIiwiMm9mNV9yZWFkZXIiLCJjb2RlXzkzX3JlYWRlciIsIkNvZGU5M1JlYWRlciIsIl92ZXJpZnlFbmQiLCJfdmVyaWZ5Q2hlY2tzdW1zIiwiX2RlY29kZUV4dGVuZGVkIiwicm91bmQiLCJjaGFyQXJyYXkiLCJuZXh0Q2hhciIsIm5leHRDaGFyQ29kZSIsIl9tYXRjaENoZWNrQ2hhciIsImluZGV4IiwibWF4V2VpZ2h0IiwiYXJyYXlUb0NoZWNrIiwid2VpZ2h0ZWRTdW1zIiwiX3N0cmVhbSIsIkJyZXNlbmhhbSIsInAxIiwicDIiLCJ4MCIsInkwIiwieDEiLCJ5MSIsInN0ZWVwIiwicmVhZCIsImEiLCJkZWx0YXgiLCJkZWx0YXkiLCJ5c3RlcCIsImNlbnRlciIsImV4dHJlbWEiLCJyVGhyZXNob2xkIiwiY3VycmVudERpciIsIlVwIiwiRG93biIsInNsb3BlIiwic2xvcGUyIiwiZGlyIiwiYnJlc2VuaGFtX29iamVjdFNwcmVhZCIsIkJhcmNvZGVEZWNvZGVyIiwiaW5wdXRJbWFnZVdyYXBwZXIiLCJfaW5wdXRJbWFnZVdyYXBwZXIiLCJfYmFyY29kZVJlYWRlcnMiLCJfaW5pdFJlYWRlcnMiLCJib3hlcyIsImJhcmNvZGUiLCJtdWx0aXBsZSIsImJhcmNvZGVzIiwiYm94IiwiZGVjb2RlRnJvbUJvdW5kaW5nQm94IiwiX2dldExpbmUiLCJhbmdsZSIsImF0YW4yIiwiX2dldEV4dGVuZGVkTGluZSIsIl90cnlEZWNvZGUiLCJfdHJ5RGVjb2RlQnJ1dGVGb3JjZSIsImJhcmNvZGVMaW5lIiwicmVhZGVyQ29uZmlnIiwicmVhZGVyIiwiY29uZmlndXJhdGlvbiIsImV4dGVuZExpbmUiLCJhbW91bnQiLCJleHRlbnNpb24iLCJleHRlbnNpb25MZW5ndGgiLCJzcXJ0IiwicG93IiwiaW5JbWFnZVdpdGhCb3JkZXIiLCJkZWNvZGVQYXR0ZXJuIiwibGluZUFuZ2xlIiwic2lkZUxlbmd0aCIsInhkaXIiLCJ5ZGlyIiwiX2ZyZXF1ZW5jeUNhbnZhcyIsIl9wYXR0ZXJuQ2FudmFzIiwiZmlsbFJlY3QiLCJfb3ZlcmxheUNvbnRleHQiLCJfZW51bWVyYXRlVmlkZW9EZXZpY2VzIiwiX3JlcXVlc3QiLCJDYW1lcmFBY2Nlc3MiLCJyZXF1ZXN0IiwiYXN5bmNUb0dlbmVyYXRvcl9kZWZhdWx0IiwicmVnZW5lcmF0b3JfZGVmYXVsdCIsIl9jYWxsZWUiLCJ2aWRlbyIsInZpZGVvQ29uc3RyYWludHMiLCJub3JtYWxpemVkQ29uc3RyYWludHMiLCJwaWNrQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsIm5hdmlnYXRvciIsIm1lZGlhRGV2aWNlcyIsImdldFVzZXJNZWRpYSIsInNyY09iamVjdCIsInNldEF0dHJpYnV0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJwbGF5IiwiX3dhaXRGb3JWaWRlbyIsIl94IiwiX3gyIiwicmVsZWFzZSIsInRyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwiZW51bWVyYXRlVmlkZW9EZXZpY2VzIiwiX2NhbGxlZTIiLCJkZXZpY2VzIiwiX2NvbnRleHQyIiwiZW51bWVyYXRlRGV2aWNlcyIsImdldEFjdGl2ZVN0cmVhbUxhYmVsIiwidHJhY2siLCJnZXRBY3RpdmVUcmFjayIsImZhY2luZ01vZGUiLCJhc3BlY3RSYXRpbyIsImRldmljZUlkIiwibWluQXNwZWN0UmF0aW8iLCJmYWNpbmciLCJjb25zb2xlIiwibG9nIiwiYXVkaW8iLCJfcmVmMyIsInZpZGVvV2lkdGgiLCJ2aWRlb0hlaWdodCIsImF0dGVtcHRzIiwiY2hlY2tWaWRlbyIsIndpbmRvdyIsIm5kYXJyYXkiLCJGcmFtZUdyYWJiZXIiLCJfaW5wdXRTdHJlYW0iLCJfc3RyZWFtQ29uZmlnIiwiX3ZpZGVvSGVpZ2h0IiwicmVhbEhlaWdodCIsIl92aWRlb1dpZHRoIiwicmVhbFdpZHRoIiwiX2NhbnZhc0hlaWdodCIsImNhbnZhc0hlaWdodCIsIl9jYW52YXNXaWR0aCIsImNhbnZhc1dpZHRoIiwiX3dpZHRoIiwiX2hlaWdodCIsIl90b3BMZWZ0IiwidG9wTGVmdCIsIl9kYXRhIiwiX2dyYXlEYXRhIiwiX2NhbnZhc0RhdGEiLCJfZ3JheUltYWdlQXJyYXkiLCJ0cmFuc3Bvc2UiLCJfY2FudmFzSW1hZ2VBcnJheSIsIl90YXJnZXRJbWFnZUFycmF5IiwiaGkiLCJsbyIsIl9zdGVwU2l6ZVgiLCJfc3RlcFNpemVZIiwiSlNPTiIsInN0cmluZ2lmeSIsInZpZGVvU2l6ZSIsInNoYXBlIiwiY2FudmFzU2l6ZSIsInN0ZXBTaXplIiwiZ2V0RnJhbWUiLCJfc2NhbGVBbmRDcm9wIiwiX2NvbXB1dGVHcmF5Iiwic2V0IiwiaW50ZXJwMmQiLCJpbWFnZURhdGFMZW5ndGgiLCJpeCIsImZ4IiwiczAiLCJzMSIsIml5IiwiZnkiLCJ0MCIsInQxIiwidzAwIiwidzAxIiwiSW5wdXRTdHJlYW0iLCJfZXZlbnROYW1lcyIsIl9ldmVudEhhbmRsZXJzIiwiTWFwIiwibGlzdGVuZXIiLCJfb3B0aW9ucyIsImhhcyIsImNsZWFyIiwiYXJnQXJyYXkiLCJoYW5kbGVycyIsImhhbmRsZXIiLCJfY2FsY3VsYXRlZEhlaWdodCIsIl9jYWxjdWxhdGVkV2lkdGgiLCJpbnB1dF9zdHJlYW1fb2JqZWN0U3ByZWFkIiwiZ2V0UGl4ZWxzIiwiSW1hZ2VTdHJlYW0iLCJfSW5wdXRTdHJlYW0iLCJfYmFzZVVybCIsIl9lbmRlZCIsIl9mcmFtZSIsIl9sb2FkZWQiLCJfb2Zmc2V0IiwiX3NpemUiLCJtaW1lIiwicGl4ZWxzIiwicHJvY2VzcyIsImV4aXQiLCJ0cmlnZ2VyIiwiaW1hZ2Vfc3RyZWFtX25vZGVfb2JqZWN0U3ByZWFkIiwic3JjIiwiX2xvYWRJbWFnZXMiLCJfdGltZSIsIlZpZGVvU3RyZWFtIiwiX3ZpZGVvIiwicGF1c2UiLCJvcHRpb25zIiwiX2luaXRTaXplIiwidmlkZW9fc3RyZWFtX29iamVjdFNwcmVhZCIsImVuZGVkIiwidGltZSIsImN1cnJlbnRUaW1lIiwiTGl2ZVN0cmVhbSIsIl9WaWRlb1N0cmVhbSIsIl9jb21wdXRlRGl2aXNvcnMiLCJkaXZpc29ycyIsImxhcmdlRGl2aXNvcnMiLCJkaXZpc29yIiwiY2FsY3VsYXRlUGF0Y2hTaXplIiwid2lkZVNpZGUiLCJuck9mUGF0Y2hlc0xpc3QiLCJuck9mUGF0Y2hlc01hcCIsIngtc21hbGwiLCJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwieC1sYXJnZSIsIm5yT2ZQYXRjaGVzSW5kZXgiLCJuck9mUGF0Y2hlcyIsImRlc2lyZWRQYXRjaFNpemUiLCJmaW5kUGF0Y2hTaXplRm9yRGl2aXNvcnMiLCJmb3VuZCIsImxhcmdlRGl2aXNvciIsIl9jb21wdXRlQ29tbW9uRGl2aXNvcnMiLCJjaGVja0ltYWdlQ29uc3RyYWludHMiLCJzaGlmdCIsImlucHV0U3RyZWFtQ29uZmlnIiwiaW5wdXRXaWR0aCIsImlucHV0SGVpZ2h0IiwicGFyc2VkQXJlYSIsInBhcnNlZCIsInBhcnNlRmxvYXQiLCJ1bml0IiwiX3BhcnNlQ3NzRGltZW5zaW9uVmFsdWVzIiwiY2FsY3VsYXRlZCIsIl9kaW1lbnNpb25zQ29udmVydGVycyIsImNvbXB1dGVJbWFnZUFyZWEiLCJzZXRDYW52YXNTaXplIiwiZGltZW5zaW9uIiwiX3JlZjQiLCJfcmVmNSIsIkNsdXN0ZXIiLCJtb21lbnQiLCJfdGhyZXNob2xkIiwiX21vbWVudHMiLCJfY2VudGVyIiwiYWRkIiwibW9tZW50cyIsImNsdXN0ZXJzIiwibWF0Y2hpbmdDbHVzdGVyIiwiZmluZCIsImNsdXN0ZXIiLCJmaXRzIiwidHJhbnNmb3JtV2l0aE1hdHJpeCIsIm1hdHJpeCIsIl9kZXRlcm1pbmVPdHN1VGhyZXNob2xkIiwiYml0c1BlclBpeGVsIiwiYml0U2hpZnQiLCJoaXN0IiwiaGlzdG9ncmFtIiwiSW50MzJBcnJheSIsIl9jb21wdXRlSGlzdG9ncmFtIiwidmV0IiwicHgiLCJpbml0IiwibXgiLCJrIiwicDEyIiwibTEyIiwibWF4SW5kZXgiLCJhcnJheSIsIkVkZ2VMYWJlbCIsIkNvbnRvdXJEaXJlY3Rpb24iLCJTZWFyY2hEaXJlY3Rpb25zIiwiVHJhY2VyIiwibGFiZWxXcmFwcGVyIiwiX2ltYWdlRGF0YSIsIl9sYWJlbERhdGEiLCJlZGdlTGFiZWwiLCJjeSIsImN4Iiwic3kiLCJzeCIsIkZ2IiwidHJhY2UiLCJDdiIsImxkaXIiLCJQIiwiUmFzdGVyaXplciIsIl90cmFjZXIiLCJkZXB0aExhYmVsIiwiY29sb3JNYXAiLCJzYyIsImNjIiwiY29ubmVjdGVkQ291bnQiLCJsYWJlbEluZGV4IiwiYmMiLCJsYyIsInZlcnRleCIsImNvbnRvdXJUcmFjaW5nIiwiT3V0c2lkZSIsIkNXIiwiZmlyc3RWZXJ0ZXgiLCJuZXh0UGVlciIsImluc2lkZUNvbnRvdXJzIiwicHJldmlvdXNQZWVyIiwiSW5zaWRlIiwiQ0NXIiwiY2FudmFzIiwiZmlyc3RDb250b3VyIiwicHEiLCJpcSIsInEiLCJVbmtub3duIiwiU2tlbGV0b25pemVyIiwiX2ZyYW1lR3JhYmJlciIsIl9zdG9wcGVkIiwiX2xvY2F0b3IiLCJfYm94U2l6ZSIsIl9kZWNvZGVyIiwiX29uVUlUaHJlYWQiLCJfcmVzdWx0Q29sbGVjdG9yIiwic3RkbGliIiwiZm9yZWlnbiIsImJ1ZmZlciIsImltYWdlcyIsImltdWwiLCJlcm9kZSIsImluSW1hZ2VQdHIiLCJvdXRJbWFnZVB0ciIsInUiLCJ5U3RhcnQxIiwieVN0YXJ0MiIsInhTdGFydDEiLCJ4U3RhcnQyIiwic3VidHJhY3QiLCJhSW1hZ2VQdHIiLCJiSW1hZ2VQdHIiLCJiaXR3aXNlT3IiLCJjb3VudE5vblplcm8iLCJpbWFnZVB0ciIsImRpbGF0ZSIsIm1lbWNweSIsInNyY0ltYWdlUHRyIiwiZHN0SW1hZ2VQdHIiLCJ6ZXJvQm9yZGVyIiwic2tlbGV0b25pemUiLCJzdWJJbWFnZVB0ciIsImVyb2RlZEltYWdlUHRyIiwidGVtcEltYWdlUHRyIiwic2tlbEltYWdlUHRyIiwiQmFyY29kZUxvY2F0b3IiLCJfbnVtUGF0Y2hlcyIsIl9pbml0QnVmZmVycyIsIl9pbml0Q2FudmFzIiwib3V0SW1hZ2VXcmFwcGVyIiwiaW1hZ2UiLCJvdXRJbWFnZSIsImVuZEluZGV4Iiwib3V0V2lkdGgiLCJ0b3BSb3dJbmRleCIsImJvdHRvbVJvd0luZGV4Iiwib3V0SW1nSW5kZXgiLCJfY3VycmVudEltYWdlV3JhcHBlciIsIl9iaW5hcml6ZUltYWdlIiwicGF0Y2hlc0ZvdW5kIiwiX2ZpbmRQYXRjaGVzIiwibWF4TGFiZWwiLCJfcmFzdGVyaXplQW5ndWxhclNpbWlsYXJpdHkiLCJ0b3BMYWJlbHMiLCJfZmluZEJpZ2dlc3RDb25uZWN0ZWRBcmVhcyIsIl9maW5kQm94ZXMiLCJfcGF0Y2hTaXplIiwiX2JpbmFyeUltYWdlV3JhcHBlciIsIl9sYWJlbEltYWdlV3JhcHBlciIsInNrZWxldG9uSW1hZ2VEYXRhIiwiQXJyYXlCdWZmZXIiLCJfc3ViSW1hZ2VXcmFwcGVyIiwiX3NrZWxJbWFnZVdyYXBwZXIiLCJfc2tlbGV0b25pemVyIiwic2tlbGV0b25pemVyIiwiX3BhdGNoTGFiZWxHcmlkIiwiX3BhdGNoR3JpZCIsIl9pbWFnZVRvUGF0Y2hHcmlkIiwidXNlV29ya2VyIiwiY2xhc3NOYW1lIiwiX2JpbmFyeUNvbnRleHQiLCJwYXRjaGVzIiwiYXZlcmFnZVJhZCIsIkZsb2F0MzJBcnJheSIsImludmVyc2VNYXRyaXgiLCJhMCIsImExIiwiYTIiLCJhMyIsImRldGVybWluYW50IiwiaW52ZXJ0IiwibWluWCIsIm1pblkiLCJtYXhYIiwibWF4WSIsInRhcmdldFdyYXBwZXIiLCJ0YXJnZXREYXRhIiwiX3NrZWxldG9uaXplIiwicmFzdGVyUmVzdWx0IiwicmFzdGVyaXplIiwicGF0Y2giLCJfZGVzY3JpYmVQYXRjaCIsImxhYmVsSGlzdCIsIl9yZWY2Iiwic29ydCIsIl9yZWY3IiwiX2JveEZyb21QYXRjaGVzIiwiY2x1c3Rlcml6ZSIsInN1YkltYWdlQXNDb3B5IiwibWluQ29tcG9uZW50V2VpZ2h0IiwiZWxpZ2libGVNb21lbnRzIiwibWF0Y2hpbmdNb21lbnRzIiwiX3NpbWlsYXJNb21lbnRzIiwiY3VycmVudEluZGV4IiwiX3RoaXMzIiwiY3VycmVudFBhdGNoIiwiX3RyYWNlIiwiX3RoaXM0IiwiX25vdFlldFByb2Nlc3NlZCIsIl9yZWY5Iiwic3Ryb2tlUmVjdCIsIl9jYW52YXNDb250YWluZXIiLCJjdHgiLCJvdmVybGF5IiwiZG9tIiwiX3dvcmtlclBvb2wiLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwiY2IiLCJkZWZhdWx0Q29uZmlnIiwiX2luaXRpYWxpemVEYXRhIiwidmlld3BvcnQiLCJfZ2V0Vmlld1BvcnQiLCJxdWVyeVNlbGVjdG9yIiwiYXBwZW5kQ2hpbGQiLCJjbGVhckZpeCIsIl9hZGp1c3RXb3JrZXJQb29sIiwiX2luaXRJbnB1dFN0cmVhbSIsImRlbGF5IiwiZnJlcXVlbmN5IiwidGltZXN0YW1wIiwiX3VwZGF0ZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInBlcmZvcm1hbmNlIiwibm93IiwiY2xlYXJFdmVudEhhbmRsZXJzIiwiZGVjb2RlU2luZ2xlIiwicmVzdWx0Q2FsbGJhY2siLCJvbkRldGVjdGVkIiwib2ZmRGV0ZWN0ZWQiLCJ1bnN1YnNjcmliZSIsIm9uUHJvY2Vzc2VkIiwib2ZmUHJvY2Vzc2VkIiwic2V0UmVhZGVycyIsIndvcmtlciIsInBvc3RNZXNzYWdlIiwiY21kIiwicmVnaXN0ZXJSZXN1bHRDb2xsZWN0b3IiLCJyZXN1bHRDb2xsZWN0b3IiLCJhZGRSZXN1bHQiLCJIVE1MRWxlbWVudCIsInNlbGVjdG9yIiwiX3RyYW5zZm9ybSIsInBvbHlnb24iLCJfcHVibGlzaFJlc3VsdCIsInJlc3VsdFRvUHVibGlzaCIsIl90cmFuc2Zvcm1SZXN1bHQiLCJfYWRkUmVzdWx0IiwicHVibGlzaCIsIl9oYXNDb2RlUmVzdWx0IiwiX2xvY2F0ZUFuZERlY29kZSIsImRlY29kZUZyb21Cb3VuZGluZ0JveGVzIiwiYXZhaWxhYmxlV29ya2VyIiwiYnVzeSIsImdyYWIiLCJfaW5pdFdvcmtlciIsImZhY3RvcnlTb3VyY2UiLCJibG9iIiwiYmxvYlVSTCIsIl9fZmFjdG9yeVNvdXJjZV9fIiwiQmxvYiIsIl93b3JrZXJJbnRlcmZhY2UiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJ3b3JrZXJUaHJlYWQiLCJXb3JrZXIiLCJvbm1lc3NhZ2UiLCJyZXZva2VPYmplY3RVUkwiLCJRdWFnZ2EiLCJtZXNzYWdlIiwiaW5jcmVhc2VCeSIsInRlcm1pbmF0ZSJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBQUEsRUFBQUMsR0FDQSxpQkFBQUMsU0FBQSxpQkFBQUMsT0FDQUEsT0FBQUQs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LEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNoQixDQUFDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBRWpCQyxFQUF3QixDQUFDLEVBQUcsRUFBRyxHQUEvQkEsRUFBMEMsQ0FBQyxFQUFHLEVBQUcsR0FFMUNDLEVBQWIsU0FBQUMsR0FDSSxTQUFBRCxJQUFjLElBQUFFLEVBQUEsT0FBQXBLLElBQUF2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b2RlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibmRhcnJheVwiKSwgcmVxdWlyZShcImdldC1waXhlbHNcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJRdWFnZ2FcIiwgW1wibmRhcnJheVwiLCBcImdldC1waXhlbHNcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUXVhZ2dhXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibmRhcnJheVwiKSwgcmVxdWlyZShcImdldC1waXhlbHNcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlF1YWdnYVwiXSA9IGZhY3Rvcnkocm9vdFtcIm5kYXJyYXlcIl0sIHJvb3RbXCJnZXQtcGl4ZWxzXCJdKTtcbn0pKGdsb2JhbCwgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMTlfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMjBfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMjEpO1xuIiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZDsiLCJ2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9nZXRQcm90b3R5cGVPZlwiKTtcblxudmFyIHN1cGVyUHJvcEJhc2UgPSByZXF1aXJlKFwiLi9zdXBlclByb3BCYXNlXCIpO1xuXG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX2dldCA9IFJlZmxlY3QuZ2V0O1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgIHZhciBiYXNlID0gc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcblxuICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldDsiLCJmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YyKFN5bWJvbC5pdGVyYXRvcikgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWRcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXk7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZVwiKTtcbiIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yOyIsImZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXk7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsInZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL2dldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7XG4gIHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3N1cGVyUHJvcEJhc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4vLyBUaGlzIG1ldGhvZCBvZiBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgbmVlZHMgdG8gYmVcbi8vIGtlcHQgaWRlbnRpY2FsIHRvIHRoZSB3YXkgaXQgaXMgb2J0YWluZWQgaW4gcnVudGltZS5qc1xudmFyIGcgPSAoZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzIHx8ICh0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiAmJiBzZWxmKTtcbn0pKCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXG4vLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcbi8vIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIGdsb2JhbCBgc2VsZmAgb2JqZWN0IGluIGEgd29ya2VyLiBTZWUgIzE4My5cbnZhciBoYWRSdW50aW1lID0gZy5yZWdlbmVyYXRvclJ1bnRpbWUgJiZcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG4vLyBTYXZlIHRoZSBvbGQgcmVnZW5lcmF0b3JSdW50aW1lIGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuXG52YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cbi8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cbmcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3J1bnRpbWVcIik7XG5cbmlmIChoYWRSdW50aW1lKSB7XG4gIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG4gIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbn0gZWxzZSB7XG4gIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG4gIHRyeSB7XG4gICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICB9IGNhdGNoKGUpIHtcbiAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gSW4gc2xvcHB5IG1vZGUsIHVuYm91bmQgYHRoaXNgIHJlZmVycyB0byB0aGUgZ2xvYmFsIG9iamVjdCwgZmFsbGJhY2sgdG9cbiAgLy8gRnVuY3Rpb24gY29uc3RydWN0b3IgaWYgd2UncmUgaW4gZ2xvYmFsIHN0cmljdCBtb2RlLiBUaGF0IGlzIHNhZGx5IGEgZm9ybVxuICAvLyBvZiBpbmRpcmVjdCBldmFsIHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5LlxuICAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMgfHwgKHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiICYmIHNlbGYpO1xuICB9KSgpIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKVxuKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMTlfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzIwX187IiwiaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50JztcblxuZXhwb3J0IGNvbnN0IEltYWdlRGVidWcgPSB7XG4gICAgZHJhd1BhdGgocGF0aDogQXJyYXk8UG9pbnQ+LCBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGNvbG9yOiBzdHJpbmcsIGxpbmVXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHBhdGhbMF0ueCwgcGF0aFswXS55KTtcbiAgICAgICAgICAgIHBhdGguc2xpY2UoMSkuZm9yRWFjaCgoeyB4LCB5IH0pID0+IGNvbnRleHQubGluZVRvKHgsIHkpKTtcbiAgICAgICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGRyYXdJbWFnZShpbWFnZURhdGE6IFVpbnQ4QXJyYXksIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY2FudmFzRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBjb25zdCBkYXRhID0gY2FudmFzRGF0YS5kYXRhO1xuICAgICAgICBsZXQgaW1hZ2VJbmRleCA9IGltYWdlRGF0YS5sZW5ndGggfCAwO1xuICAgICAgICBsZXQgY2FudmFzSW5kZXggPSBkYXRhLmxlbmd0aCB8IDA7XG5cbiAgICAgICAgaWYgKGNhbnZhc0luZGV4IC8gaW1hZ2VJbmRleCAhPT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGltYWdlSW5kZXgtLSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbWFnZURhdGFbaW1hZ2VJbmRleF07XG4gICAgICAgICAgICBkYXRhWy0tY2FudmFzSW5kZXhdID0gMjU1O1xuICAgICAgICAgICAgZGF0YVstLWNhbnZhc0luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgZGF0YVstLWNhbnZhc0luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgZGF0YVstLWNhbnZhc0luZGV4XSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5wdXRJbWFnZURhdGEoY2FudmFzRGF0YSwgMCwgMCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSW1hZ2VEZWJ1ZyB9IGZyb20gJy4uL2NvbW1vbi9pbWFnZS1kZWJ1Zyc7XG5pbXBvcnQgeyBRdWFnZ2FCYXJjb2RlIH0gZnJvbSAnLi4vZGVjb2Rlci9iYXJjb2RlLWRlY29kZXInO1xuaW1wb3J0IHsgQmFyY29kZSB9IGZyb20gJy4uL3JlYWRlci9iYXJjb2RlLXJlYWRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdWx0Q29sbGVjdG9yQ29uZmlnIHtcbiAgICBjYXBhY2l0eT86IG51bWJlcjtcbiAgICBjYXB0dXJlPzogYm9vbGVhbjtcbiAgICBibGFja2xpc3Q/OiBBcnJheTxCYXJjb2RlPjtcbiAgICBmaWx0ZXI/OiAoaXRlbTogQmFyY29kZSkgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFJlc3VsdENvbGxlY3RvciB7XG4gICAgcHJpdmF0ZSBfY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBwcml2YXRlIF9jb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgcHJpdmF0ZSBfY29uZmlnOiBSZXN1bHRDb2xsZWN0b3JDb25maWc7XG4gICAgcHJpdmF0ZSBfY2FwYWNpdHk6IG51bWJlcjtcbiAgICBwcml2YXRlIF9jYXB0dXJlOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3Jlc3VsdHM6IEFycmF5PFF1YWdnYUJhcmNvZGU+O1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBSZXN1bHRDb2xsZWN0b3JDb25maWcpIHtcbiAgICAgICAgdGhpcy5fcmVzdWx0cyA9IG5ldyBBcnJheTxRdWFnZ2FCYXJjb2RlPigpO1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuX2NhcGFjaXR5ID0gY29uZmlnLmNhcGFjaXR5IHx8IDIwO1xuICAgICAgICB0aGlzLl9jYXB0dXJlID0gY29uZmlnLmNhcHR1cmUgPT09IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NhcHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dCA9IHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkUmVzdWx0KGRhdGE6IFVpbnQ4QXJyYXksIGltYWdlV2lkdGg6IG51bWJlciwgaW1hZ2VIZWlnaHQ6IG51bWJlciwgY29kZVJlc3VsdDogQmFyY29kZSk6IHZvaWQge1xuICAgICAgICBpZiAoY29kZVJlc3VsdCAmJiB0aGlzLl9jYXBhY2l0eSAmJiAhdGhpcy5fY29udGFpbnMoY29kZVJlc3VsdCkgJiYgdGhpcy5fcGFzc2VzRmlsdGVyKGNvZGVSZXN1bHQpKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFF1YWdnYUJhcmNvZGUgPSB7IGNvZGVSZXN1bHQgfTtcblxuICAgICAgICAgICAgdGhpcy5fY2FwYWNpdHktLTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2NhcHR1cmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYW52YXMud2lkdGggPSBpbWFnZVdpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSBpbWFnZUhlaWdodDtcblxuICAgICAgICAgICAgICAgIEltYWdlRGVidWcuZHJhd0ltYWdlKGRhdGEsIGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0LCB0aGlzLl9jb250ZXh0KTtcblxuICAgICAgICAgICAgICAgIHJlc3VsdC5mcmFtZSA9IHRoaXMuX2NhbnZhcy50b0RhdGFVUkwoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZXN1bHRzKCk6IEFycmF5PFF1YWdnYUJhcmNvZGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29udGFpbnMoY29kZVJlc3VsdDogQmFyY29kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmJsYWNrbGlzdCAmJlxuICAgICAgICAgICAgdGhpcy5fY29uZmlnLmJsYWNrbGlzdC5zb21lKGl0ZW0gPT4gT2JqZWN0LmtleXMoaXRlbSkuZXZlcnkoa2V5ID0+IGl0ZW1ba2V5XSA9PT0gY29kZVJlc3VsdFtrZXldKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFzc2VzRmlsdGVyKGNvZGVSZXN1bHQ6IEJhcmNvZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9jb25maWcuZmlsdGVyICE9PSAnZnVuY3Rpb24nIHx8IHRoaXMuX2NvbmZpZy5maWx0ZXIoY29kZVJlc3VsdCk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGludGVyZmFjZSBFdmVudENhbGxiYWNrIHtcbiAgICAoZGF0YTogYW55KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudFN1YnNjcmlwdGlvbiB7XG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2s7XG4gICAgYXN5bmM/OiBib29sZWFuO1xuICAgIG9uY2U/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRXZlbnRJdGVtIHtcbiAgICBzdWJzY3JpcHRpb25zOiBBcnJheTxFdmVudFN1YnNjcmlwdGlvbj5cbn1cblxubGV0IGV2ZW50czogeyBbbmFtZTogc3RyaW5nXTogRXZlbnRJdGVtIH0gPSB7fTtcblxuZXhwb3J0IGNsYXNzIEV2ZW50cyB7XG4gICAgc3RhdGljIHN1YnNjcmliZShldmVudDogc3RyaW5nLCBjYWxsYmFjazogRXZlbnRTdWJzY3JpcHRpb24gfCBFdmVudENhbGxiYWNrLCBhc3luYz86IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbjogRXZlbnRTdWJzY3JpcHRpb247XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uID0ge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGFzeW5jXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uID0gY2FsbGJhY2s7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbi5jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRocm93ICdDYWxsYmFjayB3YXMgbm90IHNwZWNpZmllZCBvbiBvcHRpb25zJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdldEV2ZW50KGV2ZW50KS5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHVibGlzaCh0eXBlOiBzdHJpbmcsIGRhdGE/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgZXZlbnRJdGVtID0gZ2V0RXZlbnQodHlwZSk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBldmVudEl0ZW0uc3Vic2NyaXB0aW9ucztcblxuICAgICAgICAvLyBQdWJsaXNoIG9uZS10aW1lIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgc3Vic2NyaXB0aW9ucy5maWx0ZXIoKHsgb25jZSB9KSA9PiAhIW9uY2UpLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHB1Ymxpc2hTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCBkYXRhKSk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc3Vic2NyaXB0aW9uXG4gICAgICAgIGV2ZW50SXRlbS5zdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy5maWx0ZXIoKHsgb25jZSB9KSA9PiAhb25jZSk7XG5cbiAgICAgICAgLy8gcHVibGlzaCB0aGUgcmVzdFxuICAgICAgICBldmVudEl0ZW0uc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBwdWJsaXNoU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbiwgZGF0YSkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBvbmNlKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrLCBhc3luYz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgRXZlbnRzLnN1YnNjcmliZShldmVudCwgeyBjYWxsYmFjaywgYXN5bmMsIG9uY2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHVuc3Vic2NyaWJlKGV2ZW50TmFtZT86IHN0cmluZywgY2FsbGJhY2s/OiBFdmVudENhbGxiYWNrKSB7XG4gICAgICAgIGlmIChldmVudE5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnQoZXZlbnROYW1lKTtcbiAgICAgICAgICAgIGlmIChldmVudCAmJiBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN1YnNjcmlwdGlvbnMgPSBldmVudC5zdWJzY3JpcHRpb25zLmZpbHRlcihzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLmNhbGxiYWNrICE9PSBjYWxsYmFjayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50cyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRFdmVudChldmVudE5hbWU6IHN0cmluZyk6IEV2ZW50SXRlbSB7XG4gICAgaWYgKCFldmVudHNbZXZlbnROYW1lXSkge1xuICAgICAgICBldmVudHNbZXZlbnROYW1lXSA9IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM6IFtdXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBldmVudHNbZXZlbnROYW1lXTtcbn1cblxuZnVuY3Rpb24gcHVibGlzaFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb246IEV2ZW50U3Vic2NyaXB0aW9uLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLmFzeW5jKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLmNhbGxiYWNrKGRhdGEpO1xuICAgICAgICB9LCA0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdWJzY3JpcHRpb24uY2FsbGJhY2soZGF0YSk7XG4gICAgfVxufVxuIiwiZXhwb3J0IHR5cGUgSFNWID0gW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5leHBvcnQgdHlwZSBSR0IgPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBmdW5jdGlvbiBoc3YycmdiKGhzdjogSFNWLCByZ2I/OiBSR0IpOiBSR0Ige1xuICAgIGNvbnN0IGggPSBoc3ZbMF07XG4gICAgY29uc3QgcyA9IGhzdlsxXTtcbiAgICBjb25zdCB2ID0gaHN2WzJdO1xuICAgIGNvbnN0IGMgPSB2ICogcztcbiAgICBjb25zdCB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKGggLyA2MCkgJSAyIC0gMSkpO1xuICAgIGNvbnN0IG0gPSB2IC0gYztcbiAgICBsZXQgciA9IDA7XG4gICAgbGV0IGcgPSAwO1xuICAgIGxldCBiID0gMDtcblxuICAgIGlmIChoIDwgNjApIHtcbiAgICAgICAgciA9IGM7XG4gICAgICAgIGcgPSB4O1xuICAgIH0gZWxzZSBpZiAoaCA8IDEyMCkge1xuICAgICAgICByID0geDtcbiAgICAgICAgZyA9IGM7XG4gICAgfSBlbHNlIGlmIChoIDwgMTgwKSB7XG4gICAgICAgIGcgPSBjO1xuICAgICAgICBiID0geDtcbiAgICB9IGVsc2UgaWYgKGggPCAyNDApIHtcbiAgICAgICAgZyA9IHg7XG4gICAgICAgIGIgPSBjO1xuICAgIH0gZWxzZSBpZiAoaCA8IDMwMCkge1xuICAgICAgICByID0geDtcbiAgICAgICAgYiA9IGM7XG4gICAgfSBlbHNlIGlmIChoIDwgMzYwKSB7XG4gICAgICAgIHIgPSBjO1xuICAgICAgICBiID0geDtcbiAgICB9XG5cbiAgICByZ2IgPSByZ2IgfHwgWzAsIDAsIDBdO1xuXG4gICAgcmdiWzBdID0gKHIgKyBtKSAqIDI1NSB8IDA7XG4gICAgcmdiWzFdID0gKGcgKyBtKSAqIDI1NSB8IDA7XG4gICAgcmdiWzJdID0gKGIgKyBtKSAqIDI1NSB8IDA7XG5cbiAgICByZXR1cm4gcmdiO1xufVxuIiwiaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnLi9tb21lbnQnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50JztcbmltcG9ydCB7IEhTViwgaHN2MnJnYiwgUkdCIH0gZnJvbSAnLi9oc3YycmdiJztcblxudHlwZSBBcnJheVR5cGUgPSBBcnJheTxudW1iZXI+IHwgVWludDhBcnJheSB8IEludDMyQXJyYXk7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGJhc2ljIGltYWdlIGNvbWJpbmluZyB0aGUgZGF0YSBhbmQgc2l6ZS5cbiAqIEluIGFkZGl0aW9uLCBzb21lIG1ldGhvZHMgZm9yIG1hbmlwdWxhdGlvbiBhcmUgY29udGFpbmVkLlxuICovXG5leHBvcnQgY2xhc3MgSW1hZ2VXcmFwcGVyPFQgZXh0ZW5kcyBBcnJheVR5cGUgPSBVaW50OEFycmF5PiB7XG4gICAgZGF0YTogVCB8IFVpbnQ4QXJyYXk7XG4gICAgc2l6ZTogUG9pbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxcbiAgICAgKiBAcGFyYW0gZGF0YSBJZiBnaXZlbiwgYSBmbGF0IGFycmF5IGNvbnRhaW5pbmcgdGhlIHBpeGVsIGRhdGFcbiAgICAgKiBAcGFyYW0gYXJyYXlUeXBlIElmIGdpdmVuLCB0aGUgZGVzaXJlZCBEYXRhVHlwZSBvZiB0aGUgQXJyYXkgKG1heSBiZSB0eXBlZC9ub24tdHlwZWQpXG4gICAgICogQHBhcmFtIGluaXRpYWxpemUgSW5kaWNhdGluZyBpZiB0aGUgYXJyYXkgc2hvdWxkIGJlIGluaXRpYWxpemVkIG9uIGNyZWF0aW9uLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHNpemU6IFBvaW50LCBkYXRhPzogVCwgYXJyYXlUeXBlPzogeyBuZXcoXzogbnVtYmVyKTogVCB8IFVpbnQ4QXJyYXkgfSwgaW5pdGlhbGl6ZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXcgKGFycmF5VHlwZSB8fCBVaW50OEFycmF5KShzaXplLnggKiBzaXplLnkpO1xuXG4gICAgICAgICAgICBpZiAoaW5pdGlhbGl6ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5maWxsKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgaWYgYSBwb3NpdGlvbiBpcyB3aXRoaW4gdGhlIGltYWdlIHdpdGggYSBnaXZlbiBvZmZzZXRcbiAgICAgKiBAcGFyYW0gcG9pbnQgVGhlIGxvY2F0aW9uIHRvIHRlc3RcbiAgICAgKiBAcGFyYW0gYm9yZGVyIFRoZSBwYWRkaW5nIHZhbHVlIGluIHBpeGVsc1xuICAgICAqIEByZXR1cm5zIHRydWUgaWYgbG9jYXRpb24gaW5zaWRlIHRoZSBpbWFnZSdzIGJvcmRlciwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICogQHNlZSBjdmQvaW1hZ2UuaFxuICAgICAqL1xuICAgIGluSW1hZ2VXaXRoQm9yZGVyKHBvaW50OiBQb2ludCwgYm9yZGVyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChwb2ludC54ID49IGJvcmRlcilcbiAgICAgICAgICAgICYmIChwb2ludC55ID49IGJvcmRlcilcbiAgICAgICAgICAgICYmIChwb2ludC54IDwgKHRoaXMuc2l6ZS54IC0gYm9yZGVyKSlcbiAgICAgICAgICAgICYmIChwb2ludC55IDwgKHRoaXMuc2l6ZS55IC0gYm9yZGVyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiB7SW1hZ2VXcmFwcGVyKSBhbmQgY29waWVzIHRoZSBuZWVkZWQgdW5kZXJseWluZyBpbWFnZS1kYXRhIGFyZWFcbiAgICAgKiBAcGFyYW0gaW1hZ2VXcmFwcGVyIFRoZSB0YXJnZXQge0ltYWdlV3JhcHBlcn0gd2hlcmUgdGhlIGRhdGEgc2hvdWxkIGJlIGNvcGllZFxuICAgICAqIEBwYXJhbSBmcm9tWCBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiB3aGVyZSB0byBjb3B5IGZyb21cbiAgICAgKiBAcGFyYW0gZnJvbVkgVGhlIHZlcnRpY2FsIHBvc2l0aW9uIHdoZXJlIHRvIGNvcHkgZnJvbVxuICAgICovXG4gICAgc3ViSW1hZ2VBc0NvcHkoaW1hZ2VXcmFwcGVyOiBJbWFnZVdyYXBwZXIsIGZyb21YOiBudW1iZXIsIGZyb21ZOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2l6ZVkgPSBpbWFnZVdyYXBwZXIuc2l6ZS55O1xuICAgICAgICBjb25zdCBzaXplWCA9IGltYWdlV3JhcHBlci5zaXplLng7XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBzaXplWDsgeCsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHNpemVZOyB5KyspIHtcbiAgICAgICAgICAgICAgICBpbWFnZVdyYXBwZXIuZGF0YVt5ICogc2l6ZVggKyB4XSA9IHRoaXMuZGF0YVsoZnJvbVkgKyB5KSAqIHRoaXMuc2l6ZS54ICsgZnJvbVggKyB4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIGdpdmVuIHBpeGVsIHBvc2l0aW9uIGZyb20gdGhlIGltYWdlXG4gICAgICogQHBhcmFtIHggVGhlIHgtcG9zaXRpb25cbiAgICAgKiBAcGFyYW0geSBUaGUgeS1wb3NpdGlvblxuICAgICAqIEByZXR1cm5zIFRoZSBncmF5c2NhbGUgdmFsdWUgYXQgdGhlIHBpeGVsLXBvc2l0aW9uXG4gICAgICovXG4gICAgZ2V0KHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVt5ICogdGhpcy5zaXplLnggKyB4XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgZ2l2ZW4gcGl4ZWwgcG9zaXRpb24gaW4gdGhlIGltYWdlXG4gICAgICogQHBhcmFtIHggVGhlIHgtcG9zaXRpb25cbiAgICAgKiBAcGFyYW0geSBUaGUgeS1wb3NpdGlvblxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgZ3JheXNjYWxlIHZhbHVlIHRvIHNldFxuICAgICAqIEByZXR1cm5zIFRoZSBJbWFnZSBpdHNlbGYgKGZvciBwb3NzaWJsZSBjaGFpbmluZylcbiAgICAgKi9cbiAgICBzZXQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiBJbWFnZVdyYXBwZXI8VD4ge1xuICAgICAgICB0aGlzLmRhdGFbeSAqIHRoaXMuc2l6ZS54ICsgeF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYm9yZGVyIG9mIHRoZSBpbWFnZSAoMSBwaXhlbCkgdG8gemVyb1xuICAgICAqL1xuICAgIHplcm9Cb3JkZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5zaXplLng7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuc2l6ZS55O1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykge1xuICAgICAgICAgICAgZGF0YVtpXSA9IGRhdGFbKGhlaWdodCAtIDEpICogd2lkdGggKyBpXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGhlaWdodCAtIDE7IGkrKykge1xuICAgICAgICAgICAgZGF0YVtpICogd2lkdGhdID0gZGF0YVtpICogd2lkdGggKyAod2lkdGggLSAxKV0gPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52ZXJ0cyBhIGJpbmFyeSBpbWFnZSBpbiBwbGFjZVxuICAgICAqL1xuICAgIGludmVydCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcblxuICAgICAgICBmb3IgKGxldCBpID0gZGF0YS5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIGRhdGFbaV0gPSBkYXRhW2ldID8gMCA6IDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb21lbnRzKGxhYmVsQ291bnQ6IG51bWJlcik6IEFycmF5PE1vbWVudD4ge1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnNpemUueTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnNpemUueDtcbiAgICAgICAgY29uc3QgbGFiZWxTdW0gPSBuZXcgQXJyYXk8TW9tZW50PigpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXk8TW9tZW50PigpO1xuXG4gICAgICAgIGlmIChsYWJlbENvdW50IDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxhYmVsQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgbGFiZWxTdW1baV0gPSB7XG4gICAgICAgICAgICAgICAgbTAwOiAwLFxuICAgICAgICAgICAgICAgIG0wMTogMCxcbiAgICAgICAgICAgICAgICBtMTA6IDAsXG4gICAgICAgICAgICAgICAgbTExOiAwLFxuICAgICAgICAgICAgICAgIG0wMjogMCxcbiAgICAgICAgICAgICAgICBtMjA6IDAsXG4gICAgICAgICAgICAgICAgdGhldGE6IDAsXG4gICAgICAgICAgICAgICAgcmFkOiAwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgY29uc3QgeXNxID0geSAqIHk7XG4gICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmRhdGFbeSAqIHdpZHRoICsgeF07XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBsYWJlbFN1bVt2YWwgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwubTAwICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsLm0wMSArPSB5O1xuICAgICAgICAgICAgICAgICAgICBsYWJlbC5tMTAgKz0geDtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwubTExICs9IHggKiB5O1xuICAgICAgICAgICAgICAgICAgICBsYWJlbC5tMDIgKz0geXNxO1xuICAgICAgICAgICAgICAgICAgICBsYWJlbC5tMjAgKz0geCAqIHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgUEkgPSBNYXRoLlBJO1xuICAgICAgICBjb25zdCBQSV80ID0gUEkgLyA0O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGFiZWxDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IGxhYmVsU3VtW2ldO1xuICAgICAgICAgICAgaWYgKCFpc05hTihsYWJlbC5tMDApICYmIGxhYmVsLm0wMCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhfID0gbGFiZWwubTEwIC8gbGFiZWwubTAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHlfID0gbGFiZWwubTAxIC8gbGFiZWwubTAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG11MTEgPSBsYWJlbC5tMTEgLyBsYWJlbC5tMDAgLSB4XyAqIHlfO1xuICAgICAgICAgICAgICAgIGNvbnN0IG11MDIgPSBsYWJlbC5tMDIgLyBsYWJlbC5tMDAgLSB5XyAqIHlfO1xuICAgICAgICAgICAgICAgIGNvbnN0IG11MjAgPSBsYWJlbC5tMjAgLyBsYWJlbC5tMDAgLSB4XyAqIHhfO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IDAuNSAqIE1hdGguYXRhbigobXUwMiAtIG11MjApIC8gKDIgKiBtdTExKSkgKyAobXUxMSA+PSAwID8gUElfNCA6IC1QSV80KSArIFBJO1xuICAgICAgICAgICAgICAgIGxhYmVsLnRoZXRhID0gKHRtcCAqIDE4MCAvIFBJICsgOTApICUgMTgwIC0gOTA7XG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsLnRoZXRhIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbC50aGV0YSArPSAxODA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhYmVsLnJhZCA9IHRtcCA+IFBJID8gdG1wIC0gUEkgOiB0bXA7XG4gICAgICAgICAgICAgICAgbGFiZWwueCA9IE1hdGguY29zKHRtcCk7XG4gICAgICAgICAgICAgICAgbGFiZWwueSA9IE1hdGguc2luKHRtcCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobGFiZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyB0aGUge0ltYWdlV3JhcHBlcn0gaW4gYSBnaXZlbiBjYW52YXNcbiAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgcmVuZGVyaW5nIGNvbnRleHQgdG8gd3JpdGUgdG9cbiAgICAgKiBAcGFyYW0gc2NhbGUgU2NhbGUgd2hpY2ggaXMgYXBwbGllZCB0byBlYWNoIHBpeGVsLXZhbHVlXG4gICAgICovXG4gICAgc2hvdyhjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHNjYWxlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5zaXplLnk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5zaXplLng7XG4gICAgICAgIC8vIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgLy8gY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgLy8gY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBmcmFtZS5kYXRhO1xuICAgICAgICBsZXQgY3VycmVudCA9IDA7XG5cbiAgICAgICAgaWYgKCFzY2FsZSkge1xuICAgICAgICAgICAgc2NhbGUgPSAxLjA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCA9IHkgKiB3aWR0aCArIHg7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHRoaXMuZ2V0KHgsIHkpICogc2NhbGU7XG4gICAgICAgICAgICAgICAgZGF0YVtwaXhlbCAqIDQgKyAwXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgZGF0YVtwaXhlbCAqIDQgKyAxXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgZGF0YVtwaXhlbCAqIDQgKyAyXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgZGF0YVtwaXhlbCAqIDQgKyAzXSA9IDI1NTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vZnJhbWUuZGF0YSA9IGRhdGE7XG4gICAgICAgIGNvbnRleHQucHV0SW1hZ2VEYXRhKGZyYW1lLCAwLCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyB0aGUgcGFydCBvZiB0aGUgaW1hZ2UgaW4gYSBnaXZlbiBjYW52YXNcbiAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgcmVuZGVyaW5nIGNvbnRleHQgdG8gd3JpdGUgdG9cbiAgICAgKiBAcGFyYW0gc2NhbGUgU2NhbGUgd2hpY2ggaXMgYXBwbGllZCB0byBlYWNoIHBpeGVsLXZhbHVlXG4gICAgICogQHBhcmFtIGZyb21YIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIHdoZXJlIHRvIG92ZXJsYXkgZnJvbVxuICAgICAqIEBwYXJhbSBmcm9tWSBUaGUgdmVydGljYWwgcG9zaXRpb24gd2hlcmUgdG8gb3ZlcmxheSBmcm9tXG4gICAgICovXG4gICAgb3ZlcmxheShjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHNjYWxlOiBudW1iZXIsIGZyb21YOiBudW1iZXIsIGZyb21ZOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaHN2OiBIU1YgPSBbMCwgMSwgMV07XG4gICAgICAgIGNvbnN0IHdoaXRlUmdiOiBSR0IgPSBbMjU1LCAyNTUsIDI1NV07XG4gICAgICAgIGNvbnN0IGJsYWNrUmdiOiBSR0IgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IGZyYW1lID0gY29udGV4dC5nZXRJbWFnZURhdGEoZnJvbVgsIGZyb21ZLCB0aGlzLnNpemUueCwgdGhpcy5zaXplLnkpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJhbWUuZGF0YTtcblxuICAgICAgICBpZiAoIXNjYWxlIHx8IHNjYWxlIDwgMCB8fCBzY2FsZSA+IDM2MCkge1xuICAgICAgICAgICAgc2NhbGUgPSAzNjA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBsZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgIGhzdlswXSA9IHRoaXMuZGF0YVtsZW5ndGhdICogc2NhbGU7XG4gICAgICAgICAgICBjb25zdCByZ2I6IFJHQiA9IGhzdlswXSA8PSAwID8gd2hpdGVSZ2IgOiBoc3ZbMF0gPj0gMzYwID8gYmxhY2tSZ2IgOiBoc3YycmdiKGhzdik7XG4gICAgICAgICAgICBkYXRhW2xlbmd0aCAqIDQgKyAwXSA9IHJnYlswXTtcbiAgICAgICAgICAgIGRhdGFbbGVuZ3RoICogNCArIDFdID0gcmdiWzFdO1xuICAgICAgICAgICAgZGF0YVtsZW5ndGggKiA0ICsgMl0gPSByZ2JbMl07XG4gICAgICAgICAgICBkYXRhW2xlbmd0aCAqIDQgKyAzXSA9IDI1NTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucHV0SW1hZ2VEYXRhKGZyYW1lLCBmcm9tWCwgZnJvbVkpO1xuICAgIH1cbn1cbiIsIi8qKlxuICogUGVyZm9ybXMgYSBkZWVwIG1lcmdlIG9mIG9iamVjdHMgYW5kIHJldHVybnMgbmV3IG9iamVjdC5cbiAqIERvZXMgbm90IG1vZGlmeSBvYmplY3RzIChpbW11dGFibGUpLlxuICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDgyMTgyMDlcbiAqXG4gKiBAcGFyYW0gb2JqZWN0cyAtIE9iamVjdHMgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIE5ldyBvYmplY3Qgd2l0aCBtZXJnZWQga2V5L3ZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoLi4ub2JqZWN0czogUmVhZG9ubHlBcnJheTxhbnk+KTogb2JqZWN0IHtcbiAgICBjb25zdCBpc09iamVjdCA9IChvYmo6IHVua25vd24pID0+IG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JztcblxuICAgIHJldHVybiBvYmplY3RzLnJlZHVjZSgocHJldiwgb2JqKSA9PiB7XG4gICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBWYWwgPSBwcmV2W2tleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb1ZhbCA9IG9ialtrZXldO1xuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocFZhbCkgJiYgQXJyYXkuaXNBcnJheShvVmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBwcmV2W2tleV0gPSBwVmFsLmNvbmNhdCguLi5vVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldltrZXldID0gb1ZhbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHBWYWwpICYmIGlzT2JqZWN0KG9WYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZba2V5XSA9IG1lcmdlKHBWYWwsIG9WYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZba2V5XSA9IG9WYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSk7XG59IiwiaW1wb3J0IHsgUXVhZ2dhQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuXG5leHBvcnQgY29uc3QgY29uZmlnOiBRdWFnZ2FDb25maWcgPSB7XG4gICAgaW5wdXRTdHJlYW06IHtcbiAgICAgICAgdHlwZTogJ0ltYWdlU3RyZWFtJyxcbiAgICAgICAgc2VxdWVuY2U6IGZhbHNlLFxuICAgICAgICBzaXplOiA4MDAsXG4gICAgICAgIGFyZWE6IHtcbiAgICAgICAgICAgIHRvcDogJzAlJyxcbiAgICAgICAgICAgIHJpZ2h0OiAnMCUnLFxuICAgICAgICAgICAgbGVmdDogJzAlJyxcbiAgICAgICAgICAgIGJvdHRvbTogJzAlJ1xuICAgICAgICB9LFxuICAgICAgICBzaW5nbGVDaGFubmVsOiBmYWxzZSAvLyB0cnVlOiBvbmx5IHRoZSByZWQgY29sb3ItY2hhbm5lbCBpcyByZWFkXG4gICAgfSxcbiAgICBsb2NhdGU6IHRydWUsXG4gICAgbnVtT2ZXb3JrZXJzOiAwLFxuICAgIGRlY29kZXI6IHtcbiAgICAgICAgcmVhZGVyczogW1xuICAgICAgICAgICAgJ2NvZGVfMTI4X3JlYWRlcidcbiAgICAgICAgXVxuICAgIH0sXG4gICAgbG9jYXRvcjoge1xuICAgICAgICBoYWxmU2FtcGxlOiB0cnVlLFxuICAgICAgICBwYXRjaFNpemU6ICdtZWRpdW0nIC8vIHgtc21hbGwsIHNtYWxsLCBtZWRpdW0sIGxhcmdlLCB4LWxhcmdlXG4gICAgfVxufTtcbiIsImV4cG9ydCBlbnVtIEJhcmNvZGVEaXJlY3Rpb24ge1xuICAgIEZvcndhcmQgPSAxLFxuICAgIFJldmVyc2UgPSAtMVxufTtcblxuZXhwb3J0IHR5cGUgQmFyY29kZUZvcm1hdCA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgQmFyY29kZVJlYWRlclR5cGUgPSBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIEJhcmNvZGVSZWFkZXJEZWNsYXJhdGlvbiA9IEJhcmNvZGVSZWFkZXJUeXBlIHwgeyBmb3JtYXQ6IEJhcmNvZGVSZWFkZXJUeXBlOyBjb25maWc6IEJhcmNvZGVSZWFkZXJDb25maWc7IH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFyY29kZVJlYWRlckNvbmZpZyB7XG4gICAgbm9ybWFsaXplQmFyU3BhY2VXaWR0aD86IGJvb2xlYW47XG4gICAgc3VwcGxlbWVudHM/OiBBcnJheTxCYXJjb2RlUmVhZGVyVHlwZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFyY29kZUNvcnJlY3Rpb24ge1xuICAgIGJhcjogbnVtYmVyO1xuICAgIHNwYWNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFyY29kZUluZm8ge1xuICAgIGNvZGU/OiBudW1iZXI7XG4gICAgY29ycmVjdGlvbj86IEJhcmNvZGVDb3JyZWN0aW9uO1xuICAgIGVuZD86IG51bWJlcjtcbiAgICBlbmRDb3VudGVyPzogbnVtYmVyO1xuICAgIGVycm9yPzogbnVtYmVyO1xuICAgIHN0YXJ0PzogbnVtYmVyO1xuICAgIHN0YXJ0Q291bnRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXJjb2RlIHtcbiAgICBjb2RlPzogc3RyaW5nO1xuICAgIGNvZGVzZXQ/OiBudW1iZXI7XG4gICAgY29ycmVjdGlvbj86IEJhcmNvZGVDb3JyZWN0aW9uO1xuICAgIGRlY29kZWRDb2Rlcz86IEFycmF5PHN0cmluZyB8IEJhcmNvZGVJbmZvPjtcbiAgICBkaXJlY3Rpb24/OiBCYXJjb2RlRGlyZWN0aW9uO1xuICAgIGVuZD86IG51bWJlcjtcbiAgICBlbmRJbmZvPzogQmFyY29kZUluZm87XG4gICAgZm9ybWF0PzogQmFyY29kZUZvcm1hdDtcbiAgICBzdGFydD86IG51bWJlcjtcbiAgICBzdGFydEluZm8/OiBCYXJjb2RlSW5mbztcbiAgICBzdXBwbGVtZW50PzogQmFyY29kZTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhcmNvZGVSZWFkZXIge1xuICAgIHByb3RlY3RlZCBfc2luZ2xlQ29kZUVycm9yOiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9hdmVyYWdlQ29kZUVycm9yOiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9mb3JtYXQ6IEJhcmNvZGVGb3JtYXQ7XG4gICAgcHJvdGVjdGVkIF9yb3c6IEFycmF5PG51bWJlcj47XG5cbiAgICBjb25maWc6IEJhcmNvZGVSZWFkZXJDb25maWc7XG4gICAgc3VwcGxlbWVudHM6IEFycmF5PEJhcmNvZGVSZWFkZXI+O1xuXG4gICAgc3RhdGljIGdldCBFeGNlcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBTdGFydE5vdEZvdW5kRXhjZXB0aW9uOiAnU3RhcnQtSW5mbyB3YXMgbm90IGZvdW5kIScsXG4gICAgICAgICAgICBDb2RlTm90Rm91bmRFeGNlcHRpb246ICdDb2RlIGNvdWxkIG5vdCBiZSBmb3VuZCEnLFxuICAgICAgICAgICAgUGF0dGVybk5vdEZvdW5kRXhjZXB0aW9uOiAnUGF0dGVybiBjb3VsZCBub3QgYmUgZm91bmQhJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBTSU5HTEVfQ09ERV9FUlJPUigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2luZ2xlQ29kZUVycm9yO1xuICAgIH1cblxuICAgIGdldCBBVkVSQUdFX0NPREVfRVJST1IoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2ZXJhZ2VDb2RlRXJyb3I7XG4gICAgfVxuXG4gICAgZ2V0IEZPUk1BVCgpOiBCYXJjb2RlRm9ybWF0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihjb25maWc/OiBCYXJjb2RlUmVhZGVyQ29uZmlnLCBzdXBwbGVtZW50cz86IEFycmF5PEJhcmNvZGVSZWFkZXI+KSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9ICd1bmtub3duJztcbiAgICAgICAgdGhpcy5fcm93ID0gW107XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgICB0aGlzLnN1cHBsZW1lbnRzID0gc3VwcGxlbWVudHM7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZGVjb2RlKHJvdz86IEFycmF5PG51bWJlcj4sIHN0YXJ0PzogbnVtYmVyKTogQmFyY29kZTtcblxuICAgIHByb3RlY3RlZCBfZmluZFBhdHRlcm4ocGF0dGVybjogUmVhZG9ubHlBcnJheTxudW1iZXI+LCBvZmZzZXQ6IG51bWJlciwgaXNXaGl0ZTogMCB8IDEsIHRyeUhhcmRlcjogYm9vbGVhbik6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgY29uc3QgY291bnRlciA9IG5ldyBBcnJheTxudW1iZXI+KHBhdHRlcm4ubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgYmVzdE1hdGNoOiBCYXJjb2RlSW5mbyA9IHtcbiAgICAgICAgICAgIGVycm9yOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgY29kZTogLTEsXG4gICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgIGVuZDogMFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlcHNpbG9uID0gdGhpcy5BVkVSQUdFX0NPREVfRVJST1I7XG4gICAgICAgIGxldCBjb3VudGVyUG9zID0gMDtcblxuICAgICAgICBpZiAoIW9mZnNldCkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5fbmV4dFNldCh0aGlzLl9yb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgY291bnRlci5maWxsKDApO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCB0aGlzLl9yb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yb3dbaV0gXiBpc1doaXRlKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcltjb3VudGVyUG9zXSsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY291bnRlclBvcyA9PT0gY291bnRlci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5fbWF0Y2hQYXR0ZXJuKGNvdW50ZXIsIHBhdHRlcm4pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciA8IGVwc2lsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RNYXRjaC5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdE1hdGNoLnN0YXJ0ID0gaSAtIGNvdW50ZXIucmVkdWNlKChzdW0sIHZhbHVlKSA9PiBzdW0gKyB2YWx1ZSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0TWF0Y2guZW5kID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiZXN0TWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5SGFyZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvdW50ZXIubGVuZ3RoIC0gMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcltqXSA9IGNvdW50ZXJbaiArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcltjb3VudGVyLmxlbmd0aCAtIDJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXJbY291bnRlci5sZW5ndGggLSAxXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyUG9zLS07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJQb3MrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY291bnRlcltjb3VudGVyUG9zXSA9IDE7XG4gICAgICAgICAgICAgICAgaXNXaGl0ZSA9IGlzV2hpdGUgPyAwIDogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX25leHRVbnNldChsaW5lOiBSZWFkb25seUFycmF5PG51bWJlcj4sIHN0YXJ0PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0IHx8IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmVbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9uZXh0U2V0KGxpbmU6IFJlYWRvbmx5QXJyYXk8bnVtYmVyPiwgc3RhcnQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQgfHwgMDsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaW5lW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbmUubGVuZ3RoO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfbWF0Y2hSYW5nZShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQgPCAwID8gMCA6IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yb3dbaV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfbWF0Y2hQYXR0ZXJuKGNvdW50ZXI6IFJlYWRvbmx5QXJyYXk8bnVtYmVyPiwgY29kZTogUmVhZG9ubHlBcnJheTxudW1iZXI+LCBtYXhTaW5nbGVFcnJvcj86IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBlcnJvciA9IDA7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBsZXQgbW9kdWxvID0gMDtcblxuICAgICAgICBtYXhTaW5nbGVFcnJvciA9IG1heFNpbmdsZUVycm9yIHx8IHRoaXMuU0lOR0xFX0NPREVfRVJST1IgfHwgMTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50ZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN1bSArPSBjb3VudGVyW2ldO1xuICAgICAgICAgICAgbW9kdWxvICs9IGNvZGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VtIDwgbW9kdWxvKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhcldpZHRoID0gc3VtIC8gbW9kdWxvO1xuICAgICAgICBtYXhTaW5nbGVFcnJvciAqPSBiYXJXaWR0aDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50ZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gY291bnRlcltpXTtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlZCA9IGNvZGVbaV0gKiBiYXJXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZUVycm9yID0gTWF0aC5hYnMoY291bnQgLSBzY2FsZWQpIC8gc2NhbGVkO1xuXG4gICAgICAgICAgICBpZiAoc2luZ2xlRXJyb3IgPiBtYXhTaW5nbGVFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvciArPSBzaW5nbGVFcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvciAvIG1vZHVsbztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NvcnJlY3RCYXJzKGNvdW50ZXI6IEFycmF5PG51bWJlcj4sIGNvcnJlY3Rpb246IG51bWJlciwgaW5kaWNlczogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICBsZXQgbGVuZ3RoID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIGxldCB0bXAgPSAwO1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAgICAgdG1wID0gY291bnRlcltpbmRpY2VzW2xlbmd0aF1dICogKDEgLSAoKDEgLSBjb3JyZWN0aW9uKSAvIDIpKTtcbiAgICAgICAgICAgIGlmICh0bXAgPiAxKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcltpbmRpY2VzW2xlbmd0aF1dID0gdG1wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVjb2RlUGF0dGVybihwYXR0ZXJuOiBBcnJheTxudW1iZXI+KTogQmFyY29kZSB7XG4gICAgICAgIHRoaXMuX3JvdyA9IHBhdHRlcm47XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmRlY29kZSgpO1xuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvdy5yZXZlcnNlKCk7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmRlY29kZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5kaXJlY3Rpb24gPSBCYXJjb2RlRGlyZWN0aW9uLlJldmVyc2U7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0ID0gdGhpcy5fcm93Lmxlbmd0aCAtIHJlc3VsdC5zdGFydDtcbiAgICAgICAgICAgICAgICByZXN1bHQuZW5kID0gdGhpcy5fcm93Lmxlbmd0aCAtIHJlc3VsdC5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZGlyZWN0aW9uID0gQmFyY29kZURpcmVjdGlvbi5Gb3J3YXJkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0LmZvcm1hdCA9IHRoaXMuRk9STUFUO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBfZmlsbENvdW50ZXJzKG9mZnNldDogbnVtYmVyLCBlbmQ6IG51bWJlciwgaXNXaGl0ZTogMCB8IDEpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgY291bnRlcnMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICBsZXQgY291bnRlclBvcyA9IDA7XG5cbiAgICAgICAgY291bnRlcnNbY291bnRlclBvc10gPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jvd1tpXSBeIGlzV2hpdGUpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyc1tjb3VudGVyUG9zXSsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyUG9zKys7XG4gICAgICAgICAgICAgICAgY291bnRlcnNbY291bnRlclBvc10gPSAxO1xuICAgICAgICAgICAgICAgIGlzV2hpdGUgPSBpc1doaXRlID8gMCA6IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnRlcnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF90b0NvdW50ZXJzKHN0YXJ0OiBudW1iZXIsIGNvdW50ZXJzOiBVaW50MTZBcnJheSk6IFVpbnQxNkFycmF5IHtcbiAgICAgICAgY29uc3QgbnVtQ291bnRlcnMgPSBjb3VudGVycy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuX3Jvdy5sZW5ndGg7XG4gICAgICAgIGxldCBpc1doaXRlOiAwIHwgMSA9IHRoaXMuX3Jvd1tzdGFydF0gPyAwIDogMTtcbiAgICAgICAgbGV0IGNvdW50ZXJQb3MgPSAwO1xuXG4gICAgICAgIGNvdW50ZXJzLmZpbGwoMCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yb3dbaV0gXiBpc1doaXRlKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcnNbY291bnRlclBvc10rKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY291bnRlclBvcysrO1xuICAgICAgICAgICAgICAgIGlmIChjb3VudGVyUG9zID09PSBudW1Db3VudGVycykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyc1tjb3VudGVyUG9zXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlzV2hpdGUgPSBpc1doaXRlID8gMCA6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvdW50ZXJzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJhcmNvZGUsIEJhcmNvZGVDb3JyZWN0aW9uLCBCYXJjb2RlSW5mbywgQmFyY29kZVJlYWRlciB9IGZyb20gJy4vYmFyY29kZS1yZWFkZXInO1xuXG5jb25zdCBDT0RFX1NISUZUID0gOTg7XG5jb25zdCBDT0RFX0MgPSA5OTtcbmNvbnN0IENPREVfQiA9IDEwMDtcbmNvbnN0IENPREVfQSA9IDEwMTtcbmNvbnN0IFNUQVJUX0NPREVfQSA9IDEwMztcbmNvbnN0IFNUQVJUX0NPREVfQiA9IDEwNDtcbmNvbnN0IFNUQVJUX0NPREVfQyA9IDEwNTtcbmNvbnN0IFNUT1BfQ09ERSA9IDEwNjtcbmNvbnN0IENPREVfUEFUVEVSTiA9IFtcbiAgICBbMiwgMSwgMiwgMiwgMiwgMl0sXG4gICAgWzIsIDIsIDIsIDEsIDIsIDJdLFxuICAgIFsyLCAyLCAyLCAyLCAyLCAxXSxcbiAgICBbMSwgMiwgMSwgMiwgMiwgM10sXG4gICAgWzEsIDIsIDEsIDMsIDIsIDJdLFxuICAgIFsxLCAzLCAxLCAyLCAyLCAyXSxcbiAgICBbMSwgMiwgMiwgMiwgMSwgM10sXG4gICAgWzEsIDIsIDIsIDMsIDEsIDJdLFxuICAgIFsxLCAzLCAyLCAyLCAxLCAyXSxcbiAgICBbMiwgMiwgMSwgMiwgMSwgM10sXG4gICAgWzIsIDIsIDEsIDMsIDEsIDJdLFxuICAgIFsyLCAzLCAxLCAyLCAxLCAyXSxcbiAgICBbMSwgMSwgMiwgMiwgMywgMl0sXG4gICAgWzEsIDIsIDIsIDEsIDMsIDJdLFxuICAgIFsxLCAyLCAyLCAyLCAzLCAxXSxcbiAgICBbMSwgMSwgMywgMiwgMiwgMl0sXG4gICAgWzEsIDIsIDMsIDEsIDIsIDJdLFxuICAgIFsxLCAyLCAzLCAyLCAyLCAxXSxcbiAgICBbMiwgMiwgMywgMiwgMSwgMV0sXG4gICAgWzIsIDIsIDEsIDEsIDMsIDJdLFxuICAgIFsyLCAyLCAxLCAyLCAzLCAxXSxcbiAgICBbMiwgMSwgMywgMiwgMSwgMl0sXG4gICAgWzIsIDIsIDMsIDEsIDEsIDJdLFxuICAgIFszLCAxLCAyLCAxLCAzLCAxXSxcbiAgICBbMywgMSwgMSwgMiwgMiwgMl0sXG4gICAgWzMsIDIsIDEsIDEsIDIsIDJdLFxuICAgIFszLCAyLCAxLCAyLCAyLCAxXSxcbiAgICBbMywgMSwgMiwgMiwgMSwgMl0sXG4gICAgWzMsIDIsIDIsIDEsIDEsIDJdLFxuICAgIFszLCAyLCAyLCAyLCAxLCAxXSxcbiAgICBbMiwgMSwgMiwgMSwgMiwgM10sXG4gICAgWzIsIDEsIDIsIDMsIDIsIDFdLFxuICAgIFsyLCAzLCAyLCAxLCAyLCAxXSxcbiAgICBbMSwgMSwgMSwgMywgMiwgM10sXG4gICAgWzEsIDMsIDEsIDEsIDIsIDNdLFxuICAgIFsxLCAzLCAxLCAzLCAyLCAxXSxcbiAgICBbMSwgMSwgMiwgMywgMSwgM10sXG4gICAgWzEsIDMsIDIsIDEsIDEsIDNdLFxuICAgIFsxLCAzLCAyLCAzLCAxLCAxXSxcbiAgICBbMiwgMSwgMSwgMywgMSwgM10sXG4gICAgWzIsIDMsIDEsIDEsIDEsIDNdLFxuICAgIFsyLCAzLCAxLCAzLCAxLCAxXSxcbiAgICBbMSwgMSwgMiwgMSwgMywgM10sXG4gICAgWzEsIDEsIDIsIDMsIDMsIDFdLFxuICAgIFsxLCAzLCAyLCAxLCAzLCAxXSxcbiAgICBbMSwgMSwgMywgMSwgMiwgM10sXG4gICAgWzEsIDEsIDMsIDMsIDIsIDFdLFxuICAgIFsxLCAzLCAzLCAxLCAyLCAxXSxcbiAgICBbMywgMSwgMywgMSwgMiwgMV0sXG4gICAgWzIsIDEsIDEsIDMsIDMsIDFdLFxuICAgIFsyLCAzLCAxLCAxLCAzLCAxXSxcbiAgICBbMiwgMSwgMywgMSwgMSwgM10sXG4gICAgWzIsIDEsIDMsIDMsIDEsIDFdLFxuICAgIFsyLCAxLCAzLCAxLCAzLCAxXSxcbiAgICBbMywgMSwgMSwgMSwgMiwgM10sXG4gICAgWzMsIDEsIDEsIDMsIDIsIDFdLFxuICAgIFszLCAzLCAxLCAxLCAyLCAxXSxcbiAgICBbMywgMSwgMiwgMSwgMSwgM10sXG4gICAgWzMsIDEsIDIsIDMsIDEsIDFdLFxuICAgIFszLCAzLCAyLCAxLCAxLCAxXSxcbiAgICBbMywgMSwgNCwgMSwgMSwgMV0sXG4gICAgWzIsIDIsIDEsIDQsIDEsIDFdLFxuICAgIFs0LCAzLCAxLCAxLCAxLCAxXSxcbiAgICBbMSwgMSwgMSwgMiwgMiwgNF0sXG4gICAgWzEsIDEsIDEsIDQsIDIsIDJdLFxuICAgIFsxLCAyLCAxLCAxLCAyLCA0XSxcbiAgICBbMSwgMiwgMSwgNCwgMiwgMV0sXG4gICAgWzEsIDQsIDEsIDEsIDIsIDJdLFxuICAgIFsxLCA0LCAxLCAyLCAyLCAxXSxcbiAgICBbMSwgMSwgMiwgMiwgMSwgNF0sXG4gICAgWzEsIDEsIDIsIDQsIDEsIDJdLFxuICAgIFsxLCAyLCAyLCAxLCAxLCA0XSxcbiAgICBbMSwgMiwgMiwgNCwgMSwgMV0sXG4gICAgWzEsIDQsIDIsIDEsIDEsIDJdLFxuICAgIFsxLCA0LCAyLCAyLCAxLCAxXSxcbiAgICBbMiwgNCwgMSwgMiwgMSwgMV0sXG4gICAgWzIsIDIsIDEsIDEsIDEsIDRdLFxuICAgIFs0LCAxLCAzLCAxLCAxLCAxXSxcbiAgICBbMiwgNCwgMSwgMSwgMSwgMl0sXG4gICAgWzEsIDMsIDQsIDEsIDEsIDFdLFxuICAgIFsxLCAxLCAxLCAyLCA0LCAyXSxcbiAgICBbMSwgMiwgMSwgMSwgNCwgMl0sXG4gICAgWzEsIDIsIDEsIDIsIDQsIDFdLFxuICAgIFsxLCAxLCA0LCAyLCAxLCAyXSxcbiAgICBbMSwgMiwgNCwgMSwgMSwgMl0sXG4gICAgWzEsIDIsIDQsIDIsIDEsIDFdLFxuICAgIFs0LCAxLCAxLCAyLCAxLCAyXSxcbiAgICBbNCwgMiwgMSwgMSwgMSwgMl0sXG4gICAgWzQsIDIsIDEsIDIsIDEsIDFdLFxuICAgIFsyLCAxLCAyLCAxLCA0LCAxXSxcbiAgICBbMiwgMSwgNCwgMSwgMiwgMV0sXG4gICAgWzQsIDEsIDIsIDEsIDIsIDFdLFxuICAgIFsxLCAxLCAxLCAxLCA0LCAzXSxcbiAgICBbMSwgMSwgMSwgMywgNCwgMV0sXG4gICAgWzEsIDMsIDEsIDEsIDQsIDFdLFxuICAgIFsxLCAxLCA0LCAxLCAxLCAzXSxcbiAgICBbMSwgMSwgNCwgMywgMSwgMV0sXG4gICAgWzQsIDEsIDEsIDEsIDEsIDNdLFxuICAgIFs0LCAxLCAxLCAzLCAxLCAxXSxcbiAgICBbMSwgMSwgMywgMSwgNCwgMV0sXG4gICAgWzEsIDEsIDQsIDEsIDMsIDFdLFxuICAgIFszLCAxLCAxLCAxLCA0LCAxXSxcbiAgICBbNCwgMSwgMSwgMSwgMywgMV0sXG4gICAgWzIsIDEsIDEsIDQsIDEsIDJdLFxuICAgIFsyLCAxLCAxLCAyLCAxLCA0XSxcbiAgICBbMiwgMSwgMSwgMiwgMywgMl0sXG4gICAgWzIsIDMsIDMsIDEsIDEsIDEsIDJdXG5dO1xuY29uc3QgTU9EVUxFX0lORElDRVMgPSB7IGJhcjogWzAsIDIsIDRdLCBzcGFjZTogWzEsIDMsIDVdIH07XG5cbmV4cG9ydCBjbGFzcyBDb2RlMTI4UmVhZGVyIGV4dGVuZHMgQmFyY29kZVJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gJ2NvZGVfMTI4JztcbiAgICAgICAgdGhpcy5fc2luZ2xlQ29kZUVycm9yID0gMC42NDtcbiAgICAgICAgdGhpcy5fYXZlcmFnZUNvZGVFcnJvciA9IDAuMzA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZWNvZGVDb2RlKHN0YXJ0OiBudW1iZXIsIGNvcnJlY3Rpb246IEJhcmNvZGVDb3JyZWN0aW9uKTogQmFyY29kZUluZm8ge1xuICAgICAgICBjb25zdCBjb3VudGVyID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBzdGFydDtcbiAgICAgICAgY29uc3QgYmVzdE1hdGNoOiBCYXJjb2RlSW5mbyA9IHtcbiAgICAgICAgICAgIGVycm9yOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgY29kZTogLTEsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHN0YXJ0LFxuICAgICAgICAgICAgY29ycmVjdGlvbjoge1xuICAgICAgICAgICAgICAgIGJhcjogMSxcbiAgICAgICAgICAgICAgICBzcGFjZTogMVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlcHNpbG9uID0gdGhpcy5BVkVSQUdFX0NPREVfRVJST1I7XG4gICAgICAgIGxldCBpc1doaXRlOiAwIHwgMSA9IHRoaXMuX3Jvd1tvZmZzZXRdID8gMCA6IDE7XG4gICAgICAgIGxldCBjb3VudGVyUG9zID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gb2Zmc2V0OyBpIDwgdGhpcy5fcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcm93W2ldIF4gaXNXaGl0ZSkge1xuICAgICAgICAgICAgICAgIGNvdW50ZXJbY291bnRlclBvc10rKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJQb3MgPT09IGNvdW50ZXIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29ycmVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29ycmVjdChjb3VudGVyLCBjb3JyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNvZGUgPSAwOyBjb2RlIDwgQ09ERV9QQVRURVJOLmxlbmd0aDsgY29kZSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX21hdGNoUGF0dGVybihjb3VudGVyLCBDT0RFX1BBVFRFUk5bY29kZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIDwgYmVzdE1hdGNoLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdE1hdGNoLmNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RNYXRjaC5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYmVzdE1hdGNoLmVuZCA9IGk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlc3RNYXRjaC5jb2RlID09PSAtMSB8fCBiZXN0TWF0Y2guZXJyb3IgPiBlcHNpbG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gQ09ERV9QQVRURVJOW2Jlc3RNYXRjaC5jb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0TWF0Y2guY29ycmVjdGlvbi5iYXIgPSB0aGlzLl9jYWxjdWxhdGVDb3JyZWN0aW9uKGV4cGVjdGVkLCBjb3VudGVyLCBNT0RVTEVfSU5ESUNFUy5iYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdE1hdGNoLmNvcnJlY3Rpb24uc3BhY2UgPSB0aGlzLl9jYWxjdWxhdGVDb3JyZWN0aW9uKGV4cGVjdGVkLCBjb3VudGVyLCBNT0RVTEVfSU5ESUNFUy5zcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmVzdE1hdGNoO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJQb3MrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb3VudGVyW2NvdW50ZXJQb3NdID0gMTtcbiAgICAgICAgICAgICAgICBpc1doaXRlID0gaXNXaGl0ZSA/IDAgOiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29ycmVjdChjb3VudGVyOiBBcnJheTxudW1iZXI+LCBjb3JyZWN0aW9uOiBCYXJjb2RlQ29ycmVjdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb3JyZWN0QmFycyhjb3VudGVyLCBjb3JyZWN0aW9uLmJhciwgTU9EVUxFX0lORElDRVMuYmFyKTtcbiAgICAgICAgdGhpcy5fY29ycmVjdEJhcnMoY291bnRlciwgY29ycmVjdGlvbi5zcGFjZSwgTU9EVUxFX0lORElDRVMuc3BhY2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmluZFN0YXJ0KCkge1xuICAgICAgICBjb25zdCBjb3VudGVyID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLl9uZXh0U2V0KHRoaXMuX3Jvdyk7XG4gICAgICAgIGNvbnN0IGJlc3RNYXRjaCA9IHtcbiAgICAgICAgICAgIGVycm9yOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgY29kZTogLTEsXG4gICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgIGVuZDogMCxcbiAgICAgICAgICAgIGNvcnJlY3Rpb246IHtcbiAgICAgICAgICAgICAgICBiYXI6IDEsXG4gICAgICAgICAgICAgICAgc3BhY2U6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXBzaWxvbiA9IHRoaXMuQVZFUkFHRV9DT0RFX0VSUk9SO1xuICAgICAgICBsZXQgaXNXaGl0ZTogMCB8IDEgPSAwO1xuICAgICAgICBsZXQgY291bnRlclBvcyA9IDA7XG4gICAgICAgIGxldCBzdW06IG51bWJlcjtcblxuICAgICAgICBmb3IgKGxldCBpID0gb2Zmc2V0OyBpIDwgdGhpcy5fcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcm93W2ldIF4gaXNXaGl0ZSkge1xuICAgICAgICAgICAgICAgIGNvdW50ZXJbY291bnRlclBvc10rKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJQb3MgPT09IGNvdW50ZXIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBzdW0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvdW50ZXIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSBjb3VudGVyW2pdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNvZGUgPSBTVEFSVF9DT0RFX0E7IGNvZGUgPD0gU1RBUlRfQ09ERV9DOyBjb2RlKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5fbWF0Y2hQYXR0ZXJuKGNvdW50ZXIsIENPREVfUEFUVEVSTltjb2RlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPCBiZXN0TWF0Y2guZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0TWF0Y2guY29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdE1hdGNoLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJlc3RNYXRjaC5lcnJvciA8IGVwc2lsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RNYXRjaC5zdGFydCA9IGkgLSBzdW07XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0TWF0Y2guZW5kID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RNYXRjaC5jb3JyZWN0aW9uLmJhciA9IHRoaXMuX2NhbGN1bGF0ZUNvcnJlY3Rpb24oQ09ERV9QQVRURVJOW2Jlc3RNYXRjaC5jb2RlXSwgY291bnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfSU5ESUNFUy5iYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdE1hdGNoLmNvcnJlY3Rpb24uc3BhY2UgPSB0aGlzLl9jYWxjdWxhdGVDb3JyZWN0aW9uKENPREVfUEFUVEVSTltiZXN0TWF0Y2guY29kZV0sIGNvdW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX0lORElDRVMuc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJlc3RNYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyW2pdID0gY291bnRlcltqICsgMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY291bnRlcls0XSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJbNV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyUG9zLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlclBvcysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb3VudGVyW2NvdW50ZXJQb3NdID0gMTtcbiAgICAgICAgICAgICAgICBpc1doaXRlID0gaXNXaGl0ZSA/IDAgOiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZGVjb2RlKCk6IEJhcmNvZGUge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPigpO1xuICAgICAgICBjb25zdCBzdGFydEluZm8gPSB0aGlzLl9maW5kU3RhcnQoKTtcbiAgICAgICAgbGV0IGNvZGU6IEJhcmNvZGVJbmZvID0gbnVsbDtcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgbGV0IG11bHRpcGxpZXIgPSAwO1xuICAgICAgICBsZXQgY2hlY2tzdW0gPSAwO1xuICAgICAgICBsZXQgY29kZXNldDogbnVtYmVyO1xuICAgICAgICBsZXQgcmF3UmVzdWx0ID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICAgICAgbGV0IGRlY29kZWRDb2RlcyA9IG5ldyBBcnJheTxCYXJjb2RlSW5mbz4oKTtcbiAgICAgICAgbGV0IHNoaWZ0TmV4dCA9IGZhbHNlO1xuICAgICAgICBsZXQgdW5zaGlmdDogYm9vbGVhbjtcbiAgICAgICAgbGV0IHJlbW92ZUxhc3RDaGFyYWN0ZXIgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzdGFydEluZm8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvZGUgPSB7XG4gICAgICAgICAgICBjb2RlOiBzdGFydEluZm8uY29kZSxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydEluZm8uc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHN0YXJ0SW5mby5lbmQsXG4gICAgICAgICAgICBjb3JyZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgYmFyOiBzdGFydEluZm8uY29ycmVjdGlvbi5iYXIsXG4gICAgICAgICAgICAgICAgc3BhY2U6IHN0YXJ0SW5mby5jb3JyZWN0aW9uLnNwYWNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGRlY29kZWRDb2Rlcy5wdXNoKGNvZGUpO1xuICAgICAgICBjaGVja3N1bSA9IGNvZGUuY29kZTtcblxuICAgICAgICBzd2l0Y2ggKGNvZGUuY29kZSkge1xuICAgICAgICAgICAgY2FzZSBTVEFSVF9DT0RFX0E6XG4gICAgICAgICAgICAgICAgY29kZXNldCA9IENPREVfQTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU1RBUlRfQ09ERV9COlxuICAgICAgICAgICAgICAgIGNvZGVzZXQgPSBDT0RFX0I7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNUQVJUX0NPREVfQzpcbiAgICAgICAgICAgICAgICBjb2Rlc2V0ID0gQ09ERV9DO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgICAgICAgdW5zaGlmdCA9IHNoaWZ0TmV4dDtcbiAgICAgICAgICAgIHNoaWZ0TmV4dCA9IGZhbHNlO1xuICAgICAgICAgICAgY29kZSA9IHRoaXMuX2RlY29kZUNvZGUoY29kZS5lbmQsIGNvZGUuY29ycmVjdGlvbik7XG4gICAgICAgICAgICBpZiAoY29kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2RlLmNvZGUgIT09IFNUT1BfQ09ERSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMYXN0Q2hhcmFjdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29kZS5jb2RlICE9PSBTVE9QX0NPREUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmF3UmVzdWx0LnB1c2goY29kZS5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGllcisrO1xuICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSArPSBtdWx0aXBsaWVyICogY29kZS5jb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWNvZGVkQ29kZXMucHVzaChjb2RlKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZXNldCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIENPREVfQToge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUuY29kZSA8IDY0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgzMiArIGNvZGUuY29kZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlLmNvZGUgPCA5Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZS5jb2RlIC0gNjQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUuY29kZSAhPT0gU1RPUF9DT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxhc3RDaGFyYWN0ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0RFX1NISUZUOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnROZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQgPSBDT0RFX0I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0RFX0I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc2V0ID0gQ09ERV9CO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09ERV9DOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldCA9IENPREVfQztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNUT1BfQ09ERTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0RFX0I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlLmNvZGUgPCA5Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMzIgKyBjb2RlLmNvZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUuY29kZSAhPT0gU1RPUF9DT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxhc3RDaGFyYWN0ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0RFX1NISUZUOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnROZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQgPSBDT0RFX0E7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0RFX0E6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc2V0ID0gQ09ERV9BO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09ERV9DOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldCA9IENPREVfQztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNUT1BfQ09ERTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBDT0RFX0M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlLmNvZGUgPCAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjb2RlLmNvZGUgPCAxMCA/ICcwJyArIGNvZGUuY29kZSA6IGNvZGUuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlLmNvZGUgIT09IFNUT1BfQ09ERSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMYXN0Q2hhcmFjdGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09ERV9BOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldCA9IENPREVfQTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENPREVfQjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQgPSBDT0RFX0I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTVE9QX0NPREU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1bnNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgY29kZXNldCA9IGNvZGVzZXQgPT09IENPREVfQSA/IENPREVfQiA6IENPREVfQTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvZGUuZW5kID0gdGhpcy5fbmV4dFVuc2V0KHRoaXMuX3JvdywgY29kZS5lbmQpO1xuICAgICAgICBpZiAoIXRoaXMuX3ZlcmlmeVRyYWlsaW5nV2hpdGVzcGFjZShjb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaGVja3N1bSAtPSBtdWx0aXBsaWVyICogcmF3UmVzdWx0W3Jhd1Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGNoZWNrc3VtICUgMTAzICE9PSByYXdSZXN1bHRbcmF3UmVzdWx0Lmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZW1vdmUgbGFzdCBjb2RlIGZyb20gcmVzdWx0IChjaGVja3N1bSlcbiAgICAgICAgaWYgKHJlbW92ZUxhc3RDaGFyYWN0ZXIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UocmVzdWx0Lmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5qb2luKCcnKSxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydEluZm8uc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGNvZGUuZW5kLFxuICAgICAgICAgICAgY29kZXNldCxcbiAgICAgICAgICAgIHN0YXJ0SW5mbyxcbiAgICAgICAgICAgIGRlY29kZWRDb2RlcyxcbiAgICAgICAgICAgIGVuZEluZm86IGNvZGVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3ZlcmlmeVRyYWlsaW5nV2hpdGVzcGFjZShlbmRJbmZvOiBCYXJjb2RlSW5mbyk6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgY29uc3QgdHJhaWxpbmdXaGl0ZXNwYWNlRW5kID0gZW5kSW5mby5lbmQgKyAoZW5kSW5mby5lbmQgLSBlbmRJbmZvLnN0YXJ0KSAvIDI7XG5cbiAgICAgICAgaWYgKHRyYWlsaW5nV2hpdGVzcGFjZUVuZCA8IHRoaXMuX3Jvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXRjaFJhbmdlKGVuZEluZm8uZW5kLCB0cmFpbGluZ1doaXRlc3BhY2VFbmQsIDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZEluZm87XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVDb3JyZWN0aW9uKFxuICAgICAgICBleHBlY3RlZDogUmVhZG9ubHlBcnJheTxudW1iZXI+LFxuICAgICAgICBub3JtYWxpemVkOiBSZWFkb25seUFycmF5PG51bWJlcj4sXG4gICAgICAgIGluZGljZXM6IFJlYWRvbmx5QXJyYXk8bnVtYmVyPlxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGxldCBzdW1Ob3JtYWxpemVkID0gMDtcbiAgICAgICAgbGV0IHN1bUV4cGVjdGVkID0gMDtcblxuICAgICAgICBmb3IgKGxldCBsZW5ndGggPSBpbmRpY2VzLmxlbmd0aDsgbGVuZ3RoLS07KSB7XG4gICAgICAgICAgICBzdW1FeHBlY3RlZCArPSBleHBlY3RlZFtpbmRpY2VzW2xlbmd0aF1dO1xuICAgICAgICAgICAgc3VtTm9ybWFsaXplZCArPSBub3JtYWxpemVkW2luZGljZXNbbGVuZ3RoXV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VtRXhwZWN0ZWQgLyBzdW1Ob3JtYWxpemVkO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJhcmNvZGUsIEJhcmNvZGVJbmZvLCBCYXJjb2RlUmVhZGVyIH0gZnJvbSAnLi9iYXJjb2RlLXJlYWRlcic7XG5cbmNvbnN0IEFTVEVSSVNLID0gMHgwOTQ7XG5jb25zdCBBTFBIQUJFVEhfU1RSSU5HID0gJzAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi0uICokLyslJztcbmNvbnN0IEFMUEhBQkVUID0gbmV3IFVpbnQxNkFycmF5KFsuLi5BTFBIQUJFVEhfU1RSSU5HXS5tYXAoY2hhciA9PiBjaGFyLmNoYXJDb2RlQXQoMCkpKTtcbi8vIGNvbnN0IEFMUEhBQkVUID0gWzQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsXG4vLyAgICAgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgNDUsIDQ2LCAzMiwgNDIsIDM2LCA0NywgNDMsIDM3XTtcbmNvbnN0IENIQVJBQ1RFUl9FTkNPRElOR1MgPSBuZXcgVWludDE2QXJyYXkoW1xuICAgIDB4MDM0LCAweDEyMSwgMHgwNjEsIDB4MTYwLCAweDAzMSwgMHgxMzAsIDB4MDcwLCAweDAyNSwgMHgxMjQsIDB4MDY0LCAweDEwOSwgMHgwNDksIDB4MTQ4LCAweDAxOSwgMHgxMTgsIDB4MDU4LFxuICAgIDB4MDBELCAweDEwQywgMHgwNEMsIDB4MDFDLCAweDEwMywgMHgwNDMsIDB4MTQyLCAweDAxMywgMHgxMTIsIDB4MDUyLCAweDAwNywgMHgxMDYsIDB4MDQ2LCAweDAxNiwgMHgxODEsIDB4MEMxLFxuICAgIDB4MUMwLCAweDA5MSwgMHgxOTAsIDB4MEQwLCAweDA4NSwgMHgxODQsIDB4MEM0LCAweDA5NCwgMHgwQTgsIDB4MEEyLCAweDA4QSwgMHgwMkFcbl0pO1xuXG5leHBvcnQgY2xhc3MgQ29kZTM5UmVhZGVyIGV4dGVuZHMgQmFyY29kZVJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gJ2NvZGVfMzknO1xuICAgIH1cblxuICAgIGRlY29kZSgpOiBCYXJjb2RlIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLl9maW5kU3RhcnQoKTtcblxuICAgICAgICBpZiAoIXN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgICAgIGxldCBjb3VudGVycyA9IG5ldyBVaW50MTZBcnJheSg5KTtcbiAgICAgICAgbGV0IGRlY29kZWRDaGFyOiBzdHJpbmc7XG4gICAgICAgIGxldCBsYXN0U3RhcnQ6IG51bWJlcjtcbiAgICAgICAgbGV0IG5leHRTdGFydCA9IHRoaXMuX25leHRTZXQodGhpcy5fcm93LCBzdGFydC5lbmQpO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHRoaXMuX3RvQ291bnRlcnMobmV4dFN0YXJ0LCBjb3VudGVycyk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5fdG9QYXR0ZXJuKGNvdW50ZXJzKTtcbiAgICAgICAgICAgIGlmIChwYXR0ZXJuIDwgMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVjb2RlZENoYXIgPSB0aGlzLl9wYXR0ZXJuVG9DaGFyKHBhdHRlcm4pO1xuICAgICAgICAgICAgaWYgKGRlY29kZWRDaGFyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChkZWNvZGVkQ2hhcik7XG4gICAgICAgICAgICBsYXN0U3RhcnQgPSBuZXh0U3RhcnQ7XG4gICAgICAgICAgICBuZXh0U3RhcnQgKz0gY291bnRlcnMucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGl0ZW0sIDApO1xuICAgICAgICAgICAgbmV4dFN0YXJ0ID0gdGhpcy5fbmV4dFNldCh0aGlzLl9yb3csIG5leHRTdGFydCk7XG4gICAgICAgIH0gd2hpbGUgKGRlY29kZWRDaGFyICE9PSAnKicpO1xuICAgICAgICByZXN1bHQucG9wKCk7XG5cbiAgICAgICAgaWYgKCFyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fdmVyaWZ5VHJhaWxpbmdXaGl0ZXNwYWNlKGxhc3RTdGFydCwgbmV4dFN0YXJ0LCBjb3VudGVycykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5qb2luKCcnKSxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydC5zdGFydCxcbiAgICAgICAgICAgIGVuZDogbmV4dFN0YXJ0LFxuICAgICAgICAgICAgc3RhcnRJbmZvOiBzdGFydCxcbiAgICAgICAgICAgIGRlY29kZWRDb2RlczogcmVzdWx0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9wYXR0ZXJuVG9DaGFyKHBhdHRlcm4pOiBzdHJpbmcge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IENIQVJBQ1RFUl9FTkNPRElOR1MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChDSEFSQUNURVJfRU5DT0RJTkdTW2ldID09PSBwYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoQUxQSEFCRVRbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ZlcmlmeVRyYWlsaW5nV2hpdGVzcGFjZShsYXN0U3RhcnQ6IG51bWJlciwgbmV4dFN0YXJ0OiBudW1iZXIsIGNvdW50ZXJzOiBVaW50MTZBcnJheSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuU2l6ZSA9IGNvdW50ZXJzLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyBpdGVtLCAwKTtcbiAgICAgICAgY29uc3QgdHJhaWxpbmdXaGl0ZXNwYWNlRW5kID0gbmV4dFN0YXJ0IC0gbGFzdFN0YXJ0IC0gcGF0dGVyblNpemU7XG4gICAgICAgIHJldHVybiAodHJhaWxpbmdXaGl0ZXNwYWNlRW5kICogMykgPj0gcGF0dGVyblNpemU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmluZE5leHRXaWR0aChjb3VudGVyczogVWludDE2QXJyYXksIGN1cnJlbnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBtaW5XaWR0aCA9IE51bWJlci5NQVhfVkFMVUU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXJzW2ldIDwgbWluV2lkdGggJiYgY291bnRlcnNbaV0gPiBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgbWluV2lkdGggPSBjb3VudGVyc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtaW5XaWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90b1BhdHRlcm4oY291bnRlcnM6IFVpbnQxNkFycmF5KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbnVtQ291bnRlcnMgPSBjb3VudGVycy5sZW5ndGg7XG4gICAgICAgIGxldCBtYXhOYXJyb3dXaWR0aCA9IDA7XG4gICAgICAgIGxldCBudW1XaWRlQmFycyA9IG51bUNvdW50ZXJzO1xuICAgICAgICBsZXQgd2lkZUJhcldpZHRoID0gMDtcbiAgICAgICAgbGV0IHBhdHRlcm46IG51bWJlcjtcblxuICAgICAgICB3aGlsZSAobnVtV2lkZUJhcnMgPiAzKSB7XG4gICAgICAgICAgICBtYXhOYXJyb3dXaWR0aCA9IHRoaXMuX2ZpbmROZXh0V2lkdGgoY291bnRlcnMsIG1heE5hcnJvd1dpZHRoKTtcbiAgICAgICAgICAgIG51bVdpZGVCYXJzID0gMDtcbiAgICAgICAgICAgIHBhdHRlcm4gPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Db3VudGVyczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJzW2ldID4gbWF4TmFycm93V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybiB8PSAxIDw8IChudW1Db3VudGVycyAtIDEgLSBpKTtcbiAgICAgICAgICAgICAgICAgICAgbnVtV2lkZUJhcnMrKztcbiAgICAgICAgICAgICAgICAgICAgd2lkZUJhcldpZHRoICs9IGNvdW50ZXJzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG51bVdpZGVCYXJzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Db3VudGVycyAmJiBudW1XaWRlQmFycyA+IDA7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlcnNbaV0gPiBtYXhOYXJyb3dXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtV2lkZUJhcnMtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY291bnRlcnNbaV0gKiAyKSA+PSB3aWRlQmFyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmluZFN0YXJ0KCk6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5fbmV4dFNldCh0aGlzLl9yb3cpO1xuICAgICAgICBsZXQgcGF0dGVyblN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICBjb25zdCBjb3VudGVyID0gbmV3IFVpbnQxNkFycmF5KDkpO1xuICAgICAgICBsZXQgY291bnRlclBvcyA9IDA7XG4gICAgICAgIGxldCBpc1doaXRlOiAwIHwgMSA9IDA7XG4gICAgICAgIGxldCB3aGl0ZVNwYWNlTXVzdFN0YXJ0OiBudW1iZXI7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IG9mZnNldDsgaSA8IHRoaXMuX3Jvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jvd1tpXSBeIGlzV2hpdGUpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyW2NvdW50ZXJQb3NdKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb3VudGVyUG9zID09PSBjb3VudGVyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBzdGFydCBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90b1BhdHRlcm4oY291bnRlcikgPT09IEFTVEVSSVNLKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlTXVzdFN0YXJ0ID0gTWF0aC5tYXgoMCwgcGF0dGVyblN0YXJ0IC0gKChpIC0gcGF0dGVyblN0YXJ0KSAvIDQpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWF0Y2hSYW5nZSh3aGl0ZVNwYWNlTXVzdFN0YXJ0LCBwYXR0ZXJuU3RhcnQsIDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHBhdHRlcm5TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5TdGFydCArPSBjb3VudGVyWzBdICsgY291bnRlclsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA3OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXJbal0gPSBjb3VudGVyW2ogKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb3VudGVyWzddID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcls4XSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJQb3MtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyUG9zKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvdW50ZXJbY291bnRlclBvc10gPSAxO1xuICAgICAgICAgICAgICAgIGlzV2hpdGUgPSBpc1doaXRlID8gMCA6IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCYXJjb2RlIH0gZnJvbSAnLi9iYXJjb2RlLXJlYWRlcic7XG5pbXBvcnQgeyBDb2RlMzlSZWFkZXIgfSBmcm9tICcuL2NvZGUtMzktcmVhZGVyJztcblxuZXhwb3J0IGNsYXNzIENvZGUzOVZJTlJlYWRlciBleHRlbmRzIENvZGUzOVJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gJ2NvZGVfMzlfdmluJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAYm9ycm93c1xuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS96eGluZy96eGluZy9ibG9iL21hc3Rlci9jb3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS96eGluZy9jbGllbnQvcmVzdWx0L1ZJTlJlc3VsdFBhcnNlci5qYXZhXG4gICAgICovXG4gICAgZGVjb2RlKCk6IEJhcmNvZGUge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzdXBlci5kZWNvZGUoKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvZGUgPSByZXN1bHQuY29kZTtcblxuICAgICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvW0lPUV0vZywgJycpO1xuXG4gICAgICAgIGlmICghL1tBLVowLTldezE3fS8udGVzdChjb2RlKSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIEFaMDkgcGF0dGVybiBjb2RlOicsIGNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NoZWNrQ2hlY2tzdW0oY29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LmNvZGUgPSBjb2RlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrQ2hlY2tzdW0oY29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgcmV0dXJuICEhY29kZTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCYXJjb2RlLCBCYXJjb2RlSW5mbywgQmFyY29kZVJlYWRlciB9IGZyb20gJy4vYmFyY29kZS1yZWFkZXInO1xuXG5jb25zdCBBTFBIQUJFVEhfU1RSSU5HID0gJzAxMjM0NTY3ODktJDovLitBQkNEJztcbmNvbnN0IEFMUEhBQkVUID0gWy4uLkFMUEhBQkVUSF9TVFJJTkddLm1hcChjaGFyID0+IGNoYXIuY2hhckNvZGVBdCgwKSk7XG4vLyBjb25zdCBBTFBIQUJFVCA9IFs0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNDUsIDM2LCA1OCwgNDcsIDQ2LCA0MywgNjUsIDY2LCA2NywgNjhdO1xuY29uc3QgQ0hBUkFDVEVSX0VOQ09ESU5HUyA9IFsweDAwMywgMHgwMDYsIDB4MDA5LCAweDA2MCwgMHgwMTIsIDB4MDQyLCAweDAyMSwgMHgwMjQsIDB4MDMwLCAweDA0OCwgMHgwMGMsIDB4MDE4LCAweDA0NSxcbiAgICAweDA1MSwgMHgwNTQsIDB4MDE1LCAweDAxQSwgMHgwMjksIDB4MDBCLCAweDAwRV07XG5jb25zdCBTVEFSVF9FTkQgPSBbMHgwMUEsIDB4MDI5LCAweDAwQiwgMHgwMEVdO1xuY29uc3QgTUlOX0VOQ09ERURfQ0hBUlMgPSA0O1xuY29uc3QgTUFYX0FDQ0VQVEFCTEUgPSAyLjA7XG5jb25zdCBQQURESU5HID0gMS41O1xuXG5pbnRlcmZhY2UgVGhyZXNob2xkIHtcbiAgICBzcGFjZToge1xuICAgICAgICBuYXJyb3c6IHtcbiAgICAgICAgICAgIHNpemU6IG51bWJlcjtcbiAgICAgICAgICAgIGNvdW50czogbnVtYmVyO1xuICAgICAgICAgICAgbWluOiBudW1iZXI7XG4gICAgICAgICAgICBtYXg6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgICAgd2lkZToge1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgICAgICAgICAgY291bnRzOiBudW1iZXI7XG4gICAgICAgICAgICBtaW46IG51bWJlcjtcbiAgICAgICAgICAgIG1heDogbnVtYmVyO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgYmFyOiB7XG4gICAgICAgIG5hcnJvdzoge1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgICAgICAgICAgY291bnRzOiBudW1iZXI7XG4gICAgICAgICAgICBtaW46IG51bWJlcjtcbiAgICAgICAgICAgIG1heDogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICB3aWRlOiB7XG4gICAgICAgICAgICBzaXplOiBudW1iZXI7XG4gICAgICAgICAgICBjb3VudHM6IG51bWJlcjtcbiAgICAgICAgICAgIG1pbjogbnVtYmVyO1xuICAgICAgICAgICAgbWF4OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIENvZGFiYXJSZWFkZXIgZXh0ZW5kcyBCYXJjb2RlUmVhZGVyIHtcbiAgICBwcml2YXRlIF9jb3VudGVyczogQXJyYXk8bnVtYmVyPjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9ICdjb2RhYmFyJztcbiAgICAgICAgdGhpcy5fY291bnRlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBkZWNvZGUoKTogQmFyY29kZSB7XG4gICAgICAgIHRoaXMuX2NvdW50ZXJzID0gdGhpcy5fZmlsbENvdW50ZXJzKHRoaXMuX25leHRVbnNldCh0aGlzLl9yb3cpLCB0aGlzLl9yb3cubGVuZ3RoLCAxKTtcblxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuX2ZpbmRTdGFydCgpO1xuICAgICAgICBpZiAoIXN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgICAgIGxldCBuZXh0U3RhcnQgPSBzdGFydC5zdGFydENvdW50ZXI7XG4gICAgICAgIGxldCBwYXR0ZXJuOiBudW1iZXI7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMuX3RvUGF0dGVybihuZXh0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4gPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkQ2hhciA9IHRoaXMuX3BhdHRlcm5Ub0NoYXIocGF0dGVybik7XG4gICAgICAgICAgICBpZiAoZGVjb2RlZENoYXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRlY29kZWRDaGFyKTtcbiAgICAgICAgICAgIG5leHRTdGFydCArPSA4O1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAxICYmIFNUQVJUX0VORC5zb21lKGNvZGUgPT4gY29kZSA9PT0gcGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAobmV4dFN0YXJ0IDwgdGhpcy5fY291bnRlcnMubGVuZ3RoKTtcblxuICAgICAgICAvLyB2ZXJpZnkgZW5kXG4gICAgICAgIGlmICgocmVzdWx0Lmxlbmd0aCAtIDIpIDwgTUlOX0VOQ09ERURfQ0hBUlMgfHwgIVNUQVJUX0VORC5zb21lKGNvZGUgPT4gY29kZSA9PT0gcGF0dGVybikpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmVyaWZ5IGVuZCB3aGl0ZSBzcGFjZVxuICAgICAgICBpZiAoIXRoaXMuX3ZlcmlmeVdoaXRlc3BhY2Uoc3RhcnQuc3RhcnRDb3VudGVyLCBuZXh0U3RhcnQgLSA4KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlUmVzdWx0KHJlc3VsdCwgc3RhcnQuc3RhcnRDb3VudGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0U3RhcnQgPSBuZXh0U3RhcnQgPiB0aGlzLl9jb3VudGVycy5sZW5ndGggPyB0aGlzLl9jb3VudGVycy5sZW5ndGggOiBuZXh0U3RhcnQ7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0LnN0YXJ0ICsgdGhpcy5fc3VtQ291bnRlcnMoc3RhcnQuc3RhcnRDb3VudGVyLCBuZXh0U3RhcnQgLSA4KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZTogcmVzdWx0LmpvaW4oJycpLFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LnN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgc3RhcnRJbmZvOiBzdGFydCxcbiAgICAgICAgICAgIGRlY29kZWRDb2RlczogcmVzdWx0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF92ZXJpZnlXaGl0ZXNwYWNlKHN0YXJ0Q291bnRlcjogbnVtYmVyLCBlbmRDb3VudGVyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKChzdGFydENvdW50ZXIgLSAxIDw9IDApXG4gICAgICAgICAgICB8fCB0aGlzLl9jb3VudGVyc1tzdGFydENvdW50ZXIgLSAxXSA+PSAodGhpcy5fY2FsY3VsYXRlUGF0dGVybkxlbmd0aChzdGFydENvdW50ZXIpIC8gMi4wKSkge1xuICAgICAgICAgICAgaWYgKChlbmRDb3VudGVyICsgOCA+PSB0aGlzLl9jb3VudGVycy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5fY291bnRlcnNbZW5kQ291bnRlciArIDddID49ICh0aGlzLl9jYWxjdWxhdGVQYXR0ZXJuTGVuZ3RoKGVuZENvdW50ZXIpIC8gMi4wKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVBhdHRlcm5MZW5ndGgob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgc3VtID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gb2Zmc2V0OyBpIDwgb2Zmc2V0ICsgNzsgaSsrKSB7XG4gICAgICAgICAgICBzdW0gKz0gdGhpcy5fY291bnRlcnNbaV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VtO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RocmVzaG9sZFJlc3VsdFBhdHRlcm4ocmVzdWx0OiBSZWFkb25seUFycmF5PHN0cmluZz4sIHN0YXJ0Q291bnRlcjogbnVtYmVyKTogVGhyZXNob2xkIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcml6YXRpb246IFRocmVzaG9sZCA9IHtcbiAgICAgICAgICAgIHNwYWNlOiB7XG4gICAgICAgICAgICAgICAgbmFycm93OiB7IHNpemU6IDAsIGNvdW50czogMCwgbWluOiAwLCBtYXg6IE51bWJlci5NQVhfVkFMVUUgfSxcbiAgICAgICAgICAgICAgICB3aWRlOiB7IHNpemU6IDAsIGNvdW50czogMCwgbWluOiAwLCBtYXg6IE51bWJlci5NQVhfVkFMVUUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJhcjoge1xuICAgICAgICAgICAgICAgIG5hcnJvdzogeyBzaXplOiAwLCBjb3VudHM6IDAsIG1pbjogMCwgbWF4OiBOdW1iZXIuTUFYX1ZBTFVFIH0sXG4gICAgICAgICAgICAgICAgd2lkZTogeyBzaXplOiAwLCBjb3VudHM6IDAsIG1pbjogMCwgbWF4OiBOdW1iZXIuTUFYX1ZBTFVFIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHBvcyA9IHN0YXJ0Q291bnRlcjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHBhdHRlcm4gPSB0aGlzLl9jaGFyVG9QYXR0ZXJuKHJlc3VsdFtpXSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSA2OyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSAoaiAmIDEpID09PSAyID8gY2F0ZWdvcml6YXRpb24uYmFyIDogY2F0ZWdvcml6YXRpb24uc3BhY2U7XG4gICAgICAgICAgICAgICAgY29uc3QgY2F0ID0gKHBhdHRlcm4gJiAxKSA9PT0gMSA/IGtpbmQud2lkZSA6IGtpbmQubmFycm93O1xuICAgICAgICAgICAgICAgIGNhdC5zaXplICs9IHRoaXMuX2NvdW50ZXJzW3BvcyArIGpdO1xuICAgICAgICAgICAgICAgIGNhdC5jb3VudHMrKztcbiAgICAgICAgICAgICAgICBwYXR0ZXJuID4+PSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zICs9IDg7XG4gICAgICAgIH1cblxuICAgICAgICBbJ3NwYWNlJywgJ2JhciddLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtpbmQgPSBjYXRlZ29yaXphdGlvbltrZXldO1xuICAgICAgICAgICAga2luZC53aWRlLm1pbiA9IE1hdGguZmxvb3IoKGtpbmQubmFycm93LnNpemUgLyBraW5kLm5hcnJvdy5jb3VudHMgKyBraW5kLndpZGUuc2l6ZSAvIGtpbmQud2lkZS5jb3VudHMpIC8gMik7XG4gICAgICAgICAgICBraW5kLm5hcnJvdy5tYXggPSBNYXRoLmNlaWwoa2luZC53aWRlLm1pbik7XG4gICAgICAgICAgICBraW5kLndpZGUubWF4ID0gTWF0aC5jZWlsKChraW5kLndpZGUuc2l6ZSAqIE1BWF9BQ0NFUFRBQkxFICsgUEFERElORykgLyBraW5kLndpZGUuY291bnRzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNhdGVnb3JpemF0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoYXJUb1BhdHRlcm4oY2hhcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBBTFBIQUJFVC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKEFMUEhBQkVUW2ldID09PSBjaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBDSEFSQUNURVJfRU5DT0RJTkdTW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDB4MDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWxpZGF0ZVJlc3VsdChyZXN1bHQ6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiwgc3RhcnRDb3VudGVyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy5fdGhyZXNob2xkUmVzdWx0UGF0dGVybihyZXN1bHQsIHN0YXJ0Q291bnRlcik7XG4gICAgICAgIGxldCBwb3MgPSBzdGFydENvdW50ZXI7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBwYXR0ZXJuID0gdGhpcy5fY2hhclRvUGF0dGVybihyZXN1bHRbaV0pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gNjsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBraW5kID0gKGogJiAxKSA9PT0gMCA/IHRocmVzaG9sZC5iYXIgOiB0aHJlc2hvbGQuc3BhY2U7XG4gICAgICAgICAgICAgICAgY29uc3QgY2F0ID0gKHBhdHRlcm4gJiAxKSA9PT0gMSA/IGtpbmQud2lkZSA6IGtpbmQubmFycm93O1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLl9jb3VudGVyc1twb3MgKyBqXTtcbiAgICAgICAgICAgICAgICBpZiAoc2l6ZSA8IGNhdC5taW4gfHwgc2l6ZSA+IGNhdC5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXR0ZXJuID4+PSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zICs9IDg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXR0ZXJuVG9DaGFyKHBhdHRlcm46IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQ0hBUkFDVEVSX0VOQ09ESU5HUy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKENIQVJBQ1RFUl9FTkNPRElOR1NbaV0gPT09IHBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShBTFBIQUJFVFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb21wdXRlQWx0ZXJuYXRpbmdUaHJlc2hvbGQob2Zmc2V0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IG1pbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgIGxldCBtYXggPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCBlbmQ7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgY291bnRlciA9IHRoaXMuX2NvdW50ZXJzW2ldO1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBtYXggPSBjb3VudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPCBtaW4pIHtcbiAgICAgICAgICAgICAgICBtaW4gPSBjb3VudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgobWluICsgbWF4KSAvIDIuMCkgfCAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RvUGF0dGVybihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG51bUNvdW50ZXJzID0gNztcbiAgICAgICAgY29uc3QgZW5kID0gb2Zmc2V0ICsgbnVtQ291bnRlcnM7XG5cbiAgICAgICAgaWYgKGVuZCA+IHRoaXMuX2NvdW50ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFyVGhyZXNob2xkID0gdGhpcy5fY29tcHV0ZUFsdGVybmF0aW5nVGhyZXNob2xkKG9mZnNldCwgZW5kKTtcbiAgICAgICAgY29uc3Qgc3BhY2VUaHJlc2hvbGQgPSB0aGlzLl9jb21wdXRlQWx0ZXJuYXRpbmdUaHJlc2hvbGQob2Zmc2V0ICsgMSwgZW5kKTtcbiAgICAgICAgbGV0IGJpdG1hc2sgPSAxIDw8IChudW1Db3VudGVycyAtIDEpO1xuICAgICAgICBsZXQgcGF0dGVybiA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Db3VudGVyczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSAoaSAmIDEpID09PSAwID8gYmFyVGhyZXNob2xkIDogc3BhY2VUaHJlc2hvbGQ7XG4gICAgICAgICAgICBpZiAodGhpcy5fY291bnRlcnNbb2Zmc2V0ICsgaV0gPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuIHw9IGJpdG1hc2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiaXRtYXNrID4+PSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3VtQ291bnRlcnMoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgc3VtID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgc3VtICs9IHRoaXMuX2NvdW50ZXJzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2ZpbmRTdGFydCgpOiBCYXJjb2RlSW5mbyB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuX25leHRVbnNldCh0aGlzLl9yb3cpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5fY291bnRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLl90b1BhdHRlcm4oaSk7XG4gICAgICAgICAgICBpZiAocGF0dGVybiAhPT0gLTEgJiYgU1RBUlRfRU5ELnNvbWUoY29kZSA9PiBjb2RlID09PSBwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IExvb2sgZm9yIHdoaXRlc3BhY2UgYWhlYWRcbiAgICAgICAgICAgICAgICBzdGFydCArPSB0aGlzLl9zdW1Db3VudGVycygwLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMuX3N1bUNvdW50ZXJzKGksIGkgKyA4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgICAgICAgICBzdGFydENvdW50ZXI6IGksXG4gICAgICAgICAgICAgICAgICAgIGVuZENvdW50ZXI6IGkgKyA4XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IG1lcmdlIH0gZnJvbSAnLi4vY29tbW9uL21lcmdlJztcbmltcG9ydCB7IEJhcmNvZGUsIEJhcmNvZGVJbmZvLCBCYXJjb2RlUmVhZGVyLCBCYXJjb2RlUmVhZGVyQ29uZmlnIH0gZnJvbSAnLi9iYXJjb2RlLXJlYWRlcic7XG5cbmNvbnN0IEVYVEVOU0lPTl9TVEFSVF9QQVRURVJOID0gWzEsIDEsIDJdO1xuY29uc3QgQ09ERV9QQVRURVJOID0gW1xuICAgIFszLCAyLCAxLCAxXSxcbiAgICBbMiwgMiwgMiwgMV0sXG4gICAgWzIsIDEsIDIsIDJdLFxuICAgIFsxLCA0LCAxLCAxXSxcbiAgICBbMSwgMSwgMywgMl0sXG4gICAgWzEsIDIsIDMsIDFdLFxuICAgIFsxLCAxLCAxLCA0XSxcbiAgICBbMSwgMywgMSwgMl0sXG4gICAgWzEsIDIsIDEsIDNdLFxuICAgIFszLCAxLCAxLCAyXSxcbiAgICBbMSwgMSwgMiwgM10sXG4gICAgWzEsIDIsIDIsIDJdLFxuICAgIFsyLCAyLCAxLCAyXSxcbiAgICBbMSwgMSwgNCwgMV0sXG4gICAgWzIsIDMsIDEsIDFdLFxuICAgIFsxLCAzLCAyLCAxXSxcbiAgICBbNCwgMSwgMSwgMV0sXG4gICAgWzIsIDEsIDMsIDFdLFxuICAgIFszLCAxLCAyLCAxXSxcbiAgICBbMiwgMSwgMSwgM11cbl07XG5jb25zdCBDT0RFX0ZSRVFVRU5DWSA9IFswLCAxMSwgMTMsIDE0LCAxOSwgMjUsIDI4LCAyMSwgMjIsIDI2XTtcblxuZXhwb3J0IGNsYXNzIEVBTlJlYWRlciBleHRlbmRzIEJhcmNvZGVSZWFkZXIge1xuICAgIGdldCBDT0RFX0xfU1RBUlQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgZ2V0IENPREVfR19TVEFSVCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMTA7XG4gICAgfVxuXG4gICAgZ2V0IFNUQVJUX1BBVFRFUk4oKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiBbMSwgMSwgMV07XG4gICAgfVxuXG4gICAgZ2V0IFNUT1BfUEFUVEVSTigpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIFsxLCAxLCAxXTtcbiAgICB9XG5cbiAgICBnZXQgTUlERExFX1BBVFRFUk4oKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiBbMSwgMSwgMSwgMSwgMV07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoY29uZmlnPzogQmFyY29kZVJlYWRlckNvbmZpZywgc3VwcGxlbWVudHM/OiBBcnJheTxCYXJjb2RlUmVhZGVyPikge1xuICAgICAgICBzdXBlcihtZXJnZSh7XG4gICAgICAgICAgICBzdXBwbGVtZW50czogW10gLy8gQWxsb3dlZCBleHRlbnNpb25zIHRvIGJlIGRlY29kZWQgKDIgYW5kL29yIDUpXG4gICAgICAgIH0sIGNvbmZpZyksIHN1cHBsZW1lbnRzKTtcblxuICAgICAgICB0aGlzLl9mb3JtYXQgPSAnZWFuXzEzJztcbiAgICAgICAgdGhpcy5fc2luZ2xlQ29kZUVycm9yID0gMC43MDtcbiAgICAgICAgdGhpcy5fYXZlcmFnZUNvZGVFcnJvciA9IDAuNDg7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZWNvZGVDb2RlKHN0YXJ0OiBudW1iZXIsIGNvZGVyYW5nZT86IG51bWJlcik6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgY29uc3QgY291bnRlciA9IFswLCAwLCAwLCAwXTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnQ7XG4gICAgICAgIGNvbnN0IGJlc3RNYXRjaDogQmFyY29kZUluZm8gPSB7XG4gICAgICAgICAgICBlcnJvcjogTnVtYmVyLk1BWF9WQUxVRSxcbiAgICAgICAgICAgIGNvZGU6IC0xLFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBzdGFydFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlcHNpbG9uID0gdGhpcy5BVkVSQUdFX0NPREVfRVJST1I7XG4gICAgICAgIGxldCBpc1doaXRlOiAwIHwgMSA9IHRoaXMuX3Jvd1tvZmZzZXRdID8gMCA6IDE7XG4gICAgICAgIGxldCBjb3VudGVyUG9zID0gMDtcblxuICAgICAgICBpZiAoIWNvZGVyYW5nZSkge1xuICAgICAgICAgICAgY29kZXJhbmdlID0gQ09ERV9QQVRURVJOLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBvZmZzZXQ7IGkgPCB0aGlzLl9yb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yb3dbaV0gXiBpc1doaXRlKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcltjb3VudGVyUG9zXSsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY291bnRlclBvcyA9PT0gY291bnRlci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNvZGUgPSAwOyBjb2RlIDwgY29kZXJhbmdlOyBjb2RlKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5fbWF0Y2hQYXR0ZXJuKGNvdW50ZXIsIENPREVfUEFUVEVSTltjb2RlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPCBiZXN0TWF0Y2guZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0TWF0Y2guY29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdE1hdGNoLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYmVzdE1hdGNoLmVuZCA9IGk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZXN0TWF0Y2guZXJyb3IgPiBlcHNpbG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmVzdE1hdGNoO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJQb3MrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY291bnRlcltjb3VudGVyUG9zXSA9IDE7XG4gICAgICAgICAgICAgICAgaXNXaGl0ZSA9IGlzV2hpdGUgPyAwIDogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmluZFN0YXJ0KCk6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgbGV0IG9mZnNldCA9IHRoaXMuX25leHRTZXQodGhpcy5fcm93KTtcbiAgICAgICAgbGV0IHN0YXJ0SW5mbzogQmFyY29kZUluZm87XG5cbiAgICAgICAgd2hpbGUgKCFzdGFydEluZm8pIHtcbiAgICAgICAgICAgIHN0YXJ0SW5mbyA9IHRoaXMuX2ZpbmRQYXR0ZXJuKHRoaXMuU1RBUlRfUEFUVEVSTiwgb2Zmc2V0LCAwLCB0cnVlKTtcblxuICAgICAgICAgICAgaWYgKCFzdGFydEluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGVhZGluZ1doaXRlc3BhY2VTdGFydCA9IHN0YXJ0SW5mby5zdGFydCAtIChzdGFydEluZm8uZW5kIC0gc3RhcnRJbmZvLnN0YXJ0KTtcblxuICAgICAgICAgICAgaWYgKGxlYWRpbmdXaGl0ZXNwYWNlU3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXRjaFJhbmdlKGxlYWRpbmdXaGl0ZXNwYWNlU3RhcnQsIHN0YXJ0SW5mby5zdGFydCwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0SW5mbztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9mZnNldCA9IHN0YXJ0SW5mby5lbmQ7XG4gICAgICAgICAgICBzdGFydEluZm8gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF92ZXJpZnlUcmFpbGluZ1doaXRlc3BhY2UoZW5kSW5mbzogQmFyY29kZUluZm8pOiBCYXJjb2RlSW5mbyB7XG4gICAgICAgIGNvbnN0IHRyYWlsaW5nV2hpdGVzcGFjZUVuZCA9IGVuZEluZm8uZW5kICsgKGVuZEluZm8uZW5kIC0gZW5kSW5mby5zdGFydCk7XG5cbiAgICAgICAgaWYgKHRyYWlsaW5nV2hpdGVzcGFjZUVuZCA8IHRoaXMuX3Jvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXRjaFJhbmdlKGVuZEluZm8uZW5kLCB0cmFpbGluZ1doaXRlc3BhY2VFbmQsIDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZEluZm87XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2ZpbmRFbmQob2Zmc2V0OiBudW1iZXIsIGlzV2hpdGU6IDAgfCAxKTogQmFyY29kZUluZm8ge1xuICAgICAgICBjb25zdCBlbmRJbmZvID0gdGhpcy5fZmluZFBhdHRlcm4odGhpcy5TVE9QX1BBVFRFUk4sIG9mZnNldCwgaXNXaGl0ZSwgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybiBlbmRJbmZvICE9PSBudWxsID8gdGhpcy5fdmVyaWZ5VHJhaWxpbmdXaGl0ZXNwYWNlKGVuZEluZm8pIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVGaXJzdERpZ2l0KGNvZGVGcmVxdWVuY3k6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IENPREVfRlJFUVVFTkNZLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY29kZUZyZXF1ZW5jeSA9PT0gQ09ERV9GUkVRVUVOQ1lbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2RlY29kZVBheWxvYWQoY29kZTogQmFyY29kZUluZm8sIHJlc3VsdDogQXJyYXk8bnVtYmVyPiwgZGVjb2RlZENvZGVzOiBBcnJheTxCYXJjb2RlSW5mbz4pOiBCYXJjb2RlSW5mbyB7XG4gICAgICAgIGxldCBjb2RlRnJlcXVlbmN5ID0gMHgwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICBjb2RlID0gdGhpcy5fZGVjb2RlQ29kZShjb2RlLmVuZCk7XG4gICAgICAgICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2RlLmNvZGUgPj0gdGhpcy5DT0RFX0dfU1RBUlQpIHtcbiAgICAgICAgICAgICAgICBjb2RlLmNvZGUgLT0gdGhpcy5DT0RFX0dfU1RBUlQ7XG4gICAgICAgICAgICAgICAgY29kZUZyZXF1ZW5jeSB8PSAxIDw8ICg1IC0gaSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvZGVGcmVxdWVuY3kgfD0gMCA8PCAoNSAtIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goY29kZS5jb2RlKTtcbiAgICAgICAgICAgIGRlY29kZWRDb2Rlcy5wdXNoKGNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3REaWdpdCA9IHRoaXMuX2NhbGN1bGF0ZUZpcnN0RGlnaXQoY29kZUZyZXF1ZW5jeSk7XG5cbiAgICAgICAgaWYgKGZpcnN0RGlnaXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnVuc2hpZnQoZmlyc3REaWdpdCk7XG5cbiAgICAgICAgY29kZSA9IHRoaXMuX2ZpbmRQYXR0ZXJuKHRoaXMuTUlERExFX1BBVFRFUk4sIGNvZGUuZW5kLCAxLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVjb2RlZENvZGVzLnB1c2goY29kZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgIGNvZGUgPSB0aGlzLl9kZWNvZGVDb2RlKGNvZGUuZW5kLCB0aGlzLkNPREVfR19TVEFSVCk7XG5cbiAgICAgICAgICAgIGlmICghY29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWNvZGVkQ29kZXMucHVzaChjb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvZGUuY29kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG5cbiAgICBkZWNvZGUoKTogQmFyY29kZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgIGNvbnN0IGRlY29kZWRDb2RlcyA9IG5ldyBBcnJheTxCYXJjb2RlSW5mbz4oKTtcbiAgICAgICAgbGV0IHJlc3VsdEluZm86IEJhcmNvZGUgPSB7fTtcbiAgICAgICAgbGV0IHN0YXJ0SW5mbyA9IHRoaXMuX2ZpbmRTdGFydCgpO1xuXG4gICAgICAgIGlmICghc3RhcnRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb2RlOiBCYXJjb2RlSW5mbyA9IHtcbiAgICAgICAgICAgIGNvZGU6IHN0YXJ0SW5mby5jb2RlLFxuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0SW5mby5zdGFydCxcbiAgICAgICAgICAgIGVuZDogc3RhcnRJbmZvLmVuZFxuICAgICAgICB9O1xuICAgICAgICBkZWNvZGVkQ29kZXMucHVzaChjb2RlKTtcblxuICAgICAgICBjb2RlID0gdGhpcy5fZGVjb2RlUGF5bG9hZChjb2RlLCByZXN1bHQsIGRlY29kZWRDb2Rlcyk7XG5cbiAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvZGUgPSB0aGlzLl9maW5kRW5kKGNvZGUuZW5kLCAwKTtcblxuICAgICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVjb2RlZENvZGVzLnB1c2goY29kZSk7XG5cbiAgICAgICAgLy8gQ2hlY2tzdW1cbiAgICAgICAgaWYgKCF0aGlzLl9jaGVja3N1bShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN1cHBsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBsZW1lbnQgPSB0aGlzLl9kZWNvZGVFeHRlbnNpb25zKGNvZGUuZW5kKTtcbiAgICAgICAgICAgIGlmICghc3VwcGxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsYXN0Q29kZSA9IHN1cHBsZW1lbnQuZGVjb2RlZENvZGVzW3N1cHBsZW1lbnQuZGVjb2RlZENvZGVzLmxlbmd0aCAtIDFdIGFzIEJhcmNvZGVJbmZvO1xuICAgICAgICAgICAgY29uc3QgZW5kSW5mbyA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogbGFzdENvZGUuc3RhcnQgKyAoKChsYXN0Q29kZS5lbmQgLSBsYXN0Q29kZS5zdGFydCkgLyAyKSB8IDApLFxuICAgICAgICAgICAgICAgIGVuZDogbGFzdENvZGUuZW5kXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3ZlcmlmeVRyYWlsaW5nV2hpdGVzcGFjZShlbmRJbmZvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHRJbmZvID0ge1xuICAgICAgICAgICAgICAgIHN1cHBsZW1lbnQsXG4gICAgICAgICAgICAgICAgY29kZTogcmVzdWx0LmpvaW4oJycpICsgc3VwcGxlbWVudC5jb2RlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5qb2luKCcnKSxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydEluZm8uc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGNvZGUuZW5kLFxuICAgICAgICAgICAgc3RhcnRJbmZvLFxuICAgICAgICAgICAgZGVjb2RlZENvZGVzLFxuICAgICAgICAgICAgLi4ucmVzdWx0SW5mb1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RlY29kZUV4dGVuc2lvbnMob2Zmc2V0OiBudW1iZXIpOiBCYXJjb2RlIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLl9uZXh0U2V0KHRoaXMuX3Jvdywgb2Zmc2V0KTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5fZmluZFBhdHRlcm4oRVhURU5TSU9OX1NUQVJUX1BBVFRFUk4sIHN0YXJ0LCAwLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHN0YXJ0SW5mbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3VwcGxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnN1cHBsZW1lbnRzW2ldLmRlY29kZSh0aGlzLl9yb3csIHN0YXJ0SW5mby5lbmQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmZvLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IHJlc3VsdC5lbmQsXG4gICAgICAgICAgICAgICAgICAgIGRlY29kZWRDb2RlczogcmVzdWx0LmRlY29kZWRDb2Rlc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NoZWNrc3VtKHJlc3VsdDogQXJyYXk8bnVtYmVyPik6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgc3VtID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gcmVzdWx0Lmxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7XG4gICAgICAgICAgICBzdW0gKz0gcmVzdWx0W2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VtICo9IDM7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHJlc3VsdC5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMikge1xuICAgICAgICAgICAgc3VtICs9IHJlc3VsdFtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdW0gJSAxMCA9PT0gMDtcbiAgICB9XG59IiwiaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9jb21tb24vcG9pbnQnO1xuaW1wb3J0IHsgSW1hZ2VXcmFwcGVyIH0gZnJvbSAnLi4vY29tbW9uL2ltYWdlLXdyYXBwZXInO1xuXG5lbnVtIFNsb3BlIHtcbiAgICBVcCA9IDEsXG4gICAgRG93biA9IC0xXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhcmNvZGVMaW5lIHtcbiAgICBsaW5lOiBBcnJheTxudW1iZXI+O1xuICAgIG1heD86IG51bWJlcjtcbiAgICBtaW4/OiBudW1iZXI7XG4gICAgdGhyZXNob2xkPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgQnJlc2VuaGFtID0ge1xuICAgIC8qKlxuICAgICAqIFNjYW5zIGEgbGluZSBvZiB0aGUgZ2l2ZW4gaW1hZ2UgZnJvbSBwb2ludCBwMSB0byBwMiBhbmQgcmV0dXJucyBhIHJlc3VsdCBvYmplY3QgY29udGFpbmluZ1xuICAgICAqIGdyYXktc2NhbGUgdmFsdWVzICgwLTI1NSkgb2YgdGhlIHVuZGVybHlpbmcgcGl4ZWxzIGluIGFkZGl0aW9uIHRvIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIGltYWdlV3JhcHBlclxuICAgICAqIEBwYXJhbSBwMSBUaGUgc3RhcnQgcG9pbnQge3gseX1cbiAgICAgKiBAcGFyYW0gcDIgVGhlIGVuZCBwb2ludCB7eCx5fVxuICAgICAqIEByZXR1cm5zIHtsaW5lLCBtaW4sIG1heH1cbiAgICAgKi9cbiAgICBnZXRCYXJjb2RlTGluZShpbWFnZVdyYXBwZXI6IEltYWdlV3JhcHBlciwgcDE6IFBvaW50LCBwMjogUG9pbnQpOiBCYXJjb2RlTGluZSB7XG4gICAgICAgIGxldCB4MCA9IHAxLnggfCAwO1xuICAgICAgICBsZXQgeTAgPSBwMS55IHwgMDtcbiAgICAgICAgbGV0IHgxID0gcDIueCB8IDA7XG4gICAgICAgIGxldCB5MSA9IHAyLnkgfCAwO1xuICAgICAgICBjb25zdCBzdGVlcCA9IE1hdGguYWJzKHkxIC0geTApID4gTWF0aC5hYnMoeDEgLSB4MCk7XG4gICAgICAgIGxldCB0bXA6IG51bWJlcjtcbiAgICAgICAgY29uc3QgbGluZSA9IFtdO1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBpbWFnZVdyYXBwZXIuZGF0YTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBpbWFnZVdyYXBwZXIuc2l6ZS54O1xuICAgICAgICBsZXQgdmFsOiBudW1iZXI7XG4gICAgICAgIGxldCBtaW4gPSAyNTU7XG4gICAgICAgIGxldCBtYXggPSAwO1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWQoYTogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICAgICAgICAgIHZhbCA9IGltYWdlRGF0YVtiICogd2lkdGggKyBhXTtcbiAgICAgICAgICAgIG1pbiA9IHZhbCA8IG1pbiA/IHZhbCA6IG1pbjtcbiAgICAgICAgICAgIG1heCA9IHZhbCA+IG1heCA/IHZhbCA6IG1heDtcbiAgICAgICAgICAgIGxpbmUucHVzaCh2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZWVwKSB7XG4gICAgICAgICAgICB0bXAgPSB4MDtcbiAgICAgICAgICAgIHgwID0geTA7XG4gICAgICAgICAgICB5MCA9IHRtcDtcblxuICAgICAgICAgICAgdG1wID0geDE7XG4gICAgICAgICAgICB4MSA9IHkxO1xuICAgICAgICAgICAgeTEgPSB0bXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHgwID4geDEpIHtcbiAgICAgICAgICAgIHRtcCA9IHgwO1xuICAgICAgICAgICAgeDAgPSB4MTtcbiAgICAgICAgICAgIHgxID0gdG1wO1xuXG4gICAgICAgICAgICB0bXAgPSB5MDtcbiAgICAgICAgICAgIHkwID0geTE7XG4gICAgICAgICAgICB5MSA9IHRtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkZWx0YXggPSB4MSAtIHgwO1xuICAgICAgICBsZXQgZGVsdGF5ID0gTWF0aC5hYnMoeTEgLSB5MCk7XG4gICAgICAgIGxldCBlcnJvciA9IChkZWx0YXggLyAyKSB8IDA7XG4gICAgICAgIGxldCB5ID0geTA7XG4gICAgICAgIGxldCB5c3RlcCA9IHkwIDwgeTEgPyAxIDogLTE7XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IHgwOyB4IDwgeDE7IHgrKykge1xuICAgICAgICAgICAgaWYgKHN0ZWVwKSB7XG4gICAgICAgICAgICAgICAgcmVhZCh5LCB4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVhZCh4LCB5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVycm9yID0gZXJyb3IgLSBkZWx0YXk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgPCAwKSB7XG4gICAgICAgICAgICAgICAgeSArPSB5c3RlcDtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycm9yICsgZGVsdGF4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXhcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIHJlc3VsdCBmcm9tIGdldEJhcmNvZGVMaW5lIGludG8gYSBiaW5hcnkgcmVwcmVzZW50YXRpb25cbiAgICAgKiBhbHNvIGNvbnNpZGVyaW5nIHRoZSBmcmVxdWVuY3kgYW5kIHNsb3BlIG9mIHRoZSBzaWduYWwgZm9yIG1vcmUgcm9idXN0IHJlc3VsdHNcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHtsaW5lLCBtaW4sIG1heH1cbiAgICAgKi9cbiAgICB0b0JpbmFyeUxpbmUocmVzdWx0OiBCYXJjb2RlTGluZSk6IEJhcmNvZGVMaW5lIHtcbiAgICAgICAgY29uc3QgbWluID0gcmVzdWx0Lm1pbjtcbiAgICAgICAgY29uc3QgbWF4ID0gcmVzdWx0Lm1heDtcbiAgICAgICAgY29uc3QgbGluZSA9IHJlc3VsdC5saW5lO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBtaW4gKyAobWF4IC0gbWluKSAvIDI7XG4gICAgICAgIGNvbnN0IGV4dHJlbWEgPSBuZXcgQXJyYXk8eyBwb3M6IG51bWJlcjsgdmFsOiBudW1iZXI7IH0+KCk7XG4gICAgICAgIGxldCB0aHJlc2hvbGQgPSAobWF4IC0gbWluKSAvIDEyO1xuICAgICAgICBjb25zdCByVGhyZXNob2xkID0gLXRocmVzaG9sZDtcblxuICAgICAgICAvLyAxLiBmaW5kIGV4dHJlbWFcbiAgICAgICAgbGV0IGN1cnJlbnREaXIgPSBsaW5lWzBdID4gY2VudGVyID8gU2xvcGUuVXAgOiBTbG9wZS5Eb3duO1xuICAgICAgICBleHRyZW1hLnB1c2goe1xuICAgICAgICAgICAgcG9zOiAwLFxuICAgICAgICAgICAgdmFsOiBsaW5lWzBdXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzbG9wZSA9IChsaW5lW2kgKyAxXSAtIGxpbmVbaV0pO1xuICAgICAgICAgICAgY29uc3Qgc2xvcGUyID0gKGxpbmVbaSArIDJdIC0gbGluZVtpICsgMV0pO1xuICAgICAgICAgICAgbGV0IGRpcjogU2xvcGU7XG4gICAgICAgICAgICBpZiAoKHNsb3BlICsgc2xvcGUyKSA8IHJUaHJlc2hvbGQgJiYgbGluZVtpICsgMV0gPCAoY2VudGVyICogMS41KSkge1xuICAgICAgICAgICAgICAgIGRpciA9IFNsb3BlLkRvd247XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChzbG9wZSArIHNsb3BlMikgPiB0aHJlc2hvbGQgJiYgbGluZVtpICsgMV0gPiAoY2VudGVyICogMC41KSkge1xuICAgICAgICAgICAgICAgIGRpciA9IFNsb3BlLlVwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXIgPSBjdXJyZW50RGlyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudERpciAhPT0gZGlyKSB7XG4gICAgICAgICAgICAgICAgZXh0cmVtYS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcG9zOiBpLFxuICAgICAgICAgICAgICAgICAgICB2YWw6IGxpbmVbaV1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGlyID0gZGlyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dHJlbWEucHVzaCh7XG4gICAgICAgICAgICBwb3M6IGxpbmUubGVuZ3RoLFxuICAgICAgICAgICAgdmFsOiBsaW5lW2xpbmUubGVuZ3RoIC0gMV1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IGV4dHJlbWFbMF0ucG9zOyBqIDwgZXh0cmVtYVsxXS5wb3M7IGorKykge1xuICAgICAgICAgICAgbGluZVtqXSA9IGxpbmVbal0gPiBjZW50ZXIgPyAwIDogMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGl0ZXJhdGUgb3ZlciBleHRyZW1hIGFuZCBjb252ZXJ0IHRvIGJpbmFyeSBiYXNlZCBvbiBhdmcgYmV0d2VlbiBtaW5tYXhcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBleHRyZW1hLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKGV4dHJlbWFbaSArIDFdLnZhbCA+IGV4dHJlbWFbaV0udmFsKSB7XG4gICAgICAgICAgICAgICAgdGhyZXNob2xkID0gKGV4dHJlbWFbaV0udmFsICsgKChleHRyZW1hW2kgKyAxXS52YWwgLSBleHRyZW1hW2ldLnZhbCkgLyAzKSAqIDIpIHwgMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyZXNob2xkID0gKGV4dHJlbWFbaSArIDFdLnZhbCArICgoZXh0cmVtYVtpXS52YWwgLSBleHRyZW1hW2kgKyAxXS52YWwpIC8gMykpIHwgMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGV4dHJlbWFbaV0ucG9zOyBqIDwgZXh0cmVtYVtpICsgMV0ucG9zOyBqKyspIHtcbiAgICAgICAgICAgICAgICBsaW5lW2pdID0gbGluZVtqXSA+IHRocmVzaG9sZCA/IDAgOiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIHRocmVzaG9sZFxuICAgICAgICB9O1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBCYXJjb2RlSW5mbywgQmFyY29kZVJlYWRlciwgQmFyY29kZVJlYWRlckNvbmZpZyB9IGZyb20gJy4vYmFyY29kZS1yZWFkZXInO1xuaW1wb3J0IHsgRUFOUmVhZGVyIH0gZnJvbSAnLi9lYW4tcmVhZGVyJztcblxuZXhwb3J0IGNsYXNzIEVBTjhSZWFkZXIgZXh0ZW5kcyBFQU5SZWFkZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZz86IEJhcmNvZGVSZWFkZXJDb25maWcsIHN1cHBsZW1lbnRzPzogQXJyYXk8QmFyY29kZVJlYWRlcj4pIHtcbiAgICAgICAgc3VwZXIoY29uZmlnLCBzdXBwbGVtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gJ2Vhbl84JztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2RlY29kZVBheWxvYWQoY29kZTogQmFyY29kZUluZm8sIHJlc3VsdDogQXJyYXk8bnVtYmVyPiwgZGVjb2RlZENvZGVzOiBBcnJheTxCYXJjb2RlSW5mbz4pOiBCYXJjb2RlSW5mbyB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICBjb2RlID0gdGhpcy5fZGVjb2RlQ29kZShjb2RlLmVuZCwgdGhpcy5DT0RFX0dfU1RBUlQpO1xuICAgICAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChjb2RlLmNvZGUpO1xuICAgICAgICAgICAgZGVjb2RlZENvZGVzLnB1c2goY29kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlID0gdGhpcy5fZmluZFBhdHRlcm4odGhpcy5NSURETEVfUEFUVEVSTiwgY29kZS5lbmQsIDEsIGZhbHNlKTtcblxuICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBkZWNvZGVkQ29kZXMucHVzaChjb2RlKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgY29kZSA9IHRoaXMuX2RlY29kZUNvZGUoY29kZS5lbmQsIHRoaXMuQ09ERV9HX1NUQVJUKTtcblxuICAgICAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlY29kZWRDb2Rlcy5wdXNoKGNvZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goY29kZS5jb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJhcmNvZGUsIEJhcmNvZGVJbmZvLCBCYXJjb2RlUmVhZGVyLCBCYXJjb2RlUmVhZGVyQ29uZmlnIH0gZnJvbSAnLi9iYXJjb2RlLXJlYWRlcic7XG5pbXBvcnQgeyBFQU5SZWFkZXIgfSBmcm9tICcuL2Vhbi1yZWFkZXInO1xuXG5leHBvcnQgY2xhc3MgRUFOMlJlYWRlciBleHRlbmRzIEVBTlJlYWRlciB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnPzogQmFyY29kZVJlYWRlckNvbmZpZywgc3VwcGxlbWVudHM/OiBBcnJheTxCYXJjb2RlUmVhZGVyPikge1xuICAgICAgICBzdXBlcihjb25maWcsIHN1cHBsZW1lbnRzKTtcblxuICAgICAgICB0aGlzLl9mb3JtYXQgPSAnZWFuXzInO1xuICAgIH1cblxuICAgIGRlY29kZShyb3c/OiBBcnJheTxudW1iZXI+LCBzdGFydD86IG51bWJlcik6IEJhcmNvZGUge1xuICAgICAgICBjb25zdCBlbmQgPSByb3cubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICBjb25zdCBkZWNvZGVkQ29kZXMgPSBuZXcgQXJyYXk8QmFyY29kZUluZm8+KCk7XG4gICAgICAgIGxldCBvZmZzZXQgPSBzdGFydDtcbiAgICAgICAgbGV0IGNvZGVGcmVxdWVuY3kgPSAwO1xuICAgICAgICBsZXQgY29kZTogQmFyY29kZUluZm87XG5cbiAgICAgICAgdGhpcy5fcm93ID0gcm93O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMiAmJiBvZmZzZXQgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgY29kZSA9IHRoaXMuX2RlY29kZUNvZGUob2Zmc2V0KTtcbiAgICAgICAgICAgIGlmICghY29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVjb2RlZENvZGVzLnB1c2goY29kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChjb2RlLmNvZGUgJSAxMCk7XG4gICAgICAgICAgICBpZiAoY29kZS5jb2RlID49IHRoaXMuQ09ERV9HX1NUQVJUKSB7XG4gICAgICAgICAgICAgICAgY29kZUZyZXF1ZW5jeSB8PSAxIDw8ICgxIC0gaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSAhPT0gMSkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMuX25leHRTZXQodGhpcy5fcm93LCBjb2RlLmVuZCk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5fbmV4dFVuc2V0KHRoaXMuX3Jvdywgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoICE9PSAyIHx8IChwYXJzZUludChyZXN1bHQuam9pbignJykpICUgNCkgIT09IGNvZGVGcmVxdWVuY3kpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5qb2luKCcnKSxcbiAgICAgICAgICAgIGRlY29kZWRDb2RlcyxcbiAgICAgICAgICAgIGVuZDogY29kZS5lbmRcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCYXJjb2RlLCBCYXJjb2RlSW5mbywgQmFyY29kZVJlYWRlciwgQmFyY29kZVJlYWRlckNvbmZpZyB9IGZyb20gJy4vYmFyY29kZS1yZWFkZXInO1xuaW1wb3J0IHsgRUFOUmVhZGVyIH0gZnJvbSAnLi9lYW4tcmVhZGVyJztcblxuZXhwb3J0IGNsYXNzIEVBTjVSZWFkZXIgZXh0ZW5kcyBFQU5SZWFkZXIge1xuICAgIGdldCBDSEVDS19ESUdJVF9FTkNPRElOR1MoKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiBbMjQsIDIwLCAxOCwgMTcsIDEyLCA2LCAzLCAxMCwgOSwgNV07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoY29uZmlnPzogQmFyY29kZVJlYWRlckNvbmZpZywgc3VwcGxlbWVudHM/OiBBcnJheTxCYXJjb2RlUmVhZGVyPikge1xuICAgICAgICBzdXBlcihjb25maWcsIHN1cHBsZW1lbnRzKTtcblxuICAgICAgICB0aGlzLl9mb3JtYXQgPSAnZWFuXzUnO1xuICAgIH1cblxuICAgIGRlY29kZShyb3c/OiBBcnJheTxudW1iZXI+LCBzdGFydD86IG51bWJlcik6IEJhcmNvZGUge1xuICAgICAgICBjb25zdCBlbmQgPSByb3cubGVuZ3RoO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICBjb25zdCBkZWNvZGVkQ29kZXMgPSBuZXcgQXJyYXk8QmFyY29kZUluZm8+KCk7XG4gICAgICAgIGxldCBjb2RlRnJlcXVlbmN5ID0gMDtcbiAgICAgICAgbGV0IG9mZnNldCA9IHN0YXJ0O1xuICAgICAgICBsZXQgY29kZTogQmFyY29kZUluZm87XG5cbiAgICAgICAgdGhpcy5fcm93ID0gcm93O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNSAmJiBvZmZzZXQgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgY29kZSA9IHRoaXMuX2RlY29kZUNvZGUob2Zmc2V0KTtcbiAgICAgICAgICAgIGlmICghY29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVjb2RlZENvZGVzLnB1c2goY29kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChjb2RlLmNvZGUgJSAxMCk7XG4gICAgICAgICAgICBpZiAoY29kZS5jb2RlID49IHRoaXMuQ09ERV9HX1NUQVJUKSB7XG4gICAgICAgICAgICAgICAgY29kZUZyZXF1ZW5jeSB8PSAxIDw8ICg0IC0gaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSAhPT0gNCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMuX25leHRTZXQodGhpcy5fcm93LCBjb2RlLmVuZCk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5fbmV4dFVuc2V0KHRoaXMuX3Jvdywgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoICE9PSA1KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9leHRlbnNpb25DaGVja3N1bShyZXN1bHQpICE9PSB0aGlzLl9kZXRlcm1pbmVDaGVja0RpZ2l0KGNvZGVGcmVxdWVuY3kpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiByZXN1bHQuam9pbignJyksXG4gICAgICAgICAgICBkZWNvZGVkQ29kZXMsXG4gICAgICAgICAgICBlbmQ6IGNvZGUuZW5kXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGV0ZXJtaW5lQ2hlY2tEaWdpdChjb2RlRnJlcXVlbmN5OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY29kZUZyZXF1ZW5jeSA9PT0gdGhpcy5DSEVDS19ESUdJVF9FTkNPRElOR1NbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9leHRlbnNpb25DaGVja3N1bShyZXN1bHQ6IEFycmF5PG51bWJlcj4pOiBudW1iZXIge1xuICAgICAgICBsZXQgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7XG4gICAgICAgICAgICBzdW0gKz0gcmVzdWx0W2ldO1xuICAgICAgICB9XG4gICAgICAgIHN1bSAqPSAzO1xuICAgICAgICBmb3IgKGxldCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDIpIHtcbiAgICAgICAgICAgIHN1bSArPSByZXN1bHRbaV07XG4gICAgICAgIH1cbiAgICAgICAgc3VtICo9IDM7XG5cbiAgICAgICAgcmV0dXJuIHN1bSAlIDEwO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJhcmNvZGUsIEJhcmNvZGVSZWFkZXIsIEJhcmNvZGVSZWFkZXJDb25maWcgfSBmcm9tICcuL2JhcmNvZGUtcmVhZGVyJztcbmltcG9ydCB7IEVBTlJlYWRlciB9IGZyb20gJy4vZWFuLXJlYWRlcic7XG5cbmV4cG9ydCBjbGFzcyBVUENSZWFkZXIgZXh0ZW5kcyBFQU5SZWFkZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZz86IEJhcmNvZGVSZWFkZXJDb25maWcsIHN1cHBsZW1lbnRzPzogQXJyYXk8QmFyY29kZVJlYWRlcj4pIHtcbiAgICAgICAgc3VwZXIoY29uZmlnLCBzdXBwbGVtZW50cyk7XG5cbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gJ3VwY19hJztcbiAgICB9XG5cbiAgICBkZWNvZGUoKTogQmFyY29kZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLmRlY29kZSgpO1xuXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmNvZGUgJiYgcmVzdWx0LmNvZGUubGVuZ3RoID09PSAxMyAmJiByZXN1bHQuY29kZS5jaGFyQXQoMCkgPT09ICcwJykge1xuICAgICAgICAgICAgcmVzdWx0LmNvZGUgPSByZXN1bHQuY29kZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufSIsImltcG9ydCB7IEJhcmNvZGVJbmZvLCBCYXJjb2RlUmVhZGVyLCBCYXJjb2RlUmVhZGVyQ29uZmlnIH0gZnJvbSAnLi9iYXJjb2RlLXJlYWRlcic7XG5pbXBvcnQgeyBFQU5SZWFkZXIgfSBmcm9tICcuL2Vhbi1yZWFkZXInO1xuXG5jb25zdCBDT0RFX0ZSRVFVRU5DWSA9IFtbNTYsIDUyLCA1MCwgNDksIDQ0LCAzOCwgMzUsIDQyLCA0MSwgMzddLCBbNywgMTEsIDEzLCAxNCwgMTksIDI1LCAyOCwgMjEsIDIyLCAyNl1dO1xuXG5leHBvcnQgY2xhc3MgVVBDRVJlYWRlciBleHRlbmRzIEVBTlJlYWRlciB7XG4gICAgZ2V0IFNUT1BfUEFUVEVSTigpIHtcbiAgICAgICAgcmV0dXJuIFsxIC8gNiAqIDcsIDEgLyA2ICogNywgMSAvIDYgKiA3LCAxIC8gNiAqIDcsIDEgLyA2ICogNywgMSAvIDYgKiA3XTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihjb25maWc/OiBCYXJjb2RlUmVhZGVyQ29uZmlnLCBzdXBwbGVtZW50cz86IEFycmF5PEJhcmNvZGVSZWFkZXI+KSB7XG4gICAgICAgIHN1cGVyKGNvbmZpZywgc3VwcGxlbWVudHMpO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9ICd1cGNfZSc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZWNvZGVQYXlsb2FkKGNvZGU6IEJhcmNvZGVJbmZvLCByZXN1bHQ6IEFycmF5PG51bWJlcj4sIGRlY29kZWRDb2RlczogQXJyYXk8QmFyY29kZUluZm8+KTogQmFyY29kZUluZm8ge1xuICAgICAgICBsZXQgY29kZUZyZXF1ZW5jeSA9IDB4MDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgY29kZSA9IHRoaXMuX2RlY29kZUNvZGUoY29kZS5lbmQpO1xuICAgICAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29kZS5jb2RlID49IHRoaXMuQ09ERV9HX1NUQVJUKSB7XG4gICAgICAgICAgICAgICAgY29kZS5jb2RlID0gY29kZS5jb2RlIC0gdGhpcy5DT0RFX0dfU1RBUlQ7XG4gICAgICAgICAgICAgICAgY29kZUZyZXF1ZW5jeSB8PSAxIDw8ICg1IC0gaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChjb2RlLmNvZGUpO1xuICAgICAgICAgICAgZGVjb2RlZENvZGVzLnB1c2goY29kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2RldGVybWluZVBhcml0eShjb2RlRnJlcXVlbmN5LCByZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RldGVybWluZVBhcml0eShjb2RlRnJlcXVlbmN5OiBudW1iZXIsIHJlc3VsdDogQXJyYXk8bnVtYmVyPik6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGxldCBuclN5c3RlbSA9IDA7IG5yU3lzdGVtIDwgQ09ERV9GUkVRVUVOQ1kubGVuZ3RoOyBuclN5c3RlbSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IENPREVfRlJFUVVFTkNZW25yU3lzdGVtXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb2RlRnJlcXVlbmN5ID09PSBDT0RFX0ZSRVFVRU5DWVtuclN5c3RlbV1baV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuc2hpZnQobnJTeXN0ZW0pO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb252ZXJ0VG9VUENBKHJlc3VsdDogQXJyYXk8bnVtYmVyPik6IEFycmF5PG51bWJlcj4ge1xuICAgICAgICBjb25zdCBsYXN0RGlnaXQgPSByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDJdO1xuICAgICAgICBsZXQgdXBjYSA9IFtyZXN1bHRbMF1dO1xuXG4gICAgICAgIGlmIChsYXN0RGlnaXQgPD0gMikge1xuICAgICAgICAgICAgdXBjYSA9IHVwY2EuY29uY2F0KHJlc3VsdC5zbGljZSgxLCAzKSkuY29uY2F0KFtsYXN0RGlnaXQsIDAsIDAsIDAsIDBdKS5jb25jYXQocmVzdWx0LnNsaWNlKDMsIDYpKTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDMpIHtcbiAgICAgICAgICAgIHVwY2EgPSB1cGNhLmNvbmNhdChyZXN1bHQuc2xpY2UoMSwgNCkpLmNvbmNhdChbMCwgMCwgMCwgMCwgMF0pLmNvbmNhdChyZXN1bHQuc2xpY2UoNCwgNikpO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gNCkge1xuICAgICAgICAgICAgdXBjYSA9IHVwY2EuY29uY2F0KHJlc3VsdC5zbGljZSgxLCA1KSkuY29uY2F0KFswLCAwLCAwLCAwLCAwLCByZXN1bHRbNV1dKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVwY2EgPSB1cGNhLmNvbmNhdChyZXN1bHQuc2xpY2UoMSwgNikpLmNvbmNhdChbMCwgMCwgMCwgMCwgbGFzdERpZ2l0XSk7XG4gICAgICAgIH1cblxuICAgICAgICB1cGNhLnB1c2gocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSk7XG4gICAgICAgIHJldHVybiB1cGNhO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfY2hlY2tzdW0ocmVzdWx0OiBBcnJheTxudW1iZXI+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzdXBlci5fY2hlY2tzdW0odGhpcy5fY29udmVydFRvVVBDQShyZXN1bHQpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2ZpbmRFbmQob2Zmc2V0OiBudW1iZXIsIGlzV2hpdGU6IDAgfCAxKSB7XG4gICAgICAgIGlzV2hpdGUgPSAxO1xuICAgICAgICByZXR1cm4gc3VwZXIuX2ZpbmRFbmQob2Zmc2V0LCBpc1doaXRlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3ZlcmlmeVRyYWlsaW5nV2hpdGVzcGFjZShlbmRJbmZvOiBCYXJjb2RlSW5mbyk6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgY29uc3QgdHJhaWxpbmdXaGl0ZXNwYWNlRW5kID0gZW5kSW5mby5lbmQgKyAoZW5kSW5mby5lbmQgLSBlbmRJbmZvLnN0YXJ0KSAvIDI7XG5cbiAgICAgICAgaWYgKHRyYWlsaW5nV2hpdGVzcGFjZUVuZCA8IHRoaXMuX3Jvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXRjaFJhbmdlKGVuZEluZm8uZW5kLCB0cmFpbGluZ1doaXRlc3BhY2VFbmQsIDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZEluZm87XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59IiwiaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICcuLi9jb21tb24vbWVyZ2UnO1xuaW1wb3J0IHsgQmFyY29kZSwgQmFyY29kZUluZm8sIEJhcmNvZGVSZWFkZXIsIEJhcmNvZGVSZWFkZXJDb25maWcgfSBmcm9tICcuL2JhcmNvZGUtcmVhZGVyJztcblxuY29uc3QgTiA9IDE7XG5jb25zdCBXID0gMztcbmNvbnN0IFNUQVJUX1BBVFRFUk4gPSBbTiwgTiwgTiwgTl07XG5jb25zdCBTVE9QX1BBVFRFUk4gPSBbTiwgTiwgV107XG5jb25zdCBDT0RFX1BBVFRFUk4gPSBbXG4gICAgW04sIE4sIFcsIFcsIE5dLFxuICAgIFtXLCBOLCBOLCBOLCBXXSxcbiAgICBbTiwgVywgTiwgTiwgV10sXG4gICAgW1csIFcsIE4sIE4sIE5dLFxuICAgIFtOLCBOLCBXLCBOLCBXXSxcbiAgICBbVywgTiwgVywgTiwgTl0sXG4gICAgW04sIFcsIFcsIE4sIE5dLFxuICAgIFtOLCBOLCBOLCBXLCBXXSxcbiAgICBbVywgTiwgTiwgVywgTl0sXG4gICAgW04sIFcsIE4sIFcsIE5dXG5dO1xuY29uc3QgTUFYX0NPUlJFQ1RJT05fRkFDVE9SID0gNTtcblxuZXhwb3J0IGNsYXNzIEkyb2Y1UmVhZGVyIGV4dGVuZHMgQmFyY29kZVJlYWRlciB7XG4gICAgcHJpdmF0ZSBfYmFyU3BhY2VSYXRpbzogW251bWJlciwgbnVtYmVyXTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZz86IEJhcmNvZGVSZWFkZXJDb25maWcpIHtcbiAgICAgICAgc3VwZXIobWVyZ2Uoe1xuICAgICAgICAgICAgbm9ybWFsaXplQmFyU3BhY2VXaWR0aDogZmFsc2UgLy8gTm9ybWFsaXplIHRoZSB3aWR0aCBkaWZmZXJlbmNlIGJldHdlZW4gYmFycyBhbmQgc3BhY2VzXG4gICAgICAgIH0sIGNvbmZpZykpO1xuXG4gICAgICAgIHRoaXMuX2JhclNwYWNlUmF0aW8gPSBbMSwgMV07XG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9ICdpMm9mNSc7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm5vcm1hbGl6ZUJhclNwYWNlV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NpbmdsZUNvZGVFcnJvciA9IDAuMzg7XG4gICAgICAgICAgICB0aGlzLl9hdmVyYWdlQ29kZUVycm9yID0gMC4wOTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NpbmdsZUNvZGVFcnJvciA9IDAuNzg7XG4gICAgICAgICAgICB0aGlzLl9hdmVyYWdlQ29kZUVycm9yID0gMC4zODtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlY29kZSgpOiBCYXJjb2RlIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5fZmluZFN0YXJ0KCk7XG5cbiAgICAgICAgaWYgKCFzdGFydEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5kSW5mbyA9IHRoaXMuX2ZpbmRFbmQoKTtcblxuICAgICAgICBpZiAoIWVuZEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY291bnRlcnMgPSB0aGlzLl9maWxsQ291bnRlcnMoc3RhcnRJbmZvLmVuZCwgZW5kSW5mby5zdGFydCwgMCk7XG5cbiAgICAgICAgaWYgKGNvdW50ZXJzLmxlbmd0aCAlIDEwICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgIGNvbnN0IGRlY29kZWRDb2RlcyA9IG5ldyBBcnJheTxCYXJjb2RlSW5mbz4oKTtcblxuICAgICAgICBkZWNvZGVkQ29kZXMucHVzaChzdGFydEluZm8pO1xuXG4gICAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLl9kZWNvZGVQYXlsb2FkKGNvdW50ZXJzLCByZXN1bHQsIGRlY29kZWRDb2Rlcyk7XG5cbiAgICAgICAgaWYgKCFjb2RlIHx8IHJlc3VsdC5sZW5ndGggJSAyICE9PSAwIHx8IHJlc3VsdC5sZW5ndGggPCA2KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlY29kZWRDb2Rlcy5wdXNoKGVuZEluZm8pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiByZXN1bHQuam9pbignJyksXG4gICAgICAgICAgICBzdGFydDogc3RhcnRJbmZvLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmRJbmZvLmVuZCxcbiAgICAgICAgICAgIHN0YXJ0SW5mbyxcbiAgICAgICAgICAgIGRlY29kZWRDb2Rlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfbWF0Y2hQYXR0ZXJuKGNvdW50ZXI6IEFycmF5PG51bWJlcj4sIGNvZGU6IFJlYWRvbmx5QXJyYXk8bnVtYmVyPik6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5ub3JtYWxpemVCYXJTcGFjZVdpZHRoKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudGVyU3VtOiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDBdO1xuICAgICAgICAgICAgY29uc3QgY29kZVN1bTogW251bWJlciwgbnVtYmVyXSA9IFswLCAwXTtcbiAgICAgICAgICAgIGNvbnN0IGNvcnJlY3Rpb246IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMF07XG4gICAgICAgICAgICBjb25zdCBjb3JyZWN0aW9uUmF0aW8gPSBNQVhfQ09SUkVDVElPTl9GQUNUT1I7XG4gICAgICAgICAgICBjb25zdCBjb3JyZWN0aW9uUmF0aW9JbnZlcnNlID0gMSAvIGNvcnJlY3Rpb25SYXRpbztcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY291bnRlclN1bVtpICUgMl0gKz0gY291bnRlcltpXTtcbiAgICAgICAgICAgICAgICBjb2RlU3VtW2kgJSAyXSArPSBjb2RlW2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb3JyZWN0aW9uWzBdID0gY29kZVN1bVswXSAvIGNvdW50ZXJTdW1bMF07XG4gICAgICAgICAgICBjb3JyZWN0aW9uWzFdID0gY29kZVN1bVsxXSAvIGNvdW50ZXJTdW1bMV07XG5cbiAgICAgICAgICAgIGNvcnJlY3Rpb25bMF0gPSBNYXRoLm1heChNYXRoLm1pbihjb3JyZWN0aW9uWzBdLCBjb3JyZWN0aW9uUmF0aW8pLCBjb3JyZWN0aW9uUmF0aW9JbnZlcnNlKTtcbiAgICAgICAgICAgIGNvcnJlY3Rpb25bMV0gPSBNYXRoLm1heChNYXRoLm1pbihjb3JyZWN0aW9uWzFdLCBjb3JyZWN0aW9uUmF0aW8pLCBjb3JyZWN0aW9uUmF0aW9JbnZlcnNlKTtcbiAgICAgICAgICAgIHRoaXMuX2JhclNwYWNlUmF0aW8gPSBjb3JyZWN0aW9uO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50ZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyW2ldICo9IHRoaXMuX2JhclNwYWNlUmF0aW9baSAlIDJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLl9tYXRjaFBhdHRlcm4oY291bnRlciwgY29kZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9maW5kU3RhcnQoKTogQmFyY29kZUluZm8ge1xuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5fbmV4dFNldCh0aGlzLl9yb3cpO1xuICAgICAgICBsZXQgc3RhcnRJbmZvOiBCYXJjb2RlSW5mbztcblxuICAgICAgICB3aGlsZSAoIXN0YXJ0SW5mbykge1xuICAgICAgICAgICAgc3RhcnRJbmZvID0gdGhpcy5fZmluZFBhdHRlcm4oU1RBUlRfUEFUVEVSTiwgb2Zmc2V0LCAwLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICghc3RhcnRJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5hcnJvd0JhcldpZHRoID0gKHN0YXJ0SW5mby5lbmQgLSBzdGFydEluZm8uc3RhcnQpID4+IDI7XG4gICAgICAgICAgICBjb25zdCBsZWFkaW5nV2hpdGVzcGFjZVN0YXJ0ID0gc3RhcnRJbmZvLnN0YXJ0IC0gbmFycm93QmFyV2lkdGggKiAxMDtcblxuICAgICAgICAgICAgaWYgKGxlYWRpbmdXaGl0ZXNwYWNlU3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXRjaFJhbmdlKGxlYWRpbmdXaGl0ZXNwYWNlU3RhcnQsIHN0YXJ0SW5mby5zdGFydCwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0SW5mbztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9mZnNldCA9IHN0YXJ0SW5mby5lbmQ7XG4gICAgICAgICAgICBzdGFydEluZm8gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF92ZXJpZnlUcmFpbGluZ1doaXRlc3BhY2UoZW5kSW5mbzogQmFyY29kZUluZm8pOiBCYXJjb2RlSW5mbyB7XG4gICAgICAgIGNvbnN0IHRyYWlsaW5nV2hpdGVzcGFjZUVuZCA9IGVuZEluZm8uZW5kICsgKGVuZEluZm8uZW5kIC0gZW5kSW5mby5zdGFydCkgLyAyO1xuXG4gICAgICAgIGlmICh0cmFpbGluZ1doaXRlc3BhY2VFbmQgPCB0aGlzLl9yb3cubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF0Y2hSYW5nZShlbmRJbmZvLmVuZCwgdHJhaWxpbmdXaGl0ZXNwYWNlRW5kLCAwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbmRJbmZvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9maW5kRW5kKCk6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgdGhpcy5fcm93LnJldmVyc2UoKTtcblxuICAgICAgICBjb25zdCBlbmRJbmZvID0gdGhpcy5fZmluZFBhdHRlcm4oU1RPUF9QQVRURVJOLCB1bmRlZmluZWQsIDAsIGZhbHNlKTtcblxuICAgICAgICB0aGlzLl9yb3cucmV2ZXJzZSgpO1xuXG4gICAgICAgIGlmIChlbmRJbmZvID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldmVyc2UgbnVtYmVyc1xuICAgICAgICBjb25zdCBzdGFydCA9IGVuZEluZm8uc3RhcnQ7XG4gICAgICAgIGVuZEluZm8uc3RhcnQgPSB0aGlzLl9yb3cubGVuZ3RoIC0gZW5kSW5mby5lbmQ7XG4gICAgICAgIGVuZEluZm8uZW5kID0gdGhpcy5fcm93Lmxlbmd0aCAtIHN0YXJ0O1xuXG4gICAgICAgIHJldHVybiBlbmRJbmZvICE9PSBudWxsID8gdGhpcy5fdmVyaWZ5VHJhaWxpbmdXaGl0ZXNwYWNlKGVuZEluZm8pIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2RlY29kZUNvZGUoY291bnRlcjogQXJyYXk8bnVtYmVyPik6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgY29uc3QgYmVzdE1hdGNoOiBCYXJjb2RlSW5mbyA9IHtcbiAgICAgICAgICAgIGVycm9yOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgY29kZTogLTEsXG4gICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgIGVuZDogMFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAobGV0IGNvZGUgPSAwOyBjb2RlIDwgQ09ERV9QQVRURVJOLmxlbmd0aDsgY29kZSsrKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX21hdGNoUGF0dGVybihjb3VudGVyLCBDT0RFX1BBVFRFUk5bY29kZV0pO1xuICAgICAgICAgICAgaWYgKGVycm9yIDwgYmVzdE1hdGNoLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgYmVzdE1hdGNoLmNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgIGJlc3RNYXRjaC5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJlc3RNYXRjaC5lcnJvciA8IHRoaXMuQVZFUkFHRV9DT0RFX0VSUk9SID8gYmVzdE1hdGNoIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2RlY29kZVBheWxvYWQoY291bnRlcnM6IFJlYWRvbmx5QXJyYXk8bnVtYmVyPiwgcmVzdWx0OiBBcnJheTxudW1iZXI+LCBkZWNvZGVkQ29kZXM6IEFycmF5PEJhcmNvZGVJbmZvPik6IFtCYXJjb2RlSW5mbywgQmFyY29kZUluZm9dIHtcbiAgICAgICAgY29uc3QgY291bnRlckxlbmd0aCA9IGNvdW50ZXJzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY291bnRlcjAgPSBbMCwgMCwgMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IGNvdW50ZXIxID0gWzAsIDAsIDAsIDAsIDBdO1xuICAgICAgICBsZXQgY29kZTA6IEJhcmNvZGVJbmZvO1xuICAgICAgICBsZXQgY29kZTE6IEJhcmNvZGVJbmZvO1xuICAgICAgICBsZXQgcG9zID0gMDtcblxuICAgICAgICB3aGlsZSAocG9zIDwgY291bnRlckxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyMFtpXSA9IGNvdW50ZXJzW3Bvc10gKiB0aGlzLl9iYXJTcGFjZVJhdGlvWzBdO1xuICAgICAgICAgICAgICAgIGNvdW50ZXIxW2ldID0gY291bnRlcnNbcG9zICsgMV0gKiB0aGlzLl9iYXJTcGFjZVJhdGlvWzFdO1xuICAgICAgICAgICAgICAgIHBvcyArPSAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlMCA9IHRoaXMuX2RlY29kZUNvZGUoY291bnRlcjApO1xuICAgICAgICAgICAgaWYgKCFjb2RlMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlMSA9IHRoaXMuX2RlY29kZUNvZGUoY291bnRlcjEpO1xuICAgICAgICAgICAgaWYgKCFjb2RlMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQucHVzaChjb2RlMC5jb2RlLCBjb2RlMS5jb2RlKTtcbiAgICAgICAgICAgIGRlY29kZWRDb2Rlcy5wdXNoKGNvZGUwLCBjb2RlMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2NvZGUwLCBjb2RlMV07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQmFyY29kZSwgQmFyY29kZUluZm8sIEJhcmNvZGVSZWFkZXIsIEJhcmNvZGVSZWFkZXJDb25maWcgfSBmcm9tICcuL2JhcmNvZGUtcmVhZGVyJztcblxuY29uc3QgTiA9IDE7XG5jb25zdCBXID0gMztcbmNvbnN0IFNUQVJUX1BBVFRFUk4gPSBbVywgTiwgVywgTiwgTiwgTl07XG5jb25zdCBTVE9QX1BBVFRFUk4gPSBbVywgTiwgTiwgTiwgV107XG5jb25zdCBDT0RFX1BBVFRFUk4gPSBbXG4gICAgW04sIE4sIFcsIFcsIE5dLFxuICAgIFtXLCBOLCBOLCBOLCBXXSxcbiAgICBbTiwgVywgTiwgTiwgV10sXG4gICAgW1csIFcsIE4sIE4sIE5dLFxuICAgIFtOLCBOLCBXLCBOLCBXXSxcbiAgICBbVywgTiwgVywgTiwgTl0sXG4gICAgW04sIFcsIFcsIE4sIE5dLFxuICAgIFtOLCBOLCBOLCBXLCBXXSxcbiAgICBbVywgTiwgTiwgVywgTl0sXG4gICAgW04sIFcsIE4sIFcsIE5dXG5dO1xuY29uc3Qgc3RhcnRQYXR0ZXJuTGVuZ3RoID0gU1RBUlRfUEFUVEVSTi5yZWR1Y2UoKHN1bSwgdmFsKSA9PiBzdW0gKyB2YWwsIDApO1xuXG5leHBvcnQgY2xhc3MgVHdvT2ZGaXZlUmVhZGVyIGV4dGVuZHMgQmFyY29kZVJlYWRlciB7XG4gICAgcHJpdmF0ZSBfYmFyU3BhY2VSYXRpbzogW251bWJlciwgbnVtYmVyXTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZz86IEJhcmNvZGVSZWFkZXJDb25maWcpIHtcbiAgICAgICAgc3VwZXIoY29uZmlnKTtcblxuICAgICAgICB0aGlzLl9iYXJTcGFjZVJhdGlvID0gWzEsIDFdO1xuICAgICAgICB0aGlzLl9mb3JtYXQgPSAnMm9mNSc7XG4gICAgICAgIHRoaXMuX3NpbmdsZUNvZGVFcnJvciA9IDAuNzg7XG4gICAgICAgIHRoaXMuX2F2ZXJhZ2VDb2RlRXJyb3IgPSAwLjMwO1xuICAgIH1cblxuICAgIGRlY29kZSgpOiBCYXJjb2RlIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5fZmluZFN0YXJ0KCk7XG5cbiAgICAgICAgaWYgKCFzdGFydEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5kSW5mbyA9IHRoaXMuX2ZpbmRFbmQoKTtcblxuICAgICAgICBpZiAoIWVuZEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY291bnRlcnMgPSB0aGlzLl9maWxsQ291bnRlcnMoc3RhcnRJbmZvLmVuZCwgZW5kSW5mby5zdGFydCwgMCk7XG5cbiAgICAgICAgaWYgKGNvdW50ZXJzLmxlbmd0aCAlIDEwICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgIGNvbnN0IGRlY29kZWRDb2RlcyA9IG5ldyBBcnJheTxCYXJjb2RlSW5mbz4oKTtcblxuICAgICAgICBkZWNvZGVkQ29kZXMucHVzaChzdGFydEluZm8pO1xuXG4gICAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLl9kZWNvZGVQYXlsb2FkKGNvdW50ZXJzLCByZXN1bHQsIGRlY29kZWRDb2Rlcyk7XG5cbiAgICAgICAgaWYgKCFjb2RlIHx8IHJlc3VsdC5sZW5ndGggPCA1KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlY29kZWRDb2Rlcy5wdXNoKGVuZEluZm8pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiByZXN1bHQuam9pbignJyksXG4gICAgICAgICAgICBzdGFydDogc3RhcnRJbmZvLnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBlbmRJbmZvLmVuZCxcbiAgICAgICAgICAgIHN0YXJ0SW5mbyxcbiAgICAgICAgICAgIGRlY29kZWRDb2Rlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmluZFN0YXJ0KCk6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgbGV0IG9mZnNldCA9IHRoaXMuX25leHRTZXQodGhpcy5fcm93KTtcbiAgICAgICAgbGV0IG5hcnJvd0JhcldpZHRoID0gMTtcbiAgICAgICAgbGV0IHN0YXJ0SW5mbzogQmFyY29kZUluZm87XG5cbiAgICAgICAgd2hpbGUgKCFzdGFydEluZm8pIHtcbiAgICAgICAgICAgIHN0YXJ0SW5mbyA9IHRoaXMuX2ZpbmRQYXR0ZXJuKFNUQVJUX1BBVFRFUk4sIG9mZnNldCwgMCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmICghc3RhcnRJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hcnJvd0JhcldpZHRoID0gKHN0YXJ0SW5mby5lbmQgLSBzdGFydEluZm8uc3RhcnQpIC8gc3RhcnRQYXR0ZXJuTGVuZ3RoIHwgMDtcbiAgICAgICAgICAgIGNvbnN0IGxlYWRpbmdXaGl0ZXNwYWNlU3RhcnQgPSBzdGFydEluZm8uc3RhcnQgLSBuYXJyb3dCYXJXaWR0aCAqIDU7XG5cbiAgICAgICAgICAgIGlmIChsZWFkaW5nV2hpdGVzcGFjZVN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWF0Y2hSYW5nZShsZWFkaW5nV2hpdGVzcGFjZVN0YXJ0LCBzdGFydEluZm8uc3RhcnQsIDApKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEluZm87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvZmZzZXQgPSBzdGFydEluZm8uZW5kO1xuICAgICAgICAgICAgc3RhcnRJbmZvID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfdmVyaWZ5VHJhaWxpbmdXaGl0ZXNwYWNlKGVuZEluZm86IEJhcmNvZGVJbmZvKTogQmFyY29kZUluZm8ge1xuICAgICAgICBjb25zdCB0cmFpbGluZ1doaXRlc3BhY2VFbmQgPSBlbmRJbmZvLmVuZCArIChlbmRJbmZvLmVuZCAtIGVuZEluZm8uc3RhcnQpIC8gMjtcblxuICAgICAgICBpZiAodHJhaWxpbmdXaGl0ZXNwYWNlRW5kIDwgdGhpcy5fcm93Lmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX21hdGNoUmFuZ2UoZW5kSW5mby5lbmQsIHRyYWlsaW5nV2hpdGVzcGFjZUVuZCwgMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kSW5mbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZmluZEVuZCgpOiBCYXJjb2RlSW5mbyB7XG4gICAgICAgIHRoaXMuX3Jvdy5yZXZlcnNlKCk7XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5fbmV4dFNldCh0aGlzLl9yb3cpO1xuICAgICAgICBjb25zdCBlbmRJbmZvID0gdGhpcy5fZmluZFBhdHRlcm4oU1RPUF9QQVRURVJOLCBvZmZzZXQsIDAsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuX3Jvdy5yZXZlcnNlKCk7XG5cbiAgICAgICAgaWYgKGVuZEluZm8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmV2ZXJzZSBudW1iZXJzXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gZW5kSW5mby5zdGFydDtcbiAgICAgICAgZW5kSW5mby5zdGFydCA9IHRoaXMuX3Jvdy5sZW5ndGggLSBlbmRJbmZvLmVuZDtcbiAgICAgICAgZW5kSW5mby5lbmQgPSB0aGlzLl9yb3cubGVuZ3RoIC0gc3RhcnQ7XG5cbiAgICAgICAgcmV0dXJuIGVuZEluZm8gIT09IG51bGwgPyB0aGlzLl92ZXJpZnlUcmFpbGluZ1doaXRlc3BhY2UoZW5kSW5mbykgOiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZGVjb2RlQ29kZShjb3VudGVyOiBSZWFkb25seUFycmF5PG51bWJlcj4pOiBCYXJjb2RlSW5mbyB7XG4gICAgICAgIGNvbnN0IGJlc3RNYXRjaDogQmFyY29kZUluZm8gPSB7XG4gICAgICAgICAgICBlcnJvcjogTnVtYmVyLk1BWF9WQUxVRSxcbiAgICAgICAgICAgIGNvZGU6IC0xLFxuICAgICAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgICAgICBlbmQ6IDBcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKGxldCBjb2RlID0gMDsgY29kZSA8IENPREVfUEFUVEVSTi5sZW5ndGg7IGNvZGUrKykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9tYXRjaFBhdHRlcm4oY291bnRlciwgQ09ERV9QQVRURVJOW2NvZGVdKTtcbiAgICAgICAgICAgIGlmIChlcnJvciA8IGJlc3RNYXRjaC5lcnJvcikge1xuICAgICAgICAgICAgICAgIGJlc3RNYXRjaC5jb2RlID0gY29kZTtcbiAgICAgICAgICAgICAgICBiZXN0TWF0Y2guZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiZXN0TWF0Y2guZXJyb3IgPCB0aGlzLkFWRVJBR0VfQ09ERV9FUlJPUiA/IGJlc3RNYXRjaCA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZWNvZGVQYXlsb2FkKGNvdW50ZXJzOiBSZWFkb25seUFycmF5PG51bWJlcj4sIHJlc3VsdDogQXJyYXk8bnVtYmVyPiwgZGVjb2RlZENvZGVzOiBBcnJheTxCYXJjb2RlSW5mbz4pOiBCYXJjb2RlSW5mbyB7XG4gICAgICAgIGNvbnN0IGNvdW50ZXJMZW5ndGggPSBjb3VudGVycy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSBbMCwgMCwgMCwgMCwgMF07XG4gICAgICAgIGxldCBwb3MgPSAwO1xuICAgICAgICBsZXQgY29kZTogQmFyY29kZUluZm87XG5cbiAgICAgICAgd2hpbGUgKHBvcyA8IGNvdW50ZXJMZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcltpXSA9IGNvdW50ZXJzW3Bvc10gKiB0aGlzLl9iYXJTcGFjZVJhdGlvWzBdO1xuICAgICAgICAgICAgICAgIHBvcyArPSAyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlID0gdGhpcy5fZGVjb2RlQ29kZShjb3VudGVyKTtcblxuICAgICAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvZGUuY29kZSk7XG4gICAgICAgICAgICBkZWNvZGVkQ29kZXMucHVzaChjb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJhcmNvZGUsIEJhcmNvZGVJbmZvLCBCYXJjb2RlUmVhZGVyIH0gZnJvbSAnLi9iYXJjb2RlLXJlYWRlcic7XG5cbmNvbnN0IEFMUEhBQkVUSF9TVFJJTkcgPSAnMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLS4gJC8rJWFiY2QqJztcbmNvbnN0IEFMUEhBQkVUID0gbmV3IFVpbnQxNkFycmF5KFsuLi5BTFBIQUJFVEhfU1RSSU5HXS5tYXAoY2hhciA9PiBjaGFyLmNoYXJDb2RlQXQoMCkpKTtcbmNvbnN0IENIQVJBQ1RFUl9FTkNPRElOR1MgPSBuZXcgVWludDE2QXJyYXkoW1xuICAgIDB4MTE0LCAweDE0OCwgMHgxNDQsIDB4MTQyLCAweDEyOCwgMHgxMjQsIDB4MTIyLCAweDE1MCwgMHgxMTIsIDB4MTBBLCAweDFBOCwgMHgxQTQsIDB4MUEyLCAweDE5NCwgMHgxOTIsIDB4MThBLFxuICAgIDB4MTY4LCAweDE2NCwgMHgxNjIsIDB4MTM0LCAweDExQSwgMHgxNTgsIDB4MTRDLCAweDE0NiwgMHgxMkMsIDB4MTE2LCAweDFCNCwgMHgxQjIsIDB4MUFDLCAweDFBNiwgMHgxOTYsIDB4MTlBLFxuICAgIDB4MTZDLCAweDE2NiwgMHgxMzYsIDB4MTNBLCAweDEyRSwgMHgxRDQsIDB4MUQyLCAweDFDQSwgMHgxNkUsIDB4MTc2LCAweDFBRSwgMHgxMjYsIDB4MURBLCAweDFENiwgMHgxMzIsIDB4MTVFXG5dKTtcbmNvbnN0IEFTVEVSSVNLID0gMHgxNUU7XG5cbmV4cG9ydCBjbGFzcyBDb2RlOTNSZWFkZXIgZXh0ZW5kcyBCYXJjb2RlUmVhZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLl9mb3JtYXQgPSAnY29kZV85Myc7XG4gICAgfVxuXG4gICAgZGVjb2RlKCk6IEJhcmNvZGUge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuX2ZpbmRTdGFydCgpO1xuXG4gICAgICAgIGlmICghc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgICAgIGxldCBjb3VudGVycyA9IG5ldyBVaW50MTZBcnJheSg2KTtcbiAgICAgICAgbGV0IGRlY29kZWRDaGFyOiBzdHJpbmc7XG4gICAgICAgIGxldCBsYXN0U3RhcnQ6IG51bWJlcjtcbiAgICAgICAgbGV0IG5leHRTdGFydCA9IHRoaXMuX25leHRTZXQodGhpcy5fcm93LCBzdGFydC5lbmQpO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHRoaXMuX3RvQ291bnRlcnMobmV4dFN0YXJ0LCBjb3VudGVycyk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5fdG9QYXR0ZXJuKGNvdW50ZXJzKTtcbiAgICAgICAgICAgIGlmIChwYXR0ZXJuIDwgMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVjb2RlZENoYXIgPSB0aGlzLl9wYXR0ZXJuVG9DaGFyKHBhdHRlcm4pO1xuICAgICAgICAgICAgaWYgKGRlY29kZWRDaGFyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChkZWNvZGVkQ2hhcik7XG4gICAgICAgICAgICBsYXN0U3RhcnQgPSBuZXh0U3RhcnQ7XG4gICAgICAgICAgICBuZXh0U3RhcnQgKz0gY291bnRlcnMucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGl0ZW0sIDApO1xuICAgICAgICAgICAgbmV4dFN0YXJ0ID0gdGhpcy5fbmV4dFNldCh0aGlzLl9yb3csIG5leHRTdGFydCk7XG4gICAgICAgIH0gd2hpbGUgKGRlY29kZWRDaGFyICE9PSAnKicpO1xuICAgICAgICByZXN1bHQucG9wKCk7XG5cbiAgICAgICAgaWYgKCFyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fdmVyaWZ5RW5kKGxhc3RTdGFydCwgbmV4dFN0YXJ0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3ZlcmlmeUNoZWNrc3VtcyhyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCByZXN1bHQubGVuZ3RoIC0gMik7XG4gICAgICAgIGlmICgocmVzdWx0ID0gdGhpcy5fZGVjb2RlRXh0ZW5kZWQocmVzdWx0KSkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvZGU6IHJlc3VsdC5qb2luKCcnKSxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydC5zdGFydCxcbiAgICAgICAgICAgIGVuZDogbmV4dFN0YXJ0LFxuICAgICAgICAgICAgc3RhcnRJbmZvOiBzdGFydCxcbiAgICAgICAgICAgIGRlY29kZWRDb2RlczogcmVzdWx0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9wYXR0ZXJuVG9DaGFyKHBhdHRlcm46IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQ0hBUkFDVEVSX0VOQ09ESU5HUy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKENIQVJBQ1RFUl9FTkNPRElOR1NbaV0gPT09IHBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShBTFBIQUJFVFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmVyaWZ5RW5kKGxhc3RTdGFydDogbnVtYmVyLCBuZXh0U3RhcnQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAobGFzdFN0YXJ0ID09PSBuZXh0U3RhcnQgfHwgIXRoaXMuX3Jvd1tuZXh0U3RhcnRdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdG9QYXR0ZXJuKGNvdW50ZXJzOiBVaW50MTZBcnJheSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG51bUNvdW50ZXJzID0gY291bnRlcnMubGVuZ3RoO1xuICAgICAgICBsZXQgcGF0dGVybiA9IDA7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNvdW50ZXJzOyBpKyspIHtcbiAgICAgICAgICAgIHN1bSArPSBjb3VudGVyc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ291bnRlcnM7IGkrKykge1xuICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWQgPSBNYXRoLnJvdW5kKGNvdW50ZXJzW2ldICogOSAvIHN1bSk7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZCA8IDEgfHwgbm9ybWFsaXplZCA+IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKGkgJiAxKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9ybWFsaXplZDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAocGF0dGVybiA8PCAxKSB8IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuIDw8PSBub3JtYWxpemVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmluZFN0YXJ0KCk6IEJhcmNvZGVJbmZvIHtcbiAgICAgICAgY29uc3QgY291bnRlciA9IG5ldyBVaW50MTZBcnJheSg2KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5fbmV4dFNldCh0aGlzLl9yb3cpO1xuICAgICAgICBsZXQgcGF0dGVyblN0YXJ0ID0gb2Zmc2V0O1xuICAgICAgICBsZXQgY291bnRlclBvcyA9IDA7XG4gICAgICAgIGxldCBpc1doaXRlOiAwIHwgMSA9IDA7XG4gICAgICAgIGxldCB3aGl0ZVNwYWNlTXVzdFN0YXJ0OiBudW1iZXI7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IG9mZnNldDsgaSA8IHRoaXMuX3Jvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jvd1tpXSBeIGlzV2hpdGUpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyW2NvdW50ZXJQb3NdKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb3VudGVyUG9zID09PSBjb3VudGVyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBzdGFydCBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90b1BhdHRlcm4oY291bnRlcikgPT09IEFTVEVSSVNLKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlTXVzdFN0YXJ0ID0gTWF0aC5tYXgoMCwgcGF0dGVyblN0YXJ0IC0gKChpIC0gcGF0dGVyblN0YXJ0KSAvIDQpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWF0Y2hSYW5nZSh3aGl0ZVNwYWNlTXVzdFN0YXJ0LCBwYXR0ZXJuU3RhcnQsIDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHBhdHRlcm5TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5TdGFydCArPSBjb3VudGVyWzBdICsgY291bnRlclsxXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXJbal0gPSBjb3VudGVyW2ogKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb3VudGVyWzRdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcls1XSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJQb3MtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyUG9zKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvdW50ZXJbY291bnRlclBvc10gPSAxO1xuICAgICAgICAgICAgICAgIGlzV2hpdGUgPSBpc1doaXRlID8gMCA6IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kZWNvZGVFeHRlbmRlZChjaGFyQXJyYXk6IEFycmF5PHN0cmluZz4pOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gY2hhckFycmF5Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IGNoYXJBcnJheVtpXTtcbiAgICAgICAgICAgIGlmIChjaGFyID49ICdhJyAmJiBjaGFyIDw9ICdkJykge1xuICAgICAgICAgICAgICAgIGlmIChpID4gKGxlbmd0aCAtIDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2hhciA9IGNoYXJBcnJheVsrK2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDaGFyQ29kZSA9IG5leHRDaGFyLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICAgICAgbGV0IGRlY29kZWRDaGFyOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChjaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2EnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENoYXIgPj0gJ0EnICYmIG5leHRDaGFyIDw9ICdaJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0Q2hhckNvZGUgLSA2NCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hhciA+PSAnQScgJiYgbmV4dENoYXIgPD0gJ0UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHRDaGFyQ29kZSAtIDM4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dENoYXIgPj0gJ0YnICYmIG5leHRDaGFyIDw9ICdKJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0Q2hhckNvZGUgLSAxMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRDaGFyID49ICdLJyAmJiBuZXh0Q2hhciA8PSAnTycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUobmV4dENoYXJDb2RlICsgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0Q2hhciA+PSAnUCcgJiYgbmV4dENoYXIgPD0gJ1MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHRDaGFyQ29kZSArIDQzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dENoYXIgPj0gJ1QnICYmIG5leHRDaGFyIDw9ICdaJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENoYXIgPj0gJ0EnICYmIG5leHRDaGFyIDw9ICdPJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0Q2hhckNvZGUgLSAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRDaGFyID09PSAnWicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkQ2hhciA9ICc6JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRDaGFyID49ICdBJyAmJiBuZXh0Q2hhciA8PSAnWicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkQ2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUobmV4dENoYXJDb2RlICsgMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRlY29kZWRDaGFyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hhcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92ZXJpZnlDaGVja3N1bXMoY2hhckFycmF5OiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXRjaENoZWNrQ2hhcihjaGFyQXJyYXksIGNoYXJBcnJheS5sZW5ndGggLSAyLCAyMClcbiAgICAgICAgICAgICYmIHRoaXMuX21hdGNoQ2hlY2tDaGFyKGNoYXJBcnJheSwgY2hhckFycmF5Lmxlbmd0aCAtIDEsIDE1KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYXRjaENoZWNrQ2hhcihjaGFyQXJyYXk6IEFycmF5PHN0cmluZz4sIGluZGV4OiBudW1iZXIsIG1heFdlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGFycmF5VG9DaGVjayA9IGNoYXJBcnJheS5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5VG9DaGVjay5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHdlaWdodGVkU3VtcyA9IGFycmF5VG9DaGVjay5yZWR1Y2UoKHN1bSwgY2hhciwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2VpZ2h0ID0gKCgoaSAqIC0xKSArIChsZW5ndGggLSAxKSkgJSBtYXhXZWlnaHQpICsgMTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gQUxQSEFCRVQuaW5kZXhPZihjaGFyLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgcmV0dXJuIHN1bSArICh3ZWlnaHQgKiB2YWx1ZSk7XG4gICAgICAgIH0sIDApO1xuXG4gICAgICAgIGNvbnN0IGNoZWNrQ2hhciA9IEFMUEhBQkVUWyh3ZWlnaHRlZFN1bXMgJSA0NyldO1xuICAgICAgICByZXR1cm4gY2hlY2tDaGFyID09PSBjaGFyQXJyYXlbaW5kZXhdLmNoYXJDb2RlQXQoMCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQ29kZTEyOFJlYWRlciB9IGZyb20gJy4vY29kZS0xMjgtcmVhZGVyJztcbmltcG9ydCB7IENvZGUzOVJlYWRlciB9IGZyb20gJy4vY29kZS0zOS1yZWFkZXInO1xuaW1wb3J0IHsgQ29kZTM5VklOUmVhZGVyIH0gZnJvbSAnLi9jb2RlLTM5LXZpbi1yZWFkZXInO1xuaW1wb3J0IHsgQ29kYWJhclJlYWRlciB9IGZyb20gJy4vY29kYWJhci1yZWFkZXInO1xuaW1wb3J0IHsgRUFOUmVhZGVyIH0gZnJvbSAnLi9lYW4tcmVhZGVyJztcbmltcG9ydCB7IEVBTjhSZWFkZXIgfSBmcm9tICcuL2Vhbi04LXJlYWRlcic7XG5pbXBvcnQgeyBFQU4yUmVhZGVyIH0gZnJvbSAnLi9lYW4tMi1yZWFkZXInO1xuaW1wb3J0IHsgRUFONVJlYWRlciB9IGZyb20gJy4vZWFuLTUtcmVhZGVyJztcbmltcG9ydCB7IFVQQ1JlYWRlciB9IGZyb20gJy4vdXBjLXJlYWRlcic7XG5pbXBvcnQgeyBVUENFUmVhZGVyIH0gZnJvbSAnLi91cGMtZS1yZWFkZXInO1xuaW1wb3J0IHsgSTJvZjVSZWFkZXIgfSBmcm9tICcuL2kyb2Y1LXJlYWRlcic7XG5pbXBvcnQgeyBUd29PZkZpdmVSZWFkZXIgfSBmcm9tICcuLzJvZjUtcmVhZGVyJztcbmltcG9ydCB7IENvZGU5M1JlYWRlciB9IGZyb20gJy4vY29kZS05My1yZWFkZXInO1xuXG5leHBvcnQgY29uc3QgUmVhZGVycyA9IHtcbiAgICBjb2RlXzEyOF9yZWFkZXI6IENvZGUxMjhSZWFkZXIsXG4gICAgZWFuX3JlYWRlcjogRUFOUmVhZGVyLFxuICAgIGVhbl81X3JlYWRlcjogRUFONVJlYWRlcixcbiAgICBlYW5fMl9yZWFkZXI6IEVBTjJSZWFkZXIsXG4gICAgZWFuXzhfcmVhZGVyOiBFQU44UmVhZGVyLFxuICAgIGNvZGVfMzlfcmVhZGVyOiBDb2RlMzlSZWFkZXIsXG4gICAgY29kZV8zOV92aW5fcmVhZGVyOiBDb2RlMzlWSU5SZWFkZXIsXG4gICAgY29kYWJhcl9yZWFkZXI6IENvZGFiYXJSZWFkZXIsXG4gICAgdXBjX3JlYWRlcjogVVBDUmVhZGVyLFxuICAgIHVwY19lX3JlYWRlcjogVVBDRVJlYWRlcixcbiAgICBpMm9mNV9yZWFkZXI6IEkyb2Y1UmVhZGVyLFxuICAgICcyb2Y1X3JlYWRlcic6IFR3b09mRml2ZVJlYWRlcixcbiAgICBjb2RlXzkzX3JlYWRlcjogQ29kZTkzUmVhZGVyXG59O1xuIiwiaW1wb3J0IHsgZ2V0VXNlck1lZGlhLCBlbnVtZXJhdGVEZXZpY2VzIH0gZnJvbSAnLi4vY29tbW9uL21lZGlhLWRldmljZXMnO1xuXG5sZXQgX3N0cmVhbTogTWVkaWFTdHJlYW07XG5cbmV4cG9ydCBjb25zdCBDYW1lcmFBY2Nlc3MgPSB7XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gYXR0YWNoIHRoZSBjYW1lcmEtc3RyZWFtIHRvIGEgZ2l2ZW4gdmlkZW8gZWxlbWVudFxuICAgICAqIGFuZCBjYWxscyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgY29udGVudCBpcyByZWFkeVxuICAgICAqIEBwYXJhbSB2aWRlb1xuICAgICAqIEBwYXJhbSB2aWRlb0NvbnN0cmFpbnRzXG4gICAgICovXG4gICAgYXN5bmMgcmVxdWVzdCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgdmlkZW9Db25zdHJhaW50czogTWVkaWFUcmFja0NvbnN0cmFpbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDb25zdHJhaW50cyA9IENhbWVyYUFjY2Vzcy5waWNrQ29uc3RyYWludHModmlkZW9Db25zdHJhaW50cyk7XG4gICAgICAgIF9zdHJlYW0gPSBhd2FpdCBnZXRVc2VyTWVkaWEobm9ybWFsaXplZENvbnN0cmFpbnRzKTtcbiAgICAgICAgdmlkZW8uc3JjT2JqZWN0ID0gX3N0cmVhbTtcbiAgICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdhdXRvcGxheScsICcnKTtcbiAgICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdtdXRlZCcsICcnKTtcbiAgICAgICAgdmlkZW8uc2V0QXR0cmlidXRlKCdwbGF5c2lubGluZScsICcnKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsICgpID0+IHtcbiAgICAgICAgICAgIHZpZGVvLnBsYXkoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSkpLnRoZW4oX3dhaXRGb3JWaWRlby5iaW5kKG51bGwsIHZpZGVvKSk7XG4gICAgfSxcblxuICAgIHJlbGVhc2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRyYWNrcyA9IF9zdHJlYW0gJiYgX3N0cmVhbS5nZXRWaWRlb1RyYWNrcygpO1xuICAgICAgICBpZiAodHJhY2tzICYmIHRyYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRyYWNrc1swXS5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgX3N0cmVhbSA9IG51bGw7XG4gICAgfSxcblxuICAgIGFzeW5jIGVudW1lcmF0ZVZpZGVvRGV2aWNlcygpOiBQcm9taXNlPEFycmF5PE1lZGlhRGV2aWNlSW5mbz4+IHtcbiAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IGVudW1lcmF0ZURldmljZXMoKTtcbiAgICAgICAgcmV0dXJuIGRldmljZXMuZmlsdGVyKCh7IGtpbmQgfSkgPT4ga2luZCA9PT0gJ3ZpZGVvaW5wdXQnKTtcbiAgICB9LFxuXG4gICAgZ2V0QWN0aXZlU3RyZWFtTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdHJhY2sgPSBDYW1lcmFBY2Nlc3MuZ2V0QWN0aXZlVHJhY2soKTtcbiAgICAgICAgcmV0dXJuIHRyYWNrID8gdHJhY2subGFiZWwgOiAnJztcbiAgICB9LFxuXG4gICAgZ2V0QWN0aXZlVHJhY2soKSB7XG4gICAgICAgIGNvbnN0IHRyYWNrcyA9IF9zdHJlYW0gJiYgX3N0cmVhbS5nZXRWaWRlb1RyYWNrcygpO1xuICAgICAgICBpZiAodHJhY2tzICYmIHRyYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFja3NbMF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgcGlja0NvbnN0cmFpbnRzKHZpZGVvQ29uc3RyYWludHM6IE1lZGlhVHJhY2tDb25zdHJhaW50cyk6IE1lZGlhU3RyZWFtQ29uc3RyYWludHMge1xuICAgICAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0LCBmYWNpbmdNb2RlLCBhc3BlY3RSYXRpbywgZGV2aWNlSWQgfSA9IHZpZGVvQ29uc3RyYWludHM7XG4gICAgICAgIGNvbnN0IHsgbWluQXNwZWN0UmF0aW8sIGZhY2luZyB9ID0gdmlkZW9Db25zdHJhaW50cyBhcyBhbnk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBtaW5Bc3BlY3RSYXRpbyAhPT0gJ3VuZGVmaW5lZCcgJiYgbWluQXNwZWN0UmF0aW8gPiAwKSB7XG4gICAgICAgICAgICBhc3BlY3RSYXRpbyA9IG1pbkFzcGVjdFJhdGlvO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFdBUk5JTkc6IENvbnN0cmFpbnQgJ21pbkFzcGVjdFJhdGlvJyBpcyBkZXByZWNhdGVkOyBVc2UgJ2FzcGVjdFJhdGlvJyBpbnN0ZWFkYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGZhY2luZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZhY2luZ01vZGUgPSBmYWNpbmc7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgV0FSTklORzogQ29uc3RyYWludCAnZmFjaW5nJyBpcyBkZXByZWNhdGVkLiBVc2UgJ2ZhY2luZ01vZGUnIGluc3RlYWQnYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub3JtYWxpemVkQ29uc3RyYWludHMgPSBkZXZpY2VJZCAmJiBmYWNpbmdNb2RlID9cbiAgICAgICAgICAgIHsgd2lkdGgsIGhlaWdodCwgYXNwZWN0UmF0aW8sIGRldmljZUlkIH0gOiB7IHdpZHRoLCBoZWlnaHQsIGZhY2luZ01vZGUsIGFzcGVjdFJhdGlvLCBkZXZpY2VJZCB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpbzogZmFsc2UsXG4gICAgICAgICAgICB2aWRlbzogbm9ybWFsaXplZENvbnN0cmFpbnRzXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfd2FpdEZvclZpZGVvKHsgdmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBhdHRlbXB0cyA9IDEwO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrVmlkZW8oKSB7XG4gICAgICAgICAgICBpZiAoYXR0ZW1wdHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZGVvV2lkdGggPiAxMCAmJiB2aWRlb0hlaWdodCA+IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt2aWRlb1dpZHRofXB4IHggJHt2aWRlb0hlaWdodH1weGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChjaGVja1ZpZGVvLCA1MDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCdVbmFibGUgdG8gcGxheSB2aWRlbyBzdHJlYW0uIElzIHdlYmNhbSB3b3JraW5nPycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXR0ZW1wdHMtLTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja1ZpZGVvKCk7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBCb3ggfSBmcm9tICcuLi9jb21tb24vYm94JztcbmltcG9ydCB7IEltYWdlV3JhcHBlciB9IGZyb20gJy4uL2NvbW1vbi9pbWFnZS13cmFwcGVyJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vY29tbW9uL3BvaW50JztcbmltcG9ydCB7IFJlYWRlcnMgfSBmcm9tICcuLi9yZWFkZXIvaW5kZXgnO1xuaW1wb3J0IHsgQmFyY29kZSwgQmFyY29kZVJlYWRlciwgQmFyY29kZVJlYWRlckNvbmZpZywgQmFyY29kZVJlYWRlckRlY2xhcmF0aW9uLCBCYXJjb2RlUmVhZGVyVHlwZSB9IGZyb20gJy4uL3JlYWRlci9iYXJjb2RlLXJlYWRlcic7XG5pbXBvcnQgeyBCYXJjb2RlTGluZSwgQnJlc2VuaGFtIH0gZnJvbSAnLi9icmVzZW5oYW0nO1xuaW1wb3J0IHsgSW1hZ2VEZWJ1ZyB9IGZyb20gJy4uL2NvbW1vbi9pbWFnZS1kZWJ1Zyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFyY29kZURlY29kZXJDb25maWcge1xuICAgIGRlYnVnPzoge1xuICAgICAgICBkcmF3Qm91bmRpbmdCb3g/OiBib29sZWFuO1xuICAgICAgICBkcmF3U2NhbmxpbmU/OiBib29sZWFuO1xuICAgICAgICBzaG93RnJlcXVlbmN5PzogYm9vbGVhbjtcbiAgICAgICAgc2hvd1BhdHRlcm4/OiBib29sZWFuO1xuICAgIH07XG4gICAgbXVsdGlwbGU/OiBib29sZWFuO1xuICAgIHJlYWRlcnM/OiBBcnJheTxCYXJjb2RlUmVhZGVyRGVjbGFyYXRpb24+O1xufVxuXG50eXBlIExpbmUgPSBbUG9pbnQsIFBvaW50XTtcblxuZXhwb3J0IGludGVyZmFjZSBRdWFnZ2FCYXJjb2RlIHtcbiAgICBhbmdsZT86IG51bWJlcjtcbiAgICBiYXJjb2Rlcz86IEFycmF5PFF1YWdnYUJhcmNvZGU+OyAvLyBUT09EOiBkZWFsIHdpdGggbXVsdGlwbGUgcmVzdWx0c1xuICAgIGJveD86IEJveDtcbiAgICBib3hlcz86IEFycmF5PEJveD47IC8vIFRPT0Q6IGRlYWwgd2l0aCBtdWx0aXBsZSByZXN1bHRzXG4gICAgY29kZVJlc3VsdD86IEJhcmNvZGU7XG4gICAgZnJhbWU/OiBzdHJpbmc7XG4gICAgbGluZT86IExpbmU7XG4gICAgcGF0dGVybj86IEFycmF5PG51bWJlcj47XG4gICAgdGhyZXNob2xkPzogbnVtYmVyO1xufTtcblxuaW50ZXJmYWNlIEJhcmNvZGVBbmRCYXJjb2RlTGluZSB7XG4gICAgY29kZVJlc3VsdDogQmFyY29kZTtcbiAgICBiYXJjb2RlTGluZTogQmFyY29kZUxpbmU7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXJjb2RlRGVjb2RlciB7XG4gICAgcHJpdmF0ZSBfY29uZmlnOiBCYXJjb2RlRGVjb2RlckNvbmZpZztcbiAgICBwcml2YXRlIF9pbnB1dEltYWdlV3JhcHBlcjogSW1hZ2VXcmFwcGVyPFVpbnQ4QXJyYXk+O1xuICAgIHByaXZhdGUgX2ZyZXF1ZW5jeUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgcHJpdmF0ZSBfcGF0dGVybkNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheUNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICBwcml2YXRlIF9iYXJjb2RlUmVhZGVyczogQXJyYXk8QmFyY29kZVJlYWRlcj47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb25maWc6IEJhcmNvZGVEZWNvZGVyQ29uZmlnLCBpbnB1dEltYWdlV3JhcHBlcjogSW1hZ2VXcmFwcGVyPFVpbnQ4QXJyYXk+KSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5faW5wdXRJbWFnZVdyYXBwZXIgPSBpbnB1dEltYWdlV3JhcHBlcjtcbiAgICAgICAgdGhpcy5fYmFyY29kZVJlYWRlcnMgPSBbXTtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0aGlzLl9jb25maWcuZGVidWcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZGVidWdEaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZGVidWcuZGV0ZWN0aW9uJyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeUNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcy5mcmVxdWVuY3knKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZnJlcXVlbmN5Q2FudmFzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJlcXVlbmN5Q2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJlcXVlbmN5Q2FudmFzLmNsYXNzTmFtZSA9ICdmcmVxdWVuY3knO1xuICAgICAgICAgICAgICAgIGlmIChkZWJ1Z0Rpdikge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1Z0Rpdi5hcHBlbmRDaGlsZCh0aGlzLl9mcmVxdWVuY3lDYW52YXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2ZyZXF1ZW5jeUNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fY29uZmlnLmRlYnVnLnNob3dGcmVxdWVuY3kgPyAnYmxvY2snIDogJ25vbmUnO1xuXG4gICAgICAgICAgICB0aGlzLl9wYXR0ZXJuQ2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignY2FudmFzLnBhdHRlcm5CdWZmZXInKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fcGF0dGVybkNhbnZhcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhdHRlcm5DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXR0ZXJuQ2FudmFzLmNsYXNzTmFtZSA9ICdwYXR0ZXJuQnVmZmVyJztcbiAgICAgICAgICAgICAgICBpZiAoZGVidWdEaXYpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWdEaXYuYXBwZW5kQ2hpbGQodGhpcy5fcGF0dGVybkNhbnZhcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcGF0dGVybkNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fY29uZmlnLmRlYnVnLnNob3dQYXR0ZXJuID8gJ2Jsb2NrJyA6ICdub25lJztcblxuICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KCdjYW52YXMuZHJhd2luZ0J1ZmZlcicpO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUNvbnRleHQgPSBvdmVybGF5Q2FudmFzID8gb3ZlcmxheUNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2luaXRSZWFkZXJzKCk7XG4gICAgfVxuXG4gICAgZGVjb2RlRnJvbUJvdW5kaW5nQm94ZXMoYm94ZXM6IEFycmF5PEJveD4pOiBRdWFnZ2FCYXJjb2RlIHtcbiAgICAgICAgbGV0IGJhcmNvZGU6IFF1YWdnYUJhcmNvZGUgPSBudWxsO1xuXG4gICAgICAgIGlmIChib3hlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhcmNvZGVzID0gYm94ZXMubWFwKGJveCA9PiB0aGlzLmRlY29kZUZyb21Cb3VuZGluZ0JveChib3gpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBiYXJjb2RlcywgYm94ZXMgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChib3hlcy5zb21lKGJveCA9PiAhIShiYXJjb2RlID0gdGhpcy5kZWNvZGVGcm9tQm91bmRpbmdCb3goYm94KSkpKSB7XG4gICAgICAgICAgICAgICAgYmFyY29kZS5ib3hlcyA9IGJveGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJhcmNvZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2l0aCB0aGUgaGVscCBvZiB0aGUgY29uZmlndXJlZCByZWFkZXJzIHRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gZGV0ZWN0XG4gICAgICogYSB2YWxpZCBiYXJjb2RlIHBhdHRlcm4gd2l0aGluIHRoZSBnaXZlbiBhcmVhLlxuICAgICAqIEBwYXJhbSBib3ggVGhlIGFyZWEgdG8gc2VhcmNoIGluXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCB7Y29kZVJlc3VsdCwgbGluZSwgYW5nbGUsIHBhdHRlcm4sIHRocmVzaG9sZH1cbiAgICAgKi9cbiAgICBkZWNvZGVGcm9tQm91bmRpbmdCb3goYm94OiBCb3gpOiBRdWFnZ2FCYXJjb2RlIHtcbiAgICAgICAgY29uc3QgZGVidWcgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHRoaXMuX292ZXJsYXlDb250ZXh0ICYmIHRoaXMuX2NvbmZpZy5kZWJ1ZztcblxuICAgICAgICBpZiAoZGVidWcgJiYgZGVidWcuZHJhd0JvdW5kaW5nQm94KSB7XG4gICAgICAgICAgICB0aGlzLl9kcmF3UGF0aChib3gsICdibHVlJywgMik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGluZSA9IHRoaXMuX2dldExpbmUoYm94KTtcblxuICAgICAgICBpZiAobGluZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIobGluZVsxXS55IC0gbGluZVswXS55LCBsaW5lWzFdLnggLSBsaW5lWzBdLngpO1xuICAgICAgICBsaW5lID0gdGhpcy5fZ2V0RXh0ZW5kZWRMaW5lKGxpbmUsIGFuZ2xlKTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fdHJ5RGVjb2RlKGxpbmUpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLl90cnlEZWNvZGVCcnV0ZUZvcmNlKGJveCwgbGluZSwgYW5nbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVidWcgJiYgZGVidWcuZHJhd1NjYW5saW5lKSB7XG4gICAgICAgICAgICB0aGlzLl9kcmF3UGF0aChsaW5lLCAncmVkJywgMyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYW5nbGUsXG4gICAgICAgICAgICBib3gsXG4gICAgICAgICAgICBjb2RlUmVzdWx0OiByZXN1bHQuY29kZVJlc3VsdCxcbiAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICBwYXR0ZXJuOiByZXN1bHQuYmFyY29kZUxpbmUubGluZSxcbiAgICAgICAgICAgIHRocmVzaG9sZDogcmVzdWx0LmJhcmNvZGVMaW5lLnRocmVzaG9sZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHNldFJlYWRlcnMocmVhZGVyczogQXJyYXk8QmFyY29kZVJlYWRlckRlY2xhcmF0aW9uPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb25maWcucmVhZGVycyA9IHJlYWRlcnM7XG4gICAgICAgIHRoaXMuX2JhcmNvZGVSZWFkZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX2luaXRSZWFkZXJzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFJlYWRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5yZWFkZXJzLmZvckVhY2gocmVhZGVyQ29uZmlnID0+IHtcbiAgICAgICAgICAgIGxldCByZWFkZXI6IEJhcmNvZGVSZWFkZXJUeXBlO1xuICAgICAgICAgICAgbGV0IGNvbmZpZ3VyYXRpb246IEJhcmNvZGVSZWFkZXJDb25maWcgPSB7fTtcbiAgICAgICAgICAgIGxldCBzdXBwbGVtZW50cyA9IFtdO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlYWRlckNvbmZpZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkZXJDb25maWcuZm9ybWF0O1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSByZWFkZXJDb25maWcuY29uZmlnIHx8IHt9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVhZGVyQ29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRlckNvbmZpZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQmVmb3JlIHJlZ2lzdGVyaW5nIHJlYWRlcjonLCByZWFkZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5zdXBwbGVtZW50cykge1xuICAgICAgICAgICAgICAgIHN1cHBsZW1lbnRzID0gY29uZmlndXJhdGlvbi5zdXBwbGVtZW50cy5tYXAoc3VwcGxlbWVudCA9PiBuZXcgUmVhZGVyc1tzdXBwbGVtZW50XSgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fYmFyY29kZVJlYWRlcnMucHVzaChuZXcgUmVhZGVyc1tyZWFkZXJdKGNvbmZpZ3VyYXRpb24sIHN1cHBsZW1lbnRzKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmVnaXN0ZXJlZCBSZWFkZXJzOicsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fYmFyY29kZVJlYWRlcnMubWFwKCh7IGNvbmZpZywgRk9STUFUIH0pID0+IEpTT04uc3RyaW5naWZ5KHsgY29uZmlnLCBGT1JNQVQgfSkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGV4dGVuZCB0aGUgbGluZSBvbiBib3RoIGVuZHNcbiAgICAgKiBAcGFyYW0gbGluZVxuICAgICAqIEBwYXJhbSBhbmdsZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEV4dGVuZGVkTGluZShsaW5lOiBMaW5lLCBhbmdsZTogbnVtYmVyKTogTGluZSB7XG4gICAgICAgIGZ1bmN0aW9uIGV4dGVuZExpbmUoYW1vdW50OiBudW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBhbW91bnQgKiBNYXRoLnNpbihhbmdsZSksXG4gICAgICAgICAgICAgICAgeDogYW1vdW50ICogTWF0aC5jb3MoYW5nbGUpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsaW5lWzBdLnkgLT0gZXh0ZW5zaW9uLnk7XG4gICAgICAgICAgICBsaW5lWzBdLnggLT0gZXh0ZW5zaW9uLng7XG4gICAgICAgICAgICBsaW5lWzFdLnkgKz0gZXh0ZW5zaW9uLnk7XG4gICAgICAgICAgICBsaW5lWzFdLnggKz0gZXh0ZW5zaW9uLng7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lTGVuZ3RoID0gTWF0aC5zcXJ0KChsaW5lWzFdLnkgLSBsaW5lWzBdLnkpICoqIDIgKyAobGluZVsxXS54IC0gbGluZVswXS54KSAqKiAyKTtcbiAgICAgICAgbGV0IGV4dGVuc2lvbkxlbmd0aCA9IGxpbmVMZW5ndGggKiAwLjEgfCAwO1xuXG4gICAgICAgIGV4dGVuZExpbmUoZXh0ZW5zaW9uTGVuZ3RoKTtcblxuICAgICAgICAvLyBjaGVjayBpZiBpbnNpZGUgaW1hZ2VcbiAgICAgICAgd2hpbGUgKGV4dGVuc2lvbkxlbmd0aCA+IDEgJiYgKCF0aGlzLl9pbnB1dEltYWdlV3JhcHBlci5pbkltYWdlV2l0aEJvcmRlcihsaW5lWzBdLCAwKVxuICAgICAgICAgICAgfHwgIXRoaXMuX2lucHV0SW1hZ2VXcmFwcGVyLmluSW1hZ2VXaXRoQm9yZGVyKGxpbmVbMV0sIDApKSkge1xuICAgICAgICAgICAgZXh0ZW5zaW9uTGVuZ3RoID4+PSAxO1xuICAgICAgICAgICAgZXh0ZW5kTGluZSgtZXh0ZW5zaW9uTGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaW5lO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldExpbmUoYm94OiBCb3gpOiBMaW5lIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICB4OiAoYm94WzFdLnggKyBib3hbMF0ueCkgLyAyLFxuICAgICAgICAgICAgeTogKGJveFsxXS55ICsgYm94WzBdLnkpIC8gMlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB4OiAoYm94WzNdLnggKyBib3hbMl0ueCkgLyAyLFxuICAgICAgICAgICAgeTogKGJveFszXS55ICsgYm94WzJdLnkpIC8gMlxuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cnlEZWNvZGUobGluZTogTGluZSk6IEJhcmNvZGVBbmRCYXJjb2RlTGluZSB7XG4gICAgICAgIGNvbnN0IGRlYnVnID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0aGlzLl9jb25maWcuZGVidWc7XG5cbiAgICAgICAgaWYgKGRlYnVnICYmIHRoaXMuX292ZXJsYXlDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLl9kcmF3UGF0aChsaW5lLCAncmVkJywgMyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYmFyY29kZUxpbmUgPSBCcmVzZW5oYW0uZ2V0QmFyY29kZUxpbmUodGhpcy5faW5wdXRJbWFnZVdyYXBwZXIsIGxpbmVbMF0sIGxpbmVbMV0pO1xuXG4gICAgICAgIGlmIChkZWJ1ZyAmJiBkZWJ1Zy5zaG93RnJlcXVlbmN5KSB7XG4gICAgICAgICAgICB0aGlzLl9wcmludEZyZXF1ZW5jeShiYXJjb2RlTGluZS5saW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJhcmNvZGVMaW5lID0gQnJlc2VuaGFtLnRvQmluYXJ5TGluZShiYXJjb2RlTGluZSk7XG5cbiAgICAgICAgaWYgKGRlYnVnICYmIGRlYnVnLnNob3dQYXR0ZXJuKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmludFBhdHRlcm4oYmFyY29kZUxpbmUubGluZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29kZVJlc3VsdDogQmFyY29kZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fYmFyY29kZVJlYWRlcnMuc29tZShyZWFkZXIgPT4gISEoY29kZVJlc3VsdCA9IHJlYWRlci5kZWNvZGVQYXR0ZXJuKGJhcmNvZGVMaW5lLmxpbmUpKSk7XG5cbiAgICAgICAgcmV0dXJuIGNvZGVSZXN1bHQgPyB7IGNvZGVSZXN1bHQsIGJhcmNvZGVMaW5lIH0gOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNsaWNlcyB0aGUgZ2l2ZW4gYXJlYSBhcGFydCBhbmQgdHJpZXMgdG8gZGV0ZWN0IGEgYmFyY29kZS1wYXR0ZXJuIGZvciBlYWNoIHNsaWNlLlxuICAgICAqIEl0IHJldHVybnMgdGhlIGRlY29kZWQgYmFyY29kZSwgb3IgbnVsbCBpZiBub3RoaW5nIHdhcyBmb3VuZFxuICAgICAqIEBwYXJhbSBib3hcbiAgICAgKiBAcGFyYW0gbGluZVxuICAgICAqIEBwYXJhbSBsaW5lQW5nbGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF90cnlEZWNvZGVCcnV0ZUZvcmNlKGJveDogQm94LCBsaW5lOiBMaW5lLCBsaW5lQW5nbGU6IG51bWJlcik6IEJhcmNvZGVBbmRCYXJjb2RlTGluZSB7XG4gICAgICAgIGNvbnN0IHNpZGVMZW5ndGggPSBNYXRoLnNxcnQoKGJveFsxXS54IC0gYm94WzBdLngpICoqIDIgKyAoYm94WzFdLnkgLSBib3hbMF0ueSkgKiogMik7XG4gICAgICAgIGNvbnN0IHNsaWNlcyA9IDE2O1xuICAgICAgICBjb25zdCB4ZGlyID0gTWF0aC5zaW4obGluZUFuZ2xlKTtcbiAgICAgICAgY29uc3QgeWRpciA9IE1hdGguY29zKGxpbmVBbmdsZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzbGljZXM7IGkrKykge1xuICAgICAgICAgICAgLy8gbW92ZSBsaW5lIHBlcnBlbmRpY3VsYXIgdG8gYW5nbGVcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IHNpZGVMZW5ndGggLyBzbGljZXMgKiBpICogKGkgJSAyID09PSAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgIGxpbmVbMF0ueSArPSBkaXIgKiB4ZGlyO1xuICAgICAgICAgICAgbGluZVswXS54IC09IGRpciAqIHlkaXI7XG4gICAgICAgICAgICBsaW5lWzFdLnkgKz0gZGlyICogeGRpcjtcbiAgICAgICAgICAgIGxpbmVbMV0ueCAtPSBkaXIgKiB5ZGlyO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl90cnlEZWNvZGUobGluZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGRldmVsb3BtZW50IG9ubHlcbiAgICAgKi9cbiAgICBwcml2YXRlIF9wcmludEZyZXF1ZW5jeShsaW5lOiBBcnJheTxudW1iZXI+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9mcmVxdWVuY3lDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgdGhpcy5fZnJlcXVlbmN5Q2FudmFzLndpZHRoID0gbGluZS5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2ZyZXF1ZW5jeUNhbnZhcy5oZWlnaHQgPSAyNTY7XG5cbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdibHVlJztcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKGksIDI1NSk7XG4gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhpLCAyNTUgLSBsaW5lW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgZGV2ZWxvcG1lbnQgb25seVxuICAgICAqL1xuICAgIHByaXZhdGUgX3ByaW50UGF0dGVybihsaW5lOiBBcnJheTxudW1iZXI+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9wYXR0ZXJuQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAgICAgdGhpcy5fcGF0dGVybkNhbnZhcy53aWR0aCA9IGxpbmUubGVuZ3RoO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdibGFjayc7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGluZVtpXSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoaSwgMCwgMSwgMTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2RyYXdQYXRoKHBhdGg6IEFycmF5PFBvaW50PiwgY29sb3I6IHN0cmluZywgbGluZVdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgSW1hZ2VEZWJ1Zy5kcmF3UGF0aChwYXRoLCB0aGlzLl9vdmVybGF5Q29udGV4dCwgY29sb3IsIGxpbmVXaWR0aCk7XG4gICAgfVxufVxuIiwiXG5leHBvcnQgZnVuY3Rpb24gZW51bWVyYXRlRGV2aWNlcygpOiBQcm9taXNlPEFycmF5PE1lZGlhRGV2aWNlSW5mbz4+IHtcbiAgICBpZiAobmF2aWdhdG9yLm1lZGlhRGV2aWNlcyAmJiB0eXBlb2YgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignZW51bWVyYXRlRGV2aWNlcyBpcyBub3QgZGVmaW5lZCcpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJNZWRpYShjb25zdHJhaW50czogTWVkaWFTdHJlYW1Db25zdHJhaW50cyk6IFByb21pc2U8TWVkaWFTdHJlYW0+IHtcbiAgICBpZiAobmF2aWdhdG9yLm1lZGlhRGV2aWNlcyAmJiB0eXBlb2YgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignZ2V0VXNlck1lZGlhIGlzIG5vdCBkZWZpbmVkJykpO1xufVxuIiwiaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9jb21tb24vcG9pbnQnO1xuaW1wb3J0IHsgSW5wdXRTdHJlYW0gfSBmcm9tICcuL2lucHV0LXN0cmVhbSc7XG5pbXBvcnQgeyBJbnB1dFN0cmVhbUNvbmZpZyB9IGZyb20gJy4vaW5wdXQtc3RyZWFtLWNvbmZpZyc7XG5cbmNvbnN0IG5kYXJyYXkgPSByZXF1aXJlKCduZGFycmF5Jyk7XG50eXBlIG5kYXJyYXk8X1QgPSBudW1iZXI+ID0gYW55O1xuXG5leHBvcnQgY2xhc3MgRnJhbWVHcmFiYmVyIHtcbiAgICBwcml2YXRlIF9pbnB1dFN0cmVhbTogSW5wdXRTdHJlYW07XG4gICAgcHJpdmF0ZSBfc3RyZWFtQ29uZmlnOiBJbnB1dFN0cmVhbUNvbmZpZztcbiAgICBwcml2YXRlIF9kYXRhOiBVaW50OEFycmF5O1xuICAgIHByaXZhdGUgX2NhbnZhc0RhdGE6IFVpbnQ4QXJyYXk7XG4gICAgcHJpdmF0ZSBfZ3JheURhdGE6IFVpbnQ4QXJyYXk7XG4gICAgcHJpdmF0ZSBfY2FudmFzSW1hZ2VBcnJheTogbmRhcnJheTxudW1iZXI+O1xuICAgIHByaXZhdGUgX2dyYXlJbWFnZUFycmF5OiBuZGFycmF5PG51bWJlcj47XG4gICAgcHJpdmF0ZSBfdGFyZ2V0SW1hZ2VBcnJheTogbmRhcnJheTxudW1iZXI+O1xuICAgIHByaXZhdGUgX2NhbnZhc0hlaWdodDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2NhbnZhc1dpZHRoOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfdmlkZW9IZWlnaHQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF92aWRlb1dpZHRoOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfd2lkdGg6IG51bWJlcjtcbiAgICBwcml2YXRlIF9zdGVwU2l6ZVg6IG51bWJlcjtcbiAgICBwcml2YXRlIF9zdGVwU2l6ZVk6IG51bWJlcjtcbiAgICBwcml2YXRlIF90b3BMZWZ0OiBQb2ludDtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0U3RyZWFtOiBJbnB1dFN0cmVhbSkge1xuICAgICAgICB0aGlzLl9pbnB1dFN0cmVhbSA9IGlucHV0U3RyZWFtO1xuICAgICAgICB0aGlzLl9zdHJlYW1Db25maWcgPSBpbnB1dFN0cmVhbS5jb25maWc7XG4gICAgICAgIHRoaXMuX3ZpZGVvSGVpZ2h0ID0gaW5wdXRTdHJlYW0ucmVhbEhlaWdodDtcbiAgICAgICAgdGhpcy5fdmlkZW9XaWR0aCA9IGlucHV0U3RyZWFtLnJlYWxXaWR0aDtcbiAgICAgICAgdGhpcy5fY2FudmFzSGVpZ2h0ID0gaW5wdXRTdHJlYW0uY2FudmFzSGVpZ2h0O1xuICAgICAgICB0aGlzLl9jYW52YXNXaWR0aCA9IGlucHV0U3RyZWFtLmNhbnZhc1dpZHRoO1xuICAgICAgICB0aGlzLl93aWR0aCA9IGlucHV0U3RyZWFtLndpZHRoO1xuICAgICAgICB0aGlzLl9oZWlnaHQgPSBpbnB1dFN0cmVhbS5oZWlnaHQ7XG4gICAgICAgIHRoaXMuX3RvcExlZnQgPSBpbnB1dFN0cmVhbS50b3BMZWZ0O1xuICAgICAgICB0aGlzLl9kYXRhID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fd2lkdGggKiB0aGlzLl9oZWlnaHQpO1xuICAgICAgICB0aGlzLl9ncmF5RGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMuX3ZpZGVvV2lkdGggKiB0aGlzLl92aWRlb0hlaWdodCk7XG4gICAgICAgIHRoaXMuX2NhbnZhc0RhdGEgPSBuZXcgVWludDhBcnJheSh0aGlzLl9jYW52YXNXaWR0aCAqIHRoaXMuX2NhbnZhc0hlaWdodCk7XG4gICAgICAgIHRoaXMuX2dyYXlJbWFnZUFycmF5ID0gbmRhcnJheSh0aGlzLl9ncmF5RGF0YSwgW3RoaXMuX3ZpZGVvSGVpZ2h0LCB0aGlzLl92aWRlb1dpZHRoXSkudHJhbnNwb3NlKDEsIDApO1xuICAgICAgICB0aGlzLl9jYW52YXNJbWFnZUFycmF5ID0gbmRhcnJheSh0aGlzLl9jYW52YXNEYXRhLCBbdGhpcy5fY2FudmFzSGVpZ2h0LCB0aGlzLl9jYW52YXNXaWR0aF0pLnRyYW5zcG9zZSgxLCAwKTtcbiAgICAgICAgdGhpcy5fdGFyZ2V0SW1hZ2VBcnJheSA9IHRoaXMuX2NhbnZhc0ltYWdlQXJyYXlcbiAgICAgICAgICAgIC5oaSh0aGlzLl90b3BMZWZ0LnggKyB0aGlzLl93aWR0aCwgdGhpcy5fdG9wTGVmdC55ICsgdGhpcy5faGVpZ2h0KS5sbyh0aGlzLl90b3BMZWZ0LngsIHRoaXMuX3RvcExlZnQueSk7XG4gICAgICAgIHRoaXMuX3N0ZXBTaXplWCA9IHRoaXMuX3ZpZGVvV2lkdGggLyB0aGlzLl9jYW52YXNXaWR0aDtcbiAgICAgICAgdGhpcy5fc3RlcFNpemVZID0gdGhpcy5fdmlkZW9IZWlnaHQgLyB0aGlzLl9jYW52YXNIZWlnaHQ7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0ZyYW1lR3JhYmJlcicsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHZpZGVvU2l6ZTogdGhpcy5fZ3JheUltYWdlQXJyYXkuc2hhcGUsXG4gICAgICAgICAgICBjYW52YXNTaXplOiB0aGlzLl9jYW52YXNJbWFnZUFycmF5LnNoYXBlLFxuICAgICAgICAgICAgc3RlcFNpemU6IFt0aGlzLl9zdGVwU2l6ZVgsIHRoaXMuX3N0ZXBTaXplWV0sXG4gICAgICAgICAgICBzaXplOiB0aGlzLl90YXJnZXRJbWFnZUFycmF5LnNoYXBlLFxuICAgICAgICAgICAgdG9wTGVmdDogdGhpcy5fdG9wTGVmdFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyBhIGZyYW1lIGZyb20gdGhlIGlucHV0IHN0cmVhbSBhbmQgcHV0cyBpbnRvIHRoZSBmcmFtZSBidWZmZXIuXG4gICAgICogVGhlIGltYWdlIGRhdGEgaXMgY29udmVydGVkIHRvIGdyYXkgc2NhbGUgYW5kIHRoZW4gaGFsZi1zYW1wbGVkIGlmIGNvbmZpZ3VyZWQuXG4gICAgICovXG4gICAgZ3JhYihkYXRhOiBVaW50OEFycmF5KTogYm9vbGVhbiB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuX2lucHV0U3RyZWFtLmdldEZyYW1lKCk7XG5cbiAgICAgICAgaWYgKGZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9zY2FsZUFuZENyb3AoZnJhbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zY2FsZUFuZENyb3AoZnJhbWU6IG5kYXJyYXk8bnVtYmVyPikge1xuICAgICAgICAvLyAxLiBjb21wdXRlIGZ1bGwtc2l6ZWQgZ3JheSBpbWFnZVxuICAgICAgICB0aGlzLl9jb21wdXRlR3JheShmcmFtZS5kYXRhKTtcblxuICAgICAgICAvLyAyLiBpbnRlcnBvbGF0ZVxuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuX2NhbnZhc0hlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRoaXMuX2NhbnZhc1dpZHRoOyB4KyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYW52YXNJbWFnZUFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5zZXQoeCwgeSwgKGludGVycDJkKHRoaXMuX2dyYXlJbWFnZUFycmF5LCB4ICogdGhpcy5fc3RlcFNpemVYLCB5ICogdGhpcy5fc3RlcFNpemVZKSkgfCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRhcmdldEltYWdlQXJyYXkgbXVzdCBiZSBlcXVhbCB0byB0YXJnZXRTaXplXG4gICAgICAgIGlmICh0aGlzLl90YXJnZXRJbWFnZUFycmF5LnNoYXBlWzBdICE9PSB0aGlzLl93aWR0aCB8fCB0aGlzLl90YXJnZXRJbWFnZUFycmF5LnNoYXBlWzFdICE9PSB0aGlzLl9oZWlnaHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2hhcGVzIGRvIG5vdCBtYXRjaCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIGNyb3BcbiAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLl9oZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLl93aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVt5ICogdGhpcy5fd2lkdGggKyB4XSA9IHRoaXMuX3RhcmdldEltYWdlQXJyYXkuZ2V0KHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29tcHV0ZUdyYXkoaW1hZ2VEYXRhOiBVaW50OENsYW1wZWRBcnJheSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbWFnZURhdGFMZW5ndGggPSBpbWFnZURhdGEubGVuZ3RoO1xuXG4gICAgICAgIGlmICh0aGlzLl9zdHJlYW1Db25maWcgJiYgdGhpcy5fc3RyZWFtQ29uZmlnLnNpbmdsZUNoYW5uZWwpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IGltYWdlRGF0YUxlbmd0aDsgaSArPSA0LCBqKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhW2pdID0gaW1hZ2VEYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgaW1hZ2VEYXRhTGVuZ3RoOyBpICs9IDQsIGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFbal0gPSAwLjI5OSAqIGltYWdlRGF0YVtpXSArIDAuNTg3ICogaW1hZ2VEYXRhW2kgKyAxXSArIDAuMTE0ICogaW1hZ2VEYXRhW2kgKyAyXSB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGJvcnJvd3MgaHR0cHM6Ly9naXRodWIuY29tL3NjaWpzL25kYXJyYXktbGluZWFyLWludGVycG9sYXRlXG4gKi9cbmZ1bmN0aW9uIGludGVycDJkKGFycjogbmRhcnJheTxudW1iZXI+LCB4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgaXggPSBNYXRoLmZsb29yKHgpO1xuICAgIGNvbnN0IGZ4ID0geCAtIGl4O1xuICAgIGNvbnN0IHMwID0gMCA8PSBpeCAmJiBpeCA8IGFyci5zaGFwZVswXTtcbiAgICBjb25zdCBzMSA9IDAgPD0gaXggKyAxICYmIGl4ICsgMSA8IGFyci5zaGFwZVswXTtcbiAgICBjb25zdCBpeSA9IE1hdGguZmxvb3IoeSk7XG4gICAgY29uc3QgZnkgPSB5IC0gaXk7XG4gICAgY29uc3QgdDAgPSAwIDw9IGl5ICYmIGl5IDwgYXJyLnNoYXBlWzFdO1xuICAgIGNvbnN0IHQxID0gMCA8PSBpeSArIDEgJiYgaXkgKyAxIDwgYXJyLnNoYXBlWzFdO1xuICAgIGNvbnN0IHcwMCA9IHMwICYmIHQwID8gYXJyLmdldChpeCwgaXkpIDogMC4wO1xuICAgIGNvbnN0IHcwMSA9IHMwICYmIHQxID8gYXJyLmdldChpeCwgaXkgKyAxKSA6IDAuMDtcbiAgICBjb25zdCB3MTAgPSBzMSAmJiB0MCA/IGFyci5nZXQoaXggKyAxLCBpeSkgOiAwLjA7XG4gICAgY29uc3QgdzExID0gczEgJiYgdDEgPyBhcnIuZ2V0KGl4ICsgMSwgaXkgKyAxKSA6IDAuMDtcbiAgICByZXR1cm4gKDEuMCAtIGZ5KSAqICgoMS4wIC0gZngpICogdzAwICsgZnggKiB3MTApICsgZnkgKiAoKDEuMCAtIGZ4KSAqIHcwMSArIGZ4ICogdzExKTtcbn1cbiIsImltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vY29tbW9uL3BvaW50JztcbmltcG9ydCB7IEltYWdlSW5mbyB9IGZyb20gJy4vaW1hZ2UtbG9hZGVyJztcbmltcG9ydCB7IElucHV0U3RyZWFtQ29uZmlnIH0gZnJvbSAnLi9pbnB1dC1zdHJlYW0tY29uZmlnJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElucHV0U3RyZWFtIHtcbiAgICBwcm90ZWN0ZWQgX2NhbGN1bGF0ZWRIZWlnaHQ6IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX2NhbGN1bGF0ZWRXaWR0aDogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfY2FudmFzSGVpZ2h0OiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9jYW52YXNXaWR0aDogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBfY29uZmlnOiBJbnB1dFN0cmVhbUNvbmZpZztcbiAgICBwcm90ZWN0ZWQgX2V2ZW50TmFtZXM6IEFycmF5PHN0cmluZz47XG4gICAgcHJvdGVjdGVkIF9ldmVudEhhbmRsZXJzOiBNYXA8c3RyaW5nLCBBcnJheTxFdmVudExpc3RlbmVyPj47XG4gICAgcHJvdGVjdGVkIF90b3BMZWZ0OiBQb2ludDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9jYW52YXNXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMuX2NhbnZhc0hlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2V2ZW50TmFtZXMgPSBbJ2NhbnJlY29yZCcsICdlbmRlZCddO1xuICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIEFycmF5PEV2ZW50TGlzdGVuZXI+PigpO1xuICAgICAgICB0aGlzLl90b3BMZWZ0ID0geyB4OiAwLCB5OiAwIH07XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ2V0IHJlYWxIZWlnaHQoKTogbnVtYmVyO1xuXG4gICAgYWJzdHJhY3QgZ2V0IHJlYWxXaWR0aCgpOiBudW1iZXI7XG5cbiAgICBnZXQgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxjdWxhdGVkSGVpZ2h0O1xuICAgIH1cblxuICAgIHNldCBoZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlZEhlaWdodCA9IGhlaWdodDtcbiAgICB9XG5cbiAgICBnZXQgd2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZWRXaWR0aDtcbiAgICB9XG5cbiAgICBzZXQgd2lkdGgod2lkdGg6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVkV2lkdGggPSB3aWR0aDtcbiAgICB9XG5cbiAgICBnZXQgdG9wTGVmdCgpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiB7IC4uLnRoaXMuX3RvcExlZnQgfTtcbiAgICB9XG5cbiAgICBzZXQgdG9wTGVmdCh0b3BMZWZ0OiBQb2ludCkge1xuICAgICAgICB0aGlzLl90b3BMZWZ0LnggPSB0b3BMZWZ0Lng7XG4gICAgICAgIHRoaXMuX3RvcExlZnQueSA9IHRvcExlZnQueTtcbiAgICB9XG5cbiAgICBzZXRDYW52YXNTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbnZhc1dpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuX2NhbnZhc0hlaWdodCA9IGhlaWdodDtcbiAgICB9XG5cbiAgICBnZXQgY2FudmFzSGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW52YXNIZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0IGNhbnZhc1dpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW52YXNXaWR0aDtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBnZXQgY29uZmlnKCk6IElucHV0U3RyZWFtQ29uZmlnO1xuXG4gICAgYWJzdHJhY3Qgc2V0IGNvbmZpZyhjb25maWc6IElucHV0U3RyZWFtQ29uZmlnKTtcblxuICAgIGFic3RyYWN0IGdldCBlbmRlZCgpOiBib29sZWFuO1xuXG4gICAgYWJzdHJhY3Qgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCBwYXVzZSgpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgcGxheSgpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3Qgc2V0IGN1cnJlbnRUaW1lKHRpbWU6IG51bWJlcik7XG5cbiAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyLCBfb3B0aW9ucz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2V2ZW50TmFtZXMuaW5kZXhPZihldmVudCkgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50SGFuZGxlcnMuaGFzKGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnMuc2V0KGV2ZW50LCBuZXcgQXJyYXk8RXZlbnRMaXN0ZW5lcj4oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXJzLmdldChldmVudCkucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhckV2ZW50SGFuZGxlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyKGV2ZW50TmFtZTogc3RyaW5nLCBhcmdBcnJheT86IGFueSkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuX2V2ZW50SGFuZGxlcnMuZ2V0KGV2ZW50TmFtZSk7XG5cbiAgICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgICAgICBoYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gaGFuZGxlci5hcHBseSh0aGlzLCBhcmdBcnJheSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ2V0RnJhbWUoKTogSFRNTFZpZGVvRWxlbWVudCB8IEltYWdlSW5mbztcbn1cbiIsImltcG9ydCB7IEltYWdlSW5mbyB9IGZyb20gJy4vaW1hZ2UtbG9hZGVyJztcbmltcG9ydCB7IElucHV0U3RyZWFtIH0gZnJvbSAnLi9pbnB1dC1zdHJlYW0nO1xuaW1wb3J0IHsgSW5wdXRTdHJlYW1Db25maWcgfSBmcm9tICcuL2lucHV0LXN0cmVhbS1jb25maWcnO1xuXG5jb25zdCBnZXRQaXhlbHMgPSByZXF1aXJlKCdnZXQtcGl4ZWxzJyk7XG5cbnR5cGUgbmRhcnJheTxfVCA9IG51bWJlcj4gPSBhbnk7XG5cbmV4cG9ydCBjbGFzcyBJbWFnZVN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHtcbiAgICBwcml2YXRlIF9iYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZW5kZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZnJhbWU6IG5kYXJyYXk8bnVtYmVyPjtcbiAgICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfb2Zmc2V0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfc2l6ZTogbnVtYmVyO1xuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLl9jYW52YXNIZWlnaHQgPSAwO1xuICAgICAgICB0aGlzLl9jYW52YXNXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMuX2Jhc2VVcmwgPSBudWxsO1xuICAgICAgICB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2hlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9vZmZzZXQgPSAxO1xuICAgICAgICB0aGlzLl9zaXplID0gMDtcbiAgICAgICAgdGhpcy5fd2lkdGggPSAwO1xuICAgIH1cblxuICAgIGdldCByZWFsSGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0IHJlYWxXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0IGNvbmZpZygpOiBJbnB1dFN0cmVhbUNvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuXG4gICAgc2V0IGNvbmZpZyhjb25maWc6IElucHV0U3RyZWFtQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gICAgICAgIHRoaXMuX2Jhc2VVcmwgPSBjb25maWcuc3JjIHx8ICcnO1xuXG4gICAgICAgIHRoaXMuX2xvYWRJbWFnZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgZW5kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRlZDtcbiAgICB9XG5cbiAgICBzZXRBdHRyaWJ1dGUoKSB7IH1cblxuICAgIHBhdXNlKCk6IHZvaWQgeyB9XG5cbiAgICBwbGF5KCk6IHZvaWQgeyB9XG5cbiAgICBzZXQgY3VycmVudFRpbWUoX3RpbWU6IG51bWJlcikgeyB9XG5cbiAgICBnZXRGcmFtZSgpOiBIVE1MVmlkZW9FbGVtZW50IHwgSW1hZ2VJbmZvIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZSBhcyBhbnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbG9hZEltYWdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG5cbiAgICAgICAgZ2V0UGl4ZWxzKHRoaXMuX2Jhc2VVcmwsIHRoaXMuX2NvbmZpZy5taW1lLCAoZXJyOiBhbnksIHBpeGVsczogbmRhcnJheTxudW1iZXI+KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IHBpeGVscztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBpeGVscy5zaGFwZSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gcGl4ZWxzLnNoYXBlWzBdIHwgMDtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHBpeGVscy5zaGFwZVsxXSB8IDA7XG5cbiAgICAgICAgICAgIHRoaXMuX2NhbnZhc1dpZHRoID0gdGhpcy5fY2FsY3VsYXRlZFdpZHRoID0gdGhpcy5fY29uZmlnLnNpemUgPyB0aGlzLl93aWR0aCA+IHRoaXMuX2hlaWdodCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZmlnLnNpemUgOiB0aGlzLl93aWR0aCAqIHRoaXMuX2NvbmZpZy5zaXplIC8gdGhpcy5faGVpZ2h0IHwgMCA6IHRoaXMuX3dpZHRoO1xuICAgICAgICAgICAgdGhpcy5fY2FudmFzSGVpZ2h0ID0gdGhpcy5fY2FsY3VsYXRlZEhlaWdodCA9IHRoaXMuX2NvbmZpZy5zaXplID8gdGhpcy5fd2lkdGggPiB0aGlzLl9oZWlnaHQgP1xuICAgICAgICAgICAgICAgIHRoaXMuX2hlaWdodCAqIHRoaXMuX2NvbmZpZy5zaXplIC8gdGhpcy5fd2lkdGggfCAwIDogdGhpcy5fY29uZmlnLnNpemUgOiB0aGlzLl9oZWlnaHQ7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyKCdjYW5yZWNvcmQnLCBbXSksIDApO1xuICAgICAgICB9LCB0aGlzLl9vZmZzZXQsIHRoaXMuX3NpemUsIHRoaXMuX2NvbmZpZy5zZXF1ZW5jZSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSW1hZ2VJbmZvIH0gZnJvbSAnLi9pbWFnZS1sb2FkZXInO1xuaW1wb3J0IHsgSW5wdXRTdHJlYW0gfSBmcm9tICcuL2lucHV0LXN0cmVhbSc7XG5pbXBvcnQgeyBJbnB1dFN0cmVhbUNvbmZpZyB9IGZyb20gJy4vaW5wdXQtc3RyZWFtLWNvbmZpZyc7XG5cbmV4cG9ydCBjbGFzcyBWaWRlb1N0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHtcbiAgICBwcml2YXRlIF92aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fdmlkZW8gPSB2aWRlbztcbiAgICB9XG5cbiAgICBnZXQgcmVhbEhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlkZW8udmlkZW9IZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0IHJlYWxXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlkZW8udmlkZW9XaWR0aDtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnKCk6IElucHV0U3RyZWFtQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9XG5cbiAgICBzZXQgY29uZmlnKGNvbmZpZzogSW5wdXRTdHJlYW1Db25maWcpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgICAgICAgdGhpcy5fdmlkZW8uc3JjID0gY29uZmlnLnNyYyB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgZW5kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aWRlby5lbmRlZDtcbiAgICB9XG5cbiAgICBzZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ZpZGVvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcGF1c2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ZpZGVvLnBhdXNlKCk7XG4gICAgfVxuXG4gICAgcGxheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlkZW8ucGxheSgpO1xuICAgIH1cblxuICAgIHNldCBjdXJyZW50VGltZSh0aW1lOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy50eXBlICE9PSAnTGl2ZVN0cmVhbScpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZGVvLmN1cnJlbnRUaW1lID0gdGltZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXIsIG9wdGlvbnM/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodGhpcy5fZXZlbnROYW1lcy5pbmRleE9mKGV2ZW50KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyRXZlbnRIYW5kbGVycygpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETzogY29tZSB1cCB3aXRoIGEgd2F5IHRvIHJlbW92ZSB2aWRlbyBldmVudCBoYW5kbGVyc1xuICAgICAgICAvLyB0aGlzLl9ldmVudE5hbWVzLmZvckVhY2goZXZlbnROYW1lID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5fZXZlbnRIYW5kbGVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgLy8gICAgIGlmIChoYW5kbGVycyAmJiBoYW5kbGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vICAgICAgICAgaGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHRoaXMuX3ZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0pO1xuICAgICAgICBzdXBlci5jbGVhckV2ZW50SGFuZGxlcnMoKTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyKGV2ZW50TmFtZTogc3RyaW5nLCBhcmdBcnJheT86IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2FucmVjb3JkJykge1xuICAgICAgICAgICAgdGhpcy5faW5pdFNpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLnRyaWdnZXIoZXZlbnROYW1lLCBhcmdBcnJheSlcbiAgICB9XG5cbiAgICBnZXRGcmFtZSgpOiBIVE1MVmlkZW9FbGVtZW50IHwgSW1hZ2VJbmZvIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZpZGVvO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRTaXplKCkge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX3ZpZGVvLnZpZGVvV2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX3ZpZGVvLnZpZGVvSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuX2NhbnZhc1dpZHRoID0gdGhpcy5fY2FsY3VsYXRlZFdpZHRoID1cbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5zaXplID8gd2lkdGggPiBoZWlnaHQgPyB0aGlzLl9jb25maWcuc2l6ZSA6IHdpZHRoICogdGhpcy5fY29uZmlnLnNpemUgLyBoZWlnaHQgfCAwIDogd2lkdGg7XG4gICAgICAgIHRoaXMuX2NhbnZhc0hlaWdodCA9IHRoaXMuX2NhbGN1bGF0ZWRIZWlnaHQgPVxuICAgICAgICAgICAgdGhpcy5fY29uZmlnLnNpemUgPyB3aWR0aCA+IGhlaWdodCA/IGhlaWdodCAqIHRoaXMuX2NvbmZpZy5zaXplIC8gd2lkdGggfCAwIDogdGhpcy5fY29uZmlnLnNpemUgOiBoZWlnaHQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGl2ZVN0cmVhbSBleHRlbmRzIFZpZGVvU3RyZWFtIHtcbiAgICBjb25zdHJ1Y3Rvcih2aWRlbzogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgICAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ2F1dG9wbGF5JywgJycpO1xuICAgICAgICBzdXBlcih2aWRlbyk7XG4gICAgfVxuXG4gICAgZ2V0IGVuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgVmlkZW9TdHJlYW0gfSBmcm9tICcuL3ZpZGVvLXN0cmVhbSc7XG5cbmV4cG9ydCBjbGFzcyBMaXZlU3RyZWFtIGV4dGVuZHMgVmlkZW9TdHJlYW0ge1xuICAgIGNvbnN0cnVjdG9yKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgICAgIHZpZGVvLnNldEF0dHJpYnV0ZSgnYXV0b3BsYXknLCAnJyk7XG4gICAgICAgIHN1cGVyKHZpZGVvKTtcbiAgICB9XG5cbiAgICBnZXQgZW5kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2NvbW1vbi9wb2ludCc7XG5pbXBvcnQgeyBCYXJjb2RlTG9jYXRvckNvbmZpZywgUGF0Y2hTaXplQ29uZmlnIH0gZnJvbSAnLi4vbG9jYXRvci9iYXJjb2RlLWxvY2F0b3ItY29uZmlnJztcbmltcG9ydCB7IElucHV0U3RyZWFtIH0gZnJvbSAnLi9pbnB1dC1zdHJlYW0nO1xuaW1wb3J0IHsgQXJlYUNvbmZpZyB9IGZyb20gJy4vaW5wdXQtc3RyZWFtLWNvbmZpZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGltZW5zaW9uIHtcbiAgICB1bml0OiAnJScgfCAncHgnLFxuICAgIHZhbHVlOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIF9jb21wdXRlRGl2aXNvcnMobjogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgY29uc3QgZGl2aXNvcnMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgIGNvbnN0IGxhcmdlRGl2aXNvcnMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG4gICAgZm9yIChsZXQgZGl2aXNvciA9IDE7IGRpdmlzb3IgKiBkaXZpc29yIDw9IG47IGRpdmlzb3IrKykge1xuICAgICAgICBpZiAobiAlIGRpdmlzb3IgPT09IDApIHtcbiAgICAgICAgICAgIGRpdmlzb3JzLnB1c2goZGl2aXNvcik7XG4gICAgICAgICAgICBpZiAoZGl2aXNvciAqIGRpdmlzb3IgIT09IG4pIHtcbiAgICAgICAgICAgICAgICBsYXJnZURpdmlzb3JzLnVuc2hpZnQobiAvIGRpdmlzb3IgfCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaXZpc29ycy5jb25jYXQobGFyZ2VEaXZpc29ycyk7XG59XG5cbmZ1bmN0aW9uIF9jb21wdXRlQ29tbW9uRGl2aXNvcnMobTogbnVtYmVyLCBuOiBudW1iZXIpOiBBcnJheTxudW1iZXI+IHtcbiAgICBpZiAobSA9PT0gbikge1xuICAgICAgICByZXR1cm4gX2NvbXB1dGVEaXZpc29ycyhtKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXggPSBtID4gbiA/IG0gOiBuO1xuICAgIGNvbnN0IG1pbiA9IG0gPiBuID8gbiA6IG07XG4gICAgY29uc3QgZGl2aXNvcnMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgIGNvbnN0IGxhcmdlRGl2aXNvcnMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG4gICAgZm9yIChsZXQgZGl2aXNvciA9IDE7IGRpdmlzb3IgKiBkaXZpc29yIDw9IG1pbjsgZGl2aXNvcisrKSB7XG4gICAgICAgIGlmIChtYXggJSBkaXZpc29yID09PSAwICYmIG1pbiAlIGRpdmlzb3IgPT09IDApIHtcbiAgICAgICAgICAgIGRpdmlzb3JzLnB1c2goZGl2aXNvcik7XG4gICAgICAgICAgICBjb25zdCBsYXJnZURpdmlzb3IgPSBtaW4gLyBkaXZpc29yIHwgMDtcbiAgICAgICAgICAgIGlmIChkaXZpc29yICE9PSBsYXJnZURpdmlzb3IgJiYgbWF4ICUgbGFyZ2VEaXZpc29yID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGFyZ2VEaXZpc29ycy51bnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGl2aXNvcnMuY29uY2F0KGxhcmdlRGl2aXNvcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlUGF0Y2hTaXplKHBhdGNoU2l6ZTogUGF0Y2hTaXplQ29uZmlnLCB7IHgsIHkgfTogUG9pbnQpOiBQb2ludCB7XG4gICAgY29uc3Qgd2lkZVNpZGUgPSBNYXRoLm1heCh4IHwgMCwgeSB8IDApIHwgMDtcbiAgICBjb25zdCBuck9mUGF0Y2hlc0xpc3QgPSBbOCwgMTAsIDE1LCAyMCwgMzIsIDYwLCA4MF07XG4gICAgY29uc3QgbnJPZlBhdGNoZXNNYXAgPSB7XG4gICAgICAgICd4LXNtYWxsJzogNSxcbiAgICAgICAgc21hbGw6IDQsXG4gICAgICAgIG1lZGl1bTogMyxcbiAgICAgICAgbGFyZ2U6IDIsXG4gICAgICAgICd4LWxhcmdlJzogMVxuICAgIH07XG4gICAgY29uc3QgbnJPZlBhdGNoZXNJbmRleCA9IG5yT2ZQYXRjaGVzTWFwW3BhdGNoU2l6ZV0gfHwgbnJPZlBhdGNoZXNNYXAubWVkaXVtIHwgMDtcbiAgICBjb25zdCBuck9mUGF0Y2hlcyA9IG5yT2ZQYXRjaGVzTGlzdFtuck9mUGF0Y2hlc0luZGV4XSB8IDA7XG4gICAgY29uc3QgZGVzaXJlZFBhdGNoU2l6ZSA9IHdpZGVTaWRlIC8gbnJPZlBhdGNoZXMgfCAwO1xuXG4gICAgZnVuY3Rpb24gZmluZFBhdGNoU2l6ZUZvckRpdmlzb3JzKGRpdmlzb3JzOiBBcnJheTxudW1iZXI+KTogUG9pbnQge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGxldCBmb3VuZCA9IGRpdmlzb3JzW2Rpdmlzb3JzLmxlbmd0aCA+PiAxXSB8IDA7XG5cbiAgICAgICAgd2hpbGUgKGkgPCAoZGl2aXNvcnMubGVuZ3RoIC0gMSkgJiYgZGl2aXNvcnNbaV0gPCBkZXNpcmVkUGF0Y2hTaXplKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGl2aXNvcnNbaV0gLSBkZXNpcmVkUGF0Y2hTaXplKSA+IE1hdGguYWJzKGRpdmlzb3JzW2kgLSAxXSAtIGRlc2lyZWRQYXRjaFNpemUpKSB7XG4gICAgICAgICAgICAgICAgZm91bmQgPSBkaXZpc29yc1tpIC0gMV0gfCAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3VuZCA9IGRpdmlzb3JzW2ldIHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVzaXJlZFBhdGNoU2l6ZSAvIGZvdW5kIDwgbnJPZlBhdGNoZXNMaXN0W25yT2ZQYXRjaGVzSW5kZXggKyAxXSAvIG5yT2ZQYXRjaGVzTGlzdFtuck9mUGF0Y2hlc0luZGV4XSAmJlxuICAgICAgICAgICAgZGVzaXJlZFBhdGNoU2l6ZSAvIGZvdW5kID4gbnJPZlBhdGNoZXNMaXN0W25yT2ZQYXRjaGVzSW5kZXggLSAxXSAvIG5yT2ZQYXRjaGVzTGlzdFtuck9mUGF0Y2hlc0luZGV4XSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogZm91bmQsIHk6IGZvdW5kIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW1hbFBhdGNoU2l6ZSA9IGZpbmRQYXRjaFNpemVGb3JEaXZpc29ycyhfY29tcHV0ZUNvbW1vbkRpdmlzb3JzKHgsIHkpKSB8fFxuICAgICAgICBmaW5kUGF0Y2hTaXplRm9yRGl2aXNvcnMoX2NvbXB1dGVEaXZpc29ycyh3aWRlU2lkZSkpIHx8XG4gICAgICAgIGZpbmRQYXRjaFNpemVGb3JEaXZpc29ycyhfY29tcHV0ZURpdmlzb3JzKGRlc2lyZWRQYXRjaFNpemUgKiBuck9mUGF0Y2hlcykpO1xuXG4gICAgcmV0dXJuIG9wdGltYWxQYXRjaFNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0ltYWdlQ29uc3RyYWludHMoaW5wdXRTdHJlYW06IElucHV0U3RyZWFtLCBjb25maWc6IEJhcmNvZGVMb2NhdG9yQ29uZmlnKSB7XG4gICAgbGV0IHdpZHRoID0gaW5wdXRTdHJlYW0ud2lkdGg7XG4gICAgbGV0IGhlaWdodCA9IGlucHV0U3RyZWFtLmhlaWdodDtcbiAgICBjb25zdCBzaGlmdCA9IGNvbmZpZy5oYWxmU2FtcGxlID8gMSA6IDAgfCAwO1xuICAgIGNvbnN0IGlucHV0U3RyZWFtQ29uZmlnID0gaW5wdXRTdHJlYW0uY29uZmlnO1xuXG4gICAgLy8gY2FsY3VsYXRlIHdpZHRoIGFuZCBoZWlnaHQgYmFzZWQgb24gYXJlYVxuICAgIGlmIChpbnB1dFN0cmVhbUNvbmZpZyAmJiBpbnB1dFN0cmVhbUNvbmZpZy5hcmVhKSB7XG4gICAgICAgIGNvbnN0IGFyZWEgPSBjb21wdXRlSW1hZ2VBcmVhKHdpZHRoLCBoZWlnaHQsIGlucHV0U3RyZWFtQ29uZmlnLmFyZWEpO1xuICAgICAgICBpbnB1dFN0cmVhbS50b3BMZWZ0ID0gYXJlYS50b3BMZWZ0O1xuICAgICAgICBpbnB1dFN0cmVhbS5zZXRDYW52YXNTaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB3aWR0aCA9IGFyZWEud2lkdGg7XG4gICAgICAgIGhlaWdodCA9IGFyZWEuaGVpZ2h0O1xuICAgIH1cblxuICAgIGNvbnN0IHNpemUgPSB7XG4gICAgICAgIHg6IHdpZHRoID4+IHNoaWZ0LFxuICAgICAgICB5OiBoZWlnaHQgPj4gc2hpZnRcbiAgICB9O1xuXG4gICAgY29uc3QgcGF0Y2hTaXplID0gY2FsY3VsYXRlUGF0Y2hTaXplKGNvbmZpZy5wYXRjaFNpemUsIHNpemUpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdQYXRjaC1TaXplOicsIEpTT04uc3RyaW5naWZ5KHBhdGNoU2l6ZSkpO1xuICAgIH1cblxuICAgIGlucHV0U3RyZWFtLndpZHRoID0gKHNpemUueCAvIHBhdGNoU2l6ZS54IDw8IHNoaWZ0KSAqIHBhdGNoU2l6ZS54IHwgMDtcbiAgICBpbnB1dFN0cmVhbS5oZWlnaHQgPSAoc2l6ZS55IC8gcGF0Y2hTaXplLnkgPDwgc2hpZnQpICogcGF0Y2hTaXplLnkgfCAwO1xuXG4gICAgaWYgKChpbnB1dFN0cmVhbS53aWR0aCAlIHBhdGNoU2l6ZS54KSA9PT0gMCAmJiAoaW5wdXRTdHJlYW0uaGVpZ2h0ICUgcGF0Y2hTaXplLnkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbWFnZSBkaW1lbnNpb25zIGRvIG5vdCBjb21wbHkgd2l0aCB0aGUgY3VycmVudCBzZXR0aW5nczogd2lkdGggKCR7d2lkdGh9KSBhbmQgaGVpZ2h0ICgke2hlaWdodH0pIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3BhdGNoU2l6ZS54fWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3BhcnNlQ3NzRGltZW5zaW9uVmFsdWVzKHZhbHVlOiBzdHJpbmcpOiBEaW1lbnNpb24ge1xuICAgIGNvbnN0IGRpbWVuc2lvbjogRGltZW5zaW9uID0ge1xuICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdCh2YWx1ZSksXG4gICAgICAgIHVuaXQ6IHZhbHVlLmluZGV4T2YoJyUnKSA9PT0gdmFsdWUubGVuZ3RoIC0gMSA/ICclJyA6IHZhbHVlLmluZGV4T2YoJ3B4JykgPT09IHZhbHVlLmxlbmd0aCAtIDIgPyAncHgnIDogJyUnXG4gICAgfTtcblxuICAgIHJldHVybiBkaW1lbnNpb247XG59XG5cbmV4cG9ydCBjb25zdCBfZGltZW5zaW9uc0NvbnZlcnRlcnMgPSB7XG4gICAgYm90dG9tOiAoZGltZW5zaW9uOiBEaW1lbnNpb24sIHsgaGVpZ2h0IH0pID0+IGRpbWVuc2lvbi51bml0ID09PSAnJScgP1xuICAgICAgICBoZWlnaHQgLSBoZWlnaHQgKiBkaW1lbnNpb24udmFsdWUgLyAxMDAgfCAwIDogZGltZW5zaW9uLnVuaXQgPT09ICdweCcgPyBoZWlnaHQgLSBkaW1lbnNpb24udmFsdWUgOiBoZWlnaHQsXG4gICAgbGVmdDogKGRpbWVuc2lvbjogRGltZW5zaW9uLCB7IHdpZHRoIH0pID0+IGRpbWVuc2lvbi51bml0ID09PSAnJScgP1xuICAgICAgICB3aWR0aCAqIGRpbWVuc2lvbi52YWx1ZSAvIDEwMCB8IDAgOiBkaW1lbnNpb24udW5pdCA9PT0gJ3B4JyA/IGRpbWVuc2lvbi52YWx1ZSA6IDAsXG4gICAgcmlnaHQ6IChkaW1lbnNpb246IERpbWVuc2lvbiwgeyB3aWR0aCB9KSA9PiBkaW1lbnNpb24udW5pdCA9PT0gJyUnID9cbiAgICAgICAgd2lkdGggLSB3aWR0aCAqIGRpbWVuc2lvbi52YWx1ZSAvIDEwMCB8IDAgOiBkaW1lbnNpb24udW5pdCA9PT0gJ3B4JyA/IHdpZHRoIC0gZGltZW5zaW9uLnZhbHVlIDogd2lkdGgsXG4gICAgdG9wOiAoZGltZW5zaW9uOiBEaW1lbnNpb24sIHsgaGVpZ2h0IH0pOiBudW1iZXIgPT4gZGltZW5zaW9uLnVuaXQgPT09ICclJyA/XG4gICAgICAgIGhlaWdodCAqIGRpbWVuc2lvbi52YWx1ZSAvIDEwMCB8IDAgOiBkaW1lbnNpb24udW5pdCA9PT0gJ3B4JyA/IGRpbWVuc2lvbi52YWx1ZSA6IDBcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlSW1hZ2VBcmVhKGlucHV0V2lkdGg6IG51bWJlciwgaW5wdXRIZWlnaHQ6IG51bWJlciwgYXJlYTogQXJlYUNvbmZpZykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB7IHdpZHRoOiBpbnB1dFdpZHRoLCBoZWlnaHQ6IGlucHV0SGVpZ2h0IH07XG4gICAgY29uc3QgcGFyc2VkQXJlYToge1xuICAgICAgICBib3R0b20/OiBudW1iZXI7XG4gICAgICAgIGxlZnQ/OiBudW1iZXI7XG4gICAgICAgIHJpZ2h0PzogbnVtYmVyO1xuICAgICAgICB0b3A/OiBudW1iZXI7XG4gICAgfSA9IE9iamVjdC5rZXlzKGFyZWEpLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhcmVhW2tleV07XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IF9wYXJzZUNzc0RpbWVuc2lvblZhbHVlcyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWQgPSBfZGltZW5zaW9uc0NvbnZlcnRlcnNba2V5XShwYXJzZWQsIGNvbnRleHQpO1xuXG4gICAgICAgIHJlc3VsdFtrZXldID0gY2FsY3VsYXRlZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0b3BMZWZ0OiB7IHg6IHBhcnNlZEFyZWEubGVmdCwgeTogcGFyc2VkQXJlYS50b3AgfSxcbiAgICAgICAgd2lkdGg6IHBhcnNlZEFyZWEucmlnaHQgLSBwYXJzZWRBcmVhLmxlZnQsXG4gICAgICAgIGhlaWdodDogcGFyc2VkQXJlYS5ib3R0b20gLSBwYXJzZWRBcmVhLnRvcFxuICAgIH07XG59XG4iLCJpbXBvcnQgeyBNb21lbnQgfSBmcm9tICcuL21vbWVudCc7XG5cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2x1c3RlciBmb3IgZ3JvdXBpbmcgc2ltaWxhciBvcmllbnRhdGlvbnMgb2YgbW9tZW50c1xuICovXG5leHBvcnQgY2xhc3MgQ2x1c3RlciB7XG4gICAgcHJpdmF0ZSBfdGhyZXNob2xkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbW9tZW50czogQXJyYXk8TW9tZW50PjtcbiAgICBwcml2YXRlIF9jZW50ZXI6IE1vbWVudDtcblxuICAgIHN0YXRpYyBjbHVzdGVyaXplKG1vbWVudHM6IEFycmF5PE1vbWVudD4sIHRocmVzaG9sZDogbnVtYmVyKTogQXJyYXk8Q2x1c3Rlcj4ge1xuICAgICAgICBjb25zdCBjbHVzdGVycyA9IG5ldyBBcnJheTxDbHVzdGVyPigpO1xuXG4gICAgICAgIG1vbWVudHMuZm9yRWFjaChtb21lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdDbHVzdGVyID0gY2x1c3RlcnMuZmluZChjbHVzdGVyID0+IGNsdXN0ZXIuZml0cyhtb21lbnQpKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoaW5nQ2x1c3Rlcikge1xuICAgICAgICAgICAgICAgIG1hdGNoaW5nQ2x1c3Rlci5hZGQobW9tZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlcnMucHVzaChuZXcgQ2x1c3Rlcih0aHJlc2hvbGQsIG1vbWVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY2x1c3RlcnM7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IodGhyZXNob2xkOiBudW1iZXIsIG1vbWVudDogTW9tZW50KSB7XG4gICAgICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgICAgICAgdGhpcy5fbW9tZW50cyA9IG5ldyBBcnJheTxNb21lbnQ+KCk7XG4gICAgICAgIHRoaXMuX2NlbnRlciA9IHtcbiAgICAgICAgICAgIHJhZDogMCxcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1vbWVudCkge1xuICAgICAgICAgICAgdGhpcy5hZGQobW9tZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZChwb2ludDogTW9tZW50KSB7XG4gICAgICAgIHRoaXMuX21vbWVudHMucHVzaChwb2ludCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGNlbnRlclxuICAgICAgICB0aGlzLl9jZW50ZXIucmFkID0gdGhpcy5fbW9tZW50cy5yZWR1Y2UoKHN1bSwgcCkgPT4gc3VtICsgcC5yYWQsIDApIC8gdGhpcy5fbW9tZW50cy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2NlbnRlci54ID0gTWF0aC5jb3ModGhpcy5fY2VudGVyLnJhZCk7XG4gICAgICAgIHRoaXMuX2NlbnRlci55ID0gTWF0aC5zaW4odGhpcy5fY2VudGVyLnJhZCk7XG4gICAgfVxuXG4gICAgZml0cyhtb21lbnQ6IE1vbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBjaGVjayBjb3NpbmUgc2ltaWxhcml0eSB0byBjZW50ZXItYW5nbGVcbiAgICAgICAgY29uc3Qgc2ltaWxhcml0eSA9IE1hdGguYWJzKG1vbWVudC54ICogdGhpcy5fY2VudGVyLnggKyBtb21lbnQueSAqIHRoaXMuX2NlbnRlci55KTtcbiAgICAgICAgcmV0dXJuIHNpbWlsYXJpdHkgPiB0aGlzLl90aHJlc2hvbGQ7XG4gICAgfVxuXG4gICAgZ2V0IG1vbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb21lbnRzO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEltYWdlV3JhcHBlciB9IGZyb20gJy4uL2NvbW1vbi9pbWFnZS13cmFwcGVyJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vY29tbW9uL3BvaW50JztcblxuLyoqXG4gKiBJbnZlcnQgbWF0cml4XG4gKiBAcGFyYW0gbWF0cml4IHRoZSBtYXRyaXggdG8gaW52ZXJ0XG4gKiBAcmV0dXJucyB0aGUgaW52ZXJ0ZWQgbWF0cml4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQobWF0cml4OiBGbG9hdDMyQXJyYXkpOiBGbG9hdDMyQXJyYXkge1xuICAgIGNvbnN0IGEwID0gbWF0cml4WzBdO1xuICAgIGNvbnN0IGExID0gbWF0cml4WzFdO1xuICAgIGNvbnN0IGEyID0gbWF0cml4WzJdO1xuICAgIGNvbnN0IGEzID0gbWF0cml4WzNdO1xuICAgIGNvbnN0IGRldGVybWluYW50ID0gYTAgKiBhMyAtIGEyICogYTE7XG5cbiAgICBpZiAoIWRldGVybWluYW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KFthMyAvIGRldGVybWluYW50LCAtYTEgLyBkZXRlcm1pbmFudCwgLWEyIC8gZGV0ZXJtaW5hbnQsIGEwIC8gZGV0ZXJtaW5hbnRdKTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWN0b3Igd2l0aCBhIG1hdHJpeFxuICogQHBhcmFtIHsgeCwgeSB9IHZlY3RvciB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSBtYXRyaXggbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXG4gKiBAcmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgdmVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1XaXRoTWF0cml4KHsgeCwgeSB9OiBQb2ludCwgbWF0cml4OiBGbG9hdDMyQXJyYXkpOiBQb2ludCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogbWF0cml4WzBdICogeCArIG1hdHJpeFsyXSAqIHksXG4gICAgICAgIHk6IG1hdHJpeFsxXSAqIHggKyBtYXRyaXhbM10gKiB5XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gX2NvbXB1dGVIaXN0b2dyYW0oaW1hZ2VXcmFwcGVyOiBJbWFnZVdyYXBwZXIsIGJpdHNQZXJQaXhlbDogbnVtYmVyKTogSW50MzJBcnJheSB7XG4gICAgaWYgKCFiaXRzUGVyUGl4ZWwpIHtcbiAgICAgICAgYml0c1BlclBpeGVsID0gODtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZURhdGEgPSBpbWFnZVdyYXBwZXIuZGF0YTtcbiAgICBjb25zdCBiaXRTaGlmdCA9IDggLSBiaXRzUGVyUGl4ZWw7XG4gICAgY29uc3QgYnVja2V0Q291bnQgPSAxIDw8IGJpdHNQZXJQaXhlbDtcbiAgICBjb25zdCBoaXN0b2dyYW0gPSBuZXcgSW50MzJBcnJheShidWNrZXRDb3VudCk7XG5cbiAgICBmb3IgKGxldCBpID0gaW1hZ2VEYXRhLmxlbmd0aDsgaS0tOykge1xuICAgICAgICBoaXN0b2dyYW1baW1hZ2VEYXRhW2ldID4+IGJpdFNoaWZ0XSsrO1xuICAgIH1cblxuICAgIHJldHVybiBoaXN0b2dyYW07XG59XG5cbmZ1bmN0aW9uIF9kZXRlcm1pbmVPdHN1VGhyZXNob2xkKGltYWdlV3JhcHBlcjogSW1hZ2VXcmFwcGVyLCBiaXRzUGVyUGl4ZWw/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghYml0c1BlclBpeGVsKSB7XG4gICAgICAgIGJpdHNQZXJQaXhlbCA9IDg7XG4gICAgfVxuXG4gICAgY29uc3QgYml0U2hpZnQgPSA4IC0gYml0c1BlclBpeGVsO1xuICAgIGNvbnN0IGhpc3QgPSBfY29tcHV0ZUhpc3RvZ3JhbShpbWFnZVdyYXBwZXIsIGJpdHNQZXJQaXhlbCk7XG4gICAgY29uc3QgdmV0ID0gWzBdO1xuICAgIGNvbnN0IG1heCA9ICgxIDw8IGJpdHNQZXJQaXhlbCkgLSAxO1xuXG4gICAgZnVuY3Rpb24gcHgoaW5pdDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBpbml0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICBzdW0gKz0gaGlzdFtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdW07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbXgoaW5pdDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBpbml0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICBzdW0gKz0gaSAqIGhpc3RbaV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VtO1xuICAgIH1cblxuICAgIGZvciAobGV0IGsgPSAxOyBrIDwgbWF4OyBrKyspIHtcbiAgICAgICAgY29uc3QgcDEgPSBweCgwLCBrKTtcbiAgICAgICAgY29uc3QgcDIgPSBweChrICsgMSwgbWF4KTtcbiAgICAgICAgY29uc3QgcDEyID0gcDEgKiBwMiB8fCAxO1xuICAgICAgICBjb25zdCBtMSA9IG14KDAsIGspICogcDI7XG4gICAgICAgIGNvbnN0IG0yID0gbXgoayArIDEsIG1heCkgKiBwMTtcbiAgICAgICAgY29uc3QgbTEyID0gbTEgLSBtMjtcbiAgICAgICAgdmV0W2tdID0gbTEyICogbTEyIC8gcDEyO1xuICAgIH1cblxuICAgIC8vIGluZGV4IG9mIG1heCBlbGVtZW50XG4gICAgY29uc3QgdGhyZXNob2xkID0gdmV0LnJlZHVjZSgobWF4SW5kZXgsIGl0ZW0sIGluZGV4LCBhcnJheSkgPT4gaXRlbSA+IGFycmF5W21heEluZGV4XSA/IGluZGV4IDogbWF4SW5kZXgsIDApO1xuXG4gICAgcmV0dXJuIHRocmVzaG9sZCA8PCBiaXRTaGlmdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG90c3VUaHJlc2hvbGQoaW1hZ2VXcmFwcGVyOiBJbWFnZVdyYXBwZXIsIHRhcmdldFdyYXBwZXI6IEltYWdlV3JhcHBlcik6IG51bWJlciB7XG4gICAgY29uc3QgdGhyZXNob2xkID0gX2RldGVybWluZU90c3VUaHJlc2hvbGQoaW1hZ2VXcmFwcGVyKTtcbiAgICBjb25zdCB0YXJnZXREYXRhID0gdGFyZ2V0V3JhcHBlci5kYXRhO1xuXG4gICAgaW1hZ2VXcmFwcGVyLmRhdGEuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgIHRhcmdldERhdGFbaW5kZXhdID0gdmFsdWUgPCB0aHJlc2hvbGQgPyAxIDogMDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aHJlc2hvbGQ7XG59XG5cbi8qKlxuICogQHBhcmFtIGltYWdlV3JhcHBlciBpbnB1dCBpbWFnZSB0byBiZSBzYW1wbGVkXG4gKiBAcGFyYW0gb3V0SW1hZ2VXcmFwcGVyIHtJbWFnZVdyYXBwZXJ9IHRvIGJlIHN0b3JlZCBpblxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFsZlNhbXBsZShpbWFnZVdyYXBwZXI6IEltYWdlV3JhcHBlciwgb3V0SW1hZ2VXcmFwcGVyOiBJbWFnZVdyYXBwZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpbWFnZSA9IGltYWdlV3JhcHBlci5kYXRhO1xuICAgIGNvbnN0IHdpZHRoID0gaW1hZ2VXcmFwcGVyLnNpemUueDtcbiAgICBjb25zdCBvdXRJbWFnZSA9IG91dEltYWdlV3JhcHBlci5kYXRhO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gaW1hZ2UubGVuZ3RoO1xuICAgIGNvbnN0IG91dFdpZHRoID0gd2lkdGggPj4gMTtcbiAgICBsZXQgdG9wUm93SW5kZXggPSAwO1xuICAgIGxldCBib3R0b21Sb3dJbmRleCA9IHdpZHRoO1xuICAgIGxldCBvdXRJbWdJbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoYm90dG9tUm93SW5kZXggPCBlbmRJbmRleCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dFdpZHRoOyBpKyspIHtcbiAgICAgICAgICAgIG91dEltYWdlW291dEltZ0luZGV4XSA9XG4gICAgICAgICAgICAgICAgKGltYWdlW3RvcFJvd0luZGV4XSArIGltYWdlW3RvcFJvd0luZGV4ICsgMV0gKyBpbWFnZVtib3R0b21Sb3dJbmRleF0gKyBpbWFnZVtib3R0b21Sb3dJbmRleCArIDFdKSA+PiAyO1xuICAgICAgICAgICAgb3V0SW1nSW5kZXgrKztcbiAgICAgICAgICAgIHRvcFJvd0luZGV4ICs9IDI7XG4gICAgICAgICAgICBib3R0b21Sb3dJbmRleCArPSAyO1xuICAgICAgICB9XG4gICAgICAgIHRvcFJvd0luZGV4ICs9IHdpZHRoO1xuICAgICAgICBib3R0b21Sb3dJbmRleCArPSB3aWR0aDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbWFnZVdyYXBwZXIgfSBmcm9tIFwiLi4vY29tbW9uL2ltYWdlLXdyYXBwZXJcIjtcblxuLyoqXG4gKiBAYm9ycm93cyBodHRwOi8vd3d3LmNvZGVwcm9qZWN0LmNvbS9UaXBzLzQwNzE3Mi9Db25uZWN0ZWQtQ29tcG9uZW50LUxhYmVsaW5nLWFuZC1WZWN0b3JpemF0aW9uXG4gKi9cblxudHlwZSBEaXJlY3Rpb24gPSBudW1iZXI7XG5cbmV4cG9ydCBjb25zdCBTZWFyY2hEaXJlY3Rpb25zOiBBcnJheTxBcnJheTxEaXJlY3Rpb24+PiA9IFtbMCwgMV0sIFsxLCAxXSwgWzEsIDBdLCBbMSwgLTFdLCBbMCwgLTFdLCBbLTEsIC0xXSwgWy0xLCAwXSwgWy0xLCAxXV07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udG91clZlcnRleCB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICBkaXI6IERpcmVjdGlvbixcbiAgICBuZXh0OiBDb250b3VyVmVydGV4LFxuICAgIHByZXY6IENvbnRvdXJWZXJ0ZXhcbn1cblxuaW50ZXJmYWNlIEN1cnJlbnQge1xuICAgIGN4OiBudW1iZXIsXG4gICAgY3k6IG51bWJlcixcbiAgICBkaXI6IERpcmVjdGlvblxufVxuXG5leHBvcnQgY2xhc3MgVHJhY2VyIHtcbiAgICBwcml2YXRlIF9pbWFnZURhdGE6IFVpbnQ4QXJyYXk7XG4gICAgcHJpdmF0ZSBfbGFiZWxEYXRhOiBBcnJheTxudW1iZXI+O1xuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihpbWFnZVdyYXBwZXI6IEltYWdlV3JhcHBlciwgbGFiZWxXcmFwcGVyOiBJbWFnZVdyYXBwZXI8QXJyYXk8bnVtYmVyPj4pIHtcbiAgICAgICAgdGhpcy5faW1hZ2VEYXRhID0gaW1hZ2VXcmFwcGVyLmRhdGE7XG4gICAgICAgIHRoaXMuX2xhYmVsRGF0YSA9IGxhYmVsV3JhcHBlci5kYXRhIGFzIEFycmF5PG51bWJlcj47XG4gICAgICAgIHRoaXMuX3dpZHRoID0gaW1hZ2VXcmFwcGVyLnNpemUueDtcbiAgICB9XG5cbiAgICB0cmFjZShjdXJyZW50OiBDdXJyZW50LCBjb2xvcjogbnVtYmVyLCBsYWJlbDogbnVtYmVyLCBlZGdlTGFiZWw6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgeSA9IGN1cnJlbnQuY3kgKyBTZWFyY2hEaXJlY3Rpb25zW2N1cnJlbnQuZGlyXVswXSB8IDA7XG4gICAgICAgICAgICBjb25zdCB4ID0gY3VycmVudC5jeCArIFNlYXJjaERpcmVjdGlvbnNbY3VycmVudC5kaXJdWzFdIHwgMDtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHkgKiB0aGlzLl93aWR0aCArIHggfCAwO1xuXG4gICAgICAgICAgICBpZiAoKHRoaXMuX2ltYWdlRGF0YVtwb3NdID09PSBjb2xvcikgJiYgKCh0aGlzLl9sYWJlbERhdGFbcG9zXSA9PT0gMCkgfHwgKHRoaXMuX2xhYmVsRGF0YVtwb3NdID09PSBsYWJlbCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFiZWxEYXRhW3Bvc10gPSBsYWJlbDtcbiAgICAgICAgICAgICAgICBjdXJyZW50LmN4ID0geDtcbiAgICAgICAgICAgICAgICBjdXJyZW50LmN5ID0geTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGFiZWxEYXRhW3Bvc10gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWxEYXRhW3Bvc10gPSBlZGdlTGFiZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnQuZGlyID0gKGN1cnJlbnQuZGlyICsgMSkgJSA4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnRvdXJUcmFjaW5nKHN5OiBudW1iZXIsIHN4OiBudW1iZXIsIGxhYmVsOiBudW1iZXIsIGNvbG9yOiBudW1iZXIsIGVkZ2VMYWJlbDogbnVtYmVyKTogQ29udG91clZlcnRleCB7XG4gICAgICAgIGxldCBGdjogQ29udG91clZlcnRleCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQ6IEN1cnJlbnQgPSB7XG4gICAgICAgICAgICBjeDogc3gsXG4gICAgICAgICAgICBjeTogc3ksXG4gICAgICAgICAgICBkaXI6IDBcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy50cmFjZShjdXJyZW50LCBjb2xvciwgbGFiZWwsIGVkZ2VMYWJlbCkpIHtcbiAgICAgICAgICAgIEZ2ID0ge1xuICAgICAgICAgICAgICAgIHg6IHN4LFxuICAgICAgICAgICAgICAgIHk6IHN5LFxuICAgICAgICAgICAgICAgIGRpcjogY3VycmVudC5kaXIsXG4gICAgICAgICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICAgICAgICBwcmV2OiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IEN2ID0gRnY7XG4gICAgICAgICAgICBsZXQgbGRpciA9IGN1cnJlbnQuZGlyO1xuICAgICAgICAgICAgbGV0IFAgPSB7XG4gICAgICAgICAgICAgICAgeDogY3VycmVudC5jeCxcbiAgICAgICAgICAgICAgICB5OiBjdXJyZW50LmN5LFxuICAgICAgICAgICAgICAgIGRpcjogMCxcbiAgICAgICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgICAgICAgIHByZXY6IEN2XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgQ3YubmV4dCA9IFA7XG4gICAgICAgICAgICBDdiA9IFA7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50LmRpciA9IChjdXJyZW50LmRpciArIDYpICUgODtcblxuICAgICAgICAgICAgICAgIHRoaXMudHJhY2UoY3VycmVudCwgY29sb3IsIGxhYmVsLCBlZGdlTGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxkaXIgIT09IGN1cnJlbnQuZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIEN2LmRpciA9IGN1cnJlbnQuZGlyO1xuICAgICAgICAgICAgICAgICAgICBQID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudC5jeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGN1cnJlbnQuY3ksXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXI6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogQ3ZcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgQ3YubmV4dCA9IFA7XG4gICAgICAgICAgICAgICAgICAgIEN2ID0gUDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBDdi5kaXIgPSBsZGlyO1xuICAgICAgICAgICAgICAgICAgICBDdi54ID0gY3VycmVudC5jeDtcbiAgICAgICAgICAgICAgICAgICAgQ3YueSA9IGN1cnJlbnQuY3k7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGRpciA9IGN1cnJlbnQuZGlyO1xuICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudC5jeCAhPT0gc3ggfHwgY3VycmVudC5jeSAhPT0gc3kpO1xuXG4gICAgICAgICAgICBGdi5wcmV2ID0gQ3YucHJldjtcbiAgICAgICAgICAgIEN2LnByZXYubmV4dCA9IEZ2O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBGdjtcbiAgICB9XG59XG4iLCIvKipcbiAqIEBib3Jyb3dzIGh0dHA6Ly93d3cuY29kZXByb2plY3QuY29tL1RpcHMvNDA3MTcyL0Nvbm5lY3RlZC1Db21wb25lbnQtTGFiZWxpbmctYW5kLVZlY3Rvcml6YXRpb25cbiAqL1xuXG5pbXBvcnQgeyBJbWFnZVdyYXBwZXIgfSBmcm9tICcuLi9jb21tb24vaW1hZ2Utd3JhcHBlcic7XG5pbXBvcnQgeyBDb250b3VyVmVydGV4LCBUcmFjZXIgfSBmcm9tICcuL3RyYWNlcic7XG5cbmVudW0gRWRnZUxhYmVsIHtcbiAgICBPdXRzaWRlID0gLTMyNzY3LFxuICAgIEluc2lkZSA9IC0zMjc2NlxufTtcblxuZW51bSBDb250b3VyRGlyZWN0aW9uIHtcbiAgICBDVyA9IDAsXG4gICAgQ0NXID0gMSxcbiAgICBVbmtub3duID0gMlxufTtcblxuaW50ZXJmYWNlIENvbnRvdXIge1xuICAgIGRpcjogQ29udG91ckRpcmVjdGlvbjtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGZpcnN0VmVydGV4OiBDb250b3VyVmVydGV4O1xuICAgIHByZXZpb3VzUGVlcj86IENvbnRvdXI7XG4gICAgbmV4dFBlZXI/OiBDb250b3VyO1xuICAgIGluc2lkZUNvbnRvdXJzOiBDb250b3VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhc3RlclJlc3VsdCB7XG4gICAgY2M6IENvbnRvdXI7XG4gICAgY291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFJhc3Rlcml6ZXIge1xuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfdHJhY2VyOiBUcmFjZXI7XG4gICAgcHJpdmF0ZSBfaW1hZ2VEYXRhOiBVaW50OEFycmF5O1xuICAgIHByaXZhdGUgX2xhYmVsRGF0YTogQXJyYXk8bnVtYmVyPjtcblxuICAgIGNvbnN0cnVjdG9yKGltYWdlV3JhcHBlcjogSW1hZ2VXcmFwcGVyPFVpbnQ4QXJyYXk+LCBsYWJlbFdyYXBwZXI6IEltYWdlV3JhcHBlcjxBcnJheTxudW1iZXI+Pikge1xuICAgICAgICB0aGlzLl9pbWFnZURhdGEgPSBpbWFnZVdyYXBwZXIuZGF0YTtcbiAgICAgICAgdGhpcy5fbGFiZWxEYXRhID0gbGFiZWxXcmFwcGVyLmRhdGEgYXMgQXJyYXk8bnVtYmVyPjtcbiAgICAgICAgdGhpcy5fd2lkdGggPSBpbWFnZVdyYXBwZXIuc2l6ZS54O1xuICAgICAgICB0aGlzLl9oZWlnaHQgPSBpbWFnZVdyYXBwZXIuc2l6ZS55O1xuICAgICAgICB0aGlzLl90cmFjZXIgPSBuZXcgVHJhY2VyKGltYWdlV3JhcHBlciwgbGFiZWxXcmFwcGVyKTtcbiAgICB9XG5cbiAgICByYXN0ZXJpemUoZGVwdGhMYWJlbDogbnVtYmVyKTogUmFzdGVyUmVzdWx0IHtcbiAgICAgICAgY29uc3QgY29sb3JNYXAgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDAwOyBpKyspIHtcbiAgICAgICAgICAgIGNvbG9yTWFwW2ldID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbG9yTWFwWzBdID0gdGhpcy5faW1hZ2VEYXRhWzBdO1xuXG4gICAgICAgIGxldCBjYzogQ29udG91ciA9IG51bGw7XG4gICAgICAgIGxldCBzYzogQ29udG91cjtcbiAgICAgICAgbGV0IGNvbm5lY3RlZENvdW50ID0gMDtcblxuICAgICAgICBmb3IgKGxldCBjeSA9IDE7IGN5IDwgdGhpcy5faGVpZ2h0IC0gMTsgY3krKykge1xuICAgICAgICAgICAgbGV0IGxhYmVsSW5kZXggPSAwO1xuICAgICAgICAgICAgbGV0IGJjID0gY29sb3JNYXBbMF07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGN4ID0gMTsgY3ggPCB0aGlzLl93aWR0aCAtIDE7IGN4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBjeSAqIHRoaXMuX3dpZHRoICsgY3g7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGFiZWxEYXRhW3Bvc10gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLl9pbWFnZURhdGFbcG9zXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yICE9PSBiYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYyA9IGNvbm5lY3RlZENvdW50ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvck1hcFtsY10gPSBjb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYyA9IGNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRleCA9IHRoaXMuX3RyYWNlci5jb250b3VyVHJhY2luZyhjeSwgY3gsIGxjLCBjb2xvciwgRWRnZUxhYmVsLk91dHNpZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkQ291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxJbmRleCA9IGxjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwOiBDb250b3VyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiBDb250b3VyRGlyZWN0aW9uLkNXLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGxhYmVsSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFZlcnRleDogdmVydGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFBlZXI6IGNjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlQ29udG91cnM6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNjICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYy5wcmV2aW91c1BlZXIgPSBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjID0gcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRleCA9IHRoaXMuX3RyYWNlci5jb250b3VyVHJhY2luZyhjeSwgY3gsIEVkZ2VMYWJlbC5JbnNpZGUsIGNvbG9yLCBsYWJlbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHA6IENvbnRvdXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXI6IGRlcHRoTGFiZWwgPT09IDAgPyBDb250b3VyRGlyZWN0aW9uLkNDVyA6IENvbnRvdXJEaXJlY3Rpb24uQ1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFZlcnRleDogdmVydGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGRlcHRoTGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGVDb250b3VyczogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYyA9IGNjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHNjICE9PSBudWxsKSAmJiBzYy5pbmRleCAhPT0gbGFiZWxJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2MgPSBzYy5uZXh0UGVlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2MgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAubmV4dFBlZXIgPSBzYy5pbnNpZGVDb250b3VycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYy5pbnNpZGVDb250b3VycyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjLmluc2lkZUNvbnRvdXJzLnByZXZpb3VzUGVlciA9IHA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYy5pbnNpZGVDb250b3VycyA9IHA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYWJlbERhdGFbcG9zXSA9IGxhYmVsSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2xhYmVsRGF0YVtwb3NdID09PSBFZGdlTGFiZWwuSW5zaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBiYyA9IHRoaXMuX2ltYWdlRGF0YVtwb3NdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbGFiZWxEYXRhW3Bvc10gPT09IEVkZ2VMYWJlbC5PdXRzaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBiYyA9IGNvbG9yTWFwWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsSW5kZXggPSB0aGlzLl9sYWJlbERhdGFbcG9zXTtcbiAgICAgICAgICAgICAgICAgICAgYmMgPSBjb2xvck1hcFtsYWJlbEluZGV4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzYyA9IGNjO1xuICAgICAgICB3aGlsZSAoc2MgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNjLmluZGV4ID0gZGVwdGhMYWJlbDtcbiAgICAgICAgICAgIHNjID0gc2MubmV4dFBlZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2MsXG4gICAgICAgICAgICBjb3VudDogY29ubmVjdGVkQ291bnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBkcmF3Q29udG91cihjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBmaXJzdENvbnRvdXI6IENvbnRvdXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAncmVkJztcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAncmVkJztcbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSAxO1xuXG4gICAgICAgIGxldCBwcSA9IGZpcnN0Q29udG91cjtcbiAgICAgICAgbGV0IGlxID0gcHEgJiYgcHEuaW5zaWRlQ29udG91cnM7XG5cbiAgICAgICAgd2hpbGUgKHBxICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgcSA9IGlxIHx8IHBxO1xuXG4gICAgICAgICAgICBpZiAoaXEgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpcSA9IGlxLm5leHRQZWVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcSA9IHBxLm5leHRQZWVyO1xuICAgICAgICAgICAgICAgIGlxID0gcHEgJiYgcHEuaW5zaWRlQ29udG91cnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAocS5kaXIpIHtcbiAgICAgICAgICAgICAgICBjYXNlIENvbnRvdXJEaXJlY3Rpb24uQ1c6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdyZWQnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBDb250b3VyRGlyZWN0aW9uLkNDVzoge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJ2JsdWUnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBDb250b3VyRGlyZWN0aW9uLlVua25vd246IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICdncmVlbic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHAgPSBxLmZpcnN0VmVydGV4O1xuICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHAueCwgcC55KTtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHAgPSBwLm5leHQ7XG4gICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8ocC54LCBwLnkpO1xuICAgICAgICAgICAgfSB3aGlsZSAocCAhPT0gcS5maXJzdFZlcnRleCk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cbmZ1bmN0aW9uIFNrZWxldG9uaXplcihzdGRsaWIsIGZvcmVpZ24sIGJ1ZmZlcikge1xuICAgIFwidXNlIGFzbVwiO1xuXG4gICAgdmFyIGltYWdlcyA9IG5ldyBzdGRsaWIuVWludDhBcnJheShidWZmZXIpLFxuICAgICAgICBzaXplID0gZm9yZWlnbi5zaXplIHwgMCxcbiAgICAgICAgaW11bCA9IHN0ZGxpYi5NYXRoLmltdWw7XG5cbiAgICBmdW5jdGlvbiBlcm9kZShpbkltYWdlUHRyLCBvdXRJbWFnZVB0cikge1xuICAgICAgICBpbkltYWdlUHRyID0gaW5JbWFnZVB0ciB8IDA7XG4gICAgICAgIG91dEltYWdlUHRyID0gb3V0SW1hZ2VQdHIgfCAwO1xuXG4gICAgICAgIHZhciB2ID0gMCxcbiAgICAgICAgICAgIHUgPSAwLFxuICAgICAgICAgICAgc3VtID0gMCxcbiAgICAgICAgICAgIHlTdGFydDEgPSAwLFxuICAgICAgICAgICAgeVN0YXJ0MiA9IDAsXG4gICAgICAgICAgICB4U3RhcnQxID0gMCxcbiAgICAgICAgICAgIHhTdGFydDIgPSAwLFxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcblxuICAgICAgICBmb3IgKHYgPSAxOyAodiB8IDApIDwgKChzaXplIC0gMSkgfCAwKTsgdiA9ICh2ICsgMSkgfCAwKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAob2Zmc2V0ICsgc2l6ZSkgfCAwO1xuICAgICAgICAgICAgZm9yICh1ID0gMTsgKHUgfCAwKSA8ICgoc2l6ZSAtIDEpIHwgMCk7IHUgPSAodSArIDEpIHwgMCkge1xuICAgICAgICAgICAgICAgIHlTdGFydDEgPSAob2Zmc2V0IC0gc2l6ZSkgfCAwO1xuICAgICAgICAgICAgICAgIHlTdGFydDIgPSAob2Zmc2V0ICsgc2l6ZSkgfCAwO1xuICAgICAgICAgICAgICAgIHhTdGFydDEgPSAodSAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB4U3RhcnQyID0gKHUgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgc3VtID0gKChpbWFnZXNbKGluSW1hZ2VQdHIgKyB5U3RhcnQxICsgeFN0YXJ0MSkgfCAwXSB8IDApXG4gICAgICAgICAgICAgICAgICAgICsgKGltYWdlc1soaW5JbWFnZVB0ciArIHlTdGFydDEgKyB4U3RhcnQyKSB8IDBdIHwgMClcbiAgICAgICAgICAgICAgICAgICAgKyAoaW1hZ2VzWyhpbkltYWdlUHRyICsgb2Zmc2V0ICsgdSkgfCAwXSB8IDApXG4gICAgICAgICAgICAgICAgICAgICsgKGltYWdlc1soaW5JbWFnZVB0ciArIHlTdGFydDIgKyB4U3RhcnQxKSB8IDBdIHwgMClcbiAgICAgICAgICAgICAgICAgICAgKyAoaW1hZ2VzWyhpbkltYWdlUHRyICsgeVN0YXJ0MiArIHhTdGFydDIpIHwgMF0gfCAwKSkgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoc3VtIHwgMCkgPT0gKDUgfCAwKSkge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZXNbKG91dEltYWdlUHRyICsgb2Zmc2V0ICsgdSkgfCAwXSA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VzWyhvdXRJbWFnZVB0ciArIG9mZnNldCArIHUpIHwgMF0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3VidHJhY3QoYUltYWdlUHRyLCBiSW1hZ2VQdHIsIG91dEltYWdlUHRyKSB7XG4gICAgICAgIGFJbWFnZVB0ciA9IGFJbWFnZVB0ciB8IDA7XG4gICAgICAgIGJJbWFnZVB0ciA9IGJJbWFnZVB0ciB8IDA7XG4gICAgICAgIG91dEltYWdlUHRyID0gb3V0SW1hZ2VQdHIgfCAwO1xuXG4gICAgICAgIHZhciBsZW5ndGggPSAwO1xuXG4gICAgICAgIGxlbmd0aCA9IGltdWwoc2l6ZSwgc2l6ZSkgfCAwO1xuXG4gICAgICAgIHdoaWxlICgobGVuZ3RoIHwgMCkgPiAwKSB7XG4gICAgICAgICAgICBsZW5ndGggPSAobGVuZ3RoIC0gMSkgfCAwO1xuICAgICAgICAgICAgaW1hZ2VzWyhvdXRJbWFnZVB0ciArIGxlbmd0aCkgfCAwXSA9XG4gICAgICAgICAgICAgICAgKChpbWFnZXNbKGFJbWFnZVB0ciArIGxlbmd0aCkgfCAwXSB8IDApIC0gKGltYWdlc1soYkltYWdlUHRyICsgbGVuZ3RoKSB8IDBdIHwgMCkpIHwgMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJpdHdpc2VPcihhSW1hZ2VQdHIsIGJJbWFnZVB0ciwgb3V0SW1hZ2VQdHIpIHtcbiAgICAgICAgYUltYWdlUHRyID0gYUltYWdlUHRyIHwgMDtcbiAgICAgICAgYkltYWdlUHRyID0gYkltYWdlUHRyIHwgMDtcbiAgICAgICAgb3V0SW1hZ2VQdHIgPSBvdXRJbWFnZVB0ciB8IDA7XG5cbiAgICAgICAgdmFyIGxlbmd0aCA9IDA7XG5cbiAgICAgICAgbGVuZ3RoID0gaW11bChzaXplLCBzaXplKSB8IDA7XG5cbiAgICAgICAgd2hpbGUgKChsZW5ndGggfCAwKSA+IDApIHtcbiAgICAgICAgICAgIGxlbmd0aCA9IChsZW5ndGggLSAxKSB8IDA7XG4gICAgICAgICAgICBpbWFnZXNbKG91dEltYWdlUHRyICsgbGVuZ3RoKSB8IDBdID1cbiAgICAgICAgICAgICAgICAoKGltYWdlc1soYUltYWdlUHRyICsgbGVuZ3RoKSB8IDBdIHwgMCkgfCAoaW1hZ2VzWyhiSW1hZ2VQdHIgKyBsZW5ndGgpIHwgMF0gfCAwKSkgfCAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY291bnROb25aZXJvKGltYWdlUHRyKSB7XG4gICAgICAgIGltYWdlUHRyID0gaW1hZ2VQdHIgfCAwO1xuXG4gICAgICAgIHZhciBzdW0gPSAwLFxuICAgICAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgICAgICBsZW5ndGggPSBpbXVsKHNpemUsIHNpemUpIHwgMDtcblxuICAgICAgICB3aGlsZSAoKGxlbmd0aCB8IDApID4gMCkge1xuICAgICAgICAgICAgbGVuZ3RoID0gKGxlbmd0aCAtIDEpIHwgMDtcbiAgICAgICAgICAgIHN1bSA9ICgoc3VtIHwgMCkgKyAoaW1hZ2VzWyhpbWFnZVB0ciArIGxlbmd0aCkgfCAwXSB8IDApKSB8IDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKHN1bSB8IDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluaXQoaW1hZ2VQdHIsIHZhbHVlKSB7XG4gICAgICAgIGltYWdlUHRyID0gaW1hZ2VQdHIgfCAwO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlIHwgMDtcblxuICAgICAgICB2YXIgbGVuZ3RoID0gMDtcblxuICAgICAgICBsZW5ndGggPSBpbXVsKHNpemUsIHNpemUpIHwgMDtcblxuICAgICAgICB3aGlsZSAoKGxlbmd0aCB8IDApID4gMCkge1xuICAgICAgICAgICAgbGVuZ3RoID0gKGxlbmd0aCAtIDEpIHwgMDtcbiAgICAgICAgICAgIGltYWdlc1soaW1hZ2VQdHIgKyBsZW5ndGgpIHwgMF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpbGF0ZShpbkltYWdlUHRyLCBvdXRJbWFnZVB0cikge1xuICAgICAgICBpbkltYWdlUHRyID0gaW5JbWFnZVB0ciB8IDA7XG4gICAgICAgIG91dEltYWdlUHRyID0gb3V0SW1hZ2VQdHIgfCAwO1xuXG4gICAgICAgIHZhciB2ID0gMCxcbiAgICAgICAgICAgIHUgPSAwLFxuICAgICAgICAgICAgc3VtID0gMCxcbiAgICAgICAgICAgIHlTdGFydDEgPSAwLFxuICAgICAgICAgICAgeVN0YXJ0MiA9IDAsXG4gICAgICAgICAgICB4U3RhcnQxID0gMCxcbiAgICAgICAgICAgIHhTdGFydDIgPSAwLFxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcblxuICAgICAgICBmb3IgKHYgPSAxOyAodiB8IDApIDwgKChzaXplIC0gMSkgfCAwKTsgdiA9ICh2ICsgMSkgfCAwKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAob2Zmc2V0ICsgc2l6ZSkgfCAwO1xuICAgICAgICAgICAgZm9yICh1ID0gMTsgKHUgfCAwKSA8ICgoc2l6ZSAtIDEpIHwgMCk7IHUgPSAodSArIDEpIHwgMCkge1xuICAgICAgICAgICAgICAgIHlTdGFydDEgPSAob2Zmc2V0IC0gc2l6ZSkgfCAwO1xuICAgICAgICAgICAgICAgIHlTdGFydDIgPSAob2Zmc2V0ICsgc2l6ZSkgfCAwO1xuICAgICAgICAgICAgICAgIHhTdGFydDEgPSAodSAtIDEpIHwgMDtcbiAgICAgICAgICAgICAgICB4U3RhcnQyID0gKHUgKyAxKSB8IDA7XG4gICAgICAgICAgICAgICAgc3VtID0gKChpbWFnZXNbKGluSW1hZ2VQdHIgKyB5U3RhcnQxICsgeFN0YXJ0MSkgfCAwXSB8IDApXG4gICAgICAgICAgICAgICAgICAgICsgKGltYWdlc1soaW5JbWFnZVB0ciArIHlTdGFydDEgKyB4U3RhcnQyKSB8IDBdIHwgMClcbiAgICAgICAgICAgICAgICAgICAgKyAoaW1hZ2VzWyhpbkltYWdlUHRyICsgb2Zmc2V0ICsgdSkgfCAwXSB8IDApXG4gICAgICAgICAgICAgICAgICAgICsgKGltYWdlc1soaW5JbWFnZVB0ciArIHlTdGFydDIgKyB4U3RhcnQxKSB8IDBdIHwgMClcbiAgICAgICAgICAgICAgICAgICAgKyAoaW1hZ2VzWyhpbkltYWdlUHRyICsgeVN0YXJ0MiArIHhTdGFydDIpIHwgMF0gfCAwKSkgfCAwO1xuICAgICAgICAgICAgICAgIGlmICgoc3VtIHwgMCkgPiAoMCB8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlc1sob3V0SW1hZ2VQdHIgKyBvZmZzZXQgKyB1KSB8IDBdID0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZXNbKG91dEltYWdlUHRyICsgb2Zmc2V0ICsgdSkgfCAwXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZW1jcHkoc3JjSW1hZ2VQdHIsIGRzdEltYWdlUHRyKSB7XG4gICAgICAgIHNyY0ltYWdlUHRyID0gc3JjSW1hZ2VQdHIgfCAwO1xuICAgICAgICBkc3RJbWFnZVB0ciA9IGRzdEltYWdlUHRyIHwgMDtcblxuICAgICAgICB2YXIgbGVuZ3RoID0gMDtcblxuICAgICAgICBsZW5ndGggPSBpbXVsKHNpemUsIHNpemUpIHwgMDtcblxuICAgICAgICB3aGlsZSAoKGxlbmd0aCB8IDApID4gMCkge1xuICAgICAgICAgICAgbGVuZ3RoID0gKGxlbmd0aCAtIDEpIHwgMDtcbiAgICAgICAgICAgIGltYWdlc1soZHN0SW1hZ2VQdHIgKyBsZW5ndGgpIHwgMF0gPSAoaW1hZ2VzWyhzcmNJbWFnZVB0ciArIGxlbmd0aCkgfCAwXSB8IDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gemVyb0JvcmRlcihpbWFnZVB0cikge1xuICAgICAgICBpbWFnZVB0ciA9IGltYWdlUHRyIHwgMDtcblxuICAgICAgICB2YXIgeCA9IDAsXG4gICAgICAgICAgICB5ID0gMDtcblxuICAgICAgICBmb3IgKHggPSAwOyAoeCB8IDApIDwgKChzaXplIC0gMSkgfCAwKTsgeCA9ICh4ICsgMSkgfCAwKSB7XG4gICAgICAgICAgICBpbWFnZXNbKGltYWdlUHRyICsgeCkgfCAwXSA9IDA7XG4gICAgICAgICAgICBpbWFnZXNbKGltYWdlUHRyICsgeSkgfCAwXSA9IDA7XG4gICAgICAgICAgICB5ID0gKCh5ICsgc2l6ZSkgLSAxKSB8IDA7XG4gICAgICAgICAgICBpbWFnZXNbKGltYWdlUHRyICsgeSkgfCAwXSA9IDA7XG4gICAgICAgICAgICB5ID0gKHkgKyAxKSB8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh4ID0gMDsgKHggfCAwKSA8IChzaXplIHwgMCk7IHggPSAoeCArIDEpIHwgMCkge1xuICAgICAgICAgICAgaW1hZ2VzWyhpbWFnZVB0ciArIHkpIHwgMF0gPSAwO1xuICAgICAgICAgICAgeSA9ICh5ICsgMSkgfCAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2tlbGV0b25pemUoKSB7XG4gICAgICAgIHZhciBzdWJJbWFnZVB0ciA9IDAsXG4gICAgICAgICAgICBlcm9kZWRJbWFnZVB0ciA9IDAsXG4gICAgICAgICAgICB0ZW1wSW1hZ2VQdHIgPSAwLFxuICAgICAgICAgICAgc2tlbEltYWdlUHRyID0gMCxcbiAgICAgICAgICAgIHN1bSA9IDAsXG4gICAgICAgICAgICBkb25lID0gMDtcblxuICAgICAgICBlcm9kZWRJbWFnZVB0ciA9IGltdWwoc2l6ZSwgc2l6ZSkgfCAwO1xuICAgICAgICB0ZW1wSW1hZ2VQdHIgPSAoZXJvZGVkSW1hZ2VQdHIgKyBlcm9kZWRJbWFnZVB0cikgfCAwO1xuICAgICAgICBza2VsSW1hZ2VQdHIgPSAodGVtcEltYWdlUHRyICsgZXJvZGVkSW1hZ2VQdHIpIHwgMDtcblxuICAgICAgICAvLyBpbml0IHNrZWwtaW1hZ2VcbiAgICAgICAgaW5pdChza2VsSW1hZ2VQdHIsIDApO1xuICAgICAgICB6ZXJvQm9yZGVyKHN1YkltYWdlUHRyKTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBlcm9kZShzdWJJbWFnZVB0ciwgZXJvZGVkSW1hZ2VQdHIpO1xuICAgICAgICAgICAgZGlsYXRlKGVyb2RlZEltYWdlUHRyLCB0ZW1wSW1hZ2VQdHIpO1xuICAgICAgICAgICAgc3VidHJhY3Qoc3ViSW1hZ2VQdHIsIHRlbXBJbWFnZVB0ciwgdGVtcEltYWdlUHRyKTtcbiAgICAgICAgICAgIGJpdHdpc2VPcihza2VsSW1hZ2VQdHIsIHRlbXBJbWFnZVB0ciwgc2tlbEltYWdlUHRyKTtcbiAgICAgICAgICAgIG1lbWNweShlcm9kZWRJbWFnZVB0ciwgc3ViSW1hZ2VQdHIpO1xuICAgICAgICAgICAgc3VtID0gY291bnROb25aZXJvKHN1YkltYWdlUHRyKSB8IDA7XG4gICAgICAgICAgICBkb25lID0gKChzdW0gfCAwKSA9PSAwIHwgMCk7XG4gICAgICAgIH0gd2hpbGUgKCFkb25lKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBza2VsZXRvbml6ZTogc2tlbGV0b25pemVcbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgU2tlbGV0b25pemVyO1xuLyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cbiIsImltcG9ydCBfcG9seWZpbGxzIGZyb20gJy4vY29tbW9uL3BvbHlmaWxscyc7XG5pbXBvcnQgeyBSZXN1bHRDb2xsZWN0b3IgfSBmcm9tICcuL2FuYWx5dGljcy9yZXN1bHQtY29sbGVjdG9yJztcbmltcG9ydCB7IEJveCB9IGZyb20gJy4vY29tbW9uL2JveCc7XG5pbXBvcnQgeyBFdmVudENhbGxiYWNrLCBFdmVudHMsIEV2ZW50U3Vic2NyaXB0aW9uIH0gZnJvbSAnLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IEltYWdlRGVidWcgfSBmcm9tICcuL2NvbW1vbi9pbWFnZS1kZWJ1Zyc7XG5pbXBvcnQgeyBJbWFnZVdyYXBwZXIgfSBmcm9tICcuL2NvbW1vbi9pbWFnZS13cmFwcGVyJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnLi9jb21tb24vbWVyZ2UnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL2NvbW1vbi9wb2ludCc7XG5pbXBvcnQgeyBjb25maWcgYXMgZGVmYXVsdENvbmZpZywgUXVhZ2dhQ29uZmlnIH0gZnJvbSAnLi9jb25maWcvY29uZmlnJztcbmltcG9ydCB7IEJhcmNvZGVEZWNvZGVyLCBRdWFnZ2FCYXJjb2RlIH0gZnJvbSAnLi9kZWNvZGVyL2JhcmNvZGUtZGVjb2Rlcic7XG5pbXBvcnQgeyBDYW1lcmFBY2Nlc3MgfSBmcm9tICcuL2lucHV0L2NhbWVyYS1hY2Nlc3MnO1xuaW1wb3J0IHsgRnJhbWVHcmFiYmVyIH0gZnJvbSAnLi9pbnB1dC9mcmFtZS1ncmFiYmVyJztcbmltcG9ydCB7IEltYWdlU3RyZWFtIH0gZnJvbSAnLi9pbnB1dC9pbWFnZS1zdHJlYW0nO1xuaW1wb3J0IHsgSW5wdXRTdHJlYW0gfSBmcm9tICcuL2lucHV0L2lucHV0LXN0cmVhbSc7XG5pbXBvcnQgeyBMaXZlU3RyZWFtIH0gZnJvbSAnLi9pbnB1dC9saXZlLXN0cmVhbSc7XG5pbXBvcnQgeyBWaWRlb1N0cmVhbSB9IGZyb20gJy4vaW5wdXQvdmlkZW8tc3RyZWFtJztcbmltcG9ydCB7IGNoZWNrSW1hZ2VDb25zdHJhaW50cyB9IGZyb20gJy4vaW5wdXQvaW5wdXQtc3RyZWFtLXV0aWxzJztcbmltcG9ydCB7IEJhcmNvZGVMb2NhdG9yIH0gZnJvbSAnLi9sb2NhdG9yL2JhcmNvZGUtbG9jYXRvcic7XG5pbXBvcnQgeyBCYXJjb2RlUmVhZGVyRGVjbGFyYXRpb24gfSBmcm9tICcuL3JlYWRlci9iYXJjb2RlLXJlYWRlcic7XG5cbmludGVyZmFjZSBXb3JrZXJUaHJlYWQge1xuICAgIHdvcmtlcjogV29ya2VyO1xuICAgIGltYWdlRGF0YTogVWludDhBcnJheTtcbiAgICBidXN5OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1YWdnYUNhbnZhc0NvbnRhaW5lciB7XG4gICAgY3R4OiB7XG4gICAgICAgIGltYWdlOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgICAgIG92ZXJsYXk6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICAgIH0sXG4gICAgZG9tOiB7XG4gICAgICAgIGltYWdlOiBIVE1MQ2FudmFzRWxlbWVudCxcbiAgICAgICAgb3ZlcmxheTogSFRNTENhbnZhc0VsZW1lbnRcbiAgICB9XG59XG5cbmxldCBfaW5wdXRTdHJlYW06IElucHV0U3RyZWFtO1xubGV0IF9mcmFtZUdyYWJiZXI6IEZyYW1lR3JhYmJlcjtcbmxldCBfc3RvcHBlZDogYm9vbGVhbjtcbmNvbnN0IF9jYW52YXNDb250YWluZXI6IFF1YWdnYUNhbnZhc0NvbnRhaW5lciA9IHtcbiAgICBjdHg6IHtcbiAgICAgICAgaW1hZ2U6IG51bGwsXG4gICAgICAgIG92ZXJsYXk6IG51bGxcbiAgICB9LFxuICAgIGRvbToge1xuICAgICAgICBpbWFnZTogbnVsbCxcbiAgICAgICAgb3ZlcmxheTogbnVsbFxuICAgIH1cbn07XG5sZXQgX2lucHV0SW1hZ2VXcmFwcGVyOiBJbWFnZVdyYXBwZXI7XG5sZXQgX2xvY2F0b3I6IEJhcmNvZGVMb2NhdG9yO1xubGV0IF9ib3hTaXplOiBCb3g7XG5sZXQgX2RlY29kZXI6IEJhcmNvZGVEZWNvZGVyO1xubGV0IF93b3JrZXJQb29sID0gbmV3IEFycmF5PFdvcmtlclRocmVhZD4oKTtcbmxldCBfb25VSVRocmVhZDogYm9vbGVhbjtcbmxldCBfcmVzdWx0Q29sbGVjdG9yOiBSZXN1bHRDb2xsZWN0b3I7XG5sZXQgX2NvbmZpZzogUXVhZ2dhQ29uZmlnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgaW5pdChjb25maWc6IFF1YWdnYUNvbmZpZywgY2I6ICgpID0+IHZvaWQsIGltYWdlV3JhcHBlcj86IEltYWdlV3JhcHBlcikge1xuICAgICAgICBfb25VSVRocmVhZCA9IHRydWU7XG4gICAgICAgIF9jb25maWcgPSBtZXJnZShkZWZhdWx0Q29uZmlnLCBjb25maWcpO1xuICAgICAgICBpZiAoaW1hZ2VXcmFwcGVyKSB7XG4gICAgICAgICAgICBfb25VSVRocmVhZCA9IGZhbHNlO1xuICAgICAgICAgICAgX2luaXRpYWxpemVEYXRhKGltYWdlV3JhcHBlcik7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX2luaXRJbnB1dFN0cmVhbShjYik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgQ2FtZXJhQWNjZXNzOiBDYW1lcmFBY2Nlc3MsXG5cbiAgICBJbWFnZURlYnVnOiBJbWFnZURlYnVnLFxuXG4gICAgSW1hZ2VXcmFwcGVyOiBJbWFnZVdyYXBwZXIsXG5cbiAgICBSZXN1bHRDb2xsZWN0b3I6IFJlc3VsdENvbGxlY3RvcixcblxuICAgIGdldCBjYW52YXMoKTogUXVhZ2dhQ2FudmFzQ29udGFpbmVyIHtcbiAgICAgICAgcmV0dXJuIF9jYW52YXNDb250YWluZXI7XG4gICAgfSxcblxuICAgIHN0YXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAoX29uVUlUaHJlYWQgJiYgX2NvbmZpZy5pbnB1dFN0cmVhbS50eXBlID09PSAnTGl2ZVN0cmVhbScpIHtcbiAgICAgICAgICAgIF9zdGFydENvbnRpbnVvdXNVcGRhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF91cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wKCk6IHZvaWQge1xuICAgICAgICBfc3RvcHBlZCA9IHRydWU7XG4gICAgICAgIF9hZGp1c3RXb3JrZXJQb29sKDApO1xuICAgICAgICBpZiAoX2NvbmZpZy5pbnB1dFN0cmVhbS50eXBlID09PSAnTGl2ZVN0cmVhbScpIHtcbiAgICAgICAgICAgIENhbWVyYUFjY2Vzcy5yZWxlYXNlKCk7XG4gICAgICAgICAgICBfaW5wdXRTdHJlYW0uY2xlYXJFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVjb2RlU2luZ2xlKGNvbmZpZzogUXVhZ2dhQ29uZmlnLCByZXN1bHRDYWxsYmFjazogKF86IFF1YWdnYUJhcmNvZGUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uZmlnID0gbWVyZ2Uoe1xuICAgICAgICAgICAgaW5wdXRTdHJlYW06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnSW1hZ2VTdHJlYW0nLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaXplOiA4MDAsXG4gICAgICAgICAgICAgICAgc3JjOiBjb25maWcuc3JjXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVtT2ZXb3JrZXJzOiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcuZGVidWcpID8gMCA6IDEsXG4gICAgICAgICAgICBsb2NhdG9yOiB7XG4gICAgICAgICAgICAgICAgaGFsZlNhbXBsZTogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY29uZmlnKTtcblxuICAgICAgICB0aGlzLmluaXQoY29uZmlnLCAoKSA9PiB7XG4gICAgICAgICAgICBFdmVudHMub25jZSgncHJvY2Vzc2VkJywgKHJlc3VsdDogUXVhZ2dhQmFyY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrLmNhbGwobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgcGF1c2UoKTogdm9pZCB7XG4gICAgICAgIF9zdG9wcGVkID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgb25EZXRlY3RlZChjYWxsYmFjazogRXZlbnRTdWJzY3JpcHRpb24gfCBFdmVudENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAgIEV2ZW50cy5zdWJzY3JpYmUoJ2RldGVjdGVkJywgY2FsbGJhY2spO1xuICAgIH0sXG5cbiAgICBvZmZEZXRlY3RlZChjYWxsYmFjazogRXZlbnRDYWxsYmFjayk6IHZvaWQge1xuICAgICAgICBFdmVudHMudW5zdWJzY3JpYmUoJ2RldGVjdGVkJywgY2FsbGJhY2spO1xuICAgIH0sXG5cbiAgICBvblByb2Nlc3NlZChjYWxsYmFjazogRXZlbnRTdWJzY3JpcHRpb24gfCBFdmVudENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAgIEV2ZW50cy5zdWJzY3JpYmUoJ3Byb2Nlc3NlZCcsIGNhbGxiYWNrKTtcbiAgICB9LFxuXG4gICAgb2ZmUHJvY2Vzc2VkKGNhbGxiYWNrOiBFdmVudENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAgIEV2ZW50cy51bnN1YnNjcmliZSgncHJvY2Vzc2VkJywgY2FsbGJhY2spO1xuICAgIH0sXG5cbiAgICBzZXRSZWFkZXJzKHJlYWRlcnM6IEFycmF5PEJhcmNvZGVSZWFkZXJEZWNsYXJhdGlvbj4pOiB2b2lkIHtcbiAgICAgICAgaWYgKF9kZWNvZGVyKSB7XG4gICAgICAgICAgICBfZGVjb2Rlci5zZXRSZWFkZXJzKHJlYWRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKF9vblVJVGhyZWFkICYmIF93b3JrZXJQb29sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIF93b3JrZXJQb29sLmZvckVhY2goKHsgd29ya2VyIH0pID0+IHdvcmtlci5wb3N0TWVzc2FnZSh7IGNtZDogJ3NldFJlYWRlcnMnLCByZWFkZXJzIH0pKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZWdpc3RlclJlc3VsdENvbGxlY3RvcihyZXN1bHRDb2xsZWN0b3I6IFJlc3VsdENvbGxlY3Rvcik6IHZvaWQge1xuICAgICAgICBpZiAocmVzdWx0Q29sbGVjdG9yICYmIHR5cGVvZiByZXN1bHRDb2xsZWN0b3IuYWRkUmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBfcmVzdWx0Q29sbGVjdG9yID0gcmVzdWx0Q29sbGVjdG9yO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZnVuY3Rpb24gX2luaXRpYWxpemVEYXRhKGltYWdlV3JhcHBlcj86IEltYWdlV3JhcHBlcik6IHZvaWQge1xuICAgIF9pbml0QnVmZmVycyhpbWFnZVdyYXBwZXIpO1xuICAgIF9kZWNvZGVyID0gbmV3IEJhcmNvZGVEZWNvZGVyKF9jb25maWcuZGVjb2RlciwgX2lucHV0SW1hZ2VXcmFwcGVyKTtcbn1cblxuZnVuY3Rpb24gX2luaXRJbnB1dFN0cmVhbShjYWxsYmFjazogKGVycj86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgICBpZiAoX2NvbmZpZy5pbnB1dFN0cmVhbS50eXBlID09PSAnVmlkZW9TdHJlYW0nKSB7XG4gICAgICAgIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgX2lucHV0U3RyZWFtID0gbmV3IFZpZGVvU3RyZWFtKHZpZGVvKTtcbiAgICB9IGVsc2UgaWYgKF9jb25maWcuaW5wdXRTdHJlYW0udHlwZSA9PT0gJ0ltYWdlU3RyZWFtJykge1xuICAgICAgICBfaW5wdXRTdHJlYW0gPSBuZXcgSW1hZ2VTdHJlYW0oKTtcbiAgICB9IGVsc2UgaWYgKF9jb25maWcuaW5wdXRTdHJlYW0udHlwZSA9PT0gJ0xpdmVTdHJlYW0nKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gX2dldFZpZXdQb3J0KCk7XG4gICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgdmlkZW8gPSB2aWV3cG9ydC5xdWVyeVNlbGVjdG9yKCd2aWRlbycpO1xuICAgICAgICAgICAgaWYgKCF2aWRlbykge1xuICAgICAgICAgICAgICAgIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgICAgICAgICB2aWV3cG9ydC5hcHBlbmRDaGlsZCh2aWRlbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2lucHV0U3RyZWFtID0gbmV3IExpdmVTdHJlYW0odmlkZW8pO1xuICAgICAgICBDYW1lcmFBY2Nlc3MucmVxdWVzdCh2aWRlbywgX2NvbmZpZy5pbnB1dFN0cmVhbS5jb25zdHJhaW50cylcbiAgICAgICAgICAgIC50aGVuKCgpID0+IF9pbnB1dFN0cmVhbS50cmlnZ2VyKCdjYW5yZWNvcmQnKSwgZXJyID0+IGNhbGxiYWNrKGVycikpO1xuICAgIH1cblxuICAgIF9pbnB1dFN0cmVhbS5zZXRBdHRyaWJ1dGUoJ3ByZWxvYWQnLCAnYXV0bycpO1xuICAgIF9pbnB1dFN0cmVhbS5jb25maWcgPSBfY29uZmlnLmlucHV0U3RyZWFtO1xuICAgIF9pbnB1dFN0cmVhbS5hZGRFdmVudExpc3RlbmVyKCdjYW5yZWNvcmQnLCBfY2FuUmVjb3JkLmJpbmQodGhpcywgY2FsbGJhY2spKTtcbn1cblxuZnVuY3Rpb24gX2dldFZpZXdQb3J0KCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCB0YXJnZXQgPSBfY29uZmlnLmlucHV0U3RyZWFtLnRhcmdldDtcbiAgICAvLyBDaGVjayBpZiB0YXJnZXQgaXMgYWxyZWFkeSBhIERPTSBlbGVtZW50XG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlICcjaW50ZXJhY3RpdmUudmlld3BvcnQnIGFzIGEgZmFsbGJhY2sgc2VsZWN0b3IgKGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KVxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnID8gdGFyZ2V0IDogJyNpbnRlcmFjdGl2ZS52aWV3cG9ydCc7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9jYW5SZWNvcmQoY2I6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjaGVja0ltYWdlQ29uc3RyYWludHMoX2lucHV0U3RyZWFtLCBfY29uZmlnLmxvY2F0b3IpO1xuICAgIF9pbml0Q2FudmFzKCk7XG4gICAgX2ZyYW1lR3JhYmJlciA9IG5ldyBGcmFtZUdyYWJiZXIoX2lucHV0U3RyZWFtLCBfY2FudmFzQ29udGFpbmVyLmRvbS5pbWFnZSk7XG5cbiAgICBfYWRqdXN0V29ya2VyUG9vbChfY29uZmlnLm51bU9mV29ya2VycywgKCkgPT4ge1xuICAgICAgICBpZiAoX2NvbmZpZy5udW1PZldvcmtlcnMgPT09IDApIHtcbiAgICAgICAgICAgIF9pbml0aWFsaXplRGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgX2lucHV0U3RyZWFtLnBsYXkoKTtcbiAgICAgICAgY2IoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2luaXRDYW52YXMoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBfZ2V0Vmlld1BvcnQoKTtcbiAgICAgICAgX2NhbnZhc0NvbnRhaW5lci5kb20uaW1hZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdjYW52YXMuaW1nQnVmZmVyJyk7XG4gICAgICAgIGlmICghX2NhbnZhc0NvbnRhaW5lci5kb20uaW1hZ2UpIHtcbiAgICAgICAgICAgIF9jYW52YXNDb250YWluZXIuZG9tLmltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBfY2FudmFzQ29udGFpbmVyLmRvbS5pbWFnZS5jbGFzc05hbWUgPSAnaW1nQnVmZmVyJztcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCAmJiBfY29uZmlnLmlucHV0U3RyZWFtLnR5cGUgPT09ICdJbWFnZVN0cmVhbScpIHtcbiAgICAgICAgICAgICAgICB2aWV3cG9ydC5hcHBlbmRDaGlsZChfY2FudmFzQ29udGFpbmVyLmRvbS5pbWFnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2NhbnZhc0NvbnRhaW5lci5jdHguaW1hZ2UgPSBfY2FudmFzQ29udGFpbmVyLmRvbS5pbWFnZS5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBfY2FudmFzQ29udGFpbmVyLmRvbS5pbWFnZS53aWR0aCA9IF9pbnB1dFN0cmVhbS5jYW52YXNXaWR0aDtcbiAgICAgICAgX2NhbnZhc0NvbnRhaW5lci5kb20uaW1hZ2UuaGVpZ2h0ID0gX2lucHV0U3RyZWFtLmNhbnZhc0hlaWdodDtcblxuICAgICAgICBfY2FudmFzQ29udGFpbmVyLmRvbS5vdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignY2FudmFzLmRyYXdpbmdCdWZmZXInKTtcbiAgICAgICAgaWYgKCFfY2FudmFzQ29udGFpbmVyLmRvbS5vdmVybGF5KSB7XG4gICAgICAgICAgICBfY2FudmFzQ29udGFpbmVyLmRvbS5vdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBfY2FudmFzQ29udGFpbmVyLmRvbS5vdmVybGF5LmNsYXNzTmFtZSA9ICdkcmF3aW5nQnVmZmVyJztcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIHZpZXdwb3J0LmFwcGVuZENoaWxkKF9jYW52YXNDb250YWluZXIuZG9tLm92ZXJsYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2xlYXJGaXggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpO1xuICAgICAgICAgICAgY2xlYXJGaXguc2V0QXR0cmlidXRlKCdjbGVhcicsICdhbGwnKTtcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIHZpZXdwb3J0LmFwcGVuZENoaWxkKGNsZWFyRml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfY2FudmFzQ29udGFpbmVyLmN0eC5vdmVybGF5ID0gX2NhbnZhc0NvbnRhaW5lci5kb20ub3ZlcmxheS5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBfY2FudmFzQ29udGFpbmVyLmRvbS5vdmVybGF5LndpZHRoID0gX2lucHV0U3RyZWFtLmNhbnZhc1dpZHRoO1xuICAgICAgICBfY2FudmFzQ29udGFpbmVyLmRvbS5vdmVybGF5LmhlaWdodCA9IF9pbnB1dFN0cmVhbS5jYW52YXNIZWlnaHQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfaW5pdEJ1ZmZlcnMoaW1hZ2VXcmFwcGVyPzogSW1hZ2VXcmFwcGVyKTogdm9pZCB7XG4gICAgaWYgKGltYWdlV3JhcHBlcikge1xuICAgICAgICBfaW5wdXRJbWFnZVdyYXBwZXIgPSBpbWFnZVdyYXBwZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2lucHV0SW1hZ2VXcmFwcGVyID0gbmV3IEltYWdlV3JhcHBlcih7XG4gICAgICAgICAgICB4OiBfaW5wdXRTdHJlYW0ud2lkdGgsXG4gICAgICAgICAgICB5OiBfaW5wdXRTdHJlYW0uaGVpZ2h0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKF9pbnB1dEltYWdlV3JhcHBlci5zaXplKTtcbiAgICB9XG4gICAgX2JveFNpemUgPSBbXG4gICAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgICB7IHg6IDAsIHk6IF9pbnB1dEltYWdlV3JhcHBlci5zaXplLnkgfSxcbiAgICAgICAgeyB4OiBfaW5wdXRJbWFnZVdyYXBwZXIuc2l6ZS54LCB5OiBfaW5wdXRJbWFnZVdyYXBwZXIuc2l6ZS55IH0sXG4gICAgICAgIHsgeDogX2lucHV0SW1hZ2VXcmFwcGVyLnNpemUueCwgeTogMCB9XG4gICAgXTtcbiAgICBfbG9jYXRvciA9IG5ldyBCYXJjb2RlTG9jYXRvcihfaW5wdXRJbWFnZVdyYXBwZXIsIF9jb25maWcubG9jYXRvcik7XG59XG5cbmZ1bmN0aW9uIF90cmFuc2Zvcm0ocG9seWdvbjogUmVhZG9ubHlBcnJheTxQb2ludD4sIG9mZnNldDogUG9pbnQpOiB2b2lkIHtcbiAgICBwb2x5Z29uLmZvckVhY2godmVydGV4ID0+IHtcbiAgICAgICAgdmVydGV4LnggKz0gb2Zmc2V0Lng7XG4gICAgICAgIHZlcnRleC55ICs9IG9mZnNldC55O1xuICAgIH0pXG59XG5cbmZ1bmN0aW9uIF90cmFuc2Zvcm1SZXN1bHQocmVzdWx0OiBRdWFnZ2FCYXJjb2RlLCBvZmZzZXQ6IFBvaW50KTogdm9pZCB7XG4gICAgaWYgKHJlc3VsdC5iYXJjb2Rlcykge1xuICAgICAgICByZXN1bHQuYmFyY29kZXMuZm9yRWFjaChiYXJjb2RlID0+IF90cmFuc2Zvcm1SZXN1bHQoYmFyY29kZSwgb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5saW5lKSB7XG4gICAgICAgIF90cmFuc2Zvcm0ocmVzdWx0LmxpbmUsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5ib3gpIHtcbiAgICAgICAgX3RyYW5zZm9ybShyZXN1bHQuYm94LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuYm94ZXMpIHtcbiAgICAgICAgcmVzdWx0LmJveGVzLmZvckVhY2goYm94ID0+IF90cmFuc2Zvcm0oYm94LCBvZmZzZXQpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9hZGRSZXN1bHQocmVzdWx0OiBRdWFnZ2FCYXJjb2RlLCBpbWFnZURhdGE6IFVpbnQ4QXJyYXksIGNhbnZhc1dpZHRoOiBudW1iZXIsIGNhbnZhc0hlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGltYWdlRGF0YSAmJiBfcmVzdWx0Q29sbGVjdG9yKSB7XG4gICAgICAgIGlmIChyZXN1bHQuYmFyY29kZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5iYXJjb2Rlcy5mb3JFYWNoKCh7IGNvZGVSZXN1bHQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb2RlUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIF9yZXN1bHRDb2xsZWN0b3IuYWRkUmVzdWx0KGltYWdlRGF0YSwgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodCwgY29kZVJlc3VsdClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuY29kZVJlc3VsdCkge1xuICAgICAgICAgICAgX3Jlc3VsdENvbGxlY3Rvci5hZGRSZXN1bHQoaW1hZ2VEYXRhLCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0LCByZXN1bHQuY29kZVJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9oYXNDb2RlUmVzdWx0KHJlc3VsdDogUXVhZ2dhQmFyY29kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXN1bHQgJiYgKCEhcmVzdWx0LmNvZGVSZXN1bHQgfHwgcmVzdWx0LmJhcmNvZGVzICYmIHJlc3VsdC5iYXJjb2Rlcy5zb21lKGJhcmNvZGUgPT4gISFiYXJjb2RlLmNvZGVSZXN1bHQpKTtcbn1cblxuZnVuY3Rpb24gX3B1Ymxpc2hSZXN1bHQocmVzdWx0PzogUXVhZ2dhQmFyY29kZSwgaW1hZ2VEYXRhPzogVWludDhBcnJheSk6IHZvaWQge1xuICAgIGxldCByZXN1bHRUb1B1Ymxpc2g6IFF1YWdnYUJhcmNvZGUgfCBBcnJheTxRdWFnZ2FCYXJjb2RlPiA9IHJlc3VsdDtcblxuICAgIGlmIChyZXN1bHQgJiYgX29uVUlUaHJlYWQpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gX2lucHV0U3RyZWFtLnRvcExlZnQ7XG5cbiAgICAgICAgaWYgKG9mZnNldC54ICE9PSAwIHx8IG9mZnNldC55ICE9PSAwKSB7XG4gICAgICAgICAgICBfdHJhbnNmb3JtUmVzdWx0KHJlc3VsdCwgb2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9hZGRSZXN1bHQocmVzdWx0LCBpbWFnZURhdGEsIF9pbnB1dFN0cmVhbS5jYW52YXNXaWR0aCwgX2lucHV0U3RyZWFtLmNhbnZhc0hlaWdodCk7XG4gICAgICAgIHJlc3VsdFRvUHVibGlzaCA9IHJlc3VsdC5iYXJjb2RlcyB8fCByZXN1bHQ7XG4gICAgfVxuXG4gICAgRXZlbnRzLnB1Ymxpc2goJ3Byb2Nlc3NlZCcsIHJlc3VsdFRvUHVibGlzaCk7XG4gICAgaWYgKF9oYXNDb2RlUmVzdWx0KHJlc3VsdCkpIHtcbiAgICAgICAgRXZlbnRzLnB1Ymxpc2goJ2RldGVjdGVkJywgcmVzdWx0VG9QdWJsaXNoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9sb2NhdGVBbmREZWNvZGUoKTogdm9pZCB7XG4gICAgY29uc3QgYm94ZXMgPSBfY29uZmlnLmxvY2F0ZSA/IF9sb2NhdG9yLmxvY2F0ZSgpIDogW19ib3hTaXplXTtcbiAgICBjb25zdCByZXN1bHQgPSBfZGVjb2Rlci5kZWNvZGVGcm9tQm91bmRpbmdCb3hlcyhib3hlcyk7XG4gICAgX3B1Ymxpc2hSZXN1bHQocmVzdWx0LCBfaW5wdXRJbWFnZVdyYXBwZXIuZGF0YSk7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGUoKTogdm9pZCB7XG4gICAgaWYgKF9vblVJVGhyZWFkKSB7XG4gICAgICAgIGlmIChfd29ya2VyUG9vbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGVXb3JrZXIgPSBfd29ya2VyUG9vbC5maW5kKCh7IGJ1c3kgfSkgPT4gIWJ1c3kpO1xuICAgICAgICAgICAgaWYgKCFhdmFpbGFibGVXb3JrZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFsbCB3b3JrZXJzIGFyZSBidXN5XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGF2YWlsYWJsZVdvcmtlci5pbWFnZURhdGE7XG5cbiAgICAgICAgICAgIGlmIChfZnJhbWVHcmFiYmVyLmdyYWIoaW1hZ2VEYXRhKSkge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVdvcmtlci5idXN5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVXb3JrZXIud29ya2VyLnBvc3RNZXNzYWdlKHsgY21kOiAncHJvY2VzcycsIGltYWdlRGF0YSB9LCBbaW1hZ2VEYXRhLmJ1ZmZlcl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKF9mcmFtZUdyYWJiZXIuZ3JhYihfaW5wdXRJbWFnZVdyYXBwZXIuZGF0YSkpIHtcbiAgICAgICAgICAgIF9sb2NhdGVBbmREZWNvZGUoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIF9sb2NhdGVBbmREZWNvZGUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9zdGFydENvbnRpbnVvdXNVcGRhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGVsYXkgPSAxMDAwIC8gKF9jb25maWcuZnJlcXVlbmN5IHx8IDYwKTtcbiAgICBsZXQgbmV4dCA9IG51bGw7XG4gICAgX3N0b3BwZWQgPSBmYWxzZTtcblxuICAgIChmdW5jdGlvbiBmcmFtZSh0aW1lc3RhbXApOiB2b2lkIHtcbiAgICAgICAgbmV4dCA9IG5leHQgfHwgdGltZXN0YW1wO1xuICAgICAgICBpZiAoIV9zdG9wcGVkKSB7XG4gICAgICAgICAgICBpZiAodGltZXN0YW1wID49IG5leHQpIHtcbiAgICAgICAgICAgICAgICBuZXh0ICs9IGRlbGF5O1xuICAgICAgICAgICAgICAgIF91cGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWUpO1xuICAgICAgICB9XG4gICAgfShwZXJmb3JtYW5jZS5ub3coKSkpO1xufVxuXG5mdW5jdGlvbiBfaW5pdFdvcmtlcihjYjogKHdvcmtlclRocmVhZDogV29ya2VyVGhyZWFkKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgYmxvYlVSTCA9IF9nZW5lcmF0ZVdvcmtlckJsb2IoKTtcbiAgICBjb25zdCB3b3JrZXJUaHJlYWQgPSB7XG4gICAgICAgIHdvcmtlcjogbmV3IFdvcmtlcihibG9iVVJMKSxcbiAgICAgICAgaW1hZ2VEYXRhOiBuZXcgVWludDhBcnJheShfaW5wdXRTdHJlYW0ud2lkdGggKiBfaW5wdXRTdHJlYW0uaGVpZ2h0KSxcbiAgICAgICAgYnVzeTogdHJ1ZVxuICAgIH07XG5cbiAgICB3b3JrZXJUaHJlYWQud29ya2VyLm9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICBpZiAoZGF0YS5ldmVudCA9PT0gJ2luaXRpYWxpemVkJykge1xuICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVVJMKTtcbiAgICAgICAgICAgIHdvcmtlclRocmVhZC5idXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB3b3JrZXJUaHJlYWQuaW1hZ2VEYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5pbWFnZURhdGEpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnV29ya2VyIGluaXRpYWxpemVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYih3b3JrZXJUaHJlYWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuZXZlbnQgPT09ICdwcm9jZXNzZWQnKSB7XG4gICAgICAgICAgICB3b3JrZXJUaHJlYWQuYnVzeSA9IGZhbHNlO1xuICAgICAgICAgICAgd29ya2VyVGhyZWFkLmltYWdlRGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEuaW1hZ2VEYXRhKTtcbiAgICAgICAgICAgIF9wdWJsaXNoUmVzdWx0KGRhdGEucmVzdWx0LCB3b3JrZXJUaHJlYWQuaW1hZ2VEYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmV2ZW50ID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdXb3JrZXIgZXJyb3I6JywgZGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB3b3JrZXJUaHJlYWQud29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgY21kOiAnaW5pdCcsXG4gICAgICAgIHNpemU6IHsgeDogX2lucHV0U3RyZWFtLndpZHRoLCB5OiBfaW5wdXRTdHJlYW0uaGVpZ2h0IH0sXG4gICAgICAgIGltYWdlRGF0YTogd29ya2VyVGhyZWFkLmltYWdlRGF0YSxcbiAgICAgICAgY29uZmlnOiBtZXJnZShfY29uZmlnLCB7IGlucHV0U3RyZWFtOiB7IHRhcmdldDogbnVsbCB9IH0pXG4gICAgfSwgW3dvcmtlclRocmVhZC5pbWFnZURhdGEuYnVmZmVyXSk7XG59XG5cbmZ1bmN0aW9uIF93b3JrZXJJbnRlcmZhY2UoZmFjdG9yeTogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgUXVhZ2dhOiBhbnk7XG4gICAgY29uc3Qgd29ya2VyOiBhbnkgPSBzZWxmO1xuICAgIGxldCBpbWFnZVdyYXBwZXI6IEltYWdlV3JhcHBlcjtcblxuICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICAgIFF1YWdnYSA9IGZhY3RvcnkoKS5kZWZhdWx0O1xuICAgICAgICBpZiAoIVF1YWdnYSkge1xuICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsgZXZlbnQ6ICdlcnJvcicsIG1lc3NhZ2U6ICdRdWFnZ2EgY291bGQgbm90IGJlIGNyZWF0ZWQnIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZi5vbm1lc3NhZ2UgPSAoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgaWYgKGRhdGEuY21kID09PSAnaW5pdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZzogUXVhZ2dhQ29uZmlnID0gZGF0YS5jb25maWc7XG4gICAgICAgICAgICBjb25maWcubnVtT2ZXb3JrZXJzID0gMDtcbiAgICAgICAgICAgIGltYWdlV3JhcHBlciA9IG5ldyBRdWFnZ2EuSW1hZ2VXcmFwcGVyKHsgeDogZGF0YS5zaXplLngsIHk6IGRhdGEuc2l6ZS55IH0sIG5ldyBVaW50OEFycmF5KGRhdGEuaW1hZ2VEYXRhKSk7XG4gICAgICAgICAgICBRdWFnZ2EuaW5pdChcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgKCkgPT4gd29ya2VyLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICB7IGV2ZW50OiAnaW5pdGlhbGl6ZWQnLCBpbWFnZURhdGE6IGltYWdlV3JhcHBlci5kYXRhIH0sIFtpbWFnZVdyYXBwZXIuZGF0YS5idWZmZXJdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpbWFnZVdyYXBwZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBRdWFnZ2Eub25Qcm9jZXNzZWQoKHJlc3VsdDogUXVhZ2dhQmFyY29kZSkgPT5cbiAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIHsgZXZlbnQ6ICdwcm9jZXNzZWQnLCBpbWFnZURhdGE6IGltYWdlV3JhcHBlci5kYXRhLCByZXN1bHQgfSwgW2ltYWdlV3JhcHBlci5kYXRhLmJ1ZmZlcl1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuY21kID09PSAncHJvY2VzcycpIHtcbiAgICAgICAgICAgIGltYWdlV3JhcHBlci5kYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5pbWFnZURhdGEpO1xuICAgICAgICAgICAgUXVhZ2dhLnN0YXJ0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5jbWQgPT09ICdzZXRSZWFkZXJzJykge1xuICAgICAgICAgICAgUXVhZ2dhLnNldFJlYWRlcnMoZGF0YS5yZWFkZXJzKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIF9nZW5lcmF0ZVdvcmtlckJsb2IoKTogc3RyaW5nIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGV0IGZhY3RvcnlTb3VyY2U6IHN0cmluZyA9IF9fZmFjdG9yeVNvdXJjZV9fIHx8ICcnO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYCgke193b3JrZXJJbnRlcmZhY2UudG9TdHJpbmcoKX0pKCR7ZmFjdG9yeVNvdXJjZX0pO2BdLCB7IHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnIH0pO1xuXG4gICAgcmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xufVxuXG5mdW5jdGlvbiBfYWRqdXN0V29ya2VyUG9vbChjYXBhY2l0eTogbnVtYmVyLCBjYj86ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBpbmNyZWFzZUJ5ID0gY2FwYWNpdHkgLSBfd29ya2VyUG9vbC5sZW5ndGg7XG5cbiAgICBpZiAoaW5jcmVhc2VCeSA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmNyZWFzZUJ5OyBpKyspIHtcbiAgICAgICAgICAgIF9pbml0V29ya2VyKHdvcmtlclRocmVhZCA9PiB7XG4gICAgICAgICAgICAgICAgX3dvcmtlclBvb2wucHVzaCh3b3JrZXJUaHJlYWQpO1xuICAgICAgICAgICAgICAgIGlmIChfd29ya2VyUG9vbC5sZW5ndGggPj0gY2FwYWNpdHkgJiYgY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbmNyZWFzZUJ5IDwgMCkge1xuICAgICAgICAgICAgX3dvcmtlclBvb2wuc2xpY2UoaW5jcmVhc2VCeSkuZm9yRWFjaCgoeyB3b3JrZXIgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnV29ya2VyIHRlcm1pbmF0ZWQhJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfd29ya2VyUG9vbCA9IF93b3JrZXJQb29sLnNsaWNlKDAsIGluY3JlYXNlQnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYiAmJiBjYigpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJveCB9IGZyb20gJy4uL2NvbW1vbi9ib3gnO1xuaW1wb3J0IHsgQ2x1c3RlciB9IGZyb20gJy4uL2NvbW1vbi9jbHVzdGVyJztcbmltcG9ydCB7IEhTViwgaHN2MnJnYiwgUkdCIH0gZnJvbSAnLi4vY29tbW9uL2hzdjJyZ2InO1xuaW1wb3J0IHsgSW1hZ2VEZWJ1ZyB9IGZyb20gJy4uL2NvbW1vbi9pbWFnZS1kZWJ1Zyc7XG5pbXBvcnQgeyBJbWFnZVdyYXBwZXIgfSBmcm9tICcuLi9jb21tb24vaW1hZ2Utd3JhcHBlcic7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICcuLi9jb21tb24vbW9tZW50JztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vY29tbW9uL3BvaW50JztcbmltcG9ydCB7IGNhbGN1bGF0ZVBhdGNoU2l6ZSB9IGZyb20gJy4uL2lucHV0L2lucHV0LXN0cmVhbS11dGlscyc7XG5pbXBvcnQgeyBCYXJjb2RlTG9jYXRvckNvbmZpZyB9IGZyb20gJy4vYmFyY29kZS1sb2NhdG9yLWNvbmZpZyc7XG5pbXBvcnQgeyBoYWxmU2FtcGxlLCBpbnZlcnQsIG90c3VUaHJlc2hvbGQsIHRyYW5zZm9ybVdpdGhNYXRyaXggfSBmcm9tICcuL2JhcmNvZGUtbG9jYXRvci11dGlscyc7XG5pbXBvcnQgeyBSYXN0ZXJpemVyIH0gZnJvbSAnLi9yYXN0ZXJpemVyJztcbmltcG9ydCBza2VsZXRvbml6ZXIgZnJvbSAnLi9za2VsZXRvbml6ZXInO1xuaW1wb3J0IHsgU2VhcmNoRGlyZWN0aW9ucyB9IGZyb20gJy4vdHJhY2VyJztcblxuaW50ZXJmYWNlIFBhdGNoIHtcbiAgICBib3g6IEJveDtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIG1vbWVudHM6IEFycmF5PE1vbWVudD47XG4gICAgcG9zOiBQb2ludDtcbiAgICByYWQ6IG51bWJlcjtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xufVxuXG50eXBlIFNjZWxldG9uaXplciA9IGFueTtcblxuY29uc3QgTW9tZW50U2ltaWxhcml0eVRocmVzaG9sZCA9IDAuOTtcblxuZXhwb3J0IGNsYXNzIEJhcmNvZGVMb2NhdG9yIHtcbiAgICBwcml2YXRlIF9jb25maWc6IEJhcmNvZGVMb2NhdG9yQ29uZmlnO1xuICAgIHByaXZhdGUgX2lucHV0SW1hZ2VXcmFwcGVyOiBJbWFnZVdyYXBwZXI7XG4gICAgcHJpdmF0ZSBfY3VycmVudEltYWdlV3JhcHBlcjogSW1hZ2VXcmFwcGVyO1xuICAgIHByaXZhdGUgX3NrZWxJbWFnZVdyYXBwZXI6IEltYWdlV3JhcHBlcjtcbiAgICBwcml2YXRlIF9zdWJJbWFnZVdyYXBwZXI6IEltYWdlV3JhcHBlcjtcbiAgICBwcml2YXRlIF9sYWJlbEltYWdlV3JhcHBlcjogSW1hZ2VXcmFwcGVyPEFycmF5PG51bWJlcj4+O1xuICAgIHByaXZhdGUgX2JpbmFyeUltYWdlV3JhcHBlcjogSW1hZ2VXcmFwcGVyO1xuICAgIHByaXZhdGUgX3BhdGNoR3JpZDogSW1hZ2VXcmFwcGVyO1xuICAgIHByaXZhdGUgX3BhdGNoTGFiZWxHcmlkOiBJbWFnZVdyYXBwZXI8SW50MzJBcnJheT47XG4gICAgcHJpdmF0ZSBfaW1hZ2VUb1BhdGNoR3JpZDogQXJyYXk8UGF0Y2g+O1xuICAgIHByaXZhdGUgX3BhdGNoU2l6ZTogUG9pbnQ7XG4gICAgcHJpdmF0ZSBfYmluYXJ5Q29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIHByaXZhdGUgX251bVBhdGNoZXM6IFBvaW50O1xuICAgIHByaXZhdGUgX3NrZWxldG9uaXplcjogU2NlbGV0b25pemVyO1xuXG4gICAgY29uc3RydWN0b3IoaW5wdXRJbWFnZVdyYXBwZXI6IEltYWdlV3JhcHBlciwgY29uZmlnOiBCYXJjb2RlTG9jYXRvckNvbmZpZykge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuX2lucHV0SW1hZ2VXcmFwcGVyID0gaW5wdXRJbWFnZVdyYXBwZXI7XG4gICAgICAgIHRoaXMuX251bVBhdGNoZXMgPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgICAgICB0aGlzLl9pbml0QnVmZmVycygpO1xuICAgICAgICB0aGlzLl9pbml0Q2FudmFzKCk7XG4gICAgfVxuXG4gICAgbG9jYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmhhbGZTYW1wbGUpIHtcbiAgICAgICAgICAgIGhhbGZTYW1wbGUodGhpcy5faW5wdXRJbWFnZVdyYXBwZXIsIHRoaXMuX2N1cnJlbnRJbWFnZVdyYXBwZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYmluYXJpemVJbWFnZSgpO1xuICAgICAgICBjb25zdCBwYXRjaGVzRm91bmQgPSB0aGlzLl9maW5kUGF0Y2hlcygpO1xuICAgICAgICAvLyByZXR1cm4gdW5sZXNzIDUlIG9yIG1vcmUgcGF0Y2hlcyBhcmUgZm91bmRcbiAgICAgICAgaWYgKHBhdGNoZXNGb3VuZC5sZW5ndGggPCB0aGlzLl9udW1QYXRjaGVzLnggKiB0aGlzLl9udW1QYXRjaGVzLnkgKiAwLjA1KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJhc3Rlcml6ZSBhcmVhIGJ5IGNvbXBhcmluZyBhbmd1bGFyIHNpbWlsYXJpdHk7XG4gICAgICAgIGNvbnN0IG1heExhYmVsID0gdGhpcy5fcmFzdGVyaXplQW5ndWxhclNpbWlsYXJpdHkocGF0Y2hlc0ZvdW5kKTtcbiAgICAgICAgaWYgKG1heExhYmVsIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZWFyY2ggZm9yIGFyZWEgd2l0aCB0aGUgbW9zdCBwYXRjaGVzIChiaWdnZXN0IGNvbm5lY3RlZCBhcmVhKVxuICAgICAgICBjb25zdCB0b3BMYWJlbHMgPSB0aGlzLl9maW5kQmlnZ2VzdENvbm5lY3RlZEFyZWFzKG1heExhYmVsKTtcbiAgICAgICAgaWYgKHRvcExhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYm94ZXMgPSB0aGlzLl9maW5kQm94ZXModG9wTGFiZWxzLCBtYXhMYWJlbCk7XG4gICAgICAgIHJldHVybiBib3hlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0QnVmZmVycygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5oYWxmU2FtcGxlKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50SW1hZ2VXcmFwcGVyID0gbmV3IEltYWdlV3JhcHBlcih7XG4gICAgICAgICAgICAgICAgeDogdGhpcy5faW5wdXRJbWFnZVdyYXBwZXIuc2l6ZS54IC8gMiB8IDAsXG4gICAgICAgICAgICAgICAgeTogdGhpcy5faW5wdXRJbWFnZVdyYXBwZXIuc2l6ZS55IC8gMiB8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEltYWdlV3JhcHBlciA9IHRoaXMuX2lucHV0SW1hZ2VXcmFwcGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGF0Y2hTaXplID0gY2FsY3VsYXRlUGF0Y2hTaXplKHRoaXMuX2NvbmZpZy5wYXRjaFNpemUsIHRoaXMuX2N1cnJlbnRJbWFnZVdyYXBwZXIuc2l6ZSk7XG5cbiAgICAgICAgdGhpcy5fbnVtUGF0Y2hlcy54ID0gdGhpcy5fY3VycmVudEltYWdlV3JhcHBlci5zaXplLnggLyB0aGlzLl9wYXRjaFNpemUueCB8IDA7XG4gICAgICAgIHRoaXMuX251bVBhdGNoZXMueSA9IHRoaXMuX2N1cnJlbnRJbWFnZVdyYXBwZXIuc2l6ZS55IC8gdGhpcy5fcGF0Y2hTaXplLnkgfCAwO1xuXG4gICAgICAgIHRoaXMuX2JpbmFyeUltYWdlV3JhcHBlciA9IG5ldyBJbWFnZVdyYXBwZXIodGhpcy5fY3VycmVudEltYWdlV3JhcHBlci5zaXplLCB1bmRlZmluZWQsIFVpbnQ4QXJyYXksIGZhbHNlKTtcblxuICAgICAgICB0aGlzLl9sYWJlbEltYWdlV3JhcHBlciA9IG5ldyBJbWFnZVdyYXBwZXIodGhpcy5fcGF0Y2hTaXplLCB1bmRlZmluZWQsIEFycmF5LCB0cnVlKTtcblxuICAgICAgICBjb25zdCBza2VsZXRvbkltYWdlRGF0YSA9IG5ldyBBcnJheUJ1ZmZlcig2NCAqIDEwMjQpO1xuICAgICAgICB0aGlzLl9zdWJJbWFnZVdyYXBwZXIgPSBuZXcgSW1hZ2VXcmFwcGVyKHRoaXMuX3BhdGNoU2l6ZSwgbmV3IFVpbnQ4QXJyYXkoc2tlbGV0b25JbWFnZURhdGEsIDAsIHRoaXMuX3BhdGNoU2l6ZS54ICogdGhpcy5fcGF0Y2hTaXplLnkpKTtcbiAgICAgICAgdGhpcy5fc2tlbEltYWdlV3JhcHBlciA9IG5ldyBJbWFnZVdyYXBwZXIodGhpcy5fcGF0Y2hTaXplLFxuICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoc2tlbGV0b25JbWFnZURhdGEsIHRoaXMuX3BhdGNoU2l6ZS54ICogdGhpcy5fcGF0Y2hTaXplLnkgKiAzLCB0aGlzLl9wYXRjaFNpemUueCAqIHRoaXMuX3BhdGNoU2l6ZS55KSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX3NrZWxldG9uaXplciA9IHNrZWxldG9uaXplcihcbiAgICAgICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cgOiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSA/IHNlbGYgOiBnbG9iYWwsXG4gICAgICAgICAgICB7IHNpemU6IHRoaXMuX3BhdGNoU2l6ZS54IH0sXG4gICAgICAgICAgICBza2VsZXRvbkltYWdlRGF0YVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHNpemUgPSB7XG4gICAgICAgICAgICB4OiAodGhpcy5fY3VycmVudEltYWdlV3JhcHBlci5zaXplLnggLyB0aGlzLl9zdWJJbWFnZVdyYXBwZXIuc2l6ZS54KSB8IDAsXG4gICAgICAgICAgICB5OiAodGhpcy5fY3VycmVudEltYWdlV3JhcHBlci5zaXplLnkgLyB0aGlzLl9zdWJJbWFnZVdyYXBwZXIuc2l6ZS55KSB8IDBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fcGF0Y2hMYWJlbEdyaWQgPSBuZXcgSW1hZ2VXcmFwcGVyKHNpemUsIHVuZGVmaW5lZCwgSW50MzJBcnJheSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX3BhdGNoR3JpZCA9IG5ldyBJbWFnZVdyYXBwZXIoc2l6ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICB0aGlzLl9pbWFnZVRvUGF0Y2hHcmlkID0gbmV3IEFycmF5PFBhdGNoPih0aGlzLl9wYXRjaExhYmVsR3JpZC5kYXRhLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdENhbnZhcygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy51c2VXb3JrZXIgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhcy5jbGFzc05hbWUgPSAnYmluYXJ5QnVmZmVyJztcbiAgICAgICAgY2FudmFzLndpZHRoID0gdGhpcy5fYmluYXJ5SW1hZ2VXcmFwcGVyLnNpemUueDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IHRoaXMuX2JpbmFyeUltYWdlV3JhcHBlci5zaXplLnk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHRoaXMuX2NvbmZpZy5kZWJ1ZyAmJiB0aGlzLl9jb25maWcuZGVidWcuc2hvd0NhbnZhcykge1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RlYnVnJykuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9iaW5hcnlDb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGJvdW5kaW5nIGJveCB3aGljaCBlbmNsb3NlcyBhbGwgdGhlIGdpdmVuIHBhdGNoZXNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWluaW1hbCBib3VuZGluZyBib3hcbiAgICAgKi9cbiAgICBwcml2YXRlIF9ib3hGcm9tUGF0Y2hlcyhwYXRjaGVzOiBBcnJheTxQYXRjaD4pOiBCb3gge1xuICAgICAgICBjb25zdCBkZWJ1ZyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdGhpcy5fY29uZmlnLmRlYnVnO1xuICAgICAgICBsZXQgYXZlcmFnZVJhZCA9IHBhdGNoZXMucmVkdWNlKChzdW0sIHsgcG9zLCByYWQgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRlYnVnICYmIGRlYnVnLnNob3dQYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gZHJhdyBhbGwgcGF0Y2hlcyB3aGljaCBhcmUgdG8gYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhd1JlY3QocG9zLCB0aGlzLl9zdWJJbWFnZVdyYXBwZXIuc2l6ZSwgJ3JlZCcsIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc3VtICsgcmFkO1xuICAgICAgICB9LCAwKSAvIHBhdGNoZXMubGVuZ3RoO1xuXG4gICAgICAgIGF2ZXJhZ2VSYWQgPSAoYXZlcmFnZVJhZCAqIDE4MCAvIE1hdGguUEkgKyA5MCkgJSAxODAgLSA5MDtcbiAgICAgICAgaWYgKGF2ZXJhZ2VSYWQgPCAwKSB7XG4gICAgICAgICAgICBhdmVyYWdlUmFkICs9IDE4MDtcbiAgICAgICAgfVxuICAgICAgICBhdmVyYWdlUmFkID0gKDE4MCAtIGF2ZXJhZ2VSYWQpICogTWF0aC5QSSAvIDE4MDtcblxuICAgICAgICBjb25zdCBjb3MgPSBNYXRoLmNvcyhhdmVyYWdlUmFkKTtcbiAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYXZlcmFnZVJhZCk7XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IG5ldyBGbG9hdDMyQXJyYXkoW2Nvcywgc2luLCAtc2luLCBjb3NdKTtcbiAgICAgICAgY29uc3QgaW52ZXJzZU1hdHJpeCA9IGludmVydChtYXRyaXgpO1xuXG4gICAgICAgIC8vIGl0ZXJhdGUgb3ZlciBwYXRjaGVzIGFuZCByb3RhdGUgYnkgYW5nbGVcbiAgICAgICAgcGF0Y2hlcy5mb3JFYWNoKCh7IGJveCB9KSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDQ7IGorKykge1xuICAgICAgICAgICAgICAgIGJveFtqXSA9IHRyYW5zZm9ybVdpdGhNYXRyaXgoYm94W2pdLCBtYXRyaXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGVidWcgJiYgZGVidWcuYm94RnJvbVBhdGNoZXMuc2hvd1RyYW5zZm9ybWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhd1BhdGgoYm94LCAnIzk5ZmYwMCcsIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgbWluWCA9IHRoaXMuX2JpbmFyeUltYWdlV3JhcHBlci5zaXplLng7XG4gICAgICAgIGxldCBtaW5ZID0gdGhpcy5fYmluYXJ5SW1hZ2VXcmFwcGVyLnNpemUueTtcbiAgICAgICAgbGV0IG1heFggPSAtbWluWDtcbiAgICAgICAgbGV0IG1heFkgPSAtbWluWTtcblxuICAgICAgICAvLyBmaW5kIGJvdW5kaW5nIGJveFxuICAgICAgICBwYXRjaGVzLmZvckVhY2goKHsgYm94IH0pID0+IHtcbiAgICAgICAgICAgIGJveC5mb3JFYWNoKCh7IHgsIHkgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh4IDwgbWluWCkge1xuICAgICAgICAgICAgICAgICAgICBtaW5YID0geDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHggPiBtYXhYKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoeSA8IG1pblkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluWSA9IHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh5ID4gbWF4WSkge1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0geTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGJveDogQm94ID0gW3sgeDogbWluWCwgeTogbWluWSB9LCB7IHg6IG1heFgsIHk6IG1pblkgfSwgeyB4OiBtYXhYLCB5OiBtYXhZIH0sIHsgeDogbWluWCwgeTogbWF4WSB9XTtcblxuICAgICAgICBpZiAoZGVidWcgJiYgZGVidWcuYm94RnJvbVBhdGNoZXMuc2hvd1RyYW5zZm9ybWVkQm94KSB7XG4gICAgICAgICAgICB0aGlzLl9kcmF3UGF0aChib3gsICcjZmYwMDAwJywgMik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXZlcnNlIHJvdGF0aW9uXG4gICAgICAgIGJveCA9IGJveC5tYXAodmVydGV4ID0+IHRyYW5zZm9ybVdpdGhNYXRyaXgodmVydGV4LCBpbnZlcnNlTWF0cml4KSkgYXMgQm94O1xuXG4gICAgICAgIGlmIChkZWJ1ZyAmJiBkZWJ1Zy5ib3hGcm9tUGF0Y2hlcy5zaG93QkIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYXdQYXRoKGJveCwgJyNmZjAwMDAnLCAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuaGFsZlNhbXBsZSkge1xuICAgICAgICAgICAgLy8gc2NhbGVcbiAgICAgICAgICAgIGJveCA9IGJveC5tYXAoKHsgeCwgeSB9KSA9PiAoeyB4OiB4ICogMiwgeTogeSAqPSAyIH0pKSBhcyBCb3g7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYm94O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiaW5hcnkgaW1hZ2Ugb2YgdGhlIGN1cnJlbnQgaW1hZ2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9iaW5hcml6ZUltYWdlKCk6IHZvaWQge1xuICAgICAgICBvdHN1VGhyZXNob2xkKHRoaXMuX2N1cnJlbnRJbWFnZVdyYXBwZXIsIHRoaXMuX2JpbmFyeUltYWdlV3JhcHBlcik7XG4gICAgICAgIHRoaXMuX2JpbmFyeUltYWdlV3JhcHBlci56ZXJvQm9yZGVyKCk7XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdGhpcy5fY29uZmlnLmRlYnVnICYmIHRoaXMuX2NvbmZpZy5kZWJ1Zy5zaG93Q2FudmFzKSB7XG4gICAgICAgICAgICB0aGlzLl9iaW5hcnlJbWFnZVdyYXBwZXIuc2hvdyh0aGlzLl9iaW5hcnlDb250ZXh0LCAyNTUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZSBvdmVyIHRoZSBlbnRpcmUgaW1hZ2UsIGV4dHJhY3QgcGF0Y2hlc1xuICAgICAqL1xuICAgIHByaXZhdGUgX2ZpbmRQYXRjaGVzKCk6IEFycmF5PFBhdGNoPiB7XG4gICAgICAgIGNvbnN0IGRlYnVnID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0aGlzLl9jb25maWcuZGVidWc7XG4gICAgICAgIGxldCBwYXRjaGVzRm91bmQgPSBuZXcgQXJyYXk8UGF0Y2g+KCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9udW1QYXRjaGVzLng7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLl9udW1QYXRjaGVzLnk7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSB0aGlzLl9zdWJJbWFnZVdyYXBwZXIuc2l6ZS54ICogaTtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gdGhpcy5fc3ViSW1hZ2VXcmFwcGVyLnNpemUueSAqIGo7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXBlcmF0ZSBwYXJ0c1xuICAgICAgICAgICAgICAgIHRoaXMuX3NrZWxldG9uaXplKHgsIHkpO1xuXG4gICAgICAgICAgICAgICAgLy8gUmFzdGVyaXplLCBmaW5kIGluZGl2aWR1YWwgYmFyc1xuICAgICAgICAgICAgICAgIHRoaXMuX3NrZWxJbWFnZVdyYXBwZXIuemVyb0JvcmRlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsSW1hZ2VXcmFwcGVyLmRhdGEuZmlsbCgwKTtcbiAgICAgICAgICAgICAgICBjb25zdCByYXN0ZXJpemVyID0gbmV3IFJhc3Rlcml6ZXIodGhpcy5fc2tlbEltYWdlV3JhcHBlciwgdGhpcy5fbGFiZWxJbWFnZVdyYXBwZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhc3RlclJlc3VsdCA9IHJhc3Rlcml6ZXIucmFzdGVyaXplKDApO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlYnVnICYmIGRlYnVnLnNob3dMYWJlbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWxJbWFnZVdyYXBwZXIub3ZlcmxheSh0aGlzLl9iaW5hcnlDb250ZXh0LCAzNjAgLyByYXN0ZXJSZXN1bHQuY291bnQgfCAwLCB4LCB5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgbW9tZW50cyBmcm9tIHRoZSBza2VsZXRvbml6ZWQgcGF0Y2hcbiAgICAgICAgICAgICAgICBjb25zdCBtb21lbnRzID0gdGhpcy5fbGFiZWxJbWFnZVdyYXBwZXIubW9tZW50cyhyYXN0ZXJSZXN1bHQuY291bnQpO1xuXG4gICAgICAgICAgICAgICAgLy8gZXh0cmFjdCBlbGlnaWJsZSBwYXRjaGVzXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0Y2ggPSB0aGlzLl9kZXNjcmliZVBhdGNoKG1vbWVudHMsIGogKiB0aGlzLl9udW1QYXRjaGVzLnggKyBpLCB4LCB5KTtcbiAgICAgICAgICAgICAgICBpZiAocGF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hlc0ZvdW5kLnB1c2gocGF0Y2gpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZyAmJiBkZWJ1Zy5zaG93Rm91bmRQYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kcmF3UmVjdChwYXRjaC5wb3MsIHRoaXMuX3N1YkltYWdlV3JhcHBlci5zaXplLCAnIzk5ZmYwMCcsIDIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGNoZXNGb3VuZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aG9zZSBjb25uZWN0ZWQgYXJlYXMgd2hpY2ggY29udGFpbiBhdCBsZWFzdCA2IHBhdGNoZXNcbiAgICAgKiBhbmQgcmV0dXJucyB0aGVtIG9yZGVyZWQgREVTQyBieSB0aGUgbnVtYmVyIG9mIGNvbnRhaW5lZCBwYXRjaGVzXG4gICAgICogQHBhcmFtIG1heExhYmVsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZmluZEJpZ2dlc3RDb25uZWN0ZWRBcmVhcyhtYXhMYWJlbDogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIGxldCBsYWJlbEhpc3QgPSBuZXcgQXJyYXk8bnVtYmVyPihtYXhMYWJlbCkuZmlsbCgwKTtcblxuICAgICAgICB0aGlzLl9wYXRjaExhYmVsR3JpZC5kYXRhLmZvckVhY2goKGRhdGE6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEgPiAwKSB7XG4gICAgICAgICAgICAgICAgbGFiZWxIaXN0W2RhdGEgLSAxXSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBleHRyYWN0IHRvcCBhcmVhcyB3aXRoIGF0IGxlYXN0IDYgcGF0Y2hlcyBwcmVzZW50XG4gICAgICAgIGNvbnN0IHRvcExhYmVscyA9IGxhYmVsSGlzdC5tYXAoKHZhbHVlLCBpbmRleCkgPT4gKHsgdmFsdWUsIGluZGV4IH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA+PSA1KS5zb3J0KChhLCBiKSA9PiBiLnZhbHVlIC0gYS52YWx1ZSkubWFwKCh7IGluZGV4IH0pID0+IGluZGV4ICsgMSk7XG5cbiAgICAgICAgcmV0dXJuIHRvcExhYmVscztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZpbmRCb3hlcyh0b3BMYWJlbHM6IEFycmF5PG51bWJlcj4sIG1heExhYmVsOiBudW1iZXIpOiBBcnJheTxCb3g+IHtcbiAgICAgICAgY29uc3QgYm94ZXMgPSBuZXcgQXJyYXk8Qm94PigpO1xuICAgICAgICBjb25zdCBzaG93UmVtYWluaW5nUGF0Y2hMYWJlbHMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB0aGlzLl9jb25maWcuZGVidWcgJiYgdGhpcy5fY29uZmlnLmRlYnVnLnNob3dSZW1haW5pbmdQYXRjaExhYmVscztcblxuICAgICAgICB0b3BMYWJlbHMuZm9yRWFjaChsYWJlbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRjaGVzID0gbmV3IEFycmF5PFBhdGNoPigpO1xuXG4gICAgICAgICAgICB0aGlzLl9wYXRjaExhYmVsR3JpZC5kYXRhLmZvckVhY2goKGRhdGE6IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaGVzLnB1c2godGhpcy5faW1hZ2VUb1BhdGNoR3JpZFtpbmRleF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBib3ggPSB0aGlzLl9ib3hGcm9tUGF0Y2hlcyhwYXRjaGVzKTtcblxuICAgICAgICAgICAgaWYgKGJveCkge1xuICAgICAgICAgICAgICAgIGJveGVzLnB1c2goYm94KTtcblxuICAgICAgICAgICAgICAgIGlmIChzaG93UmVtYWluaW5nUGF0Y2hMYWJlbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZHJhdyBwYXRjaC1sYWJlbHMgaWYgcmVxdWVzdGVkXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhzdjogSFNWID0gWyhsYWJlbCAvIChtYXhMYWJlbCArIDEpKSAqIDM2MCwgMSwgMV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJnYjogUkdCID0gWzAsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICBoc3YycmdiKGhzdiwgcmdiKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9IGByZ2IoJHtyZ2Iuam9pbignLCcpfSlgO1xuXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoZXMuZm9yRWFjaCgoeyBwb3MgfSkgPT4gdGhpcy5fZHJhd1JlY3QocG9zLCB0aGlzLl9zdWJJbWFnZVdyYXBwZXIuc2l6ZSwgY29sb3IsIDIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBib3hlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIHNpbWlsYXIgbW9tZW50cyAodmlhIGNsdXN0ZXIpXG4gICAgICogQHBhcmFtIG1vbWVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaW1pbGFyTW9tZW50cyhtb21lbnRzOiBBcnJheTxNb21lbnQ+KTogQXJyYXk8TW9tZW50PiB7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJzID0gQ2x1c3Rlci5jbHVzdGVyaXplKG1vbWVudHMsIE1vbWVudFNpbWlsYXJpdHlUaHJlc2hvbGQpO1xuICAgICAgICBjb25zdCB0b3BDbHVzdGVyID0gY2x1c3RlcnMucmVkdWNlKCh0b3AsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gaXRlbS5tb21lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBjb3VudCA+IHRvcC5jb3VudCA/IHsgaXRlbSwgY291bnQgfSA6IHRvcDtcbiAgICAgICAgfSwgeyBpdGVtOiB7IG1vbWVudHM6IFtdIH0sIGNvdW50OiAwIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0b3BDbHVzdGVyLml0ZW0ubW9tZW50cztcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NrZWxldG9uaXplKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JpbmFyeUltYWdlV3JhcHBlci5zdWJJbWFnZUFzQ29weSh0aGlzLl9zdWJJbWFnZVdyYXBwZXIsIHgsIHkpO1xuICAgICAgICB0aGlzLl9za2VsZXRvbml6ZXIuc2tlbGV0b25pemUoKTtcblxuICAgICAgICAvLyBTaG93IHNrZWxldG9uIGlmIHJlcXVlc3RlZFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0aGlzLl9jb25maWcuZGVidWcgJiYgdGhpcy5fY29uZmlnLmRlYnVnLnNob3dTa2VsZXRvbikge1xuICAgICAgICAgICAgdGhpcy5fc2tlbEltYWdlV3JhcHBlci5vdmVybGF5KHRoaXMuX2JpbmFyeUNvbnRleHQsIDM2MCwgeCwgeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyBhbmQgZGVzY3JpYmVzIHRob3NlIHBhdGNoZXMgd2hpY2ggc2VlbSB0byBjb250YWluIGEgYmFyY29kZSBwYXR0ZXJuXG4gICAgICogQHBhcmFtIG1vbWVudHNcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKiBAcGFyYW0geFxuICAgICAqIEBwYXJhbSB5XG4gICAgICogQHJldHVybnMgbGlzdCBvZiBwYXRjaGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGVzY3JpYmVQYXRjaChtb21lbnRzOiBBcnJheTxNb21lbnQ+LCBpbmRleDogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IFBhdGNoIHtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgbWluQ29tcG9uZW50V2VpZ2h0ID0gTWF0aC5jZWlsKHRoaXMuX3BhdGNoU2l6ZS54IC8gMyk7XG4gICAgICAgICAgICAvLyBvbmx5IGNvbGxlY3QgbW9tZW50cyB3aGljaCBhcmVhIGNvdmVycyBhdCBsZWFzdCBtaW5Db21wb25lbnRXZWlnaHQgcGl4ZWxzXG4gICAgICAgICAgICBjb25zdCBlbGlnaWJsZU1vbWVudHMgPSBtb21lbnRzLmZpbHRlcihtb21lbnQgPT4gbW9tZW50Lm0wMCA+IG1pbkNvbXBvbmVudFdlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIGlmIGF0IGxlYXN0IDIgbW9tZW50cyBhcmUgZm91bmQgd2hpY2ggaGF2ZSBhdCBsZWFzdCBtaW5Db21wb25lbnRXZWlnaHRzIGNvdmVyZWRcbiAgICAgICAgICAgIGlmIChlbGlnaWJsZU1vbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nTW9tZW50cyA9IHRoaXMuX3NpbWlsYXJNb21lbnRzKGVsaWdpYmxlTW9tZW50cyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gbWF0Y2hpbmdNb21lbnRzLmxlbmd0aCB8IDA7XG5cbiAgICAgICAgICAgICAgICAvLyBPbmx5IHR3byBvZiB0aGUgbW9tZW50cyBhcmUgYWxsb3dlZCBub3QgdG8gZml0IGludG8gdGhlIGVxdWF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgKGxlbmd0aCA8PCAyKSA+PSBlbGlnaWJsZU1vbWVudHMubGVuZ3RoICogMyAmJiAobGVuZ3RoIDw8IDIpID4gbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBzaW1pbGFyaXR5IG9mIHRoZSBtb21lbnRzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhZCA9IG1hdGNoaW5nTW9tZW50cy5yZWR1Y2UoKHN1bTogbnVtYmVyLCBtb21lbnQ6IE1vbWVudCkgPT4gc3VtICsgbW9tZW50LnJhZCwgMCkgLyBsZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB7IHgsIHkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeCwgeSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeDogeCArIHRoaXMuX3N1YkltYWdlV3JhcHBlci5zaXplLngsIHkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHg6IHggKyB0aGlzLl9zdWJJbWFnZVdyYXBwZXIuc2l6ZS54LCB5OiB5ICsgdGhpcy5fc3ViSW1hZ2VXcmFwcGVyLnNpemUueSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeCwgeTogeSArIHRoaXMuX3N1YkltYWdlV3JhcHBlci5zaXplLnkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudHM6IG1hdGNoaW5nTW9tZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IE1hdGguY29zKHJhZCksXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBNYXRoLnNpbihyYWQpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbm90WWV0UHJvY2Vzc2VkKCk6IG51bWJlciB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcGF0Y2hMYWJlbEdyaWQuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhdGNoTGFiZWxHcmlkLmRhdGFbaV0gPT09IDAgJiYgdGhpcy5fcGF0Y2hHcmlkLmRhdGFbaV0gPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcGF0Y2hMYWJlbEdyaWQuZGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdHJhY2UoY3VycmVudEluZGV4OiBudW1iZXIsIGxhYmVsOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMC45NTtcbiAgICAgICAgY29uc3QgY3VycmVudDogUG9pbnQgPSB7XG4gICAgICAgICAgICB4OiBjdXJyZW50SW5kZXggJSB0aGlzLl9wYXRjaExhYmVsR3JpZC5zaXplLngsXG4gICAgICAgICAgICB5OiAoY3VycmVudEluZGV4IC8gdGhpcy5fcGF0Y2hMYWJlbEdyaWQuc2l6ZS54KSB8IDBcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgdGhpcy5fcGF0Y2hMYWJlbEdyaWQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYXRjaCA9IHRoaXMuX2ltYWdlVG9QYXRjaEdyaWRbY3VycmVudEluZGV4XTtcbiAgICAgICAgICAgIC8vIGFzc2lnbiBsYWJlbFxuICAgICAgICAgICAgdGhpcy5fcGF0Y2hMYWJlbEdyaWQuZGF0YVtjdXJyZW50SW5kZXhdID0gbGFiZWw7XG5cbiAgICAgICAgICAgIFNlYXJjaERpcmVjdGlvbnMuZm9yRWFjaChkaXJlY3Rpb24gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBjdXJyZW50LnkgKyBkaXJlY3Rpb25bMF07XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IGN1cnJlbnQueCArIGRpcmVjdGlvblsxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHkgKiB0aGlzLl9wYXRjaExhYmVsR3JpZC5zaXplLnggKyB4O1xuXG4gICAgICAgICAgICAgICAgLy8gY29udGludWUgaWYgcGF0Y2ggZW1wdHlcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGF0Y2hHcmlkLmRhdGFbaW5kZXhdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGNoTGFiZWxHcmlkLmRhdGFbaW5kZXhdID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3BhdGNoTGFiZWxHcmlkLmRhdGFbaW5kZXhdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoID0gdGhpcy5faW1hZ2VUb1BhdGNoR3JpZFtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpbWlsYXJpdHkgPSBNYXRoLmFicyhwYXRjaC54ICogY3VycmVudFBhdGNoLnggKyBwYXRjaC55ICogY3VycmVudFBhdGNoLnkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2ltaWxhcml0eSA+IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2UoaW5kZXgsIGxhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgcGF0Y2hlcyB3aGljaCBhcmUgY29ubmVjdGVkIGFuZCBzaGFyZSB0aGUgc2FtZSBvcmllbnRhdGlvblxuICAgICAqIEBwYXJhbSBwYXRjaGVzRm91bmRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yYXN0ZXJpemVBbmd1bGFyU2ltaWxhcml0eShwYXRjaGVzRm91bmQ6IEFycmF5PFBhdGNoPik6IG51bWJlciB7XG4gICAgICAgIGxldCBsYWJlbCA9IDA7XG4gICAgICAgIGNvbnN0IGhzdjogSFNWID0gWzAsIDEsIDFdO1xuICAgICAgICBjb25zdCByZ2I6IFJHQiA9IFswLCAwLCAwXTtcblxuICAgICAgICAvLyBwcmVwYXJlIGZvciBmaW5kaW5nIHRoZSByaWdodCBwYXRjaGVzXG4gICAgICAgIHRoaXMuX3BhdGNoR3JpZC5kYXRhLmZpbGwoMCk7XG4gICAgICAgIHRoaXMuX3BhdGNoTGFiZWxHcmlkLmRhdGEuZmlsbCgwKTtcbiAgICAgICAgdGhpcy5faW1hZ2VUb1BhdGNoR3JpZC5maWxsKG51bGwpO1xuXG4gICAgICAgIHBhdGNoZXNGb3VuZC5mb3JFYWNoKHBhdGNoID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2ltYWdlVG9QYXRjaEdyaWRbcGF0Y2guaW5kZXhdID0gcGF0Y2g7XG4gICAgICAgICAgICB0aGlzLl9wYXRjaEdyaWQuZGF0YVtwYXRjaC5pbmRleF0gPSAxO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyByYXN0ZXJpemUgdGhlIHBhdGNoZXMgZm91bmQgdG8gZGV0ZXJtaW5lIGFyZWFcbiAgICAgICAgdGhpcy5fcGF0Y2hHcmlkLnplcm9Cb3JkZXIoKTtcblxuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKChjdXJyZW50SW5kZXggPSB0aGlzLl9ub3RZZXRQcm9jZXNzZWQoKSkgPCB0aGlzLl9wYXRjaExhYmVsR3JpZC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgbGFiZWwrKztcbiAgICAgICAgICAgIHRoaXMuX3RyYWNlKGN1cnJlbnRJbmRleCwgbGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHJhdyBwYXRjaC1sYWJlbHMgaWYgcmVxdWVzdGVkXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHRoaXMuX2NvbmZpZy5kZWJ1ZyAmJiB0aGlzLl9jb25maWcuZGVidWcuc2hvd1BhdGNoTGFiZWxzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuX3BhdGNoTGFiZWxHcmlkLmRhdGEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGF0Y2hMYWJlbEdyaWQuZGF0YVtqXSA+IDAgJiYgdGhpcy5fcGF0Y2hMYWJlbEdyaWQuZGF0YVtqXSA8PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRjaCA9IHRoaXMuX2ltYWdlVG9QYXRjaEdyaWRbal07XG4gICAgICAgICAgICAgICAgICAgIGhzdlswXSA9ICh0aGlzLl9wYXRjaExhYmVsR3JpZC5kYXRhW2pdIC8gKGxhYmVsICsgMSkpICogMzYwO1xuICAgICAgICAgICAgICAgICAgICBoc3YycmdiKGhzdiwgcmdiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHJhd1JlY3QocGF0Y2gucG9zLCB0aGlzLl9zdWJJbWFnZVdyYXBwZXIuc2l6ZSwgYHJnYigke3JnYi5qb2luKCcsJyl9KWAsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kcmF3UmVjdCh7IHgsIHkgfTogUG9pbnQsIHNpemU6IFBvaW50LCBjb2xvcjogc3RyaW5nLCBsaW5lV2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9iaW5hcnlDb250ZXh0LnN0cm9rZVN0eWxlID0gY29sb3I7XG4gICAgICAgIHRoaXMuX2JpbmFyeUNvbnRleHQuZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgIHRoaXMuX2JpbmFyeUNvbnRleHQubGluZVdpZHRoID0gbGluZVdpZHRoIHx8IDE7XG4gICAgICAgIHRoaXMuX2JpbmFyeUNvbnRleHQuc3Ryb2tlUmVjdCh4LCB5LCBzaXplLngsIHNpemUueSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZHJhd1BhdGgocGF0aDogQXJyYXk8UG9pbnQ+LCBjb2xvcjogc3RyaW5nLCBsaW5lV2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBJbWFnZURlYnVnLmRyYXdQYXRoKHBhdGgsIHRoaXMuX2JpbmFyeUNvbnRleHQsIGNvbG9yLCBsaW5lV2lkdGgpO1xuICAgIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
|