2 lines
197 KiB
JavaScript
2 lines
197 KiB
JavaScript
!function(t,e){for(var i in e)t[i]=e[i]}(this,function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=19)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.invSqrt2=e.sqrt3=e.sqrt2=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};e.noop=function(){},e.clone=function(t){return JSON.parse(JSON.stringify(t))},e.has=o,e.hypotenuse=function(t,e){null==e&&(e=t);return Math.sqrt(t*t+e*e)},e.isObject=s,e.random=function t(e,i){if(Array.isArray(e))return e[t(e.length-1)];if("object"===(void 0===e?"undefined":n(e)))return e[t(Object.keys(e))];null==i&&(i=e,e=0);return e+Math.floor(Math.random()*(i-e+1))},e.range=u,e.rangeInclusive=function(t,e){null==e&&(e=t,t=0);return u(Math.min(t,e),Math.max(t,e)+1)},e.getQueryStringParameters=l,e.getQueryStringObj=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.location.search,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"&",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"=";return(0,r.mapObj)(l(t,e,i),f)},e.parseString=f,e.toFixed=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:NaN;return"number"!=typeof t||isNaN(t)?i:Number(t.toFixed(e))},e.getColor=function(t){var e=t.red,i=t.green,n=t.blue,r=t.alpha;return null!=r?"rgba("+e+", "+i+", "+n+", "+r+")":"rgb("+e+", "+i+", "+n+")"},e.grayscale=function(t){var e=t.red,i=t.green,n=t.blue;return p.red*e+p.green*i+p.blue*n},e.extend=function t(e){var i=Object.assign({},e);for(var n=arguments.length,a=Array(n>1?n-1:0),u=1;u<n;u++)a[u-1]=arguments[u];a.forEach(function(e){(0,r.forEach)(e,function(n,r){o(e,r)&&(s(n)&&s(i[r])?i[r]=t(i[r],n):i[r]=n)})});return i},e.quickCanvas=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e,n=document.createElement("canvas");return n.height=e,n.width=i,t(n.getContext("2d"),n.height,n.width),n};var r=i(3);var a=e.sqrt2=Math.sqrt(2);e.sqrt3=Math.sqrt(3),e.invSqrt2=1/a;function o(t,e){return t&&(t.hasOwnProperty(e)||e in t)}function s(t){return!(!t||"object"!==(void 0===t?"undefined":n(t))||Array.isArray(t))}function u(t,e){if(null==e&&(e=t,t=0),t>e){var i=t;t=e,e=i}return Array.from(Array(Math.abs(e-t)),function(e,i){return i+t})}function l(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.location.search,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"&",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"=",n={};return t.replace(/(^\?)/,"").split(e).forEach(function(t){t=t.split(i),n[t[0]]=t[1]}),n}var c=/^{.*}$/,h=/^\[.*\]$/;function f(t){return"string"!=typeof t?t:"true"===t.toLowerCase()||"false"!==t.toLowerCase()&&("null"===t.toLowerCase()?null:"undefined"===t.toLowerCase()?void 0:isNaN(Number(t))?c.test(t)||h.test(t)?JSON.parse(decodeURIComponent(t)):t:Number(t))}var p={red:.299,green:.587,blue:.114}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}();var r=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.x=Math.round(e)+0,this.y=Math.round(i)+0}return n(t,[{key:"getX",value:function(){return this.x}},{key:"getY",value:function(){return this.y}},{key:"setX",value:function(t){this.x=t}},{key:"setY",value:function(t){this.y=t}},{key:"getPoint",value:function(){return{x:this.x,y:this.y}}}]),t}();e.default=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=e.HEX="hex",r=e.CIRCLE="circle",a=e.SQUARE="square",o=(e.TILE_STYLES={HEX:n,CIRCLE:r,SQUARE:a},e.BOARD_STYLES={HEX:n,SQUARE:a},e.FLAT="flat"),s=e.POINTY="pointy",u=(e.ORIENTATION_STYLES={FLAT:o,POINTY:s},e.FILL="fill"),l=e.OUTLINE="outline";e.DRAW_STYLES={FILL:u,OUTLINE:l}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function r(t){return o(t,function(t){return!!t})}function a(t,e){if(Array.isArray(t)){for(var i=t.length,n=0;n<i;n++)if(t[n]===e)return!0}else for(var r in t)if(t[r]===e)return!0;return!1}function o(t,e){var i={};return Array.isArray(t)?t.filter(e):(l(t,function(t,n){e(t,n)&&(i[n]=t)}),i)}function s(t,e){if(Array.isArray(t))return t.find(e);for(var i in t)if(e(t[i]))return t[i]}function u(t){if(Array.isArray(t))return t.reduce(function(t,e){return t.concat(Array.isArray(e)?u(e):e)},[])}function l(t,e){if(Array.isArray(t))t.forEach(e);else for(var i in t)e(t[i],i,t);return t}function c(t,e){var i={};return l(t,function(t){var n="string"==typeof e?t[e]:e(t);i[n]=i[n]||[],i[n].push(t)}),i}function h(t){return t}function f(t,e){var i=[];return Array.isArray(t)?t.map(e):(l(t,function(n,r){i.push(e(n,r,t))}),i)}function p(t){return!(!t||"object"!==(void 0===t?"undefined":n(t))||Array.isArray(t))}function v(t,e){return t&&t.hasOwnProperty(e)}function g(t,e){var i={};return Array.isArray(t)?l(t,function(n,r){var a=e(n,r,t);p(a)&&v(a,"key")&&v(a,"value")?i[a.key]=a.value:i[r]=a}):l(t,function(n,r){var a=e(n,r,t);p(a)&&v(a,"key")&&v(a,"value")?i[a.key]=a.value:i[r]=a}),i}function d(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments[1],i=-1/0;if(e){var n=-1/0;l(t,function(t,r,a){var o=e(t,r,a);(o>n||o===-1/0&&i===-1/0)&&(i=t,n=o)})}else l(t,function(t){return i=t>i?t:i});return i}function y(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments[1],i=1/0;if(e){var n=1/0;l(t,function(t,r,a){var o=e(t,r,a);(o<n||o===1/0&&i===1/0)&&(i=t,n=o)})}else l(t,function(t){return i=t<i?t:i});return i}function m(t,e){var i={};return l(t,function(t,n){a(e,n)||(i[n]=t)}),i}function b(t,e){var i={};return e.forEach(function(e){t.hasOwnProperty(e)&&(i[e]=t[e])}),i}function T(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:h;return Array.from(Array(t),function(t,i){return e(i)})}function w(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null!=t[0]?t[0]:0;return Array.isArray(t)?t.reduce(e,i):(l(t,function(t,n,r){i=e(i,t,n,r)}),i)}function k(t,e){return o(t,function(t,i,n){return!e(t,i,n)})}function O(t){return!!s(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:h)}e.chain=function(t){var e={value:function(){return t}};return l(S,function(i,n){e[n]=function(){return t=i.apply(void 0,[t].concat(Array.prototype.slice.call(arguments))),e}}),e},e.compact=r,e.contains=a,e.filter=o,e.find=s,e.flatten=u,e.forEach=l,e.groupBy=c,e.identity=h,e.map=f,e.mapObj=g,e.max=d,e.min=y,e.omit=m,e.pick=b,e.range=T,e.reduce=w,e.reject=k,e.some=O;var S=e._={compact:r,contains:a,filter:o,find:s,flatten:u,forEach:l,groupBy:c,identity:h,map:f,mapObj:g,max:d,min:y,omit:m,pick:b,range:T,reduce:w,reject:k,some:O}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=i(0),a=i(3);var o={scale:50,scaleMin:10,scaleMax:250},s=function(){function t(e){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),["getOriginX","getOriginY","getScale","move","_checkMove","setOriginX","setOriginY","zoom","remap"].map(function(t){return i[t]=i[t].bind(i)}),this.settings=Object.assign({},o,e),Object.assign(this,(0,a.pick)(this.settings,["height","width","negativeTiles"])),this.checkScale(this.settings.canvasHeight,this.settings.canvasWidth),this.setOriginX(this.settings.canvasWidth,this.settings.centerX),this.setOriginY(this.settings.canvasHeight,this.settings.centerY)}return n(t,[{key:"getOriginX",value:function(){return this.originX}},{key:"getOriginY",value:function(){return this.originY}},{key:"getScale",value:function(){return this.scale}},{key:"checkScale",value:function(t,e){var i=this.height?this.calculateVerticalScale(t,this.height):0,n=this.width?this.calculateHorizontalScale(e,this.width):0;this.scaleMax=this.settings.scaleMax,this.scaleMin=Math.max(this.settings.scaleMin,i,n),this.scale=this.scaleMin>this.settings.scale?this.scaleMin:this.settings.scale}},{key:"setOriginX",value:function(t,e){this.originX=e?e-t/2:this.negativeTiles?parseInt(t/2):this.width?this.width*this.horizontalDistance()/-2+t/2+this.horizontalDistance()/2:this.tileWidth()/2}},{key:"setOriginY",value:function(t,e){var i=this.height*this.verticalDistance();this.originY=e?e+t/2:this.negativeTiles?parseInt(t/2):this.height?i-(i-t)/2-this.verticalDistance()/2:t-this.tileHeight()/2}},{key:"move",value:function(t){(0,r.has)(t,"height")||(t.height=t.target.offsetHeight),(0,r.has)(t,"width")||(t.width=t.target.offsetWidth);var e=this.originX+t.deltaX,i=this.originY+t.deltaY;return this.originX=e,this.originY=i,this._checkMove(t),this.originX===e&&this.originY===i}},{key:"_checkMove",value:function(t){this.negativeTiles?this._checkMoveNegativeTiles(t):this._checkMovePositiveTiles(t)}},{key:"_checkMovePositiveTiles",value:function(t){var e=t.width,i=t.height,n=this.horizontalDistance(),r=this.verticalDistance(),a=this.tileWidth()/2,o=i-this.tileHeight()/2;if(this.originX=this.originX>a?a:this.originX,this.originY=this.originY<o?o:this.originY,this.width){var s=a-(this.width*n+this.horizontalOverhang()-e);this.originX=this.originX<s?s:this.originX}if(this.height){var u=this.height*r+this.verticalOverhang()-this.tileHeight()/2;this.originY=this.originY>u?u:this.originY}}},{key:"_checkMoveNegativeTiles",value:function(t){var e=this.horizontalDistance(),i=this.verticalDistance();if(this.width){var n=t.width,r=(this.width*e+this.horizontalOverhang())/2;this.originX=this.originX>r?r:n-this.originX>r?n-r:this.originX}if(this.height){var a=t.height,o=(this.height*i+this.verticalOverhang())/2;this.originY=this.originY>o?o:a-this.originY>o?a-o:this.originY}}},{key:"zoom",value:function(t){var e=this.scale,i=e*t.scaleStep;i=Math.max(i,this.scaleMin),e!==(i=Math.min(i,this.scaleMax))&&(this.scale=i,this.move({deltaX:(t.offsetX-this.originX)/e*(e-i),deltaY:(t.offsetY-this.originY)/e*(e-i),width:t.target.offsetWidth,height:t.target.offsetHeight}))}},{key:"remap",value:function(t){Object.assign(this,(0,a.pick)(t,["height","width","negativeTiles"])),this.checkScale(t.canvasHeight,t.canvasWidth),this.setOriginX(t.canvasWidth,t.centerX),this.setOriginY(t.canvasHeight,t.centerY)}}]),t}();e.default=s},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=function(t){return t&&t.__esModule?t:{default:t}}(i(1));function a(t,e){return-t-e}var o=function(t){function e(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var t=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return 2===arguments.length?(t.x=arguments[0],t.z=arguments[1],t.y=a(t.x,t.z)):3===arguments.length&&(t.x=arguments[0],t.y=arguments[1],t.z=arguments[2]),function(t){var e=Math.round(t.x),i=Math.round(t.y),n=Math.round(t.z),r=Math.abs(e-t.x),a=Math.abs(i-t.y),o=Math.abs(n-t.z);r>a&&r>o?e=-i-n:a>o?i=-e-n:n=-e-i,t.x=-0===e?0:e,t.y=-0===i?0:i,t.z=-0===n?0:n}(t),t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.default),n(e,[{key:"getX",value:function(){return this.x}},{key:"getY",value:function(){return this.y}},{key:"getZ",value:function(){return this.z}},{key:"setX",value:function(t){return this.x=t,this}},{key:"setY",value:function(t){return this.y=t,this}},{key:"setZ",value:function(t){return this.z=t,this}},{key:"moveX",value:function(t){return this.x+=t,this}},{key:"moveY",value:function(t){return this.y+=t,this}},{key:"moveZ",value:function(t){return this.z+=t,this}},{key:"getQ",value:function(){return this.x}},{key:"getR",value:function(){return this.z}},{key:"setQ",value:function(t){return this.x=t,this.y=a(this.x,this.z),this}},{key:"setR",value:function(t){return this.z=t,this.y=a(this.x,this.z),this}},{key:"moveQ",value:function(t){return this.x+=t,this.y=a(this.x,this.z),this}},{key:"moveR",value:function(t){return this.z+=t,this.y=a(this.x,this.z),this}},{key:"getPoint",value:function(){return{x:this.x,y:this.y,z:this.z}}},{key:"setHex",value:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}},{key:"moveHex",value:function(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}},{key:"getAxial",value:function(){return{q:this.x,r:this.z}}},{key:"setAxial",value:function(t){return this.x=t.q,this.z=t.r,this.y=a(this.x,this.y),this}},{key:"moveAxial",value:function(t){return this.x+=t.q,this.z+=t.r,this.y=a(this.x,this.z),this}}]),e}();e.default=o},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(t){return t&&t.__esModule?t:{default:t}}(i(1));var r=function(t){function e(t,i){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i))}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,n.default),e}();e.default=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=u(i(4)),a=i(0),o=u(i(5)),s=u(i(1));function u(t){return t&&t.__esModule?t:{default:t}}var l=function(t){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var i=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return["tileHeight","tileWidth","maxWidth","minWidth","horizontalOverhang","verticalOverhang","horizontalDistance","verticalDistance","calculateHorizontalScale","calculateVerticalScale","tileToPixel","pixelToTile","boundingBox"].map(function(t){return i[t]=i[t].bind(i)}),i}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.default),n(e,[{key:"tileHeight",value:function(){return this.maxWidth()}},{key:"tileWidth",value:function(){return this.minWidth()}},{key:"maxWidth",value:function(){return 2*this.scale}},{key:"minWidth",value:function(){return this.scale*a.sqrt3}},{key:"horizontalOverhang",value:function(){return 0}},{key:"verticalOverhang",value:function(){return.25*this.maxWidth()}},{key:"horizontalDistance",value:function(){return this.minWidth()}},{key:"verticalDistance",value:function(){return.75*this.maxWidth()}},{key:"calculateHorizontalScale",value:function(t,e){return t/e/a.sqrt3}},{key:"calculateVerticalScale",value:function(t,e){return t/(.75*e+.25)/2}},{key:"tileToPixel",value:function(t){t=t instanceof o.default?t:new(Function.prototype.bind.apply(o.default,[null].concat(Array.prototype.slice.call(arguments))));var e=this.scale*a.sqrt3*(t.getQ()+t.getR()/2),i=3*this.scale/2*t.getR();return new s.default(e+this.originX,i+this.originY)}},{key:"pixelToTile",value:function(t){var e=(t=t instanceof s.default?t:new(Function.prototype.bind.apply(s.default,[null].concat(Array.prototype.slice.call(arguments))))).getX()-this.originX,i=t.getY()-this.originY,n=(e*(a.sqrt3/3)-i/3)/this.scale,r=i*(2/3)/this.scale;return new o.default(n,r)}},{key:"boundingBox",value:function(t,e,i,n){var r=this.pixelToTile(t),s=this.pixelToTile(i),u=(this.pixelToTile(n),this.pixelToTile(e)),l=(0,a.rangeInclusive)(r.getR()-1,s.getR()+1),c=u.getQ()-r.getQ();return l.map(function(t,e){var i=r.getQ()-Math.floor(e/2),n=i+c;return(0,a.rangeInclusive)(i,n+1).map(function(e){return new o.default(e,t)})})}}]),e}();e.default=l},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=u(i(4)),a=i(0),o=u(i(5)),s=u(i(1));function u(t){return t&&t.__esModule?t:{default:t}}var l=function(t){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var i=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return["tileHeight","tileWidth","maxWidth","minWidth","horizontalOverhang","verticalOverhang","horizontalDistance","verticalDistance","calculateHorizontalScale","calculateVerticalScale","tileToPixel","pixelToTile","boundingBox"].map(function(t){return i[t]=i[t].bind(i)}),i}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.default),n(e,[{key:"tileHeight",value:function(){return this.minWidth()}},{key:"tileWidth",value:function(){return this.maxWidth()}},{key:"maxWidth",value:function(){return 2*this.scale}},{key:"minWidth",value:function(){return this.scale*a.sqrt3}},{key:"horizontalOverhang",value:function(){return.25*this.maxWidth()}},{key:"verticalOverhang",value:function(){return 0}},{key:"horizontalDistance",value:function(){return.75*this.maxWidth()}},{key:"verticalDistance",value:function(){return this.minWidth()}},{key:"calculateHorizontalScale",value:function(t,e){return t/(.75*e+.25)/2}},{key:"calculateVerticalScale",value:function(t,e){return t/e/a.sqrt3}},{key:"tileToPixel",value:function(t){t=t instanceof o.default?t:new(Function.prototype.bind.apply(o.default,[null].concat(Array.prototype.slice.call(arguments))));var e=3*this.scale/2*t.getQ(),i=this.scale*a.sqrt3*(t.getR()+t.getQ()/2);return new s.default(e+this.originX,i+this.originY)}},{key:"pixelToTile",value:function(t){var e=(t=t instanceof s.default?t:new(Function.prototype.bind.apply(s.default,[null].concat(Array.prototype.slice.call(arguments))))).getX()-this.originX,i=t.getY()-this.originY,n=e*(2/3)/this.scale,r=(i*(a.sqrt3/3)-e/3)/this.scale;return new o.default(n,r)}},{key:"boundingBox",value:function(t,e,i,n){var r=this.pixelToTile(t),s=(this.pixelToTile(i),this.pixelToTile(n)),u=this.pixelToTile(e),l=(0,a.rangeInclusive)(r.getQ()-1,u.getQ()+1),c=s.getR()-u.getR();return l.map(function(t,e){var i=r.getR()-Math.floor(e/2),n=i+c;return(0,a.rangeInclusive)(i,n+1).map(function(e){return new o.default(t,e)})})}}]),e}();e.default=l},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=u(i(4)),a=i(0),o=u(i(6)),s=u(i(1));function u(t){return t&&t.__esModule?t:{default:t}}var l=function(t){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var i=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return["tileHeight","tileWidth","maxWidth","minWidth","horizontalOverhang","verticalOverhang","horizontalDistance","verticalDistance","calculateHorizontalScale","calculateVerticalScale","tileToPixel","pixelToTile","boundingBox"].map(function(t){return i[t]=i[t].bind(i)}),i}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.default),n(e,[{key:"tileHeight",value:function(){return this.maxWidth()}},{key:"tileWidth",value:function(){return this.maxWidth()}},{key:"maxWidth",value:function(){return 2*this.scale}},{key:"minWidth",value:function(){return this.maxWidth()*a.invSqrt2}},{key:"horizontalOverhang",value:function(){return.5*this.maxWidth()}},{key:"verticalOverhang",value:function(){return.5*this.maxWidth()}},{key:"horizontalDistance",value:function(){return this.maxWidth()/2}},{key:"verticalDistance",value:function(){return this.maxWidth()/2}},{key:"calculateHorizontalScale",value:function(t,e){return t/(e/2)/2}},{key:"calculateVerticalScale",value:function(t,e){return t/(e/2)/2}},{key:"tileToPixel",value:function(t){var e=(t=t instanceof o.default?t:new(Function.prototype.bind.apply(o.default,[null].concat(Array.prototype.slice.call(arguments))))).getX(),i=t.getY(),n=(e<i?-1:1)*(Math.abs(i-e)/a.sqrt2)*this.minWidth(),r=(-e<i?1:-1)*(Math.abs(e+i)/a.sqrt2)*this.minWidth();return new s.default(n+this.originX,this.originY-r)}},{key:"pixelToTile",value:function(t){var e=(t=t instanceof s.default?t:new(Function.prototype.bind.apply(s.default,[null].concat(Array.prototype.slice.call(arguments))))).getX()-this.originX,i=this.originY-t.getY(),n=(-e<i?1:-1)*(Math.abs(e+i)/a.sqrt2)/this.minWidth(),r=(e<i?1:-1)*(Math.abs(i-e)/a.sqrt2)/this.minWidth();return new o.default(n,r)}},{key:"boundingBox",value:function(t,e,i,n){var r=this.pixelToTile(t),s=this.pixelToTile(n),u=this.pixelToTile(e),l=this.pixelToTile(i),c=(0,a.rangeInclusive)(l.getX(),u.getX()),h=r.getY()-r.getX(),f=r.getY()+r.getX(),p=s.getY()-s.getX(),v=s.getY()+s.getX(),g=Math.floor(c.length/2),d=c.length%2?c[g]:(c[g-1]+c[g])/2;return c.map(function(t){var e=t<d?h+t:f-t,i=t<d?v-t:p+t;return i=Math.min(i,e),e=Math.max(i,e),(0,a.rangeInclusive)(i-1,e+1).map(function(e){return new o.default(t,e)})})}}]),e}();e.default=l},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=u(i(4)),a=i(0),o=u(i(6)),s=u(i(1));function u(t){return t&&t.__esModule?t:{default:t}}var l=function(t){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var i=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return["tileHeight","tileWidth","maxWidth","minWidth","horizontalOverhang","verticalOverhang","horizontalDistance","verticalDistance","calculateHorizontalScale","calculateVerticalScale","tileToPixel","pixelToTile","boundingBox"].map(function(t){return i[t]=i[t].bind(i)}),i}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.default),n(e,[{key:"tileHeight",value:function(){return this.minWidth()}},{key:"tileWidth",value:function(){return this.minWidth()}},{key:"maxWidth",value:function(){return 2*this.scale}},{key:"minWidth",value:function(){return this.maxWidth()*a.invSqrt2}},{key:"horizontalOverhang",value:function(){return 0}},{key:"verticalOverhang",value:function(){return 0}},{key:"horizontalDistance",value:function(){return this.minWidth()}},{key:"verticalDistance",value:function(){return this.minWidth()}},{key:"calculateHorizontalScale",value:function(t,e){return t/e/a.invSqrt2/2}},{key:"calculateVerticalScale",value:function(t,e){return t/e/a.invSqrt2/2}},{key:"tileToPixel",value:function(t){var e=(t=t instanceof o.default?t:new(Function.prototype.bind.apply(o.default,[null].concat(Array.prototype.slice.call(arguments))))).getX()*this.minWidth(),i=t.getY()*this.minWidth();return new s.default(e+this.originX,this.originY-i)}},{key:"pixelToTile",value:function(t){var e=(t=t instanceof s.default?t:new(Function.prototype.bind.apply(s.default,[null].concat(Array.prototype.slice.call(arguments))))).getX()-this.originX,i=this.originY-t.getY(),n=e/this.minWidth(),r=i/this.minWidth();return new o.default(n,r)}},{key:"boundingBox",value:function(t,e,i,n){var r=this.pixelToTile(t),s=this.pixelToTile(n),u=this.pixelToTile(e),l=(0,a.rangeInclusive)(r.getX(),u.getX()),c=(0,a.rangeInclusive)(s.getY(),r.getY());return l.map(function(t){return c.map(function(e){return new o.default(t,e)})})}}]),e}();e.default=l},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});i(0);var n=i(2);var r={x:0,y:0,scale:10,orientation:n.FLAT,tileStyle:n.HEX,drawStyle:n.FILL,width:1,color:{red:0,green:0,blue:0,alpha:.5}};e.default=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Object.assign(this,r,e)}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=i(2),a=i(0);var o=function(){function t(e){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.settings=Object.assign({},e),this.flatTopCornerX=[],this.flatTopCornerY=[],this.pointyTopCornerX=[],this.pointyTopCornerY=[];(0,a.range)(24).forEach(function(t){var e=(0,a.toFixed)(Math.cos(t/24*6*(2*Math.PI)/6)),n=(0,a.toFixed)(Math.sin(t/24*6*(2*Math.PI)/6));if(t%4==0){var r=t/4;i.flatTopCornerX[r]=e,i.flatTopCornerY[r]=n}if((t-2)%4==0){var o=(t-2)/4;i.pointyTopCornerX[o]=e,i.pointyTopCornerY[o]=n}})}return n(t,[{key:"outline",value:function(t,e,i,n,o){e*=o.scale;var s=o.orientation===r.POINTY?this.pointyTopCornerX:this.flatTopCornerX,u=o.orientation===r.POINTY?this.pointyTopCornerY:this.flatTopCornerY;t.beginPath(),t.moveTo(i+e*s[0],n+e*u[0]),t.lineTo(i+e*s[1],n+e*u[1]),t.lineTo(i+e*s[2],n+e*u[2]),t.lineTo(i+e*s[3],n+e*u[3]),t.lineTo(i+e*s[4],n+e*u[4]),t.lineTo(i+e*s[5],n+e*u[5]),t.closePath(),t.lineWidth=o.width,t.strokeStyle=(0,a.getColor)(o.color),t.stroke()}},{key:"fill",value:function(t,e,i,n,o){e*=o.scale;var s=o.orientation===r.POINTY?this.pointyTopCornerX:this.flatTopCornerX,u=o.orientation===r.POINTY?this.pointyTopCornerY:this.flatTopCornerY;t.beginPath(),t.moveTo(i+e*s[0],n+e*u[0]),t.lineTo(i+e*s[1],n+e*u[1]),t.lineTo(i+e*s[2],n+e*u[2]),t.lineTo(i+e*s[3],n+e*u[3]),t.lineTo(i+e*s[4],n+e*u[4]),t.lineTo(i+e*s[5],n+e*u[5]),t.fillStyle=(0,a.getColor)(o.color),t.fill()}}]),t}();e.default=o},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=i(0),a=i(2);var o=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.settings=Object.assign({},e),this.squareX=[r.invSqrt2,r.invSqrt2,-r.invSqrt2,-r.invSqrt2],this.squareY=[r.invSqrt2,-r.invSqrt2,-r.invSqrt2,r.invSqrt2],this.diamondX=[1,0,-1,0,.5,-.5],this.diamondY=[0,-1,0,1,-.5,.5]}return n(t,[{key:"fill",value:function(t,e,i,n,o){e*=o.scale;var s=o.orientation===a.POINTY?this.diamondX:this.squareX,u=o.orientation===a.POINTY?this.diamondY:this.squareY;t.beginPath(),t.moveTo(i+e*s[0],n+e*u[0]),t.lineTo(i+e*s[1],n+e*u[1]),t.lineTo(i+e*s[2],n+e*u[2]),t.lineTo(i+e*s[3],n+e*u[3]),t.fillStyle=(0,r.getColor)(o.color),t.fill()}},{key:"outline",value:function(t,e,i,n,o){e*=o.scale;var s=o.orientation===a.POINTY?this.diamondX:this.squareX,u=o.orientation===a.POINTY?this.diamondY:this.squareY;t.beginPath(),t.moveTo(i+e*s[0],n+e*u[0]),t.lineTo(i+e*s[1],n+e*u[1]),t.lineTo(i+e*s[2],n+e*u[2]),t.lineTo(i+e*s[3],n+e*u[3]),t.closePath(),t.lineWidth=o.width,t.strokeStyle=(0,r.getColor)(o.color),t.stroke()}}]),t}();e.default=o},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=i(0);var a=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return n(t,[{key:"fill",value:function(t,e,i,n,a){t.beginPath(),t.arc(i,n,e*a.scale,0,2*Math.PI,!1),t.fillStyle=(0,r.getColor)(a.color),t.fill()}},{key:"outline",value:function(t,e,i,n,a){t.beginPath(),t.arc(i,n,e*a.scale,0,2*Math.PI,!1),t.lineWidth=a.width,t.strokeStyle=(0,r.getColor)(a.color),t.stroke()}}]),t}();e.default=a},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var i=[],n=!0,r=!1,a=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(i.push(o.value),!e||i.length!==e);n=!0);}catch(t){r=!0,a=t}finally{try{!n&&s.return&&s.return()}finally{if(r)throw a}}return i}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),a=i(0),o=i(2);function s(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var u={mine:{border:{scale:.38,color:{red:255,blue:255,green:255,alpha:.8},horns:{scale:.07,distance:.36}},body:{scale:.36,color:{red:32,blue:32,green:32},horns:{scale:.05,distance:.36}}},pip:{border:{scale:.17,color:{red:255,blue:255,green:255,alpha:.8}},body:{scale:.15,color:{red:0,blue:0,green:0}},distance:.6},sides:6,slices:24};var l=function(){function t(e){var i,n,r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.settings=Object.assign({},u,e);var l=this.settings.sides,c=this.settings.slices;this.slicesX=(0,a.range)(c).map(function(t){return(0,a.toFixed)(Math.cos(t/c*l*(2*Math.PI)/l))}),this.slicesY=(0,a.range)(c).map(function(t){return(0,a.toFixed)(Math.sin(t/c*l*(2*Math.PI)/l))}),this.pipCache={},this.mineCache={},this.pipVertices=(s(r={},o.HEX,(s(i={},o.FLAT,function(t,e){var i=[];t=[0].concat(t),e=[0].concat(e);var n=function(i){return[t[i],e[i]]};return i[1]=[0].map(n),i[2]=[1,13].map(n),i[3]=[5,13,21].map(n),i[4]=[0,1,9,17].map(n),i[5]=[0,5,9,17,21].map(n),i[6]=[1,5,9,13,17,21].map(n),i[7]=[0,1,5,9,13,17,21].map(n),i}(this.slicesX,this.slicesY)),s(i,o.POINTY,function(t,e){var i=[];t=[0].concat(t),e=[0].concat(e);var n=function(i){return[t[i],e[i]]};return i[1]=[0].map(n),i[2]=[7,19].map(n),i[3]=[7,15,23].map(n),i[4]=[0,3,11,19].map(n),i[5]=[0,3,11,15,23].map(n),i[6]=[3,7,11,15,19,23].map(n),i[7]=[0,3,7,11,15,19,23].map(n),i}(this.slicesX,this.slicesY)),i)),s(r,o.SQUARE,(s(n={},o.FLAT,function(){var t=[],e=[0,a.invSqrt2,a.invSqrt2,-a.invSqrt2,-a.invSqrt2,a.invSqrt2,-a.invSqrt2,0,0],i=[0,a.invSqrt2,-a.invSqrt2,-a.invSqrt2,a.invSqrt2,0,0,-a.invSqrt2,a.invSqrt2],n=function(t){return[e[t],i[t]]};return t[1]=[0].map(n),t[2]=[1,3].map(n),t[3]=[0,1,3].map(n),t[4]=[1,2,3,4].map(n),t[5]=[0,1,2,3,4].map(n),t[6]=[1,2,3,4,5,6].map(n),t[7]=[0,1,2,3,4,5,6].map(n),t[8]=[1,2,3,4,5,6,7,8].map(n),t[9]=[0,1,2,3,4,5,6,7,8].map(n),t}()),s(n,o.POINTY,function(){var t=[],e=[0,1,0,-1,0,.5,-.5,.5,-.5],i=[0,0,-1,0,1,-.5,.5,.5,-.5],n=function(t){return[e[t],i[t]]};return t[1]=[0].map(n),t[2]=[1,3].map(n),t[3]=[0,1,3].map(n),t[4]=[1,2,3,4].map(n),t[5]=[0,1,2,3,4].map(n),t[6]=[1,2,3,4,5,6].map(n),t[7]=[0,1,2,3,4,5,6].map(n),t[8]=[1,2,3,4,5,6,7,8].map(n),t[9]=[0,1,2,3,4,5,6,7,8].map(n),t}()),n)),r),this.horns=this.pipVertices[o.HEX][o.FLAT][6].concat(this.pipVertices[o.HEX][o.POINTY][6])}return r(t,[{key:"background",value:function(t,e,i,n){t.beginPath(),t.rect(0,0,i,e),t.fillStyle=(0,a.getColor)(n),t.closePath(),t.fill()}},{key:"pip",value:function(t,e,i,n,r,a,o,s){var u=i+s*r,l=n+s*a;t.moveTo(u,l),t.arc(u,l,o,0,2*Math.PI,!0)}},{key:"setPipCache",value:function(t,e){var i=this,r=e*this.settings.pip.distance,o=e*this.settings.pip.body.scale,s=e*this.settings.pip.border.scale;this.pipCache.scale=e,this.pipCache.height=2*(Math.ceil(s)+1),this.pipCache.width=this.pipCache.height;var u=this.pipCache.height/2;this.pipCache.pip=(0,a.quickCanvas)(function(t,e,n){t.beginPath(),t.arc(u,u,s,0,2*Math.PI,!0),t.closePath(),t.fillStyle=(0,a.getColor)(i.settings.pip.border.color),t.fill(),t.beginPath(),t.arc(u,u,o,0,2*Math.PI,!0),t.closePath(),t.fillStyle=(0,a.getColor)(i.settings.pip.body.color),t.fill()},this.pipCache.height,this.pipCache.width);var l=e-u;this.pipCache.pips=t.map(function(t){return(0,a.quickCanvas)(function(e){t.forEach(function(t){var a=n(t,2),o=a[0],s=a[1];return e.drawImage(i.pipCache.pip,l+r*o,l+r*s)})},2*e)})}},{key:"pips",value:function(t,e,i,n,r){var a=r.tileStyle,o=r.orientation,s=r.pips;if(this.pipVertices[a]&&this.pipVertices[a][o]&&this.pipVertices[a][o][s]){e!==this.pipCache.scale&&this.setPipCache(this.pipVertices[a][o],e);var u=2*e*r.scale,l=2*e*r.scale;t.drawImage(this.pipCache.pips[s],i-u/2,n-l/2,u,l)}}},{key:"mine",value:function(t,e,i,n){arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.settings.mine;e!==this.mineCache.scale&&this.setMineCache(e),t.drawImage(this.mineCache.mine,i-e,n-e,2*e,2*e)}},{key:"setMineCache",value:function(t){var e=this;this.mineCache.scale=t,this.mineCache.mine=(0,a.quickCanvas)(function(i){e._mine(i,t,t,t,e.settings.mine.border),e._horns(i,t,t,t,e.settings.mine.border.horns,e.settings.mine.border.color),e._mine(i,t,t,t,e.settings.mine.body),e._horns(i,t,t,t,e.settings.mine.body.horns,e.settings.mine.body.color)},2*t)}},{key:"_mine",value:function(t,e,i,n,r){t.beginPath(),t.moveTo(i,n),t.arc(i,n,e*r.scale,0,2*Math.PI,!0),t.closePath(),t.fillStyle=(0,a.getColor)(r.color),t.fill()}},{key:"_horns",value:function(t,e,i,r,o,s){var u=this,l=e*o.scale,c=e*o.distance;t.beginPath(),this.horns.forEach(function(a){var o=n(a,2),s=o[0],h=o[1];return u.pip(t,e,i,r,s,h,l,c)}),t.closePath(),t.fillStyle=(0,a.getColor)(s),t.fill()}},{key:"explosion",value:function(t,e,i,n){var r=this,o=.667*e,s=.333*e;t.beginPath(),t.moveTo(i,n),t.moveTo(i+o*this.slicesX[0],n+o*this.slicesY[0]),(0,a.range)(this.settings.slices).filter(function(t){return t%2==1}).forEach(function(e){t.lineTo(i+s*r.slicesX[e],n+s*r.slicesY[e]),t.lineTo(i+o*r.slicesX[e+1],n+o*r.slicesY[e+1])}),t.closePath(),t.fillStyle="rgb(255,0,0)",t.fill()}}]),t}();e.default=l},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=i(0);var a=function(){function t(e){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.lastNow=null,["getContext","getSize","onResize","render"].map(function(t){return i[t]=i[t].bind(i)}),this.draw=e.draw||r.noop,this.resize=e.resize||r.noop,this.drawDelay=e.drawDelay,this.container=e.element||document.body,window.addEventListener("resize",this.onResize),this.canvas=document.createElement("canvas"),this.canvas.width=this.container.offsetWidth,this.canvas.height=this.container.offsetHeight,this.context=this.canvas.getContext("2d"),this.container.appendChild(this.canvas),requestAnimationFrame(this.render)}return n(t,[{key:"getContext",value:function(){return this.context}},{key:"getSize",value:function(){return{canvasWidth:this.container.offsetWidth,canvasHeight:this.container.offsetHeight}}},{key:"onResize",value:function(t){var e=this.container.offsetWidth,i=this.container.offsetHeight,n=this.canvas.width,r=this.canvas.height,a=e-n,o=i-r;this.canvas.width=e,this.canvas.height=i,Object.assign(t,{height:i,width:e,oldHeight:r,oldWidth:n,deltaX:a,deltaY:o}),this.resize(t)}},{key:"render",value:function(t){var e=this;this.context.lastUTC=this.context.utc||null,this.context.utc=Date.now(),this.context.now=t,this.context.lastNow=this.lastNow,this.draw(this.context),this.lastNow=t,this.drawDelay?setTimeout(function(){return requestAnimationFrame(e.render)},this.drawDelay):requestAnimationFrame(this.render)}}]),t}();e.default=a},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),r=i(0);function a(t){if(Array.isArray(t)){for(var e=0,i=Array(t.length);e<t.length;e++)i[e]=t[e];return i}return Array.from(t)}var o={debug:!1,element:document.body,desktopPress:!1,tap:r.noop,tapStart:r.noop,move:r.noop,doubletap:r.noop,press:r.noop,pressStart:r.noop,zoom:r.noop,moveThreshold:5,doubletapThreshold:500,pressThreshold:300,wheelFactor:-100},s=["contextmenu","mousedown","mouseup","mousemove","touchstart","touchend","touchmove","touchcancel","wheel"],u=["eventHandler","tapStart","pressStart"].concat(s),l=function(){function t(e){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.settings=Object.assign({},o,e),this.state={tapStartTime:null},u.forEach(function(t){return i[t]=i[t].bind(i)}),s.forEach(function(t){return i.settings.element.addEventListener(t,function(e){return i.eventHandler(e,t)})})}return n(t,[{key:"eventHandler",value:function(t,e){t.timeStampUTC=Date.now(),this.settings.debug&&console.debug("[onTap]["+e+"]",t),this[e](t)}},{key:"contextmenu",value:function(t){t.preventDefault()}},{key:"tapStart",value:function(t){var e=this;if(!this.state.tapStartTime){var i=t.mobile;this.state.tapStartTime=t.timeStampUTC,(i||this.settings.desktopPress)&&(clearTimeout(this.state.pressTO),this.state.pressTO=setTimeout(function(){e.pressStart({mobile:i,timeStampUTC:Date.now(),offsetX:e.state.lastX,offsetY:e.state.lastY})},this.settings.pressThreshold)),this.settings.tapStart(t)}}},{key:"mousedown",value:function(t){Object.assign(t,{mobile:!1}),this.state.lastX=t.offsetX,this.state.lastY=t.offsetY,t.which&&1!==t.which?this.settings.pressStart(t):this.tapStart(t)}},{key:"touchstart",value:function(t){t.preventDefault(),Object.assign(t,{mobile:!0});var e=[].concat(a(t.touches));t.offsetX=e.reduce(function(t,e){return t+e.pageX},0)/e.length,t.offsetY=e.reduce(function(t,e){return t+e.pageY},0)/e.length,this.state.lastX=t.offsetX,this.state.lastY=t.offsetY,t.touches.length>1&&(this.state.scaleStart=(0,r.hypotenuse)(e[0].pageX-e[1].pageX,e[0].pageY-e[1].pageY),this.state.pinching=!0,this.state.lastPinch=1,clearTimeout(this.state.pressTO)),this.tapStart(t)}},{key:"pressStart",value:function(t){this.settings.pressStart(t)}},{key:"mouseup",value:function(t){if(Object.assign(t,{mobile:!1,duration:t.timeStampUTC-this.state.tapStartTime}),!this.state.moving){var e=t.which&&1!==t.which||t.altKey||t.ctrlKey||t.metaKey,i=this.settings.desktopPress&&t.duration>=this.settings.pressThreshold;e||i?this.settings.press(t):(clearTimeout(this.state.pressTO),this.settings.tap(t))}this.state.moving=null,this.state.lastX=null,this.state.lastY=null,this.state.tapStartTime=null,clearTimeout(this.state.pressTO)}},{key:"touchend",value:function(t){t.preventDefault(),Object.assign(t,{mobile:!0,duration:t.timeStampUTC-this.state.tapStartTime});var e=[].concat(a(t.touches));e.length?(t.offsetX=e.reduce(function(t,e){return t+e.pageX},0)/e.length,t.offsetY=e.reduce(function(t,e){return t+e.pageY},0)/e.length,this.state.lastX=t.offsetX,this.state.lastY=t.offsetY):(t.offsetX=this.state.lastX,t.offsetY=this.state.lastY),this.state.moving||this.state.pinching||(t.duration>=this.settings.pressThreshold?this.settings.press(t):(clearTimeout(this.state.pressTO),this.settings.tap(t))),t.touches.length<=1&&(this.state.pinching=!1,this.state.scaleStart=null,this.state.lastPinch=null),0===t.touches.length&&(this.state.moving=null,this.state.lastX=null,this.state.lastY=null,this.state.tapStartTime=null)}},{key:"mousemove",value:function(t){this.state.tapStartTime&&(this.state.moving||(Math.abs(t.offsetX-this.state.lastX)>this.settings.moveThreshold||Math.abs(t.offsetY-this.state.lastY)>this.settings.moveThreshold)&&(this.state.moving=!0,clearTimeout(this.state.pressTO)),this.state.moving&&(Object.assign(t,{mobile:!1,deltaX:t.offsetX-this.state.lastX,deltaY:t.offsetY-this.state.lastY}),this.settings.move(t),this.state.lastX=t.offsetX,this.state.lastY=t.offsetY))}},{key:"touchmove",value:function(t){if(t.preventDefault(),this.state.tapStartTime){var e=[].concat(a(t.touches));(0,r.has)(t,"scale")||(t.scale=e.length<2?1:(0,r.hypotenuse)(e[0].pageX-e[1].pageX,e[0].pageY-e[1].pageY)/this.state.scaleStart),Object.assign(t,{offsetX:e.reduce(function(t,e){return t+e.pageX},0)/e.length,offsetY:e.reduce(function(t,e){return t+e.pageY},0)/e.length,scaleStep:t.scale/this.state.lastPinch,mobile:!0}),this.state.pinching&&(this.settings.zoom(t),this.state.lastPinch=t.scale),this.state.moving||(Math.abs(t.offsetX-this.state.lastX)>this.settings.moveThreshold||Math.abs(t.offsetY-this.state.lastY)>this.settings.moveThreshold)&&(this.state.moving=!0,clearTimeout(this.state.pressTO)),this.state.moving&&(Object.assign(t,{deltaX:t.offsetX-this.state.lastX,deltaY:t.offsetY-this.state.lastY}),this.settings.move(t),this.state.lastX=t.offsetX,this.state.lastY=t.offsetY)}}},{key:"touchcancel",value:function(t){console.log("touchcancel",t)}},{key:"wheel",value:function(t){Object.assign(t,{scaleStep:1+t.deltaY/this.settings.wheelFactor,mobile:!1}),this.settings.zoom(t)}}]),t}();e.default=l},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Tessellate=void 0;var n,r=function(){function t(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,i,n){return i&&t(e.prototype,i),n&&t(e,n),e}}(),a=w(i(0)),o=w(i(3)),s=T(i(17)),u=T(i(1)),l=T(i(16)),c=T(i(15)),h=T(i(14)),f=T(i(13)),p=T(i(12)),v=T(i(11)),g=T(i(10)),d=T(i(9)),y=T(i(8)),m=T(i(7)),b=i(2);function T(t){return t&&t.__esModule?t:{default:t}}function w(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}function k(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var O=(k(n={},b.HEX,new p.default),k(n,b.CIRCLE,new h.default),k(n,b.SQUARE,new f.default),n),S=new c.default,x={tile:b.HEX,board:b.HEX,orientation:b.FLAT,negativeTiles:!0,tap:a.noop,pressStart:a.noop,press:a.noop,draw:a.noop};e.Tessellate=function(){function t(e){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),["checkSettings","tap","doubletap","pressStart","press","move","zoom","pixelToTile","tileToPixel","getTilePoints","draw","resize","remap"].map(function(t){i[t]=i[t].bind(i)}),this.checkSettings(e),this.sketch=new l.default(Object.assign({element:this.settings.element,draw:this.draw,resize:this.resize},o.pick(this.settings,["drawDelay"]))),this.onTap=new s.default(Object.assign({element:this.settings.element,tap:this.tap,doubletap:this.doubletap,pressStart:this.pressStart,press:this.press,move:this.move,zoom:this.zoom},o.pick(this.settings,["desktopPress","moveThreshold","doubletapThreshold","pressThreshold","wheelFactor"])));var n=function(t,e){switch(t){case b.HEX:switch(e){case b.FLAT:return y.default;case b.POINTY:return m.default}case b.SQUARE:switch(e){case b.FLAT:return g.default;case b.POINTY:return d.default}}}(this.settings.board,this.settings.orientation);this.cartographer=new n(Object.assign(this.sketch.getSize(),o.pick(this.settings,["centerX","centerY","height","width","scale","negativeTiles"])))}return r(t,null,[{key:"TILE_STYLES",get:function(){return b.TILE_STYLES}},{key:"BOARD_STYLES",get:function(){return b.BOARD_STYLES}},{key:"ORIENTATION_STYLES",get:function(){return b.ORIENTATION_STYLES}},{key:"DRAW_STYLES",get:function(){return b.DRAW_STYLES}},{key:"TILES",get:function(){return O}},{key:"Cell",get:function(){return v.default}},{key:"Shapes",get:function(){return S}},{key:"utils",get:function(){return a}},{key:"funky",get:function(){return o}}]),r(t,[{key:"checkSettings",value:function(t){this.settings=Object.assign({},x,t),this.settings.element=this.settings.element instanceof HTMLElement?this.settings.element:document.querySelector(this.settings.element),this.settings.negativeTiles&&(this.settings.height&&this.settings.height%2==0&&this.settings.height++,this.settings.width&&this.settings.width%2==0&&this.settings.width++)}},{key:"tap",value:function(t){var e=new u.default(t.offsetX,t.offsetY),i={event:t,point:e,tile:this.cartographer.pixelToTile(e)};this.settings.tap(i)}},{key:"doubletap",value:function(t){console.log("DOUBLETAP",t);var e=new u.default(t.offsetX,t.offsetY),i={event:t,point:e,tile:this.cartographer.pixelToTile(e)};console.log(i)}},{key:"pressStart",value:function(t){var e=new u.default(t.offsetX,t.offsetY),i={event:t,point:e,tile:this.cartographer.pixelToTile(e)};this.settings.pressStart(i)}},{key:"press",value:function(t){var e=new u.default(t.offsetX,t.offsetY),i={event:t,point:e,tile:this.cartographer.pixelToTile(e)};this.settings.press(i)}},{key:"move",value:function(t){return this.cartographer.move(t)}},{key:"zoom",value:function(t){this.cartographer.zoom(t)}},{key:"pixelToTile",value:function(t,e){return this.cartographer.pixelToTile(t,e)}},{key:"tileToPixel",value:function(t,e,i){return this.cartographer.tileToPixel(t,e,i)}},{key:"getTilePoints",value:function(t){var e=t.upperLeftX,i=t.upperLeftY,n=t.lowerRightX,r=t.lowerRightY,a=new u.default(e,i),s=new u.default(n,0),l=new u.default(0,r),c=new u.default(n,r);return o.flatten(this.cartographer.boundingBox(a,s,l,c))}},{key:"draw",value:function(t){var e=t.canvas,i=e.height,n=e.width;this.settings.draw({context:t,height:i,width:n,scale:this.cartographer.getScale(),lastNow:t.lastUTC,now:t.utc,tilePoints:this.getTilePoints({upperLeftX:0,upperLeftY:0,lowerRightX:n,lowerRightY:i})})}},{key:"resize",value:function(t){var e=this.cartographer.getOriginX(),i=this.cartographer.getOriginY(),n=this.cartographer.getScale(),r=Object.assign({},t,{deltaX:t.deltaX/2,deltaY:t.deltaY/2});this.move(r),this.cartographer.checkScale(t.height,t.width);var a=t.width/2,o=t.height/2,s=this.cartographer.getScale(),u={deltaX:(a-e)/n*(n-s),deltaY:(o-i)/n*(n-s),height:t.height,width:t.width};this.move(u)}},{key:"remap",value:function(t){var e=t.height,i=t.width;this.cartographer.remap(Object.assign({height:e,width:i},this.sketch.getSize()))}}]),t}()},function(t,e,i){t.exports=i(18)}]));
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzLmpzIiwid2VicGFjazovLy8uL3NyYy9wb2ludC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uc3RzLmpzIiwid2VicGFjazovLy8uL3NyYy9mdW5reS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2FydG9ncmFwaGVyLmpzIiwid2VicGFjazovLy8uL3NyYy9oZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3NxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2FydG9ncmFwaGVyUG9pbnR5WFlaLmpzIiwid2VicGFjazovLy8uL3NyYy9jYXJ0b2dyYXBoZXJGbGF0WFlaLmpzIiwid2VicGFjazovLy8uL3NyYy9jYXJ0b2dyYXBoZXJQb2ludHlYWS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2FydG9ncmFwaGVyRmxhdFhZLmpzIiwid2VicGFjazovLy8uL3NyYy9jZWxsLmpzIiwid2VicGFjazovLy8uL3NyYy9kcmF3SGV4YWdvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZHJhd1NxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZHJhd0NpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZHJhd1NoYXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc2tldGNoLmpzIiwid2VicGFjazovLy8uL3NyYy9vblRhcC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdGVzc2VsbGF0ZS5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIm5vb3AiLCJjbG9uZSIsIm9iaiIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImhhcyIsImh5cG90ZW51c2UiLCJhIiwiYiIsIk1hdGgiLCJzcXJ0IiwiaXNPYmplY3QiLCJyYW5kb20iLCJtaW4iLCJtYXgiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJfdHlwZW9mIiwia2V5cyIsImZsb29yIiwicmFuZ2UiLCJyYW5nZUluY2x1c2l2ZSIsInN0YXJ0IiwiZW5kIiwiZ2V0UXVlcnlTdHJpbmdQYXJhbWV0ZXJzIiwiZ2V0UXVlcnlTdHJpbmdPYmoiLCJxdWVyeVN0cmluZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJzZWFyY2giLCJzZXBhcmF0b3IiLCJhc3NpZ25tZW50IiwiX2Z1bmt5IiwibWFwT2JqIiwicGFyc2VTdHJpbmciLCJ0b0ZpeGVkIiwibnVtYmVyIiwicHJlY2lzaW9uIiwiZmFsbGJhY2siLCJOYU4iLCJpc05hTiIsIk51bWJlciIsImdldENvbG9yIiwiX3JlZiIsInJlZCIsImdyZWVuIiwiYmx1ZSIsImFscGhhIiwiZ3JheXNjYWxlIiwiX3JlZjIiLCJHUkFZX0ZBQ1RPUiIsImV4dGVuZCIsImV4dGVuZGVkIiwiYXNzaWduIiwiX2xlbiIsInNvdXJjZXMiLCJfa2V5IiwiZm9yRWFjaCIsInNyYyIsInF1aWNrQ2FudmFzIiwiZHJhdyIsImhlaWdodCIsIndpZHRoIiwiY2FudmFzIiwiY3JlYXRlRWxlbWVudCIsImdldENvbnRleHQiLCJzcXJ0MiIsInNxcnQzIiwiaW52U3FydDIiLCJwcm9wIiwic3dhcCIsImZyb20iLCJhYnMiLCJfdmFsdWUiLCJpbmRleCIsInBhcmFtZXRlcnMiLCJyZXBsYWNlIiwic3BsaXQiLCJwYWlyIiwiYnJhY2VkIiwiYnJhY2tldGVkIiwic3RyIiwidG9Mb3dlckNhc2UiLCJ0ZXN0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiUG9pbnQiLCJ4IiwieSIsIl9jbGFzc0NhbGxDaGVjayIsInRoaXMiLCJyb3VuZCIsIm5ld1giLCJuZXdZIiwiSEVYIiwiQ0lSQ0xFIiwiU1FVQVJFIiwiRkxBVCIsIlRJTEVfU1RZTEVTIiwiQk9BUkRfU1RZTEVTIiwiUE9JTlRZIiwiRklMTCIsIk9SSUVOVEFUSU9OX1NUWUxFUyIsIk9VVExJTkUiLCJEUkFXX1NUWUxFUyIsImNvbXBhY3QiLCJmaWx0ZXIiLCJ2YWwiLCJjb250YWlucyIsInByZWRpY2F0ZSIsInJlc3VsdCIsImZpbmQiLCJmbGF0dGVuIiwibGlzdCIsInJlZHVjZSIsIm1lbW8iLCJlbGVtZW50IiwiY29uY2F0IiwiaXRlcmF0ZWUiLCJncm91cEJ5IiwicHVzaCIsImlkZW50aXR5IiwibWFwIiwicmV0dXJuZWQiLCJJbmZpbml0eSIsImxhc3RDb21wdXRlZCIsImNvbXB1dGVkIiwib21pdCIsInBpY2siLCJzaXplIiwicmVqZWN0Iiwic29tZSIsImNoYWluIiwiY2hhaW5JbnN0YW5jZSIsIl8iLCJtZXRob2QiLCJzbGljZSIsIl91dGlscyIsIkRFRkFVTFRTIiwic2NhbGUiLCJzY2FsZU1pbiIsInNjYWxlTWF4IiwiQ2FydG9ncmFwaGVyIiwic2V0dGluZ3MiLCJfdGhpcyIsImNoZWNrU2NhbGUiLCJjYW52YXNIZWlnaHQiLCJjYW52YXNXaWR0aCIsInNldE9yaWdpblgiLCJjZW50ZXJYIiwic2V0T3JpZ2luWSIsImNlbnRlclkiLCJvcmlnaW5YIiwib3JpZ2luWSIsImhlaWdodE1pbiIsImNhbGN1bGF0ZVZlcnRpY2FsU2NhbGUiLCJ3aWR0aE1pbiIsImNhbGN1bGF0ZUhvcml6b250YWxTY2FsZSIsIm5lZ2F0aXZlVGlsZXMiLCJwYXJzZUludCIsImhvcml6b250YWxEaXN0YW5jZSIsInRpbGVXaWR0aCIsImJvYXJkSGVpZ2h0IiwidmVydGljYWxEaXN0YW5jZSIsInRpbGVIZWlnaHQiLCJldmVudCIsInRhcmdldCIsIm9mZnNldEhlaWdodCIsIm9mZnNldFdpZHRoIiwiZGVsdGFYIiwiZGVsdGFZIiwiX2NoZWNrTW92ZSIsIl9jaGVja01vdmVOZWdhdGl2ZVRpbGVzIiwiX2NoZWNrTW92ZVBvc2l0aXZlVGlsZXMiLCJjb2xXaWR0aCIsInJvd0hlaWdodCIsIm1heFgiLCJtaW5ZIiwibWluWCIsImhvcml6b250YWxPdmVyaGFuZyIsIm1heFkiLCJ2ZXJ0aWNhbE92ZXJoYW5nIiwiaGFsZkJvYXJkV2lkdGgiLCJoYWxmQm9hcmRIZWlnaHQiLCJzY2FsZU9yaWciLCJzY2FsZVRlbXAiLCJzY2FsZVN0ZXAiLCJtb3ZlIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJjb25maWciLCJjb21wdXRlWSIsInoiLCJIZXgiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9fcHJvdG9fXyIsImdldFByb3RvdHlwZU9mIiwiaGV4IiwiclgiLCJyWSIsInJaIiwieERpZmYiLCJ5RGlmZiIsInpEaWZmIiwicm91bmRPZmYiLCJuZXdaIiwiYnlYIiwiYnlZIiwiYnlaIiwibmV3USIsIm5ld1IiLCJieVEiLCJieVIiLCJuZXdIZXgiLCJieUhleCIsInEiLCJuZXdBeGlhbCIsImJ5QXhpYWwiLCJTcXVhcmUiLCJDYXJ0b2dyYXBoZXJQb2ludHlYWVoiLCJtYXhXaWR0aCIsIm1pbldpZHRoIiwicGl4ZWxzIiwidGlsZXMiLCJGdW5jdGlvbiIsImFwcGx5IiwicGl4ZWxYIiwiZ2V0USIsImdldFIiLCJwaXhlbFkiLCJwb2ludCIsImdldFgiLCJnZXRZIiwidXBwZXJMZWZ0UG9pbnQiLCJ1cHBlclJpZ2h0UG9pbnQiLCJsb3dlckxlZnRQb2ludCIsImxvd2VyUmlnaHRQb2ludCIsInVwcGVyTGVmdFRpbGUiLCJwaXhlbFRvVGlsZSIsImxvd2VyTGVmdFRpbGUiLCJ1cHBlclJpZ2h0VGlsZSIsInJvd3MiLCJsZWZ0IiwicmlnaHQiLCJDYXJ0b2dyYXBoZXJGbGF0WFlaIiwibG93ZXJSaWdodFRpbGUiLCJjb2x1bW5zIiwidG9wIiwiYm90dG9tIiwiQ2FydG9ncmFwaGVyUG9pbnR5WFkiLCJzcXVhcmUiLCJ1cHBlckxlZnRJbnRlcmNlcHQiLCJ1cHBlclJpZ2h0SW50ZXJjZXB0IiwibG93ZXJMZWZ0SW50ZXJjZXB0IiwibG93ZXJSaWdodEludGVyY2VwdCIsImFib3V0SGFsZiIsIm1pZHdheSIsIkNhcnRvZ3JhcGhlckZsYXRYWSIsIl9jb25zdHMiLCJvcmllbnRhdGlvbiIsInRpbGVTdHlsZSIsImRyYXdTdHlsZSIsImNvbG9yIiwiQ2VsbCIsIkRyYXdIZXhhZ29uIiwiZmxhdFRvcENvcm5lclgiLCJmbGF0VG9wQ29ybmVyWSIsInBvaW50eVRvcENvcm5lclgiLCJwb2ludHlUb3BDb3JuZXJZIiwiaGV4U2xpY2UiLCJjb3MiLCJQSSIsInNpbiIsImN1ciIsImNvbnRleHQiLCJjZWxsIiwiaGV4Q29ybmVyWCIsImhleENvcm5lclkiLCJiZWdpblBhdGgiLCJtb3ZlVG8iLCJsaW5lVG8iLCJjbG9zZVBhdGgiLCJsaW5lV2lkdGgiLCJzdHJva2VTdHlsZSIsInN0cm9rZSIsImZpbGxTdHlsZSIsImZpbGwiLCJEcmF3U3F1YXJlIiwic3F1YXJlWCIsInNxdWFyZVkiLCJkaWFtb25kWCIsImRpYW1vbmRZIiwic3F1YXJlQ29ybmVyWCIsInNxdWFyZUNvcm5lclkiLCJEcmF3Q2lyY2xlIiwiYXJjIiwibWluZSIsImJvcmRlciIsImhvcm5zIiwiZGlzdGFuY2UiLCJib2R5IiwicGlwIiwic2lkZXMiLCJzbGljZXMiLCJEcmF3U2hhcGVzIiwiX0hFWCIsIl9TUVVBUkUiLCJfcGlwVmVydGljZXMiLCJzbGljZXNYIiwic2xpY2VzWSIsInBpcENhY2hlIiwibWluZUNhY2hlIiwicGlwVmVydGljZXMiLCJfZGVmaW5lUHJvcGVydHkiLCJwaXBzIiwiZ2V0VmVydGV4IiwiZ2VuZXJhdGVGbGF0SGV4UGlwcyIsImdlbmVyYXRlUG9pbnR5SGV4UGlwcyIsInBpcFgiLCJwaXBZIiwiZ2VuZXJhdGVGbGF0U3F1YXJlUGlwcyIsImdlbmVyYXRlUG9pbnR5U3F1YXJlUGlwcyIsInJlY3QiLCJjZWxsWCIsImNlbGxZIiwidmVydGV4WCIsInZlcnRleFkiLCJwaXBSYWRpdXMiLCJwaXBEaXN0YW5jZSIsInBpcEJvZHlSYWRpdXMiLCJwaXBCb3JkZXJSYWRpdXMiLCJjZWlsIiwicGlwQ2VudGVyIiwicGlwc0NlbnRlciIsInZlcnRpY2VzIiwiX3NsaWNlZFRvQXJyYXkiLCJkcmF3SW1hZ2UiLCJzZXRQaXBDYWNoZSIsInNjYWxlV2lkdGgiLCJzY2FsZUhlaWdodCIsInNldE1pbmVDYWNoZSIsIl90aGlzMiIsIl9taW5lIiwiX2hvcm5zIiwiaG9ybiIsIl90aGlzMyIsImhvcm5SYWRpdXMiLCJob3JuRGlzdGFuY2UiLCJfcmVmMyIsIl9yZWY0IiwiaG9yblgiLCJob3JuWSIsIl90aGlzNCIsInBlYWsiLCJ2YWxsZXkiLCJTa2V0Y2giLCJsYXN0Tm93IiwicmVzaXplIiwiZHJhd0RlbGF5IiwiY29udGFpbmVyIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uUmVzaXplIiwiYXBwZW5kQ2hpbGQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJyZW5kZXIiLCJvbGRXaWR0aCIsIm9sZEhlaWdodCIsIm5vdyIsImxhc3RVVEMiLCJ1dGMiLCJEYXRlIiwic2V0VGltZW91dCIsImRlYnVnIiwiZGVza3RvcFByZXNzIiwidGFwIiwidGFwU3RhcnQiLCJkb3VibGV0YXAiLCJwcmVzcyIsInByZXNzU3RhcnQiLCJ6b29tIiwibW92ZVRocmVzaG9sZCIsImRvdWJsZXRhcFRocmVzaG9sZCIsInByZXNzVGhyZXNob2xkIiwid2hlZWxGYWN0b3IiLCJldmVudHMiLCJtZXRob2RzIiwiT25UYXAiLCJzdGF0ZSIsInRhcFN0YXJ0VGltZSIsImV2ZW50TmFtZSIsImV2ZW50SGFuZGxlciIsInRpbWVTdGFtcFVUQyIsImNvbnNvbGUiLCJwcmV2ZW50RGVmYXVsdCIsIm1vYmlsZSIsImNsZWFyVGltZW91dCIsInByZXNzVE8iLCJsYXN0WCIsImxhc3RZIiwid2hpY2giLCJ0b3VjaGVzIiwidG91Y2giLCJwYWdlWCIsInBhZ2VZIiwic2NhbGVTdGFydCIsInBpbmNoaW5nIiwibGFzdFBpbmNoIiwiZHVyYXRpb24iLCJtb3ZpbmciLCJyaWdodENsaWNrIiwiYWx0S2V5IiwiY3RybEtleSIsIm1ldGFLZXkiLCJsb2ciLCJ1dGlscyIsImZ1bmt5IiwiVElMRVMiLCJfVElMRVMiLCJTaGFwZXMiLCJ0aWxlIiwiYm9hcmQiLCJUZXNzZWxsYXRlIiwiY2hlY2tTZXR0aW5ncyIsInNrZXRjaCIsIm9uVGFwIiwiY2FydG9ncmFwaGVyIiwic2VsZWN0Q2FydG9ncmFwaGVyIiwiZ2V0U2l6ZSIsIkhUTUxFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInRpbGVUb1BpeGVsIiwidXBwZXJMZWZ0WCIsInVwcGVyTGVmdFkiLCJsb3dlclJpZ2h0WCIsImxvd2VyUmlnaHRZIiwidXBwZXJMZWZ0IiwidXBwZXJSaWdodCIsImxvd2VyTGVmdCIsImxvd2VyUmlnaHQiLCJib3VuZGluZ0JveCIsImdldFNjYWxlIiwidGlsZVBvaW50cyIsImdldFRpbGVQb2ludHMiLCJnZXRPcmlnaW5YIiwiZ2V0T3JpZ2luWSIsIm1vdmVGb3JSZXNpemUiLCJzY2FsZU5ldyIsIm1vdmVGb3JTY2FsZSIsInJlbWFwIl0sIm1hcHBpbmdzIjoiMERBQ0EsSUFBQUEsS0FHQSxTQUFBQyxFQUFBQyxHQUdBLEdBQUFGLEVBQUFFLEdBQ0EsT0FBQUYsRUFBQUUsR0FBQUMsUUFHQSxJQUFBQyxFQUFBSixFQUFBRSxJQUNBRyxFQUFBSCxFQUNBSSxHQUFBLEVBQ0FILFlBVUEsT0FOQUksRUFBQUwsR0FBQU0sS0FBQUosRUFBQUQsUUFBQUMsSUFBQUQsUUFBQUYsR0FHQUcsRUFBQUUsR0FBQSxFQUdBRixFQUFBRCxRQTBEQSxPQXJEQUYsRUFBQVEsRUFBQUYsRUFHQU4sRUFBQVMsRUFBQVYsRUFHQUMsRUFBQVUsRUFBQSxTQUFBUixFQUFBUyxFQUFBQyxHQUNBWixFQUFBYSxFQUFBWCxFQUFB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QUtSdUcsR0FDUCxJQUFNYixFQUFVOUQsS0FBS2dWLGFBQWFrQixhQUM1Qm5TLEVBQVUvRCxLQUFLZ1YsYUFBYW1CLGFBQzVCclEsRUFBWTlGLEtBQUtnVixhQUFhZSxXQUU5QkssRUFBZ0J2ZCxPQUFPK0UsVUFBVytHLEdBQ3ZDSSxPQUFRSixFQUFNSSxPQUFTLEVBQ3ZCQyxPQUFRTCxFQUFNSyxPQUFTLElBR3hCaEYsS0FBS2lHLEtBQUttUSxHQUVWcFcsS0FBS2dWLGFBQWF6UixXQUFXb0IsRUFBTXZHLE9BQVF1RyxFQUFNdEcsT0FFakQsSUFBTXNGLEVBQVVnQixFQUFNdEcsTUFBUSxFQUN4QndGLEVBQVVjLEVBQU12RyxPQUFTLEVBQ3pCaVksRUFBV3JXLEtBQUtnVixhQUFhZSxXQUU3Qk8sR0FDTHZSLFFBQVdwQixFQUFVRyxHQUFXZ0MsR0FBY0EsRUFBWXVRLEdBQzFEclIsUUFBV25CLEVBQVVFLEdBQVcrQixHQUFjQSxFQUFZdVEsR0FDMURqWSxPQUFRdUcsRUFBTXZHLE9BQ2RDLE1BQU9zRyxFQUFNdEcsT0FHZDJCLEtBQUtpRyxLQUFLcVEsb0NBR2EsSUFBaEJsWSxFQUFnQlosRUFBaEJZLE9BQVFDLEVBQVFiLEVBQVJhLE1BQ2YyQixLQUFLZ1YsYUFBYXVCLE1BQU0xZCxPQUFPK0UsUUFDOUJRLFNBQ0FDLFNBQ0UyQixLQUFLOFUsT0FBT0kiLCJmaWxlIjoidGVzc2VsbGF0ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxOSk7XG4iLCJpbXBvcnQge2ZvckVhY2gsIG1hcE9ian0gZnJvbSAnLi9mdW5reS5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge307XG5cbi8vIGh5cG90ZW51c2UgZmFjdG9yIG9mIGlzb3NjZWxlc2UgcmlnaHQgdHJpYW5nbGVcbmV4cG9ydCBjb25zdCBzcXJ0MiA9IE1hdGguc3FydCgyKTtcblxuLy8gc2hvcnQgd2lkdGggZmFjdG9yIGdpdmVuIHRoZSBsZW5naHQgb2YgYSBoZXhhZ29uJ3Mgc2lkZVxuLy8gKDIqUyBnaXZlcyBsb25nIHdpZHRoKVxuZXhwb3J0IGNvbnN0IHNxcnQzID0gTWF0aC5zcXJ0KDMpO1xuXG4vLyBsZWcgZmFjdG9yIG9mIGlzb3NjZWxlc2UgcmlnaHQgdHJpYW5nbGUgd2l0aCB1bml0IGh5cG90ZW51c2VcbmV4cG9ydCBjb25zdCBpbnZTcXJ0MiA9IDEgLyBzcXJ0MlxuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cdHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzKG9iaiwgcHJvcCkge1xuXHRyZXR1cm4gb2JqICYmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkgfHwgKHByb3AgaW4gb2JqKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGVudXNlKGEsIGIpIHtcblx0aWYgKGIgPT0gbnVsbCkgYiA9IGE7XG5cblx0cmV0dXJuIE1hdGguc3FydChhKmEgKyBiKmIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xuXHRyZXR1cm4gb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JykgJiYgIUFycmF5LmlzQXJyYXkob2JqKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShtaW4pKSB7XG5cdFx0cmV0dXJuIG1pbltyYW5kb20obWluLmxlbmd0aCAtIDEpXTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbWluID09PSAnb2JqZWN0Jykge1xuXHRcdHJldHVybiBtaW5bcmFuZG9tKE9iamVjdC5rZXlzKG1pbikpXTtcblx0fVxuXG5cdGlmIChtYXggPT0gbnVsbCkge1xuXHRcdG1heCA9IG1pbjtcblx0XHRtaW4gPSAwO1xuXHR9XG5cblx0cmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZSAoc3RhcnQsIGVuZCkge1xuXHRpZiAoZW5kID09IG51bGwpIHtcblx0XHRlbmQgPSBzdGFydDtcblx0XHRzdGFydCA9IDA7XG5cdH1cblxuXHRpZiAoc3RhcnQgPiBlbmQpIHtcblx0XHRjb25zdCBzd2FwID0gc3RhcnQ7XG5cblx0XHRzdGFydCA9IGVuZDtcblx0XHRlbmQgPSBzd2FwO1xuXHR9XG5cblx0cmV0dXJuIEFycmF5LmZyb20oQXJyYXkoTWF0aC5hYnMoZW5kIC0gc3RhcnQpKSwgKF92YWx1ZSwgaW5kZXgpID0+IGluZGV4ICsgc3RhcnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VJbmNsdXNpdmUoc3RhcnQsIGVuZCkge1xuXHRpZiAoZW5kID09IG51bGwpIHtcblx0XHRlbmQgPSBzdGFydDtcblx0XHRzdGFydCA9IDA7XG5cdH1cblxuXHRyZXR1cm4gcmFuZ2UoTWF0aC5taW4oc3RhcnQsIGVuZCksIE1hdGgubWF4KHN0YXJ0LCBlbmQpKzEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnlTdHJpbmdQYXJhbWV0ZXJzIChxdWVyeVN0cmluZyA9IGRvY3VtZW50LmxvY2F0aW9uLnNlYXJjaCwgc2VwYXJhdG9yID0gJyYnLCBhc3NpZ25tZW50ID0gJz0nKSB7XG5cdGxldCBwYXJhbWV0ZXJzID0ge307XG5cblx0cXVlcnlTdHJpbmdcblx0LnJlcGxhY2UoLyheXFw/KS8sJycpXG5cdC5zcGxpdChzZXBhcmF0b3IpXG5cdC5mb3JFYWNoKHBhaXIgPT4ge1xuXHRcdHBhaXIgPSBwYWlyLnNwbGl0KGFzc2lnbm1lbnQpO1xuXHRcdHBhcmFtZXRlcnNbcGFpclswXV0gPSBwYWlyWzFdO1xuXHR9KTtcblxuXHRyZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5U3RyaW5nT2JqIChxdWVyeVN0cmluZyA9IGRvY3VtZW50LmxvY2F0aW9uLnNlYXJjaCwgc2VwYXJhdG9yID0gJyYnLCBhc3NpZ25tZW50ID0gJz0nKSB7XG5cdHJldHVybiBtYXBPYmooZ2V0UXVlcnlTdHJpbmdQYXJhbWV0ZXJzKHF1ZXJ5U3RyaW5nLCBzZXBhcmF0b3IsIGFzc2lnbm1lbnQpLCBwYXJzZVN0cmluZyk7XG59XG5cbmNvbnN0IGJyYWNlZCA9IC9eey4qfSQvO1xuY29uc3QgYnJhY2tldGVkID0gL15cXFsuKlxcXSQvO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmcgKHN0cikge1xuXHRyZXR1cm4gdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycgPyBzdHIgOlxuXHRcdHN0ci50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgPyB0cnVlIDpcblx0XHRzdHIudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDpcblx0XHRzdHIudG9Mb3dlckNhc2UoKSA9PT0gJ251bGwnID8gbnVsbCA6XG5cdFx0c3RyLnRvTG93ZXJDYXNlKCkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDpcblx0XHQhaXNOYU4oTnVtYmVyKHN0cikpID8gTnVtYmVyKHN0cikgOlxuXHRcdGJyYWNlZC50ZXN0KHN0cikgfHwgYnJhY2tldGVkLnRlc3Qoc3RyKSA/IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpIDpcblx0XHRzdHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpeGVkKG51bWJlciwgcHJlY2lzaW9uID0gMywgZmFsbGJhY2sgPSBOYU4pIHtcblx0cmV0dXJuIHR5cGVvZiBudW1iZXIgPT09ICdudW1iZXInICYmICFpc05hTihudW1iZXIpID8gTnVtYmVyKG51bWJlci50b0ZpeGVkKHByZWNpc2lvbikpIDogZmFsbGJhY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvciAoe3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhfSkge1xuXHRyZXR1cm4gYWxwaGEgIT0gbnVsbCA/IGByZ2JhKCR7IHJlZCB9LCAkeyBncmVlbiB9LCAkeyBibHVlIH0sICR7IGFscGhhIH0pYCA6XG5cdFx0YHJnYigkeyByZWQgfSwgJHsgZ3JlZW4gfSwgJHsgYmx1ZSB9KWA7XG59XG5cbmNvbnN0IEdSQVlfRkFDVE9SID0ge1xuXHRyZWQ6IDAuMjk5LFxuXHRncmVlbjogMC41ODcsXG5cdGJsdWU6IDAuMTE0LFxufTtcblxuLy8gZ3JheXNjYWxlIGFjY291bnRpbmcgZm9yIGx1bWlub3NpdHlcbmV4cG9ydCBmdW5jdGlvbiBncmF5c2NhbGUgKHtyZWQsIGdyZWVuLCBibHVlfSkge1xuXHRyZXR1cm4gR1JBWV9GQUNUT1IucmVkICogcmVkXG5cdFx0KyBHUkFZX0ZBQ1RPUi5ncmVlbiAqIGdyZWVuXG5cdFx0KyBHUkFZX0ZBQ1RPUi5ibHVlICogYmx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAob2JqLCAuLi5zb3VyY2VzKSB7XG5cdGNvbnN0IGV4dGVuZGVkID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcblxuXHRzb3VyY2VzLmZvckVhY2goc3JjID0+IHtcblx0XHRmb3JFYWNoKHNyYywgKHZhbHVlLCBrZXkpID0+IHtcblx0XHRcdGlmIChoYXMoc3JjLCBrZXkpKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkgJiYgaXNPYmplY3QoZXh0ZW5kZWRba2V5XSkpIHtcblx0XHRcdFx0XHRleHRlbmRlZFtrZXldID0gZXh0ZW5kKGV4dGVuZGVkW2tleV0sIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRleHRlbmRlZFtrZXldID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cblx0cmV0dXJuIGV4dGVuZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVpY2tDYW52YXMgKGRyYXcsIGhlaWdodCwgd2lkdGggPSBoZWlnaHQpIHtcblx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuXG5cdGRyYXcoY2FudmFzLmdldENvbnRleHQoJzJkJyksIGNhbnZhcy5oZWlnaHQsIGNhbnZhcy53aWR0aCk7XG5cblx0cmV0dXJuIGNhbnZhcztcbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9pbnQge1xuXHRjb25zdHJ1Y3Rvcih4LCB5KSB7XG5cdFx0Ly8gYWRkIHplcm8gdG8gdHVybiAtMCBpbnRvIDBcblx0XHR0aGlzLnggPSBNYXRoLnJvdW5kKHgpICsgMDtcblx0XHR0aGlzLnkgPSBNYXRoLnJvdW5kKHkpICsgMDtcblx0fVxuXG5cdGdldFgoKSB7IHJldHVybiB0aGlzLng7IH1cblx0Z2V0WSgpIHsgcmV0dXJuIHRoaXMueTsgfVxuXG5cdHNldFgobmV3WCkgeyB0aGlzLnggPSBuZXdYOyB9XG5cdHNldFkobmV3WSkgeyB0aGlzLnkgPSBuZXdZOyB9XG5cblx0Z2V0UG9pbnQoKSB7IHJldHVybiB7eDogdGhpcy54LCB5OiB0aGlzLnl9OyB9XG59XG4iLCJleHBvcnQgY29uc3QgSEVYID0gJ2hleCc7XG5leHBvcnQgY29uc3QgQ0lSQ0xFID0gJ2NpcmNsZSc7XG5leHBvcnQgY29uc3QgU1FVQVJFID0gJ3NxdWFyZSc7XG5cbmV4cG9ydCBjb25zdCBUSUxFX1NUWUxFUyA9IHtIRVgsIENJUkNMRSwgU1FVQVJFfTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1NUWUxFUyA9IHtcblx0SEVYLFxuXHRTUVVBUkUsXG59O1xuXG5leHBvcnQgY29uc3QgRkxBVCA9ICdmbGF0JztcbmV4cG9ydCBjb25zdCBQT0lOVFkgPSAncG9pbnR5JztcblxuZXhwb3J0IGNvbnN0IE9SSUVOVEFUSU9OX1NUWUxFUyA9IHtcblx0RkxBVCxcblx0UE9JTlRZLFxufTtcblxuZXhwb3J0IGNvbnN0IEZJTEwgPSAnZmlsbCc7XG5leHBvcnQgY29uc3QgT1VUTElORSA9ICdvdXRsaW5lJztcbmV4cG9ydCBjb25zdCBEUkFXX1NUWUxFUyA9IHtcblx0RklMTCxcblx0T1VUTElORSxcbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gY2hhaW4gKG9iaikge1xuXHRsZXQgY2hhaW5JbnN0YW5jZSA9IHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9XG5cdH07XG5cblx0Zm9yRWFjaChfLCBmdW5jdGlvbiAobWV0aG9kLCBrZXkpIHtcblx0XHRjaGFpbkluc3RhbmNlW2tleV0gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRvYmogPSBtZXRob2Qob2JqLCAuLi5hcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGNoYWluSW5zdGFuY2U7XG5cdFx0fTtcblx0fSk7XG5cblx0cmV0dXJuIGNoYWluSW5zdGFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYWN0IChvYmopIHtcblx0cmV0dXJuIGZpbHRlcihvYmosIHZhbCA9PiB2YWwgPyB0cnVlIDogZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnMgKG9iaiwgdmFsdWUpIHtcblx0aWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuXHRcdGxldCBsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdGZvciAobGV0IGk9MDsgaTxsZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKG9ialtpXSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGVsc2Uge1xuXHRcdGZvciAobGV0IGtleSBpbiBvYmopIHtcblx0XHRcdGlmIChvYmpba2V5XSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyIChvYmosIHByZWRpY2F0ZSkge1xuXHRsZXQgcmVzdWx0ID0ge307XG5cblx0aWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuXHRcdHJldHVybiBvYmouZmlsdGVyKHByZWRpY2F0ZSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Zm9yRWFjaChvYmosICh2YWwsIGtleSkgPT4ge2lmIChwcmVkaWNhdGUodmFsLCBrZXkpKSByZXN1bHRba2V5XSA9IHZhbDt9KTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kIChvYmosIHByZWRpY2F0ZSkge1xuXG5cdGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcblx0XHRyZXR1cm4gb2JqLmZpbmQocHJlZGljYXRlKTtcblx0fVxuXHRlbHNlIHtcblx0XHRmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG5cdFx0XHRpZiAocHJlZGljYXRlKG9ialtrZXldKSkgcmV0dXJuIG9ialtrZXldO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbiAobGlzdCkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuXHRcdHJldHVybiBsaXN0LnJlZHVjZSgobWVtbywgZWxlbWVudCkgPT4gbWVtby5jb25jYXQoQXJyYXkuaXNBcnJheShlbGVtZW50KSA/IGZsYXR0ZW4oZWxlbWVudCkgOiBlbGVtZW50KSwgW10pO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoIChvYmosIGl0ZXJhdGVlKSB7XG5cdGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcblx0XHQvLyBuYXRpdmUgJ2ZvckVhY2gnIGJ1dCB0aGUgcmV0dXJuIGJlbG93IGFsbG93cyB1cyB0byBjaGFpblxuXHRcdG9iai5mb3JFYWNoKGl0ZXJhdGVlKTtcblx0fVxuXHRlbHNlIHtcblx0XHRmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG5cdFx0XHRpdGVyYXRlZShvYmpba2V5XSwga2V5LCBvYmopO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5IChvYmosIGl0ZXJhdGVlKSB7XG5cdGxldCByZXN1bHQgPSB7fTtcblxuXG5cdGZvckVhY2gob2JqLCB2YWwgPT4ge1xuXHRcdGxldCBrZXkgPSB0eXBlb2YgaXRlcmF0ZWUgPT09ICdzdHJpbmcnID8gdmFsW2l0ZXJhdGVlXSA6IGl0ZXJhdGVlKHZhbCk7XG5cblx0XHRyZXN1bHRba2V5XSA9IHJlc3VsdFtrZXldIHx8IFtdO1xuXHRcdHJlc3VsdFtrZXldLnB1c2godmFsKTtcblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5ICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXAgKG9iaiwgaXRlcmF0ZWUpIHtcblx0bGV0IHJlc3VsdCA9IFtdO1xuXG5cdGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcblx0XHQvLyBuYXRpdmUgJ21hcCcgYnV0IHRoZSByZXR1cm4gYmVsb3cgYWxsb3dzIHVzIHRvIGNoYWluXG5cdFx0cmV0dXJuIG9iai5tYXAoaXRlcmF0ZWUpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdGZvckVhY2gob2JqLCAodmFsdWUsIGtleSkgPT4ge1xuXHRcdFx0cmVzdWx0LnB1c2goaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG5cdHJldHVybiBvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSAmJiAhQXJyYXkuaXNBcnJheShvYmopID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBoYXMgKG9iaiwgcHJvcCkge1xuXHRyZXR1cm4gb2JqICYmIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcE9iaiAob2JqLCBpdGVyYXRlZSkge1xuXHRsZXQgcmVzdWx0ID0ge307XG5cblx0aWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuXHRcdGZvckVhY2gob2JqLCAodmFsdWUsIGluZGV4KSA9PiB7XG5cdFx0XHRsZXQgcmV0dXJuZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIG9iaik7XG5cblx0XHRcdGlmIChpc09iamVjdChyZXR1cm5lZCkgJiYgaGFzKHJldHVybmVkLCAna2V5JykgJiYgaGFzKHJldHVybmVkLCAndmFsdWUnKSkge1xuXHRcdFx0XHRyZXN1bHRbcmV0dXJuZWQua2V5XSA9IHJldHVybmVkLnZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHJlc3VsdFtpbmRleF0gPSByZXR1cm5lZDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRlbHNlIHtcblx0XHRmb3JFYWNoKG9iaiwgKHZhbHVlLCBrZXkpID0+IHtcblx0XHRcdGxldCByZXR1cm5lZCA9IGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaik7XG5cblx0XHRcdGlmIChpc09iamVjdChyZXR1cm5lZCkgJiYgaGFzKHJldHVybmVkLCAna2V5JykgJiYgaGFzKHJldHVybmVkLCAndmFsdWUnKSkge1xuXHRcdFx0XHRyZXN1bHRbcmV0dXJuZWQua2V5XSA9IHJldHVybmVkLnZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHJlc3VsdFtrZXldID0gcmV0dXJuZWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF4IChvYmogPSBbXSwgaXRlcmF0ZWUpIHtcblx0bGV0IG1heCA9IC1JbmZpbml0eTtcblxuXHRpZiAoIWl0ZXJhdGVlKSB7XG5cdFx0Zm9yRWFjaChvYmosIHZhbHVlID0+IG1heCA9IHZhbHVlID4gbWF4ID8gdmFsdWUgOiBtYXgpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdGxldCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHk7XG5cblx0XHRmb3JFYWNoKG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgPT4ge1xuXHRcdFx0bGV0IGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBsaXN0KTtcblxuXHRcdFx0aWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSAtSW5maW5pdHkgJiYgbWF4ID09PSAtSW5maW5pdHkpIHtcblx0XHRcdFx0bWF4ID0gdmFsdWU7XG5cdFx0XHRcdGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1heDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbiAob2JqID0gW10sIGl0ZXJhdGVlKSB7XG5cdGxldCBtaW4gPSBJbmZpbml0eTtcblxuXHRpZiAoIWl0ZXJhdGVlKSB7XG5cdFx0Zm9yRWFjaChvYmosIHZhbHVlID0+IG1pbiA9IHZhbHVlIDwgbWluID8gdmFsdWUgOiBtaW4pO1xuXHR9XG5cdGVsc2Uge1xuXHRcdGxldCBsYXN0Q29tcHV0ZWQgPSBJbmZpbml0eTtcblxuXHRcdGZvckVhY2gob2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSA9PiB7XG5cdFx0XHRsZXQgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGxpc3QpO1xuXG5cdFx0XHRpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIG1pbiA9PT0gSW5maW5pdHkpIHtcblx0XHRcdFx0bWluID0gdmFsdWU7XG5cdFx0XHRcdGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1pbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9taXQgKG9iaiwga2V5cykge1xuXHRsZXQgcmVzdWx0ID0ge307XG5cblx0Zm9yRWFjaChvYmosICh2YWx1ZSwga2V5KSA9PiB7XG5cdFx0aWYgKCFjb250YWlucyhrZXlzLCBrZXkpKSB7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHZhbHVlO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBpY2sgKG9iaiwga2V5cykge1xuXHRsZXQgcmVzdWx0ID0ge307XG5cblx0a2V5cy5mb3JFYWNoKGtleSA9PiB7XG5cdFx0aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRyZXN1bHRba2V5XSA9IG9ialtrZXldO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlIChzaXplLCBpdGVyYXRlZSA9IGlkZW50aXR5KSB7XG5cblx0cmV0dXJuIEFycmF5LmZyb20oQXJyYXkoc2l6ZSksICh2YWx1ZSwgaW5kZXgpID0+IGl0ZXJhdGVlKGluZGV4KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UgKG9iaiA9IFtdLCBpdGVyYXRlZSwgbWVtbyA9IG9ialswXSAhPSBudWxsID8gb2JqWzBdIDogMCkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG5cdFx0cmV0dXJuIG9iai5yZWR1Y2UoaXRlcmF0ZWUsIG1lbW8pO1xuXHR9XG5cdGVsc2Uge1xuXHRcdGZvckVhY2gob2JqLCAodmFsLCBrZXksIG9iaikgPT4ge1xuXHRcdFx0bWVtbyA9IGl0ZXJhdGVlKG1lbW8sIHZhbCwga2V5LCBvYmopO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1lbW87XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWplY3QgKG9iaiwgcHJlZGljYXRlKSB7XG5cdHJldHVybiBmaWx0ZXIob2JqLCAodmFsLCBrZXksIG9iaikgPT4gIXByZWRpY2F0ZSh2YWwsIGtleSwgb2JqKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lIChvYmosIHByZWRpY2F0ZSA9IGlkZW50aXR5KSB7XG5cdHJldHVybiBmaW5kKG9iaiwgcHJlZGljYXRlKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuZXhwb3J0IGxldCBfID0ge1xuXHRjb21wYWN0LFxuXHRjb250YWlucyxcblx0ZmlsdGVyLFxuXHRmaW5kLFxuXHRmbGF0dGVuLFxuXHRmb3JFYWNoLFxuXHRncm91cEJ5LFxuXHRpZGVudGl0eSxcblx0bWFwLFxuXHRtYXBPYmosXG5cdG1heCxcblx0bWluLFxuXHRvbWl0LFxuXHRwaWNrLFxuXHRyYW5nZSxcblx0cmVkdWNlLFxuXHRyZWplY3QsXG5cdHNvbWVcbn07XG5cbiIsImltcG9ydCB7aGFzfSBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB7cGlja30gZnJvbSAnLi9mdW5reSc7XG5cbmNvbnN0IERFRkFVTFRTID0ge1xuXHQvLyBpbiBwaXhlbHNcblx0c2NhbGU6IDUwLFxuXHRzY2FsZU1pbjogMTAsXG5cdHNjYWxlTWF4OiAyNTAsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJ0b2dyYXBoZXIge1xuXHRjb25zdHJ1Y3RvciAoc2V0dGluZ3MpIHtcblx0XHRbXG5cdFx0XHQnZ2V0T3JpZ2luWCcsXG5cdFx0XHQnZ2V0T3JpZ2luWScsXG5cblx0XHRcdCdnZXRTY2FsZScsXG5cblx0XHRcdCdtb3ZlJyxcblx0XHRcdCdfY2hlY2tNb3ZlJyxcblx0XHRcdCdzZXRPcmlnaW5YJyxcblx0XHRcdCdzZXRPcmlnaW5ZJyxcblxuXHRcdFx0J3pvb20nLFxuXG5cdFx0XHQncmVtYXAnLFxuXHRcdF0ubWFwKG1ldGhvZCA9PiB0aGlzW21ldGhvZF0gPSB0aGlzW21ldGhvZF0uYmluZCh0aGlzKSk7XG5cblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVFMsIHNldHRpbmdzKTtcblxuXHRcdE9iamVjdC5hc3NpZ24odGhpcywgcGljayh0aGlzLnNldHRpbmdzLCBbJ2hlaWdodCcsICd3aWR0aCcsICduZWdhdGl2ZVRpbGVzJ10pKTtcblxuXHRcdHRoaXMuY2hlY2tTY2FsZSh0aGlzLnNldHRpbmdzLmNhbnZhc0hlaWdodCwgdGhpcy5zZXR0aW5ncy5jYW52YXNXaWR0aCk7XG5cblx0XHR0aGlzLnNldE9yaWdpblgodGhpcy5zZXR0aW5ncy5jYW52YXNXaWR0aCwgdGhpcy5zZXR0aW5ncy5jZW50ZXJYKTtcblx0XHR0aGlzLnNldE9yaWdpblkodGhpcy5zZXR0aW5ncy5jYW52YXNIZWlnaHQsIHRoaXMuc2V0dGluZ3MuY2VudGVyWSk7XG5cdH1cblxuXHRnZXRPcmlnaW5YICgpIHtyZXR1cm4gdGhpcy5vcmlnaW5YO31cblx0Z2V0T3JpZ2luWSAoKSB7cmV0dXJuIHRoaXMub3JpZ2luWTt9XG5cblx0Z2V0U2NhbGUgKCkge3JldHVybiB0aGlzLnNjYWxlO31cblxuXHRjaGVja1NjYWxlIChjYW52YXNIZWlnaHQsIGNhbnZhc1dpZHRoKSB7XG5cdFx0Y29uc3QgaGVpZ2h0TWluID0gdGhpcy5oZWlnaHQgPyB0aGlzLmNhbGN1bGF0ZVZlcnRpY2FsU2NhbGUoY2FudmFzSGVpZ2h0LCB0aGlzLmhlaWdodCkgOiAwO1xuXHRcdGNvbnN0IHdpZHRoTWluID0gdGhpcy53aWR0aCA/IHRoaXMuY2FsY3VsYXRlSG9yaXpvbnRhbFNjYWxlKGNhbnZhc1dpZHRoLCB0aGlzLndpZHRoKSA6IDA7XG5cblx0XHR0aGlzLnNjYWxlTWF4ID0gdGhpcy5zZXR0aW5ncy5zY2FsZU1heDtcblx0XHR0aGlzLnNjYWxlTWluID0gTWF0aC5tYXgodGhpcy5zZXR0aW5ncy5zY2FsZU1pbiwgaGVpZ2h0TWluLCB3aWR0aE1pbik7XG5cblx0XHR0aGlzLnNjYWxlID0gdGhpcy5zY2FsZU1pbiA+IHRoaXMuc2V0dGluZ3Muc2NhbGUgPyB0aGlzLnNjYWxlTWluIDogdGhpcy5zZXR0aW5ncy5zY2FsZTtcblx0fVxuXG5cdHNldE9yaWdpblggKGNhbnZhc1dpZHRoLCBjZW50ZXJYKSB7XG5cdFx0dGhpcy5vcmlnaW5YID0gY2VudGVyWCA/IGNlbnRlclggLSBjYW52YXNXaWR0aCAvIDIgOlxuXHRcdFx0dGhpcy5uZWdhdGl2ZVRpbGVzID8gcGFyc2VJbnQoY2FudmFzV2lkdGggLyAyKSA6XG5cdFx0XHR0aGlzLndpZHRoID8gKCh0aGlzLndpZHRoICogdGhpcy5ob3Jpem9udGFsRGlzdGFuY2UoKSkgLyAtMikgKyAoY2FudmFzV2lkdGggLyAyKSArICh0aGlzLmhvcml6b250YWxEaXN0YW5jZSgpIC8gMikgOlxuXHRcdFx0dGhpcy50aWxlV2lkdGgoKSAvIDI7XG5cdH1cblxuXHRzZXRPcmlnaW5ZIChjYW52YXNIZWlnaHQsIGNlbnRlclkpIHtcblx0XHRjb25zdCBib2FyZEhlaWdodCA9IHRoaXMuaGVpZ2h0ICogdGhpcy52ZXJ0aWNhbERpc3RhbmNlKCk7XG5cblx0XHR0aGlzLm9yaWdpblkgPSBjZW50ZXJZID8gY2VudGVyWSArIGNhbnZhc0hlaWdodCAvIDIgOlxuXHRcdFx0dGhpcy5uZWdhdGl2ZVRpbGVzID8gcGFyc2VJbnQoY2FudmFzSGVpZ2h0IC8gMikgOlxuXHRcdFx0dGhpcy5oZWlnaHQgPyAoYm9hcmRIZWlnaHQpIC0gKChib2FyZEhlaWdodCAtIGNhbnZhc0hlaWdodCkgLyAyKSAtICh0aGlzLnZlcnRpY2FsRGlzdGFuY2UoKSAvIDIpIDpcblx0XHRcdGNhbnZhc0hlaWdodCAtICh0aGlzLnRpbGVIZWlnaHQoKSAvIDIpO1xuXHR9XG5cblx0bW92ZSAoZXZlbnQpIHtcblx0XHRpZiAoIWhhcyhldmVudCwgJ2hlaWdodCcpKSBldmVudC5oZWlnaHQgPSBldmVudC50YXJnZXQub2Zmc2V0SGVpZ2h0O1xuXHRcdGlmICghaGFzKGV2ZW50LCAnd2lkdGgnKSkgZXZlbnQud2lkdGggPSBldmVudC50YXJnZXQub2Zmc2V0V2lkdGg7XG5cblx0XHRjb25zdCBuZXdYID0gdGhpcy5vcmlnaW5YICsgZXZlbnQuZGVsdGFYO1xuXHRcdGNvbnN0IG5ld1kgPSB0aGlzLm9yaWdpblkgKyBldmVudC5kZWx0YVk7XG5cblx0XHR0aGlzLm9yaWdpblggPSBuZXdYO1xuXHRcdHRoaXMub3JpZ2luWSA9IG5ld1k7XG5cblx0XHR0aGlzLl9jaGVja01vdmUoZXZlbnQpO1xuXG5cdFx0Ly8gcmV0dXJuIGlmIHRoZSBtb3ZlIHN1Y2NlZWRlZCBvciBub3Rcblx0XHRyZXR1cm4gdGhpcy5vcmlnaW5YID09PSBuZXdYICYmIHRoaXMub3JpZ2luWSA9PT0gbmV3WTtcblx0fVxuXG5cdF9jaGVja01vdmUgKGV2ZW50KSB7XG5cdFx0aWYgKHRoaXMubmVnYXRpdmVUaWxlcykge1xuXHRcdFx0dGhpcy5fY2hlY2tNb3ZlTmVnYXRpdmVUaWxlcyhldmVudCk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5fY2hlY2tNb3ZlUG9zaXRpdmVUaWxlcyhldmVudCk7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrTW92ZVBvc2l0aXZlVGlsZXMgKGV2ZW50KSB7XG5cdFx0Y29uc3QgY2FudmFzV2lkdGggPSBldmVudC53aWR0aDtcblx0XHRjb25zdCBjYW52YXNIZWlnaHQgPSBldmVudC5oZWlnaHQ7XG5cblx0XHRjb25zdCBjb2xXaWR0aCA9IHRoaXMuaG9yaXpvbnRhbERpc3RhbmNlKCk7XG5cdFx0Y29uc3Qgcm93SGVpZ2h0ID0gdGhpcy52ZXJ0aWNhbERpc3RhbmNlKCk7XG5cblx0XHRjb25zdCBtYXhYID0gdGhpcy50aWxlV2lkdGgoKSAvIDI7XG5cdFx0Y29uc3QgbWluWSA9IGNhbnZhc0hlaWdodCAtICh0aGlzLnRpbGVIZWlnaHQoKSAvIDIpO1xuXG5cdFx0dGhpcy5vcmlnaW5YID0gdGhpcy5vcmlnaW5YID4gbWF4WCA/IG1heFggOiB0aGlzLm9yaWdpblg7XG5cdFx0dGhpcy5vcmlnaW5ZID0gdGhpcy5vcmlnaW5ZIDwgbWluWSA/IG1pblkgOiB0aGlzLm9yaWdpblk7XG5cblx0XHRpZiAodGhpcy53aWR0aCkge1xuXHRcdFx0Y29uc3QgYm9hcmRXaWR0aCA9IHRoaXMud2lkdGggKiBjb2xXaWR0aCArIHRoaXMuaG9yaXpvbnRhbE92ZXJoYW5nKCk7XG5cdFx0XHRjb25zdCBtaW5YID0gbWF4WCAtIChib2FyZFdpZHRoIC0gY2FudmFzV2lkdGgpO1xuXG5cdFx0XHR0aGlzLm9yaWdpblggPSB0aGlzLm9yaWdpblggPCBtaW5YID8gbWluWCA6IHRoaXMub3JpZ2luWDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5oZWlnaHQpIHtcblx0XHRcdGNvbnN0IGJvYXJkSGVpZ2h0ID0gdGhpcy5oZWlnaHQgKiByb3dIZWlnaHQgKyB0aGlzLnZlcnRpY2FsT3ZlcmhhbmcoKTtcblx0XHRcdGNvbnN0IG1heFkgPSBib2FyZEhlaWdodCAtICh0aGlzLnRpbGVIZWlnaHQoKSAvIDIpO1xuXG5cdFx0XHR0aGlzLm9yaWdpblkgPSB0aGlzLm9yaWdpblkgPiBtYXhZID8gbWF4WSA6IHRoaXMub3JpZ2luWTtcblx0XHR9XG5cdH1cblxuXHRfY2hlY2tNb3ZlTmVnYXRpdmVUaWxlcyAoZXZlbnQpIHtcblx0XHRjb25zdCBjb2xXaWR0aCA9IHRoaXMuaG9yaXpvbnRhbERpc3RhbmNlKCk7XG5cdFx0Y29uc3Qgcm93SGVpZ2h0ID0gdGhpcy52ZXJ0aWNhbERpc3RhbmNlKCk7XG5cblx0XHRpZiAodGhpcy53aWR0aCkge1xuXHRcdFx0Y29uc3QgY2FudmFzV2lkdGggPSBldmVudC53aWR0aDtcblx0XHRcdGNvbnN0IGhhbGZCb2FyZFdpZHRoID0gKHRoaXMud2lkdGggKiBjb2xXaWR0aCArIHRoaXMuaG9yaXpvbnRhbE92ZXJoYW5nKCkpIC8gMjtcblxuXHRcdFx0dGhpcy5vcmlnaW5YID0gdGhpcy5vcmlnaW5YID4gaGFsZkJvYXJkV2lkdGggPyBoYWxmQm9hcmRXaWR0aCA6XG5cdFx0XHRcdChjYW52YXNXaWR0aCAtIHRoaXMub3JpZ2luWCkgPiBoYWxmQm9hcmRXaWR0aCA/IGNhbnZhc1dpZHRoIC0gaGFsZkJvYXJkV2lkdGggOlxuXHRcdFx0XHR0aGlzLm9yaWdpblg7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaGVpZ2h0KSB7XG5cdFx0XHRjb25zdCBjYW52YXNIZWlnaHQgPSBldmVudC5oZWlnaHQ7XG5cdFx0XHRjb25zdCBoYWxmQm9hcmRIZWlnaHQgPSAodGhpcy5oZWlnaHQgKiByb3dIZWlnaHQgKyB0aGlzLnZlcnRpY2FsT3ZlcmhhbmcoKSkgLyAyO1xuXG5cdFx0XHR0aGlzLm9yaWdpblkgPSB0aGlzLm9yaWdpblkgPiBoYWxmQm9hcmRIZWlnaHQgPyBoYWxmQm9hcmRIZWlnaHQgOlxuXHRcdFx0XHQoY2FudmFzSGVpZ2h0IC0gdGhpcy5vcmlnaW5ZKSA+IGhhbGZCb2FyZEhlaWdodCA/IGNhbnZhc0hlaWdodCAtIGhhbGZCb2FyZEhlaWdodCA6XG5cdFx0XHRcdHRoaXMub3JpZ2luWTtcblx0XHR9XG5cdH1cblxuXHR6b29tIChldmVudCkge1xuXHRcdGNvbnN0IHNjYWxlT3JpZyA9IHRoaXMuc2NhbGU7XG5cblx0XHRsZXQgc2NhbGVUZW1wID0gc2NhbGVPcmlnICogZXZlbnQuc2NhbGVTdGVwO1xuXG5cdFx0c2NhbGVUZW1wID0gTWF0aC5tYXgoc2NhbGVUZW1wLCB0aGlzLnNjYWxlTWluKTtcblx0XHRzY2FsZVRlbXAgPSBNYXRoLm1pbihzY2FsZVRlbXAsIHRoaXMuc2NhbGVNYXgpO1xuXG5cdFx0aWYgKHNjYWxlT3JpZyAhPT0gc2NhbGVUZW1wKSB7XG5cdFx0XHR0aGlzLnNjYWxlID0gc2NhbGVUZW1wO1xuXG5cdFx0XHQvLyB6b29tIHRvIHRoZSBjdXJyZW50IG1vdXNlIGxvY2F0aW9uXG5cdFx0XHR0aGlzLm1vdmUoe1xuXHRcdFx0XHRkZWx0YVg6ICgoKGV2ZW50Lm9mZnNldFggLSB0aGlzLm9yaWdpblgpIC8gc2NhbGVPcmlnKSAqIChzY2FsZU9yaWcgLSBzY2FsZVRlbXApKSxcblx0XHRcdFx0ZGVsdGFZOiAoKChldmVudC5vZmZzZXRZIC0gdGhpcy5vcmlnaW5ZKSAvIHNjYWxlT3JpZykgKiAoc2NhbGVPcmlnIC0gc2NhbGVUZW1wKSksXG5cdFx0XHRcdHdpZHRoOiBldmVudC50YXJnZXQub2Zmc2V0V2lkdGgsXG5cdFx0XHRcdGhlaWdodDogZXZlbnQudGFyZ2V0Lm9mZnNldEhlaWdodCxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHJlbWFwIChjb25maWcpIHtcblx0XHRPYmplY3QuYXNzaWduKHRoaXMsIHBpY2soY29uZmlnLCBbJ2hlaWdodCcsICd3aWR0aCcsICduZWdhdGl2ZVRpbGVzJ10pKTtcblxuXHRcdHRoaXMuY2hlY2tTY2FsZShjb25maWcuY2FudmFzSGVpZ2h0LCBjb25maWcuY2FudmFzV2lkdGgpO1xuXG5cdFx0dGhpcy5zZXRPcmlnaW5YKGNvbmZpZy5jYW52YXNXaWR0aCwgY29uZmlnLmNlbnRlclgpO1xuXHRcdHRoaXMuc2V0T3JpZ2luWShjb25maWcuY2FudmFzSGVpZ2h0LCBjb25maWcuY2VudGVyWSk7XG5cdH1cbn1cbiIsImltcG9ydCBQb2ludCBmcm9tICcuL3BvaW50LmpzJztcblxuZnVuY3Rpb24gY29tcHV0ZVkoeCwgeikge1xuXHRyZXR1cm4gLXggLSB6O1xufVxuXG4vLyBjb252ZXJ0IHJlYWwgbnVtYmVycyB0byBpbnRlZ2Vyczpcbi8vICAgcm91bmQgb2ZmIGNvb3Jkc1xuLy8gICB0aHJvdyBvdXQgd2hpY2hldmVyIG9uZSBjaGFuZ2VkIHRoZSBtb3N0XG4vLyAgIHJlLWVzdGFibGlzaCBcInggKyB5ICsgeiA9IDBcIlxuZnVuY3Rpb24gcm91bmRPZmYoaGV4KSB7XG5cdGxldCByWCA9IE1hdGgucm91bmQoaGV4LngpO1xuXHRsZXQgclkgPSBNYXRoLnJvdW5kKGhleC55KTtcblx0bGV0IHJaID0gTWF0aC5yb3VuZChoZXgueik7XG5cblx0bGV0IHhEaWZmID0gTWF0aC5hYnMoclggLSBoZXgueCk7XG5cdGxldCB5RGlmZiA9IE1hdGguYWJzKHJZIC0gaGV4LnkpO1xuXHRsZXQgekRpZmYgPSBNYXRoLmFicyhyWiAtIGhleC56KTtcblxuXHRpZiAoKHhEaWZmID4geURpZmYpICYmICh4RGlmZiA+IHpEaWZmKSkge1xuXHRcdHJYID0gLXJZLXJaO1xuXHR9XG5cdGVsc2UgaWYgKHlEaWZmID4gekRpZmYpIHtcblx0XHRyWSA9IC1yWC1yWjtcblx0fVxuXHRlbHNlIHtcblx0XHRyWiA9IC1yWC1yWTtcblx0fVxuXG5cdGhleC54ID0gclggPT09IC0wID8gMCA6IHJYO1xuXHRoZXgueSA9IHJZID09PSAtMCA/IDAgOiByWTtcblx0aGV4LnogPSByWiA9PT0gLTAgPyAwIDogclo7XG5cblx0cmV0dXJuIGhleDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGV4IGV4dGVuZHMgUG9pbnQge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgeyAvLyBoZXggPSBIZXgocSwgcik7XG5cdFx0XHR0aGlzLnggPSBhcmd1bWVudHNbMF07XG5cdFx0XHR0aGlzLnogPSBhcmd1bWVudHNbMV07XG5cdFx0XHR0aGlzLnkgPSBjb21wdXRlWSh0aGlzLngsIHRoaXMueik7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHsgLy8gaGV4ID0gSGV4KHgsIHksIHopO1xuXHRcdFx0dGhpcy54ID0gYXJndW1lbnRzWzBdO1xuXHRcdFx0dGhpcy55ID0gYXJndW1lbnRzWzFdO1xuXHRcdFx0dGhpcy56ID0gYXJndW1lbnRzWzJdO1xuXHRcdH1cblxuXHRcdHJvdW5kT2ZmKHRoaXMpO1xuXHR9XG5cblx0Z2V0WCgpIHtyZXR1cm4gdGhpcy54O31cblx0Z2V0WSgpIHtyZXR1cm4gdGhpcy55O31cblx0Z2V0WigpIHtyZXR1cm4gdGhpcy56O31cblxuXHRzZXRYKG5ld1gpIHt0aGlzLnggPSBuZXdYOyByZXR1cm4gdGhpczt9XG5cdHNldFkobmV3WSkge3RoaXMueSA9IG5ld1k7IHJldHVybiB0aGlzO31cblx0c2V0WihuZXdaKSB7dGhpcy56ID0gbmV3WjsgcmV0dXJuIHRoaXM7fVxuXG5cdG1vdmVYKGJ5WCkge3RoaXMueCArPSBieVg7IHJldHVybiB0aGlzO31cblx0bW92ZVkoYnlZKSB7dGhpcy55ICs9IGJ5WTsgcmV0dXJuIHRoaXM7fVxuXHRtb3ZlWihieVopIHt0aGlzLnogKz0gYnlaOyByZXR1cm4gdGhpczt9XG5cblx0Z2V0USgpIHtyZXR1cm4gdGhpcy54O31cblx0Z2V0UigpIHtyZXR1cm4gdGhpcy56O31cblxuXHRzZXRRKG5ld1EpIHtcblx0XHR0aGlzLnggPSBuZXdRO1xuXHRcdHRoaXMueSA9IGNvbXB1dGVZKHRoaXMueCwgdGhpcy56KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRzZXRSKG5ld1IpIHtcblx0XHR0aGlzLnogPSBuZXdSO1xuXHRcdHRoaXMueSA9IGNvbXB1dGVZKHRoaXMueCwgdGhpcy56KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1vdmVRKGJ5USkge1xuXHRcdHRoaXMueCArPSBieVE7XG5cdFx0dGhpcy55ID0gY29tcHV0ZVkodGhpcy54LCB0aGlzLnopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdG1vdmVSKGJ5Uikge1xuXHRcdHRoaXMueiArPSBieVI7XG5cdFx0dGhpcy55ID0gY29tcHV0ZVkodGhpcy54LCB0aGlzLnopO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0UG9pbnQoKSB7IHJldHVybiB7eDogdGhpcy54LCB5OiB0aGlzLnksIHo6IHRoaXMuen07IH1cblxuXHRzZXRIZXgobmV3SGV4KSB7XG5cdFx0dGhpcy54ID0gbmV3SGV4Lng7XG5cdFx0dGhpcy55ID0gbmV3SGV4Lnk7IFxuXHRcdHRoaXMueiA9IG5ld0hleC56O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdG1vdmVIZXgoYnlIZXgpIHtcblx0XHR0aGlzLnggKz0gYnlIZXgueDtcblx0XHR0aGlzLnkgKz0gYnlIZXgueTtcblx0XHR0aGlzLnogKz0gYnlIZXguejtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldEF4aWFsKCkge3JldHVybiB7cTogdGhpcy54LCByOiB0aGlzLnp9O31cblx0c2V0QXhpYWwobmV3QXhpYWwpIHtcblx0XHR0aGlzLnggPSBuZXdBeGlhbC5xO1xuXHRcdHRoaXMueiA9IG5ld0F4aWFsLnI7XG5cdFx0dGhpcy55ID0gY29tcHV0ZVkodGhpcy54LCB0aGlzLnkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdG1vdmVBeGlhbChieUF4aWFsKSB7XG5cdFx0dGhpcy54ICs9IGJ5QXhpYWwucTtcblx0XHR0aGlzLnogKz0gYnlBeGlhbC5yO1xuXHRcdHRoaXMueSA9IGNvbXB1dGVZKHRoaXMueCwgdGhpcy56KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwiaW1wb3J0IFBvaW50IGZyb20gJy4vcG9pbnQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcXVhcmUgZXh0ZW5kcyBQb2ludCB7XG5cdGNvbnN0cnVjdG9yKHgsIHkpIHtcblx0XHRzdXBlcih4LCB5KTtcblx0fVxufVxuIiwiaW1wb3J0IENhcnRvZ3JhcGhlciBmcm9tICcuL2NhcnRvZ3JhcGhlci5qcyc7XG5cbmltcG9ydCB7cmFuZ2VJbmNsdXNpdmUsIHNxcnQzfSBmcm9tICcuL3V0aWxzLmpzJztcblxuaW1wb3J0IEhleCBmcm9tICcuL2hleC5qcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnLi9wb2ludC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhcnRvZ3JhcGhlclBvaW50eVhZWiBleHRlbmRzIENhcnRvZ3JhcGhlciB7XG5cdGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XG5cdFx0c3VwZXIoc2V0dGluZ3MpO1xuXG5cdFx0W1xuXHRcdFx0J3RpbGVIZWlnaHQnLFxuXHRcdFx0J3RpbGVXaWR0aCcsXG5cblx0XHRcdCdtYXhXaWR0aCcsXG5cdFx0XHQnbWluV2lkdGgnLFxuXG5cdFx0XHQnaG9yaXpvbnRhbE92ZXJoYW5nJyxcblx0XHRcdCd2ZXJ0aWNhbE92ZXJoYW5nJyxcblxuXHRcdFx0J2hvcml6b250YWxEaXN0YW5jZScsXG5cdFx0XHQndmVydGljYWxEaXN0YW5jZScsXG5cblx0XHRcdCdjYWxjdWxhdGVIb3Jpem9udGFsU2NhbGUnLFxuXHRcdFx0J2NhbGN1bGF0ZVZlcnRpY2FsU2NhbGUnLFxuXG5cdFx0XHQndGlsZVRvUGl4ZWwnLFxuXHRcdFx0J3BpeGVsVG9UaWxlJyxcblx0XHRcdCdib3VuZGluZ0JveCcsXG5cdFx0XS5tYXAobWV0aG9kID0+IHRoaXNbbWV0aG9kXSA9IHRoaXNbbWV0aG9kXS5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdHRpbGVIZWlnaHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4V2lkdGgoKTtcblx0fVxuXG5cdHRpbGVXaWR0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5taW5XaWR0aCgpO1xuXHR9XG5cblx0bWF4V2lkdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2NhbGUgKiAyO1xuXHR9XG5cblx0bWluV2lkdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2NhbGUgKiBzcXJ0Mztcblx0fVxuXG5cdGhvcml6b250YWxPdmVyaGFuZygpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHZlcnRpY2FsT3ZlcmhhbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4V2lkdGgoKSAqIDAuMjU7XG5cdH1cblxuXHRob3Jpem9udGFsRGlzdGFuY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWluV2lkdGgoKTtcblx0fVxuXG5cdHZlcnRpY2FsRGlzdGFuY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4V2lkdGgoKSAqICgzLzQpO1xuXHR9XG5cblx0Y2FsY3VsYXRlSG9yaXpvbnRhbFNjYWxlKHBpeGVscywgdGlsZXMpIHtcblx0XHRyZXR1cm4gcGl4ZWxzIC8gdGlsZXMgLyBzcXJ0Mztcblx0fVxuXG5cdGNhbGN1bGF0ZVZlcnRpY2FsU2NhbGUocGl4ZWxzLCB0aWxlcykge1xuXHRcdHJldHVybiBwaXhlbHMgLyAodGlsZXMgKiAwLjc1ICsgMC4yNSkgLyAyO1xuXHR9XG5cblx0dGlsZVRvUGl4ZWwoaGV4KSB7XG5cdFx0aGV4ID0gaGV4IGluc3RhbmNlb2YgSGV4ID8gaGV4IDogbmV3IEhleCguLi5hcmd1bWVudHMpO1xuXG5cdFx0Y29uc3QgcGl4ZWxYID0gdGhpcy5zY2FsZSAqIHNxcnQzICogKGhleC5nZXRRKCkgKyAoaGV4LmdldFIoKSAvIDIpKTtcblx0XHRjb25zdCBwaXhlbFkgPSB0aGlzLnNjYWxlICogMy8yICogaGV4LmdldFIoKTtcblxuXHRcdHJldHVybiBuZXcgUG9pbnQocGl4ZWxYICsgdGhpcy5vcmlnaW5YLCBwaXhlbFkgKyB0aGlzLm9yaWdpblkpO1xuXHR9XG5cblx0cGl4ZWxUb1RpbGUocG9pbnQpIHtcblx0XHRwb2ludCA9IHBvaW50IGluc3RhbmNlb2YgUG9pbnQgPyBwb2ludCA6IG5ldyBQb2ludCguLi5hcmd1bWVudHMpO1xuXG5cdFx0Y29uc3QgcGl4ZWxYID0gcG9pbnQuZ2V0WCgpIC0gdGhpcy5vcmlnaW5YO1xuXHRcdGNvbnN0IHBpeGVsWSA9IHBvaW50LmdldFkoKSAtIHRoaXMub3JpZ2luWTtcblxuXHRcdGNvbnN0IHEgPSAoKHBpeGVsWCAqIChzcXJ0MyAvIDMpKSAtIChwaXhlbFkgLyAzKSkgLyB0aGlzLnNjYWxlO1xuXHRcdGNvbnN0IHIgPSAocGl4ZWxZICogKDIgLyAzKSkgLyB0aGlzLnNjYWxlO1xuXG5cdFx0cmV0dXJuIG5ldyBIZXgocSwgcik7XG5cdH1cblxuXHRib3VuZGluZ0JveCh1cHBlckxlZnRQb2ludCwgdXBwZXJSaWdodFBvaW50LCBsb3dlckxlZnRQb2ludCwgbG93ZXJSaWdodFBvaW50KSB7XG5cdFx0Y29uc3QgdXBwZXJMZWZ0VGlsZSA9IHRoaXMucGl4ZWxUb1RpbGUodXBwZXJMZWZ0UG9pbnQpO1xuXHRcdGNvbnN0IGxvd2VyTGVmdFRpbGUgPSB0aGlzLnBpeGVsVG9UaWxlKGxvd2VyTGVmdFBvaW50KTtcblx0XHRjb25zdCBsb3dlclJpZ2h0VGlsZSA9IHRoaXMucGl4ZWxUb1RpbGUobG93ZXJSaWdodFBvaW50KTtcblx0XHRjb25zdCB1cHBlclJpZ2h0VGlsZSA9IHRoaXMucGl4ZWxUb1RpbGUodXBwZXJSaWdodFBvaW50KTtcblxuXHRcdGNvbnN0IHJvd3MgPSByYW5nZUluY2x1c2l2ZSh1cHBlckxlZnRUaWxlLmdldFIoKSAtMSAsIGxvd2VyTGVmdFRpbGUuZ2V0UigpICsgMSk7XG5cblx0XHRjb25zdCB3aWR0aCA9IHVwcGVyUmlnaHRUaWxlLmdldFEoKSAtIHVwcGVyTGVmdFRpbGUuZ2V0USgpO1xuXHRcdHJldHVybiByb3dzLm1hcCgociwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IGxlZnQgPSB1cHBlckxlZnRUaWxlLmdldFEoKSAtIE1hdGguZmxvb3IoaW5kZXggLyAyKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuXHRcdFx0Y29uc3QgY29sdW1ucyA9IHJhbmdlSW5jbHVzaXZlKGxlZnQsIHJpZ2h0ICsgMSk7XG5cblx0XHRcdHJldHVybiBjb2x1bW5zLm1hcChxID0+IG5ldyBIZXgocSwgcikpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCJpbXBvcnQgQ2FydG9ncmFwaGVyIGZyb20gJy4vY2FydG9ncmFwaGVyLmpzJztcblxuaW1wb3J0IHtyYW5nZUluY2x1c2l2ZSwgc3FydDN9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5pbXBvcnQgSGV4IGZyb20gJy4vaGV4LmpzJztcbmltcG9ydCBQb2ludCBmcm9tICcuL3BvaW50LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FydG9ncmFwaGVyRmxhdFhZWiBleHRlbmRzIENhcnRvZ3JhcGhlciB7XG5cdGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XG5cdFx0c3VwZXIoc2V0dGluZ3MpO1xuXG5cdFx0W1xuXHRcdFx0J3RpbGVIZWlnaHQnLFxuXHRcdFx0J3RpbGVXaWR0aCcsXG5cblx0XHRcdCdtYXhXaWR0aCcsXG5cdFx0XHQnbWluV2lkdGgnLFxuXG5cdFx0XHQnaG9yaXpvbnRhbE92ZXJoYW5nJyxcblx0XHRcdCd2ZXJ0aWNhbE92ZXJoYW5nJyxcblxuXHRcdFx0J2hvcml6b250YWxEaXN0YW5jZScsXG5cdFx0XHQndmVydGljYWxEaXN0YW5jZScsXG5cblx0XHRcdCdjYWxjdWxhdGVIb3Jpem9udGFsU2NhbGUnLFxuXHRcdFx0J2NhbGN1bGF0ZVZlcnRpY2FsU2NhbGUnLFxuXG5cdFx0XHQndGlsZVRvUGl4ZWwnLFxuXHRcdFx0J3BpeGVsVG9UaWxlJyxcblx0XHRcdCdib3VuZGluZ0JveCcsXG5cdFx0XS5tYXAobWV0aG9kID0+IHRoaXNbbWV0aG9kXSA9IHRoaXNbbWV0aG9kXS5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdHRpbGVIZWlnaHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWluV2lkdGgoKTtcblx0fVxuXG5cdHRpbGVXaWR0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhXaWR0aCgpO1xuXHR9XG5cblx0bWF4V2lkdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2NhbGUgKiAyO1xuXHR9XG5cblx0bWluV2lkdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2NhbGUgKiBzcXJ0Mztcblx0fVxuXG5cdGhvcml6b250YWxPdmVyaGFuZygpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhXaWR0aCgpICogMC4yNTtcblx0fVxuXG5cdHZlcnRpY2FsT3ZlcmhhbmcoKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRob3Jpem9udGFsRGlzdGFuY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4V2lkdGgoKSAqICgzLzQpO1xuXHR9XG5cblx0dmVydGljYWxEaXN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5taW5XaWR0aCgpO1xuXHR9XG5cblx0Y2FsY3VsYXRlSG9yaXpvbnRhbFNjYWxlKHBpeGVscywgdGlsZXMpIHtcblx0XHRyZXR1cm4gcGl4ZWxzIC8gKHRpbGVzICogMC43NSArIDAuMjUpIC8gMjtcblx0fVxuXG5cdGNhbGN1bGF0ZVZlcnRpY2FsU2NhbGUocGl4ZWxzLCB0aWxlcykge1xuXHRcdHJldHVybiBwaXhlbHMgLyB0aWxlcyAvIHNxcnQzO1xuXHR9XG5cblx0dGlsZVRvUGl4ZWwoaGV4KSB7XG5cdFx0aGV4ID0gaGV4IGluc3RhbmNlb2YgSGV4ID8gaGV4IDogbmV3IEhleCguLi5hcmd1bWVudHMpO1xuXG5cdFx0Y29uc3QgcGl4ZWxYID0gdGhpcy5zY2FsZSAqIDMvMiAqIGhleC5nZXRRKCk7XG5cdFx0Y29uc3QgcGl4ZWxZID0gdGhpcy5zY2FsZSAqIHNxcnQzICogKGhleC5nZXRSKCkgKyAoaGV4LmdldFEoKSAvIDIpKTtcblxuXHRcdHJldHVybiBuZXcgUG9pbnQocGl4ZWxYICsgdGhpcy5vcmlnaW5YLCBwaXhlbFkgKyB0aGlzLm9yaWdpblkpO1xuXHR9XG5cblx0cGl4ZWxUb1RpbGUocG9pbnQpIHtcblx0XHRwb2ludCA9IHBvaW50IGluc3RhbmNlb2YgUG9pbnQgPyBwb2ludCA6IG5ldyBQb2ludCguLi5hcmd1bWVudHMpO1xuXG5cdFx0Y29uc3QgcGl4ZWxYID0gcG9pbnQuZ2V0WCgpIC0gdGhpcy5vcmlnaW5YO1xuXHRcdGNvbnN0IHBpeGVsWSA9IHBvaW50LmdldFkoKSAtIHRoaXMub3JpZ2luWTtcblxuXHRcdGNvbnN0IHEgPSAocGl4ZWxYICogKDIgLyAzKSkgLyB0aGlzLnNjYWxlO1xuXHRcdGNvbnN0IHIgPSAoKHBpeGVsWSAqIChzcXJ0MyAvIDMpKSAtIChwaXhlbFggLyAzKSkgLyB0aGlzLnNjYWxlO1xuXG5cdFx0cmV0dXJuIG5ldyBIZXgocSwgcik7XG5cdH1cblxuXHRib3VuZGluZ0JveCh1cHBlckxlZnRQb2ludCwgdXBwZXJSaWdodFBvaW50LCBsb3dlckxlZnRQb2ludCwgbG93ZXJSaWdodFBvaW50KSB7XG5cdFx0Y29uc3QgdXBwZXJMZWZ0VGlsZSA9IHRoaXMucGl4ZWxUb1RpbGUodXBwZXJMZWZ0UG9pbnQpO1xuXHRcdGNvbnN0IGxvd2VyTGVmdFRpbGUgPSB0aGlzLnBpeGVsVG9UaWxlKGxvd2VyTGVmdFBvaW50KTtcblx0XHRjb25zdCBsb3dlclJpZ2h0VGlsZSA9IHRoaXMucGl4ZWxUb1RpbGUobG93ZXJSaWdodFBvaW50KTtcblx0XHRjb25zdCB1cHBlclJpZ2h0VGlsZSA9IHRoaXMucGl4ZWxUb1RpbGUodXBwZXJSaWdodFBvaW50KTtcblxuXHRcdGNvbnN0IGNvbHVtbnMgPSByYW5nZUluY2x1c2l2ZSh1cHBlckxlZnRUaWxlLmdldFEoKSAtIDEsIHVwcGVyUmlnaHRUaWxlLmdldFEoKSArIDEpO1xuXG5cdFx0Y29uc3QgaGVpZ2h0ID0gbG93ZXJSaWdodFRpbGUuZ2V0UigpIC0gdXBwZXJSaWdodFRpbGUuZ2V0UigpO1xuXHRcdHJldHVybiBjb2x1bW5zLm1hcCgocSwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IHRvcCA9IHVwcGVyTGVmdFRpbGUuZ2V0UigpIC0gTWF0aC5mbG9vcihpbmRleCAvIDIpO1xuXHRcdFx0Y29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuXHRcdFx0Y29uc3Qgcm93cyA9IHJhbmdlSW5jbHVzaXZlKHRvcCwgYm90dG9tICsgMSk7XG5cblx0XHRcdHJldHVybiByb3dzLm1hcChyID0+IG5ldyBIZXgocSwgcikpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCJpbXBvcnQgQ2FydG9ncmFwaGVyIGZyb20gJy4vY2FydG9ncmFwaGVyLmpzJztcblxuaW1wb3J0IHtyYW5nZUluY2x1c2l2ZSwgaW52U3FydDIsIHNxcnQyfSBmcm9tICcuL3V0aWxzLmpzJztcblxuaW1wb3J0IFNxdWFyZSBmcm9tICcuL3NxdWFyZS5qcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnLi9wb2ludC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhcnRvZ3JhcGhlclBvaW50eVhZIGV4dGVuZHMgQ2FydG9ncmFwaGVyIHtcblx0Y29uc3RydWN0b3Ioc2V0dGluZ3MpIHtcblx0XHRzdXBlcihzZXR0aW5ncyk7XG5cblx0XHRbXG5cdFx0XHQndGlsZUhlaWdodCcsXG5cdFx0XHQndGlsZVdpZHRoJyxcblxuXHRcdFx0J21heFdpZHRoJyxcblx0XHRcdCdtaW5XaWR0aCcsXG5cblx0XHRcdCdob3Jpem9udGFsT3ZlcmhhbmcnLFxuXHRcdFx0J3ZlcnRpY2FsT3ZlcmhhbmcnLFxuXG5cdFx0XHQnaG9yaXpvbnRhbERpc3RhbmNlJyxcblx0XHRcdCd2ZXJ0aWNhbERpc3RhbmNlJyxcblxuXHRcdFx0J2NhbGN1bGF0ZUhvcml6b250YWxTY2FsZScsXG5cdFx0XHQnY2FsY3VsYXRlVmVydGljYWxTY2FsZScsXG5cblx0XHRcdCd0aWxlVG9QaXhlbCcsXG5cdFx0XHQncGl4ZWxUb1RpbGUnLFxuXHRcdFx0J2JvdW5kaW5nQm94Jyxcblx0XHRdLm1hcChtZXRob2QgPT4gdGhpc1ttZXRob2RdID0gdGhpc1ttZXRob2RdLmJpbmQodGhpcykpO1xuXHR9XG5cblx0dGlsZUhlaWdodCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhXaWR0aCgpO1xuXHR9XG5cblx0dGlsZVdpZHRoKCkge1xuXHRcdHJldHVybiB0aGlzLm1heFdpZHRoKCk7XG5cdH1cblxuXHRtYXhXaWR0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5zY2FsZSAqIDI7XG5cdH1cblxuXHRtaW5XaWR0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhXaWR0aCgpICogaW52U3FydDI7XG5cdH1cblxuXHRob3Jpem9udGFsT3ZlcmhhbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4V2lkdGgoKSAqIDAuNTtcblx0fVxuXG5cdHZlcnRpY2FsT3ZlcmhhbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4V2lkdGgoKSAqIDAuNTtcblx0fVxuXG5cdGhvcml6b250YWxEaXN0YW5jZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhXaWR0aCgpIC8gMjtcblx0fVxuXG5cdHZlcnRpY2FsRGlzdGFuY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4V2lkdGgoKSAvIDI7XG5cdH1cblxuXHRjYWxjdWxhdGVIb3Jpem9udGFsU2NhbGUocGl4ZWxzLCB0aWxlcykge1xuXHRcdHJldHVybiBwaXhlbHMgLyAodGlsZXMgLyAyKSAvIDI7XG5cdH1cblxuXHRjYWxjdWxhdGVWZXJ0aWNhbFNjYWxlKHBpeGVscywgdGlsZXMpIHtcblx0XHRyZXR1cm4gcGl4ZWxzIC8gKHRpbGVzIC8gMikgLyAyO1xuXHR9XG5cblx0dGlsZVRvUGl4ZWwoc3F1YXJlKSB7XG5cdFx0c3F1YXJlID0gc3F1YXJlIGluc3RhbmNlb2YgU3F1YXJlID8gc3F1YXJlIDogbmV3IFNxdWFyZSguLi5hcmd1bWVudHMpO1xuXG5cdFx0Y29uc3QgeCA9IHNxdWFyZS5nZXRYKCk7XG5cdFx0Y29uc3QgeSA9IHNxdWFyZS5nZXRZKCk7XG5cblx0XHQvLyAoYWJvdmUvYmVsb3cgYXhpcykgKiAoZGlzdGFuY2UgZnJvbSBheGlzKSAvIChzaXplKVxuXHRcdGxldCBwaXhlbFggPSAgKHggPCB5ID8gLTEgOiAxKSAgKiAgKE1hdGguYWJzKHkgLSB4KSAvIHNxcnQyKSAgKiAgdGhpcy5taW5XaWR0aCgpO1xuXHRcdGxldCBwaXhlbFkgPSAoLXggPCB5ID8gMSA6IC0xKSAgKiAgKE1hdGguYWJzKHggKyB5KSAvIHNxcnQyKSAgKiAgdGhpcy5taW5XaWR0aCgpO1xuXG5cdFx0cmV0dXJuIG5ldyBQb2ludChwaXhlbFggKyB0aGlzLm9yaWdpblgsIHRoaXMub3JpZ2luWSAtIHBpeGVsWSk7XG5cdH1cblxuXHRwaXhlbFRvVGlsZShwb2ludCkge1xuXHRcdHBvaW50ID0gcG9pbnQgaW5zdGFuY2VvZiBQb2ludCA/IHBvaW50IDogbmV3IFBvaW50KC4uLmFyZ3VtZW50cyk7XG5cblx0XHRjb25zdCBwaXhlbFggPSBwb2ludC5nZXRYKCkgLSB0aGlzLm9yaWdpblg7XG5cdFx0Y29uc3QgcGl4ZWxZID0gdGhpcy5vcmlnaW5ZIC0gcG9pbnQuZ2V0WSgpO1xuXG5cdFx0Ly8gKGFib3ZlL2JlbG93IGF4aXMpICogKGRpc3RhbmNlIGZyb20gYXhpcykgLyAoc2l6ZSlcblx0XHRjb25zdCB4ID0gKC1waXhlbFggPCBwaXhlbFkgPyAxIDogLTEpICAqICAoTWF0aC5hYnMocGl4ZWxYICsgcGl4ZWxZKSAvIHNxcnQyKSAgLyAgdGhpcy5taW5XaWR0aCgpO1xuXHRcdGNvbnN0IHkgPSAgKHBpeGVsWCA8IHBpeGVsWSA/IDEgOiAtMSkgICogIChNYXRoLmFicyhwaXhlbFkgLSBwaXhlbFgpIC8gc3FydDIpICAvICB0aGlzLm1pbldpZHRoKCk7XG5cblx0XHRyZXR1cm4gbmV3IFNxdWFyZSh4LCB5KTtcblx0fVxuXG5cdGJvdW5kaW5nQm94KHVwcGVyTGVmdFBvaW50LCB1cHBlclJpZ2h0UG9pbnQsIGxvd2VyTGVmdFBvaW50LCBsb3dlclJpZ2h0UG9pbnQpIHtcblx0XHRjb25zdCB1cHBlckxlZnRUaWxlID0gdGhpcy5waXhlbFRvVGlsZSh1cHBlckxlZnRQb2ludCk7XG5cdFx0Y29uc3QgbG93ZXJSaWdodFRpbGUgPSB0aGlzLnBpeGVsVG9UaWxlKGxvd2VyUmlnaHRQb2ludCk7XG5cdFx0Y29uc3QgdXBwZXJSaWdodFRpbGUgPSB0aGlzLnBpeGVsVG9UaWxlKHVwcGVyUmlnaHRQb2ludCk7XG5cdFx0Y29uc3QgbG93ZXJMZWZ0VGlsZSA9IHRoaXMucGl4ZWxUb1RpbGUobG93ZXJMZWZ0UG9pbnQpO1xuXG5cdFx0Y29uc3QgY29sdW1ucyA9IHJhbmdlSW5jbHVzaXZlKGxvd2VyTGVmdFRpbGUuZ2V0WCgpLCB1cHBlclJpZ2h0VGlsZS5nZXRYKCkpO1xuXG5cdFx0Y29uc3QgdXBwZXJMZWZ0SW50ZXJjZXB0ID0gdXBwZXJMZWZ0VGlsZS5nZXRZKCkgLSB1cHBlckxlZnRUaWxlLmdldFgoKTtcblx0XHRjb25zdCB1cHBlclJpZ2h0SW50ZXJjZXB0ID0gdXBwZXJMZWZ0VGlsZS5nZXRZKCkgKyB1cHBlckxlZnRUaWxlLmdldFgoKTtcblxuXHRcdGNvbnN0IGxvd2VyTGVmdEludGVyY2VwdCA9IGxvd2VyUmlnaHRUaWxlLmdldFkoKSAtIGxvd2VyUmlnaHRUaWxlLmdldFgoKTtcblx0XHRjb25zdCBsb3dlclJpZ2h0SW50ZXJjZXB0ID0gbG93ZXJSaWdodFRpbGUuZ2V0WSgpICsgbG93ZXJSaWdodFRpbGUuZ2V0WCgpO1xuXG5cdFx0Y29uc3QgYWJvdXRIYWxmID0gTWF0aC5mbG9vcihjb2x1bW5zLmxlbmd0aCAvIDIpO1xuXHRcdGNvbnN0IG1pZHdheSA9IGNvbHVtbnMubGVuZ3RoICUgMiA/IGNvbHVtbnNbYWJvdXRIYWxmXSA6XG5cdFx0XHQoY29sdW1uc1thYm91dEhhbGYgLSAxXSArIGNvbHVtbnNbYWJvdXRIYWxmXSkgLyAyO1xuXG5cdFx0cmV0dXJuIGNvbHVtbnMubWFwKHggPT4ge1xuXHRcdFx0bGV0IHRvcCA9ICAgIHggPCBtaWR3YXkgPyAgdXBwZXJMZWZ0SW50ZXJjZXB0ICsgeCA6IHVwcGVyUmlnaHRJbnRlcmNlcHQgLSB4O1xuXHRcdFx0bGV0IGJvdHRvbSA9IHggPCBtaWR3YXkgPyBsb3dlclJpZ2h0SW50ZXJjZXB0IC0geCA6ICBsb3dlckxlZnRJbnRlcmNlcHQgKyB4O1xuXG5cdFx0XHRib3R0b20gPSBNYXRoLm1pbihib3R0b20sIHRvcCk7XG5cdFx0XHR0b3AgPSAgICBNYXRoLm1heChib3R0b20sIHRvcCk7XG5cblx0XHRcdC8vIHB1c2ggb3V0IGJ5IDEgb24gZWl0aGVyIGVuZCB0byBhY2NvdW50IGZvciBpbnRlcmxvY2tpbmcgdGlsZXNcblx0XHRcdGNvbnN0IHJvd3MgPSByYW5nZUluY2x1c2l2ZShib3R0b20gLSAxLCB0b3AgKyAxKTtcblxuXHRcdFx0cmV0dXJuIHJvd3MubWFwKHkgPT4gbmV3IFNxdWFyZSh4LCB5KSk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsImltcG9ydCBDYXJ0b2dyYXBoZXIgZnJvbSAnLi9jYXJ0b2dyYXBoZXIuanMnO1xuXG5pbXBvcnQge3JhbmdlSW5jbHVzaXZlLCBpbnZTcXJ0Mn0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmltcG9ydCBTcXVhcmUgZnJvbSAnLi9zcXVhcmUuanMnO1xuaW1wb3J0IFBvaW50IGZyb20gJy4vcG9pbnQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJ0b2dyYXBoZXJGbGF0WFkgZXh0ZW5kcyBDYXJ0b2dyYXBoZXIge1xuXHRjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xuXHRcdHN1cGVyKHNldHRpbmdzKTtcblxuXHRcdFtcblx0XHRcdCd0aWxlSGVpZ2h0Jyxcblx0XHRcdCd0aWxlV2lkdGgnLFxuXG5cdFx0XHQnbWF4V2lkdGgnLFxuXHRcdFx0J21pbldpZHRoJyxcblxuXHRcdFx0J2hvcml6b250YWxPdmVyaGFuZycsXG5cdFx0XHQndmVydGljYWxPdmVyaGFuZycsXG5cblx0XHRcdCdob3Jpem9udGFsRGlzdGFuY2UnLFxuXHRcdFx0J3ZlcnRpY2FsRGlzdGFuY2UnLFxuXG5cdFx0XHQnY2FsY3VsYXRlSG9yaXpvbnRhbFNjYWxlJyxcblx0XHRcdCdjYWxjdWxhdGVWZXJ0aWNhbFNjYWxlJyxcblxuXHRcdFx0J3RpbGVUb1BpeGVsJyxcblx0XHRcdCdwaXhlbFRvVGlsZScsXG5cdFx0XHQnYm91bmRpbmdCb3gnLFxuXHRcdF0ubWFwKG1ldGhvZCA9PiB0aGlzW21ldGhvZF0gPSB0aGlzW21ldGhvZF0uYmluZCh0aGlzKSk7XG5cdH1cblxuXHR0aWxlSGVpZ2h0KCkge1xuXHRcdHJldHVybiB0aGlzLm1pbldpZHRoKCk7XG5cdH1cblxuXHR0aWxlV2lkdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWluV2lkdGgoKTtcblx0fVxuXG5cdG1heFdpZHRoKCkge1xuXHRcdHJldHVybiB0aGlzLnNjYWxlICogMjtcblx0fVxuXG5cdG1pbldpZHRoKCkge1xuXHRcdHJldHVybiB0aGlzLm1heFdpZHRoKCkgKiBpbnZTcXJ0Mjtcblx0fVxuXG5cdGhvcml6b250YWxPdmVyaGFuZygpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdHZlcnRpY2FsT3ZlcmhhbmcoKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRob3Jpem9udGFsRGlzdGFuY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWluV2lkdGgoKTtcblx0fVxuXG5cdHZlcnRpY2FsRGlzdGFuY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWluV2lkdGgoKTtcblx0fVxuXG5cdGNhbGN1bGF0ZUhvcml6b250YWxTY2FsZShwaXhlbHMsIHRpbGVzKSB7XG5cdFx0cmV0dXJuIHBpeGVscyAvIHRpbGVzIC8gaW52U3FydDIgLyAyO1xuXHR9XG5cblx0Y2FsY3VsYXRlVmVydGljYWxTY2FsZShwaXhlbHMsIHRpbGVzKSB7XG5cdFx0cmV0dXJuIHBpeGVscyAvIHRpbGVzIC8gaW52U3FydDIgLyAyO1xuXHR9XG5cblx0dGlsZVRvUGl4ZWwoc3F1YXJlKSB7XG5cdFx0c3F1YXJlID0gc3F1YXJlIGluc3RhbmNlb2YgU3F1YXJlID8gc3F1YXJlIDogbmV3IFNxdWFyZSguLi5hcmd1bWVudHMpO1xuXG5cdFx0Y29uc3QgeCA9IHNxdWFyZS5nZXRYKCkgKiB0aGlzLm1pbldpZHRoKCk7XG5cdFx0Y29uc3QgeSA9IHNxdWFyZS5nZXRZKCkgKiB0aGlzLm1pbldpZHRoKCk7XG5cblx0XHRyZXR1cm4gbmV3IFBvaW50KHggKyB0aGlzLm9yaWdpblgsIHRoaXMub3JpZ2luWSAtIHkpO1xuXHR9XG5cblx0cGl4ZWxUb1RpbGUocG9pbnQpIHtcblx0XHRwb2ludCA9IHBvaW50IGluc3RhbmNlb2YgUG9pbnQgPyBwb2ludCA6IG5ldyBQb2ludCguLi5hcmd1bWVudHMpO1xuXG5cdFx0Y29uc3QgcGl4ZWxYID0gcG9pbnQuZ2V0WCgpIC0gdGhpcy5vcmlnaW5YO1xuXHRcdGNvbnN0IHBpeGVsWSA9IHRoaXMub3JpZ2luWSAtIHBvaW50LmdldFkoKTtcblxuXHRcdGNvbnN0IHggPSBwaXhlbFggLyB0aGlzLm1pbldpZHRoKCk7XG5cdFx0Y29uc3QgeSA9IHBpeGVsWSAvIHRoaXMubWluV2lkdGgoKTtcblxuXHRcdHJldHVybiBuZXcgU3F1YXJlKHgsIHkpO1xuXHR9XG5cblx0Ym91bmRpbmdCb3godXBwZXJMZWZ0UG9pbnQsIHVwcGVyUmlnaHRQb2ludCwgbG93ZXJMZWZ0UG9pbnQsIGxvd2VyUmlnaHRQb2ludCkge1xuXHRcdGNvbnN0IHVwcGVyTGVmdFRpbGUgPSB0aGlzLnBpeGVsVG9UaWxlKHVwcGVyTGVmdFBvaW50KTtcblx0XHRjb25zdCBsb3dlclJpZ2h0VGlsZSA9IHRoaXMucGl4ZWxUb1RpbGUobG93ZXJSaWdodFBvaW50KTtcblx0XHRjb25zdCB1cHBlclJpZ2h0VGlsZSA9IHRoaXMucGl4ZWxUb1RpbGUodXBwZXJSaWdodFBvaW50KTtcblxuXHRcdGNvbnN0IGNvbHVtbnMgPSByYW5nZUluY2x1c2l2ZSh1cHBlckxlZnRUaWxlLmdldFgoKSwgdXBwZXJSaWdodFRpbGUuZ2V0WCgpKTtcblx0XHRjb25zdCByb3dzID0gcmFuZ2VJbmNsdXNpdmUobG93ZXJSaWdodFRpbGUuZ2V0WSgpLCB1cHBlckxlZnRUaWxlLmdldFkoKSk7XG5cblx0XHRyZXR1cm4gY29sdW1ucy5tYXAoeCA9PiByb3dzLm1hcCh5ID0+IG5ldyBTcXVhcmUoeCwgeSkpKTtcblx0fVxufVxuIiwiaW1wb3J0IHtyYW5kb219IGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IHtcblx0SEVYLCBDSVJDTEUsIFNRVUFSRSxcblx0RkxBVCwgUE9JTlRZLFxuXHRGSUxMLCBPVVRMSU5FLFxufSBmcm9tICcuL2NvbnN0cy5qcyc7XG5cbmNvbnN0IERFRkFVTFRTID0ge1xuXHR4OiAwLFxuXHR5OiAwLFxuXG5cdHNjYWxlOiAxMCxcblx0b3JpZW50YXRpb246IEZMQVQsXG5cdHRpbGVTdHlsZTogSEVYLFxuXHRkcmF3U3R5bGU6IEZJTEwsXG5cdHdpZHRoOiAxLFxuXG5cdGNvbG9yOiB7XG5cdFx0cmVkOiAwLFxuXHRcdGdyZWVuOiAwLFxuXHRcdGJsdWU6IDAsXG5cdFx0YWxwaGE6IDAuNSxcblx0fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENlbGwge1xuXHRjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xuXHRcdE9iamVjdC5hc3NpZ24odGhpcywgREVGQVVMVFMsIHNldHRpbmdzKTtcblx0fVxufVxuXG4iLCJpbXBvcnQge0ZMQVQsIFBPSU5UWX0gZnJvbSAnLi9jb25zdHMuanMnO1xuaW1wb3J0IHtnZXRDb2xvciwgcmFuZ2UsIHRvRml4ZWQsIHF1aWNrQ2FudmFzfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhd0hleGFnb24ge1xuXHRjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncyk7XG5cblx0XHR0aGlzLmZsYXRUb3BDb3JuZXJYID0gW107XG5cdFx0dGhpcy5mbGF0VG9wQ29ybmVyWSA9IFtdO1xuXHRcdHRoaXMucG9pbnR5VG9wQ29ybmVyWCA9IFtdO1xuXHRcdHRoaXMucG9pbnR5VG9wQ29ybmVyWSA9IFtdO1xuXG5cdFx0Y29uc3QgaGV4U2lkZXMgPSA2O1xuXHRcdGNvbnN0IGhleFNsaWNlcyA9IDI0O1xuXG5cdFx0cmFuZ2UoaGV4U2xpY2VzKS5mb3JFYWNoKGhleFNsaWNlID0+IHtcblx0XHRcdGNvbnN0IHggPSB0b0ZpeGVkKE1hdGguY29zKCgoaGV4U2xpY2UgLyBoZXhTbGljZXMpICogaGV4U2lkZXMpICogKDIgKiBNYXRoLlBJKSAvIGhleFNpZGVzKSk7XG5cdFx0XHRjb25zdCB5ID0gdG9GaXhlZChNYXRoLnNpbigoKGhleFNsaWNlIC8gaGV4U2xpY2VzKSAqIGhleFNpZGVzKSAqICgyICogTWF0aC5QSSkgLyBoZXhTaWRlcykpO1xuXG5cdFx0XHRpZiAoKGhleFNsaWNlICUgNCkgPT09IDApIHtcblx0XHRcdFx0Y29uc3QgY3VyID0gaGV4U2xpY2UgLyA0O1xuXHRcdFx0XHR0aGlzLmZsYXRUb3BDb3JuZXJYW2N1cl0gPSB4O1xuXHRcdFx0XHR0aGlzLmZsYXRUb3BDb3JuZXJZW2N1cl0gPSB5O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoKChoZXhTbGljZS0yKSAlIDQpID09PSAwKSB7XG5cdFx0XHRcdGNvbnN0IGN1ciA9IChoZXhTbGljZS0yKSAvIDQ7XG5cdFx0XHRcdHRoaXMucG9pbnR5VG9wQ29ybmVyWFtjdXJdID0geDtcblx0XHRcdFx0dGhpcy5wb2ludHlUb3BDb3JuZXJZW2N1cl0gPSB5O1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0b3V0bGluZShjb250ZXh0LCBzY2FsZSwgeCwgeSwgY2VsbCkge1xuXHRcdHNjYWxlID0gc2NhbGUgKiBjZWxsLnNjYWxlO1xuXHRcdGxldCBoZXhDb3JuZXJYID0gY2VsbC5vcmllbnRhdGlvbiA9PT0gUE9JTlRZID8gdGhpcy5wb2ludHlUb3BDb3JuZXJYIDogdGhpcy5mbGF0VG9wQ29ybmVyWDtcblx0XHRsZXQgaGV4Q29ybmVyWSA9IGNlbGwub3JpZW50YXRpb24gPT09IFBPSU5UWSA/IHRoaXMucG9pbnR5VG9wQ29ybmVyWSA6IHRoaXMuZmxhdFRvcENvcm5lclk7XG5cblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdGNvbnRleHQubW92ZVRvKHggKyBzY2FsZSAqIGhleENvcm5lclhbMF0sIHkgKyBzY2FsZSAqIGhleENvcm5lcllbMF0pO1xuXHRcdGNvbnRleHQubGluZVRvKHggKyBzY2FsZSAqIGhleENvcm5lclhbMV0sIHkgKyBzY2FsZSAqIGhleENvcm5lcllbMV0pO1xuXHRcdGNvbnRleHQubGluZVRvKHggKyBzY2FsZSAqIGhleENvcm5lclhbMl0sIHkgKyBzY2FsZSAqIGhleENvcm5lcllbMl0pO1xuXHRcdGNvbnRleHQubGluZVRvKHggKyBzY2FsZSAqIGhleENvcm5lclhbM10sIHkgKyBzY2FsZSAqIGhleENvcm5lcllbM10pO1xuXHRcdGNvbnRleHQubGluZVRvKHggKyBzY2FsZSAqIGhleENvcm5lclhbNF0sIHkgKyBzY2FsZSAqIGhleENvcm5lcllbNF0pO1xuXHRcdGNvbnRleHQubGluZVRvKHggKyBzY2FsZSAqIGhleENvcm5lclhbNV0sIHkgKyBzY2FsZSAqIGhleENvcm5lcllbNV0pO1xuXHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cblx0XHRjb250ZXh0LmxpbmVXaWR0aCA9IGNlbGwud2lkdGg7XG5cdFx0Y29udGV4dC5zdHJva2VTdHlsZSA9IGdldENvbG9yKGNlbGwuY29sb3IpO1xuXHRcdGNvbnRleHQuc3Ryb2tlKCk7XG5cdH1cblxuLy9cdGZpbGwoY29udGV4dCwgc2NhbGUsIHgsIHksIGNlbGwpIHtcbi8vXHRcdGlmIChjZWxsLmNhY2hlU2NhbGUgIT09IHNjYWxlKSB7XG4vL1x0XHRcdGNlbGwuY2FjaGVTY2FsZSA9IHNjYWxlO1xuLy9cdFx0XHRzY2FsZSA9IHNjYWxlICogY2VsbC5zY2FsZTtcbi8vXG4vL1x0XHRcdGNlbGwuY2FjaGVIYWxmV2lkdGggPSBzY2FsZTtcbi8vXHRcdFx0Y2VsbC5jYWNoZUhhbGZIZWlnaHQgPSBzY2FsZTtcbi8vXG4vL1x0XHRcdGNlbGwuY2FjaGVIZXggPSBxdWlja0NhbnZhcygoY29udGV4dCwgaGVpZ2h0LCB3aWR0aCkgPT4ge1xuLy9cdFx0XHRcdGNvbnN0IGhleENvcm5lclggPSBjZWxsLm9yaWVudGF0aW9uID09PSBQT0lOVFkgPyB0aGlzLnBvaW50eVRvcENvcm5lclggOiB0aGlzLmZsYXRUb3BDb3JuZXJYO1xuLy9cdFx0XHRcdGNvbnN0IGhleENvcm5lclkgPSBjZWxsLm9yaWVudGF0aW9uID09PSBQT0lOVFkgPyB0aGlzLnBvaW50eVRvcENvcm5lclkgOiB0aGlzLmZsYXRUb3BDb3JuZXJZO1xuLy9cbi8vXHRcdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuLy9cdFx0XHRcdGNvbnRleHQubW92ZVRvKHNjYWxlICsgc2NhbGUgKiBoZXhDb3JuZXJYWzBdLCBzY2FsZSArIHNjYWxlICogaGV4Q29ybmVyWVswXSk7XG4vL1x0XHRcdFx0Y29udGV4dC5saW5lVG8oc2NhbGUgKyBzY2FsZSAqIGhleENvcm5lclhbMV0sIHNjYWxlICsgc2NhbGUgKiBoZXhDb3JuZXJZWzFdKTtcbi8vXHRcdFx0XHRjb250ZXh0LmxpbmVUbyhzY2FsZSArIHNjYWxlICogaGV4Q29ybmVyWFsyXSwgc2NhbGUgKyBzY2FsZSAqIGhleENvcm5lcllbMl0pO1xuLy9cdFx0XHRcdGNvbnRleHQubGluZVRvKHNjYWxlICsgc2NhbGUgKiBoZXhDb3JuZXJYWzNdLCBzY2FsZSArIHNjYWxlICogaGV4Q29ybmVyWVszXSk7XG4vL1x0XHRcdFx0Y29udGV4dC5saW5lVG8oc2NhbGUgKyBzY2FsZSAqIGhleENvcm5lclhbNF0sIHNjYWxlICsgc2NhbGUgKiBoZXhDb3JuZXJZWzRdKTtcbi8vXHRcdFx0XHRjb250ZXh0LmxpbmVUbyhzY2FsZSArIHNjYWxlICogaGV4Q29ybmVyWFs1XSwgc2NhbGUgKyBzY2FsZSAqIGhleENvcm5lcllbNV0pO1xuLy9cbi8vXHRcdFx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGdldENvbG9yKGNlbGwuY29sb3IpO1xuLy9cdFx0XHRcdGNvbnRleHQuZmlsbCgpO1xuLy9cdFx0XHR9LCBzY2FsZSAqIDIpO1xuLy9cdFx0fVxuLy9cbi8vXHRcdGNvbnRleHQuZHJhd0ltYWdlKGNlbGwuY2FjaGVIZXgsIHggLSBjZWxsLmNhY2hlSGFsZldpZHRoLCB5IC0gY2VsbC5jYWNoZUhhbGZIZWlnaHQpO1xuLy9cdH1cblxuXHRmaWxsKGNvbnRleHQsIHNjYWxlLCB4LCB5LCBjZWxsKSB7XG5cdFx0c2NhbGUgPSBzY2FsZSAqIGNlbGwuc2NhbGU7XG5cdFx0bGV0IGhleENvcm5lclggPSBjZWxsLm9yaWVudGF0aW9uID09PSBQT0lOVFkgPyB0aGlzLnBvaW50eVRvcENvcm5lclggOiB0aGlzLmZsYXRUb3BDb3JuZXJYO1xuXHRcdGxldCBoZXhDb3JuZXJZID0gY2VsbC5vcmllbnRhdGlvbiA9PT0gUE9JTlRZID8gdGhpcy5wb2ludHlUb3BDb3JuZXJZIDogdGhpcy5mbGF0VG9wQ29ybmVyWTtcblxuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFx0Y29udGV4dC5tb3ZlVG8oeCArIHNjYWxlICogaGV4Q29ybmVyWFswXSwgeSArIHNjYWxlICogaGV4Q29ybmVyWVswXSk7XG5cdFx0Y29udGV4dC5saW5lVG8oeCArIHNjYWxlICogaGV4Q29ybmVyWFsxXSwgeSArIHNjYWxlICogaGV4Q29ybmVyWVsxXSk7XG5cdFx0Y29udGV4dC5saW5lVG8oeCArIHNjYWxlICogaGV4Q29ybmVyWFsyXSwgeSArIHNjYWxlICogaGV4Q29ybmVyWVsyXSk7XG5cdFx0Y29udGV4dC5saW5lVG8oeCArIHNjYWxlICogaGV4Q29ybmVyWFszXSwgeSArIHNjYWxlICogaGV4Q29ybmVyWVszXSk7XG5cdFx0Y29udGV4dC5saW5lVG8oeCArIHNjYWxlICogaGV4Q29ybmVyWFs0XSwgeSArIHNjYWxlICogaGV4Q29ybmVyWVs0XSk7XG5cdFx0Y29udGV4dC5saW5lVG8oeCArIHNjYWxlICogaGV4Q29ybmVyWFs1XSwgeSArIHNjYWxlICogaGV4Q29ybmVyWVs1XSk7XG5cblx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGdldENvbG9yKGNlbGwuY29sb3IpO1xuXHRcdGNvbnRleHQuZmlsbCgpO1xuXHR9XG59XG5cbiIsImltcG9ydCB7Z2V0Q29sb3IsIGludlNxcnQyLCBzcXJ0Mn0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQge0ZMQVQsIFBPSU5UWX0gZnJvbSAnLi9jb25zdHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmF3U3F1YXJlIHtcblx0Y29uc3RydWN0b3Ioc2V0dGluZ3MpIHtcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MpO1xuXG5cdFx0dGhpcy5zcXVhcmVYID0gW2ludlNxcnQyLCBpbnZTcXJ0MiwgLWludlNxcnQyLCAtaW52U3FydDJdO1xuXHRcdHRoaXMuc3F1YXJlWSA9IFtpbnZTcXJ0MiwgLWludlNxcnQyLCAtaW52U3FydDIsIGludlNxcnQyXTtcblx0XHR0aGlzLmRpYW1vbmRYID0gWzEsIDAsIC0xLCAwLCAwLjUsIC0wLjVdO1xuXHRcdHRoaXMuZGlhbW9uZFkgPSBbMCwgLTEsIDAsIDEsIC0wLjUsIDAuNV07XG5cdH1cblxuXHRmaWxsKGNvbnRleHQsIHNjYWxlLCB4LCB5LCBjZWxsKSB7XG5cdFx0c2NhbGUgPSBzY2FsZSAqIGNlbGwuc2NhbGU7XG5cdFx0bGV0IHNxdWFyZUNvcm5lclggPSBjZWxsLm9yaWVudGF0aW9uID09PSBQT0lOVFkgPyB0aGlzLmRpYW1vbmRYIDogdGhpcy5zcXVhcmVYO1xuXHRcdGxldCBzcXVhcmVDb3JuZXJZID0gY2VsbC5vcmllbnRhdGlvbiA9PT0gUE9JTlRZID8gdGhpcy5kaWFtb25kWSA6IHRoaXMuc3F1YXJlWTtcblxuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFx0Y29udGV4dC5tb3ZlVG8oeCArIHNjYWxlICogc3F1YXJlQ29ybmVyWFswXSwgeSArIHNjYWxlICogc3F1YXJlQ29ybmVyWVswXSk7XG5cdFx0Y29udGV4dC5saW5lVG8oeCArIHNjYWxlICogc3F1YXJlQ29ybmVyWFsxXSwgeSArIHNjYWxlICogc3F1YXJlQ29ybmVyWVsxXSk7XG5cdFx0Y29udGV4dC5saW5lVG8oeCArIHNjYWxlICogc3F1YXJlQ29ybmVyWFsyXSwgeSArIHNjYWxlICogc3F1YXJlQ29ybmVyWVsyXSk7XG5cdFx0Y29udGV4dC5saW5lVG8oeCArIHNjYWxlICogc3F1YXJlQ29ybmVyWFszXSwgeSArIHNjYWxlICogc3F1YXJlQ29ybmVyWVszXSk7XG5cblx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGdldENvbG9yKGNlbGwuY29sb3IpO1xuXHRcdGNvbnRleHQuZmlsbCgpO1xuXHR9XG5cblx0b3V0bGluZShjb250ZXh0LCBzY2FsZSwgeCwgeSwgY2VsbCkge1xuXHRcdHNjYWxlID0gc2NhbGUgKiBjZWxsLnNjYWxlO1xuXHRcdGxldCBzcXVhcmVDb3JuZXJYID0gY2VsbC5vcmllbnRhdGlvbiA9PT0gUE9JTlRZID8gdGhpcy5kaWFtb25kWCA6IHRoaXMuc3F1YXJlWDtcblx0XHRsZXQgc3F1YXJlQ29ybmVyWSA9IGNlbGwub3JpZW50YXRpb24gPT09IFBPSU5UWSA/IHRoaXMuZGlhbW9uZFkgOiB0aGlzLnNxdWFyZVk7XG5cblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdGNvbnRleHQubW92ZVRvKHggKyBzY2FsZSAqIHNxdWFyZUNvcm5lclhbMF0sIHkgKyBzY2FsZSAqIHNxdWFyZUNvcm5lcllbMF0pO1xuXHRcdGNvbnRleHQubGluZVRvKHggKyBzY2FsZSAqIHNxdWFyZUNvcm5lclhbMV0sIHkgKyBzY2FsZSAqIHNxdWFyZUNvcm5lcllbMV0pO1xuXHRcdGNvbnRleHQubGluZVRvKHggKyBzY2FsZSAqIHNxdWFyZUNvcm5lclhbMl0sIHkgKyBzY2FsZSAqIHNxdWFyZUNvcm5lcllbMl0pO1xuXHRcdGNvbnRleHQubGluZVRvKHggKyBzY2FsZSAqIHNxdWFyZUNvcm5lclhbM10sIHkgKyBzY2FsZSAqIHNxdWFyZUNvcm5lcllbM10pO1xuXHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cblx0XHRjb250ZXh0LmxpbmVXaWR0aCA9IGNlbGwud2lkdGg7XG5cdFx0Y29udGV4dC5zdHJva2VTdHlsZSA9IGdldENvbG9yKGNlbGwuY29sb3IpO1xuXHRcdGNvbnRleHQuc3Ryb2tlKCk7XG5cdH1cbn1cblxuIiwiaW1wb3J0IHtnZXRDb2xvcn0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYXdDaXJjbGUge1xuXHRjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xuXHR9XG5cblx0ZmlsbChjb250ZXh0LCBzY2FsZSwgeCwgeSwgY2VsbCkge1xuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFx0Y29udGV4dC5hcmMoeCwgeSwgc2NhbGUgKiBjZWxsLnNjYWxlLCAwLCAyKk1hdGguUEksIGZhbHNlKTtcblx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGdldENvbG9yKGNlbGwuY29sb3IpO1xuXHRcdGNvbnRleHQuZmlsbCgpO1xuXHR9XG5cblx0b3V0bGluZShjb250ZXh0LCBzY2FsZSwgeCwgeSwgY2VsbCkge1xuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFx0Y29udGV4dC5hcmMoeCwgeSwgc2NhbGUgKiBjZWxsLnNjYWxlLCAwLCAyKk1hdGguUEksIGZhbHNlKTtcblx0XHRjb250ZXh0LmxpbmVXaWR0aCA9IGNlbGwud2lkdGg7XG5cdFx0Y29udGV4dC5zdHJva2VTdHlsZSA9IGdldENvbG9yKGNlbGwuY29sb3IpO1xuXHRcdGNvbnRleHQuc3Ryb2tlKCk7XG5cdH1cbn1cblxuIiwiaW1wb3J0IHtnZXRDb2xvciwgcXVpY2tDYW52YXMsIHJhbmdlLCBpbnZTcXJ0MiwgdG9GaXhlZH0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQge0hFWCwgU1FVQVJFLCBGTEFULCBQT0lOVFl9IGZyb20gJy4vY29uc3RzLmpzJztcblxuY29uc3QgREVGQVVMVFMgPSB7XG5cdG1pbmU6IHtcblx0XHRib3JkZXI6IHtcblx0XHRcdHNjYWxlOiAwLjM4LFxuXG5cdFx0XHRjb2xvcjoge1xuXHRcdFx0XHRyZWQ6IDI1NSxcblx0XHRcdFx0Ymx1ZTogMjU1LFxuXHRcdFx0XHRncmVlbjogMjU1LFxuXHRcdFx0XHRhbHBoYTogMC44LFxuXHRcdFx0fSxcblxuXHRcdFx0aG9ybnM6IHtcblx0XHRcdFx0c2NhbGU6IDAuMDcsXG5cdFx0XHRcdGRpc3RhbmNlOiAwLjM2LFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGJvZHk6IHtcblx0XHRcdHNjYWxlOiAwLjM2LFxuXG5cdFx0XHRjb2xvcjoge1xuXHRcdFx0XHRyZWQ6IDMyLFxuXHRcdFx0XHRibHVlOiAzMixcblx0XHRcdFx0Z3JlZW46IDMyLFxuXHRcdFx0fSxcblxuXHRcdFx0aG9ybnM6IHtcblx0XHRcdFx0c2NhbGU6IDAuMDUsXG5cdFx0XHRcdGRpc3RhbmNlOiAwLjM2LFxuXHRcdFx0fSxcblx0XHR9XG5cdH0sXG5cblx0cGlwOiB7XG5cdFx0Ym9yZGVyOiB7XG5cdFx0XHRzY2FsZTogMC4xNyxcblx0XHRcdGNvbG9yOiB7XG5cdFx0XHRcdHJlZDogMjU1LFxuXHRcdFx0XHRibHVlOiAyNTUsXG5cdFx0XHRcdGdyZWVuOiAyNTUsXG5cdFx0XHRcdGFscGhhOiAwLjgsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0Ym9keToge1xuXHRcdFx0c2NhbGU6IDAuMTUsXG5cdFx0XHRjb2xvcjoge1xuXHRcdFx0XHRyZWQ6IDAsXG5cdFx0XHRcdGJsdWU6IDAsXG5cdFx0XHRcdGdyZWVuOiAwLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRpc3RhbmNlOiAwLjYsXG5cdH0sXG5cblx0c2lkZXM6IDYsXG5cdHNsaWNlczogMjQsXG59O1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUZsYXRTcXVhcmVQaXBzICgpIHtcblx0Y29uc3QgcGlwcyA9IFtdO1xuXHRjb25zdCBwaXBYID0gWzAsIGludlNxcnQyLCBpbnZTcXJ0MiwgLWludlNxcnQyLCAtaW52U3FydDIsIGludlNxcnQyLCAtaW52U3FydDIsIDAsIDBdO1xuXHRjb25zdCBwaXBZID0gWzAsIGludlNxcnQyLCAtaW52U3FydDIsIC1pbnZTcXJ0MiwgaW52U3FydDIsIDAsIDAsIC1pbnZTcXJ0MiwgaW52U3FydDJdO1xuXG5cdGNvbnN0IGdldFZlcnRleCA9IG4gPT4gW3BpcFhbbl0sIHBpcFlbbl1dO1xuXG5cdHBpcHNbMV0gPSBbMF0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbMl0gPSBbMSwgM10ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbM10gPSBbMCwgMSwgM10ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbNF0gPSBbMSwgMiwgMywgNF0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbNV0gPSBbMCwgMSwgMiwgMywgNF0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbNl0gPSBbMSwgMiwgMywgNCwgNSwgNl0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbN10gPSBbMCwgMSwgMiwgMywgNCwgNSwgNl0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbOF0gPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbOV0gPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOF0ubWFwKGdldFZlcnRleCk7XG5cblx0cmV0dXJuIHBpcHM7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUG9pbnR5U3F1YXJlUGlwcyAoKSB7XG5cdGNvbnN0IHBpcHMgPSBbXTtcblx0Y29uc3QgcGlwWCA9IFswLCAxLCAwLCAtMSwgMCwgMC41LCAtMC41LCAwLjUsIC0wLjVdO1xuXHRjb25zdCBwaXBZID0gWzAsIDAsIC0xLCAwLCAxLCAtMC41LCAwLjUsIDAuNSwgLTAuNV07XG5cblx0Y29uc3QgZ2V0VmVydGV4ID0gbiA9PiBbcGlwWFtuXSwgcGlwWVtuXV07XG5cblx0cGlwc1sxXSA9IFswXS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1syXSA9IFsxLCAzXS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1szXSA9IFswLCAxLCAzXS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1s0XSA9IFsxLCAyLCAzLCA0XS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1s1XSA9IFswLCAxLCAyLCAzLCA0XS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1s2XSA9IFsxLCAyLCAzLCA0LCA1LCA2XS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1s3XSA9IFswLCAxLCAyLCAzLCA0LCA1LCA2XS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1s4XSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1s5XSA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XS5tYXAoZ2V0VmVydGV4KTtcblxuXHRyZXR1cm4gcGlwcztcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVGbGF0SGV4UGlwcyAoc2xpY2VzWCwgc2xpY2VzWSkge1xuXHRjb25zdCBwaXBzID0gW11cblx0c2xpY2VzWCA9IFswXS5jb25jYXQoc2xpY2VzWCk7XG5cdHNsaWNlc1kgPSBbMF0uY29uY2F0KHNsaWNlc1kpO1xuXG5cdGNvbnN0IGdldFZlcnRleCA9IG4gPT4gW3NsaWNlc1hbbl0sIHNsaWNlc1lbbl1dO1xuXG5cdHBpcHNbMV0gPSBbMF0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbMl0gPSBbMSwgMTNdLm1hcChnZXRWZXJ0ZXgpO1xuXHRwaXBzWzNdID0gWzUsIDEzLCAyMV0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbNF0gPSBbMCwgMSwgOSwgMTddLm1hcChnZXRWZXJ0ZXgpO1xuXHRwaXBzWzVdID0gWzAsIDUsIDksIDE3LCAyMV0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbNl0gPSBbMSwgNSwgOSwgMTMsIDE3LCAyMV0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbN10gPSBbMCwgMSwgNSwgOSwgMTMsIDE3LCAyMV0ubWFwKGdldFZlcnRleCk7XG5cblx0cmV0dXJuIHBpcHM7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUG9pbnR5SGV4UGlwcyAoc2xpY2VzWCwgc2xpY2VzWSkge1xuXHRjb25zdCBwaXBzID0gW11cblx0c2xpY2VzWCA9IFswXS5jb25jYXQoc2xpY2VzWCk7XG5cdHNsaWNlc1kgPSBbMF0uY29uY2F0KHNsaWNlc1kpO1xuXG5cdGNvbnN0IGdldFZlcnRleCA9IG4gPT4gW3NsaWNlc1hbbl0sIHNsaWNlc1lbbl1dO1xuXG5cdHBpcHNbMV0gPSBbMF0ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbMl0gPSBbNywgMTldLm1hcChnZXRWZXJ0ZXgpO1xuXHRwaXBzWzNdID0gWzcsIDE1LCAyM10ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbNF0gPSBbMCwgMywgMTEsIDE5XS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1s1XSA9IFswLCAzLCAxMSwgMTUsIDIzXS5tYXAoZ2V0VmVydGV4KTtcblx0cGlwc1s2XSA9IFszLCA3LCAxMSwgMTUsIDE5LCAyM10ubWFwKGdldFZlcnRleCk7XG5cdHBpcHNbN10gPSBbMCwgMywgNywgMTEsIDE1LCAxOSwgMjNdLm1hcChnZXRWZXJ0ZXgpO1xuXG5cdHJldHVybiBwaXBzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmF3U2hhcGVzIHtcblx0Y29uc3RydWN0b3IgKHNldHRpbmdzKSB7XG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRTLCBzZXR0aW5ncyk7XG5cblx0XHRjb25zdCBzaWRlcyA9IHRoaXMuc2V0dGluZ3Muc2lkZXM7XG5cdFx0Y29uc3Qgc2xpY2VzID0gdGhpcy5zZXR0aW5ncy5zbGljZXM7XG5cdFx0dGhpcy5zbGljZXNYID0gcmFuZ2Uoc2xpY2VzKS5tYXAoc2xpY2UgPT4gdG9GaXhlZChNYXRoLmNvcygoKHNsaWNlIC8gc2xpY2VzKSAqIHNpZGVzKSAqICgyICogTWF0aC5QSSkgLyBzaWRlcykpKTtcblx0XHR0aGlzLnNsaWNlc1kgPSByYW5nZShzbGljZXMpLm1hcChzbGljZSA9PiB0b0ZpeGVkKE1hdGguc2luKCgoc2xpY2UgLyBzbGljZXMpICogc2lkZXMpICogKDIgKiBNYXRoLlBJKSAvIHNpZGVzKSkpO1xuXG5cdFx0dGhpcy5waXBDYWNoZSA9IHt9O1xuXHRcdHRoaXMubWluZUNhY2hlID0ge307XG5cblx0XHR0aGlzLnBpcFZlcnRpY2VzID0ge1xuXHRcdFx0W0hFWF06IHtcblx0XHRcdFx0W0ZMQVRdOiBnZW5lcmF0ZUZsYXRIZXhQaXBzKHRoaXMuc2xpY2VzWCwgdGhpcy5zbGljZXNZKSxcblx0XHRcdFx0W1BPSU5UWV06IGdlbmVyYXRlUG9pbnR5SGV4UGlwcyh0aGlzLnNsaWNlc1gsIHRoaXMuc2xpY2VzWSksXG5cdFx0XHR9LFxuXHRcdFx0W1NRVUFSRV06IHtcblx0XHRcdFx0W0ZMQVRdOiBnZW5lcmF0ZUZsYXRTcXVhcmVQaXBzKCksXG5cdFx0XHRcdFtQT0lOVFldOiBnZW5lcmF0ZVBvaW50eVNxdWFyZVBpcHMoKSxcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5ob3JucyA9IHRoaXMucGlwVmVydGljZXNbSEVYXVtGTEFUXVs2XS5jb25jYXQodGhpcy5waXBWZXJ0aWNlc1tIRVhdW1BPSU5UWV1bNl0pO1xuXHR9XG5cblx0YmFja2dyb3VuZCAoY29udGV4dCwgaGVpZ2h0LCB3aWR0aCwgY29sb3IpIHtcblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdGNvbnRleHQucmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGdldENvbG9yKGNvbG9yKTtcblx0XHRjb250ZXh0LmNsb3NlUGF0aCgpO1xuXHRcdGNvbnRleHQuZmlsbCgpO1xuXHR9XG5cblx0cGlwIChjb250ZXh0LCBzY2FsZSwgY2VsbFgsIGNlbGxZLCB2ZXJ0ZXhYLCB2ZXJ0ZXhZLCBwaXBSYWRpdXMsIHBpcERpc3RhbmNlKSB7XG5cdFx0Y29uc3QgeCA9IGNlbGxYICsgKHBpcERpc3RhbmNlICogdmVydGV4WCk7XG5cdFx0Y29uc3QgeSA9IGNlbGxZICsgKHBpcERpc3RhbmNlICogdmVydGV4WSk7XG5cblx0XHRjb250ZXh0Lm1vdmVUbyh4LCB5KTtcblx0XHRjb250ZXh0LmFyYyh4LCB5LCBwaXBSYWRpdXMsIDAsIE1hdGguUEkqMiwgdHJ1ZSk7XG5cdH1cblxuXHRzZXRQaXBDYWNoZSAocGlwcywgc2NhbGUpIHtcblx0XHRjb25zdCBwaXBEaXN0YW5jZSA9IHNjYWxlICogdGhpcy5zZXR0aW5ncy5waXAuZGlzdGFuY2U7IC8vKiBjZWxsLnNjYWxlO1xuXHRcdGNvbnN0IHBpcEJvZHlSYWRpdXMgPSBzY2FsZSAqIHRoaXMuc2V0dGluZ3MucGlwLmJvZHkuc2NhbGU7XG5cdFx0Y29uc3QgcGlwQm9yZGVyUmFkaXVzID0gc2NhbGUgKiB0aGlzLnNldHRpbmdzLnBpcC5ib3JkZXIuc2NhbGU7XG5cblx0XHR0aGlzLnBpcENhY2hlLnNjYWxlID0gc2NhbGU7XG5cdFx0dGhpcy5waXBDYWNoZS5oZWlnaHQgPSAoTWF0aC5jZWlsKHBpcEJvcmRlclJhZGl1cykgKyAxKSAqIDI7XG5cdFx0dGhpcy5waXBDYWNoZS53aWR0aCA9IHRoaXMucGlwQ2FjaGUuaGVpZ2h0O1xuXG5cdFx0Y29uc3QgcGlwQ2VudGVyID0gdGhpcy5waXBDYWNoZS5oZWlnaHQgLyAyO1xuXG5cdFx0dGhpcy5waXBDYWNoZS5waXAgPSBxdWlja0NhbnZhcygoY29udGV4dCwgaGVpZ2h0LCB3aWR0aCkgPT4ge1xuXHRcdFx0Y29udGV4dC5iZWdpblBhdGgoKTtcblx0XHRcdGNvbnRleHQuYXJjKHBpcENlbnRlciwgcGlwQ2VudGVyLCBwaXBCb3JkZXJSYWRpdXMsIDAsIE1hdGguUEkqMiwgdHJ1ZSk7XG5cdFx0XHRjb250ZXh0LmNsb3NlUGF0aCgpO1xuXHRcdFx0Y29udGV4dC5maWxsU3R5bGUgPSBnZXRDb2xvcih0aGlzLnNldHRpbmdzLnBpcC5ib3JkZXIuY29sb3IpO1xuXHRcdFx0Y29udGV4dC5maWxsKCk7XG5cblx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFx0XHRjb250ZXh0LmFyYyhwaXBDZW50ZXIsIHBpcENlbnRlciwgcGlwQm9keVJhZGl1cywgMCwgTWF0aC5QSSoyLCB0cnVlKTtcblx0XHRcdGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cdFx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGdldENvbG9yKHRoaXMuc2V0dGluZ3MucGlwLmJvZHkuY29sb3IpO1xuXHRcdFx0Y29udGV4dC5maWxsKCk7XG5cdFx0fSwgdGhpcy5waXBDYWNoZS5oZWlnaHQsIHRoaXMucGlwQ2FjaGUud2lkdGgpO1xuXG5cdFx0Y29uc3QgcGlwc0NlbnRlciA9IHNjYWxlIC0gcGlwQ2VudGVyO1xuXG5cdFx0dGhpcy5waXBDYWNoZS5waXBzID0gcGlwcy5tYXAodmVydGljZXMgPT4ge1xuXHRcdFx0cmV0dXJuIHF1aWNrQ2FudmFzKGNvbnRleHQgPT4ge1xuXHRcdFx0XHR2ZXJ0aWNlcy5mb3JFYWNoKChbcGlwWCwgcGlwWV0pID0+IGNvbnRleHQuZHJhd0ltYWdlKHRoaXMucGlwQ2FjaGUucGlwLCBwaXBzQ2VudGVyICsgKHBpcERpc3RhbmNlICogcGlwWCksIHBpcHNDZW50ZXIgKyAocGlwRGlzdGFuY2UgKiBwaXBZKSkpO1xuXHRcdFx0fSwgc2NhbGUgKiAyKTtcblx0XHR9KTtcblx0fVxuXG5cdHBpcHMgKGNvbnRleHQsIHNjYWxlLCB4LCB5LCBjZWxsKSB7XG5cdFx0Y29uc3Qge3RpbGVTdHlsZSwgb3JpZW50YXRpb24sIHBpcHN9ID0gY2VsbDtcblxuXHRcdGlmICh0aGlzLnBpcFZlcnRpY2VzW3RpbGVTdHlsZV1cblx0XHQmJiB0aGlzLnBpcFZlcnRpY2VzW3RpbGVTdHlsZV1bb3JpZW50YXRpb25dXG5cdFx0JiYgdGhpcy5waXBWZXJ0aWNlc1t0aWxlU3R5bGVdW29yaWVudGF0aW9uXVtwaXBzXSkge1xuXG5cdFx0XHRpZiAoc2NhbGUgIT09IHRoaXMucGlwQ2FjaGUuc2NhbGUpIHtcblx0XHRcdFx0dGhpcy5zZXRQaXBDYWNoZSh0aGlzLnBpcFZlcnRpY2VzW3RpbGVTdHlsZV1bb3JpZW50YXRpb25dLCBzY2FsZSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNjYWxlV2lkdGggPSAoc2NhbGUgKiAyKSAqIGNlbGwuc2NhbGU7XG5cdFx0XHRjb25zdCBzY2FsZUhlaWdodCA9IChzY2FsZSAqIDIpICogY2VsbC5zY2FsZTtcblxuXHRcdFx0Y29udGV4dC5kcmF3SW1hZ2UodGhpcy5waXBDYWNoZS5waXBzW3BpcHNdLCB4IC0gKHNjYWxlV2lkdGggLyAyKSwgeSAtIChzY2FsZUhlaWdodCAvIDIpLCBzY2FsZVdpZHRoLCBzY2FsZUhlaWdodCk7XG5cdFx0fVxuXHR9XG5cblx0bWluZSAoY29udGV4dCwgc2NhbGUsIHgsIHksIG1pbmUgPSB0aGlzLnNldHRpbmdzLm1pbmUpIHtcblx0XHRpZiAoc2NhbGUgIT09IHRoaXMubWluZUNhY2hlLnNjYWxlKSB7XG5cdFx0XHR0aGlzLnNldE1pbmVDYWNoZShzY2FsZSk7XG5cdFx0fVxuXG5cdFx0Y29udGV4dC5kcmF3SW1hZ2UodGhpcy5taW5lQ2FjaGUubWluZSwgeCAtIHNjYWxlLCB5IC0gc2NhbGUsIHNjYWxlICogMiwgc2NhbGUgKiAyKTtcblx0fVxuXG5cdHNldE1pbmVDYWNoZSAoc2NhbGUpIHtcblx0XHR0aGlzLm1pbmVDYWNoZS5zY2FsZSA9IHNjYWxlO1xuXG5cdFx0dGhpcy5taW5lQ2FjaGUubWluZSA9IHF1aWNrQ2FudmFzKGNvbnRleHQgPT4ge1xuXHRcdFx0dGhpcy5fbWluZShjb250ZXh0LCBzY2FsZSwgc2NhbGUsIHNjYWxlLCB0aGlzLnNldHRpbmdzLm1pbmUuYm9yZGVyKTtcblx0XHRcdHRoaXMuX2hvcm5zKGNvbnRleHQsIHNjYWxlLCBzY2FsZSwgc2NhbGUsIHRoaXMuc2V0dGluZ3MubWluZS5ib3JkZXIuaG9ybnMsIHRoaXMuc2V0dGluZ3MubWluZS5ib3JkZXIuY29sb3IpO1xuXHRcdFx0dGhpcy5fbWluZShjb250ZXh0LCBzY2FsZSwgc2NhbGUsIHNjYWxlLCB0aGlzLnNldHRpbmdzLm1pbmUuYm9keSk7XG5cdFx0XHR0aGlzLl9ob3Jucyhjb250ZXh0LCBzY2FsZSwgc2NhbGUsIHNjYWxlLCB0aGlzLnNldHRpbmdzLm1pbmUuYm9keS5ob3JucywgdGhpcy5zZXR0aW5ncy5taW5lLmJvZHkuY29sb3IpO1xuXHRcdH0sIHNjYWxlICogMik7XG5cdH1cblxuXHRfbWluZSAoY29udGV4dCwgc2NhbGUsIHgsIHksIG1pbmUpIHtcblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdGNvbnRleHQubW92ZVRvKHgsIHkpO1xuXG5cdFx0Y29udGV4dC5hcmMoeCwgeSwgc2NhbGUgKiBtaW5lLnNjYWxlLCAwLCBNYXRoLlBJKjIsIHRydWUpO1xuXG5cdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcblx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGdldENvbG9yKG1pbmUuY29sb3IpO1xuXHRcdGNvbnRleHQuZmlsbCgpO1xuXHR9XG5cblx0X2hvcm5zIChjb250ZXh0LCBzY2FsZSwgeCwgeSwgaG9ybiwgY29sb3IpIHtcblx0XHRjb25zdCBob3JuUmFkaXVzID0gc2NhbGUgKiBob3JuLnNjYWxlO1xuXHRcdGNvbnN0IGhvcm5EaXN0YW5jZSA9IHNjYWxlICogaG9ybi5kaXN0YW5jZTtcblxuXHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cblx0XHR0aGlzLmhvcm5zXG5cdFx0LmZvckVhY2goKFtob3JuWCwgaG9yblldKSA9PiB0aGlzLnBpcChjb250ZXh0LCBzY2FsZSwgeCx5LCBob3JuWCwgaG9yblksIGhvcm5SYWRpdXMsIGhvcm5EaXN0YW5jZSkpO1xuXG5cdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcblx0XHRjb250ZXh0LmZpbGxTdHlsZSA9IGdldENvbG9yKGNvbG9yKTtcblx0XHRjb250ZXh0LmZpbGwoKTtcblx0fVxuXG5cdGV4cGxvc2lvbiAoY29udGV4dCwgc2NhbGUsIHgsIHkpIHtcblx0XHR2YXIgcGVhayA9IHNjYWxlICogMC42Njc7XG5cdFx0dmFyIHZhbGxleSA9IHNjYWxlICogMC4zMzM7XG5cblx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdGNvbnRleHQubW92ZVRvKHgseSk7XG5cblx0XHRjb250ZXh0Lm1vdmVUbyh4ICsgcGVhayAqIHRoaXMuc2xpY2VzWFswXSwgeSArIHBlYWsgKiB0aGlzLnNsaWNlc1lbMF0pO1xuXHRcdHJhbmdlKHRoaXMuc2V0dGluZ3Muc2xpY2VzKS5maWx0ZXIoc2xpY2UgPT4gc2xpY2UgJSAyID09PSAxKS5mb3JFYWNoKHNsaWNlID0+IHtcblx0XHRcdGNvbnRleHQubGluZVRvKHggKyB2YWxsZXkgKiB0aGlzLnNsaWNlc1hbc2xpY2VdLCB5ICsgdmFsbGV5ICogdGhpcy5zbGljZXNZW3NsaWNlXSk7XG5cdFx0XHRjb250ZXh0LmxpbmVUbyh4ICsgcGVhayAqIHRoaXMuc2xpY2VzWFtzbGljZSsxXSwgeSArIHBlYWsgKiB0aGlzLnNsaWNlc1lbc2xpY2UrMV0pO1xuXHRcdH0pO1xuXG5cdFx0Y29udGV4dC5jbG9zZVBhdGgoKTtcblx0XHRjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2IoMjU1LDAsMCknO1xuXHRcdGNvbnRleHQuZmlsbCgpO1xuXHR9XG59XG5cbiIsImltcG9ydCB7Z2V0Q29sb3IsIG5vb3B9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTa2V0Y2gge1xuXHRjb25zdHJ1Y3RvciAoc2V0dGluZ3MpIHtcblx0XHR0aGlzLmxhc3ROb3cgPSBudWxsO1xuXG5cdFx0W1xuXHRcdFx0J2dldENvbnRleHQnLFxuXHRcdFx0J2dldFNpemUnLFxuXHRcdFx0J29uUmVzaXplJyxcblx0XHRcdCdyZW5kZXInLFxuXHRcdF0ubWFwKG1ldGhvZCA9PiB0aGlzW21ldGhvZF0gPSB0aGlzW21ldGhvZF0uYmluZCh0aGlzKSk7XG5cblx0XHR0aGlzLmRyYXcgPSBzZXR0aW5ncy5kcmF3IHx8IG5vb3A7XG5cdFx0dGhpcy5yZXNpemUgPSBzZXR0aW5ncy5yZXNpemUgfHwgbm9vcDtcblx0XHR0aGlzLmRyYXdEZWxheSA9IHNldHRpbmdzLmRyYXdEZWxheTtcblx0XHR0aGlzLmNvbnRhaW5lciA9IHNldHRpbmdzLmVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keTtcblxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uUmVzaXplKTtcblxuXHRcdHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdFx0dGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aDtcblx0XHR0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG5cblx0XHR0aGlzLmNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpO1xuXG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyKTtcblx0fVxuXG5cdGdldENvbnRleHQgKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbnRleHQ7XG5cdH1cblxuXHRnZXRTaXplICgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2FudmFzV2lkdGg6IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoLFxuXHRcdFx0Y2FudmFzSGVpZ2h0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG5cdFx0fVxuXHR9XG5cblx0b25SZXNpemUgKGV2ZW50KSB7XG5cdFx0Y29uc3Qgd2lkdGggPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aDtcblx0XHRjb25zdCBoZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG5cblx0XHRjb25zdCBvbGRXaWR0aCA9IHRoaXMuY2FudmFzLndpZHRoO1xuXHRcdGNvbnN0IG9sZEhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodDtcblxuXHRcdGNvbnN0IGRlbHRhWCA9IHdpZHRoIC0gb2xkV2lkdGg7XG5cdFx0Y29uc3QgZGVsdGFZID0gaGVpZ2h0IC0gb2xkSGVpZ2h0O1xuXG5cdFx0dGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cblx0XHRPYmplY3QuYXNzaWduKGV2ZW50LCB7XG5cdFx0XHRoZWlnaHQsIHdpZHRoLFxuXHRcdFx0b2xkSGVpZ2h0LCBvbGRXaWR0aCxcblx0XHRcdGRlbHRhWCwgZGVsdGFZLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5yZXNpemUoZXZlbnQpO1xuXHR9XG5cblx0cmVuZGVyIChub3cpIHtcblx0XHR0aGlzLmNvbnRleHQubGFzdFVUQyA9IHRoaXMuY29udGV4dC51dGMgfHwgbnVsbDtcblx0XHR0aGlzLmNvbnRleHQudXRjID0gRGF0ZS5ub3coKTtcblxuXHRcdHRoaXMuY29udGV4dC5ub3cgPSBub3c7XG5cdFx0dGhpcy5jb250ZXh0Lmxhc3ROb3cgPSB0aGlzLmxhc3ROb3c7XG5cblx0XHR0aGlzLmRyYXcodGhpcy5jb250ZXh0KTtcblxuXHRcdHRoaXMubGFzdE5vdyA9IG5vdztcblxuXHRcdGlmICh0aGlzLmRyYXdEZWxheSkgc2V0VGltZW91dCgoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIpLCB0aGlzLmRyYXdEZWxheSk7XG5cdFx0ZWxzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIpO1xuXHR9XG59XG5cbiIsImltcG9ydCB7aGFzLCBoeXBvdGVudXNlLCBub29wfSBmcm9tICcuL3V0aWxzLmpzJztcblxuY29uc3QgTU9EVUxFID0gJ29uVGFwJztcblxuY29uc3QgREVGQVVMVFMgPSB7XG5cdGRlYnVnOiBmYWxzZSxcblxuXHRlbGVtZW50OiBkb2N1bWVudC5ib2R5LFxuXG5cdGRlc2t0b3BQcmVzczogZmFsc2UsXG5cblx0dGFwOiAgICAgICAgbm9vcCxcblx0dGFwU3RhcnQ6ICAgbm9vcCxcblx0bW92ZTogICAgICAgbm9vcCxcblx0ZG91YmxldGFwOiAgbm9vcCxcblx0cHJlc3M6ICAgICAgbm9vcCxcblx0cHJlc3NTdGFydDogbm9vcCxcblx0em9vbTogICAgICAgbm9vcCxcblxuXHRtb3ZlVGhyZXNob2xkOiA1LFxuXHRkb3VibGV0YXBUaHJlc2hvbGQ6IDUwMCxcblx0cHJlc3NUaHJlc2hvbGQ6IDMwMCxcblxuXHR3aGVlbEZhY3RvcjogLTEwMCxcbn07XG5cbmNvbnN0IGV2ZW50cyA9IFtcblx0J2NvbnRleHRtZW51JyxcblxuXHQnbW91c2Vkb3duJyxcblx0J21vdXNldXAnLFxuXHQnbW91c2Vtb3ZlJyxcblxuXHQndG91Y2hzdGFydCcsXG5cdCd0b3VjaGVuZCcsXG5cdCd0b3VjaG1vdmUnLFxuXHQndG91Y2hjYW5jZWwnLFxuXG5cdCd3aGVlbCcsXG5dO1xuXG5jb25zdCBtZXRob2RzID0gW1xuXHQnZXZlbnRIYW5kbGVyJyxcblxuXHQndGFwU3RhcnQnLFxuXHQncHJlc3NTdGFydCcsXG5dLmNvbmNhdChldmVudHMpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPblRhcCB7XG5cdGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRTLCBzZXR0aW5ncyk7XG5cblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0dGFwU3RhcnRUaW1lOiBudWxsLFxuXHRcdH07XG5cblx0XHRtZXRob2RzLmZvckVhY2gobWV0aG9kID0+IHRoaXNbbWV0aG9kXSA9IHRoaXNbbWV0aG9kXS5iaW5kKHRoaXMpKTtcblx0XHRldmVudHMuZm9yRWFjaChldmVudE5hbWUgPT4gdGhpcy5zZXR0aW5ncy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudCA9PiB0aGlzLmV2ZW50SGFuZGxlcihldmVudCwgZXZlbnROYW1lKSkpO1xuXHR9XG5cblx0ZXZlbnRIYW5kbGVyIChldmVudCwgZXZlbnROYW1lKSB7XG5cdFx0ZXZlbnQudGltZVN0YW1wVVRDID0gRGF0ZS5ub3coKTtcblxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbJHsgTU9EVUxFIH1dWyR7IGV2ZW50TmFtZSB9XWAsIGV2ZW50KTtcblxuXHRcdHRoaXNbZXZlbnROYW1lXShldmVudCk7XG5cdH1cblxuXHRjb250ZXh0bWVudShldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdH1cblxuXHR0YXBTdGFydChldmVudCkge1xuXHRcdGlmICghdGhpcy5zdGF0ZS50YXBTdGFydFRpbWUpIHtcblx0XHRcdGNvbnN0IHttb2JpbGV9ID0gZXZlbnQ7XG5cdFx0XHR0aGlzLnN0YXRlLnRhcFN0YXJ0VGltZSA9IGV2ZW50LnRpbWVTdGFtcFVUQztcblxuXHRcdFx0aWYgKG1vYmlsZSB8fCB0aGlzLnNldHRpbmdzLmRlc2t0b3BQcmVzcykge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS5wcmVzc1RPKTtcblxuXHRcdFx0XHR0aGlzLnN0YXRlLnByZXNzVE8gPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnByZXNzU3RhcnQoe1xuXHRcdFx0XHRcdFx0bW9iaWxlLFxuXHRcdFx0XHRcdFx0dGltZVN0YW1wVVRDOiBEYXRlLm5vdygpLFxuXHRcdFx0XHRcdFx0b2Zmc2V0WDogdGhpcy5zdGF0ZS5sYXN0WCxcblx0XHRcdFx0XHRcdG9mZnNldFk6IHRoaXMuc3RhdGUubGFzdFksXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sIHRoaXMuc2V0dGluZ3MucHJlc3NUaHJlc2hvbGQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldHRpbmdzLnRhcFN0YXJ0KGV2ZW50KTtcblx0XHR9XG5cdH1cblxuXHRtb3VzZWRvd24oZXZlbnQpIHtcblx0XHRPYmplY3QuYXNzaWduKGV2ZW50LCB7XG5cdFx0XHRtb2JpbGU6IGZhbHNlLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdGF0ZS5sYXN0WCA9IGV2ZW50Lm9mZnNldFg7XG5cdFx0dGhpcy5zdGF0ZS5sYXN0WSA9IGV2ZW50Lm9mZnNldFk7XG5cblx0XHRpZiAoZXZlbnQud2hpY2ggJiYgZXZlbnQud2hpY2ggIT09IDEpIHtcblx0XHRcdHRoaXMuc2V0dGluZ3MucHJlc3NTdGFydChldmVudCk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy50YXBTdGFydChldmVudCk7XG5cdFx0fVxuXHR9XG5cblx0dG91Y2hzdGFydChldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRPYmplY3QuYXNzaWduKGV2ZW50LCB7XG5cdFx0XHRtb2JpbGU6IHRydWUsXG5cdFx0fSk7XG5cblx0XHRjb25zdCB0b3VjaGVzID0gWy4uLmV2ZW50LnRvdWNoZXNdO1xuXHRcdGV2ZW50Lm9mZnNldFggPSB0b3VjaGVzLnJlZHVjZSgobWVtbywgdG91Y2gpID0+IG1lbW8gKyB0b3VjaC5wYWdlWCwgMCkgLyB0b3VjaGVzLmxlbmd0aDtcblx0XHRldmVudC5vZmZzZXRZID0gdG91Y2hlcy5yZWR1Y2UoKG1lbW8sIHRvdWNoKSA9PiBtZW1vICsgdG91Y2gucGFnZVksIDApIC8gdG91Y2hlcy5sZW5ndGg7XG5cblx0XHR0aGlzLnN0YXRlLmxhc3RYID0gZXZlbnQub2Zmc2V0WDtcblx0XHR0aGlzLnN0YXRlLmxhc3RZID0gZXZlbnQub2Zmc2V0WTtcblxuXHRcdGlmIChldmVudC50b3VjaGVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdHRoaXMuc3RhdGUuc2NhbGVTdGFydCA9IGh5cG90ZW51c2UodG91Y2hlc1swXS5wYWdlWCAtIHRvdWNoZXNbMV0ucGFnZVgsIHRvdWNoZXNbMF0ucGFnZVkgLSB0b3VjaGVzWzFdLnBhZ2VZKTtcblx0XHRcdHRoaXMuc3RhdGUucGluY2hpbmcgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS5sYXN0UGluY2ggPSAxO1xuXG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS5wcmVzc1RPKTtcblx0XHR9XG5cblx0XHR0aGlzLnRhcFN0YXJ0KGV2ZW50KTtcblx0fVxuXG5cdHByZXNzU3RhcnQoZXZlbnQpIHtcblx0XHR0aGlzLnNldHRpbmdzLnByZXNzU3RhcnQoZXZlbnQpO1xuXHR9XG5cblx0bW91c2V1cChldmVudCkge1xuXHRcdE9iamVjdC5hc3NpZ24oZXZlbnQsIHtcblx0XHRcdG1vYmlsZTogZmFsc2UsXG5cdFx0XHRkdXJhdGlvbjogZXZlbnQudGltZVN0YW1wVVRDIC0gdGhpcy5zdGF0ZS50YXBTdGFydFRpbWUsXG5cdFx0fSk7XG5cblx0XHRpZiAoIXRoaXMuc3RhdGUubW92aW5nKSB7XG5cdFx0XHRjb25zdCByaWdodENsaWNrID0gKGV2ZW50LndoaWNoICYmIGV2ZW50LndoaWNoICE9PSAxKSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xuXHRcdFx0Y29uc3QgcHJlc3MgPSB0aGlzLnNldHRpbmdzLmRlc2t0b3BQcmVzcyAmJiBldmVudC5kdXJhdGlvbiA+PSB0aGlzLnNldHRpbmdzLnByZXNzVGhyZXNob2xkO1xuXG5cdFx0XHRpZiAocmlnaHRDbGljayB8fCBwcmVzcykge1xuXHRcdFx0XHR0aGlzLnNldHRpbmdzLnByZXNzKGV2ZW50KTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS5wcmVzc1RPKTtcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy50YXAoZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc3RhdGUubW92aW5nID0gbnVsbDtcblx0XHR0aGlzLnN0YXRlLmxhc3RYID0gbnVsbDtcblx0XHR0aGlzLnN0YXRlLmxhc3RZID0gbnVsbDtcblx0XHR0aGlzLnN0YXRlLnRhcFN0YXJ0VGltZSA9IG51bGw7XG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUucHJlc3NUTyk7XG5cdH1cblxuXHR0b3VjaGVuZChldmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRPYmplY3QuYXNzaWduKGV2ZW50LCB7XG5cdFx0XHRtb2JpbGU6IHRydWUsXG5cdFx0XHRkdXJhdGlvbjogZXZlbnQudGltZVN0YW1wVVRDIC0gdGhpcy5zdGF0ZS50YXBTdGFydFRpbWUsXG5cdFx0fSk7XG5cblx0XHRjb25zdCB0b3VjaGVzID0gWy4uLmV2ZW50LnRvdWNoZXNdO1xuXG5cdFx0aWYgKHRvdWNoZXMubGVuZ3RoKSB7XG5cdFx0XHRldmVudC5vZmZzZXRYID0gdG91Y2hlcy5yZWR1Y2UoKG1lbW8sIHRvdWNoKSA9PiBtZW1vICsgdG91Y2gucGFnZVgsIDApIC8gdG91Y2hlcy5sZW5ndGg7XG5cdFx0XHRldmVudC5vZmZzZXRZID0gdG91Y2hlcy5yZWR1Y2UoKG1lbW8sIHRvdWNoKSA9PiBtZW1vICsgdG91Y2gucGFnZVksIDApIC8gdG91Y2hlcy5sZW5ndGg7XG5cblx0XHRcdHRoaXMuc3RhdGUubGFzdFggPSBldmVudC5vZmZzZXRYO1xuXHRcdFx0dGhpcy5zdGF0ZS5sYXN0WSA9IGV2ZW50Lm9mZnNldFk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0ZXZlbnQub2Zmc2V0WCA9IHRoaXMuc3RhdGUubGFzdFg7XG5cdFx0XHRldmVudC5vZmZzZXRZID0gdGhpcy5zdGF0ZS5sYXN0WTtcblx0XHR9XG5cblx0XHRpZiAoISh0aGlzLnN0YXRlLm1vdmluZyB8fCB0aGlzLnN0YXRlLnBpbmNoaW5nKSkge1xuXHRcdFx0aWYgKGV2ZW50LmR1cmF0aW9uID49IHRoaXMuc2V0dGluZ3MucHJlc3NUaHJlc2hvbGQpIHtcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5wcmVzcyhldmVudCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUucHJlc3NUTyk7XG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MudGFwKGV2ZW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGggPD0gMSkge1xuXHRcdFx0dGhpcy5zdGF0ZS5waW5jaGluZyA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS5zY2FsZVN0YXJ0ID0gbnVsbDtcblx0XHRcdHRoaXMuc3RhdGUubGFzdFBpbmNoID0gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuc3RhdGUubW92aW5nID0gbnVsbDtcblx0XHRcdHRoaXMuc3RhdGUubGFzdFggPSBudWxsO1xuXHRcdFx0dGhpcy5zdGF0ZS5sYXN0WSA9IG51bGw7XG5cdFx0XHR0aGlzLnN0YXRlLnRhcFN0YXJ0VGltZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0bW91c2Vtb3ZlKGV2ZW50KSB7XG5cdFx0aWYgKHRoaXMuc3RhdGUudGFwU3RhcnRUaW1lKSB7XG5cdFx0XHRpZiAoIXRoaXMuc3RhdGUubW92aW5nKSB7XG5cdFx0XHRcdGlmICgoTWF0aC5hYnMoZXZlbnQub2Zmc2V0WCAtIHRoaXMuc3RhdGUubGFzdFgpID4gdGhpcy5zZXR0aW5ncy5tb3ZlVGhyZXNob2xkKVxuXHRcdFx0XHR8fCAoTWF0aC5hYnMoZXZlbnQub2Zmc2V0WSAtIHRoaXMuc3RhdGUubGFzdFkpID4gdGhpcy5zZXR0aW5ncy5tb3ZlVGhyZXNob2xkKSkge1xuXHRcdFx0XHRcdHRoaXMuc3RhdGUubW92aW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS5wcmVzc1RPKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zdGF0ZS5tb3ZpbmcpIHtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihldmVudCwge1xuXHRcdFx0XHRcdG1vYmlsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZGVsdGFYOiBldmVudC5vZmZzZXRYIC0gdGhpcy5zdGF0ZS5sYXN0WCxcblx0XHRcdFx0XHRkZWx0YVk6IGV2ZW50Lm9mZnNldFkgLSB0aGlzLnN0YXRlLmxhc3RZLFxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLm1vdmUoZXZlbnQpO1xuXG5cdFx0XHRcdHRoaXMuc3RhdGUubGFzdFggPSBldmVudC5vZmZzZXRYO1xuXHRcdFx0XHR0aGlzLnN0YXRlLmxhc3RZID0gZXZlbnQub2Zmc2V0WTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0b3VjaG1vdmUoZXZlbnQpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0aWYgKHRoaXMuc3RhdGUudGFwU3RhcnRUaW1lKSB7XG5cdFx0XHRjb25zdCB0b3VjaGVzID0gWy4uLmV2ZW50LnRvdWNoZXNdO1xuXG5cdFx0XHRpZiAoIWhhcyhldmVudCwgJ3NjYWxlJykpIHtcblx0XHRcdFx0ZXZlbnQuc2NhbGUgPSB0b3VjaGVzLmxlbmd0aCA8IDIgPyAxIDpcblx0XHRcdFx0XHRoeXBvdGVudXNlKHRvdWNoZXNbMF0ucGFnZVggLSB0b3VjaGVzWzFdLnBhZ2VYLCB0b3VjaGVzWzBdLnBhZ2VZIC0gdG91Y2hlc1sxXS5wYWdlWSkgLyB0aGlzLnN0YXRlLnNjYWxlU3RhcnQ7XG5cdFx0XHR9XG5cblx0XHRcdE9iamVjdC5hc3NpZ24oZXZlbnQsIHtcblx0XHRcdFx0b2Zmc2V0WDogdG91Y2hlcy5yZWR1Y2UoKG1lbW8sIHRvdWNoKSA9PiBtZW1vICsgdG91Y2gucGFnZVgsIDApIC8gdG91Y2hlcy5sZW5ndGgsXG5cdFx0XHRcdG9mZnNldFk6IHRvdWNoZXMucmVkdWNlKChtZW1vLCB0b3VjaCkgPT4gbWVtbyArIHRvdWNoLnBhZ2VZLCAwKSAvIHRvdWNoZXMubGVuZ3RoLFxuXHRcdFx0XHRzY2FsZVN0ZXA6IGV2ZW50LnNjYWxlIC8gdGhpcy5zdGF0ZS5sYXN0UGluY2gsXG5cdFx0XHRcdG1vYmlsZTogdHJ1ZSxcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAodGhpcy5zdGF0ZS5waW5jaGluZykge1xuXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3Muem9vbShldmVudCk7XG5cblx0XHRcdFx0dGhpcy5zdGF0ZS5sYXN0UGluY2ggPSBldmVudC5zY2FsZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCF0aGlzLnN0YXRlLm1vdmluZykge1xuXHRcdFx0XHRpZiAoKE1hdGguYWJzKGV2ZW50Lm9mZnNldFggLSB0aGlzLnN0YXRlLmxhc3RYKSA+IHRoaXMuc2V0dGluZ3MubW92ZVRocmVzaG9sZClcblx0XHRcdFx0fHwgKE1hdGguYWJzKGV2ZW50Lm9mZnNldFkgLSB0aGlzLnN0YXRlLmxhc3RZKSA+IHRoaXMuc2V0dGluZ3MubW92ZVRocmVzaG9sZCkpIHtcblx0XHRcdFx0XHR0aGlzLnN0YXRlLm1vdmluZyA9IHRydWU7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUucHJlc3NUTyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc3RhdGUubW92aW5nKSB7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oZXZlbnQsIHtcblx0XHRcdFx0XHRkZWx0YVg6IGV2ZW50Lm9mZnNldFggLSB0aGlzLnN0YXRlLmxhc3RYLFxuXHRcdFx0XHRcdGRlbHRhWTogZXZlbnQub2Zmc2V0WSAtIHRoaXMuc3RhdGUubGFzdFksXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MubW92ZShldmVudCk7XG5cblx0XHRcdFx0dGhpcy5zdGF0ZS5sYXN0WCA9IGV2ZW50Lm9mZnNldFg7XG5cdFx0XHRcdHRoaXMuc3RhdGUubGFzdFkgPSBldmVudC5vZmZzZXRZO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRvdWNoY2FuY2VsKGV2ZW50KSB7XG5cdFx0Y29uc29sZS5sb2coJ3RvdWNoY2FuY2VsJywgZXZlbnQpO1xuXHR9XG5cblx0d2hlZWwoZXZlbnQpIHtcblx0XHRPYmplY3QuYXNzaWduKGV2ZW50LCB7XG5cdFx0XHRzY2FsZVN0ZXA6IDEgKyAoZXZlbnQuZGVsdGFZIC8gdGhpcy5zZXR0aW5ncy53aGVlbEZhY3RvciksXG5cdFx0XHRtb2JpbGU6IGZhbHNlLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zZXR0aW5ncy56b29tKGV2ZW50KTtcblx0fVxufVxuXG4iLCJpbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCAqIGFzIGZ1bmt5IGZyb20gJy4vZnVua3knO1xuXG5pbXBvcnQgT25UYXAgZnJvbSAnLi9vblRhcC5qcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnLi9wb2ludC5qcyc7XG5pbXBvcnQgU2tldGNoIGZyb20gJy4vc2tldGNoLmpzJztcblxuaW1wb3J0IERyYXdTaGFwZXMgIGZyb20gJy4vZHJhd1NoYXBlcy5qcyc7XG5pbXBvcnQgRHJhd0NpcmNsZSAgZnJvbSAnLi9kcmF3Q2lyY2xlLmpzJztcbmltcG9ydCBEcmF3U3F1YXJlICBmcm9tICcuL2RyYXdTcXVhcmUuanMnO1xuaW1wb3J0IERyYXdIZXhhZ29uIGZyb20gJy4vZHJhd0hleGFnb24uanMnO1xuXG5pbXBvcnQgQ2VsbCBmcm9tICcuL2NlbGwuanMnO1xuXG5pbXBvcnQgQ2FydG9ncmFwaGVyRmxhdFhZIGZyb20gJy4vY2FydG9ncmFwaGVyRmxhdFhZLmpzJztcbmltcG9ydCBDYXJ0b2dyYXBoZXJQb2ludHlYWSBmcm9tICcuL2NhcnRvZ3JhcGhlclBvaW50eVhZLmpzJztcbmltcG9ydCBDYXJ0b2dyYXBoZXJGbGF0WFlaIGZyb20gJy4vY2FydG9ncmFwaGVyRmxhdFhZWi5qcyc7XG5pbXBvcnQgQ2FydG9ncmFwaGVyUG9pbnR5WFlaIGZyb20gJy4vY2FydG9ncmFwaGVyUG9pbnR5WFlaLmpzJztcblxuaW1wb3J0IHtcblx0SEVYLCBDSVJDTEUsIFNRVUFSRSxcblx0VElMRV9TVFlMRVMsXG5cdEJPQVJEX1NUWUxFUyxcblx0RkxBVCwgUE9JTlRZLFxuXHRPUklFTlRBVElPTl9TVFlMRVMsXG5cdEZJTEwsIE9VVExJTkUsXG5cdERSQVdfU1RZTEVTLFxufSBmcm9tICcuL2NvbnN0cy5qcyc7XG5cbmNvbnN0IFRJTEVTID0ge1xuXHRbSEVYXTogICAgbmV3IERyYXdIZXhhZ29uKCksXG5cdFtDSVJDTEVdOiBuZXcgRHJhd0NpcmNsZSgpLFxuXHRbU1FVQVJFXTogbmV3IERyYXdTcXVhcmUoKSxcbn07XG5cbmNvbnN0IFNoYXBlcyA9IG5ldyBEcmF3U2hhcGVzKCk7XG5cbmNvbnN0IERFRkFVTFRTID0ge1xuXHR0aWxlOiBIRVgsXG5cdGJvYXJkOiBIRVgsXG5cdG9yaWVudGF0aW9uOiBGTEFULFxuXHRuZWdhdGl2ZVRpbGVzOiB0cnVlLFxuXG5cdHRhcDogdXRpbHMubm9vcCxcblx0cHJlc3NTdGFydDogdXRpbHMubm9vcCxcblx0cHJlc3M6IHV0aWxzLm5vb3AsXG5cblx0ZHJhdzogdXRpbHMubm9vcCxcbn07XG5cbmZ1bmN0aW9uIHNlbGVjdENhcnRvZ3JhcGhlcihib2FyZCwgb3JpZW50YXRpb24pIHtcblx0c3dpdGNoIChib2FyZCkge1xuXHRcdGNhc2UgSEVYOlxuXHRcdFx0c3dpdGNoIChvcmllbnRhdGlvbikge1xuXHRcdFx0XHRjYXNlIEZMQVQ6IHJldHVybiBDYXJ0b2dyYXBoZXJGbGF0WFlaO1xuXHRcdFx0XHRjYXNlIFBPSU5UWTogcmV0dXJuIENhcnRvZ3JhcGhlclBvaW50eVhZWjtcblx0XHRcdH1cblx0XHRjYXNlIFNRVUFSRTpcblx0XHRcdHN3aXRjaCAob3JpZW50YXRpb24pIHtcblx0XHRcdFx0Y2FzZSBGTEFUOiByZXR1cm4gQ2FydG9ncmFwaGVyRmxhdFhZO1xuXHRcdFx0XHRjYXNlIFBPSU5UWTogcmV0dXJuIENhcnRvZ3JhcGhlclBvaW50eVhZO1xuXHRcdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXNzZWxsYXRlIHtcblx0c3RhdGljIGdldCBUSUxFX1NUWUxFUygpICAgICAgICB7cmV0dXJuIFRJTEVfU1RZTEVTfVxuXHRzdGF0aWMgZ2V0IEJPQVJEX1NUWUxFUygpICAgICAgIHtyZXR1cm4gQk9BUkRfU1RZTEVTfVxuXHRzdGF0aWMgZ2V0IE9SSUVOVEFUSU9OX1NUWUxFUygpIHtyZXR1cm4gT1JJRU5UQVRJT05fU1RZTEVTfVxuXHRzdGF0aWMgZ2V0IERSQVdfU1RZTEVTKCkgICAgICAgIHtyZXR1cm4gRFJBV19TVFlMRVN9XG5cblx0c3RhdGljIGdldCBUSUxFUygpICB7cmV0dXJuIFRJTEVTfVxuXHRzdGF0aWMgZ2V0IENlbGwoKSAgIHtyZXR1cm4gQ2VsbH1cblx0c3RhdGljIGdldCBTaGFwZXMoKSB7cmV0dXJuIFNoYXBlc31cblxuXHRzdGF0aWMgZ2V0IHV0aWxzKCkge3JldHVybiB1dGlsc31cblx0c3RhdGljIGdldCBmdW5reSgpIHtyZXR1cm4gZnVua3l9XG5cblx0Y29uc3RydWN0b3IgKHNldHRpbmdzKSB7XG5cdFx0W1xuXHRcdFx0J2NoZWNrU2V0dGluZ3MnLFxuXHRcdFx0J3RhcCcsXG5cdFx0XHQnZG91YmxldGFwJyxcblx0XHRcdCdwcmVzc1N0YXJ0Jyxcblx0XHRcdCdwcmVzcycsXG5cdFx0XHQnbW92ZScsXG5cdFx0XHQnem9vbScsXG5cdFx0XHQncGl4ZWxUb1RpbGUnLFxuXHRcdFx0J3RpbGVUb1BpeGVsJyxcblx0XHRcdCdnZXRUaWxlUG9pbnRzJyxcblx0XHRcdCdkcmF3Jyxcblx0XHRcdCdyZXNpemUnLFxuXHRcdFx0J3JlbWFwJyxcblx0XHRdLm1hcChtZXRob2QgPT4ge3RoaXNbbWV0aG9kXSA9IHRoaXNbbWV0aG9kXS5iaW5kKHRoaXMpfSk7XG5cblx0XHR0aGlzLmNoZWNrU2V0dGluZ3Moc2V0dGluZ3MpO1xuXG5cdFx0dGhpcy5za2V0Y2ggPSBuZXcgU2tldGNoKE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0ZWxlbWVudDogdGhpcy5zZXR0aW5ncy5lbGVtZW50LFxuXHRcdFx0ZHJhdzogdGhpcy5kcmF3LFxuXHRcdFx0cmVzaXplOiB0aGlzLnJlc2l6ZSxcblx0XHR9LCBmdW5reS5waWNrKHRoaXMuc2V0dGluZ3MsIFsnZHJhd0RlbGF5J10pKSk7XG5cblx0XHR0aGlzLm9uVGFwID0gbmV3IE9uVGFwKE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0ZWxlbWVudDogdGhpcy5zZXR0aW5ncy5lbGVtZW50LFxuXHRcdFx0dGFwOiB0aGlzLnRhcCxcblx0XHRcdGRvdWJsZXRhcDogdGhpcy5kb3VibGV0YXAsXG5cdFx0XHRwcmVzc1N0YXJ0OiB0aGlzLnByZXNzU3RhcnQsXG5cdFx0XHRwcmVzczogdGhpcy5wcmVzcyxcblx0XHRcdG1vdmU6IHRoaXMubW92ZSxcblx0XHRcdHpvb206IHRoaXMuem9vbSxcblx0XHR9LCBmdW5reS5waWNrKHRoaXMuc2V0dGluZ3MsIFsnZGVza3RvcFByZXNzJywgJ21vdmVUaHJlc2hvbGQnLCAnZG91YmxldGFwVGhyZXNob2xkJywgJ3ByZXNzVGhyZXNob2xkJywgJ3doZWVsRmFjdG9yJ10pKSk7XG5cblx0XHRjb25zdCBjYXJ0b2dyYXBoZXIgPSBzZWxlY3RDYXJ0b2dyYXBoZXIodGhpcy5zZXR0aW5ncy5ib2FyZCwgdGhpcy5zZXR0aW5ncy5vcmllbnRhdGlvbik7XG5cdFx0dGhpcy5jYXJ0b2dyYXBoZXIgPSBuZXcgY2FydG9ncmFwaGVyKE9iamVjdC5hc3NpZ24odGhpcy5za2V0Y2guZ2V0U2l6ZSgpLCBmdW5reS5waWNrKHRoaXMuc2V0dGluZ3MsIFtcblx0XHRcdCdjZW50ZXJYJyxcblx0XHRcdCdjZW50ZXJZJyxcblx0XHRcdCdoZWlnaHQnLFxuXHRcdFx0J3dpZHRoJyxcblx0XHRcdCdzY2FsZScsXG5cdFx0XHQnbmVnYXRpdmVUaWxlcycsXG5cdFx0XSkpKTtcblx0fVxuXG5cdGNoZWNrU2V0dGluZ3MgKHNldHRpbmdzKSB7XG5cblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVFMsIHNldHRpbmdzKTtcblx0XHR0aGlzLnNldHRpbmdzLmVsZW1lbnQgPSB0aGlzLnNldHRpbmdzLmVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHRoaXMuc2V0dGluZ3MuZWxlbWVudCA6XG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuc2V0dGluZ3MuZWxlbWVudCk7XG5cblx0XHRpZiAodGhpcy5zZXR0aW5ncy5uZWdhdGl2ZVRpbGVzKSB7XG5cdFx0XHRpZiAodGhpcy5zZXR0aW5ncy5oZWlnaHQgJiYgKHRoaXMuc2V0dGluZ3MuaGVpZ2h0ICUgMiA9PT0gMCkpIHtcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy5oZWlnaHQrKztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2V0dGluZ3Mud2lkdGggJiYgKHRoaXMuc2V0dGluZ3Mud2lkdGggJSAyID09PSAwKSkge1xuXHRcdFx0XHR0aGlzLnNldHRpbmdzLndpZHRoKys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGFwIChldmVudCkge1xuXHRcdGxldCBwb2ludCA9IG5ldyBQb2ludChldmVudC5vZmZzZXRYLCBldmVudC5vZmZzZXRZKTtcblx0XHRsZXQgdGlsZSA9IHRoaXMuY2FydG9ncmFwaGVyLnBpeGVsVG9UaWxlKHBvaW50KTtcblxuXHRcdGxldCB0YXAgPSB7XG5cdFx0XHRldmVudCxcblx0XHRcdHBvaW50LFxuXHRcdFx0dGlsZVxuXHRcdH07XG5cblx0XHR0aGlzLnNldHRpbmdzLnRhcCh0YXApO1xuXHR9XG5cblx0ZG91YmxldGFwIChldmVudCkge1xuXHRcdGNvbnNvbGUubG9nKCdET1VCTEVUQVAnLCBldmVudCk7XG5cdFx0bGV0IHBvaW50ID0gbmV3IFBvaW50KGV2ZW50Lm9mZnNldFgsIGV2ZW50Lm9mZnNldFkpO1xuXHRcdGxldCB0aWxlID0gdGhpcy5jYXJ0b2dyYXBoZXIucGl4ZWxUb1RpbGUocG9pbnQpO1xuXG5cdFx0bGV0IHRhcCA9IHtcblx0XHRcdGV2ZW50LFxuXHRcdFx0cG9pbnQsXG5cdFx0XHR0aWxlXG5cdFx0fTtcblxuXHRcdGNvbnNvbGUubG9nKHRhcCk7XG5cdH1cblxuXHRwcmVzc1N0YXJ0IChldmVudCkge1xuXHRcdGxldCBwb2ludCA9IG5ldyBQb2ludChldmVudC5vZmZzZXRYLCBldmVudC5vZmZzZXRZKTtcblx0XHRsZXQgdGlsZSA9IHRoaXMuY2FydG9ncmFwaGVyLnBpeGVsVG9UaWxlKHBvaW50KTtcblxuXHRcdGxldCB0YXAgPSB7XG5cdFx0XHRldmVudCxcblx0XHRcdHBvaW50LFxuXHRcdFx0dGlsZVxuXHRcdH07XG5cblx0XHR0aGlzLnNldHRpbmdzLnByZXNzU3RhcnQodGFwKTtcblx0fVxuXG5cdHByZXNzIChldmVudCkge1xuXHRcdGxldCBwb2ludCA9IG5ldyBQb2ludChldmVudC5vZmZzZXRYLCBldmVudC5vZmZzZXRZKTtcblx0XHRsZXQgdGlsZSA9IHRoaXMuY2FydG9ncmFwaGVyLnBpeGVsVG9UaWxlKHBvaW50KTtcblxuXHRcdGxldCB0YXAgPSB7XG5cdFx0XHRldmVudCxcblx0XHRcdHBvaW50LFxuXHRcdFx0dGlsZVxuXHRcdH07XG5cblx0XHR0aGlzLnNldHRpbmdzLnByZXNzKHRhcCk7XG5cdH1cblxuXHRtb3ZlIChldmVudCkge1xuXHRcdHJldHVybiB0aGlzLmNhcnRvZ3JhcGhlci5tb3ZlKGV2ZW50KTtcblx0fVxuXG5cdHpvb20gKGV2ZW50KSB7XG5cdFx0dGhpcy5jYXJ0b2dyYXBoZXIuem9vbShldmVudCk7XG5cdH1cblxuXHRwaXhlbFRvVGlsZSAoeCwgeSkge1xuXHRcdHJldHVybiB0aGlzLmNhcnRvZ3JhcGhlci5waXhlbFRvVGlsZSh4LCB5KTtcblx0fVxuXG5cdHRpbGVUb1BpeGVsICh4LCB5LCB6KSB7XG5cdFx0cmV0dXJuIHRoaXMuY2FydG9ncmFwaGVyLnRpbGVUb1BpeGVsKHgsIHksIHopO1xuXHR9XG5cblx0Z2V0VGlsZVBvaW50cyAoe3VwcGVyTGVmdFgsIHVwcGVyTGVmdFksIGxvd2VyUmlnaHRYLCBsb3dlclJpZ2h0WX0pIHtcblx0XHRjb25zdCB1cHBlckxlZnQgPSAgbmV3IFBvaW50KHVwcGVyTGVmdFgsIHVwcGVyTGVmdFkpO1xuXHRcdGNvbnN0IHVwcGVyUmlnaHQgPSBuZXcgUG9pbnQobG93ZXJSaWdodFgsIDApO1xuXHRcdGNvbnN0IGxvd2VyTGVmdCA9ICBuZXcgUG9pbnQoMCwgbG93ZXJSaWdodFkpO1xuXHRcdGNvbnN0IGxvd2VyUmlnaHQgPSBuZXcgUG9pbnQobG93ZXJSaWdodFgsIGxvd2VyUmlnaHRZKTtcblxuXHRcdHJldHVybiBmdW5reS5mbGF0dGVuKHRoaXMuY2FydG9ncmFwaGVyLmJvdW5kaW5nQm94KHVwcGVyTGVmdCwgdXBwZXJSaWdodCwgbG93ZXJMZWZ0LCBsb3dlclJpZ2h0KSk7XG5cdH1cblxuXHRkcmF3IChjb250ZXh0KSB7XG5cdFx0Y29uc3QgY2FudmFzID0gY29udGV4dC5jYW52YXM7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblx0XHRjb25zdCB3aWR0aCA9IGNhbnZhcy53aWR0aDtcblxuXHRcdHRoaXMuc2V0dGluZ3MuZHJhdyh7XG5cdFx0XHRjb250ZXh0LFxuXG5cdFx0XHRoZWlnaHQsIHdpZHRoLFxuXHRcdFx0c2NhbGU6IHRoaXMuY2FydG9ncmFwaGVyLmdldFNjYWxlKCksXG5cblx0XHRcdGxhc3ROb3c6IGNvbnRleHQubGFzdFVUQyxcblx0XHRcdG5vdzogY29udGV4dC51dGMsXG5cblx0XHRcdHRpbGVQb2ludHM6IHRoaXMuZ2V0VGlsZVBvaW50cyh7XG5cdFx0XHRcdHVwcGVyTGVmdFg6IDAsXG5cdFx0XHRcdHVwcGVyTGVmdFk6IDAsXG5cdFx0XHRcdGxvd2VyUmlnaHRYOiB3aWR0aCxcblx0XHRcdFx0bG93ZXJSaWdodFk6IGhlaWdodFxuXHRcdFx0fSksXG5cdFx0fSk7XG5cdH1cblxuXHRyZXNpemUgKGV2ZW50KSB7XG5cdFx0Y29uc3Qgb3JpZ2luWCA9IHRoaXMuY2FydG9ncmFwaGVyLmdldE9yaWdpblgoKTtcblx0XHRjb25zdCBvcmlnaW5ZID0gdGhpcy5jYXJ0b2dyYXBoZXIuZ2V0T3JpZ2luWSgpO1xuXHRcdGNvbnN0IHNjYWxlT3JpZyA9IHRoaXMuY2FydG9ncmFwaGVyLmdldFNjYWxlKCk7XG5cblx0XHRjb25zdCBtb3ZlRm9yUmVzaXplID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQsIHtcblx0XHRcdGRlbHRhWDogZXZlbnQuZGVsdGFYIC8gMixcblx0XHRcdGRlbHRhWTogZXZlbnQuZGVsdGFZIC8gMixcblx0XHR9KTtcblxuXHRcdHRoaXMubW92ZShtb3ZlRm9yUmVzaXplKTtcblxuXHRcdHRoaXMuY2FydG9ncmFwaGVyLmNoZWNrU2NhbGUoZXZlbnQuaGVpZ2h0LCBldmVudC53aWR0aCk7XG5cblx0XHRjb25zdCBjZW50ZXJYID0gZXZlbnQud2lkdGggLyAyO1xuXHRcdGNvbnN0IGNlbnRlclkgPSBldmVudC5oZWlnaHQgLyAyO1xuXHRcdGNvbnN0IHNjYWxlTmV3ID0gdGhpcy5jYXJ0b2dyYXBoZXIuZ2V0U2NhbGUoKTtcblxuXHRcdGNvbnN0IG1vdmVGb3JTY2FsZSA9IHtcblx0XHRcdGRlbHRhWDogKCgoY2VudGVyWCAtIG9yaWdpblgpIC8gc2NhbGVPcmlnKSAqIChzY2FsZU9yaWcgLSBzY2FsZU5ldykpLFxuXHRcdFx0ZGVsdGFZOiAoKChjZW50ZXJZIC0gb3JpZ2luWSkgLyBzY2FsZU9yaWcpICogKHNjYWxlT3JpZyAtIHNjYWxlTmV3KSksXG5cdFx0XHRoZWlnaHQ6IGV2ZW50LmhlaWdodCxcblx0XHRcdHdpZHRoOiBldmVudC53aWR0aCxcblx0XHR9O1xuXG5cdFx0dGhpcy5tb3ZlKG1vdmVGb3JTY2FsZSk7XG5cdH1cblxuXHRyZW1hcCAoe2hlaWdodCwgd2lkdGh9KSB7XG5cdFx0dGhpcy5jYXJ0b2dyYXBoZXIucmVtYXAoT2JqZWN0LmFzc2lnbih7XG5cdFx0XHRoZWlnaHQsXG5cdFx0XHR3aWR0aCxcblx0XHR9LCB0aGlzLnNrZXRjaC5nZXRTaXplKCkpKTtcblx0fVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|