/
home
/
henzagold
/
branch
/
export
/
File Upload :
llllll
Current File: /home/henzagold/branch/export/22.js
((typeof self !== 'undefined' ? self : this)["webpackJsonp"] = (typeof self !== 'undefined' ? self : this)["webpackJsonp"] || []).push([[22],{ /***/ "./node_modules/apexcharts/dist/apexcharts.min.js": /*!********************************************************!*\ !*** ./node_modules/apexcharts/dist/apexcharts.min.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * ApexCharts v3.36.0\n * (c) 2018-2022 ApexCharts\n * Released under the MIT License.\n */\n!function(t,e){ true?module.exports=e():undefined}(this,(function(){\"use strict\";function t(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,a)}return i}function e(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?t(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(t){return i=\"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},i(t)}function a(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function s(t,e){for(var i=0;i<e.length;i++){var a=e[i];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(t,a.key,a)}}function r(t,e,i){return e&&s(t.prototype,e),i&&s(t,i),t}function o(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function n(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function\");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&h(t,e)}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function h(t,e){return h=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},h(t,e)}function c(t,e){if(e&&(\"object\"==typeof e||\"function\"==typeof e))return e;if(void 0!==e)throw new TypeError(\"Derived constructors may only return object or undefined\");return function(t){if(void 0===t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return t}(t)}function d(t){var e=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,a=l(t);if(e){var s=l(this).constructor;i=Reflect.construct(a,arguments,s)}else i=a.apply(this,arguments);return c(this,i)}}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var i=null==t?null:\"undefined\"!=typeof Symbol&&t[Symbol.iterator]||t[\"@@iterator\"];if(null==i)return;var a,s,r=[],o=!0,n=!1;try{for(i=i.call(t);!(o=(a=i.next()).done)&&(r.push(a.value),!e||r.length!==e);o=!0);}catch(t){n=!0,s=t}finally{try{o||null==i.return||i.return()}finally{if(n)throw s}}return r}(t,e)||f(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function u(t){return function(t){if(Array.isArray(t))return p(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||f(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function f(t,e){if(t){if(\"string\"==typeof t)return p(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===i&&t.constructor&&(i=t.constructor.name),\"Map\"===i||\"Set\"===i?Array.from(t):\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?p(t,e):void 0}}function p(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,a=new Array(e);i<e;i++)a[i]=t[i];return a}var x=function(){function t(){a(this,t)}return r(t,[{key:\"shadeRGBColor\",value:function(t,e){var i=e.split(\",\"),a=t<0?0:255,s=t<0?-1*t:t,r=parseInt(i[0].slice(4),10),o=parseInt(i[1],10),n=parseInt(i[2],10);return\"rgb(\"+(Math.round((a-r)*s)+r)+\",\"+(Math.round((a-o)*s)+o)+\",\"+(Math.round((a-n)*s)+n)+\")\"}},{key:\"shadeHexColor\",value:function(t,e){var i=parseInt(e.slice(1),16),a=t<0?0:255,s=t<0?-1*t:t,r=i>>16,o=i>>8&255,n=255&i;return\"#\"+(16777216+65536*(Math.round((a-r)*s)+r)+256*(Math.round((a-o)*s)+o)+(Math.round((a-n)*s)+n)).toString(16).slice(1)}},{key:\"shadeColor\",value:function(e,i){return t.isColorHex(i)?this.shadeHexColor(e,i):this.shadeRGBColor(e,i)}}],[{key:\"bind\",value:function(t,e){return function(){return t.apply(e,arguments)}}},{key:\"isObject\",value:function(t){return t&&\"object\"===i(t)&&!Array.isArray(t)&&null!=t}},{key:\"is\",value:function(t,e){return Object.prototype.toString.call(e)===\"[object \"+t+\"]\"}},{key:\"listToArray\",value:function(t){var e,i=[];for(e=0;e<t.length;e++)i[e]=t[e];return i}},{key:\"extend\",value:function(t,e){var i=this;\"function\"!=typeof Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e=Object(t),i=1;i<arguments.length;i++){var a=arguments[i];if(null!=a)for(var s in a)a.hasOwnProperty(s)&&(e[s]=a[s])}return e});var a=Object.assign({},t);return this.isObject(t)&&this.isObject(e)&&Object.keys(e).forEach((function(s){i.isObject(e[s])&&s in t?a[s]=i.extend(t[s],e[s]):Object.assign(a,o({},s,e[s]))})),a}},{key:\"extendArray\",value:function(e,i){var a=[];return e.map((function(e){a.push(t.extend(i,e))})),e=a}},{key:\"monthMod\",value:function(t){return t%12}},{key:\"clone\",value:function(e){if(t.is(\"Array\",e)){for(var a=[],s=0;s<e.length;s++)a[s]=this.clone(e[s]);return a}if(t.is(\"Null\",e))return null;if(t.is(\"Date\",e))return e;if(\"object\"===i(e)){var r={};for(var o in e)e.hasOwnProperty(o)&&(r[o]=this.clone(e[o]));return r}return e}},{key:\"log10\",value:function(t){return Math.log(t)/Math.LN10}},{key:\"roundToBase10\",value:function(t){return Math.pow(10,Math.floor(Math.log10(t)))}},{key:\"roundToBase\",value:function(t,e){return Math.pow(e,Math.floor(Math.log(t)/Math.log(e)))}},{key:\"parseNumber\",value:function(t){return null===t?t:parseFloat(t)}},{key:\"randomId\",value:function(){return(Math.random()+1).toString(36).substring(4)}},{key:\"noExponents\",value:function(t){var e=String(t).split(/[eE]/);if(1===e.length)return e[0];var i=\"\",a=t<0?\"-\":\"\",s=e[0].replace(\".\",\"\"),r=Number(e[1])+1;if(r<0){for(i=a+\"0.\";r++;)i+=\"0\";return i+s.replace(/^-/,\"\")}for(r-=s.length;r--;)i+=\"0\";return s+i}},{key:\"getDimensions\",value:function(t){var e=getComputedStyle(t,null),i=t.clientHeight,a=t.clientWidth;return i-=parseFloat(e.paddingTop)+parseFloat(e.paddingBottom),[a-=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight),i]}},{key:\"getBoundingClientRect\",value:function(t){var e=t.getBoundingClientRect();return{top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:t.clientWidth,height:t.clientHeight,x:e.left,y:e.top}}},{key:\"getLargestStringFromArr\",value:function(t){return t.reduce((function(t,e){return Array.isArray(e)&&(e=e.reduce((function(t,e){return t.length>e.length?t:e}))),t.length>e.length?t:e}),0)}},{key:\"hexToRgba\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"#999999\",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.6;\"#\"!==t.substring(0,1)&&(t=\"#999999\");var i=t.replace(\"#\",\"\");i=i.match(new RegExp(\"(.{\"+i.length/3+\"})\",\"g\"));for(var a=0;a<i.length;a++)i[a]=parseInt(1===i[a].length?i[a]+i[a]:i[a],16);return void 0!==e&&i.push(e),\"rgba(\"+i.join(\",\")+\")\"}},{key:\"getOpacityFromRGBA\",value:function(t){return parseFloat(t.replace(/^.*,(.+)\\)/,\"$1\"))}},{key:\"rgb2hex\",value:function(t){return(t=t.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i))&&4===t.length?\"#\"+(\"0\"+parseInt(t[1],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[2],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[3],10).toString(16)).slice(-2):\"\"}},{key:\"isColorHex\",value:function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(t)}},{key:\"getPolygonPos\",value:function(t,e){for(var i=[],a=2*Math.PI/e,s=0;s<e;s++){var r={};r.x=t*Math.sin(s*a),r.y=-t*Math.cos(s*a),i.push(r)}return i}},{key:\"polarToCartesian\",value:function(t,e,i,a){var s=(a-90)*Math.PI/180;return{x:t+i*Math.cos(s),y:e+i*Math.sin(s)}}},{key:\"escapeString\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"x\",i=t.toString().slice();return i=i.replace(/[` ~!@#$%^&*()|+\\=?;:'\",.<>{}[\\]\\\\/]/gi,e)}},{key:\"negToZero\",value:function(t){return t<0?0:t}},{key:\"moveIndexInArray\",value:function(t,e,i){if(i>=t.length)for(var a=i-t.length+1;a--;)t.push(void 0);return t.splice(i,0,t.splice(e,1)[0]),t}},{key:\"extractNumber\",value:function(t){return parseFloat(t.replace(/[^\\d.]*/g,\"\"))}},{key:\"findAncestor\",value:function(t,e){for(;(t=t.parentElement)&&!t.classList.contains(e););return t}},{key:\"setELstyles\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t.style.key=e[i])}},{key:\"isNumber\",value:function(t){return!isNaN(t)&&parseFloat(Number(t))===t&&!isNaN(parseInt(t,10))}},{key:\"isFloat\",value:function(t){return Number(t)===t&&t%1!=0}},{key:\"isSafari\",value:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}},{key:\"isFirefox\",value:function(){return navigator.userAgent.toLowerCase().indexOf(\"firefox\")>-1}},{key:\"isIE11\",value:function(){if(-1!==window.navigator.userAgent.indexOf(\"MSIE\")||window.navigator.appVersion.indexOf(\"Trident/\")>-1)return!0}},{key:\"isIE\",value:function(){var t=window.navigator.userAgent,e=t.indexOf(\"MSIE \");if(e>0)return parseInt(t.substring(e+5,t.indexOf(\".\",e)),10);if(t.indexOf(\"Trident/\")>0){var i=t.indexOf(\"rv:\");return parseInt(t.substring(i+3,t.indexOf(\".\",i)),10)}var a=t.indexOf(\"Edge/\");return a>0&&parseInt(t.substring(a+5,t.indexOf(\".\",a)),10)}}]),t}(),b=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.setEasingFunctions()}return r(t,[{key:\"setEasingFunctions\",value:function(){var t;if(!this.w.globals.easing){switch(this.w.config.chart.animations.easing){case\"linear\":t=\"-\";break;case\"easein\":t=\"<\";break;case\"easeout\":t=\">\";break;case\"easeinout\":default:t=\"<>\";break;case\"swing\":t=function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1};break;case\"bounce\":t=function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375};break;case\"elastic\":t=function(t){return t===!!t?t:Math.pow(2,-10*t)*Math.sin((t-.075)*(2*Math.PI)/.3)+1}}this.w.globals.easing=t}}},{key:\"animateLine\",value:function(t,e,i,a){t.attr(e).animate(a).attr(i)}},{key:\"animateMarker\",value:function(t,e,i,a,s,r){e||(e=0),t.attr({r:e,width:e,height:e}).animate(a,s).attr({r:i,width:i.width,height:i.height}).afterAll((function(){r()}))}},{key:\"animateCircle\",value:function(t,e,i,a,s){t.attr({r:e.r,cx:e.cx,cy:e.cy}).animate(a,s).attr({r:i.r,cx:i.cx,cy:i.cy})}},{key:\"animateRect\",value:function(t,e,i,a,s){t.attr(e).animate(a).attr(i).afterAll((function(){return s()}))}},{key:\"animatePathsGradually\",value:function(t){var e=t.el,i=t.realIndex,a=t.j,s=t.fill,r=t.pathFrom,o=t.pathTo,n=t.speed,l=t.delay,h=this.w,c=0;h.config.chart.animations.animateGradually.enabled&&(c=h.config.chart.animations.animateGradually.delay),h.config.chart.animations.dynamicAnimation.enabled&&h.globals.dataChanged&&\"bar\"!==h.config.chart.type&&(c=0),this.morphSVG(e,i,a,\"line\"!==h.config.chart.type||h.globals.comboCharts?s:\"stroke\",r,o,n,l*c)}},{key:\"showDelayedElements\",value:function(){this.w.globals.delayedElements.forEach((function(t){t.el.classList.remove(\"apexcharts-element-hidden\")}))}},{key:\"animationCompleted\",value:function(t){var e=this.w;e.globals.animationEnded||(e.globals.animationEnded=!0,this.showDelayedElements(),\"function\"==typeof e.config.chart.events.animationEnd&&e.config.chart.events.animationEnd(this.ctx,{el:t,w:e}))}},{key:\"morphSVG\",value:function(t,e,i,a,s,r,o,n){var l=this,h=this.w;s||(s=t.attr(\"pathFrom\")),r||(r=t.attr(\"pathTo\"));var c=function(t){return\"radar\"===h.config.chart.type&&(o=1),\"M 0 \".concat(h.globals.gridHeight)};(!s||s.indexOf(\"undefined\")>-1||s.indexOf(\"NaN\")>-1)&&(s=c()),(!r||r.indexOf(\"undefined\")>-1||r.indexOf(\"NaN\")>-1)&&(r=c()),h.globals.shouldAnimate||(o=1),t.plot(s).animate(1,h.globals.easing,n).plot(s).animate(o,h.globals.easing,n).plot(r).afterAll((function(){x.isNumber(i)?i===h.globals.series[h.globals.maxValsInArrayIndex].length-2&&h.globals.shouldAnimate&&l.animationCompleted(t):\"none\"!==a&&h.globals.shouldAnimate&&(!h.globals.comboCharts&&e===h.globals.series.length-1||h.globals.comboCharts)&&l.animationCompleted(t),l.showDelayedElements()}))}}]),t}(),v=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"getDefaultFilter\",value:function(t,e){var i=this.w;t.unfilter(!0),(new window.SVG.Filter).size(\"120%\",\"180%\",\"-5%\",\"-40%\"),\"none\"!==i.config.states.normal.filter?this.applyFilter(t,e,i.config.states.normal.filter.type,i.config.states.normal.filter.value):i.config.chart.dropShadow.enabled&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\"addNormalFilter\",value:function(t,e){var i=this.w;i.config.chart.dropShadow.enabled&&!t.node.classList.contains(\"apexcharts-marker\")&&this.dropShadow(t,i.config.chart.dropShadow,e)}},{key:\"addLightenFilter\",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\"linear\",slope:1.5,intercept:r}})})),t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)}},{key:\"addDarkenFilter\",value:function(t,e,i){var a=this,s=this.w,r=i.intensity;t.unfilter(!0);new window.SVG.Filter;t.filter((function(t){var i=s.config.chart.dropShadow;(i.enabled?a.addShadow(t,e,i):t).componentTransfer({rgb:{type:\"linear\",slope:r}})})),t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)}},{key:\"applyFilter\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5;switch(i){case\"none\":this.addNormalFilter(t,e);break;case\"lighten\":this.addLightenFilter(t,e,{intensity:a});break;case\"darken\":this.addDarkenFilter(t,e,{intensity:a})}}},{key:\"addShadow\",value:function(t,e,i){var a=i.blur,s=i.top,r=i.left,o=i.color,n=i.opacity,l=t.flood(Array.isArray(o)?o[e]:o,n).composite(t.sourceAlpha,\"in\").offset(r,s).gaussianBlur(a).merge(t.source);return t.blend(t.source,l)}},{key:\"dropShadow\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=e.top,s=e.left,r=e.blur,o=e.color,n=e.opacity,l=e.noUserSpaceOnUse,h=this.w;return t.unfilter(!0),x.isIE()&&\"radialBar\"===h.config.chart.type||(o=Array.isArray(o)?o[i]:o,t.filter((function(t){var e=null;e=x.isSafari()||x.isFirefox()||x.isIE()?t.flood(o,n).composite(t.sourceAlpha,\"in\").offset(s,a).gaussianBlur(r):t.flood(o,n).composite(t.sourceAlpha,\"in\").offset(s,a).gaussianBlur(r).merge(t.source),t.blend(t.source,e)})),l||t.filterer.node.setAttribute(\"filterUnits\",\"userSpaceOnUse\"),this._scaleFilterSize(t.filterer.node)),t}},{key:\"setSelectionFilter\",value:function(t,e,i){var a=this.w;if(void 0!==a.globals.selectedDataPoints[e]&&a.globals.selectedDataPoints[e].indexOf(i)>-1){t.node.setAttribute(\"selected\",!0);var s=a.config.states.active.filter;\"none\"!==s&&this.applyFilter(t,e,s.type,s.value)}}},{key:\"_scaleFilterSize\",value:function(t){!function(e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}({width:\"200%\",height:\"200%\",x:\"-50%\",y:\"-50%\"})}}]),t}(),m=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawLine\",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:\"#a8a8a8\",r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,n=arguments.length>7&&void 0!==arguments[7]?arguments[7]:\"butt\",l=this.w,h=l.globals.dom.Paper.line().attr({x1:t,y1:e,x2:i,y2:a,stroke:s,\"stroke-dasharray\":r,\"stroke-width\":o,\"stroke-linecap\":n});return h}},{key:\"drawRect\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"#fefefe\",o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,n=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:null,h=arguments.length>9&&void 0!==arguments[9]?arguments[9]:0,c=this.w,d=c.globals.dom.Paper.rect();return d.attr({x:t,y:e,width:i>0?i:0,height:a>0?a:0,rx:s,ry:s,opacity:o,\"stroke-width\":null!==n?n:0,stroke:null!==l?l:\"none\",\"stroke-dasharray\":h}),d.node.setAttribute(\"fill\",r),d}},{key:\"drawPolygon\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"#e1e1e1\",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"none\",s=this.w,r=s.globals.dom.Paper.polygon(t).attr({fill:a,stroke:e,\"stroke-width\":i});return r}},{key:\"drawCircle\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;t<0&&(t=0);var a=i.globals.dom.Paper.circle(2*t);return null!==e&&a.attr(e),a}},{key:\"drawPath\",value:function(t){var e=t.d,i=void 0===e?\"\":e,a=t.stroke,s=void 0===a?\"#a8a8a8\":a,r=t.strokeWidth,o=void 0===r?1:r,n=t.fill,l=t.fillOpacity,h=void 0===l?1:l,c=t.strokeOpacity,d=void 0===c?1:c,g=t.classes,u=t.strokeLinecap,f=void 0===u?null:u,p=t.strokeDashArray,x=void 0===p?0:p,b=this.w;return null===f&&(f=b.config.stroke.lineCap),(i.indexOf(\"undefined\")>-1||i.indexOf(\"NaN\")>-1)&&(i=\"M 0 \".concat(b.globals.gridHeight)),b.globals.dom.Paper.path(i).attr({fill:n,\"fill-opacity\":h,stroke:s,\"stroke-opacity\":d,\"stroke-linecap\":f,\"stroke-width\":o,\"stroke-dasharray\":x,class:g})}},{key:\"group\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=e.globals.dom.Paper.group();return null!==t&&i.attr(t),i}},{key:\"move\",value:function(t,e){var i=[\"M\",t,e].join(\" \");return i}},{key:\"line\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=null;return null===i?a=[\"L\",t,e].join(\" \"):\"H\"===i?a=[\"H\",t].join(\" \"):\"V\"===i&&(a=[\"V\",e].join(\" \")),a}},{key:\"curve\",value:function(t,e,i,a,s,r){var o=[\"C\",t,e,i,a,s,r].join(\" \");return o}},{key:\"quadraticCurve\",value:function(t,e,i,a){return[\"Q\",t,e,i,a].join(\" \")}},{key:\"arc\",value:function(t,e,i,a,s,r,o){var n=arguments.length>7&&void 0!==arguments[7]&&arguments[7],l=\"A\";n&&(l=\"a\");var h=[l,t,e,i,a,s,r,o].join(\" \");return h}},{key:\"renderPaths\",value:function(t){var i,a=t.j,s=t.realIndex,r=t.pathFrom,o=t.pathTo,n=t.stroke,l=t.strokeWidth,h=t.strokeLinecap,c=t.fill,d=t.animationDelay,g=t.initialSpeed,u=t.dataChangeSpeed,f=t.className,p=t.shouldClipToGrid,x=void 0===p||p,m=t.bindEventsOnPaths,y=void 0===m||m,w=t.drawShadow,k=void 0===w||w,A=this.w,S=new v(this.ctx),C=new b(this.ctx),L=this.w.config.chart.animations.enabled,P=L&&this.w.config.chart.animations.dynamicAnimation.enabled,T=!!(L&&!A.globals.resized||P&&A.globals.dataChanged&&A.globals.shouldAnimate);T?i=r:(i=o,A.globals.animationEnded=!0);var M=A.config.stroke.dashArray,I=0;I=Array.isArray(M)?M[s]:A.config.stroke.dashArray;var X=this.drawPath({d:i,stroke:n,strokeWidth:l,fill:c,fillOpacity:1,classes:f,strokeLinecap:h,strokeDashArray:I});if(X.attr(\"index\",s),x&&X.attr({\"clip-path\":\"url(#gridRectMask\".concat(A.globals.cuid,\")\")}),\"none\"!==A.config.states.normal.filter.type)S.getDefaultFilter(X,s);else if(A.config.chart.dropShadow.enabled&&k&&(!A.config.chart.dropShadow.enabledOnSeries||A.config.chart.dropShadow.enabledOnSeries&&-1!==A.config.chart.dropShadow.enabledOnSeries.indexOf(s))){var z=A.config.chart.dropShadow;S.dropShadow(X,z,s)}y&&(X.node.addEventListener(\"mouseenter\",this.pathMouseEnter.bind(this,X)),X.node.addEventListener(\"mouseleave\",this.pathMouseLeave.bind(this,X)),X.node.addEventListener(\"mousedown\",this.pathMouseDown.bind(this,X))),X.attr({pathTo:o,pathFrom:r});var E={el:X,j:a,realIndex:s,pathFrom:r,pathTo:o,fill:c,strokeWidth:l,delay:d};return!L||A.globals.resized||A.globals.dataChanged?!A.globals.resized&&A.globals.dataChanged||C.showDelayedElements():C.animatePathsGradually(e(e({},E),{},{speed:g})),A.globals.dataChanged&&P&&T&&C.animatePathsGradually(e(e({},E),{},{speed:u})),X}},{key:\"drawPattern\",value:function(t,e,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"#a8a8a8\",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=this.w,o=r.globals.dom.Paper.pattern(e,i,(function(r){\"horizontalLines\"===t?r.line(0,0,i,0).stroke({color:a,width:s+1}):\"verticalLines\"===t?r.line(0,0,0,e).stroke({color:a,width:s+1}):\"slantedLines\"===t?r.line(0,0,e,i).stroke({color:a,width:s}):\"squares\"===t?r.rect(e,i).fill(\"none\").stroke({color:a,width:s}):\"circles\"===t&&r.circle(e).fill(\"none\").stroke({color:a,width:s})}));return o}},{key:\"drawGradient\",value:function(t,e,i,a,s){var r,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,n=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null,h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:0,c=this.w;e.length<9&&0===e.indexOf(\"#\")&&(e=x.hexToRgba(e,a)),i.length<9&&0===i.indexOf(\"#\")&&(i=x.hexToRgba(i,s));var d=0,g=1,u=1,f=null;null!==n&&(d=void 0!==n[0]?n[0]/100:0,g=void 0!==n[1]?n[1]/100:1,u=void 0!==n[2]?n[2]/100:1,f=void 0!==n[3]?n[3]/100:null);var p=!(\"donut\"!==c.config.chart.type&&\"pie\"!==c.config.chart.type&&\"polarArea\"!==c.config.chart.type&&\"bubble\"!==c.config.chart.type);if(r=null===l||0===l.length?c.globals.dom.Paper.gradient(p?\"radial\":\"linear\",(function(t){t.at(d,e,a),t.at(g,i,s),t.at(u,i,s),null!==f&&t.at(f,e,a)})):c.globals.dom.Paper.gradient(p?\"radial\":\"linear\",(function(t){(Array.isArray(l[h])?l[h]:l).forEach((function(e){t.at(e.offset/100,e.color,e.opacity)}))})),p){var b=c.globals.gridWidth/2,v=c.globals.gridHeight/2;\"bubble\"!==c.config.chart.type?r.attr({gradientUnits:\"userSpaceOnUse\",cx:b,cy:v,r:o}):r.attr({cx:.5,cy:.5,r:.8,fx:.2,fy:.2})}else\"vertical\"===t?r.from(0,0).to(0,1):\"diagonal\"===t?r.from(0,0).to(1,1):\"horizontal\"===t?r.from(0,1).to(1,1):\"diagonal2\"===t&&r.from(1,0).to(0,1);return r}},{key:\"getTextBasedOnMaxWidth\",value:function(t){var e=t.text,i=t.maxWidth,a=t.fontSize,s=t.fontFamily,r=this.getTextRects(e,a,s),o=r.width/e.length,n=Math.floor(i/o);return i<r.width?e.slice(0,n-3)+\"...\":e}},{key:\"drawText\",value:function(t){var i=this,a=t.x,s=t.y,r=t.text,o=t.textAnchor,n=t.fontSize,l=t.fontFamily,h=t.fontWeight,c=t.foreColor,d=t.opacity,g=t.maxWidth,u=t.cssClass,f=void 0===u?\"\":u,p=t.isPlainText,x=void 0===p||p,b=this.w;void 0===r&&(r=\"\");var v=r;o||(o=\"start\"),c&&c.length||(c=b.config.chart.foreColor),l=l||b.config.chart.fontFamily,h=h||\"regular\";var m,y={maxWidth:g,fontSize:n=n||\"11px\",fontFamily:l};return Array.isArray(r)?m=b.globals.dom.Paper.text((function(t){for(var a=0;a<r.length;a++)v=r[a],g&&(v=i.getTextBasedOnMaxWidth(e({text:r[a]},y))),0===a?t.tspan(v):t.tspan(v).newLine()})):(g&&(v=this.getTextBasedOnMaxWidth(e({text:r},y))),m=x?b.globals.dom.Paper.plain(r):b.globals.dom.Paper.text((function(t){return t.tspan(v)}))),m.attr({x:a,y:s,\"text-anchor\":o,\"dominant-baseline\":\"auto\",\"font-size\":n,\"font-family\":l,\"font-weight\":h,fill:c,class:\"apexcharts-text \"+f}),m.node.style.fontFamily=l,m.node.style.opacity=d,m}},{key:\"drawMarker\",value:function(t,e,i){t=t||0;var a=i.pSize||0,s=null;if(\"square\"===i.shape||\"rect\"===i.shape){var r=void 0===i.pRadius?a/2:i.pRadius;null!==e&&a||(a=0,r=0);var o=1.2*a+r,n=this.drawRect(o,o,o,o,r);n.attr({x:t-o/2,y:e-o/2,cx:t,cy:e,class:i.class?i.class:\"\",fill:i.pointFillColor,\"fill-opacity\":i.pointFillOpacity?i.pointFillOpacity:1,stroke:i.pointStrokeColor,\"stroke-width\":i.pointStrokeWidth?i.pointStrokeWidth:0,\"stroke-opacity\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}),s=n}else\"circle\"!==i.shape&&i.shape||(x.isNumber(e)||(a=0,e=0),s=this.drawCircle(a,{cx:t,cy:e,class:i.class?i.class:\"\",stroke:i.pointStrokeColor,fill:i.pointFillColor,\"fill-opacity\":i.pointFillOpacity?i.pointFillOpacity:1,\"stroke-width\":i.pointStrokeWidth?i.pointStrokeWidth:0,\"stroke-opacity\":i.pointStrokeOpacity?i.pointStrokeOpacity:1}));return s}},{key:\"pathMouseEnter\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=parseInt(t.node.getAttribute(\"index\"),10),r=parseInt(t.node.getAttribute(\"j\"),10);if(\"function\"==typeof i.config.chart.events.dataPointMouseEnter&&i.config.chart.events.dataPointMouseEnter(e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}),this.ctx.events.fireEvent(\"dataPointMouseEnter\",[e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}]),(\"none\"===i.config.states.active.filter.type||\"true\"!==t.node.getAttribute(\"selected\"))&&\"none\"!==i.config.states.hover.filter.type&&!i.globals.isTouchDevice){var o=i.config.states.hover.filter;a.applyFilter(t,s,o.type,o.value)}}},{key:\"pathMouseLeave\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=parseInt(t.node.getAttribute(\"index\"),10),r=parseInt(t.node.getAttribute(\"j\"),10);\"function\"==typeof i.config.chart.events.dataPointMouseLeave&&i.config.chart.events.dataPointMouseLeave(e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}),this.ctx.events.fireEvent(\"dataPointMouseLeave\",[e,this.ctx,{seriesIndex:s,dataPointIndex:r,w:i}]),\"none\"!==i.config.states.active.filter.type&&\"true\"===t.node.getAttribute(\"selected\")||\"none\"!==i.config.states.hover.filter.type&&a.getDefaultFilter(t,s)}},{key:\"pathMouseDown\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=parseInt(t.node.getAttribute(\"index\"),10),r=parseInt(t.node.getAttribute(\"j\"),10),o=\"false\";if(\"true\"===t.node.getAttribute(\"selected\")){if(t.node.setAttribute(\"selected\",\"false\"),i.globals.selectedDataPoints[s].indexOf(r)>-1){var n=i.globals.selectedDataPoints[s].indexOf(r);i.globals.selectedDataPoints[s].splice(n,1)}}else{if(!i.config.states.active.allowMultipleDataPointsSelection&&i.globals.selectedDataPoints.length>0){i.globals.selectedDataPoints=[];var l=i.globals.dom.Paper.select(\".apexcharts-series path\").members,h=i.globals.dom.Paper.select(\".apexcharts-series circle, .apexcharts-series rect\").members,c=function(t){Array.prototype.forEach.call(t,(function(t){t.node.setAttribute(\"selected\",\"false\"),a.getDefaultFilter(t,s)}))};c(l),c(h)}t.node.setAttribute(\"selected\",\"true\"),o=\"true\",void 0===i.globals.selectedDataPoints[s]&&(i.globals.selectedDataPoints[s]=[]),i.globals.selectedDataPoints[s].push(r)}if(\"true\"===o){var d=i.config.states.active.filter;if(\"none\"!==d)a.applyFilter(t,s,d.type,d.value);else if(\"none\"!==i.config.states.hover.filter&&!i.globals.isTouchDevice){var g=i.config.states.hover.filter;a.applyFilter(t,s,g.type,g.value)}}else if(\"none\"!==i.config.states.active.filter.type)if(\"none\"===i.config.states.hover.filter.type||i.globals.isTouchDevice)a.getDefaultFilter(t,s);else{g=i.config.states.hover.filter;a.applyFilter(t,s,g.type,g.value)}\"function\"==typeof i.config.chart.events.dataPointSelection&&i.config.chart.events.dataPointSelection(e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}),e&&this.ctx.events.fireEvent(\"dataPointSelection\",[e,this.ctx,{selectedDataPoints:i.globals.selectedDataPoints,seriesIndex:s,dataPointIndex:r,w:i}])}},{key:\"rotateAroundCenter\",value:function(t){var e={};return t&&\"function\"==typeof t.getBBox&&(e=t.getBBox()),{x:e.x+e.width/2,y:e.y+e.height/2}}},{key:\"getTextRects\",value:function(t,e,i,a){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=this.w,o=this.drawText({x:-200,y:-200,text:t,textAnchor:\"start\",fontSize:e,fontFamily:i,foreColor:\"#fff\",opacity:0});a&&o.attr(\"transform\",a),r.globals.dom.Paper.add(o);var n=o.bbox();return s||(n=o.node.getBoundingClientRect()),o.remove(),{width:n.width,height:n.height}}},{key:\"placeTextWithEllipsis\",value:function(t,e,i){if(\"function\"==typeof t.getComputedTextLength&&(t.textContent=e,e.length>0&&t.getComputedTextLength()>=i/1.1)){for(var a=e.length-3;a>0;a-=3)if(t.getSubStringLength(0,a)<=i/1.1)return void(t.textContent=e.substring(0,a)+\"...\");t.textContent=\".\"}}}],[{key:\"setAttrs\",value:function(t,e){for(var i in e)e.hasOwnProperty(i)&&t.setAttribute(i,e[i])}}]),t}(),y=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"getStackedSeriesTotals\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=this.w,i=[];if(0===e.globals.series.length)return i;for(var a=0;a<e.globals.series[e.globals.maxValsInArrayIndex].length;a++){for(var s=0,r=0;r<e.globals.series.length;r++)void 0!==e.globals.series[r][a]&&-1===t.indexOf(r)&&(s+=e.globals.series[r][a]);i.push(s)}return i}},{key:\"getSeriesTotalByIndex\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return null===t?this.w.config.series.reduce((function(t,e){return t+e}),0):this.w.globals.series[t].reduce((function(t,e){return t+e}),0)}},{key:\"isSeriesNull\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return 0===(null===t?this.w.config.series.filter((function(t){return null!==t})):this.w.config.series[t].data.filter((function(t){return null!==t}))).length}},{key:\"seriesHaveSameValues\",value:function(t){return this.w.globals.series[t].every((function(t,e,i){return t===i[0]}))}},{key:\"getCategoryLabels\",value:function(t){var e=this.w,i=t.slice();return e.config.xaxis.convertedCatToNumeric&&(i=t.map((function(t,i){return e.config.xaxis.labels.formatter(t-e.globals.minX+1)}))),i}},{key:\"getLargestSeries\",value:function(){var t=this.w;t.globals.maxValsInArrayIndex=t.globals.series.map((function(t){return t.length})).indexOf(Math.max.apply(Math,t.globals.series.map((function(t){return t.length}))))}},{key:\"getLargestMarkerSize\",value:function(){var t=this.w,e=0;return t.globals.markers.size.forEach((function(t){e=Math.max(e,t)})),t.config.markers.discrete&&t.config.markers.discrete.length&&t.config.markers.discrete.forEach((function(t){e=Math.max(e,t.size)})),e>0&&(e+=t.config.markers.hover.sizeOffset+1),t.globals.markers.largestSize=e,e}},{key:\"getSeriesTotals\",value:function(){var t=this.w;t.globals.seriesTotals=t.globals.series.map((function(t,e){var i=0;if(Array.isArray(t))for(var a=0;a<t.length;a++)i+=t[a];else i+=t;return i}))}},{key:\"getSeriesTotalsXRange\",value:function(t,e){var i=this.w;return i.globals.series.map((function(a,s){for(var r=0,o=0;o<a.length;o++)i.globals.seriesX[s][o]>t&&i.globals.seriesX[s][o]<e&&(r+=a[o]);return r}))}},{key:\"getPercentSeries\",value:function(){var t=this.w;t.globals.seriesPercent=t.globals.series.map((function(e,i){var a=[];if(Array.isArray(e))for(var s=0;s<e.length;s++){var r=t.globals.stackedSeriesTotals[s],o=0;r&&(o=100*e[s]/r),a.push(o)}else{var n=100*e/t.globals.seriesTotals.reduce((function(t,e){return t+e}),0);a.push(n)}return a}))}},{key:\"getCalculatedRatios\",value:function(){var t,e,i,a,s=this.w.globals,r=[],o=0,n=[],l=.1,h=0;if(s.yRange=[],s.isMultipleYAxis)for(var c=0;c<s.minYArr.length;c++)s.yRange.push(Math.abs(s.minYArr[c]-s.maxYArr[c])),n.push(0);else s.yRange.push(Math.abs(s.minY-s.maxY));s.xRange=Math.abs(s.maxX-s.minX),s.zRange=Math.abs(s.maxZ-s.minZ);for(var d=0;d<s.yRange.length;d++)r.push(s.yRange[d]/s.gridHeight);if(e=s.xRange/s.gridWidth,i=Math.abs(s.initialMaxX-s.initialMinX)/s.gridWidth,t=s.yRange/s.gridWidth,a=s.xRange/s.gridHeight,(o=s.zRange/s.gridHeight*16)||(o=1),s.minY!==Number.MIN_VALUE&&0!==Math.abs(s.minY)&&(s.hasNegs=!0),s.isMultipleYAxis){n=[];for(var g=0;g<r.length;g++)n.push(-s.minYArr[g]/r[g])}else n.push(-s.minY/r[0]),s.minY!==Number.MIN_VALUE&&0!==Math.abs(s.minY)&&(l=-s.minY/t,h=s.minX/e);return{yRatio:r,invertedYRatio:t,zRatio:o,xRatio:e,initialXRatio:i,invertedXRatio:a,baseLineInvertedY:l,baseLineY:n,baseLineX:h}}},{key:\"getLogSeries\",value:function(t){var e=this,i=this.w;return i.globals.seriesLog=t.map((function(t,a){return i.config.yaxis[a]&&i.config.yaxis[a].logarithmic?t.map((function(t){return null===t?null:e.getLogVal(i.config.yaxis[a].logBase,t,a)})):t})),i.globals.invalidLogScale?t:i.globals.seriesLog}},{key:\"getBaseLog\",value:function(t,e){return Math.log(e)/Math.log(t)}},{key:\"getLogVal\",value:function(t,e,i){if(0===e)return 0;var a=this.w,s=0===a.globals.minYArr[i]?-1:this.getBaseLog(t,a.globals.minYArr[i]),r=(0===a.globals.maxYArr[i]?0:this.getBaseLog(t,a.globals.maxYArr[i]))-s;return e<1?e/r:(this.getBaseLog(t,e)-s)/r}},{key:\"getLogYRatios\",value:function(t){var e=this,i=this.w,a=this.w.globals;return a.yLogRatio=t.slice(),a.logYRange=a.yRange.map((function(t,s){if(i.config.yaxis[s]&&e.w.config.yaxis[s].logarithmic){var r,o=-Number.MAX_VALUE,n=Number.MIN_VALUE;return a.seriesLog.forEach((function(t,e){t.forEach((function(t){i.config.yaxis[e]&&i.config.yaxis[e].logarithmic&&(o=Math.max(t,o),n=Math.min(t,n))}))})),r=Math.pow(a.yRange[s],Math.abs(n-o)/a.yRange[s]),a.yLogRatio[s]=r/a.gridHeight,r}})),a.invalidLogScale?t.slice():a.yLogRatio}}],[{key:\"checkComboSeries\",value:function(t){var e=!1,i=0,a=0;return t.length&&void 0!==t[0].type&&t.forEach((function(t){\"bar\"!==t.type&&\"column\"!==t.type&&\"candlestick\"!==t.type&&\"boxPlot\"!==t.type||i++,void 0!==t.type&&a++})),a>0&&(e=!0),{comboBarCount:i,comboCharts:e}}},{key:\"extendArrayProps\",value:function(t,e,i){return e.yaxis&&(e=t.extendYAxis(e,i)),e.annotations&&(e.annotations.yaxis&&(e=t.extendYAxisAnnotations(e)),e.annotations.xaxis&&(e=t.extendXAxisAnnotations(e)),e.annotations.points&&(e=t.extendPointAnnotations(e))),e}}]),t}(),w=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e}return r(t,[{key:\"setOrientations\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.w;if(\"vertical\"===t.label.orientation){var a=null!==e?e:0,s=i.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='\".concat(a,\"']\"));if(null!==s){var r=s.getBoundingClientRect();s.setAttribute(\"x\",parseFloat(s.getAttribute(\"x\"))-r.height+4),\"top\"===t.label.position?s.setAttribute(\"y\",parseFloat(s.getAttribute(\"y\"))+r.width):s.setAttribute(\"y\",parseFloat(s.getAttribute(\"y\"))-r.width);var o=this.annoCtx.graphics.rotateAroundCenter(s),n=o.x,l=o.y;s.setAttribute(\"transform\",\"rotate(-90 \".concat(n,\" \").concat(l,\")\"))}}}},{key:\"addBackgroundToAnno\",value:function(t,e){var i=this.w;if(!t||void 0===e.label.text||void 0!==e.label.text&&!String(e.label.text).trim())return null;var a=i.globals.dom.baseEl.querySelector(\".apexcharts-grid\").getBoundingClientRect(),s=t.getBoundingClientRect(),r=e.label.style.padding.left,o=e.label.style.padding.right,n=e.label.style.padding.top,l=e.label.style.padding.bottom;\"vertical\"===e.label.orientation&&(n=e.label.style.padding.left,l=e.label.style.padding.right,r=e.label.style.padding.top,o=e.label.style.padding.bottom);var h=s.left-a.left-r,c=s.top-a.top-n,d=this.annoCtx.graphics.drawRect(h-i.globals.barPadForNumericAxis,c,s.width+r+o,s.height+n+l,e.label.borderRadius,e.label.style.background,1,e.label.borderWidth,e.label.borderColor,0);return e.id&&d.node.classList.add(e.id),d}},{key:\"annotationsBackground\",value:function(){var t=this,e=this.w,i=function(i,a,s){var r=e.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations .apexcharts-\").concat(s,\"-annotation-label[rel='\").concat(a,\"']\"));if(r){var o=r.parentNode,n=t.addBackgroundToAnno(r,i);n&&(o.insertBefore(n.node,r),i.label.mouseEnter&&n.node.addEventListener(\"mouseenter\",i.label.mouseEnter.bind(t,i)),i.label.mouseLeave&&n.node.addEventListener(\"mouseleave\",i.label.mouseLeave.bind(t,i)),i.label.click&&n.node.addEventListener(\"click\",i.label.click.bind(t,i)))}};e.config.annotations.xaxis.map((function(t,e){i(t,e,\"xaxis\")})),e.config.annotations.yaxis.map((function(t,e){i(t,e,\"yaxis\")})),e.config.annotations.points.map((function(t,e){i(t,e,\"point\")}))}},{key:\"getY1Y2\",value:function(t,e){var i,a=\"y1\"===t?e.y:e.y2,s=this.w;if(this.annoCtx.invertAxis){var r=s.globals.labels.indexOf(a);s.config.xaxis.convertedCatToNumeric&&(r=s.globals.categoryLabels.indexOf(a));var o=s.globals.dom.baseEl.querySelector(\".apexcharts-yaxis-texts-g text:nth-child(\"+(r+1)+\")\");o&&(i=parseFloat(o.getAttribute(\"y\")))}else{var n;if(s.config.yaxis[e.yAxisIndex].logarithmic)n=(a=new y(this.annoCtx.ctx).getLogVal(a,e.yAxisIndex))/s.globals.yLogRatio[e.yAxisIndex];else n=(a-s.globals.minYArr[e.yAxisIndex])/(s.globals.yRange[e.yAxisIndex]/s.globals.gridHeight);i=s.globals.gridHeight-n,!e.marker||void 0!==e.y&&null!==e.y||(i=0),s.config.yaxis[e.yAxisIndex]&&s.config.yaxis[e.yAxisIndex].reversed&&(i=n)}return i}},{key:\"getX1X2\",value:function(t,e){var i=this.w,a=this.annoCtx.invertAxis?i.globals.minY:i.globals.minX,s=this.annoCtx.invertAxis?i.globals.maxY:i.globals.maxX,r=this.annoCtx.invertAxis?i.globals.yRange[0]:i.globals.xRange,o=(e.x-a)/(r/i.globals.gridWidth);this.annoCtx.inversedReversedAxis&&(o=(s-e.x)/(r/i.globals.gridWidth)),\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(o=this.getStringX(e.x));var n=(e.x2-a)/(r/i.globals.gridWidth);return this.annoCtx.inversedReversedAxis&&(n=(s-e.x2)/(r/i.globals.gridWidth)),\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric||this.annoCtx.invertAxis||i.globals.dataFormatXNumeric||(n=this.getStringX(e.x2)),void 0!==e.x&&null!==e.x||!e.marker||(o=i.globals.gridWidth),\"x1\"===t?o:n}},{key:\"getStringX\",value:function(t){var e=this.w,i=t;e.config.xaxis.convertedCatToNumeric&&e.globals.categoryLabels.length&&(t=e.globals.categoryLabels.indexOf(t)+1);var a=e.globals.labels.indexOf(t),s=e.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g text:nth-child(\"+(a+1)+\")\");return s&&(i=parseFloat(s.getAttribute(\"x\"))),i}}]),t}(),k=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.invertAxis=this.annoCtx.invertAxis,this.helpers=new w(this.annoCtx)}return r(t,[{key:\"addXaxisAnnotation\",value:function(t,e,i){var a,s=this.w,r=this.helpers.getX1X2(\"x1\",t),o=t.label.text,n=t.strokeDashArray;if(x.isNumber(r)){if(null===t.x2||void 0===t.x2){var l=this.annoCtx.graphics.drawLine(r+t.offsetX,0+t.offsetY,r+t.offsetX,s.globals.gridHeight+t.offsetY,t.borderColor,n,t.borderWidth);e.appendChild(l.node),t.id&&l.node.classList.add(t.id)}else{if((a=this.helpers.getX1X2(\"x2\",t))<r){var h=r;r=a,a=h}var c=this.annoCtx.graphics.drawRect(r+t.offsetX,0+t.offsetY,a-r,s.globals.gridHeight+t.offsetY,0,t.fillColor,t.opacity,1,t.borderColor,n);c.node.classList.add(\"apexcharts-annotation-rect\"),c.attr(\"clip-path\",\"url(#gridRectMask\".concat(s.globals.cuid,\")\")),e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}var d=\"top\"===t.label.position?4:s.globals.gridHeight,g=this.annoCtx.graphics.getTextRects(o,parseFloat(t.label.style.fontSize)),u=this.annoCtx.graphics.drawText({x:r+t.label.offsetX,y:d+t.label.offsetY-(\"vertical\"===t.label.orientation?\"top\"===t.label.position?g.width/2-12:-g.width/2:0),text:o,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-xaxis-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});u.attr({rel:i}),e.appendChild(u.node),this.annoCtx.helpers.setOrientations(t,i)}}},{key:\"drawXAxisAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-xaxis-annotations\"});return e.config.annotations.xaxis.map((function(e,a){t.addXaxisAnnotation(e,i.node,a)})),i}}]),t}(),A=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.helpers=new w(this.annoCtx)}return r(t,[{key:\"addYaxisAnnotation\",value:function(t,e,i){var a,s=this.w,r=t.strokeDashArray,o=this.helpers.getY1Y2(\"y1\",t),n=t.label.text;if(null===t.y2||void 0===t.y2){var l=this.annoCtx.graphics.drawLine(0+t.offsetX,o+t.offsetY,this._getYAxisAnnotationWidth(t),o+t.offsetY,t.borderColor,r,t.borderWidth);e.appendChild(l.node),t.id&&l.node.classList.add(t.id)}else{if((a=this.helpers.getY1Y2(\"y2\",t))>o){var h=o;o=a,a=h}var c=this.annoCtx.graphics.drawRect(0+t.offsetX,a+t.offsetY,this._getYAxisAnnotationWidth(t),o-a,0,t.fillColor,t.opacity,1,t.borderColor,r);c.node.classList.add(\"apexcharts-annotation-rect\"),c.attr(\"clip-path\",\"url(#gridRectMask\".concat(s.globals.cuid,\")\")),e.appendChild(c.node),t.id&&c.node.classList.add(t.id)}var d=\"right\"===t.label.position?s.globals.gridWidth:0,g=this.annoCtx.graphics.drawText({x:d+t.label.offsetX,y:(null!=a?a:o)+t.label.offsetY-3,text:n,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-yaxis-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});g.attr({rel:i}),e.appendChild(g.node)}},{key:\"_getYAxisAnnotationWidth\",value:function(t){var e=this.w;e.globals.gridWidth;return(t.width.indexOf(\"%\")>-1?e.globals.gridWidth*parseInt(t.width,10)/100:parseInt(t.width,10))+t.offsetX}},{key:\"drawYAxisAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-yaxis-annotations\"});return e.config.annotations.yaxis.map((function(e,a){t.addYaxisAnnotation(e,i.node,a)})),i}}]),t}(),S=function(){function t(e){a(this,t),this.w=e.w,this.annoCtx=e,this.helpers=new w(this.annoCtx)}return r(t,[{key:\"addPointAnnotation\",value:function(t,e,i){this.w;var a=this.helpers.getX1X2(\"x1\",t),s=this.helpers.getY1Y2(\"y1\",t);if(x.isNumber(a)){var r={pSize:t.marker.size,pointStrokeWidth:t.marker.strokeWidth,pointFillColor:t.marker.fillColor,pointStrokeColor:t.marker.strokeColor,shape:t.marker.shape,pRadius:t.marker.radius,class:\"apexcharts-point-annotation-marker \".concat(t.marker.cssClass,\" \").concat(t.id?t.id:\"\")},o=this.annoCtx.graphics.drawMarker(a+t.marker.offsetX,s+t.marker.offsetY,r);e.appendChild(o.node);var n=t.label.text?t.label.text:\"\",l=this.annoCtx.graphics.drawText({x:a+t.label.offsetX,y:s+t.label.offsetY-t.marker.size-parseFloat(t.label.style.fontSize)/1.6,text:n,textAnchor:t.label.textAnchor,fontSize:t.label.style.fontSize,fontFamily:t.label.style.fontFamily,fontWeight:t.label.style.fontWeight,foreColor:t.label.style.color,cssClass:\"apexcharts-point-annotation-label \".concat(t.label.style.cssClass,\" \").concat(t.id?t.id:\"\")});if(l.attr({rel:i}),e.appendChild(l.node),t.customSVG.SVG){var h=this.annoCtx.graphics.group({class:\"apexcharts-point-annotations-custom-svg \"+t.customSVG.cssClass});h.attr({transform:\"translate(\".concat(a+t.customSVG.offsetX,\", \").concat(s+t.customSVG.offsetY,\")\")}),h.node.innerHTML=t.customSVG.SVG,e.appendChild(h.node)}if(t.image.path){var c=t.image.width?t.image.width:20,d=t.image.height?t.image.height:20;o=this.annoCtx.addImage({x:a+t.image.offsetX-c/2,y:s+t.image.offsetY-d/2,width:c,height:d,path:t.image.path,appendTo:\".apexcharts-point-annotations\"})}t.mouseEnter&&o.node.addEventListener(\"mouseenter\",t.mouseEnter.bind(this,t)),t.mouseLeave&&o.node.addEventListener(\"mouseleave\",t.mouseLeave.bind(this,t)),t.click&&o.node.addEventListener(\"click\",t.click.bind(this,t))}}},{key:\"drawPointAnnotations\",value:function(){var t=this,e=this.w,i=this.annoCtx.graphics.group({class:\"apexcharts-point-annotations\"});return e.config.annotations.points.map((function(e,a){t.addPointAnnotation(e,i.node,a)})),i}}]),t}();var C={name:\"en\",options:{months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],toolbar:{exportToSVG:\"Download SVG\",exportToPNG:\"Download PNG\",exportToCSV:\"Download CSV\",menu:\"Menu\",selection:\"Selection\",selectionZoom:\"Selection Zoom\",zoomIn:\"Zoom In\",zoomOut:\"Zoom Out\",pan:\"Panning\",reset:\"Reset Zoom\"}}},L=function(){function t(){a(this,t),this.yAxis={show:!0,showAlways:!1,showForNullSeries:!0,seriesName:void 0,opposite:!1,reversed:!1,logarithmic:!1,logBase:10,tickAmount:void 0,forceNiceScale:!1,max:void 0,min:void 0,floating:!1,decimalsInFloat:void 0,labels:{show:!0,minWidth:0,maxWidth:160,offsetX:0,offsetY:0,align:void 0,rotate:0,padding:20,style:{colors:[],fontSize:\"11px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"},formatter:void 0},axisBorder:{show:!1,color:\"#e0e0e0\",width:1,offsetX:0,offsetY:0},axisTicks:{show:!1,color:\"#e0e0e0\",width:6,offsetX:0,offsetY:0},title:{text:void 0,rotate:-90,offsetY:0,offsetX:0,style:{color:void 0,fontSize:\"11px\",fontWeight:900,fontFamily:void 0,cssClass:\"\"}},tooltip:{enabled:!1,offsetX:0},crosshairs:{show:!0,position:\"front\",stroke:{color:\"#b6b6b6\",width:1,dashArray:0}}},this.pointAnnotation={id:void 0,x:0,y:null,yAxisIndex:0,seriesIndex:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,marker:{size:4,fillColor:\"#fff\",strokeWidth:2,strokeColor:\"#333\",shape:\"circle\",offsetX:0,offsetY:0,radius:2,cssClass:\"\"},label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"middle\",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}},customSVG:{SVG:void 0,cssClass:void 0,offsetX:0,offsetY:0},image:{path:void 0,width:20,height:20,offsetX:0,offsetY:0}},this.yAxisAnnotation={id:void 0,y:0,y2:null,strokeDashArray:1,fillColor:\"#c2c2c2\",borderColor:\"#c2c2c2\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,width:\"100%\",yAxisIndex:0,label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"end\",position:\"right\",offsetX:0,offsetY:-3,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}}},this.xAxisAnnotation={id:void 0,x:0,x2:null,strokeDashArray:1,fillColor:\"#c2c2c2\",borderColor:\"#c2c2c2\",borderWidth:1,opacity:.3,offsetX:0,offsetY:0,label:{borderColor:\"#c2c2c2\",borderWidth:1,borderRadius:2,text:void 0,textAnchor:\"middle\",orientation:\"vertical\",position:\"top\",offsetX:0,offsetY:0,mouseEnter:void 0,mouseLeave:void 0,click:void 0,style:{background:\"#fff\",color:void 0,fontSize:\"11px\",fontFamily:void 0,fontWeight:400,cssClass:\"\",padding:{left:5,right:5,top:2,bottom:2}}}},this.text={x:0,y:0,text:\"\",textAnchor:\"start\",foreColor:void 0,fontSize:\"13px\",fontFamily:void 0,fontWeight:400,appendTo:\".apexcharts-annotations\",backgroundColor:\"transparent\",borderColor:\"#c2c2c2\",borderRadius:0,borderWidth:0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2}}return r(t,[{key:\"init\",value:function(){return{annotations:{position:\"front\",yaxis:[this.yAxisAnnotation],xaxis:[this.xAxisAnnotation],points:[this.pointAnnotation],texts:[],images:[],shapes:[]},chart:{animations:{enabled:!0,easing:\"easeinout\",speed:800,animateGradually:{delay:150,enabled:!0},dynamicAnimation:{enabled:!0,speed:350}},background:\"transparent\",locales:[C],defaultLocale:\"en\",dropShadow:{enabled:!1,enabledOnSeries:void 0,top:2,left:2,blur:4,color:\"#000\",opacity:.35},events:{animationEnd:void 0,beforeMount:void 0,mounted:void 0,updated:void 0,click:void 0,mouseMove:void 0,mouseLeave:void 0,xAxisLabelClick:void 0,legendClick:void 0,markerClick:void 0,selection:void 0,dataPointSelection:void 0,dataPointMouseEnter:void 0,dataPointMouseLeave:void 0,beforeZoom:void 0,beforeResetZoom:void 0,zoomed:void 0,scrolled:void 0,brushScrolled:void 0},foreColor:\"#373d3f\",fontFamily:\"Helvetica, Arial, sans-serif\",height:\"auto\",parentHeightOffset:15,redrawOnParentResize:!0,redrawOnWindowResize:!0,id:void 0,group:void 0,offsetX:0,offsetY:0,selection:{enabled:!1,type:\"x\",fill:{color:\"#24292e\",opacity:.1},stroke:{width:1,color:\"#24292e\",opacity:.4,dashArray:3},xaxis:{min:void 0,max:void 0},yaxis:{min:void 0,max:void 0}},sparkline:{enabled:!1},brush:{enabled:!1,autoScaleYaxis:!0,target:void 0},stacked:!1,stackType:\"normal\",toolbar:{show:!0,offsetX:0,offsetY:0,tools:{download:!0,selection:!0,zoom:!0,zoomin:!0,zoomout:!0,pan:!0,reset:!0,customIcons:[]},export:{csv:{filename:void 0,columnDelimiter:\",\",headerCategory:\"category\",headerValue:\"value\",dateFormatter:function(t){return new Date(t).toDateString()}},png:{filename:void 0},svg:{filename:void 0}},autoSelected:\"zoom\"},type:\"line\",width:\"100%\",zoom:{enabled:!0,type:\"x\",autoScaleYaxis:!1,zoomedArea:{fill:{color:\"#90CAF9\",opacity:.4},stroke:{color:\"#0D47A1\",opacity:.4,width:1}}}},plotOptions:{area:{fillTo:\"origin\"},bar:{horizontal:!1,columnWidth:\"70%\",barHeight:\"70%\",distributed:!1,borderRadius:0,rangeBarOverlap:!0,rangeBarGroupRows:!1,colors:{ranges:[],backgroundBarColors:[],backgroundBarOpacity:1,backgroundBarRadius:0},dataLabels:{position:\"top\",maxItems:100,hideOverflowingLabels:!0,orientation:\"horizontal\",total:{enabled:!1,formatter:void 0,offsetX:0,offsetY:0,style:{color:\"#373d3f\",fontSize:\"12px\",fontFamily:void 0,fontWeight:600}}}},bubble:{minBubbleRadius:void 0,maxBubbleRadius:void 0},candlestick:{colors:{upward:\"#00B746\",downward:\"#EF403C\"},wick:{useFillColor:!0}},boxPlot:{colors:{upper:\"#00E396\",lower:\"#008FFB\"}},heatmap:{radius:2,enableShades:!0,shadeIntensity:.5,reverseNegativeShade:!1,distributed:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},treemap:{enableShades:!0,shadeIntensity:.5,distributed:!1,reverseNegativeShade:!1,useFillColorAsStroke:!1,colorScale:{inverse:!1,ranges:[],min:void 0,max:void 0}},radialBar:{inverseOrder:!1,startAngle:0,endAngle:360,offsetX:0,offsetY:0,hollow:{margin:5,size:\"50%\",background:\"transparent\",image:void 0,imageWidth:150,imageHeight:150,imageOffsetX:0,imageOffsetY:0,imageClipped:!0,position:\"front\",dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\"#000\",opacity:.5}},track:{show:!0,startAngle:void 0,endAngle:void 0,background:\"#f2f2f2\",strokeWidth:\"97%\",opacity:1,margin:5,dropShadow:{enabled:!1,top:0,left:0,blur:3,color:\"#000\",opacity:.5}},dataLabels:{show:!0,name:{show:!0,fontSize:\"16px\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:0,formatter:function(t){return t}},value:{show:!0,fontSize:\"14px\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:16,formatter:function(t){return t+\"%\"}},total:{show:!1,label:\"Total\",fontSize:\"16px\",fontWeight:600,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)/t.globals.series.length+\"%\"}}}},pie:{customScale:1,offsetX:0,offsetY:0,startAngle:0,endAngle:360,expandOnClick:!0,dataLabels:{offset:0,minAngleToShowLabel:10},donut:{size:\"65%\",background:\"transparent\",labels:{show:!1,name:{show:!0,fontSize:\"16px\",fontFamily:void 0,fontWeight:600,color:void 0,offsetY:-10,formatter:function(t){return t}},value:{show:!0,fontSize:\"20px\",fontFamily:void 0,fontWeight:400,color:void 0,offsetY:10,formatter:function(t){return t}},total:{show:!1,showAlways:!1,label:\"Total\",fontSize:\"16px\",fontWeight:400,fontFamily:void 0,color:void 0,formatter:function(t){return t.globals.seriesTotals.reduce((function(t,e){return t+e}),0)}}}}},polarArea:{rings:{strokeWidth:1,strokeColor:\"#e8e8e8\"},spokes:{strokeWidth:1,connectorColors:\"#e8e8e8\"}},radar:{size:void 0,offsetX:0,offsetY:0,polygons:{strokeWidth:1,strokeColors:\"#e8e8e8\",connectorColors:\"#e8e8e8\",fill:{colors:void 0}}}},colors:void 0,dataLabels:{enabled:!0,enabledOnSeries:void 0,formatter:function(t){return null!==t?t:\"\"},textAnchor:\"middle\",distributed:!1,offsetX:0,offsetY:0,style:{fontSize:\"12px\",fontFamily:void 0,fontWeight:600,colors:void 0},background:{enabled:!0,foreColor:\"#fff\",borderRadius:2,padding:4,opacity:.9,borderWidth:1,borderColor:\"#fff\",dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\"#000\",opacity:.45}},dropShadow:{enabled:!1,top:1,left:1,blur:1,color:\"#000\",opacity:.45}},fill:{type:\"solid\",colors:void 0,opacity:.85,gradient:{shade:\"dark\",type:\"horizontal\",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]},image:{src:[],width:void 0,height:void 0},pattern:{style:\"squares\",width:6,height:6,strokeWidth:2}},forecastDataPoints:{count:0,fillOpacity:.5,strokeWidth:void 0,dashArray:4},grid:{show:!0,borderColor:\"#e0e0e0\",strokeDashArray:0,position:\"back\",xaxis:{lines:{show:!1}},yaxis:{lines:{show:!0}},row:{colors:void 0,opacity:.5},column:{colors:void 0,opacity:.5},padding:{top:0,right:10,bottom:0,left:12}},labels:[],legend:{show:!0,showForSingleSeries:!1,showForNullSeries:!0,showForZeroSeries:!0,floating:!1,position:\"bottom\",horizontalAlign:\"center\",inverseOrder:!1,fontSize:\"12px\",fontFamily:void 0,fontWeight:400,width:void 0,height:void 0,formatter:void 0,tooltipHoverFormatter:void 0,offsetX:-20,offsetY:4,customLegendItems:[],labels:{colors:void 0,useSeriesColors:!1},markers:{width:12,height:12,strokeWidth:0,fillColors:void 0,strokeColor:\"#fff\",radius:12,customHTML:void 0,offsetX:0,offsetY:0,onClick:void 0},itemMargin:{horizontal:5,vertical:2},onItemClick:{toggleDataSeries:!0},onItemHover:{highlightDataSeries:!0}},markers:{discrete:[],size:0,colors:void 0,strokeColors:\"#fff\",strokeWidth:2,strokeOpacity:.9,strokeDashArray:0,fillOpacity:1,shape:\"circle\",width:8,height:8,radius:2,offsetX:0,offsetY:0,onClick:void 0,onDblClick:void 0,showNullDataPoints:!0,hover:{size:void 0,sizeOffset:3}},noData:{text:void 0,align:\"center\",verticalAlign:\"middle\",offsetX:0,offsetY:0,style:{color:void 0,fontSize:\"14px\",fontFamily:void 0}},responsive:[],series:void 0,states:{normal:{filter:{type:\"none\",value:0}},hover:{filter:{type:\"lighten\",value:.1}},active:{allowMultipleDataPointsSelection:!1,filter:{type:\"darken\",value:.5}}},title:{text:void 0,align:\"left\",margin:5,offsetX:0,offsetY:0,floating:!1,style:{fontSize:\"14px\",fontWeight:900,fontFamily:void 0,color:void 0}},subtitle:{text:void 0,align:\"left\",margin:5,offsetX:0,offsetY:30,floating:!1,style:{fontSize:\"12px\",fontWeight:400,fontFamily:void 0,color:void 0}},stroke:{show:!0,curve:\"smooth\",lineCap:\"butt\",width:2,colors:void 0,dashArray:0,fill:{type:\"solid\",colors:void 0,opacity:.85,gradient:{shade:\"dark\",type:\"horizontal\",shadeIntensity:.5,gradientToColors:void 0,inverseColors:!0,opacityFrom:1,opacityTo:1,stops:[0,50,100],colorStops:[]}}},tooltip:{enabled:!0,enabledOnSeries:void 0,shared:!0,followCursor:!1,intersect:!1,inverseOrder:!1,custom:void 0,fillSeriesColor:!1,theme:\"light\",cssClass:\"\",style:{fontSize:\"12px\",fontFamily:void 0},onDatasetHover:{highlightDataSeries:!1},x:{show:!0,format:\"dd MMM\",formatter:void 0},y:{formatter:void 0,title:{formatter:function(t){return t?t+\": \":\"\"}}},z:{formatter:void 0,title:\"Size: \"},marker:{show:!0,fillColors:void 0},items:{display:\"flex\"},fixed:{enabled:!1,position:\"topRight\",offsetX:0,offsetY:0}},xaxis:{type:\"category\",categories:[],convertedCatToNumeric:!1,offsetX:0,offsetY:0,overwriteCategories:void 0,labels:{show:!0,rotate:-45,rotateAlways:!1,hideOverlappingLabels:!0,trim:!1,minHeight:void 0,maxHeight:120,showDuplicates:!0,style:{colors:[],fontSize:\"12px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"},offsetX:0,offsetY:0,format:void 0,formatter:void 0,datetimeUTC:!0,datetimeFormatter:{year:\"yyyy\",month:\"MMM 'yy\",day:\"dd MMM\",hour:\"HH:mm\",minute:\"HH:mm:ss\",second:\"HH:mm:ss\"}},group:{groups:[],style:{colors:[],fontSize:\"12px\",fontWeight:400,fontFamily:void 0,cssClass:\"\"}},axisBorder:{show:!0,color:\"#e0e0e0\",width:\"100%\",height:1,offsetX:0,offsetY:0},axisTicks:{show:!0,color:\"#e0e0e0\",height:6,offsetX:0,offsetY:0},tickAmount:void 0,tickPlacement:\"on\",min:void 0,max:void 0,range:void 0,floating:!1,decimalsInFloat:void 0,position:\"bottom\",title:{text:void 0,offsetX:0,offsetY:0,style:{color:void 0,fontSize:\"12px\",fontWeight:900,fontFamily:void 0,cssClass:\"\"}},crosshairs:{show:!0,width:1,position:\"back\",opacity:.9,stroke:{color:\"#b6b6b6\",width:1,dashArray:3},fill:{type:\"solid\",color:\"#B1B9C4\",gradient:{colorFrom:\"#D8E3F0\",colorTo:\"#BED1E6\",stops:[0,100],opacityFrom:.4,opacityTo:.5}},dropShadow:{enabled:!1,left:0,top:0,blur:1,opacity:.4}},tooltip:{enabled:!0,offsetY:0,formatter:void 0,style:{fontSize:\"12px\",fontFamily:void 0}}},yaxis:this.yAxis,theme:{mode:\"light\",palette:\"palette1\",monochrome:{enabled:!1,color:\"#008FFB\",shadeTo:\"light\",shadeIntensity:.65}}}}}]),t}(),P=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.graphics=new m(this.ctx),this.w.globals.isBarHorizontal&&(this.invertAxis=!0),this.helpers=new w(this),this.xAxisAnnotations=new k(this),this.yAxisAnnotations=new A(this),this.pointsAnnotations=new S(this),this.w.globals.isBarHorizontal&&this.w.config.yaxis[0].reversed&&(this.inversedReversedAxis=!0),this.xDivision=this.w.globals.gridWidth/this.w.globals.dataPoints}return r(t,[{key:\"drawAxesAnnotations\",value:function(){var t=this.w;if(t.globals.axisCharts){for(var e=this.yAxisAnnotations.drawYAxisAnnotations(),i=this.xAxisAnnotations.drawXAxisAnnotations(),a=this.pointsAnnotations.drawPointAnnotations(),s=t.config.chart.animations.enabled,r=[e,i,a],o=[i.node,e.node,a.node],n=0;n<3;n++)t.globals.dom.elGraphical.add(r[n]),!s||t.globals.resized||t.globals.dataChanged||\"scatter\"!==t.config.chart.type&&\"bubble\"!==t.config.chart.type&&t.globals.dataPoints>1&&o[n].classList.add(\"apexcharts-element-hidden\"),t.globals.delayedElements.push({el:o[n],index:0});this.helpers.annotationsBackground()}}},{key:\"drawImageAnnos\",value:function(){var t=this;this.w.config.annotations.images.map((function(e,i){t.addImage(e,i)}))}},{key:\"drawTextAnnos\",value:function(){var t=this;this.w.config.annotations.texts.map((function(e,i){t.addText(e,i)}))}},{key:\"addXaxisAnnotation\",value:function(t,e,i){this.xAxisAnnotations.addXaxisAnnotation(t,e,i)}},{key:\"addYaxisAnnotation\",value:function(t,e,i){this.yAxisAnnotations.addYaxisAnnotation(t,e,i)}},{key:\"addPointAnnotation\",value:function(t,e,i){this.pointsAnnotations.addPointAnnotation(t,e,i)}},{key:\"addText\",value:function(t,e){var i=t.x,a=t.y,s=t.text,r=t.textAnchor,o=t.foreColor,n=t.fontSize,l=t.fontFamily,h=t.fontWeight,c=t.cssClass,d=t.backgroundColor,g=t.borderWidth,u=t.strokeDashArray,f=t.borderRadius,p=t.borderColor,x=t.appendTo,b=void 0===x?\".apexcharts-annotations\":x,v=t.paddingLeft,m=void 0===v?4:v,y=t.paddingRight,w=void 0===y?4:y,k=t.paddingBottom,A=void 0===k?2:k,S=t.paddingTop,C=void 0===S?2:S,L=this.w,P=this.graphics.drawText({x:i,y:a,text:s,textAnchor:r||\"start\",fontSize:n||\"12px\",fontWeight:h||\"regular\",fontFamily:l||L.config.chart.fontFamily,foreColor:o||L.config.chart.foreColor,cssClass:c}),T=L.globals.dom.baseEl.querySelector(b);T&&T.appendChild(P.node);var M=P.bbox();if(s){var I=this.graphics.drawRect(M.x-m,M.y-C,M.width+m+w,M.height+A+C,f,d||\"transparent\",1,g,p,u);T.insertBefore(I.node,P.node)}}},{key:\"addImage\",value:function(t,e){var i=this.w,a=t.path,s=t.x,r=void 0===s?0:s,o=t.y,n=void 0===o?0:o,l=t.width,h=void 0===l?20:l,c=t.height,d=void 0===c?20:c,g=t.appendTo,u=void 0===g?\".apexcharts-annotations\":g,f=i.globals.dom.Paper.image(a);f.size(h,d).move(r,n);var p=i.globals.dom.baseEl.querySelector(u);return p&&p.appendChild(f.node),f}},{key:\"addXaxisAnnotationExternal\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"xaxis\",contextMethod:i.addXaxisAnnotation}),i}},{key:\"addYaxisAnnotationExternal\",value:function(t,e,i){return this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"yaxis\",contextMethod:i.addYaxisAnnotation}),i}},{key:\"addPointAnnotationExternal\",value:function(t,e,i){return void 0===this.invertAxis&&(this.invertAxis=i.w.globals.isBarHorizontal),this.addAnnotationExternal({params:t,pushToMemory:e,context:i,type:\"point\",contextMethod:i.addPointAnnotation}),i}},{key:\"addAnnotationExternal\",value:function(t){var e=t.params,i=t.pushToMemory,a=t.context,s=t.type,r=t.contextMethod,o=a,n=o.w,l=n.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations\")),h=l.childNodes.length+1,c=new L,d=Object.assign({},\"xaxis\"===s?c.xAxisAnnotation:\"yaxis\"===s?c.yAxisAnnotation:c.pointAnnotation),g=x.extend(d,e);switch(s){case\"xaxis\":this.addXaxisAnnotation(g,l,h);break;case\"yaxis\":this.addYaxisAnnotation(g,l,h);break;case\"point\":this.addPointAnnotation(g,l,h)}var u=n.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(s,\"-annotations .apexcharts-\").concat(s,\"-annotation-label[rel='\").concat(h,\"']\")),f=this.helpers.addBackgroundToAnno(u,g);return f&&l.insertBefore(f.node,u),i&&n.globals.memory.methodsToExec.push({context:o,id:g.id?g.id:x.randomId(),method:r,label:\"addAnnotation\",params:e}),a}},{key:\"clearAnnotations\",value:function(t){var e=t.w,i=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations\");e.globals.memory.methodsToExec.map((function(t,i){\"addText\"!==t.label&&\"addAnnotation\"!==t.label||e.globals.memory.methodsToExec.splice(i,1)})),i=x.listToArray(i),Array.prototype.forEach.call(i,(function(t){for(;t.firstChild;)t.removeChild(t.firstChild)}))}},{key:\"removeAnnotation\",value:function(t,e){var i=t.w,a=i.globals.dom.baseEl.querySelectorAll(\".\".concat(e));a&&(i.globals.memory.methodsToExec.map((function(t,a){t.id===e&&i.globals.memory.methodsToExec.splice(a,1)})),Array.prototype.forEach.call(a,(function(t){t.parentElement.removeChild(t)})))}}]),t}(),T=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.months31=[1,3,5,7,8,10,12],this.months30=[2,4,6,9,11],this.daysCntOfYear=[0,31,59,90,120,151,181,212,243,273,304,334]}return r(t,[{key:\"isValidDate\",value:function(t){return!isNaN(this.parseDate(t))}},{key:\"getTimeStamp\",value:function(t){return Date.parse(t)?this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toISOString().substr(0,25)).getTime():new Date(t).getTime():t}},{key:\"getDate\",value:function(t){return this.w.config.xaxis.labels.datetimeUTC?new Date(new Date(t).toUTCString()):new Date(t)}},{key:\"parseDate\",value:function(t){var e=Date.parse(t);if(!isNaN(e))return this.getTimeStamp(t);var i=Date.parse(t.replace(/-/g,\"/\").replace(/[a-z]+/gi,\" \"));return i=this.getTimeStamp(i)}},{key:\"parseDateWithTimezone\",value:function(t){return Date.parse(t.replace(/-/g,\"/\").replace(/[a-z]+/gi,\" \"))}},{key:\"formatDate\",value:function(t,e){var i=this.w.globals.locale,a=this.w.config.xaxis.labels.datetimeUTC,s=[\"\\0\"].concat(u(i.months)),r=[\"\\x01\"].concat(u(i.shortMonths)),o=[\"\\x02\"].concat(u(i.days)),n=[\"\\x03\"].concat(u(i.shortDays));function l(t,e){var i=t+\"\";for(e=e||2;i.length<e;)i=\"0\"+i;return i}var h=a?t.getUTCFullYear():t.getFullYear();e=(e=(e=e.replace(/(^|[^\\\\])yyyy+/g,\"$1\"+h)).replace(/(^|[^\\\\])yy/g,\"$1\"+h.toString().substr(2,2))).replace(/(^|[^\\\\])y/g,\"$1\"+h);var c=(a?t.getUTCMonth():t.getMonth())+1;e=(e=(e=(e=e.replace(/(^|[^\\\\])MMMM+/g,\"$1\"+s[0])).replace(/(^|[^\\\\])MMM/g,\"$1\"+r[0])).replace(/(^|[^\\\\])MM/g,\"$1\"+l(c))).replace(/(^|[^\\\\])M/g,\"$1\"+c);var d=a?t.getUTCDate():t.getDate();e=(e=(e=(e=e.replace(/(^|[^\\\\])dddd+/g,\"$1\"+o[0])).replace(/(^|[^\\\\])ddd/g,\"$1\"+n[0])).replace(/(^|[^\\\\])dd/g,\"$1\"+l(d))).replace(/(^|[^\\\\])d/g,\"$1\"+d);var g=a?t.getUTCHours():t.getHours(),f=g>12?g-12:0===g?12:g;e=(e=(e=(e=e.replace(/(^|[^\\\\])HH+/g,\"$1\"+l(g))).replace(/(^|[^\\\\])H/g,\"$1\"+g)).replace(/(^|[^\\\\])hh+/g,\"$1\"+l(f))).replace(/(^|[^\\\\])h/g,\"$1\"+f);var p=a?t.getUTCMinutes():t.getMinutes();e=(e=e.replace(/(^|[^\\\\])mm+/g,\"$1\"+l(p))).replace(/(^|[^\\\\])m/g,\"$1\"+p);var x=a?t.getUTCSeconds():t.getSeconds();e=(e=e.replace(/(^|[^\\\\])ss+/g,\"$1\"+l(x))).replace(/(^|[^\\\\])s/g,\"$1\"+x);var b=a?t.getUTCMilliseconds():t.getMilliseconds();e=e.replace(/(^|[^\\\\])fff+/g,\"$1\"+l(b,3)),b=Math.round(b/10),e=e.replace(/(^|[^\\\\])ff/g,\"$1\"+l(b)),b=Math.round(b/10);var v=g<12?\"AM\":\"PM\";e=(e=(e=e.replace(/(^|[^\\\\])f/g,\"$1\"+b)).replace(/(^|[^\\\\])TT+/g,\"$1\"+v)).replace(/(^|[^\\\\])T/g,\"$1\"+v.charAt(0));var m=v.toLowerCase();e=(e=e.replace(/(^|[^\\\\])tt+/g,\"$1\"+m)).replace(/(^|[^\\\\])t/g,\"$1\"+m.charAt(0));var y=-t.getTimezoneOffset(),w=a||!y?\"Z\":y>0?\"+\":\"-\";if(!a){var k=(y=Math.abs(y))%60;w+=l(Math.floor(y/60))+\":\"+l(k)}e=e.replace(/(^|[^\\\\])K/g,\"$1\"+w);var A=(a?t.getUTCDay():t.getDay())+1;return e=(e=(e=(e=(e=e.replace(new RegExp(o[0],\"g\"),o[A])).replace(new RegExp(n[0],\"g\"),n[A])).replace(new RegExp(s[0],\"g\"),s[c])).replace(new RegExp(r[0],\"g\"),r[c])).replace(/\\\\(.)/g,\"$1\")}},{key:\"getTimeUnitsfromTimestamp\",value:function(t,e,i){var a=this.w;void 0!==a.config.xaxis.min&&(t=a.config.xaxis.min),void 0!==a.config.xaxis.max&&(e=a.config.xaxis.max);var s=this.getDate(t),r=this.getDate(e),o=this.formatDate(s,\"yyyy MM dd HH mm ss fff\").split(\" \"),n=this.formatDate(r,\"yyyy MM dd HH mm ss fff\").split(\" \");return{minMillisecond:parseInt(o[6],10),maxMillisecond:parseInt(n[6],10),minSecond:parseInt(o[5],10),maxSecond:parseInt(n[5],10),minMinute:parseInt(o[4],10),maxMinute:parseInt(n[4],10),minHour:parseInt(o[3],10),maxHour:parseInt(n[3],10),minDate:parseInt(o[2],10),maxDate:parseInt(n[2],10),minMonth:parseInt(o[1],10)-1,maxMonth:parseInt(n[1],10)-1,minYear:parseInt(o[0],10),maxYear:parseInt(n[0],10)}}},{key:\"isLeapYear\",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:\"calculcateLastDaysOfMonth\",value:function(t,e,i){return this.determineDaysOfMonths(t,e)-i}},{key:\"determineDaysOfYear\",value:function(t){var e=365;return this.isLeapYear(t)&&(e=366),e}},{key:\"determineRemainingDaysOfYear\",value:function(t,e,i){var a=this.daysCntOfYear[e]+i;return e>1&&this.isLeapYear()&&a++,a}},{key:\"determineDaysOfMonths\",value:function(t,e){var i=30;switch(t=x.monthMod(t),!0){case this.months30.indexOf(t)>-1:2===t&&(i=this.isLeapYear(e)?29:28);break;case this.months31.indexOf(t)>-1:default:i=31}return i}}]),t}(),M=function(t){var e,i=t.ctx,a=t.seriesIndex,s=t.dataPointIndex,r=t.y1,o=t.y2,n=t.w,l=n.globals.seriesRangeStart[a][s],h=n.globals.seriesRangeEnd[a][s],c=n.globals.labels[s],d=n.config.series[a].name?n.config.series[a].name:\"\",g=n.config.tooltip.y.formatter,u=n.config.tooltip.y.title.formatter,f={w:n,seriesIndex:a,dataPointIndex:s,start:l,end:h};\"function\"==typeof u&&(d=u(d,f)),null!==(e=n.config.series[a].data[s])&&void 0!==e&&e.x&&(c=n.config.series[a].data[s].x+\":\"),\"function\"==typeof g&&(c=g(c,f)),Number.isFinite(r)&&Number.isFinite(o)&&(l=r,h=o);var p=\"\",x=\"\",b=n.globals.colors[a];if(void 0===n.config.tooltip.x.formatter)if(\"datetime\"===n.config.xaxis.type){var v=new T(i);p=v.formatDate(v.getDate(l),n.config.tooltip.x.format),x=v.formatDate(v.getDate(h),n.config.tooltip.x.format)}else p=l,x=h;else p=n.config.tooltip.x.formatter(l),x=n.config.tooltip.x.formatter(h);return{start:l,end:h,startVal:p,endVal:x,ylabel:c,color:b,seriesName:d}},I=function(t){var e=t.color,i=t.seriesName,a=t.ylabel,s=t.start,r=t.end,o=t.seriesIndex,n=t.dataPointIndex,l=t.ctx.tooltip.tooltipLabels.getFormatters(o);s=l.yLbFormatter(s),r=l.yLbFormatter(r);var h=l.yLbFormatter(t.w.globals.series[o][n]),c='<span class=\"value start-value\">\\n '.concat(s,'\\n </span> <span class=\"separator\">-</span> <span class=\"value end-value\">\\n ').concat(r,\"\\n </span>\");return'<div class=\"apexcharts-tooltip-rangebar\"><div> <span class=\"series-name\" style=\"color: '+e+'\">'+(i||\"\")+'</span></div><div> <span class=\"category\">'+a+\" </span> \"+(t.w.globals.comboCharts?\"rangeArea\"===t.w.config.series[o].type||\"rangeBar\"===t.w.config.series[o].type?c:\"<span>\".concat(h,\"</span>\"):c)+\" </div></div>\"},X=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\"line\",value:function(){return{chart:{animations:{easing:\"swing\"}},dataLabels:{enabled:!1},stroke:{width:5,curve:\"straight\"},markers:{size:0,hover:{sizeOffset:6}},xaxis:{crosshairs:{width:1}}}}},{key:\"sparkline\",value:function(t){this.opts.yaxis[0].show=!1,this.opts.yaxis[0].title.text=\"\",this.opts.yaxis[0].axisBorder.show=!1,this.opts.yaxis[0].axisTicks.show=!1,this.opts.yaxis[0].floating=!0;return x.extend(t,{grid:{show:!1,padding:{left:0,right:0,top:0,bottom:0}},legend:{show:!1},xaxis:{labels:{show:!1},tooltip:{enabled:!1},axisBorder:{show:!1},axisTicks:{show:!1}},chart:{toolbar:{show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1}})}},{key:\"bar\",value:function(){return{chart:{stacked:!1,animations:{easing:\"swing\"}},plotOptions:{bar:{dataLabels:{position:\"center\"}}},dataLabels:{style:{colors:[\"#fff\"]},background:{enabled:!1}},stroke:{width:0,lineCap:\"round\"},fill:{opacity:.85},legend:{markers:{shape:\"square\",radius:2,size:8}},tooltip:{shared:!1,intersect:!0},xaxis:{tooltip:{enabled:!1},tickPlacement:\"between\",crosshairs:{width:\"barWidth\",position:\"back\",fill:{type:\"gradient\"},dropShadow:{enabled:!1},stroke:{width:0}}}}}},{key:\"candlestick\",value:function(){var t=this;return{stroke:{width:1,colors:[\"#333\"]},fill:{opacity:1},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,s=e.w;return t._getBoxTooltip(s,i,a,[\"Open\",\"High\",\"\",\"Low\",\"Close\"],\"candlestick\")}},states:{active:{filter:{type:\"none\"}}},xaxis:{crosshairs:{width:1}}}}},{key:\"boxPlot\",value:function(){var t=this;return{chart:{animations:{dynamicAnimation:{enabled:!1}}},stroke:{width:1,colors:[\"#24292e\"]},dataLabels:{enabled:!1},tooltip:{shared:!0,custom:function(e){var i=e.seriesIndex,a=e.dataPointIndex,s=e.w;return t._getBoxTooltip(s,i,a,[\"Minimum\",\"Q1\",\"Median\",\"Q3\",\"Maximum\"],\"boxPlot\")}},markers:{size:5,strokeWidth:1,strokeColors:\"#111\"},xaxis:{crosshairs:{width:1}}}}},{key:\"rangeBar\",value:function(){return{stroke:{width:0,lineCap:\"square\"},plotOptions:{bar:{borderRadius:0,dataLabels:{position:\"center\"}}},dataLabels:{enabled:!1,formatter:function(t,e){e.ctx;var i=e.seriesIndex,a=e.dataPointIndex,s=e.w,r=function(){var t=s.globals.seriesRangeStart[i][a];return s.globals.seriesRangeEnd[i][a]-t};return s.globals.comboCharts?\"rangeBar\"===s.config.series[i].type||\"rangeArea\"===s.config.series[i].type?r():t:r()},background:{enabled:!1},style:{colors:[\"#fff\"]}},tooltip:{shared:!1,followCursor:!0,custom:function(t){return t.w.config.plotOptions&&t.w.config.plotOptions.bar&&t.w.config.plotOptions.bar.horizontal?function(t){var e=M(t),i=e.color,a=e.seriesName,s=e.ylabel,r=e.startVal,o=e.endVal;return I({color:i,seriesName:a,ylabel:s,start:r,end:o})}(t):function(t){var e=M(t),i=e.color,a=e.seriesName,s=e.ylabel,r=e.start,o=e.end;return I({color:i,seriesName:a,ylabel:s,start:r,end:o})}(t)}},xaxis:{tickPlacement:\"between\",tooltip:{enabled:!1},crosshairs:{stroke:{width:0}}}}}},{key:\"area\",value:function(){return{stroke:{width:4,fill:{type:\"solid\",gradient:{inverseColors:!1,shade:\"light\",type:\"vertical\",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}}},fill:{type:\"gradient\",gradient:{inverseColors:!1,shade:\"light\",type:\"vertical\",opacityFrom:.65,opacityTo:.5,stops:[0,100,100]}},markers:{size:0,hover:{sizeOffset:6}},tooltip:{followCursor:!1}}}},{key:\"rangeArea\",value:function(){return{stroke:{curve:\"straight\",width:0},fill:{type:\"solid\",opacity:.6},markers:{size:0},states:{hover:{filter:{type:\"none\"}},active:{filter:{type:\"none\"}}},tooltip:{intersect:!1,shared:!0,followCursor:!0,custom:function(t){return function(t){var i=M(t),a=i.color,s=i.seriesName,r=i.ylabel,o=i.start,n=i.end;return I(e(e({},t),{},{color:a,seriesName:s,ylabel:r,start:o,end:n}))}(t)}}}}},{key:\"brush\",value:function(t){return x.extend(t,{chart:{toolbar:{autoSelected:\"selection\",show:!1},zoom:{enabled:!1}},dataLabels:{enabled:!1},stroke:{width:1},tooltip:{enabled:!1},xaxis:{tooltip:{enabled:!1}}})}},{key:\"stacked100\",value:function(t){t.dataLabels=t.dataLabels||{},t.dataLabels.formatter=t.dataLabels.formatter||void 0;var e=t.dataLabels.formatter;return t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})),\"bar\"===t.chart.type&&(t.dataLabels.formatter=e||function(t){return\"number\"==typeof t&&t?t.toFixed(0)+\"%\":t}),t}},{key:\"convertCatToNumeric\",value:function(t){return t.xaxis.convertedCatToNumeric=!0,t}},{key:\"convertCatToNumericXaxis\",value:function(t,e,i){t.xaxis.type=\"numeric\",t.xaxis.labels=t.xaxis.labels||{},t.xaxis.labels.formatter=t.xaxis.labels.formatter||function(t){return x.isNumber(t)?Math.floor(t):t};var a=t.xaxis.labels.formatter,s=t.xaxis.categories&&t.xaxis.categories.length?t.xaxis.categories:t.labels;return i&&i.length&&(s=i.map((function(t){return Array.isArray(t)?t:String(t)}))),s&&s.length&&(t.xaxis.labels.formatter=function(t){return x.isNumber(t)?a(s[Math.floor(t)-1]):a(t)}),t.xaxis.categories=[],t.labels=[],t.xaxis.tickAmount=t.xaxis.tickAmount||\"dataPoints\",t}},{key:\"bubble\",value:function(){return{dataLabels:{style:{colors:[\"#fff\"]}},tooltip:{shared:!1,intersect:!0},xaxis:{crosshairs:{width:0}},fill:{type:\"solid\",gradient:{shade:\"light\",inverse:!0,shadeIntensity:.55,opacityFrom:.4,opacityTo:.8}}}}},{key:\"scatter\",value:function(){return{dataLabels:{enabled:!1},tooltip:{shared:!1,intersect:!0},markers:{size:6,strokeWidth:1,hover:{sizeOffset:2}}}}},{key:\"heatmap\",value:function(){return{chart:{stacked:!1},fill:{opacity:1},dataLabels:{style:{colors:[\"#fff\"]}},stroke:{colors:[\"#fff\"]},tooltip:{followCursor:!0,marker:{show:!1},x:{show:!1}},legend:{position:\"top\",markers:{shape:\"square\",size:10,offsetY:2}},grid:{padding:{right:20}}}}},{key:\"treemap\",value:function(){return{chart:{zoom:{enabled:!1}},dataLabels:{style:{fontSize:14,fontWeight:600,colors:[\"#fff\"]}},stroke:{show:!0,width:2,colors:[\"#fff\"]},legend:{show:!1},fill:{gradient:{stops:[0,100]}},tooltip:{followCursor:!0,x:{show:!1}},grid:{padding:{left:0,right:0}},xaxis:{crosshairs:{show:!1},tooltip:{enabled:!1}}}}},{key:\"pie\",value:function(){return{chart:{toolbar:{show:!1}},plotOptions:{pie:{donut:{labels:{show:!1}}}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},style:{colors:[\"#fff\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\"#fff\"]},fill:{opacity:1,gradient:{shade:\"light\",stops:[0,100]}},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"donut\",value:function(){return{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},style:{colors:[\"#fff\"]},background:{enabled:!1},dropShadow:{enabled:!0}},stroke:{colors:[\"#fff\"]},fill:{opacity:1,gradient:{shade:\"light\",shadeIntensity:.35,stops:[80,100],opacityFrom:1,opacityTo:1}},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"polarArea\",value:function(){return this.opts.yaxis[0].tickAmount=this.opts.yaxis[0].tickAmount?this.opts.yaxis[0].tickAmount:6,{chart:{toolbar:{show:!1}},dataLabels:{formatter:function(t){return t.toFixed(1)+\"%\"},enabled:!1},stroke:{show:!0,width:2},fill:{opacity:.7},tooltip:{theme:\"dark\",fillSeriesColor:!0},legend:{position:\"right\"}}}},{key:\"radar\",value:function(){return this.opts.yaxis[0].labels.offsetY=this.opts.yaxis[0].labels.offsetY?this.opts.yaxis[0].labels.offsetY:6,{dataLabels:{enabled:!1,style:{fontSize:\"11px\"}},stroke:{width:2},markers:{size:3,strokeWidth:1,strokeOpacity:1},fill:{opacity:.2},tooltip:{shared:!1,intersect:!0,followCursor:!0},grid:{show:!1},xaxis:{labels:{formatter:function(t){return t},style:{colors:[\"#a8a8a8\"],fontSize:\"11px\"}},tooltip:{enabled:!1},crosshairs:{show:!1}}}}},{key:\"radialBar\",value:function(){return{chart:{animations:{dynamicAnimation:{enabled:!0,speed:800}},toolbar:{show:!1}},fill:{gradient:{shade:\"dark\",shadeIntensity:.4,inverseColors:!1,type:\"diagonal2\",opacityFrom:1,opacityTo:1,stops:[70,98,100]}},legend:{show:!1,position:\"right\"},tooltip:{enabled:!1,fillSeriesColor:!0}}}},{key:\"_getBoxTooltip\",value:function(t,e,i,a,s){var r=t.globals.seriesCandleO[e][i],o=t.globals.seriesCandleH[e][i],n=t.globals.seriesCandleM[e][i],l=t.globals.seriesCandleL[e][i],h=t.globals.seriesCandleC[e][i];return t.config.series[e].type&&t.config.series[e].type!==s?'<div class=\"apexcharts-custom-tooltip\">\\n '.concat(t.config.series[e].name?t.config.series[e].name:\"series-\"+(e+1),\": <strong>\").concat(t.globals.series[e][i],\"</strong>\\n </div>\"):'<div class=\"apexcharts-tooltip-box apexcharts-tooltip-'.concat(t.config.chart.type,'\">')+\"<div>\".concat(a[0],': <span class=\"value\">')+r+\"</span></div>\"+\"<div>\".concat(a[1],': <span class=\"value\">')+o+\"</span></div>\"+(n?\"<div>\".concat(a[2],': <span class=\"value\">')+n+\"</span></div>\":\"\")+\"<div>\".concat(a[3],': <span class=\"value\">')+l+\"</span></div>\"+\"<div>\".concat(a[4],': <span class=\"value\">')+h+\"</span></div></div>\"}}]),t}(),z=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\"init\",value:function(t){var e=t.responsiveOverride,a=this.opts,s=new L,r=new X(a);this.chartType=a.chart.type,\"histogram\"===this.chartType&&(a.chart.type=\"bar\",a=x.extend({plotOptions:{bar:{columnWidth:\"99.99%\"}}},a)),a=this.extendYAxis(a),a=this.extendAnnotations(a);var o=s.init(),n={};if(a&&\"object\"===i(a)){var l={};l=-1!==[\"line\",\"area\",\"bar\",\"candlestick\",\"boxPlot\",\"rangeBar\",\"rangeArea\",\"histogram\",\"bubble\",\"scatter\",\"heatmap\",\"treemap\",\"pie\",\"polarArea\",\"donut\",\"radar\",\"radialBar\"].indexOf(a.chart.type)?r[a.chart.type]():r.line(),a.chart.brush&&a.chart.brush.enabled&&(l=r.brush(l)),a.chart.stacked&&\"100%\"===a.chart.stackType&&(a=r.stacked100(a)),this.checkForDarkTheme(window.Apex),this.checkForDarkTheme(a),a.xaxis=a.xaxis||window.Apex.xaxis||{},e||(a.xaxis.convertedCatToNumeric=!1),((a=this.checkForCatToNumericXAxis(this.chartType,l,a)).chart.sparkline&&a.chart.sparkline.enabled||window.Apex.chart&&window.Apex.chart.sparkline&&window.Apex.chart.sparkline.enabled)&&(l=r.sparkline(l)),n=x.extend(o,l)}var h=x.extend(n,window.Apex);return o=x.extend(h,a),o=this.handleUserInputErrors(o)}},{key:\"checkForCatToNumericXAxis\",value:function(t,e,i){var a=new X(i),s=(\"bar\"===t||\"boxPlot\"===t)&&i.plotOptions&&i.plotOptions.bar&&i.plotOptions.bar.horizontal,r=\"pie\"===t||\"polarArea\"===t||\"donut\"===t||\"radar\"===t||\"radialBar\"===t||\"heatmap\"===t,o=\"datetime\"!==i.xaxis.type&&\"numeric\"!==i.xaxis.type,n=i.xaxis.tickPlacement?i.xaxis.tickPlacement:e.xaxis&&e.xaxis.tickPlacement;return s||r||!o||\"between\"===n||(i=a.convertCatToNumeric(i)),i}},{key:\"extendYAxis\",value:function(t,e){var i=new L;(void 0===t.yaxis||!t.yaxis||Array.isArray(t.yaxis)&&0===t.yaxis.length)&&(t.yaxis={}),t.yaxis.constructor!==Array&&window.Apex.yaxis&&window.Apex.yaxis.constructor!==Array&&(t.yaxis=x.extend(t.yaxis,window.Apex.yaxis)),t.yaxis.constructor!==Array?t.yaxis=[x.extend(i.yAxis,t.yaxis)]:t.yaxis=x.extendArray(t.yaxis,i.yAxis);var a=!1;t.yaxis.forEach((function(t){t.logarithmic&&(a=!0)}));var s=t.series;return e&&!s&&(s=e.config.series),a&&s.length!==t.yaxis.length&&s.length&&(t.yaxis=s.map((function(e,a){if(e.name||(s[a].name=\"series-\".concat(a+1)),t.yaxis[a])return t.yaxis[a].seriesName=s[a].name,t.yaxis[a];var r=x.extend(i.yAxis,t.yaxis[0]);return r.show=!1,r}))),a&&s.length>1&&s.length!==t.yaxis.length&&console.warn(\"A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both.\"),t}},{key:\"extendAnnotations\",value:function(t){return void 0===t.annotations&&(t.annotations={},t.annotations.yaxis=[],t.annotations.xaxis=[],t.annotations.points=[]),t=this.extendYAxisAnnotations(t),t=this.extendXAxisAnnotations(t),t=this.extendPointAnnotations(t)}},{key:\"extendYAxisAnnotations\",value:function(t){var e=new L;return t.annotations.yaxis=x.extendArray(void 0!==t.annotations.yaxis?t.annotations.yaxis:[],e.yAxisAnnotation),t}},{key:\"extendXAxisAnnotations\",value:function(t){var e=new L;return t.annotations.xaxis=x.extendArray(void 0!==t.annotations.xaxis?t.annotations.xaxis:[],e.xAxisAnnotation),t}},{key:\"extendPointAnnotations\",value:function(t){var e=new L;return t.annotations.points=x.extendArray(void 0!==t.annotations.points?t.annotations.points:[],e.pointAnnotation),t}},{key:\"checkForDarkTheme\",value:function(t){t.theme&&\"dark\"===t.theme.mode&&(t.tooltip||(t.tooltip={}),\"light\"!==t.tooltip.theme&&(t.tooltip.theme=\"dark\"),t.chart.foreColor||(t.chart.foreColor=\"#f6f7f8\"),t.chart.background||(t.chart.background=\"#424242\"),t.theme.palette||(t.theme.palette=\"palette4\"))}},{key:\"handleUserInputErrors\",value:function(t){var e=t;if(e.tooltip.shared&&e.tooltip.intersect)throw new Error(\"tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.\");if(\"bar\"===e.chart.type&&e.plotOptions.bar.horizontal){if(e.yaxis.length>1)throw new Error(\"Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false\");e.yaxis[0].reversed&&(e.yaxis[0].opposite=!0),e.xaxis.tooltip.enabled=!1,e.yaxis[0].tooltip.enabled=!1,e.chart.zoom.enabled=!1}return\"bar\"!==e.chart.type&&\"rangeBar\"!==e.chart.type||e.tooltip.shared&&\"barWidth\"===e.xaxis.crosshairs.width&&e.series.length>1&&(e.xaxis.crosshairs.width=\"tickWidth\"),\"candlestick\"!==e.chart.type&&\"boxPlot\"!==e.chart.type||e.yaxis[0].reversed&&(console.warn(\"Reversed y-axis in \".concat(e.chart.type,\" chart is not supported.\")),e.yaxis[0].reversed=!1),e}}]),t}(),E=function(){function t(){a(this,t)}return r(t,[{key:\"initGlobalVars\",value:function(t){t.series=[],t.seriesCandleO=[],t.seriesCandleH=[],t.seriesCandleM=[],t.seriesCandleL=[],t.seriesCandleC=[],t.seriesRangeStart=[],t.seriesRangeEnd=[],t.seriesRange=[],t.seriesPercent=[],t.seriesGoals=[],t.seriesX=[],t.seriesZ=[],t.seriesNames=[],t.seriesTotals=[],t.seriesLog=[],t.seriesColors=[],t.stackedSeriesTotals=[],t.seriesXvalues=[],t.seriesYvalues=[],t.labels=[],t.hasGroups=!1,t.groups=[],t.categoryLabels=[],t.timescaleLabels=[],t.noLabelsProvided=!1,t.resizeTimer=null,t.selectionResizeTimer=null,t.delayedElements=[],t.pointsArray=[],t.dataLabelsRects=[],t.isXNumeric=!1,t.xaxisLabelsCount=0,t.skipLastTimelinelabel=!1,t.skipFirstTimelinelabel=!1,t.isDataXYZ=!1,t.isMultiLineX=!1,t.isMultipleYAxis=!1,t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE,t.minYArr=[],t.maxYArr=[],t.maxX=-Number.MAX_VALUE,t.minX=Number.MAX_VALUE,t.initialMaxX=-Number.MAX_VALUE,t.initialMinX=Number.MAX_VALUE,t.maxDate=0,t.minDate=Number.MAX_VALUE,t.minZ=Number.MAX_VALUE,t.maxZ=-Number.MAX_VALUE,t.minXDiff=Number.MAX_VALUE,t.yAxisScale=[],t.xAxisScale=null,t.xAxisTicksPositions=[],t.yLabelsCoords=[],t.yTitleCoords=[],t.barPadForNumericAxis=0,t.padHorizontal=0,t.xRange=0,t.yRange=[],t.zRange=0,t.dataPoints=0,t.xTickAmount=0}},{key:\"globalVars\",value:function(t){return{chartID:null,cuid:null,events:{beforeMount:[],mounted:[],updated:[],clicked:[],selection:[],dataPointSelection:[],zoomed:[],scrolled:[]},colors:[],clientX:null,clientY:null,fill:{colors:[]},stroke:{colors:[]},dataLabels:{style:{colors:[]}},radarPolygons:{fill:{colors:[]}},markers:{colors:[],size:t.markers.size,largestSize:0},animationEnded:!1,isTouchDevice:\"ontouchstart\"in window||navigator.msMaxTouchPoints,isDirty:!1,isExecCalled:!1,initialConfig:null,initialSeries:[],lastXAxis:[],lastYAxis:[],columnSeries:null,labels:[],timescaleLabels:[],noLabelsProvided:!1,allSeriesCollapsed:!1,collapsedSeries:[],collapsedSeriesIndices:[],ancillaryCollapsedSeries:[],ancillaryCollapsedSeriesIndices:[],risingSeries:[],dataFormatXNumeric:!1,capturedSeriesIndex:-1,capturedDataPointIndex:-1,selectedDataPoints:[],goldenPadding:35,invalidLogScale:!1,ignoreYAxisIndexes:[],yAxisSameScaleIndices:[],maxValsInArrayIndex:0,radialSize:0,selection:void 0,zoomEnabled:\"zoom\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.zoom&&t.chart.zoom.enabled,panEnabled:\"pan\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.pan,selectionEnabled:\"selection\"===t.chart.toolbar.autoSelected&&t.chart.toolbar.tools.selection,yaxis:null,mousedown:!1,lastClientPosition:{},visibleXRange:void 0,yValueDecimal:0,total:0,SVGNS:\"http://www.w3.org/2000/svg\",svgWidth:0,svgHeight:0,noData:!1,locale:{},dom:{},memory:{methodsToExec:[]},shouldAnimate:!0,skipLastTimelinelabel:!1,skipFirstTimelinelabel:!1,delayedElements:[],axisCharts:!0,isDataXYZ:!1,resized:!1,resizeTimer:null,comboCharts:!1,dataChanged:!1,previousPaths:[],allSeriesHasEqualX:!0,pointsArray:[],dataLabelsRects:[],lastDrawnDataLabelsIndexes:[],hasNullValues:!1,easing:null,zoomed:!1,gridWidth:0,gridHeight:0,rotateXLabels:!1,defaultLabels:!1,xLabelFormatter:void 0,yLabelFormatters:[],xaxisTooltipFormatter:void 0,ttKeyFormatter:void 0,ttVal:void 0,ttZFormatter:void 0,LINE_HEIGHT_RATIO:1.618,xAxisLabelsHeight:0,xAxisGroupLabelsHeight:0,xAxisLabelsWidth:0,yAxisLabelsWidth:0,scaleX:1,scaleY:1,translateX:0,translateY:0,translateYAxisX:[],yAxisWidths:[],translateXAxisY:0,translateXAxisX:0,tooltip:null}}},{key:\"init\",value:function(t){var e=this.globalVars(t);return this.initGlobalVars(e),e.initialConfig=x.extend({},t),e.initialSeries=x.clone(t.series),e.lastXAxis=x.clone(e.initialConfig.xaxis),e.lastYAxis=x.clone(e.initialConfig.yaxis),e}}]),t}(),Y=function(){function t(e){a(this,t),this.opts=e}return r(t,[{key:\"init\",value:function(){var t=new z(this.opts).init({responsiveOverride:!1});return{config:t,globals:(new E).init(t)}}}]),t}(),F=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.opts=null,this.seriesIndex=0}return r(t,[{key:\"clippedImgArea\",value:function(t){var e=this.w,i=e.config,a=parseInt(e.globals.gridWidth,10),s=parseInt(e.globals.gridHeight,10),r=a>s?a:s,o=t.image,n=0,l=0;void 0===t.width&&void 0===t.height?void 0!==i.fill.image.width&&void 0!==i.fill.image.height?(n=i.fill.image.width+1,l=i.fill.image.height):(n=r+1,l=r):(n=t.width,l=t.height);var h=document.createElementNS(e.globals.SVGNS,\"pattern\");m.setAttrs(h,{id:t.patternID,patternUnits:t.patternUnits?t.patternUnits:\"userSpaceOnUse\",width:n+\"px\",height:l+\"px\"});var c=document.createElementNS(e.globals.SVGNS,\"image\");h.appendChild(c),c.setAttributeNS(window.SVG.xlink,\"href\",o),m.setAttrs(c,{x:0,y:0,preserveAspectRatio:\"none\",width:n+\"px\",height:l+\"px\"}),c.style.opacity=t.opacity,e.globals.dom.elDefs.node.appendChild(h)}},{key:\"getSeriesIndex\",value:function(t){var e=this.w;return(\"bar\"===e.config.chart.type||\"rangeBar\"===e.config.chart.type)&&e.config.plotOptions.bar.distributed||\"heatmap\"===e.config.chart.type||\"treemap\"===e.config.chart.type?this.seriesIndex=t.seriesNumber:this.seriesIndex=t.seriesNumber%e.globals.series.length,this.seriesIndex}},{key:\"fillPath\",value:function(t){var e=this.w;this.opts=t;var i,a,s,r=this.w.config;this.seriesIndex=this.getSeriesIndex(t);var o=this.getFillColors()[this.seriesIndex];void 0!==e.globals.seriesColors[this.seriesIndex]&&(o=e.globals.seriesColors[this.seriesIndex]),\"function\"==typeof o&&(o=o({seriesIndex:this.seriesIndex,dataPointIndex:t.dataPointIndex,value:t.value,w:e}));var n=t.fillType?t.fillType:this.getFillType(this.seriesIndex),l=Array.isArray(r.fill.opacity)?r.fill.opacity[this.seriesIndex]:r.fill.opacity;t.color&&(o=t.color);var h=o;if(-1===o.indexOf(\"rgb\")?o.length<9&&(h=x.hexToRgba(o,l)):o.indexOf(\"rgba\")>-1&&(l=x.getOpacityFromRGBA(o)),t.opacity&&(l=t.opacity),\"pattern\"===n&&(a=this.handlePatternFill({fillConfig:t.fillConfig,patternFill:a,fillColor:o,fillOpacity:l,defaultColor:h})),\"gradient\"===n&&(s=this.handleGradientFill({fillConfig:t.fillConfig,fillColor:o,fillOpacity:l,i:this.seriesIndex})),\"image\"===n){var c=r.fill.image.src,d=t.patternID?t.patternID:\"\";this.clippedImgArea({opacity:l,image:Array.isArray(c)?t.seriesNumber<c.length?c[t.seriesNumber]:c[0]:c,width:t.width?t.width:void 0,height:t.height?t.height:void 0,patternUnits:t.patternUnits,patternID:\"pattern\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(d)}),i=\"url(#pattern\".concat(e.globals.cuid).concat(t.seriesNumber+1).concat(d,\")\")}else i=\"gradient\"===n?s:\"pattern\"===n?a:h;return t.solid&&(i=h),i}},{key:\"getFillType\",value:function(t){var e=this.w;return Array.isArray(e.config.fill.type)?e.config.fill.type[t]:e.config.fill.type}},{key:\"getFillColors\",value:function(){var t=this.w,e=t.config,i=this.opts,a=[];return t.globals.comboCharts?\"line\"===t.config.series[this.seriesIndex].type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors):\"line\"===e.chart.type?Array.isArray(t.globals.stroke.colors)?a=t.globals.stroke.colors:a.push(t.globals.stroke.colors):Array.isArray(t.globals.fill.colors)?a=t.globals.fill.colors:a.push(t.globals.fill.colors),void 0!==i.fillColors&&(a=[],Array.isArray(i.fillColors)?a=i.fillColors.slice():a.push(i.fillColors)),a}},{key:\"handlePatternFill\",value:function(t){var e=t.fillConfig,i=t.patternFill,a=t.fillColor,s=t.fillOpacity,r=t.defaultColor,o=this.w.config.fill;e&&(o=e);var n=this.opts,l=new m(this.ctx),h=Array.isArray(o.pattern.strokeWidth)?o.pattern.strokeWidth[this.seriesIndex]:o.pattern.strokeWidth,c=a;Array.isArray(o.pattern.style)?i=void 0!==o.pattern.style[n.seriesNumber]?l.drawPattern(o.pattern.style[n.seriesNumber],o.pattern.width,o.pattern.height,c,h,s):r:i=l.drawPattern(o.pattern.style,o.pattern.width,o.pattern.height,c,h,s);return i}},{key:\"handleGradientFill\",value:function(t){var e=t.fillColor,i=t.fillOpacity,a=t.fillConfig,s=t.i,r=this.w.config.fill;a&&(r=a);var o,n=this.opts,l=new m(this.ctx),h=new x,c=r.gradient.type,d=e,g=void 0===r.gradient.opacityFrom?i:Array.isArray(r.gradient.opacityFrom)?r.gradient.opacityFrom[s]:r.gradient.opacityFrom;d.indexOf(\"rgba\")>-1&&(g=x.getOpacityFromRGBA(d));var u=void 0===r.gradient.opacityTo?i:Array.isArray(r.gradient.opacityTo)?r.gradient.opacityTo[s]:r.gradient.opacityTo;if(void 0===r.gradient.gradientToColors||0===r.gradient.gradientToColors.length)o=\"dark\"===r.gradient.shade?h.shadeColor(-1*parseFloat(r.gradient.shadeIntensity),e.indexOf(\"rgb\")>-1?x.rgb2hex(e):e):h.shadeColor(parseFloat(r.gradient.shadeIntensity),e.indexOf(\"rgb\")>-1?x.rgb2hex(e):e);else if(r.gradient.gradientToColors[n.seriesNumber]){var f=r.gradient.gradientToColors[n.seriesNumber];o=f,f.indexOf(\"rgba\")>-1&&(u=x.getOpacityFromRGBA(f))}else o=e;if(r.gradient.gradientFrom&&(d=r.gradient.gradientFrom),r.gradient.gradientTo&&(o=r.gradient.gradientTo),r.gradient.inverseColors){var p=d;d=o,o=p}return d.indexOf(\"rgb\")>-1&&(d=x.rgb2hex(d)),o.indexOf(\"rgb\")>-1&&(o=x.rgb2hex(o)),l.drawGradient(c,d,o,g,u,n.size,r.gradient.stops,r.gradient.colorStops,s)}}]),t}(),R=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"setGlobalMarkerSize\",value:function(){var t=this.w;if(t.globals.markers.size=Array.isArray(t.config.markers.size)?t.config.markers.size:[t.config.markers.size],t.globals.markers.size.length>0){if(t.globals.markers.size.length<t.globals.series.length+1)for(var e=0;e<=t.globals.series.length;e++)void 0===t.globals.markers.size[e]&&t.globals.markers.size.push(t.globals.markers.size[0])}else t.globals.markers.size=t.config.series.map((function(e){return t.config.markers.size}))}},{key:\"plotChartMarkers\",value:function(t,e,i,a){var s,r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=this.w,n=e,l=t,h=null,c=new m(this.ctx),d=o.config.markers.discrete&&o.config.markers.discrete.length;if((o.globals.markers.size[e]>0||r||d)&&(h=c.group({class:r||d?\"\":\"apexcharts-series-markers\"})).attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(o.globals.cuid,\")\")),Array.isArray(l.x))for(var g=0;g<l.x.length;g++){var u=i;1===i&&0===g&&(u=0),1===i&&1===g&&(u=1);var f=\"apexcharts-marker\";\"line\"!==o.config.chart.type&&\"area\"!==o.config.chart.type||o.globals.comboCharts||o.config.tooltip.intersect||(f+=\" no-pointer-events\");var p=Array.isArray(o.config.markers.size)?o.globals.markers.size[e]>0:o.config.markers.size>0;if(p||r||d){x.isNumber(l.y[g])?f+=\" w\".concat(x.randomId()):f=\"apexcharts-nullpoint\";var b=this.getMarkerConfig({cssClass:f,seriesIndex:e,dataPointIndex:u});o.config.series[n].data[u]&&(o.config.series[n].data[u].fillColor&&(b.pointFillColor=o.config.series[n].data[u].fillColor),o.config.series[n].data[u].strokeColor&&(b.pointStrokeColor=o.config.series[n].data[u].strokeColor)),a&&(b.pSize=a),(s=c.drawMarker(l.x[g],l.y[g],b)).attr(\"rel\",u),s.attr(\"j\",u),s.attr(\"index\",e),s.node.setAttribute(\"default-marker-size\",b.pSize);var y=new v(this.ctx);y.setSelectionFilter(s,e,u),this.addEvents(s),h&&h.add(s)}else void 0===o.globals.pointsArray[e]&&(o.globals.pointsArray[e]=[]),o.globals.pointsArray[e].push([l.x[g],l.y[g]])}return h}},{key:\"getMarkerConfig\",value:function(t){var e=t.cssClass,i=t.seriesIndex,a=t.dataPointIndex,s=void 0===a?null:a,r=t.finishRadius,o=void 0===r?null:r,n=this.w,l=this.getMarkerStyle(i),h=n.globals.markers.size[i],c=n.config.markers;return null!==s&&c.discrete.length&&c.discrete.map((function(t){t.seriesIndex===i&&t.dataPointIndex===s&&(l.pointStrokeColor=t.strokeColor,l.pointFillColor=t.fillColor,h=t.size,l.pointShape=t.shape)})),{pSize:null===o?h:o,pRadius:c.radius,width:Array.isArray(c.width)?c.width[i]:c.width,height:Array.isArray(c.height)?c.height[i]:c.height,pointStrokeWidth:Array.isArray(c.strokeWidth)?c.strokeWidth[i]:c.strokeWidth,pointStrokeColor:l.pointStrokeColor,pointFillColor:l.pointFillColor,shape:l.pointShape||(Array.isArray(c.shape)?c.shape[i]:c.shape),class:e,pointStrokeOpacity:Array.isArray(c.strokeOpacity)?c.strokeOpacity[i]:c.strokeOpacity,pointStrokeDashArray:Array.isArray(c.strokeDashArray)?c.strokeDashArray[i]:c.strokeDashArray,pointFillOpacity:Array.isArray(c.fillOpacity)?c.fillOpacity[i]:c.fillOpacity,seriesIndex:i}}},{key:\"addEvents\",value:function(t){var e=this.w,i=new m(this.ctx);t.node.addEventListener(\"mouseenter\",i.pathMouseEnter.bind(this.ctx,t)),t.node.addEventListener(\"mouseleave\",i.pathMouseLeave.bind(this.ctx,t)),t.node.addEventListener(\"mousedown\",i.pathMouseDown.bind(this.ctx,t)),t.node.addEventListener(\"click\",e.config.markers.onClick),t.node.addEventListener(\"dblclick\",e.config.markers.onDblClick),t.node.addEventListener(\"touchstart\",i.pathMouseDown.bind(this.ctx,t),{passive:!0})}},{key:\"getMarkerStyle\",value:function(t){var e=this.w,i=e.globals.markers.colors,a=e.config.markers.strokeColor||e.config.markers.strokeColors;return{pointStrokeColor:Array.isArray(a)?a[t]:a,pointFillColor:Array.isArray(i)?i[t]:i}}}]),t}(),D=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled}return r(t,[{key:\"draw\",value:function(t,e,i){var a=this.w,s=new m(this.ctx),r=i.realIndex,o=i.pointsPos,n=i.zRatio,l=i.elParent,h=s.group({class:\"apexcharts-series-markers apexcharts-series-\".concat(a.config.chart.type)});if(h.attr(\"clip-path\",\"url(#gridRectMarkerMask\".concat(a.globals.cuid,\")\")),Array.isArray(o.x))for(var c=0;c<o.x.length;c++){var d=e+1,g=!0;0===e&&0===c&&(d=0),0===e&&1===c&&(d=1);var u=0,f=a.globals.markers.size[r];if(n!==1/0){f=a.globals.seriesZ[r][d]/n;var p=a.config.plotOptions.bubble;p.minBubbleRadius&&f<p.minBubbleRadius&&(f=p.minBubbleRadius),p.maxBubbleRadius&&f>p.maxBubbleRadius&&(f=p.maxBubbleRadius)}a.config.chart.animations.enabled||(u=f);var x=o.x[c],b=o.y[c];if(u=u||0,null!==b&&void 0!==a.globals.series[r][d]||(g=!1),g){var v=this.drawPoint(x,b,u,f,r,d,e);h.add(v)}l.add(h)}}},{key:\"drawPoint\",value:function(t,e,i,a,s,r,o){var n=this.w,l=s,h=new b(this.ctx),c=new v(this.ctx),d=new F(this.ctx),g=new R(this.ctx),u=new m(this.ctx),f=g.getMarkerConfig({cssClass:\"apexcharts-marker\",seriesIndex:l,dataPointIndex:r,finishRadius:\"bubble\"===n.config.chart.type||n.globals.comboCharts&&n.config.series[s]&&\"bubble\"===n.config.series[s].type?a:null});a=f.pSize;var p,x=d.fillPath({seriesNumber:s,dataPointIndex:r,color:f.pointFillColor,patternUnits:\"objectBoundingBox\",value:n.globals.series[s][o]});if(\"circle\"===f.shape?p=u.drawCircle(i):\"square\"!==f.shape&&\"rect\"!==f.shape||(p=u.drawRect(0,0,f.width-f.pointStrokeWidth/2,f.height-f.pointStrokeWidth/2,f.pRadius)),n.config.series[l].data[r]&&n.config.series[l].data[r].fillColor&&(x=n.config.series[l].data[r].fillColor),p.attr({x:t-f.width/2-f.pointStrokeWidth/2,y:e-f.height/2-f.pointStrokeWidth/2,cx:t,cy:e,fill:x,\"fill-opacity\":f.pointFillOpacity,stroke:f.pointStrokeColor,r:a,\"stroke-width\":f.pointStrokeWidth,\"stroke-dasharray\":f.pointStrokeDashArray,\"stroke-opacity\":f.pointStrokeOpacity}),n.config.chart.dropShadow.enabled){var y=n.config.chart.dropShadow;c.dropShadow(p,y,s)}if(!this.initialAnim||n.globals.dataChanged||n.globals.resized)n.globals.animationEnded=!0;else{var w=n.config.chart.animations.speed;h.animateMarker(p,0,\"circle\"===f.shape?a:{width:f.width,height:f.height},w,n.globals.easing,(function(){window.setTimeout((function(){h.animationCompleted(p)}),100)}))}if(n.globals.dataChanged&&\"circle\"===f.shape)if(this.dynamicAnim){var k,A,S,C,L=n.config.chart.animations.dynamicAnimation.speed;null!=(C=n.globals.previousPaths[s]&&n.globals.previousPaths[s][o])&&(k=C.x,A=C.y,S=void 0!==C.r?C.r:a);for(var P=0;P<n.globals.collapsedSeries.length;P++)n.globals.collapsedSeries[P].index===s&&(L=1,a=0);0===t&&0===e&&(a=0),h.animateCircle(p,{cx:k,cy:A,r:S},{cx:t,cy:e,r:a},L,n.globals.easing)}else p.attr({r:a});return p.attr({rel:r,j:r,index:s,\"default-marker-size\":a}),c.setSelectionFilter(p,s,r),g.addEvents(p),p.node.classList.add(\"apexcharts-marker\"),p}},{key:\"centerTextInBubble\",value:function(t){var e=this.w;return{y:t+=parseInt(e.config.dataLabels.style.fontSize,10)/4}}}]),t}(),H=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"dataLabelsCorrection\",value:function(t,e,i,a,s,r,o){var n=this.w,l=!1,h=new m(this.ctx).getTextRects(i,o),c=h.width,d=h.height;e<0&&(e=0),e>n.globals.gridHeight+d&&(e=n.globals.gridHeight+d/2),void 0===n.globals.dataLabelsRects[a]&&(n.globals.dataLabelsRects[a]=[]),n.globals.dataLabelsRects[a].push({x:t,y:e,width:c,height:d});var g=n.globals.dataLabelsRects[a].length-2,u=void 0!==n.globals.lastDrawnDataLabelsIndexes[a]?n.globals.lastDrawnDataLabelsIndexes[a][n.globals.lastDrawnDataLabelsIndexes[a].length-1]:0;if(void 0!==n.globals.dataLabelsRects[a][g]){var f=n.globals.dataLabelsRects[a][u];(t>f.x+f.width+2||e>f.y+f.height+2||t+c<f.x)&&(l=!0)}return(0===s||r)&&(l=!0),{x:t,y:e,textRects:h,drawnextLabel:l}}},{key:\"drawDataLabel\",value:function(t){var e=this,i=t.type,a=t.pos,s=t.i,r=t.j,o=t.isRangeStart,n=t.strokeWidth,l=void 0===n?2:n,h=this.w,c=new m(this.ctx),d=h.config.dataLabels,g=0,u=0,f=r,p=null;if(!d.enabled||!Array.isArray(a.x))return p;p=c.group({class:\"apexcharts-data-labels\"});for(var x=0;x<a.x.length;x++)if(g=a.x[x]+d.offsetX,u=a.y[x]+d.offsetY+l,!isNaN(g)){1===r&&0===x&&(f=0),1===r&&1===x&&(f=1);var b=h.globals.series[s][f];\"rangeArea\"===i&&(b=o?h.globals.seriesRangeStart[s][f]:h.globals.seriesRangeEnd[s][f]);var v=\"\",y=function(t){return h.config.dataLabels.formatter(t,{ctx:e.ctx,seriesIndex:s,dataPointIndex:f,w:h})};if(\"bubble\"===h.config.chart.type)v=y(b=h.globals.seriesZ[s][f]),u=a.y[x],u=new D(this.ctx).centerTextInBubble(u,s,f).y;else void 0!==b&&(v=y(b));this.plotDataLabelsText({x:g,y:u,text:v,i:s,j:f,parent:p,offsetCorrection:!0,dataLabelsConfig:h.config.dataLabels})}return p}},{key:\"plotDataLabelsText\",value:function(t){var e=this.w,i=new m(this.ctx),a=t.x,s=t.y,r=t.i,o=t.j,n=t.text,l=t.textAnchor,h=t.fontSize,c=t.parent,d=t.dataLabelsConfig,g=t.color,u=t.alwaysDrawDataLabel,f=t.offsetCorrection;if(!(Array.isArray(e.config.dataLabels.enabledOnSeries)&&e.config.dataLabels.enabledOnSeries.indexOf(r)<0)){var p={x:a,y:s,drawnextLabel:!0,textRects:null};f&&(p=this.dataLabelsCorrection(a,s,n,r,o,u,parseInt(d.style.fontSize,10))),e.globals.zoomed||(a=p.x,s=p.y),p.textRects&&(a<-10-p.textRects.width||a>e.globals.gridWidth+p.textRects.width+10)&&(n=\"\");var x=e.globals.dataLabels.style.colors[r];((\"bar\"===e.config.chart.type||\"rangeBar\"===e.config.chart.type)&&e.config.plotOptions.bar.distributed||e.config.dataLabels.distributed)&&(x=e.globals.dataLabels.style.colors[o]),\"function\"==typeof x&&(x=x({series:e.globals.series,seriesIndex:r,dataPointIndex:o,w:e})),g&&(x=g);var b=d.offsetX,y=d.offsetY;if(\"bar\"!==e.config.chart.type&&\"rangeBar\"!==e.config.chart.type||(b=0,y=0),p.drawnextLabel){var w=i.drawText({width:100,height:parseInt(d.style.fontSize,10),x:a+b,y:s+y,foreColor:x,textAnchor:l||d.textAnchor,text:n,fontSize:h||d.style.fontSize,fontFamily:d.style.fontFamily,fontWeight:d.style.fontWeight||\"normal\"});if(w.attr({class:\"apexcharts-datalabel\",cx:a,cy:s}),d.dropShadow.enabled){var k=d.dropShadow;new v(this.ctx).dropShadow(w,k)}c.add(w),void 0===e.globals.lastDrawnDataLabelsIndexes[r]&&(e.globals.lastDrawnDataLabelsIndexes[r]=[]),e.globals.lastDrawnDataLabelsIndexes[r].push(o)}}}},{key:\"addBackgroundToDataLabel\",value:function(t,e){var i=this.w,a=i.config.dataLabels.background,s=a.padding,r=a.padding/2,o=e.width,n=e.height,l=new m(this.ctx).drawRect(e.x-s,e.y-r/2,o+2*s,n+r,a.borderRadius,\"transparent\"===i.config.chart.background?\"#fff\":i.config.chart.background,a.opacity,a.borderWidth,a.borderColor);a.dropShadow.enabled&&new v(this.ctx).dropShadow(l,a.dropShadow);return l}},{key:\"dataLabelsBackground\",value:function(){var t=this.w;if(\"bubble\"!==t.config.chart.type)for(var e=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-datalabels text\"),i=0;i<e.length;i++){var a=e[i],s=a.getBBox(),r=null;if(s.width&&s.height&&(r=this.addBackgroundToDataLabel(a,s)),r){a.parentNode.insertBefore(r.node,a);var o=a.getAttribute(\"fill\");t.config.chart.animations.enabled&&!t.globals.resized&&!t.globals.dataChanged?r.animate().attr({fill:o}):r.attr({fill:o}),a.setAttribute(\"fill\",t.config.dataLabels.background.foreColor)}}}},{key:\"bringForward\",value:function(){for(var t=this.w,e=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-datalabels\"),i=t.globals.dom.baseEl.querySelector(\".apexcharts-plot-series:last-child\"),a=0;a<e.length;a++)i&&i.insertBefore(e[a],i.nextSibling)}}]),t}(),N=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.legendInactiveClass=\"legend-mouseover-inactive\"}return r(t,[{key:\"getAllSeriesEls\",value:function(){return this.w.globals.dom.baseEl.getElementsByClassName(\"apexcharts-series\")}},{key:\"getSeriesByName\",value:function(t){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-inner .apexcharts-series[seriesName='\".concat(x.escapeString(t),\"']\"))}},{key:\"isSeriesHidden\",value:function(t){var e=this.getSeriesByName(t),i=parseInt(e.getAttribute(\"data:realIndex\"),10);return{isHidden:e.classList.contains(\"apexcharts-series-collapsed\"),realIndex:i}}},{key:\"addCollapsedClassToSeries\",value:function(t,e){var i=this.w;function a(i){for(var a=0;a<i.length;a++)i[a].index===e&&t.node.classList.add(\"apexcharts-series-collapsed\")}a(i.globals.collapsedSeries),a(i.globals.ancillaryCollapsedSeries)}},{key:\"toggleSeries\",value:function(t){var e=this.isSeriesHidden(t);return this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,e.isHidden),e.isHidden}},{key:\"showSeries\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden&&this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!0)}},{key:\"hideSeries\",value:function(t){var e=this.isSeriesHidden(t);e.isHidden||this.ctx.legend.legendHelpers.toggleDataSeries(e.realIndex,!1)}},{key:\"resetSeries\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w,s=x.clone(a.globals.initialSeries);a.globals.previousPaths=[],i?(a.globals.collapsedSeries=[],a.globals.ancillaryCollapsedSeries=[],a.globals.collapsedSeriesIndices=[],a.globals.ancillaryCollapsedSeriesIndices=[]):s=this.emptyCollapsedSeries(s),a.config.series=s,t&&(e&&(a.globals.zoomed=!1,this.ctx.updateHelpers.revertDefaultAxisMinMax()),this.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled))}},{key:\"emptyCollapsedSeries\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)e.globals.collapsedSeriesIndices.indexOf(i)>-1&&(t[i].data=[]);return t}},{key:\"toggleSeriesOnHover\",value:function(t,e){var i=this.w;e||(e=t.target);var a=i.globals.dom.baseEl.querySelectorAll(\".apexcharts-series, .apexcharts-datalabels\");if(\"mousemove\"===t.type){var s=parseInt(e.getAttribute(\"rel\"),10)-1,r=null,o=null;i.globals.axisCharts||\"radialBar\"===i.config.chart.type?i.globals.axisCharts?(r=i.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(s,\"']\")),o=i.globals.dom.baseEl.querySelector(\".apexcharts-datalabels[data\\\\:realIndex='\".concat(s,\"']\"))):r=i.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(s+1,\"']\")):r=i.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(s+1,\"'] path\"));for(var n=0;n<a.length;n++)a[n].classList.add(this.legendInactiveClass);null!==r&&(i.globals.axisCharts||r.parentNode.classList.remove(this.legendInactiveClass),r.classList.remove(this.legendInactiveClass),null!==o&&o.classList.remove(this.legendInactiveClass))}else if(\"mouseout\"===t.type)for(var l=0;l<a.length;l++)a[l].classList.remove(this.legendInactiveClass)}},{key:\"highlightRangeInSeries\",value:function(t,e){var i=this,a=this.w,s=a.globals.dom.baseEl.getElementsByClassName(\"apexcharts-heatmap-rect\"),r=function(t){for(var e=0;e<s.length;e++)s[e].classList[t](i.legendInactiveClass)};if(\"mousemove\"===t.type){var o=parseInt(e.getAttribute(\"rel\"),10)-1;r(\"add\"),function(t){for(var e=0;e<s.length;e++){var a=parseInt(s[e].getAttribute(\"val\"),10);a>=t.from&&a<=t.to&&s[e].classList.remove(i.legendInactiveClass)}}(a.config.plotOptions.heatmap.colorScale.ranges[o])}else\"mouseout\"===t.type&&r(\"remove\")}},{key:\"getActiveConfigSeriesIndex\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"asc\",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=this.w,a=0;if(i.config.series.length>1)for(var s=i.config.series.map((function(t,a){return t.data&&t.data.length>0&&(!i.globals.comboCharts||0===e.length||e.length&&e.indexOf(i.config.series[a].type)>-1)?a:-1})),r=\"asc\"===t?0:s.length-1;\"asc\"===t?r<s.length:r>=0;\"asc\"===t?r++:r--)if(-1!==s[r]){a=s[r];break}return a}},{key:\"getBarSeriesIndices\",value:function(){return this.w.globals.comboCharts?this.w.config.series.map((function(t,e){return\"bar\"===t.type||\"column\"===t.type?e:-1})).filter((function(t){return-1!==t})):this.w.config.series.map((function(t,e){return e}))}},{key:\"getPreviousPaths\",value:function(){var t=this.w;function e(e,i,a){for(var s=e[i].childNodes,r={type:a,paths:[],realIndex:e[i].getAttribute(\"data:realIndex\")},o=0;o<s.length;o++)if(s[o].hasAttribute(\"pathTo\")){var n=s[o].getAttribute(\"pathTo\");r.paths.push({d:n})}t.globals.previousPaths.push(r)}t.globals.previousPaths=[];[\"line\",\"area\",\"bar\",\"rangebar\",\"rangeArea\",\"candlestick\",\"radar\"].forEach((function(i){for(var a,s=(a=i,t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(a,\"-series .apexcharts-series\"))),r=0;r<s.length;r++)e(s,r,i)})),this.handlePrevBubbleScatterPaths(\"bubble\"),this.handlePrevBubbleScatterPaths(\"scatter\");var i=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t.config.chart.type,\" .apexcharts-series\"));if(i.length>0)for(var a=function(e){for(var i=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t.config.chart.type,\" .apexcharts-series[data\\\\:realIndex='\").concat(e,\"'] rect\")),a=[],s=function(t){var e=function(e){return i[t].getAttribute(e)},s={x:parseFloat(e(\"x\")),y:parseFloat(e(\"y\")),width:parseFloat(e(\"width\")),height:parseFloat(e(\"height\"))};a.push({rect:s,color:i[t].getAttribute(\"color\")})},r=0;r<i.length;r++)s(r);t.globals.previousPaths.push(a)},s=0;s<i.length;s++)a(s);t.globals.axisCharts||(t.globals.previousPaths=t.globals.series)}},{key:\"handlePrevBubbleScatterPaths\",value:function(t){var e=this.w,i=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t,\"-series .apexcharts-series\"));if(i.length>0)for(var a=0;a<i.length;a++){for(var s=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-\".concat(t,\"-series .apexcharts-series[data\\\\:realIndex='\").concat(a,\"'] circle\")),r=[],o=0;o<s.length;o++)r.push({x:s[o].getAttribute(\"cx\"),y:s[o].getAttribute(\"cy\"),r:s[o].getAttribute(\"r\")});e.globals.previousPaths.push(r)}}},{key:\"clearPreviousPaths\",value:function(){var t=this.w;t.globals.previousPaths=[],t.globals.allSeriesCollapsed=!1}},{key:\"handleNoData\",value:function(){var t=this.w,e=t.config.noData,i=new m(this.ctx),a=t.globals.svgWidth/2,s=t.globals.svgHeight/2,r=\"middle\";if(t.globals.noData=!0,t.globals.animationEnded=!0,\"left\"===e.align?(a=10,r=\"start\"):\"right\"===e.align&&(a=t.globals.svgWidth-10,r=\"end\"),\"top\"===e.verticalAlign?s=50:\"bottom\"===e.verticalAlign&&(s=t.globals.svgHeight-50),a+=e.offsetX,s=s+parseInt(e.style.fontSize,10)+2+e.offsetY,void 0!==e.text&&\"\"!==e.text){var o=i.drawText({x:a,y:s,text:e.text,textAnchor:r,fontSize:e.style.fontSize,fontFamily:e.style.fontFamily,foreColor:e.style.color,opacity:1,class:\"apexcharts-text-nodata\"});t.globals.dom.Paper.add(o)}}},{key:\"setNullSeriesToZeroValues\",value:function(t){for(var e=this.w,i=0;i<t.length;i++)if(0===t[i].length)for(var a=0;a<t[e.globals.maxValsInArrayIndex].length;a++)t[i].push(0);return t}},{key:\"hasAllSeriesEqualX\",value:function(){for(var t=!0,e=this.w,i=this.filteredSeriesX(),a=0;a<i.length-1;a++)if(i[a][0]!==i[a+1][0]){t=!1;break}return e.globals.allSeriesHasEqualX=t,t}},{key:\"filteredSeriesX\",value:function(){var t=this.w.globals.seriesX.map((function(t){return t.length>0?t:[]}));return t}}]),t}(),O=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.twoDSeries=[],this.threeDSeries=[],this.twoDSeriesX=[],this.seriesGoals=[],this.coreUtils=new y(this.ctx)}return r(t,[{key:\"isMultiFormat\",value:function(){return this.isFormatXY()||this.isFormat2DArray()}},{key:\"isFormatXY\",value:function(){var t=this.w.config.series.slice(),e=new N(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&null!==t[this.activeSeriesIndex].data[0]&&void 0!==t[this.activeSeriesIndex].data[0].x&&null!==t[this.activeSeriesIndex].data[0])return!0}},{key:\"isFormat2DArray\",value:function(){var t=this.w.config.series.slice(),e=new N(this.ctx);if(this.activeSeriesIndex=e.getActiveConfigSeriesIndex(),void 0!==t[this.activeSeriesIndex].data&&t[this.activeSeriesIndex].data.length>0&&void 0!==t[this.activeSeriesIndex].data[0]&&null!==t[this.activeSeriesIndex].data[0]&&t[this.activeSeriesIndex].data[0].constructor===Array)return!0}},{key:\"handleFormat2DArray\",value:function(t,e){for(var i=this.w.config,a=this.w.globals,s=\"boxPlot\"===i.chart.type||\"boxPlot\"===i.series[e].type,r=0;r<t[e].data.length;r++)if(void 0!==t[e].data[r][1]&&(Array.isArray(t[e].data[r][1])&&4===t[e].data[r][1].length&&!s?this.twoDSeries.push(x.parseNumber(t[e].data[r][1][3])):t[e].data[r].length>=5?this.twoDSeries.push(x.parseNumber(t[e].data[r][4])):this.twoDSeries.push(x.parseNumber(t[e].data[r][1])),a.dataFormatXNumeric=!0),\"datetime\"===i.xaxis.type){var o=new Date(t[e].data[r][0]);o=new Date(o).getTime(),this.twoDSeriesX.push(o)}else this.twoDSeriesX.push(t[e].data[r][0]);for(var n=0;n<t[e].data.length;n++)void 0!==t[e].data[n][2]&&(this.threeDSeries.push(t[e].data[n][2]),a.isDataXYZ=!0)}},{key:\"handleFormatXY\",value:function(t,e){var i=this.w.config,a=this.w.globals,s=new T(this.ctx),r=e;a.collapsedSeriesIndices.indexOf(e)>-1&&(r=this.activeSeriesIndex);for(var o=0;o<t[e].data.length;o++)void 0!==t[e].data[o].y&&(Array.isArray(t[e].data[o].y)?this.twoDSeries.push(x.parseNumber(t[e].data[o].y[t[e].data[o].y.length-1])):this.twoDSeries.push(x.parseNumber(t[e].data[o].y))),void 0!==t[e].data[o].goals&&Array.isArray(t[e].data[o].goals)?(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(t[e].data[o].goals)):(void 0===this.seriesGoals[e]&&(this.seriesGoals[e]=[]),this.seriesGoals[e].push(null));for(var n=0;n<t[r].data.length;n++){var l=\"string\"==typeof t[r].data[n].x,h=Array.isArray(t[r].data[n].x),c=!h&&!!s.isValidDate(t[r].data[n].x.toString());if(l||c)if(l||i.xaxis.convertedCatToNumeric){var d=a.isBarHorizontal&&a.isRangeData;\"datetime\"!==i.xaxis.type||d?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[r].data[n].x)):this.twoDSeriesX.push(s.parseDate(t[r].data[n].x))}else\"datetime\"===i.xaxis.type?this.twoDSeriesX.push(s.parseDate(t[r].data[n].x.toString())):(a.dataFormatXNumeric=!0,a.isXNumeric=!0,this.twoDSeriesX.push(parseFloat(t[r].data[n].x)));else h?(this.fallbackToCategory=!0,this.twoDSeriesX.push(t[r].data[n].x)):(a.isXNumeric=!0,a.dataFormatXNumeric=!0,this.twoDSeriesX.push(t[r].data[n].x))}if(t[e].data[0]&&void 0!==t[e].data[0].z){for(var g=0;g<t[e].data.length;g++)this.threeDSeries.push(t[e].data[g].z);a.isDataXYZ=!0}}},{key:\"handleRangeData\",value:function(t,e){var i=this.w.globals,a={};return this.isFormat2DArray()?a=this.handleRangeDataFormat(\"array\",t,e):this.isFormatXY()&&(a=this.handleRangeDataFormat(\"xy\",t,e)),i.seriesRangeStart.push(a.start),i.seriesRangeEnd.push(a.end),i.seriesRange.push(a.rangeUniques),i.seriesRange.forEach((function(t,e){t&&t.forEach((function(t,e){t.y.forEach((function(e,i){for(var a=0;a<t.y.length;a++)if(i!==a){var s=e.y1,r=e.y2,o=t.y[a].y1;s<=t.y[a].y2&&o<=r&&(t.overlaps.indexOf(e.rangeName)<0&&t.overlaps.push(e.rangeName),t.overlaps.indexOf(t.y[a].rangeName)<0&&t.overlaps.push(t.y[a].rangeName))}}))}))})),a}},{key:\"handleCandleStickBoxData\",value:function(t,e){var i=this.w.globals,a={};return this.isFormat2DArray()?a=this.handleCandleStickBoxDataFormat(\"array\",t,e):this.isFormatXY()&&(a=this.handleCandleStickBoxDataFormat(\"xy\",t,e)),i.seriesCandleO[e]=a.o,i.seriesCandleH[e]=a.h,i.seriesCandleM[e]=a.m,i.seriesCandleL[e]=a.l,i.seriesCandleC[e]=a.c,a}},{key:\"handleRangeDataFormat\",value:function(t,e,i){var a=[],s=[],r=e[i].data.filter((function(t,e,i){return e===i.findIndex((function(e){return e.x===t.x}))})).map((function(t,e){return{x:t.x,overlaps:[],y:[]}}));if(\"array\"===t)for(var o=0;o<e[i].data.length;o++)Array.isArray(e[i].data[o])?(a.push(e[i].data[o][1][0]),s.push(e[i].data[o][1][1])):(a.push(e[i].data[o]),s.push(e[i].data[o]));else if(\"xy\"===t)for(var n=function(t){var o=Array.isArray(e[i].data[t].y),n=x.randomId(),l=e[i].data[t].x,h={y1:o?e[i].data[t].y[0]:e[i].data[t].y,y2:o?e[i].data[t].y[1]:e[i].data[t].y,rangeName:n};e[i].data[t].rangeName=n;var c=r.findIndex((function(t){return t.x===l}));r[c].y.push(h),a.push(h.y1),s.push(h.y2)},l=0;l<e[i].data.length;l++)n(l);return{start:a,end:s,rangeUniques:r}}},{key:\"handleCandleStickBoxDataFormat\",value:function(t,e,i){var a=this.w,s=\"boxPlot\"===a.config.chart.type||\"boxPlot\"===a.config.series[i].type,r=[],o=[],n=[],l=[],h=[];if(\"array\"===t)if(s&&6===e[i].data[0].length||!s&&5===e[i].data[0].length)for(var c=0;c<e[i].data.length;c++)r.push(e[i].data[c][1]),o.push(e[i].data[c][2]),s?(n.push(e[i].data[c][3]),l.push(e[i].data[c][4]),h.push(e[i].data[c][5])):(l.push(e[i].data[c][3]),h.push(e[i].data[c][4]));else for(var d=0;d<e[i].data.length;d++)Array.isArray(e[i].data[d][1])&&(r.push(e[i].data[d][1][0]),o.push(e[i].data[d][1][1]),s?(n.push(e[i].data[d][1][2]),l.push(e[i].data[d][1][3]),h.push(e[i].data[d][1][4])):(l.push(e[i].data[d][1][2]),h.push(e[i].data[d][1][3])));else if(\"xy\"===t)for(var g=0;g<e[i].data.length;g++)Array.isArray(e[i].data[g].y)&&(r.push(e[i].data[g].y[0]),o.push(e[i].data[g].y[1]),s?(n.push(e[i].data[g].y[2]),l.push(e[i].data[g].y[3]),h.push(e[i].data[g].y[4])):(l.push(e[i].data[g].y[2]),h.push(e[i].data[g].y[3])));return{o:r,h:o,m:n,l:l,c:h}}},{key:\"parseDataAxisCharts\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.ctx,a=this.w.config,s=this.w.globals,r=new T(i),o=a.labels.length>0?a.labels.slice():a.xaxis.categories.slice();s.isRangeBar=\"rangeBar\"===a.chart.type&&s.isBarHorizontal,s.hasGroups=\"category\"===a.xaxis.type&&a.xaxis.group.groups.length>0,s.hasGroups&&(s.groups=a.xaxis.group.groups);for(var n=function(){for(var t=0;t<o.length;t++)if(\"string\"==typeof o[t]){if(!r.isValidDate(o[t]))throw new Error(\"You have provided invalid Date format. Please provide a valid JavaScript Date\");e.twoDSeriesX.push(r.parseDate(o[t]))}else e.twoDSeriesX.push(o[t])},l=0;l<t.length;l++){if(this.twoDSeries=[],this.twoDSeriesX=[],this.threeDSeries=[],void 0===t[l].data)return void console.error(\"It is a possibility that you may have not included 'data' property in series.\");if(\"rangeBar\"!==a.chart.type&&\"rangeArea\"!==a.chart.type&&\"rangeBar\"!==t[l].type&&\"rangeArea\"!==t[l].type||(s.isRangeData=!0,s.isComboCharts?\"rangeBar\"!==t[l].type&&\"rangeArea\"!==t[l].type||this.handleRangeData(t,l):\"rangeBar\"!==a.chart.type&&\"rangeArea\"!==a.chart.type||this.handleRangeData(t,l)),this.isMultiFormat())this.isFormat2DArray()?this.handleFormat2DArray(t,l):this.isFormatXY()&&this.handleFormatXY(t,l),\"candlestick\"!==a.chart.type&&\"candlestick\"!==t[l].type&&\"boxPlot\"!==a.chart.type&&\"boxPlot\"!==t[l].type||this.handleCandleStickBoxData(t,l),s.series.push(this.twoDSeries),s.labels.push(this.twoDSeriesX),s.seriesX.push(this.twoDSeriesX),s.seriesGoals=this.seriesGoals,l!==this.activeSeriesIndex||this.fallbackToCategory||(s.isXNumeric=!0);else{\"datetime\"===a.xaxis.type?(s.isXNumeric=!0,n(),s.seriesX.push(this.twoDSeriesX)):\"numeric\"===a.xaxis.type&&(s.isXNumeric=!0,o.length>0&&(this.twoDSeriesX=o,s.seriesX.push(this.twoDSeriesX))),s.labels.push(this.twoDSeriesX);var h=t[l].data.map((function(t){return x.parseNumber(t)}));s.series.push(h)}s.seriesZ.push(this.threeDSeries),void 0!==t[l].name?s.seriesNames.push(t[l].name):s.seriesNames.push(\"series-\"+parseInt(l+1,10)),void 0!==t[l].color?s.seriesColors.push(t[l].color):s.seriesColors.push(void 0)}return this.w}},{key:\"parseDataNonAxisCharts\",value:function(t){var e=this.w.globals,i=this.w.config;e.series=t.slice(),e.seriesNames=i.labels.slice();for(var a=0;a<e.series.length;a++)void 0===e.seriesNames[a]&&e.seriesNames.push(\"series-\"+(a+1));return this.w}},{key:\"handleExternalLabelsData\",value:function(t){var e=this.w.config,i=this.w.globals;if(e.xaxis.categories.length>0)i.labels=e.xaxis.categories;else if(e.labels.length>0)i.labels=e.labels.slice();else if(this.fallbackToCategory){if(i.labels=i.labels[0],i.seriesRange.length&&(i.seriesRange.map((function(t){t.forEach((function(t){i.labels.indexOf(t.x)<0&&t.x&&i.labels.push(t.x)}))})),i.labels=i.labels.filter((function(t,e,i){return i.indexOf(t)===e}))),e.xaxis.convertedCatToNumeric)new X(e).convertCatToNumericXaxis(e,this.ctx,i.seriesX[0]),this._generateExternalLabels(t)}else this._generateExternalLabels(t)}},{key:\"_generateExternalLabels\",value:function(t){var e=this.w.globals,i=this.w.config,a=[];if(e.axisCharts){if(e.series.length>0)if(this.isFormatXY())for(var s=i.series.map((function(t,e){return t.data.filter((function(t,e,i){return i.findIndex((function(e){return e.x===t.x}))===e}))})),r=s.reduce((function(t,e,i,a){return a[t].length>e.length?t:i}),0),o=0;o<s[r].length;o++)a.push(o+1);else for(var n=0;n<e.series[e.maxValsInArrayIndex].length;n++)a.push(n+1);e.seriesX=[];for(var l=0;l<t.length;l++)e.seriesX.push(a);e.isXNumeric=!0}if(0===a.length){a=e.axisCharts?[]:e.series.map((function(t,e){return e+1}));for(var h=0;h<t.length;h++)e.seriesX.push(a)}e.labels=a,i.xaxis.convertedCatToNumeric&&(e.categoryLabels=a.map((function(t){return i.xaxis.labels.formatter(t)}))),e.noLabelsProvided=!0}},{key:\"parseData\",value:function(t){var e=this.w,i=e.config,a=e.globals;if(this.excludeCollapsedSeriesInYAxis(),this.fallbackToCategory=!1,this.ctx.core.resetGlobals(),this.ctx.core.isMultipleY(),a.axisCharts?(this.parseDataAxisCharts(t),this.coreUtils.getLargestSeries()):this.parseDataNonAxisCharts(t),\"bar\"===i.chart.type&&i.chart.stacked){var s=new N(this.ctx);a.series=s.setNullSeriesToZeroValues(a.series)}this.coreUtils.getSeriesTotals(),a.axisCharts&&(a.stackedSeriesTotals=this.coreUtils.getStackedSeriesTotals()),this.coreUtils.getPercentSeries(),a.dataFormatXNumeric||a.isXNumeric&&(\"numeric\"!==i.xaxis.type||0!==i.labels.length||0!==i.xaxis.categories.length)||this.handleExternalLabelsData(t);for(var r=this.coreUtils.getCategoryLabels(a.labels),o=0;o<r.length;o++)if(Array.isArray(r[o])){a.isMultiLineX=!0;break}}},{key:\"excludeCollapsedSeriesInYAxis\",value:function(){var t=this,e=this.w;e.globals.ignoreYAxisIndexes=e.globals.collapsedSeries.map((function(i,a){if(t.w.globals.isMultipleYAxis&&!e.config.chart.stacked)return i.index}))}}]),t}(),W=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.tooltipKeyFormat=\"dd MMM\"}return r(t,[{key:\"xLabelFormat\",value:function(t,e,i,a){var s=this.w;if(\"datetime\"===s.config.xaxis.type&&void 0===s.config.xaxis.labels.formatter&&void 0===s.config.tooltip.x.formatter){var r=new T(this.ctx);return r.formatDate(r.getDate(e),s.config.tooltip.x.format)}return t(e,i,a)}},{key:\"defaultGeneralFormatter\",value:function(t){return Array.isArray(t)?t.map((function(t){return t})):t}},{key:\"defaultYFormatter\",value:function(t,e,i){var a=this.w;return x.isNumber(t)&&(t=0!==a.globals.yValueDecimal?t.toFixed(void 0!==e.decimalsInFloat?e.decimalsInFloat:a.globals.yValueDecimal):a.globals.maxYArr[i]-a.globals.minYArr[i]<5?t.toFixed(1):t.toFixed(0)),t}},{key:\"setLabelFormatters\",value:function(){var t=this,e=this.w;return e.globals.xaxisTooltipFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttKeyFormatter=function(e){return t.defaultGeneralFormatter(e)},e.globals.ttZFormatter=function(t){return t},e.globals.legendFormatter=function(e){return t.defaultGeneralFormatter(e)},void 0!==e.config.xaxis.labels.formatter?e.globals.xLabelFormatter=e.config.xaxis.labels.formatter:e.globals.xLabelFormatter=function(t){if(x.isNumber(t)){if(!e.config.xaxis.convertedCatToNumeric&&\"numeric\"===e.config.xaxis.type){if(x.isNumber(e.config.xaxis.decimalsInFloat))return t.toFixed(e.config.xaxis.decimalsInFloat);var i=e.globals.maxX-e.globals.minX;return i>0&&i<100?t.toFixed(1):t.toFixed(0)}if(e.globals.isBarHorizontal)if(e.globals.maxY-e.globals.minYArr<4)return t.toFixed(1);return t.toFixed(0)}return t},\"function\"==typeof e.config.tooltip.x.formatter?e.globals.ttKeyFormatter=e.config.tooltip.x.formatter:e.globals.ttKeyFormatter=e.globals.xLabelFormatter,\"function\"==typeof e.config.xaxis.tooltip.formatter&&(e.globals.xaxisTooltipFormatter=e.config.xaxis.tooltip.formatter),(Array.isArray(e.config.tooltip.y)||void 0!==e.config.tooltip.y.formatter)&&(e.globals.ttVal=e.config.tooltip.y),void 0!==e.config.tooltip.z.formatter&&(e.globals.ttZFormatter=e.config.tooltip.z.formatter),void 0!==e.config.legend.formatter&&(e.globals.legendFormatter=e.config.legend.formatter),e.config.yaxis.forEach((function(i,a){void 0!==i.labels.formatter?e.globals.yLabelFormatters[a]=i.labels.formatter:e.globals.yLabelFormatters[a]=function(s){return e.globals.xyCharts?Array.isArray(s)?s.map((function(e){return t.defaultYFormatter(e,i,a)})):t.defaultYFormatter(s,i,a):s}})),e.globals}},{key:\"heatmapLabelFormatters\",value:function(){var t=this.w;if(\"heatmap\"===t.config.chart.type){t.globals.yAxisScale[0].result=t.globals.seriesNames.slice();var e=t.globals.seriesNames.reduce((function(t,e){return t.length>e.length?t:e}),0);t.globals.yAxisScale[0].niceMax=e,t.globals.yAxisScale[0].niceMin=e}}}]),t}(),B=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"getLabel\",value:function(t,e,i,a){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:\"12px\",o=!(arguments.length>6&&void 0!==arguments[6])||arguments[6],n=this.w,l=void 0===t[a]?\"\":t[a],h=l,c=n.globals.xLabelFormatter,d=n.config.xaxis.labels.formatter,g=!1,u=new W(this.ctx),f=l;o&&(h=u.xLabelFormat(c,l,f,{i:a,dateFormatter:new T(this.ctx).formatDate,w:n}),void 0!==d&&(h=d(l,t[a],{i:a,dateFormatter:new T(this.ctx).formatDate,w:n})));var p=function(t){var i=null;return e.forEach((function(t){\"month\"===t.unit?i=\"year\":\"day\"===t.unit?i=\"month\":\"hour\"===t.unit?i=\"day\":\"minute\"===t.unit&&(i=\"hour\")})),i===t};e.length>0?(g=p(e[a].unit),i=e[a].position,h=e[a].value):\"datetime\"===n.config.xaxis.type&&void 0===d&&(h=\"\"),void 0===h&&(h=\"\"),h=Array.isArray(h)?h:h.toString();var x=new m(this.ctx),b={};b=n.globals.rotateXLabels&&o?x.getTextRects(h,parseInt(r,10),null,\"rotate(\".concat(n.config.xaxis.labels.rotate,\" 0 0)\"),!1):x.getTextRects(h,parseInt(r,10));var v=!n.config.xaxis.labels.showDuplicates&&this.ctx.timeScale;return!Array.isArray(h)&&(0===h.indexOf(\"NaN\")||0===h.toLowerCase().indexOf(\"invalid\")||h.toLowerCase().indexOf(\"infinity\")>=0||s.indexOf(h)>=0&&v)&&(h=\"\"),{x:i,text:h,textRect:b,isBold:g}}},{key:\"checkLabelBasedOnTickamount\",value:function(t,e,i){var a=this.w,s=a.config.xaxis.tickAmount;return\"dataPoints\"===s&&(s=Math.round(a.globals.gridWidth/120)),s>i||t%Math.round(i/(s+1))==0||(e.text=\"\"),e}},{key:\"checkForOverflowingLabels\",value:function(t,e,i,a,s){var r=this.w;if(0===t&&r.globals.skipFirstTimelinelabel&&(e.text=\"\"),t===i-1&&r.globals.skipLastTimelinelabel&&(e.text=\"\"),r.config.xaxis.labels.hideOverlappingLabels&&a.length>0){var o=s[s.length-1];e.x<o.textRect.width/(r.globals.rotateXLabels?Math.abs(r.config.xaxis.labels.rotate)/12:1.01)+o.x&&(e.text=\"\")}return e}},{key:\"checkForReversedLabels\",value:function(t,e){var i=this.w;return i.config.yaxis[t]&&i.config.yaxis[t].reversed&&e.reverse(),e}},{key:\"isYAxisHidden\",value:function(t){var e=this.w,i=new y(this.ctx);return!e.config.yaxis[t].show||!e.config.yaxis[t].showForNullSeries&&i.isSeriesNull(t)&&-1===e.globals.collapsedSeriesIndices.indexOf(t)}},{key:\"getYAxisForeColor\",value:function(t,e){var i=this.w;return Array.isArray(t)&&i.globals.yAxisScale[e]&&this.ctx.theme.pushExtraColors(t,i.globals.yAxisScale[e].result.length,!1),t}},{key:\"drawYAxisTicks\",value:function(t,e,i,a,s,r,o){var n=this.w,l=new m(this.ctx),h=n.globals.translateY;if(a.show&&e>0){!0===n.config.yaxis[s].opposite&&(t+=a.width);for(var c=e;c>=0;c--){var d=h+e/10+n.config.yaxis[s].labels.offsetY-1;n.globals.isBarHorizontal&&(d=r*c),\"heatmap\"===n.config.chart.type&&(d+=r/2);var g=l.drawLine(t+i.offsetX-a.width+a.offsetX,d+a.offsetY,t+i.offsetX+a.offsetX,d+a.offsetY,a.color);o.add(g),h+=r}}}}]),t}(),V=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"scaleSvgNode\",value:function(t,e){var i=parseFloat(t.getAttributeNS(null,\"width\")),a=parseFloat(t.getAttributeNS(null,\"height\"));t.setAttributeNS(null,\"width\",i*e),t.setAttributeNS(null,\"height\",a*e),t.setAttributeNS(null,\"viewBox\",\"0 0 \"+i+\" \"+a)}},{key:\"fixSvgStringForIe11\",value:function(t){if(!x.isIE11())return t.replace(/ /g,\" \");var e=0,i=t.replace(/xmlns=\"http:\\/\\/www.w3.org\\/2000\\/svg\"/g,(function(t){return 2===++e?'xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:svgjs=\"http://svgjs.dev\"':t}));return i=(i=i.replace(/xmlns:NS\\d+=\"\"/g,\"\")).replace(/NS\\d+:(\\w+:\\w+=\")/g,\"$1\")}},{key:\"getSvgString\",value:function(t){null==t&&(t=1);var e=this.w.globals.dom.Paper.svg();if(1!==t){var i=this.w.globals.dom.Paper.node.cloneNode(!0);this.scaleSvgNode(i,t),e=(new XMLSerializer).serializeToString(i)}return this.fixSvgStringForIe11(e)}},{key:\"cleanup\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-xcrosshairs\"),i=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-ycrosshairs\"),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-zoom-rect, .apexcharts-selection-rect\");Array.prototype.forEach.call(a,(function(t){t.setAttribute(\"width\",0)})),e&&e[0]&&(e[0].setAttribute(\"x\",-500),e[0].setAttribute(\"x1\",-500),e[0].setAttribute(\"x2\",-500)),i&&i[0]&&(i[0].setAttribute(\"y\",-100),i[0].setAttribute(\"y1\",-100),i[0].setAttribute(\"y2\",-100))}},{key:\"svgUrl\",value:function(){this.cleanup();var t=this.getSvgString(),e=new Blob([t],{type:\"image/svg+xml;charset=utf-8\"});return URL.createObjectURL(e)}},{key:\"dataURI\",value:function(t){var e=this;return new Promise((function(i){var a=e.w,s=t?t.scale||t.width/a.globals.svgWidth:1;e.cleanup();var r=document.createElement(\"canvas\");r.width=a.globals.svgWidth*s,r.height=parseInt(a.globals.dom.elWrap.style.height,10)*s;var o=\"transparent\"===a.config.chart.background?\"#fff\":a.config.chart.background,n=r.getContext(\"2d\");n.fillStyle=o,n.fillRect(0,0,r.width*s,r.height*s);var l=e.getSvgString(s);if(window.canvg&&x.isIE11()){var h=window.canvg.Canvg.fromString(n,l,{ignoreClear:!0,ignoreDimensions:!0});h.start();var c=r.msToBlob();h.stop(),i({blob:c})}else{var d=\"data:image/svg+xml,\"+encodeURIComponent(l),g=new Image;g.crossOrigin=\"anonymous\",g.onload=function(){if(n.drawImage(g,0,0),r.msToBlob){var t=r.msToBlob();i({blob:t})}else{var e=r.toDataURL(\"image/png\");i({imgURI:e})}},g.src=d}}))}},{key:\"exportToSVG\",value:function(){this.triggerDownload(this.svgUrl(),this.w.config.chart.toolbar.export.svg.filename,\".svg\")}},{key:\"exportToPng\",value:function(){var t=this;this.dataURI().then((function(e){var i=e.imgURI,a=e.blob;a?navigator.msSaveOrOpenBlob(a,t.w.globals.chartID+\".png\"):t.triggerDownload(i,t.w.config.chart.toolbar.export.png.filename,\".png\")}))}},{key:\"exportToCSV\",value:function(t){var e=this,i=t.series,a=t.fileName,s=t.columnDelimiter,r=void 0===s?\",\":s,o=t.lineDelimiter,n=void 0===o?\"\\n\":o,l=this.w;i||(i=l.config.series);var h=[],c=[],d=\"\",g=l.globals.series.map((function(t,e){return-1===l.globals.collapsedSeriesIndices.indexOf(e)?t:[]})),f=Math.max.apply(Math,u(i.map((function(t){return t.data?t.data.length:0})))),p=new O(this.ctx),b=new B(this.ctx),v=function(t){var i=\"\";if(l.globals.axisCharts){if(\"category\"===l.config.xaxis.type||l.config.xaxis.convertedCatToNumeric)if(l.globals.isBarHorizontal){var a=l.globals.yLabelFormatters[0],s=new N(e.ctx).getActiveConfigSeriesIndex();i=a(l.globals.labels[t],{seriesIndex:s,dataPointIndex:t,w:l})}else i=b.getLabel(l.globals.labels,l.globals.timescaleLabels,0,t).text;\"datetime\"===l.config.xaxis.type&&(l.config.xaxis.categories.length?i=l.config.xaxis.categories[t]:l.config.labels.length&&(i=l.config.labels[t]))}else i=l.config.labels[t];return Array.isArray(i)&&(i=i.join(\" \")),x.isNumber(i)?i:i.split(r).join(\"\")},m=function(t,e){if(h.length&&0===e&&c.push(h.join(r)),t.data){t.data=t.data.length&&t.data||u(Array(f)).map((function(){return\"\"}));for(var a=0;a<t.data.length;a++){h=[];var s=v(a);if(s||(p.isFormatXY()?s=i[e].data[a].x:p.isFormat2DArray()&&(s=i[e].data[a]?i[e].data[a][0]:\"\")),0===e){h.push((n=s,\"datetime\"===l.config.xaxis.type&&String(n).length>=10?l.config.chart.toolbar.export.csv.dateFormatter(s):x.isNumber(s)?s:s.split(r).join(\"\")));for(var o=0;o<l.globals.series.length;o++)p.isFormatXY()?h.push(i[o].data[a].y):h.push(g[o][a])}(\"candlestick\"===l.config.chart.type||t.type&&\"candlestick\"===t.type)&&(h.pop(),h.push(l.globals.seriesCandleO[e][a]),h.push(l.globals.seriesCandleH[e][a]),h.push(l.globals.seriesCandleL[e][a]),h.push(l.globals.seriesCandleC[e][a])),(\"boxPlot\"===l.config.chart.type||t.type&&\"boxPlot\"===t.type)&&(h.pop(),h.push(l.globals.seriesCandleO[e][a]),h.push(l.globals.seriesCandleH[e][a]),h.push(l.globals.seriesCandleM[e][a]),h.push(l.globals.seriesCandleL[e][a]),h.push(l.globals.seriesCandleC[e][a])),\"rangeBar\"===l.config.chart.type&&(h.pop(),h.push(l.globals.seriesRangeStart[e][a]),h.push(l.globals.seriesRangeEnd[e][a])),h.length&&c.push(h.join(r))}}var n};h.push(l.config.chart.toolbar.export.csv.headerCategory),\"boxPlot\"===l.config.chart.type?(h.push(\"minimum\"),h.push(\"q1\"),h.push(\"median\"),h.push(\"q3\"),h.push(\"maximum\")):\"candlestick\"===l.config.chart.type?(h.push(\"open\"),h.push(\"high\"),h.push(\"low\"),h.push(\"close\")):\"rangeBar\"===l.config.chart.type?(h.push(\"minimum\"),h.push(\"maximum\")):i.map((function(t,e){var i=t.name?t.name:\"series-\".concat(e);l.globals.axisCharts&&h.push(i.split(r).join(\"\")?i.split(r).join(\"\"):\"series-\".concat(e))})),l.globals.axisCharts||(h.push(l.config.chart.toolbar.export.csv.headerValue),c.push(h.join(r))),i.map((function(t,e){l.globals.axisCharts?m(t,e):((h=[]).push(l.globals.labels[e].split(r).join(\"\")),h.push(g[e]),c.push(h.join(r)))})),d+=c.join(n),this.triggerDownload(\"data:text/csv; charset=utf-8,\"+encodeURIComponent(\"\\ufeff\"+d),a||l.config.chart.toolbar.export.csv.filename,\".csv\")}},{key:\"triggerDownload\",value:function(t,e,i){var a=document.createElement(\"a\");a.href=t,a.download=(e||this.w.globals.chartID)+i,document.body.appendChild(a),a.click(),document.body.removeChild(a)}}]),t}(),G=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.axesUtils=new B(e),this.xaxisLabels=i.globals.labels.slice(),i.globals.timescaleLabels.length>0&&!i.globals.isBarHorizontal&&(this.xaxisLabels=i.globals.timescaleLabels.slice()),i.config.xaxis.overwriteCategories&&(this.xaxisLabels=i.config.xaxis.overwriteCategories),this.drawnLabels=[],this.drawnLabelsRects=[],\"top\"===i.config.xaxis.position?this.offY=0:this.offY=i.globals.gridHeight+1,this.offY=this.offY+i.config.xaxis.axisBorder.offsetY,this.isCategoryBarHorizontal=\"bar\"===i.config.chart.type&&i.config.plotOptions.bar.horizontal,this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.xaxisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.xaxisBorderWidth=i.config.xaxis.axisBorder.width,this.isCategoryBarHorizontal&&(this.xaxisBorderWidth=i.config.yaxis[0].axisBorder.width.toString()),this.xaxisBorderWidth.indexOf(\"%\")>-1?this.xaxisBorderWidth=i.globals.gridWidth*parseInt(this.xaxisBorderWidth,10)/100:this.xaxisBorderWidth=parseInt(this.xaxisBorderWidth,10),this.xaxisBorderHeight=i.config.xaxis.axisBorder.height,this.yaxis=i.config.yaxis[0]}return r(t,[{key:\"drawXaxis\",value:function(){var t=this.w,e=new m(this.ctx),i=e.group({class:\"apexcharts-xaxis\",transform:\"translate(\".concat(t.config.xaxis.offsetX,\", \").concat(t.config.xaxis.offsetY,\")\")}),a=e.group({class:\"apexcharts-xaxis-texts-g\",transform:\"translate(\".concat(t.globals.translateXAxisX,\", \").concat(t.globals.translateXAxisY,\")\")});i.add(a);for(var s=[],r=0;r<this.xaxisLabels.length;r++)s.push(this.xaxisLabels[r]);if(this.drawXAxisLabelAndGroup(!0,e,a,s,t.globals.isXNumeric,(function(t,e){return e})),t.globals.hasGroups){var o=t.globals.groups;s=[];for(var n=0;n<o.length;n++)s.push(o[n].title);var l={};t.config.xaxis.group.style&&(l.xaxisFontSize=t.config.xaxis.group.style.fontSize,l.xaxisFontFamily=t.config.xaxis.group.style.fontFamily,l.xaxisForeColors=t.config.xaxis.group.style.colors,l.fontWeight=t.config.xaxis.group.style.fontWeight,l.cssClass=t.config.xaxis.group.style.cssClass),this.drawXAxisLabelAndGroup(!1,e,a,s,!1,(function(t,e){return o[t].cols*e}),l)}if(void 0!==t.config.xaxis.title.text){var h=e.group({class:\"apexcharts-xaxis-title\"}),c=e.drawText({x:t.globals.gridWidth/2+t.config.xaxis.title.offsetX,y:this.offY+parseFloat(this.xaxisFontSize)+t.globals.xAxisLabelsHeight+t.config.xaxis.title.offsetY,text:t.config.xaxis.title.text,textAnchor:\"middle\",fontSize:t.config.xaxis.title.style.fontSize,fontFamily:t.config.xaxis.title.style.fontFamily,fontWeight:t.config.xaxis.title.style.fontWeight,foreColor:t.config.xaxis.title.style.color,cssClass:\"apexcharts-xaxis-title-text \"+t.config.xaxis.title.style.cssClass});h.add(c),i.add(h)}if(t.config.xaxis.axisBorder.show){var d=t.globals.barPadForNumericAxis,g=e.drawLine(t.globals.padHorizontal+t.config.xaxis.axisBorder.offsetX-d,this.offY,this.xaxisBorderWidth+d,this.offY,t.config.xaxis.axisBorder.color,0,this.xaxisBorderHeight);i.add(g)}return i}},{key:\"drawXAxisLabelAndGroup\",value:function(t,e,i,a,s,r){var o,n=this,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},h=[],c=[],d=this.w,g=l.xaxisFontSize||this.xaxisFontSize,u=l.xaxisFontFamily||this.xaxisFontFamily,f=l.xaxisForeColors||this.xaxisForeColors,p=l.fontWeight||d.config.xaxis.labels.style.fontWeight,x=l.cssClass||d.config.xaxis.labels.style.cssClass,b=d.globals.padHorizontal,v=a.length,m=\"category\"===d.config.xaxis.type?d.globals.dataPoints:v;if(0===m&&v>m&&(m=v),s){var y=m>1?m-1:m;o=d.globals.gridWidth/y,b=b+r(0,o)/2+d.config.xaxis.labels.offsetX}else o=d.globals.gridWidth/m,b=b+r(0,o)+d.config.xaxis.labels.offsetX;for(var w=function(s){var l=b-r(s,o)/2+d.config.xaxis.labels.offsetX;0===s&&1===v&&o/2===b&&1===m&&(l=d.globals.gridWidth/2);var y=n.axesUtils.getLabel(a,d.globals.timescaleLabels,l,s,h,g,t),w=28;d.globals.rotateXLabels&&t&&(w=22),t||(w=w+parseFloat(g)+(d.globals.xAxisLabelsHeight-d.globals.xAxisGroupLabelsHeight)+(d.globals.rotateXLabels?10:0)),y=void 0!==d.config.xaxis.tickAmount&&\"dataPoints\"!==d.config.xaxis.tickAmount&&\"datetime\"!==d.config.xaxis.type?n.axesUtils.checkLabelBasedOnTickamount(s,y,v):n.axesUtils.checkForOverflowingLabels(s,y,v,h,c);if(t&&y.text&&d.globals.xaxisLabelsCount++,d.config.xaxis.labels.show){var k=e.drawText({x:y.x,y:n.offY+d.config.xaxis.labels.offsetY+w-(\"top\"===d.config.xaxis.position?d.globals.xAxisHeight+d.config.xaxis.axisTicks.height-2:0),text:y.text,textAnchor:\"middle\",fontWeight:y.isBold?600:p,fontSize:g,fontFamily:u,foreColor:Array.isArray(f)?t&&d.config.xaxis.convertedCatToNumeric?f[d.globals.minX+s-1]:f[s]:f,isPlainText:!1,cssClass:(t?\"apexcharts-xaxis-label \":\"apexcharts-xaxis-group-label \")+x});if(i.add(k),k.on(\"click\",(function(t){if(\"function\"==typeof d.config.chart.events.xAxisLabelClick){var e=Object.assign({},d,{labelIndex:s});d.config.chart.events.xAxisLabelClick(t,n.ctx,e)}})),t){var A=document.createElementNS(d.globals.SVGNS,\"title\");A.textContent=Array.isArray(y.text)?y.text.join(\" \"):y.text,k.node.appendChild(A),\"\"!==y.text&&(h.push(y.text),c.push(y))}}s<v-1&&(b+=r(s+1,o))},k=0;k<=v-1;k++)w(k)}},{key:\"drawXaxisInversed\",value:function(t){var e,i,a=this,s=this.w,r=new m(this.ctx),o=s.config.yaxis[0].opposite?s.globals.translateYAxisX[t]:0,n=r.group({class:\"apexcharts-yaxis apexcharts-xaxis-inversed\",rel:t}),l=r.group({class:\"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g\",transform:\"translate(\"+o+\", 0)\"});n.add(l);var h=[];if(s.config.yaxis[t].show)for(var c=0;c<this.xaxisLabels.length;c++)h.push(this.xaxisLabels[c]);e=s.globals.gridHeight/h.length,i=-e/2.2;var d=s.globals.yLabelFormatters[0],g=s.config.yaxis[0].labels;if(g.show)for(var u=function(o){var n=void 0===h[o]?\"\":h[o];n=d(n,{seriesIndex:t,dataPointIndex:o,w:s});var c=a.axesUtils.getYAxisForeColor(g.style.colors,t),u=0;Array.isArray(n)&&(u=n.length/2*parseInt(g.style.fontSize,10));var f=r.drawText({x:g.offsetX-15,y:i+e+g.offsetY-u,text:n,textAnchor:a.yaxis.opposite?\"start\":\"end\",foreColor:Array.isArray(c)?c[o]:c,fontSize:g.style.fontSize,fontFamily:g.style.fontFamily,fontWeight:g.style.fontWeight,isPlainText:!1,cssClass:\"apexcharts-yaxis-label \"+g.style.cssClass,maxWidth:g.maxWidth});l.add(f),f.on(\"click\",(function(t){if(\"function\"==typeof s.config.chart.events.xAxisLabelClick){var e=Object.assign({},s,{labelIndex:o});s.config.chart.events.xAxisLabelClick(t,a.ctx,e)}}));var p=document.createElementNS(s.globals.SVGNS,\"title\");if(p.textContent=Array.isArray(n)?n.join(\" \"):n,f.node.appendChild(p),0!==s.config.yaxis[t].labels.rotate){var x=r.rotateAroundCenter(f.node);f.node.setAttribute(\"transform\",\"rotate(\".concat(s.config.yaxis[t].labels.rotate,\" 0 \").concat(x.y,\")\"))}i+=e},f=0;f<=h.length-1;f++)u(f);if(void 0!==s.config.yaxis[0].title.text){var p=r.group({class:\"apexcharts-yaxis-title apexcharts-xaxis-title-inversed\",transform:\"translate(\"+o+\", 0)\"}),x=r.drawText({x:0,y:s.globals.gridHeight/2,text:s.config.yaxis[0].title.text,textAnchor:\"middle\",foreColor:s.config.yaxis[0].title.style.color,fontSize:s.config.yaxis[0].title.style.fontSize,fontWeight:s.config.yaxis[0].title.style.fontWeight,fontFamily:s.config.yaxis[0].title.style.fontFamily,cssClass:\"apexcharts-yaxis-title-text \"+s.config.yaxis[0].title.style.cssClass});p.add(x),n.add(p)}var b=0;this.isCategoryBarHorizontal&&s.config.yaxis[0].opposite&&(b=s.globals.gridWidth);var v=s.config.xaxis.axisBorder;if(v.show){var y=r.drawLine(s.globals.padHorizontal+v.offsetX+b,1+v.offsetY,s.globals.padHorizontal+v.offsetX+b,s.globals.gridHeight+v.offsetY,v.color,0);n.add(y)}return s.config.yaxis[0].axisTicks.show&&this.axesUtils.drawYAxisTicks(b,h.length,s.config.yaxis[0].axisBorder,s.config.yaxis[0].axisTicks,0,e,n),n}},{key:\"drawXaxisTicks\",value:function(t,e,i){var a=this.w,s=t;if(!(t<0||t-2>a.globals.gridWidth)){var r=this.offY+a.config.xaxis.axisTicks.offsetY;if(e=e+r+a.config.xaxis.axisTicks.height,\"top\"===a.config.xaxis.position&&(e=r-a.config.xaxis.axisTicks.height),a.config.xaxis.axisTicks.show){var o=new m(this.ctx).drawLine(t+a.config.xaxis.axisTicks.offsetX,r+a.config.xaxis.offsetY,s+a.config.xaxis.axisTicks.offsetX,e+a.config.xaxis.offsetY,a.config.xaxis.axisTicks.color);i.add(o),o.node.classList.add(\"apexcharts-xaxis-tick\")}}}},{key:\"getXAxisTicksPositions\",value:function(){var t=this.w,e=[],i=this.xaxisLabels.length,a=t.globals.padHorizontal;if(t.globals.timescaleLabels.length>0)for(var s=0;s<i;s++)a=this.xaxisLabels[s].position,e.push(a);else for(var r=i,o=0;o<r;o++){var n=r;t.globals.isXNumeric&&\"bar\"!==t.config.chart.type&&(n-=1),a+=t.globals.gridWidth/n,e.push(a)}return e}},{key:\"xAxisLabelCorrections\",value:function(){var t=this.w,e=new m(this.ctx),i=t.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g\"),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)\"),s=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis-inversed text\"),r=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-xaxis-inversed-texts-g text tspan\");if(t.globals.rotateXLabels||t.config.xaxis.labels.rotateAlways)for(var o=0;o<a.length;o++){var n=e.rotateAroundCenter(a[o]);n.y=n.y-1,n.x=n.x+1,a[o].setAttribute(\"transform\",\"rotate(\".concat(t.config.xaxis.labels.rotate,\" \").concat(n.x,\" \").concat(n.y,\")\")),a[o].setAttribute(\"text-anchor\",\"end\");i.setAttribute(\"transform\",\"translate(0, \".concat(-10,\")\"));var l=a[o].childNodes;t.config.xaxis.labels.trim&&Array.prototype.forEach.call(l,(function(i){e.placeTextWithEllipsis(i,i.textContent,t.globals.xAxisLabelsHeight-(\"bottom\"===t.config.legend.position?20:10))}))}else!function(){for(var i=t.globals.gridWidth/(t.globals.labels.length+1),s=0;s<a.length;s++){var r=a[s].childNodes;t.config.xaxis.labels.trim&&\"datetime\"!==t.config.xaxis.type&&Array.prototype.forEach.call(r,(function(t){e.placeTextWithEllipsis(t,t.textContent,i)}))}}();if(s.length>0){var h=s[s.length-1].getBBox(),c=s[0].getBBox();h.x<-20&&s[s.length-1].parentNode.removeChild(s[s.length-1]),c.x+c.width>t.globals.gridWidth&&!t.globals.isBarHorizontal&&s[0].parentNode.removeChild(s[0]);for(var d=0;d<r.length;d++)e.placeTextWithEllipsis(r[d],r[d].textContent,t.config.yaxis[0].labels.maxWidth-(t.config.yaxis[0].title.text?2*parseFloat(t.config.yaxis[0].title.style.fontSize):0)-15)}}}]),t}(),j=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.xaxisLabels=i.globals.labels.slice(),this.axesUtils=new B(e),this.isRangeBar=i.globals.seriesRange.length,i.globals.timescaleLabels.length>0&&(this.xaxisLabels=i.globals.timescaleLabels.slice())}return r(t,[{key:\"drawGridArea\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=this.w,i=new m(this.ctx);null===t&&(t=i.group({class:\"apexcharts-grid\"}));var a=i.drawLine(e.globals.padHorizontal,1,e.globals.padHorizontal,e.globals.gridHeight,\"transparent\"),s=i.drawLine(e.globals.padHorizontal,e.globals.gridHeight,e.globals.gridWidth,e.globals.gridHeight,\"transparent\");return t.add(s),t.add(a),t}},{key:\"drawGrid\",value:function(){var t=null;return this.w.globals.axisCharts&&(t=this.renderGrid(),this.drawGridArea(t.el)),t}},{key:\"createGridMask\",value:function(){var t=this.w,e=t.globals,i=new m(this.ctx),a=Array.isArray(t.config.stroke.width)?0:t.config.stroke.width;if(Array.isArray(t.config.stroke.width)){var s=0;t.config.stroke.width.forEach((function(t){s=Math.max(s,t)})),a=s}e.dom.elGridRectMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elGridRectMask.setAttribute(\"id\",\"gridRectMask\".concat(e.cuid)),e.dom.elGridRectMarkerMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elGridRectMarkerMask.setAttribute(\"id\",\"gridRectMarkerMask\".concat(e.cuid)),e.dom.elForecastMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elForecastMask.setAttribute(\"id\",\"forecastMask\".concat(e.cuid)),e.dom.elNonForecastMask=document.createElementNS(e.SVGNS,\"clipPath\"),e.dom.elNonForecastMask.setAttribute(\"id\",\"nonForecastMask\".concat(e.cuid));var r=t.config.chart.type,o=0,n=0;(\"bar\"===r||\"rangeBar\"===r||\"candlestick\"===r||\"boxPlot\"===r||t.globals.comboBarCount>0)&&t.globals.isXNumeric&&!t.globals.isBarHorizontal&&(o=t.config.grid.padding.left,n=t.config.grid.padding.right,e.barPadForNumericAxis>o&&(o=e.barPadForNumericAxis,n=e.barPadForNumericAxis)),e.dom.elGridRect=i.drawRect(-a/2-o-2,-a/2,e.gridWidth+a+n+o+4,e.gridHeight+a,0,\"#fff\");var l=t.globals.markers.largestSize+1;e.dom.elGridRectMarker=i.drawRect(2*-l,2*-l,e.gridWidth+4*l,e.gridHeight+4*l,0,\"#fff\"),e.dom.elGridRectMask.appendChild(e.dom.elGridRect.node),e.dom.elGridRectMarkerMask.appendChild(e.dom.elGridRectMarker.node);var h=e.dom.baseEl.querySelector(\"defs\");h.appendChild(e.dom.elGridRectMask),h.appendChild(e.dom.elForecastMask),h.appendChild(e.dom.elNonForecastMask),h.appendChild(e.dom.elGridRectMarkerMask)}},{key:\"_drawGridLines\",value:function(t){var e=t.i,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.xCount,n=t.parent,l=this.w;if(!(0===e&&l.globals.skipFirstTimelinelabel||e===o-1&&l.globals.skipLastTimelinelabel&&!l.config.xaxis.labels.formatter||\"radar\"===l.config.chart.type)){l.config.grid.xaxis.lines.show&&this._drawGridLine({x1:i,y1:a,x2:s,y2:r,parent:n});var h=0;if(l.globals.hasGroups&&\"between\"===l.config.xaxis.tickPlacement){var c=l.globals.groups;if(c){for(var d=0,g=0;d<e&&g<c.length;g++)d+=c[g].cols;d===e&&(h=.6*l.globals.xAxisLabelsHeight)}}new G(this.ctx).drawXaxisTicks(i,h,this.elg)}}},{key:\"_drawGridLine\",value:function(t){var e=t.x1,i=t.y1,a=t.x2,s=t.y2,r=t.parent,o=this.w,n=r.node.classList.contains(\"apexcharts-gridlines-horizontal\"),l=o.config.grid.strokeDashArray,h=o.globals.barPadForNumericAxis,c=new m(this).drawLine(e-(n?h:0),i,a+(n?h:0),s,o.config.grid.borderColor,l);c.node.classList.add(\"apexcharts-gridline\"),r.add(c)}},{key:\"_drawGridBandRect\",value:function(t){var e=t.c,i=t.x1,a=t.y1,s=t.x2,r=t.y2,o=t.type,n=this.w,l=new m(this.ctx),h=n.globals.barPadForNumericAxis;if(\"column\"!==o||\"datetime\"!==n.config.xaxis.type){var c=n.config.grid[o].colors[e],d=l.drawRect(i-(\"row\"===o?h:0),a,s+(\"row\"===o?2*h:0),r,0,c,n.config.grid[o].opacity);this.elg.add(d),d.attr(\"clip-path\",\"url(#gridRectMask\".concat(n.globals.cuid,\")\")),d.node.classList.add(\"apexcharts-grid-\".concat(o))}}},{key:\"_drawXYLines\",value:function(t){var e=this,i=t.xCount,a=t.tickAmount,s=this.w;if(s.config.grid.xaxis.lines.show||s.config.xaxis.axisTicks.show){var r,o=s.globals.padHorizontal,n=s.globals.gridHeight;s.globals.timescaleLabels.length?function(t){for(var a=t.xC,s=t.x1,r=t.y1,o=t.x2,n=t.y2,l=0;l<a;l++)s=e.xaxisLabels[l].position,o=e.xaxisLabels[l].position,e._drawGridLines({i:l,x1:s,y1:r,x2:o,y2:n,xCount:i,parent:e.elgridLinesV})}({xC:i,x1:o,y1:0,x2:r,y2:n}):(s.globals.isXNumeric&&(i=s.globals.xAxisScale.result.length),s.config.xaxis.convertedCatToNumeric&&(i=s.globals.xaxisLabelsCount),function(t){var a=t.xC,r=t.x1,o=t.y1,n=t.x2,l=t.y2;if(void 0!==s.config.xaxis.tickAmount&&\"dataPoints\"!==s.config.xaxis.tickAmount&&\"on\"===s.config.xaxis.tickPlacement)s.globals.dom.baseEl.querySelectorAll(\".apexcharts-text.apexcharts-xaxis-label tspan:not(:empty)\").forEach((function(t,a){var s=t.getBBox();e._drawGridLines({i:a,x1:s.x+s.width/2,y1:o,x2:s.x+s.width/2,y2:l,xCount:i,parent:e.elgridLinesV})}));else for(var h=0;h<a+(s.globals.isXNumeric?0:1);h++)0===h&&1===a&&1===s.globals.dataPoints&&(n=r=s.globals.gridWidth/2),e._drawGridLines({i:h,x1:r,y1:o,x2:n,y2:l,xCount:i,parent:e.elgridLinesV}),n=r+=s.globals.gridWidth/(s.globals.isXNumeric?a-1:a)}({xC:i,x1:o,y1:0,x2:r,y2:n}))}if(s.config.grid.yaxis.lines.show){var l=0,h=0,c=s.globals.gridWidth,d=a+1;this.isRangeBar&&(d=s.globals.labels.length);for(var g=0;g<d+(this.isRangeBar?1:0);g++)this._drawGridLine({x1:0,y1:l,x2:c,y2:h,parent:this.elgridLinesH}),h=l+=s.globals.gridHeight/(this.isRangeBar?d:a)}}},{key:\"_drawInvertedXYLines\",value:function(t){var e=t.xCount,i=this.w;if(i.config.grid.xaxis.lines.show||i.config.xaxis.axisTicks.show)for(var a,s=i.globals.padHorizontal,r=i.globals.gridHeight,o=0;o<e+1;o++){i.config.grid.xaxis.lines.show&&this._drawGridLine({x1:s,y1:0,x2:a,y2:r,parent:this.elgridLinesV}),new G(this.ctx).drawXaxisTicks(s,0,this.elg),a=s=s+i.globals.gridWidth/e+.3}if(i.config.grid.yaxis.lines.show)for(var n=0,l=0,h=i.globals.gridWidth,c=0;c<i.globals.dataPoints+1;c++)this._drawGridLine({x1:0,y1:n,x2:h,y2:l,parent:this.elgridLinesH}),l=n+=i.globals.gridHeight/i.globals.dataPoints}},{key:\"renderGrid\",value:function(){var t=this.w,e=new m(this.ctx);this.elg=e.group({class:\"apexcharts-grid\"}),this.elgridLinesH=e.group({class:\"apexcharts-gridlines-horizontal\"}),this.elgridLinesV=e.group({class:\"apexcharts-gridlines-vertical\"}),this.elg.add(this.elgridLinesH),this.elg.add(this.elgridLinesV),t.config.grid.show||(this.elgridLinesV.hide(),this.elgridLinesH.hide());for(var i,a=t.globals.yAxisScale.length?t.globals.yAxisScale[0].result.length-1:5,s=0;s<t.globals.series.length&&(void 0!==t.globals.yAxisScale[s]&&(a=t.globals.yAxisScale[s].result.length-1),!(a>2));s++);return!t.globals.isBarHorizontal||this.isRangeBar?(i=this.xaxisLabels.length,this.isRangeBar&&(a=t.globals.labels.length,t.config.xaxis.tickAmount&&t.config.xaxis.labels.formatter&&(i=t.config.xaxis.tickAmount)),this._drawXYLines({xCount:i,tickAmount:a})):(i=a,a=t.globals.xTickAmount,this._drawInvertedXYLines({xCount:i,tickAmount:a})),this.drawGridBands(i,a),{el:this.elg,xAxisTickWidth:t.globals.gridWidth/i}}},{key:\"drawGridBands\",value:function(t,e){var i=this.w;if(void 0!==i.config.grid.row.colors&&i.config.grid.row.colors.length>0)for(var a=0,s=i.globals.gridHeight/e,r=i.globals.gridWidth,o=0,n=0;o<e;o++,n++)n>=i.config.grid.row.colors.length&&(n=0),this._drawGridBandRect({c:n,x1:0,y1:a,x2:r,y2:s,type:\"row\"}),a+=i.globals.gridHeight/e;if(void 0!==i.config.grid.column.colors&&i.config.grid.column.colors.length>0)for(var l=i.globals.isBarHorizontal||\"category\"!==i.config.xaxis.type&&!i.config.xaxis.convertedCatToNumeric?t:t-1,h=i.globals.padHorizontal,c=i.globals.padHorizontal+i.globals.gridWidth/l,d=i.globals.gridHeight,g=0,u=0;g<t;g++,u++)u>=i.config.grid.column.colors.length&&(u=0),this._drawGridBandRect({c:u,x1:h,y1:0,x2:c,y2:d,type:\"column\"}),h+=i.globals.gridWidth/l}}]),t}(),_=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"niceScale\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4?arguments[4]:void 0,r=this.w,o=Math.abs(e-t);if(\"dataPoints\"===(i=this._adjustTicksForSmallRange(i,a,o))&&(i=r.globals.dataPoints-1),t===Number.MIN_VALUE&&0===e||!x.isNumber(t)&&!x.isNumber(e)||t===Number.MIN_VALUE&&e===-Number.MAX_VALUE){t=0,e=i;var n=this.linearScale(t,e,i);return n}t>e?(console.warn(\"axis.min cannot be greater than axis.max\"),e=t+.1):t===e&&(t=0===t?0:t-.5,e=0===e?2:e+.5);var l=[];o<1&&s&&(\"candlestick\"===r.config.chart.type||\"candlestick\"===r.config.series[a].type||\"boxPlot\"===r.config.chart.type||\"boxPlot\"===r.config.series[a].type||r.globals.isRangeData)&&(e*=1.01);var h=i+1;h<2?h=2:h>2&&(h-=2);var c=o/h,d=Math.floor(x.log10(c)),g=Math.pow(10,d),u=Math.round(c/g);u<1&&(u=1);var f=u*g,p=f*Math.floor(t/f),b=f*Math.ceil(e/f),v=p;if(s&&o>2){for(;l.push(v),!((v+=f)>b););return{result:l,niceMin:l[0],niceMax:l[l.length-1]}}var m=t;(l=[]).push(m);for(var y=Math.abs(e-t)/i,w=0;w<=i;w++)m+=y,l.push(m);return l[l.length-2]>=e&&l.pop(),{result:l,niceMin:l[0],niceMax:l[l.length-1]}}},{key:\"linearScale\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,a=arguments.length>3?arguments[3]:void 0,s=Math.abs(e-t);\"dataPoints\"===(i=this._adjustTicksForSmallRange(i,a,s))&&(i=this.w.globals.dataPoints-1);var r=s/i;i===Number.MAX_VALUE&&(i=10,r=1);for(var o=[],n=t;i>=0;)o.push(n),n+=r,i-=1;return{result:o,niceMin:o[0],niceMax:o[o.length-1]}}},{key:\"logarithmicScaleNice\",value:function(t,e,i){e<=0&&(e=Math.max(t,i)),t<=0&&(t=Math.min(e,i));for(var a=[],s=Math.ceil(Math.log(e)/Math.log(i)+1),r=Math.floor(Math.log(t)/Math.log(i));r<s;r++)a.push(Math.pow(i,r));return{result:a,niceMin:a[0],niceMax:a[a.length-1]}}},{key:\"logarithmicScale\",value:function(t,e,i){e<=0&&(e=Math.max(t,i)),t<=0&&(t=Math.min(e,i));for(var a=[],s=Math.log(e)/Math.log(i),r=Math.log(t)/Math.log(i),o=s-r,n=Math.round(o),l=o/n,h=0,c=r;h<n;h++,c+=l)a.push(Math.pow(i,c));return a.push(Math.pow(i,s)),{result:a,niceMin:t,niceMax:e}}},{key:\"_adjustTicksForSmallRange\",value:function(t,e,i){var a=t;if(void 0!==e&&this.w.config.yaxis[e].labels.formatter&&void 0===this.w.config.yaxis[e].tickAmount){var s=this.w.config.yaxis[e].labels.formatter(1);x.isNumber(Number(s))&&!x.isFloat(s)&&(a=Math.ceil(i))}return a<t?a:t}},{key:\"setYScaleForIndex\",value:function(t,e,i){var a=this.w.globals,s=this.w.config,r=a.isBarHorizontal?s.xaxis:s.yaxis[t];void 0===a.yAxisScale[t]&&(a.yAxisScale[t]=[]);var o=Math.abs(i-e);if(r.logarithmic&&o<=5&&(a.invalidLogScale=!0),r.logarithmic&&o>5)a.allSeriesCollapsed=!1,a.yAxisScale[t]=this.logarithmicScale(e,i,r.logBase),a.yAxisScale[t]=r.forceNiceScale?this.logarithmicScaleNice(e,i,r.logBase):this.logarithmicScale(e,i,r.logBase);else if(i!==-Number.MAX_VALUE&&x.isNumber(i))if(a.allSeriesCollapsed=!1,void 0===r.min&&void 0===r.max||r.forceNiceScale){var n=void 0===s.yaxis[t].max&&void 0===s.yaxis[t].min||s.yaxis[t].forceNiceScale;a.yAxisScale[t]=this.niceScale(e,i,r.tickAmount?r.tickAmount:o<5&&o>1?o+1:5,t,n)}else a.yAxisScale[t]=this.linearScale(e,i,r.tickAmount,t);else a.yAxisScale[t]=this.linearScale(0,5,5)}},{key:\"setXScale\",value:function(t,e){var i=this.w,a=i.globals,s=i.config.xaxis,r=Math.abs(e-t);return e!==-Number.MAX_VALUE&&x.isNumber(e)?a.xAxisScale=this.linearScale(t,e,s.tickAmount?s.tickAmount:r<5&&r>1?r+1:5,0):a.xAxisScale=this.linearScale(0,5,5),a.xAxisScale}},{key:\"setMultipleYScales\",value:function(){var t=this,e=this.w.globals,i=this.w.config,a=e.minYArr.concat([]),s=e.maxYArr.concat([]),r=[];i.yaxis.forEach((function(e,o){var n=o;i.series.forEach((function(t,i){t.name===e.seriesName&&(n=i,o!==i?r.push({index:i,similarIndex:o,alreadyExists:!0}):r.push({index:i}))}));var l=a[n],h=s[n];t.setYScaleForIndex(o,l,h)})),this.sameScaleInMultipleAxes(a,s,r)}},{key:\"sameScaleInMultipleAxes\",value:function(t,e,i){var a=this,s=this.w.config,r=this.w.globals,o=[];i.forEach((function(t){t.alreadyExists&&(void 0===o[t.index]&&(o[t.index]=[]),o[t.index].push(t.index),o[t.index].push(t.similarIndex))})),r.yAxisSameScaleIndices=o,o.forEach((function(t,e){o.forEach((function(i,a){var s,r;e!==a&&(s=t,r=i,s.filter((function(t){return-1!==r.indexOf(t)}))).length>0&&(o[e]=o[e].concat(o[a]))}))}));var n=o.map((function(t){return t.filter((function(e,i){return t.indexOf(e)===i}))})).map((function(t){return t.sort()}));o=o.filter((function(t){return!!t}));var l=n.slice(),h=l.map((function(t){return JSON.stringify(t)}));l=l.filter((function(t,e){return h.indexOf(JSON.stringify(t))===e}));var c=[],d=[];t.forEach((function(t,i){l.forEach((function(a,s){a.indexOf(i)>-1&&(void 0===c[s]&&(c[s]=[],d[s]=[]),c[s].push({key:i,value:t}),d[s].push({key:i,value:e[i]}))}))}));var g=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,Number.MIN_VALUE),u=Array.apply(null,Array(l.length)).map(Number.prototype.valueOf,-Number.MAX_VALUE);c.forEach((function(t,e){t.forEach((function(t,i){g[e]=Math.min(t.value,g[e])}))})),d.forEach((function(t,e){t.forEach((function(t,i){u[e]=Math.max(t.value,u[e])}))})),t.forEach((function(t,e){d.forEach((function(t,i){var o=g[i],n=u[i];s.chart.stacked&&(n=0,t.forEach((function(t,e){t.value!==-Number.MAX_VALUE&&(n+=t.value),o!==Number.MIN_VALUE&&(o+=c[i][e].value)}))),t.forEach((function(i,l){t[l].key===e&&(void 0!==s.yaxis[e].min&&(o=\"function\"==typeof s.yaxis[e].min?s.yaxis[e].min(r.minY):s.yaxis[e].min),void 0!==s.yaxis[e].max&&(n=\"function\"==typeof s.yaxis[e].max?s.yaxis[e].max(r.maxY):s.yaxis[e].max),a.setYScaleForIndex(e,o,n))}))}))}))}},{key:\"autoScaleY\",value:function(t,e,i){t||(t=this);var a=t.w;if(a.globals.isMultipleYAxis||a.globals.collapsedSeries.length)return console.warn(\"autoScaleYaxis is not supported in a multi-yaxis chart.\"),e;var s=a.globals.seriesX[0],r=a.config.chart.stacked;return e.forEach((function(t,o){for(var n=0,l=0;l<s.length;l++)if(s[l]>=i.xaxis.min){n=l;break}var h,c,d=a.globals.minYArr[o],g=a.globals.maxYArr[o],u=a.globals.stackedSeriesTotals;a.globals.series.forEach((function(o,l){var f=o[n];r?(f=u[n],h=c=f,u.forEach((function(t,e){s[e]<=i.xaxis.max&&s[e]>=i.xaxis.min&&(t>c&&null!==t&&(c=t),o[e]<h&&null!==o[e]&&(h=o[e]))}))):(h=c=f,o.forEach((function(t,e){if(s[e]<=i.xaxis.max&&s[e]>=i.xaxis.min){var r=t,o=t;a.globals.series.forEach((function(i,a){null!==t&&(r=Math.min(i[e],r),o=Math.max(i[e],o))})),o>c&&null!==o&&(c=o),r<h&&null!==r&&(h=r)}}))),void 0===h&&void 0===c&&(h=d,c=g),c*=c<0?.9:1.1,0===(h*=h<0?1.1:.9)&&0===c&&(h=-1,c=1),c<0&&c<g&&(c=g),h<0&&h>d&&(h=d),e.length>1?(e[l].min=void 0===t.min?h:t.min,e[l].max=void 0===t.max?c:t.max):(e[0].min=void 0===t.min?h:t.min,e[0].max=void 0===t.max?c:t.max)}))})),e}}]),t}(),U=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.scales=new _(e)}return r(t,[{key:\"init\",value:function(){this.setYRange(),this.setXRange(),this.setZRange()}},{key:\"getMinYMaxY\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-Number.MAX_VALUE,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w.config,r=this.w.globals,o=-Number.MAX_VALUE,n=Number.MIN_VALUE;null===a&&(a=t+1);var l=r.series,h=l,c=l;\"candlestick\"===s.chart.type?(h=r.seriesCandleL,c=r.seriesCandleH):\"boxPlot\"===s.chart.type?(h=r.seriesCandleO,c=r.seriesCandleC):r.isRangeData&&(h=r.seriesRangeStart,c=r.seriesRangeEnd);for(var d=t;d<a;d++){r.dataPoints=Math.max(r.dataPoints,l[d].length),r.categoryLabels.length&&(r.dataPoints=r.categoryLabels.filter((function(t){return void 0!==t})).length);for(var g=0;g<r.series[d].length;g++){var u=l[d][g];null!==u&&x.isNumber(u)?(void 0!==c[d][g]&&(o=Math.max(o,c[d][g]),e=Math.min(e,c[d][g])),void 0!==h[d][g]&&(e=Math.min(e,h[d][g]),i=Math.max(i,h[d][g])),\"candlestick\"!==this.w.config.chart.type&&\"boxPlot\"!==this.w.config.chart.type&&\"rangeArea\"===this.w.config.chart.type&&\"rangeBar\"===this.w.config.chart.type||(\"candlestick\"!==this.w.config.chart.type&&\"boxPlot\"!==this.w.config.chart.type||void 0!==r.seriesCandleC[d][g]&&(o=Math.max(o,r.seriesCandleO[d][g]),o=Math.max(o,r.seriesCandleH[d][g]),o=Math.max(o,r.seriesCandleL[d][g]),o=Math.max(o,r.seriesCandleC[d][g]),\"boxPlot\"===this.w.config.chart.type&&(o=Math.max(o,r.seriesCandleM[d][g]))),!s.series[d].type||\"candlestick\"===s.series[d].type&&\"boxPlot\"===s.series[d].type&&\"rangeArea\"===s.series[d].type&&\"rangeBar\"===s.series[d].type||(o=Math.max(o,r.series[d][g]),e=Math.min(e,r.series[d][g])),i=o),r.seriesGoals[d]&&r.seriesGoals[d][g]&&Array.isArray(r.seriesGoals[d][g])&&r.seriesGoals[d][g].forEach((function(t){n!==Number.MIN_VALUE&&(n=Math.min(n,t.value),e=n),o=Math.max(o,t.value),i=o})),x.isFloat(u)&&(u=x.noExponents(u),r.yValueDecimal=Math.max(r.yValueDecimal,u.toString().split(\".\")[1].length)),n>h[d][g]&&h[d][g]<0&&(n=h[d][g])):r.hasNullValues=!0}}return\"rangeBar\"===s.chart.type&&r.seriesRangeStart.length&&r.isBarHorizontal&&(n=e),\"bar\"===s.chart.type&&(n<0&&o<0&&(o=0),n===Number.MIN_VALUE&&(n=0)),{minY:n,maxY:o,lowestY:e,highestY:i}}},{key:\"setYRange\",value:function(){var t=this.w.globals,e=this.w.config;t.maxY=-Number.MAX_VALUE,t.minY=Number.MIN_VALUE;var i=Number.MAX_VALUE;if(t.isMultipleYAxis)for(var a=0;a<t.series.length;a++){var s=this.getMinYMaxY(a,i,null,a+1);t.minYArr.push(s.minY),t.maxYArr.push(s.maxY),i=s.lowestY}var r=this.getMinYMaxY(0,i,null,t.series.length);if(t.minY=r.minY,t.maxY=r.maxY,i=r.lowestY,e.chart.stacked&&this._setStackedMinMax(),(\"line\"===e.chart.type||\"area\"===e.chart.type||\"candlestick\"===e.chart.type||\"boxPlot\"===e.chart.type||\"rangeBar\"===e.chart.type&&!t.isBarHorizontal)&&t.minY===Number.MIN_VALUE&&i!==-Number.MAX_VALUE&&i!==t.maxY){var o=t.maxY-i;(i>=0&&i<=10||void 0!==e.yaxis[0].min||void 0!==e.yaxis[0].max)&&(o=0),t.minY=i-5*o/100,i>0&&t.minY<0&&(t.minY=0),t.maxY=t.maxY+5*o/100}if(e.yaxis.forEach((function(e,i){void 0!==e.max&&(\"number\"==typeof e.max?t.maxYArr[i]=e.max:\"function\"==typeof e.max&&(t.maxYArr[i]=e.max(t.isMultipleYAxis?t.maxYArr[i]:t.maxY)),t.maxY=t.maxYArr[i]),void 0!==e.min&&(\"number\"==typeof e.min?t.minYArr[i]=e.min:\"function\"==typeof e.min&&(t.minYArr[i]=e.min(t.isMultipleYAxis?t.minYArr[i]===Number.MIN_VALUE?0:t.minYArr[i]:t.minY)),t.minY=t.minYArr[i])})),t.isBarHorizontal){[\"min\",\"max\"].forEach((function(i){void 0!==e.xaxis[i]&&\"number\"==typeof e.xaxis[i]&&(\"min\"===i?t.minY=e.xaxis[i]:t.maxY=e.xaxis[i])}))}return t.isMultipleYAxis?(this.scales.setMultipleYScales(),t.minY=i,t.yAxisScale.forEach((function(e,i){t.minYArr[i]=e.niceMin,t.maxYArr[i]=e.niceMax}))):(this.scales.setYScaleForIndex(0,t.minY,t.maxY),t.minY=t.yAxisScale[0].niceMin,t.maxY=t.yAxisScale[0].niceMax,t.minYArr[0]=t.yAxisScale[0].niceMin,t.maxYArr[0]=t.yAxisScale[0].niceMax),{minY:t.minY,maxY:t.maxY,minYArr:t.minYArr,maxYArr:t.maxYArr,yAxisScale:t.yAxisScale}}},{key:\"setXRange\",value:function(){var t=this.w.globals,e=this.w.config,i=\"numeric\"===e.xaxis.type||\"datetime\"===e.xaxis.type||\"category\"===e.xaxis.type&&!t.noLabelsProvided||t.noLabelsProvided||t.isXNumeric;if(t.isXNumeric&&function(){for(var e=0;e<t.series.length;e++)if(t.labels[e])for(var i=0;i<t.labels[e].length;i++)null!==t.labels[e][i]&&x.isNumber(t.labels[e][i])&&(t.maxX=Math.max(t.maxX,t.labels[e][i]),t.initialMaxX=Math.max(t.maxX,t.labels[e][i]),t.minX=Math.min(t.minX,t.labels[e][i]),t.initialMinX=Math.min(t.minX,t.labels[e][i]))}(),t.noLabelsProvided&&0===e.xaxis.categories.length&&(t.maxX=t.labels[t.labels.length-1],t.initialMaxX=t.labels[t.labels.length-1],t.minX=1,t.initialMinX=1),t.isXNumeric||t.noLabelsProvided||t.dataFormatXNumeric){var a;if(void 0===e.xaxis.tickAmount?(a=Math.round(t.svgWidth/150),\"numeric\"===e.xaxis.type&&t.dataPoints<30&&(a=t.dataPoints-1),a>t.dataPoints&&0!==t.dataPoints&&(a=t.dataPoints-1)):\"dataPoints\"===e.xaxis.tickAmount?(t.series.length>1&&(a=t.series[t.maxValsInArrayIndex].length-1),t.isXNumeric&&(a=t.maxX-t.minX-1)):a=e.xaxis.tickAmount,t.xTickAmount=a,void 0!==e.xaxis.max&&\"number\"==typeof e.xaxis.max&&(t.maxX=e.xaxis.max),void 0!==e.xaxis.min&&\"number\"==typeof e.xaxis.min&&(t.minX=e.xaxis.min),void 0!==e.xaxis.range&&(t.minX=t.maxX-e.xaxis.range),t.minX!==Number.MAX_VALUE&&t.maxX!==-Number.MAX_VALUE)if(e.xaxis.convertedCatToNumeric&&!t.dataFormatXNumeric){for(var s=[],r=t.minX-1;r<t.maxX;r++)s.push(r+1);t.xAxisScale={result:s,niceMin:s[0],niceMax:s[s.length-1]}}else t.xAxisScale=this.scales.setXScale(t.minX,t.maxX);else t.xAxisScale=this.scales.linearScale(1,a,a),t.noLabelsProvided&&t.labels.length>0&&(t.xAxisScale=this.scales.linearScale(1,t.labels.length,a-1),t.seriesX=t.labels.slice());i&&(t.labels=t.xAxisScale.result.slice())}return t.isBarHorizontal&&t.labels.length&&(t.xTickAmount=t.labels.length),this._handleSingleDataPoint(),this._getMinXDiff(),{minX:t.minX,maxX:t.maxX}}},{key:\"setZRange\",value:function(){var t=this.w.globals;if(t.isDataXYZ)for(var e=0;e<t.series.length;e++)if(void 0!==t.seriesZ[e])for(var i=0;i<t.seriesZ[e].length;i++)null!==t.seriesZ[e][i]&&x.isNumber(t.seriesZ[e][i])&&(t.maxZ=Math.max(t.maxZ,t.seriesZ[e][i]),t.minZ=Math.min(t.minZ,t.seriesZ[e][i]))}},{key:\"_handleSingleDataPoint\",value:function(){var t=this.w.globals,e=this.w.config;if(t.minX===t.maxX){var i=new T(this.ctx);if(\"datetime\"===e.xaxis.type){var a=i.getDate(t.minX);e.xaxis.labels.datetimeUTC?a.setUTCDate(a.getUTCDate()-2):a.setDate(a.getDate()-2),t.minX=new Date(a).getTime();var s=i.getDate(t.maxX);e.xaxis.labels.datetimeUTC?s.setUTCDate(s.getUTCDate()+2):s.setDate(s.getDate()+2),t.maxX=new Date(s).getTime()}else(\"numeric\"===e.xaxis.type||\"category\"===e.xaxis.type&&!t.noLabelsProvided)&&(t.minX=t.minX-2,t.initialMinX=t.minX,t.maxX=t.maxX+2,t.initialMaxX=t.maxX)}}},{key:\"_getMinXDiff\",value:function(){var t=this.w.globals;t.isXNumeric&&t.seriesX.forEach((function(e,i){1===e.length&&e.push(t.seriesX[t.maxValsInArrayIndex][t.seriesX[t.maxValsInArrayIndex].length-1]);var a=e.slice();a.sort((function(t,e){return t-e})),a.forEach((function(e,i){if(i>0){var s=e-a[i-1];s>0&&(t.minXDiff=Math.min(s,t.minXDiff))}})),1!==t.dataPoints&&t.minXDiff!==Number.MAX_VALUE||(t.minXDiff=.5)}))}},{key:\"_setStackedMinMax\",value:function(){var t=this.w.globals,e=[],i=[];if(t.series.length)for(var a=0;a<t.series[t.maxValsInArrayIndex].length;a++)for(var s=0,r=0,o=0;o<t.series.length;o++)null!==t.series[o][a]&&x.isNumber(t.series[o][a])&&(t.series[o][a]>0?s=s+parseFloat(t.series[o][a])+1e-4:r+=parseFloat(t.series[o][a])),o===t.series.length-1&&(e.push(s),i.push(r));for(var n=0;n<e.length;n++)t.maxY=Math.max(t.maxY,e[n]),t.minY=Math.min(t.minY,i[n])}}]),t}(),q=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.xaxisFontSize=i.config.xaxis.labels.style.fontSize,this.axisFontFamily=i.config.xaxis.labels.style.fontFamily,this.xaxisForeColors=i.config.xaxis.labels.style.colors,this.isCategoryBarHorizontal=\"bar\"===i.config.chart.type&&i.config.plotOptions.bar.horizontal,this.xAxisoffX=0,\"bottom\"===i.config.xaxis.position&&(this.xAxisoffX=i.globals.gridHeight),this.drawnLabels=[],this.axesUtils=new B(e)}return r(t,[{key:\"drawYaxis\",value:function(t){var e=this,i=this.w,a=new m(this.ctx),s=i.config.yaxis[t].labels.style,r=s.fontSize,o=s.fontFamily,n=s.fontWeight,l=a.group({class:\"apexcharts-yaxis\",rel:t,transform:\"translate(\"+i.globals.translateYAxisX[t]+\", 0)\"});if(this.axesUtils.isYAxisHidden(t))return l;var h=a.group({class:\"apexcharts-yaxis-texts-g\"});l.add(h);var c=i.globals.yAxisScale[t].result.length-1,d=i.globals.gridHeight/c,g=i.globals.translateY,u=i.globals.yLabelFormatters[t],f=i.globals.yAxisScale[t].result.slice();f=this.axesUtils.checkForReversedLabels(t,f);var p=\"\";if(i.config.yaxis[t].labels.show)for(var x=function(l){var x=f[l];x=u(x,l,i);var b=i.config.yaxis[t].labels.padding;i.config.yaxis[t].opposite&&0!==i.config.yaxis.length&&(b*=-1);var v=e.axesUtils.getYAxisForeColor(s.colors,t),m=a.drawText({x:b,y:g+c/10+i.config.yaxis[t].labels.offsetY+1,text:x,textAnchor:i.config.yaxis[t].opposite?\"start\":\"end\",fontSize:r,fontFamily:o,fontWeight:n,maxWidth:i.config.yaxis[t].labels.maxWidth,foreColor:Array.isArray(v)?v[l]:v,isPlainText:!1,cssClass:\"apexcharts-yaxis-label \"+s.cssClass});l===c&&(p=m),h.add(m);var y=document.createElementNS(i.globals.SVGNS,\"title\");if(y.textContent=Array.isArray(x)?x.join(\" \"):x,m.node.appendChild(y),0!==i.config.yaxis[t].labels.rotate){var w=a.rotateAroundCenter(p.node),k=a.rotateAroundCenter(m.node);m.node.setAttribute(\"transform\",\"rotate(\".concat(i.config.yaxis[t].labels.rotate,\" \").concat(w.x,\" \").concat(k.y,\")\"))}g+=d},b=c;b>=0;b--)x(b);if(void 0!==i.config.yaxis[t].title.text){var v=a.group({class:\"apexcharts-yaxis-title\"}),y=0;i.config.yaxis[t].opposite&&(y=i.globals.translateYAxisX[t]);var w=a.drawText({x:y,y:i.globals.gridHeight/2+i.globals.translateY+i.config.yaxis[t].title.offsetY,text:i.config.yaxis[t].title.text,textAnchor:\"end\",foreColor:i.config.yaxis[t].title.style.color,fontSize:i.config.yaxis[t].title.style.fontSize,fontWeight:i.config.yaxis[t].title.style.fontWeight,fontFamily:i.config.yaxis[t].title.style.fontFamily,cssClass:\"apexcharts-yaxis-title-text \"+i.config.yaxis[t].title.style.cssClass});v.add(w),l.add(v)}var k=i.config.yaxis[t].axisBorder,A=31+k.offsetX;if(i.config.yaxis[t].opposite&&(A=-31-k.offsetX),k.show){var S=a.drawLine(A,i.globals.translateY+k.offsetY-2,A,i.globals.gridHeight+i.globals.translateY+k.offsetY+2,k.color,0,k.width);l.add(S)}return i.config.yaxis[t].axisTicks.show&&this.axesUtils.drawYAxisTicks(A,c,k,i.config.yaxis[t].axisTicks,t,d,l),l}},{key:\"drawYaxisInversed\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-xaxis apexcharts-yaxis-inversed\"}),s=i.group({class:\"apexcharts-xaxis-texts-g\",transform:\"translate(\".concat(e.globals.translateXAxisX,\", \").concat(e.globals.translateXAxisY,\")\")});a.add(s);var r=e.globals.yAxisScale[t].result.length-1,o=e.globals.gridWidth/r+.1,n=o+e.config.xaxis.labels.offsetX,l=e.globals.xLabelFormatter,h=e.globals.yAxisScale[t].result.slice(),c=e.globals.timescaleLabels;c.length>0&&(this.xaxisLabels=c.slice(),r=(h=c.slice()).length),h=this.axesUtils.checkForReversedLabels(t,h);var d=c.length;if(e.config.xaxis.labels.show)for(var g=d?0:r;d?g<d:g>=0;d?g++:g--){var u=h[g];u=l(u,g,e);var f=e.globals.gridWidth+e.globals.padHorizontal-(n-o+e.config.xaxis.labels.offsetX);if(c.length){var p=this.axesUtils.getLabel(h,c,f,g,this.drawnLabels,this.xaxisFontSize);f=p.x,u=p.text,this.drawnLabels.push(p.text),0===g&&e.globals.skipFirstTimelinelabel&&(u=\"\"),g===h.length-1&&e.globals.skipLastTimelinelabel&&(u=\"\")}var x=i.drawText({x:f,y:this.xAxisoffX+e.config.xaxis.labels.offsetY+30-(\"top\"===e.config.xaxis.position?e.globals.xAxisHeight+e.config.xaxis.axisTicks.height-2:0),text:u,textAnchor:\"middle\",foreColor:Array.isArray(this.xaxisForeColors)?this.xaxisForeColors[t]:this.xaxisForeColors,fontSize:this.xaxisFontSize,fontFamily:this.xaxisFontFamily,fontWeight:e.config.xaxis.labels.style.fontWeight,isPlainText:!1,cssClass:\"apexcharts-xaxis-label \"+e.config.xaxis.labels.style.cssClass});s.add(x),x.tspan(u);var b=document.createElementNS(e.globals.SVGNS,\"title\");b.textContent=u,x.node.appendChild(b),n+=o}return this.inversedYAxisTitleText(a),this.inversedYAxisBorder(a),a}},{key:\"inversedYAxisBorder\",value:function(t){var e=this.w,i=new m(this.ctx),a=e.config.xaxis.axisBorder;if(a.show){var s=0;\"bar\"===e.config.chart.type&&e.globals.isXNumeric&&(s-=15);var r=i.drawLine(e.globals.padHorizontal+s+a.offsetX,this.xAxisoffX,e.globals.gridWidth,this.xAxisoffX,a.color,0,a.height);t.add(r)}}},{key:\"inversedYAxisTitleText\",value:function(t){var e=this.w,i=new m(this.ctx);if(void 0!==e.config.xaxis.title.text){var a=i.group({class:\"apexcharts-xaxis-title apexcharts-yaxis-title-inversed\"}),s=i.drawText({x:e.globals.gridWidth/2+e.config.xaxis.title.offsetX,y:this.xAxisoffX+parseFloat(this.xaxisFontSize)+parseFloat(e.config.xaxis.title.style.fontSize)+e.config.xaxis.title.offsetY+20,text:e.config.xaxis.title.text,textAnchor:\"middle\",fontSize:e.config.xaxis.title.style.fontSize,fontFamily:e.config.xaxis.title.style.fontFamily,fontWeight:e.config.xaxis.title.style.fontWeight,foreColor:e.config.xaxis.title.style.color,cssClass:\"apexcharts-xaxis-title-text \"+e.config.xaxis.title.style.cssClass});a.add(s),t.add(a)}}},{key:\"yAxisTitleRotate\",value:function(t,e){var i=this.w,a=new m(this.ctx),s={width:0,height:0},r={width:0,height:0},o=i.globals.dom.baseEl.querySelector(\" .apexcharts-yaxis[rel='\".concat(t,\"'] .apexcharts-yaxis-texts-g\"));null!==o&&(s=o.getBoundingClientRect());var n=i.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(t,\"'] .apexcharts-yaxis-title text\"));if(null!==n&&(r=n.getBoundingClientRect()),null!==n){var l=this.xPaddingForYAxisTitle(t,s,r,e);n.setAttribute(\"x\",l.xPos-(e?10:0))}if(null!==n){var h=a.rotateAroundCenter(n);n.setAttribute(\"transform\",\"rotate(\".concat(e?-1*i.config.yaxis[t].title.rotate:i.config.yaxis[t].title.rotate,\" \").concat(h.x,\" \").concat(h.y,\")\"))}}},{key:\"xPaddingForYAxisTitle\",value:function(t,e,i,a){var s=this.w,r=0,o=0,n=10;return void 0===s.config.yaxis[t].title.text||t<0?{xPos:o,padd:0}:(a?(o=e.width+s.config.yaxis[t].title.offsetX+i.width/2+n/2,0===(r+=1)&&(o-=n/2)):(o=-1*e.width+s.config.yaxis[t].title.offsetX+n/2+i.width/2,s.globals.isBarHorizontal&&(n=25,o=-1*e.width-s.config.yaxis[t].title.offsetX-n)),{xPos:o,padd:n})}},{key:\"setYAxisXPosition\",value:function(t,e){var i=this.w,a=0,s=0,r=18,o=1;i.config.yaxis.length>1&&(this.multipleYs=!0),i.config.yaxis.map((function(n,l){var h=i.globals.ignoreYAxisIndexes.indexOf(l)>-1||!n.show||n.floating||0===t[l].width,c=t[l].width+e[l].width;n.opposite?i.globals.isBarHorizontal?(s=i.globals.gridWidth+i.globals.translateX-1,i.globals.translateYAxisX[l]=s-n.labels.offsetX):(s=i.globals.gridWidth+i.globals.translateX+o,h||(o=o+c+20),i.globals.translateYAxisX[l]=s-n.labels.offsetX+20):(a=i.globals.translateX-r,h||(r=r+c+20),i.globals.translateYAxisX[l]=a+n.labels.offsetX)}))}},{key:\"setYAxisTextAlignments\",value:function(){var t=this.w,e=t.globals.dom.baseEl.getElementsByClassName(\"apexcharts-yaxis\");(e=x.listToArray(e)).forEach((function(e,i){var a=t.config.yaxis[i];if(a&&void 0!==a.labels.align){var s=t.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(i,\"'] .apexcharts-yaxis-texts-g\")),r=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis[rel='\".concat(i,\"'] .apexcharts-yaxis-label\"));r=x.listToArray(r);var o=s.getBoundingClientRect();\"left\"===a.labels.align?(r.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"start\")})),a.opposite||s.setAttribute(\"transform\",\"translate(-\".concat(o.width,\", 0)\"))):\"center\"===a.labels.align?(r.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"middle\")})),s.setAttribute(\"transform\",\"translate(\".concat(o.width/2*(a.opposite?1:-1),\", 0)\"))):\"right\"===a.labels.align&&(r.forEach((function(t,e){t.setAttribute(\"text-anchor\",\"end\")})),a.opposite&&s.setAttribute(\"transform\",\"translate(\".concat(o.width,\", 0)\")))}}))}}]),t}(),Z=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.documentEvent=x.bind(this.documentEvent,this)}return r(t,[{key:\"addEventListener\",value:function(t,e){var i=this.w;i.globals.events.hasOwnProperty(t)?i.globals.events[t].push(e):i.globals.events[t]=[e]}},{key:\"removeEventListener\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){var a=i.globals.events[t].indexOf(e);-1!==a&&i.globals.events[t].splice(a,1)}}},{key:\"fireEvent\",value:function(t,e){var i=this.w;if(i.globals.events.hasOwnProperty(t)){e&&e.length||(e=[]);for(var a=i.globals.events[t],s=a.length,r=0;r<s;r++)a[r].apply(null,e)}}},{key:\"setupEventHandlers\",value:function(){var t=this,e=this.w,i=this.ctx,a=e.globals.dom.baseEl.querySelector(e.globals.chartClass);this.ctx.eventList.forEach((function(t){a.addEventListener(t,(function(t){var a=Object.assign({},e,{seriesIndex:e.globals.capturedSeriesIndex,dataPointIndex:e.globals.capturedDataPointIndex});\"mousemove\"===t.type||\"touchmove\"===t.type?\"function\"==typeof e.config.chart.events.mouseMove&&e.config.chart.events.mouseMove(t,i,a):\"mouseleave\"===t.type||\"touchleave\"===t.type?\"function\"==typeof e.config.chart.events.mouseLeave&&e.config.chart.events.mouseLeave(t,i,a):(\"mouseup\"===t.type&&1===t.which||\"touchend\"===t.type)&&(\"function\"==typeof e.config.chart.events.click&&e.config.chart.events.click(t,i,a),i.ctx.events.fireEvent(\"click\",[t,i,a]))}),{capture:!1,passive:!0})})),this.ctx.eventList.forEach((function(i){e.globals.dom.baseEl.addEventListener(i,t.documentEvent,{passive:!0})})),this.ctx.core.setupBrushHandler()}},{key:\"documentEvent\",value:function(t){var e=this.w,i=t.target.className;if(\"click\"===t.type){var a=e.globals.dom.baseEl.querySelector(\".apexcharts-menu\");a&&a.classList.contains(\"apexcharts-menu-open\")&&\"apexcharts-menu-icon\"!==i&&a.classList.remove(\"apexcharts-menu-open\")}e.globals.clientX=\"touchmove\"===t.type?t.touches[0].clientX:t.clientX,e.globals.clientY=\"touchmove\"===t.type?t.touches[0].clientY:t.clientY}}]),t}(),$=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"setCurrentLocaleValues\",value:function(t){var e=this.w.config.chart.locales;window.Apex.chart&&window.Apex.chart.locales&&window.Apex.chart.locales.length>0&&(e=this.w.config.chart.locales.concat(window.Apex.chart.locales));var i=e.filter((function(e){return e.name===t}))[0];if(!i)throw new Error(\"Wrong locale name provided. Please make sure you set the correct locale name in options\");var a=x.extend(C,i);this.w.globals.locale=a.options}}]),t}(),J=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawAxis\",value:function(t,e){var i,a,s=this.w.globals,r=this.w.config,o=new G(this.ctx),n=new q(this.ctx);s.axisCharts&&\"radar\"!==t&&(s.isBarHorizontal?(a=n.drawYaxisInversed(0),i=o.drawXaxisInversed(0),s.dom.elGraphical.add(i),s.dom.elGraphical.add(a)):(i=o.drawXaxis(),s.dom.elGraphical.add(i),r.yaxis.map((function(t,e){-1===s.ignoreYAxisIndexes.indexOf(e)&&(a=n.drawYaxis(e),s.dom.Paper.add(a))}))))}}]),t}(),Q=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawXCrosshairs\",value:function(){var t=this.w,e=new m(this.ctx),i=new v(this.ctx),a=t.config.xaxis.crosshairs.fill.gradient,s=t.config.xaxis.crosshairs.dropShadow,r=t.config.xaxis.crosshairs.fill.type,o=a.colorFrom,n=a.colorTo,l=a.opacityFrom,h=a.opacityTo,c=a.stops,d=s.enabled,g=s.left,u=s.top,f=s.blur,p=s.color,b=s.opacity,y=t.config.xaxis.crosshairs.fill.color;if(t.config.xaxis.crosshairs.show){\"gradient\"===r&&(y=e.drawGradient(\"vertical\",o,n,l,h,null,c,null));var w=e.drawRect();1===t.config.xaxis.crosshairs.width&&(w=e.drawLine());var k=t.globals.gridHeight;(!x.isNumber(k)||k<0)&&(k=0);var A=t.config.xaxis.crosshairs.width;(!x.isNumber(A)||A<0)&&(A=0),w.attr({class:\"apexcharts-xcrosshairs\",x:0,y:0,y2:k,width:A,height:k,fill:y,filter:\"none\",\"fill-opacity\":t.config.xaxis.crosshairs.opacity,stroke:t.config.xaxis.crosshairs.stroke.color,\"stroke-width\":t.config.xaxis.crosshairs.stroke.width,\"stroke-dasharray\":t.config.xaxis.crosshairs.stroke.dashArray}),d&&(w=i.dropShadow(w,{left:g,top:u,blur:f,color:p,opacity:b})),t.globals.dom.elGraphical.add(w)}}},{key:\"drawYCrosshairs\",value:function(){var t=this.w,e=new m(this.ctx),i=t.config.yaxis[0].crosshairs,a=t.globals.barPadForNumericAxis;if(t.config.yaxis[0].crosshairs.show){var s=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,i.stroke.dashArray,i.stroke.width);s.attr({class:\"apexcharts-ycrosshairs\"}),t.globals.dom.elGraphical.add(s)}var r=e.drawLine(-a,0,t.globals.gridWidth+a,0,i.stroke.color,0,0);r.attr({class:\"apexcharts-ycrosshairs-hidden\"}),t.globals.dom.elGraphical.add(r)}}]),t}(),K=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"checkResponsiveConfig\",value:function(t){var e=this,i=this.w,a=i.config;if(0!==a.responsive.length){var s=a.responsive.slice();s.sort((function(t,e){return t.breakpoint>e.breakpoint?1:e.breakpoint>t.breakpoint?-1:0})).reverse();var r=new z({}),o=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=s[0].breakpoint,o=window.innerWidth>0?window.innerWidth:screen.width;if(o>a){var n=y.extendArrayProps(r,i.globals.initialConfig,i);t=x.extend(n,t),t=x.extend(i.config,t),e.overrideResponsiveOptions(t)}else for(var l=0;l<s.length;l++)o<s[l].breakpoint&&(t=y.extendArrayProps(r,s[l].options,i),t=x.extend(i.config,t),e.overrideResponsiveOptions(t))};if(t){var n=y.extendArrayProps(r,t,i);n=x.extend(i.config,n),o(n=x.extend(n,t))}else o({})}}},{key:\"overrideResponsiveOptions\",value:function(t){var e=new z(t).init({responsiveOverride:!0});this.w.config=e}}]),t}(),tt=function(){function t(e){a(this,t),this.ctx=e,this.colors=[],this.w=e.w;var i=this.w;this.isColorFn=!1,this.isHeatmapDistributed=\"treemap\"===i.config.chart.type&&i.config.plotOptions.treemap.distributed||\"heatmap\"===i.config.chart.type&&i.config.plotOptions.heatmap.distributed,this.isBarDistributed=i.config.plotOptions.bar.distributed&&(\"bar\"===i.config.chart.type||\"rangeBar\"===i.config.chart.type)}return r(t,[{key:\"init\",value:function(){this.setDefaultColors()}},{key:\"setDefaultColors\",value:function(){var t=this,e=this.w,i=new x;if(e.globals.dom.elWrap.classList.add(\"apexcharts-theme-\".concat(e.config.theme.mode)),void 0===e.config.colors?e.globals.colors=this.predefined():(e.globals.colors=e.config.colors,Array.isArray(e.config.colors)&&e.config.colors.length>0&&\"function\"==typeof e.config.colors[0]&&(e.globals.colors=e.config.series.map((function(i,a){var s=e.config.colors[a];return s||(s=e.config.colors[0]),\"function\"==typeof s?(t.isColorFn=!0,s({value:e.globals.axisCharts?e.globals.series[a][0]?e.globals.series[a][0]:0:e.globals.series[a],seriesIndex:a,dataPointIndex:a,w:e})):s})))),e.globals.seriesColors.map((function(t,i){t&&(e.globals.colors[i]=t)})),e.config.theme.monochrome.enabled){var a=[],s=e.globals.series.length;(this.isBarDistributed||this.isHeatmapDistributed)&&(s=e.globals.series[0].length*e.globals.series.length);for(var r=e.config.theme.monochrome.color,o=1/(s/e.config.theme.monochrome.shadeIntensity),n=e.config.theme.monochrome.shadeTo,l=0,h=0;h<s;h++){var c=void 0;\"dark\"===n?(c=i.shadeColor(-1*l,r),l+=o):(c=i.shadeColor(l,r),l+=o),a.push(c)}e.globals.colors=a.slice()}var d=e.globals.colors.slice();this.pushExtraColors(e.globals.colors);[\"fill\",\"stroke\"].forEach((function(i){void 0===e.config[i].colors?e.globals[i].colors=t.isColorFn?e.config.colors:d:e.globals[i].colors=e.config[i].colors.slice(),t.pushExtraColors(e.globals[i].colors)})),void 0===e.config.dataLabels.style.colors?e.globals.dataLabels.style.colors=d:e.globals.dataLabels.style.colors=e.config.dataLabels.style.colors.slice(),this.pushExtraColors(e.globals.dataLabels.style.colors,50),void 0===e.config.plotOptions.radar.polygons.fill.colors?e.globals.radarPolygons.fill.colors=[\"dark\"===e.config.theme.mode?\"#424242\":\"none\"]:e.globals.radarPolygons.fill.colors=e.config.plotOptions.radar.polygons.fill.colors.slice(),this.pushExtraColors(e.globals.radarPolygons.fill.colors,20),void 0===e.config.markers.colors?e.globals.markers.colors=d:e.globals.markers.colors=e.config.markers.colors.slice(),this.pushExtraColors(e.globals.markers.colors)}},{key:\"pushExtraColors\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=e||a.globals.series.length;if(null===i&&(i=this.isBarDistributed||this.isHeatmapDistributed||\"heatmap\"===a.config.chart.type&&a.config.plotOptions.heatmap.colorScale.inverse),i&&a.globals.series.length&&(s=a.globals.series[a.globals.maxValsInArrayIndex].length*a.globals.series.length),t.length<s)for(var r=s-t.length,o=0;o<r;o++)t.push(t[o])}},{key:\"updateThemeOptions\",value:function(t){t.chart=t.chart||{},t.tooltip=t.tooltip||{};var e=t.theme.mode||\"light\",i=t.theme.palette?t.theme.palette:\"dark\"===e?\"palette4\":\"palette1\",a=t.chart.foreColor?t.chart.foreColor:\"dark\"===e?\"#f6f7f8\":\"#373d3f\";return t.tooltip.theme=e,t.chart.foreColor=a,t.theme.palette=i,t}},{key:\"predefined\",value:function(){switch(this.w.config.theme.palette){case\"palette1\":default:this.colors=[\"#008FFB\",\"#00E396\",\"#FEB019\",\"#FF4560\",\"#775DD0\"];break;case\"palette2\":this.colors=[\"#3f51b5\",\"#03a9f4\",\"#4caf50\",\"#f9ce1d\",\"#FF9800\"];break;case\"palette3\":this.colors=[\"#33b2df\",\"#546E7A\",\"#d4526e\",\"#13d8aa\",\"#A5978B\"];break;case\"palette4\":this.colors=[\"#4ecdc4\",\"#c7f464\",\"#81D4FA\",\"#fd6a6a\",\"#546E7A\"];break;case\"palette5\":this.colors=[\"#2b908f\",\"#f9a3a4\",\"#90ee7e\",\"#fa4443\",\"#69d2e7\"];break;case\"palette6\":this.colors=[\"#449DD1\",\"#F86624\",\"#EA3546\",\"#662E9B\",\"#C5D86D\"];break;case\"palette7\":this.colors=[\"#D7263D\",\"#1B998B\",\"#2E294E\",\"#F46036\",\"#E2C044\"];break;case\"palette8\":this.colors=[\"#662E9B\",\"#F86624\",\"#F9C80E\",\"#EA3546\",\"#43BCCD\"];break;case\"palette9\":this.colors=[\"#5C4742\",\"#A5978B\",\"#8D5B4C\",\"#5A2A27\",\"#C4BBAF\"];break;case\"palette10\":this.colors=[\"#A300D6\",\"#7D02EB\",\"#5653FE\",\"#2983FF\",\"#00B1F2\"]}return this.colors}}]),t}(),et=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"draw\",value:function(){this.drawTitleSubtitle(\"title\"),this.drawTitleSubtitle(\"subtitle\")}},{key:\"drawTitleSubtitle\",value:function(t){var e=this.w,i=\"title\"===t?e.config.title:e.config.subtitle,a=e.globals.svgWidth/2,s=i.offsetY,r=\"middle\";if(\"left\"===i.align?(a=10,r=\"start\"):\"right\"===i.align&&(a=e.globals.svgWidth-10,r=\"end\"),a+=i.offsetX,s=s+parseInt(i.style.fontSize,10)+i.margin/2,void 0!==i.text){var o=new m(this.ctx).drawText({x:a,y:s,text:i.text,textAnchor:r,fontSize:i.style.fontSize,fontFamily:i.style.fontFamily,fontWeight:i.style.fontWeight,foreColor:i.style.color,opacity:1});o.node.setAttribute(\"class\",\"apexcharts-\".concat(t,\"-text\")),e.globals.dom.Paper.add(o)}}}]),t}(),it=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"getTitleSubtitleCoords\",value:function(t){var e=this.w,i=0,a=0,s=\"title\"===t?e.config.title.floating:e.config.subtitle.floating,r=e.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(t,\"-text\"));if(null!==r&&!s){var o=r.getBoundingClientRect();i=o.width,a=e.globals.axisCharts?o.height+5:o.height}return{width:i,height:a}}},{key:\"getLegendsRect\",value:function(){var t=this.w,e=t.globals.dom.baseEl.querySelector(\".apexcharts-legend\");t.config.legend.height||\"top\"!==t.config.legend.position&&\"bottom\"!==t.config.legend.position||(e.style.maxHeight=t.globals.svgHeight/2+\"px\");var i=Object.assign({},x.getBoundingClientRect(e));return null!==e&&!t.config.legend.floating&&t.config.legend.show?this.dCtx.lgRect={x:i.x,y:i.y,height:i.height,width:0===i.height?0:i.width}:this.dCtx.lgRect={x:0,y:0,height:0,width:0},\"left\"!==t.config.legend.position&&\"right\"!==t.config.legend.position||1.5*this.dCtx.lgRect.width>t.globals.svgWidth&&(this.dCtx.lgRect.width=t.globals.svgWidth/1.5),this.dCtx.lgRect}},{key:\"getLargestStringFromMultiArr\",value:function(t,e){var i=t;if(this.w.globals.isMultiLineX){var a=e.map((function(t,e){return Array.isArray(t)?t.length:1})),s=Math.max.apply(Math,u(a));i=e[a.indexOf(s)]}return i}}]),t}(),at=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"getxAxisLabelsCoords\",value:function(){var t,e=this.w,i=e.globals.labels.slice();if(e.config.xaxis.convertedCatToNumeric&&0===i.length&&(i=e.globals.categoryLabels),e.globals.timescaleLabels.length>0){var a=this.getxAxisTimeScaleLabelsCoords();t={width:a.width,height:a.height},e.globals.rotateXLabels=!1}else{this.dCtx.lgWidthForSideLegends=\"left\"!==e.config.legend.position&&\"right\"!==e.config.legend.position||e.config.legend.floating?0:this.dCtx.lgRect.width;var s=e.globals.xLabelFormatter,r=x.getLargestStringFromArr(i),o=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,i);e.globals.isBarHorizontal&&(o=r=e.globals.yAxisScale[0].result.reduce((function(t,e){return t.length>e.length?t:e}),0));var n=new W(this.dCtx.ctx),l=r;r=n.xLabelFormat(s,r,l,{i:void 0,dateFormatter:new T(this.dCtx.ctx).formatDate,w:e}),o=n.xLabelFormat(s,o,l,{i:void 0,dateFormatter:new T(this.dCtx.ctx).formatDate,w:e}),(e.config.xaxis.convertedCatToNumeric&&void 0===r||\"\"===String(r).trim())&&(o=r=\"1\");var h=new m(this.dCtx.ctx),c=h.getTextRects(r,e.config.xaxis.labels.style.fontSize),d=c;if(r!==o&&(d=h.getTextRects(o,e.config.xaxis.labels.style.fontSize)),(t={width:c.width>=d.width?c.width:d.width,height:c.height>=d.height?c.height:d.height}).width*i.length>e.globals.svgWidth-this.dCtx.lgWidthForSideLegends-this.dCtx.yAxisWidth-this.dCtx.gridPad.left-this.dCtx.gridPad.right&&0!==e.config.xaxis.labels.rotate||e.config.xaxis.labels.rotateAlways){if(!e.globals.isBarHorizontal){e.globals.rotateXLabels=!0;var g=function(t){return h.getTextRects(t,e.config.xaxis.labels.style.fontSize,e.config.xaxis.labels.style.fontFamily,\"rotate(\".concat(e.config.xaxis.labels.rotate,\" 0 0)\"),!1)};c=g(r),r!==o&&(d=g(o)),t.height=(c.height>d.height?c.height:d.height)/1.5,t.width=c.width>d.width?c.width:d.width}}else e.globals.rotateXLabels=!1}return e.config.xaxis.labels.show||(t={width:0,height:0}),{width:t.width,height:t.height}}},{key:\"getxAxisGroupLabelsCoords\",value:function(){var t,e=this.w;if(!e.globals.hasGroups)return{width:0,height:0};var i,a=(null===(t=e.config.xaxis.group.style)||void 0===t?void 0:t.fontSize)||e.config.xaxis.labels.style.fontSize,s=e.globals.groups.map((function(t){return t.title})),r=x.getLargestStringFromArr(s),o=this.dCtx.dimHelpers.getLargestStringFromMultiArr(r,s),n=new m(this.dCtx.ctx),l=n.getTextRects(r,a),h=l;return r!==o&&(h=n.getTextRects(o,a)),i={width:l.width>=h.width?l.width:h.width,height:l.height>=h.height?l.height:h.height},e.config.xaxis.labels.show||(i={width:0,height:0}),{width:i.width,height:i.height}}},{key:\"getxAxisTitleCoords\",value:function(){var t=this.w,e=0,i=0;if(void 0!==t.config.xaxis.title.text){var a=new m(this.dCtx.ctx).getTextRects(t.config.xaxis.title.text,t.config.xaxis.title.style.fontSize);e=a.width,i=a.height}return{width:e,height:i}}},{key:\"getxAxisTimeScaleLabelsCoords\",value:function(){var t,e=this.w;this.dCtx.timescaleLabels=e.globals.timescaleLabels.slice();var i=this.dCtx.timescaleLabels.map((function(t){return t.value})),a=i.reduce((function(t,e){return void 0===t?(console.error(\"You have possibly supplied invalid Date format. Please supply a valid JavaScript Date\"),0):t.length>e.length?t:e}),0);return 1.05*(t=new m(this.dCtx.ctx).getTextRects(a,e.config.xaxis.labels.style.fontSize)).width*i.length>e.globals.gridWidth&&0!==e.config.xaxis.labels.rotate&&(e.globals.overlappingXLabels=!0),t}},{key:\"additionalPaddingXLabels\",value:function(t){var e=this,i=this.w,a=i.globals,s=i.config,r=s.xaxis.type,o=t.width;a.skipLastTimelinelabel=!1,a.skipFirstTimelinelabel=!1;var n=i.config.yaxis[0].opposite&&i.globals.isBarHorizontal,l=function(t,n){(function(t){return-1!==a.collapsedSeriesIndices.indexOf(t)})(n)||function(t){if(e.dCtx.timescaleLabels&&e.dCtx.timescaleLabels.length){var n=e.dCtx.timescaleLabels[0],l=e.dCtx.timescaleLabels[e.dCtx.timescaleLabels.length-1].position+o/1.75-e.dCtx.yAxisWidthRight,h=n.position-o/1.75+e.dCtx.yAxisWidthLeft,c=\"right\"===i.config.legend.position&&e.dCtx.lgRect.width>0?e.dCtx.lgRect.width:0;l>a.svgWidth-a.translateX-c&&(a.skipLastTimelinelabel=!0),h<-(t.show&&!t.floating||\"bar\"!==s.chart.type&&\"candlestick\"!==s.chart.type&&\"rangeBar\"!==s.chart.type&&\"boxPlot\"!==s.chart.type?10:o/1.75)&&(a.skipFirstTimelinelabel=!0)}else\"datetime\"===r?e.dCtx.gridPad.right<o&&!a.rotateXLabels&&(a.skipLastTimelinelabel=!0):\"datetime\"!==r&&e.dCtx.gridPad.right<o/2-e.dCtx.yAxisWidthRight&&!a.rotateXLabels&&!i.config.xaxis.labels.trim&&(\"between\"!==i.config.xaxis.tickPlacement||i.globals.isBarHorizontal)&&(e.dCtx.xPadRight=o/2+1)}(t)};s.yaxis.forEach((function(t,i){n?(e.dCtx.gridPad.left<o&&(e.dCtx.xPadLeft=o/2+1),e.dCtx.xPadRight=o/2+1):l(t,i)}))}}]),t}(),st=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"getyAxisLabelsCoords\",value:function(){var t=this,e=this.w,i=[],a=10,s=new B(this.dCtx.ctx);return e.config.yaxis.map((function(r,o){var n=e.globals.yAxisScale[o],l=0;if(!s.isYAxisHidden(o)&&r.labels.show&&void 0!==r.labels.minWidth&&(l=r.labels.minWidth),!s.isYAxisHidden(o)&&r.labels.show&&n.result.length){var h=e.globals.yLabelFormatters[o],c=n.niceMin===Number.MIN_VALUE?0:n.niceMin,d=String(c).length>String(n.niceMax).length?c:n.niceMax,g=h(d,{seriesIndex:o,dataPointIndex:-1,w:e}),u=g;if(void 0!==g&&0!==g.length||(g=d),e.globals.isBarHorizontal){a=0;var f=e.globals.labels.slice();g=h(g=x.getLargestStringFromArr(f),{seriesIndex:o,dataPointIndex:-1,w:e}),u=t.dCtx.dimHelpers.getLargestStringFromMultiArr(g,f)}var p=new m(t.dCtx.ctx),b=\"rotate(\".concat(r.labels.rotate,\" 0 0)\"),v=p.getTextRects(g,r.labels.style.fontSize,r.labels.style.fontFamily,b,!1),y=v;g!==u&&(y=p.getTextRects(u,r.labels.style.fontSize,r.labels.style.fontFamily,b,!1)),i.push({width:(l>y.width||l>v.width?l:y.width>v.width?y.width:v.width)+a,height:y.height>v.height?y.height:v.height})}else i.push({width:0,height:0})})),i}},{key:\"getyAxisTitleCoords\",value:function(){var t=this,e=this.w,i=[];return e.config.yaxis.map((function(e,a){if(e.show&&void 0!==e.title.text){var s=new m(t.dCtx.ctx),r=\"rotate(\".concat(e.title.rotate,\" 0 0)\"),o=s.getTextRects(e.title.text,e.title.style.fontSize,e.title.style.fontFamily,r,!1);i.push({width:o.width,height:o.height})}else i.push({width:0,height:0})})),i}},{key:\"getTotalYAxisWidth\",value:function(){var t=this.w,e=0,i=0,a=0,s=t.globals.yAxisScale.length>1?10:0,r=new B(this.dCtx.ctx),o=function(o,n){var l=t.config.yaxis[n].floating,h=0;o.width>0&&!l?(h=o.width+s,function(e){return t.globals.ignoreYAxisIndexes.indexOf(e)>-1}(n)&&(h=h-o.width-s)):h=l||r.isYAxisHidden(n)?0:5,t.config.yaxis[n].opposite?a+=h:i+=h,e+=h};return t.globals.yLabelsCoords.map((function(t,e){o(t,e)})),t.globals.yTitleCoords.map((function(t,e){o(t,e)})),t.globals.isBarHorizontal&&!t.config.yaxis[0].floating&&(e=t.globals.yLabelsCoords[0].width+t.globals.yTitleCoords[0].width+15),this.dCtx.yAxisWidthLeft=i,this.dCtx.yAxisWidthRight=a,e}}]),t}(),rt=function(){function t(e){a(this,t),this.w=e.w,this.dCtx=e}return r(t,[{key:\"gridPadForColumnsInNumericAxis\",value:function(t){var e=this.w;if(e.globals.noData||e.globals.allSeriesCollapsed)return 0;var i=function(t){return\"bar\"===t||\"rangeBar\"===t||\"candlestick\"===t||\"boxPlot\"===t},a=e.config.chart.type,s=0,r=i(a)?e.config.series.length:1;if(e.globals.comboBarCount>0&&(r=e.globals.comboBarCount),e.globals.collapsedSeries.forEach((function(t){i(t.type)&&(r-=1)})),e.config.chart.stacked&&(r=1),(i(a)||e.globals.comboBarCount>0)&&e.globals.isXNumeric&&!e.globals.isBarHorizontal&&r>0){var o,n,l=Math.abs(e.globals.initialMaxX-e.globals.initialMinX);l<=3&&(l=e.globals.dataPoints),o=l/t,e.globals.minXDiff&&e.globals.minXDiff/o>0&&(n=e.globals.minXDiff/o),n>t/2&&(n/=2),(s=n/r*parseInt(e.config.plotOptions.bar.columnWidth,10)/100)<1&&(s=1),s=s/(r>1?1:1.5)+5,e.globals.barPadForNumericAxis=s}return s}},{key:\"gridPadFortitleSubtitle\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dCtx.isSparkline||!e.globals.axisCharts?0:10;[\"title\",\"subtitle\"].forEach((function(i){void 0!==e.config[i].text?a+=e.config[i].margin:a+=t.dCtx.isSparkline||!e.globals.axisCharts?0:5})),!e.config.legend.show||\"bottom\"!==e.config.legend.position||e.config.legend.floating||e.globals.axisCharts||(a+=10);var s=this.dCtx.dimHelpers.getTitleSubtitleCoords(\"title\"),r=this.dCtx.dimHelpers.getTitleSubtitleCoords(\"subtitle\");i.gridHeight=i.gridHeight-s.height-r.height-a,i.translateY=i.translateY+s.height+r.height+a}},{key:\"setGridXPosForDualYAxis\",value:function(t,e){var i=this.w,a=new B(this.dCtx.ctx);i.config.yaxis.map((function(s,r){-1!==i.globals.ignoreYAxisIndexes.indexOf(r)||s.floating||a.isYAxisHidden(r)||(s.opposite&&(i.globals.translateX=i.globals.translateX-(e[r].width+t[r].width)-parseInt(i.config.yaxis[r].labels.style.fontSize,10)/1.2-12),i.globals.translateX<2&&(i.globals.translateX=2))}))}}]),t}(),ot=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.lgRect={},this.yAxisWidth=0,this.yAxisWidthLeft=0,this.yAxisWidthRight=0,this.xAxisHeight=0,this.isSparkline=this.w.config.chart.sparkline.enabled,this.dimHelpers=new it(this),this.dimYAxis=new st(this),this.dimXAxis=new at(this),this.dimGrid=new rt(this),this.lgWidthForSideLegends=0,this.gridPad=this.w.config.grid.padding,this.xPadRight=0,this.xPadLeft=0}return r(t,[{key:\"plotCoords\",value:function(){var t=this,e=this.w,i=e.globals;this.lgRect=this.dimHelpers.getLegendsRect(),this.isSparkline&&(e.config.markers.discrete.length>0||e.config.markers.size>0)&&Object.entries(this.gridPad).forEach((function(e){var i=g(e,2),a=i[0],s=i[1];t.gridPad[a]=Math.max(s,t.w.globals.markers.largestSize/1.5)})),i.axisCharts?this.setDimensionsForAxisCharts():this.setDimensionsForNonAxisCharts(),this.dimGrid.gridPadFortitleSubtitle(),i.gridHeight=i.gridHeight-this.gridPad.top-this.gridPad.bottom,i.gridWidth=i.gridWidth-this.gridPad.left-this.gridPad.right-this.xPadRight-this.xPadLeft;var a=this.dimGrid.gridPadForColumnsInNumericAxis(i.gridWidth);i.gridWidth=i.gridWidth-2*a,i.translateX=i.translateX+this.gridPad.left+this.xPadLeft+(a>0?a+4:0),i.translateY=i.translateY+this.gridPad.top}},{key:\"setDimensionsForAxisCharts\",value:function(){var t=this,e=this.w,i=e.globals,a=this.dimYAxis.getyAxisLabelsCoords(),s=this.dimYAxis.getyAxisTitleCoords();e.globals.yLabelsCoords=[],e.globals.yTitleCoords=[],e.config.yaxis.map((function(t,i){e.globals.yLabelsCoords.push({width:a[i].width,index:i}),e.globals.yTitleCoords.push({width:s[i].width,index:i})})),this.yAxisWidth=this.dimYAxis.getTotalYAxisWidth();var r=this.dimXAxis.getxAxisLabelsCoords(),o=this.dimXAxis.getxAxisGroupLabelsCoords(),n=this.dimXAxis.getxAxisTitleCoords();this.conditionalChecksForAxisCoords(r,n,o),i.translateXAxisY=e.globals.rotateXLabels?this.xAxisHeight/8:-4,i.translateXAxisX=e.globals.rotateXLabels&&e.globals.isXNumeric&&e.config.xaxis.labels.rotate<=-45?-this.xAxisWidth/4:0,e.globals.isBarHorizontal&&(i.rotateXLabels=!1,i.translateXAxisY=parseInt(e.config.xaxis.labels.style.fontSize,10)/1.5*-1),i.translateXAxisY=i.translateXAxisY+e.config.xaxis.labels.offsetY,i.translateXAxisX=i.translateXAxisX+e.config.xaxis.labels.offsetX;var l=this.yAxisWidth,h=this.xAxisHeight;i.xAxisLabelsHeight=this.xAxisHeight-n.height,i.xAxisGroupLabelsHeight=i.xAxisLabelsHeight-r.height,i.xAxisLabelsWidth=this.xAxisWidth,i.xAxisHeight=this.xAxisHeight;var c=10;(\"radar\"===e.config.chart.type||this.isSparkline)&&(l=0,h=i.goldenPadding),this.isSparkline&&(this.lgRect={height:0,width:0}),(this.isSparkline||\"treemap\"===e.config.chart.type)&&(l=0,h=0,c=0),this.isSparkline||this.dimXAxis.additionalPaddingXLabels(r);var d=function(){i.translateX=l,i.gridHeight=i.svgHeight-t.lgRect.height-h-(t.isSparkline||\"treemap\"===e.config.chart.type?0:e.globals.rotateXLabels?10:15),i.gridWidth=i.svgWidth-l};switch(\"top\"===e.config.xaxis.position&&(c=i.xAxisHeight-e.config.xaxis.axisTicks.height-5),e.config.legend.position){case\"bottom\":i.translateY=c,d();break;case\"top\":i.translateY=this.lgRect.height+c,d();break;case\"left\":i.translateY=c,i.translateX=this.lgRect.width+l,i.gridHeight=i.svgHeight-h-12,i.gridWidth=i.svgWidth-this.lgRect.width-l;break;case\"right\":i.translateY=c,i.translateX=l,i.gridHeight=i.svgHeight-h-12,i.gridWidth=i.svgWidth-this.lgRect.width-l-5;break;default:throw new Error(\"Legend position not supported\")}this.dimGrid.setGridXPosForDualYAxis(s,a),new q(this.ctx).setYAxisXPosition(a,s)}},{key:\"setDimensionsForNonAxisCharts\",value:function(){var t=this.w,e=t.globals,i=t.config,a=0;t.config.legend.show&&!t.config.legend.floating&&(a=20);var s=\"pie\"===i.chart.type||\"polarArea\"===i.chart.type||\"donut\"===i.chart.type?\"pie\":\"radialBar\",r=i.plotOptions[s].offsetY,o=i.plotOptions[s].offsetX;if(!i.legend.show||i.legend.floating)return e.gridHeight=e.svgHeight-i.grid.padding.left+i.grid.padding.right,e.gridWidth=e.gridHeight,e.translateY=r,void(e.translateX=o+(e.svgWidth-e.gridWidth)/2);switch(i.legend.position){case\"bottom\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=r-10,e.translateX=o+(e.svgWidth-e.gridWidth)/2;break;case\"top\":e.gridHeight=e.svgHeight-this.lgRect.height-e.goldenPadding,e.gridWidth=e.svgWidth,e.translateY=this.lgRect.height+r+10,e.translateX=o+(e.svgWidth-e.gridWidth)/2;break;case\"left\":e.gridWidth=e.svgWidth-this.lgRect.width-a,e.gridHeight=\"auto\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=o+this.lgRect.width+a;break;case\"right\":e.gridWidth=e.svgWidth-this.lgRect.width-a-5,e.gridHeight=\"auto\"!==i.chart.height?e.svgHeight:e.gridWidth,e.translateY=r,e.translateX=o+10;break;default:throw new Error(\"Legend position not supported\")}}},{key:\"conditionalChecksForAxisCoords\",value:function(t,e,i){var a=this.w,s=a.globals.hasGroups?2:1,r=i.height+t.height+e.height,o=a.globals.isMultiLineX?1.2:a.globals.LINE_HEIGHT_RATIO,n=a.globals.rotateXLabels?22:10,l=a.globals.rotateXLabels&&\"bottom\"===a.config.legend.position?10:0;this.xAxisHeight=r*o+s*n+l,this.xAxisWidth=t.width,this.xAxisHeight-e.height>a.config.xaxis.labels.maxHeight&&(this.xAxisHeight=a.config.xaxis.labels.maxHeight),a.config.xaxis.labels.minHeight&&this.xAxisHeight<a.config.xaxis.labels.minHeight&&(this.xAxisHeight=a.config.xaxis.labels.minHeight),a.config.xaxis.floating&&(this.xAxisHeight=0);var h=0,c=0;a.config.yaxis.forEach((function(t){h+=t.labels.minWidth,c+=t.labels.maxWidth})),this.yAxisWidth<h&&(this.yAxisWidth=h),this.yAxisWidth>c&&(this.yAxisWidth=c)}}]),t}(),nt=function(){function t(e){a(this,t),this.w=e.w,this.lgCtx=e}return r(t,[{key:\"getLegendStyles\",value:function(){var t=document.createElement(\"style\");t.setAttribute(\"type\",\"text/css\");var e=document.createTextNode(\"\\t\\n \\t\\n .apexcharts-legend {\\t\\n display: flex;\\t\\n overflow: auto;\\t\\n padding: 0 10px;\\t\\n }\\t\\n .apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\\t\\n flex-wrap: wrap\\t\\n }\\t\\n .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n flex-direction: column;\\t\\n bottom: 0;\\t\\n }\\t\\n .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\t\\n justify-content: flex-start;\\t\\n }\\t\\n .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\\t\\n justify-content: center; \\t\\n }\\t\\n .apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {\\t\\n justify-content: flex-end;\\t\\n }\\t\\n .apexcharts-legend-series {\\t\\n cursor: pointer;\\t\\n line-height: normal;\\t\\n }\\t\\n .apexcharts-legend.apx-legend-position-bottom .apexcharts-legend-series, .apexcharts-legend.apx-legend-position-top .apexcharts-legend-series{\\t\\n display: flex;\\t\\n align-items: center;\\t\\n }\\t\\n .apexcharts-legend-text {\\t\\n position: relative;\\t\\n font-size: 14px;\\t\\n }\\t\\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\\t\\n pointer-events: none;\\t\\n }\\t\\n .apexcharts-legend-marker {\\t\\n position: relative;\\t\\n display: inline-block;\\t\\n cursor: pointer;\\t\\n margin-right: 3px;\\t\\n border-style: solid;\\n }\\t\\n \\t\\n .apexcharts-legend.apexcharts-align-right .apexcharts-legend-series, .apexcharts-legend.apexcharts-align-left .apexcharts-legend-series{\\t\\n display: inline-block;\\t\\n }\\t\\n .apexcharts-legend-series.apexcharts-no-click {\\t\\n cursor: auto;\\t\\n }\\t\\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\t\\n display: none !important;\\t\\n }\\t\\n .apexcharts-inactive-legend {\\t\\n opacity: 0.45;\\t\\n }\");return t.appendChild(e),t}},{key:\"getLegendBBox\",value:function(){var t=this.w.globals.dom.baseEl.querySelector(\".apexcharts-legend\").getBoundingClientRect(),e=t.width;return{clwh:t.height,clww:e}}},{key:\"appendToForeignObject\",value:function(){var t=this.w.globals;t.dom.elLegendForeign=document.createElementNS(t.SVGNS,\"foreignObject\");var e=t.dom.elLegendForeign;e.setAttribute(\"x\",0),e.setAttribute(\"y\",0),e.setAttribute(\"width\",t.svgWidth),e.setAttribute(\"height\",t.svgHeight),t.dom.elLegendWrap.setAttribute(\"xmlns\",\"http://www.w3.org/1999/xhtml\"),e.appendChild(t.dom.elLegendWrap),e.appendChild(this.getLegendStyles()),t.dom.Paper.node.insertBefore(e,t.dom.elGraphical.node)}},{key:\"toggleDataSeries\",value:function(t,e){var i=this,a=this.w;if(a.globals.axisCharts||\"radialBar\"===a.config.chart.type){a.globals.resized=!0;var s=null,r=null;if(a.globals.risingSeries=[],a.globals.axisCharts?(s=a.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"']\")),r=parseInt(s.getAttribute(\"data:realIndex\"),10)):(s=a.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(t+1,\"']\")),r=parseInt(s.getAttribute(\"rel\"),10)-1),e)[{cs:a.globals.collapsedSeries,csi:a.globals.collapsedSeriesIndices},{cs:a.globals.ancillaryCollapsedSeries,csi:a.globals.ancillaryCollapsedSeriesIndices}].forEach((function(t){i.riseCollapsedSeries(t.cs,t.csi,r)}));else this.hideSeries({seriesEl:s,realIndex:r})}else{var o=a.globals.dom.Paper.select(\" .apexcharts-series[rel='\".concat(t+1,\"'] path\")),n=a.config.chart.type;if(\"pie\"===n||\"polarArea\"===n||\"donut\"===n){var l=a.config.plotOptions.pie.donut.labels;new m(this.lgCtx.ctx).pathMouseDown(o.members[0],null),this.lgCtx.ctx.pie.printDataLabelsInner(o.members[0].node,l)}o.fire(\"click\")}}},{key:\"hideSeries\",value:function(t){var e=t.seriesEl,i=t.realIndex,a=this.w,s=x.clone(a.config.series);if(a.globals.axisCharts){var r=!1;if(a.config.yaxis[i]&&a.config.yaxis[i].show&&a.config.yaxis[i].showAlways&&(r=!0,a.globals.ancillaryCollapsedSeriesIndices.indexOf(i)<0&&(a.globals.ancillaryCollapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\"-\")[1]}),a.globals.ancillaryCollapsedSeriesIndices.push(i))),!r){a.globals.collapsedSeries.push({index:i,data:s[i].data.slice(),type:e.parentNode.className.baseVal.split(\"-\")[1]}),a.globals.collapsedSeriesIndices.push(i);var o=a.globals.risingSeries.indexOf(i);a.globals.risingSeries.splice(o,1)}}else a.globals.collapsedSeries.push({index:i,data:s[i]}),a.globals.collapsedSeriesIndices.push(i);for(var n=e.childNodes,l=0;l<n.length;l++)n[l].classList.contains(\"apexcharts-series-markers-wrap\")&&(n[l].classList.contains(\"apexcharts-hide\")?n[l].classList.remove(\"apexcharts-hide\"):n[l].classList.add(\"apexcharts-hide\"));a.globals.allSeriesCollapsed=a.globals.collapsedSeries.length===a.config.series.length,s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}},{key:\"riseCollapsedSeries\",value:function(t,e,i){var a=this.w,s=x.clone(a.config.series);if(t.length>0){for(var r=0;r<t.length;r++)t[r].index===i&&(a.globals.axisCharts?(s[i].data=t[r].data.slice(),t.splice(r,1),e.splice(r,1),a.globals.risingSeries.push(i)):(s[i]=t[r].data,t.splice(r,1),e.splice(r,1),a.globals.risingSeries.push(i)));s=this._getSeriesBasedOnCollapsedState(s),this.lgCtx.ctx.updateHelpers._updateSeries(s,a.config.chart.animations.dynamicAnimation.enabled)}}},{key:\"_getSeriesBasedOnCollapsedState\",value:function(t){var e=this.w;return e.globals.axisCharts?t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a].data=[])})):t.forEach((function(i,a){e.globals.collapsedSeriesIndices.indexOf(a)>-1&&(t[a]=0)})),t}}]),t}(),lt=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.onLegendClick=this.onLegendClick.bind(this),this.onLegendHovered=this.onLegendHovered.bind(this),this.isBarsDistributed=\"bar\"===this.w.config.chart.type&&this.w.config.plotOptions.bar.distributed&&1===this.w.config.series.length,this.legendHelpers=new nt(this)}return r(t,[{key:\"init\",value:function(){var t=this.w,e=t.globals,i=t.config;if((i.legend.showForSingleSeries&&1===e.series.length||this.isBarsDistributed||e.series.length>1||!e.axisCharts)&&i.legend.show){for(;e.dom.elLegendWrap.firstChild;)e.dom.elLegendWrap.removeChild(e.dom.elLegendWrap.firstChild);this.drawLegends(),x.isIE11()?document.getElementsByTagName(\"head\")[0].appendChild(this.legendHelpers.getLegendStyles()):this.legendHelpers.appendToForeignObject(),\"bottom\"===i.legend.position||\"top\"===i.legend.position?this.legendAlignHorizontal():\"right\"!==i.legend.position&&\"left\"!==i.legend.position||this.legendAlignVertical()}}},{key:\"drawLegends\",value:function(){var t=this,e=this.w,i=e.config.legend.fontFamily,a=e.globals.seriesNames,s=e.globals.colors.slice();if(\"heatmap\"===e.config.chart.type){var r=e.config.plotOptions.heatmap.colorScale.ranges;a=r.map((function(t){return t.name?t.name:t.from+\" - \"+t.to})),s=r.map((function(t){return t.color}))}else this.isBarsDistributed&&(a=e.globals.labels.slice());e.config.legend.customLegendItems.length&&(a=e.config.legend.customLegendItems);for(var o=e.globals.legendFormatter,n=e.config.legend.inverseOrder,l=n?a.length-1:0;n?l>=0:l<=a.length-1;n?l--:l++){var h=o(a[l],{seriesIndex:l,w:e}),c=!1,d=!1;if(e.globals.collapsedSeries.length>0)for(var g=0;g<e.globals.collapsedSeries.length;g++)e.globals.collapsedSeries[g].index===l&&(c=!0);if(e.globals.ancillaryCollapsedSeriesIndices.length>0)for(var u=0;u<e.globals.ancillaryCollapsedSeriesIndices.length;u++)e.globals.ancillaryCollapsedSeriesIndices[u]===l&&(d=!0);var f=document.createElement(\"span\");f.classList.add(\"apexcharts-legend-marker\");var p=e.config.legend.markers.offsetX,b=e.config.legend.markers.offsetY,v=e.config.legend.markers.height,w=e.config.legend.markers.width,k=e.config.legend.markers.strokeWidth,A=e.config.legend.markers.strokeColor,S=e.config.legend.markers.radius,C=f.style;C.background=s[l],C.color=s[l],C.setProperty(\"background\",s[l],\"important\"),e.config.legend.markers.fillColors&&e.config.legend.markers.fillColors[l]&&(C.background=e.config.legend.markers.fillColors[l]),void 0!==e.globals.seriesColors[l]&&(C.background=e.globals.seriesColors[l],C.color=e.globals.seriesColors[l]),C.height=Array.isArray(v)?parseFloat(v[l])+\"px\":parseFloat(v)+\"px\",C.width=Array.isArray(w)?parseFloat(w[l])+\"px\":parseFloat(w)+\"px\",C.left=(Array.isArray(p)?parseFloat(p[l]):parseFloat(p))+\"px\",C.top=(Array.isArray(b)?parseFloat(b[l]):parseFloat(b))+\"px\",C.borderWidth=Array.isArray(k)?k[l]:k,C.borderColor=Array.isArray(A)?A[l]:A,C.borderRadius=Array.isArray(S)?parseFloat(S[l])+\"px\":parseFloat(S)+\"px\",e.config.legend.markers.customHTML&&(Array.isArray(e.config.legend.markers.customHTML)?e.config.legend.markers.customHTML[l]&&(f.innerHTML=e.config.legend.markers.customHTML[l]()):f.innerHTML=e.config.legend.markers.customHTML()),m.setAttrs(f,{rel:l+1,\"data:collapsed\":c||d}),(c||d)&&f.classList.add(\"apexcharts-inactive-legend\");var L=document.createElement(\"div\"),P=document.createElement(\"span\");P.classList.add(\"apexcharts-legend-text\"),P.innerHTML=Array.isArray(h)?h.join(\" \"):h;var T=e.config.legend.labels.useSeriesColors?e.globals.colors[l]:e.config.legend.labels.colors;T||(T=e.config.chart.foreColor),P.style.color=T,P.style.fontSize=parseFloat(e.config.legend.fontSize)+\"px\",P.style.fontWeight=e.config.legend.fontWeight,P.style.fontFamily=i||e.config.chart.fontFamily,m.setAttrs(P,{rel:l+1,i:l,\"data:default-text\":encodeURIComponent(h),\"data:collapsed\":c||d}),L.appendChild(f),L.appendChild(P);var M=new y(this.ctx);if(!e.config.legend.showForZeroSeries)0===M.getSeriesTotalByIndex(l)&&M.seriesHaveSameValues(l)&&!M.isSeriesNull(l)&&-1===e.globals.collapsedSeriesIndices.indexOf(l)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(l)&&L.classList.add(\"apexcharts-hidden-zero-series\");e.config.legend.showForNullSeries||M.isSeriesNull(l)&&-1===e.globals.collapsedSeriesIndices.indexOf(l)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(l)&&L.classList.add(\"apexcharts-hidden-null-series\"),e.globals.dom.elLegendWrap.appendChild(L),e.globals.dom.elLegendWrap.classList.add(\"apexcharts-align-\".concat(e.config.legend.horizontalAlign)),e.globals.dom.elLegendWrap.classList.add(\"apx-legend-position-\"+e.config.legend.position),L.classList.add(\"apexcharts-legend-series\"),L.style.margin=\"\".concat(e.config.legend.itemMargin.vertical,\"px \").concat(e.config.legend.itemMargin.horizontal,\"px\"),e.globals.dom.elLegendWrap.style.width=e.config.legend.width?e.config.legend.width+\"px\":\"\",e.globals.dom.elLegendWrap.style.height=e.config.legend.height?e.config.legend.height+\"px\":\"\",m.setAttrs(L,{rel:l+1,seriesName:x.escapeString(a[l]),\"data:collapsed\":c||d}),(c||d)&&L.classList.add(\"apexcharts-inactive-legend\"),e.config.legend.onItemClick.toggleDataSeries||L.classList.add(\"apexcharts-no-click\")}e.globals.dom.elWrap.addEventListener(\"click\",t.onLegendClick,!0),e.config.legend.onItemHover.highlightDataSeries&&0===e.config.legend.customLegendItems.length&&(e.globals.dom.elWrap.addEventListener(\"mousemove\",t.onLegendHovered,!0),e.globals.dom.elWrap.addEventListener(\"mouseout\",t.onLegendHovered,!0))}},{key:\"setLegendWrapXY\",value:function(t,e){var i=this.w,a=i.globals.dom.baseEl.querySelector(\".apexcharts-legend\"),s=a.getBoundingClientRect(),r=0,o=0;if(\"bottom\"===i.config.legend.position)o+=i.globals.svgHeight-s.height/2;else if(\"top\"===i.config.legend.position){var n=new ot(this.ctx),l=n.dimHelpers.getTitleSubtitleCoords(\"title\").height,h=n.dimHelpers.getTitleSubtitleCoords(\"subtitle\").height;o=o+(l>0?l-10:0)+(h>0?h-10:0)}a.style.position=\"absolute\",r=r+t+i.config.legend.offsetX,o=o+e+i.config.legend.offsetY,a.style.left=r+\"px\",a.style.top=o+\"px\",\"bottom\"===i.config.legend.position?(a.style.top=\"auto\",a.style.bottom=5-i.config.legend.offsetY+\"px\"):\"right\"===i.config.legend.position&&(a.style.left=\"auto\",a.style.right=25+i.config.legend.offsetX+\"px\");[\"width\",\"height\"].forEach((function(t){a.style[t]&&(a.style[t]=parseInt(i.config.legend[t],10)+\"px\")}))}},{key:\"legendAlignHorizontal\",value:function(){var t=this.w;t.globals.dom.baseEl.querySelector(\".apexcharts-legend\").style.right=0;var e=this.legendHelpers.getLegendBBox(),i=new ot(this.ctx),a=i.dimHelpers.getTitleSubtitleCoords(\"title\"),s=i.dimHelpers.getTitleSubtitleCoords(\"subtitle\"),r=0;\"bottom\"===t.config.legend.position?r=-e.clwh/1.8:\"top\"===t.config.legend.position&&(r=a.height+s.height+t.config.title.margin+t.config.subtitle.margin-10),this.setLegendWrapXY(20,r)}},{key:\"legendAlignVertical\",value:function(){var t=this.w,e=this.legendHelpers.getLegendBBox(),i=0;\"left\"===t.config.legend.position&&(i=20),\"right\"===t.config.legend.position&&(i=t.globals.svgWidth-e.clww-10),this.setLegendWrapXY(i,20)}},{key:\"onLegendHovered\",value:function(t){var e=this.w,i=t.target.classList.contains(\"apexcharts-legend-text\")||t.target.classList.contains(\"apexcharts-legend-marker\");if(\"heatmap\"===e.config.chart.type||this.isBarsDistributed){if(i){var a=parseInt(t.target.getAttribute(\"rel\"),10)-1;this.ctx.events.fireEvent(\"legendHover\",[this.ctx,a,this.w]),new N(this.ctx).highlightRangeInSeries(t,t.target)}}else!t.target.classList.contains(\"apexcharts-inactive-legend\")&&i&&new N(this.ctx).toggleSeriesOnHover(t,t.target)}},{key:\"onLegendClick\",value:function(t){var e=this.w;if(!e.config.legend.customLegendItems.length&&(t.target.classList.contains(\"apexcharts-legend-text\")||t.target.classList.contains(\"apexcharts-legend-marker\"))){var i=parseInt(t.target.getAttribute(\"rel\"),10)-1,a=\"true\"===t.target.getAttribute(\"data:collapsed\"),s=this.w.config.chart.events.legendClick;\"function\"==typeof s&&s(this.ctx,i,this.w),this.ctx.events.fireEvent(\"legendClick\",[this.ctx,i,this.w]);var r=this.w.config.legend.markers.onClick;\"function\"==typeof r&&t.target.classList.contains(\"apexcharts-legend-marker\")&&(r(this.ctx,i,this.w),this.ctx.events.fireEvent(\"legendMarkerClick\",[this.ctx,i,this.w])),\"treemap\"!==e.config.chart.type&&\"heatmap\"!==e.config.chart.type&&!this.isBarsDistributed&&e.config.legend.onItemClick.toggleDataSeries&&this.legendHelpers.toggleDataSeries(i,a)}}}]),t}(),ht=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.ev=this.w.config.chart.events,this.selectedClass=\"apexcharts-selected\",this.localeValues=this.w.globals.locale.toolbar,this.minX=i.globals.minX,this.maxX=i.globals.maxX}return r(t,[{key:\"createToolbar\",value:function(){var t=this,e=this.w,i=function(){return document.createElement(\"div\")},a=i();if(a.setAttribute(\"class\",\"apexcharts-toolbar\"),a.style.top=e.config.chart.toolbar.offsetY+\"px\",a.style.right=3-e.config.chart.toolbar.offsetX+\"px\",e.globals.dom.elWrap.appendChild(a),this.elZoom=i(),this.elZoomIn=i(),this.elZoomOut=i(),this.elPan=i(),this.elSelection=i(),this.elZoomReset=i(),this.elMenuIcon=i(),this.elMenu=i(),this.elCustomIcons=[],this.t=e.config.chart.toolbar.tools,Array.isArray(this.t.customIcons))for(var s=0;s<this.t.customIcons.length;s++)this.elCustomIcons.push(i());var r=[],o=function(i,a,s){var o=i.toLowerCase();t.t[o]&&e.config.chart.zoom.enabled&&r.push({el:a,icon:\"string\"==typeof t.t[o]?t.t[o]:s,title:t.localeValues[i],class:\"apexcharts-\".concat(o,\"-icon\")})};o(\"zoomIn\",this.elZoomIn,'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n <path d=\"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/>\\n</svg>\\n'),o(\"zoomOut\",this.elZoomOut,'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n <path d=\"M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/>\\n</svg>\\n');var n=function(i){t.t[i]&&e.config.chart[i].enabled&&r.push({el:\"zoom\"===i?t.elZoom:t.elSelection,icon:\"string\"==typeof t.t[i]?t.t[i]:\"zoom\"===i?'<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\\n <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/>\\n <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\\n <path d=\"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\"/>\\n</svg>':'<svg fill=\"#6E8192\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n <path d=\"M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2z\"/>\\n</svg>',title:t.localeValues[\"zoom\"===i?\"selectionZoom\":\"selection\"],class:e.globals.isTouchDevice?\"apexcharts-element-hidden\":\"apexcharts-\".concat(i,\"-icon\")})};n(\"zoom\"),n(\"selection\"),this.t.pan&&e.config.chart.zoom.enabled&&r.push({el:this.elPan,icon:\"string\"==typeof this.t.pan?this.t.pan:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\\n <defs>\\n <path d=\"M0 0h24v24H0z\" id=\"a\"/>\\n </defs>\\n <clipPath id=\"b\">\\n <use overflow=\"visible\" xlink:href=\"#a\"/>\\n </clipPath>\\n <path clip-path=\"url(#b)\" d=\"M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5z\"/>\\n</svg>',title:this.localeValues.pan,class:e.globals.isTouchDevice?\"apexcharts-element-hidden\":\"apexcharts-pan-icon\"}),o(\"reset\",this.elZoomReset,'<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\">\\n <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"/>\\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\\n</svg>'),this.t.download&&r.push({el:this.elMenuIcon,icon:\"string\"==typeof this.t.download?this.t.download:'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\"/></svg>',title:this.localeValues.menu,class:\"apexcharts-menu-icon\"});for(var l=0;l<this.elCustomIcons.length;l++)r.push({el:this.elCustomIcons[l],icon:this.t.customIcons[l].icon,title:this.t.customIcons[l].title,index:this.t.customIcons[l].index,class:\"apexcharts-toolbar-custom-icon \"+this.t.customIcons[l].class});r.forEach((function(t,e){t.index&&x.moveIndexInArray(r,e,t.index)}));for(var h=0;h<r.length;h++)m.setAttrs(r[h].el,{class:r[h].class,title:r[h].title}),r[h].el.innerHTML=r[h].icon,a.appendChild(r[h].el);this._createHamburgerMenu(a),e.globals.zoomEnabled?this.elZoom.classList.add(this.selectedClass):e.globals.panEnabled?this.elPan.classList.add(this.selectedClass):e.globals.selectionEnabled&&this.elSelection.classList.add(this.selectedClass),this.addToolbarEventListeners()}},{key:\"_createHamburgerMenu\",value:function(t){this.elMenuItems=[],t.appendChild(this.elMenu),m.setAttrs(this.elMenu,{class:\"apexcharts-menu\"});var e=[{name:\"exportSVG\",title:this.localeValues.exportToSVG},{name:\"exportPNG\",title:this.localeValues.exportToPNG},{name:\"exportCSV\",title:this.localeValues.exportToCSV}];this.w.globals.allSeriesHasEqualX||e.splice(2,1);for(var i=0;i<e.length;i++)this.elMenuItems.push(document.createElement(\"div\")),this.elMenuItems[i].innerHTML=e[i].title,m.setAttrs(this.elMenuItems[i],{class:\"apexcharts-menu-item \".concat(e[i].name),title:e[i].title}),this.elMenu.appendChild(this.elMenuItems[i])}},{key:\"addToolbarEventListeners\",value:function(){var t=this;this.elZoomReset.addEventListener(\"click\",this.handleZoomReset.bind(this)),this.elSelection.addEventListener(\"click\",this.toggleZoomSelection.bind(this,\"selection\")),this.elZoom.addEventListener(\"click\",this.toggleZoomSelection.bind(this,\"zoom\")),this.elZoomIn.addEventListener(\"click\",this.handleZoomIn.bind(this)),this.elZoomOut.addEventListener(\"click\",this.handleZoomOut.bind(this)),this.elPan.addEventListener(\"click\",this.togglePanning.bind(this)),this.elMenuIcon.addEventListener(\"click\",this.toggleMenu.bind(this)),this.elMenuItems.forEach((function(e){e.classList.contains(\"exportSVG\")?e.addEventListener(\"click\",t.handleDownload.bind(t,\"svg\")):e.classList.contains(\"exportPNG\")?e.addEventListener(\"click\",t.handleDownload.bind(t,\"png\")):e.classList.contains(\"exportCSV\")&&e.addEventListener(\"click\",t.handleDownload.bind(t,\"csv\"))}));for(var e=0;e<this.t.customIcons.length;e++)this.elCustomIcons[e].addEventListener(\"click\",this.t.customIcons[e].click.bind(this,this.ctx,this.ctx.w))}},{key:\"toggleZoomSelection\",value:function(t){this.ctx.getSyncedCharts().forEach((function(e){e.ctx.toolbar.toggleOtherControls();var i=\"selection\"===t?e.ctx.toolbar.elSelection:e.ctx.toolbar.elZoom,a=\"selection\"===t?\"selectionEnabled\":\"zoomEnabled\";e.w.globals[a]=!e.w.globals[a],i.classList.contains(e.ctx.toolbar.selectedClass)?i.classList.remove(e.ctx.toolbar.selectedClass):i.classList.add(e.ctx.toolbar.selectedClass)}))}},{key:\"getToolbarIconsReference\",value:function(){var t=this.w;this.elZoom||(this.elZoom=t.globals.dom.baseEl.querySelector(\".apexcharts-zoom-icon\")),this.elPan||(this.elPan=t.globals.dom.baseEl.querySelector(\".apexcharts-pan-icon\")),this.elSelection||(this.elSelection=t.globals.dom.baseEl.querySelector(\".apexcharts-selection-icon\"))}},{key:\"enableZoomPanFromToolbar\",value:function(t){this.toggleOtherControls(),\"pan\"===t?this.w.globals.panEnabled=!0:this.w.globals.zoomEnabled=!0;var e=\"pan\"===t?this.elPan:this.elZoom,i=\"pan\"===t?this.elZoom:this.elPan;e&&e.classList.add(this.selectedClass),i&&i.classList.remove(this.selectedClass)}},{key:\"togglePanning\",value:function(){this.ctx.getSyncedCharts().forEach((function(t){t.ctx.toolbar.toggleOtherControls(),t.w.globals.panEnabled=!t.w.globals.panEnabled,t.ctx.toolbar.elPan.classList.contains(t.ctx.toolbar.selectedClass)?t.ctx.toolbar.elPan.classList.remove(t.ctx.toolbar.selectedClass):t.ctx.toolbar.elPan.classList.add(t.ctx.toolbar.selectedClass)}))}},{key:\"toggleOtherControls\",value:function(){var t=this,e=this.w;e.globals.panEnabled=!1,e.globals.zoomEnabled=!1,e.globals.selectionEnabled=!1,this.getToolbarIconsReference(),[this.elPan,this.elSelection,this.elZoom].forEach((function(e){e&&e.classList.remove(t.selectedClass)}))}},{key:\"handleZoomIn\",value:function(){var t=this.w;t.globals.isRangeBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY);var e=(this.minX+this.maxX)/2,i=(this.minX+e)/2,a=(this.maxX+e)/2,s=this._getNewMinXMaxX(i,a);t.globals.disableZoomIn||this.zoomUpdateOptions(s.minX,s.maxX)}},{key:\"handleZoomOut\",value:function(){var t=this.w;if(t.globals.isRangeBar&&(this.minX=t.globals.minY,this.maxX=t.globals.maxY),!(\"datetime\"===t.config.xaxis.type&&new Date(this.minX).getUTCFullYear()<1e3)){var e=(this.minX+this.maxX)/2,i=this.minX-(e-this.minX),a=this.maxX-(e-this.maxX),s=this._getNewMinXMaxX(i,a);t.globals.disableZoomOut||this.zoomUpdateOptions(s.minX,s.maxX)}}},{key:\"_getNewMinXMaxX\",value:function(t,e){var i=this.w.config.xaxis.convertedCatToNumeric;return{minX:i?Math.floor(t):t,maxX:i?Math.floor(e):e}}},{key:\"zoomUpdateOptions\",value:function(t,e){var i=this.w;if(void 0!==t||void 0!==e){if(!(i.config.xaxis.convertedCatToNumeric&&(t<1&&(t=1,e=i.globals.dataPoints),e-t<2))){var a={min:t,max:e},s=this.getBeforeZoomRange(a);s&&(a=s.xaxis);var r={xaxis:a},o=x.clone(i.globals.initialConfig.yaxis);if(i.config.chart.zoom.autoScaleYaxis)o=new _(this.ctx).autoScaleY(this.ctx,o,{xaxis:a});i.config.chart.group||(r.yaxis=o),this.w.globals.zoomed=!0,this.ctx.updateHelpers._updateOptions(r,!1,this.w.config.chart.animations.dynamicAnimation.enabled),this.zoomCallback(a,o)}}else this.handleZoomReset()}},{key:\"zoomCallback\",value:function(t,e){\"function\"==typeof this.ev.zoomed&&this.ev.zoomed(this.ctx,{xaxis:t,yaxis:e})}},{key:\"getBeforeZoomRange\",value:function(t,e){var i=null;return\"function\"==typeof this.ev.beforeZoom&&(i=this.ev.beforeZoom(this,{xaxis:t,yaxis:e})),i}},{key:\"toggleMenu\",value:function(){var t=this;window.setTimeout((function(){t.elMenu.classList.contains(\"apexcharts-menu-open\")?t.elMenu.classList.remove(\"apexcharts-menu-open\"):t.elMenu.classList.add(\"apexcharts-menu-open\")}),0)}},{key:\"handleDownload\",value:function(t){var e=this.w,i=new V(this.ctx);switch(t){case\"svg\":i.exportToSVG(this.ctx);break;case\"png\":i.exportToPng(this.ctx);break;case\"csv\":i.exportToCSV({series:e.config.series,columnDelimiter:e.config.chart.toolbar.export.csv.columnDelimiter})}}},{key:\"handleZoomReset\",value:function(t){this.ctx.getSyncedCharts().forEach((function(t){var e=t.w;if(e.globals.lastXAxis.min=void 0,e.globals.lastXAxis.max=void 0,t.updateHelpers.revertDefaultAxisMinMax(),\"function\"==typeof e.config.chart.events.beforeResetZoom){var i=e.config.chart.events.beforeResetZoom(t,e);i&&t.updateHelpers.revertDefaultAxisMinMax(i)}\"function\"==typeof e.config.chart.events.zoomed&&t.ctx.toolbar.zoomCallback({min:e.config.xaxis.min,max:e.config.xaxis.max}),e.globals.zoomed=!1;var a=t.ctx.series.emptyCollapsedSeries(x.clone(e.globals.initialSeries));t.updateHelpers._updateSeries(a,e.config.chart.animations.dynamicAnimation.enabled)}))}},{key:\"destroy\",value:function(){this.elZoom=null,this.elZoomIn=null,this.elZoomOut=null,this.elPan=null,this.elSelection=null,this.elZoomReset=null,this.elMenuIcon=null}}]),t}(),ct=function(t){n(i,t);var e=d(i);function i(t){var s;return a(this,i),(s=e.call(this,t)).ctx=t,s.w=t.w,s.dragged=!1,s.graphics=new m(s.ctx),s.eventList=[\"mousedown\",\"mouseleave\",\"mousemove\",\"touchstart\",\"touchmove\",\"mouseup\",\"touchend\"],s.clientX=0,s.clientY=0,s.startX=0,s.endX=0,s.dragX=0,s.startY=0,s.endY=0,s.dragY=0,s.moveDirection=\"none\",s}return r(i,[{key:\"init\",value:function(t){var e=this,i=t.xyRatios,a=this.w,s=this;this.xyRatios=i,this.zoomRect=this.graphics.drawRect(0,0,0,0),this.selectionRect=this.graphics.drawRect(0,0,0,0),this.gridRect=a.globals.dom.baseEl.querySelector(\".apexcharts-grid\"),this.zoomRect.node.classList.add(\"apexcharts-zoom-rect\"),this.selectionRect.node.classList.add(\"apexcharts-selection-rect\"),a.globals.dom.elGraphical.add(this.zoomRect),a.globals.dom.elGraphical.add(this.selectionRect),\"x\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,minY:0,maxX:a.globals.gridWidth,maxY:a.globals.gridHeight}).on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")):\"y\"===a.config.chart.selection.type?this.slDraggableRect=this.selectionRect.draggable({minX:0,maxX:a.globals.gridWidth}).on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")):this.slDraggableRect=this.selectionRect.draggable().on(\"dragmove\",this.selectionDragging.bind(this,\"dragging\")),this.preselectedSelection(),this.hoverArea=a.globals.dom.baseEl.querySelector(\"\".concat(a.globals.chartClass,\" .apexcharts-svg\")),this.hoverArea.classList.add(\"apexcharts-zoomable\"),this.eventList.forEach((function(t){e.hoverArea.addEventListener(t,s.svgMouseEvents.bind(s,i),{capture:!1,passive:!0})}))}},{key:\"destroy\",value:function(){this.slDraggableRect&&(this.slDraggableRect.draggable(!1),this.slDraggableRect.off(),this.selectionRect.off()),this.selectionRect=null,this.zoomRect=null,this.gridRect=null}},{key:\"svgMouseEvents\",value:function(t,e){var i=this.w,a=this,s=this.ctx.toolbar,r=i.globals.zoomEnabled?i.config.chart.zoom.type:i.config.chart.selection.type,o=i.config.chart.toolbar.autoSelected;if(e.shiftKey?(this.shiftWasPressed=!0,s.enableZoomPanFromToolbar(\"pan\"===o?\"zoom\":\"pan\")):this.shiftWasPressed&&(s.enableZoomPanFromToolbar(o),this.shiftWasPressed=!1),e.target){var n,l=e.target.classList;if(e.target.parentNode&&null!==e.target.parentNode&&(n=e.target.parentNode.classList),!(l.contains(\"apexcharts-selection-rect\")||l.contains(\"apexcharts-legend-marker\")||l.contains(\"apexcharts-legend-text\")||n&&n.contains(\"apexcharts-toolbar\"))){if(a.clientX=\"touchmove\"===e.type||\"touchstart\"===e.type?e.touches[0].clientX:\"touchend\"===e.type?e.changedTouches[0].clientX:e.clientX,a.clientY=\"touchmove\"===e.type||\"touchstart\"===e.type?e.touches[0].clientY:\"touchend\"===e.type?e.changedTouches[0].clientY:e.clientY,\"mousedown\"===e.type&&1===e.which){var h=a.gridRect.getBoundingClientRect();a.startX=a.clientX-h.left,a.startY=a.clientY-h.top,a.dragged=!1,a.w.globals.mousedown=!0}if((\"mousemove\"===e.type&&1===e.which||\"touchmove\"===e.type)&&(a.dragged=!0,i.globals.panEnabled?(i.globals.selection=null,a.w.globals.mousedown&&a.panDragging({context:a,zoomtype:r,xyRatios:t})):(a.w.globals.mousedown&&i.globals.zoomEnabled||a.w.globals.mousedown&&i.globals.selectionEnabled)&&(a.selection=a.selectionDrawing({context:a,zoomtype:r}))),\"mouseup\"===e.type||\"touchend\"===e.type||\"mouseleave\"===e.type){var c=a.gridRect.getBoundingClientRect();a.w.globals.mousedown&&(a.endX=a.clientX-c.left,a.endY=a.clientY-c.top,a.dragX=Math.abs(a.endX-a.startX),a.dragY=Math.abs(a.endY-a.startY),(i.globals.zoomEnabled||i.globals.selectionEnabled)&&a.selectionDrawn({context:a,zoomtype:r}),i.globals.panEnabled&&i.config.xaxis.convertedCatToNumeric&&a.delayedPanScrolled()),i.globals.zoomEnabled&&a.hideSelectionRect(this.selectionRect),a.dragged=!1,a.w.globals.mousedown=!1}this.makeSelectionRectDraggable()}}}},{key:\"makeSelectionRectDraggable\",value:function(){var t=this.w;if(this.selectionRect){var e=this.selectionRect.node.getBoundingClientRect();e.width>0&&e.height>0&&this.slDraggableRect.selectize({points:\"l, r\",pointSize:8,pointType:\"rect\"}).resize({constraint:{minX:0,minY:0,maxX:t.globals.gridWidth,maxY:t.globals.gridHeight}}).on(\"resizing\",this.selectionDragging.bind(this,\"resizing\"))}}},{key:\"preselectedSelection\",value:function(){var t=this.w,e=this.xyRatios;if(!t.globals.zoomEnabled)if(void 0!==t.globals.selection&&null!==t.globals.selection)this.drawSelectionRect(t.globals.selection);else if(void 0!==t.config.chart.selection.xaxis.min&&void 0!==t.config.chart.selection.xaxis.max){var i=(t.config.chart.selection.xaxis.min-t.globals.minX)/e.xRatio,a={x:i,y:0,width:t.globals.gridWidth-(t.globals.maxX-t.config.chart.selection.xaxis.max)/e.xRatio-i,height:t.globals.gridHeight,translateX:0,translateY:0,selectionEnabled:!0};this.drawSelectionRect(a),this.makeSelectionRectDraggable(),\"function\"==typeof t.config.chart.events.selection&&t.config.chart.events.selection(this.ctx,{xaxis:{min:t.config.chart.selection.xaxis.min,max:t.config.chart.selection.xaxis.max},yaxis:{}})}}},{key:\"drawSelectionRect\",value:function(t){var e=t.x,i=t.y,a=t.width,s=t.height,r=t.translateX,o=void 0===r?0:r,n=t.translateY,l=void 0===n?0:n,h=this.w,c=this.zoomRect,d=this.selectionRect;if(this.dragged||null!==h.globals.selection){var g={transform:\"translate(\"+o+\", \"+l+\")\"};h.globals.zoomEnabled&&this.dragged&&(a<0&&(a=1),c.attr({x:e,y:i,width:a,height:s,fill:h.config.chart.zoom.zoomedArea.fill.color,\"fill-opacity\":h.config.chart.zoom.zoomedArea.fill.opacity,stroke:h.config.chart.zoom.zoomedArea.stroke.color,\"stroke-width\":h.config.chart.zoom.zoomedArea.stroke.width,\"stroke-opacity\":h.config.chart.zoom.zoomedArea.stroke.opacity}),m.setAttrs(c.node,g)),h.globals.selectionEnabled&&(d.attr({x:e,y:i,width:a>0?a:0,height:s>0?s:0,fill:h.config.chart.selection.fill.color,\"fill-opacity\":h.config.chart.selection.fill.opacity,stroke:h.config.chart.selection.stroke.color,\"stroke-width\":h.config.chart.selection.stroke.width,\"stroke-dasharray\":h.config.chart.selection.stroke.dashArray,\"stroke-opacity\":h.config.chart.selection.stroke.opacity}),m.setAttrs(d.node,g))}}},{key:\"hideSelectionRect\",value:function(t){t&&t.attr({x:0,y:0,width:0,height:0})}},{key:\"selectionDrawing\",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.gridRect.getBoundingClientRect(),o=s.startX-1,n=s.startY,l=!1,h=!1,c=s.clientX-r.left-o,d=s.clientY-r.top-n,g={};return Math.abs(c+o)>a.globals.gridWidth?c=a.globals.gridWidth-o:s.clientX-r.left<0&&(c=o),o>s.clientX-r.left&&(l=!0,c=Math.abs(c)),n>s.clientY-r.top&&(h=!0,d=Math.abs(d)),g=\"x\"===i?{x:l?o-c:o,y:0,width:c,height:a.globals.gridHeight}:\"y\"===i?{x:0,y:h?n-d:n,width:a.globals.gridWidth,height:d}:{x:l?o-c:o,y:h?n-d:n,width:c,height:d},s.drawSelectionRect(g),s.selectionDragging(\"resizing\"),g}},{key:\"selectionDragging\",value:function(t,e){var i=this,a=this.w,s=this.xyRatios,r=this.selectionRect,o=0;\"resizing\"===t&&(o=30);var n=function(t){return parseFloat(r.node.getAttribute(t))},l={x:n(\"x\"),y:n(\"y\"),width:n(\"width\"),height:n(\"height\")};a.globals.selection=l,\"function\"==typeof a.config.chart.events.selection&&a.globals.selectionEnabled&&(clearTimeout(this.w.globals.selectionResizeTimer),this.w.globals.selectionResizeTimer=window.setTimeout((function(){var t=i.gridRect.getBoundingClientRect(),e=r.node.getBoundingClientRect(),o={xaxis:{min:a.globals.xAxisScale.niceMin+(e.left-t.left)*s.xRatio,max:a.globals.xAxisScale.niceMin+(e.right-t.left)*s.xRatio},yaxis:{min:a.globals.yAxisScale[0].niceMin+(t.bottom-e.bottom)*s.yRatio[0],max:a.globals.yAxisScale[0].niceMax-(e.top-t.top)*s.yRatio[0]}};a.config.chart.events.selection(i.ctx,o),a.config.chart.brush.enabled&&void 0!==a.config.chart.events.brushScrolled&&a.config.chart.events.brushScrolled(i.ctx,o)}),o))}},{key:\"selectionDrawn\",value:function(t){var e=t.context,i=t.zoomtype,a=this.w,s=e,r=this.xyRatios,o=this.ctx.toolbar;if(s.startX>s.endX){var n=s.startX;s.startX=s.endX,s.endX=n}if(s.startY>s.endY){var l=s.startY;s.startY=s.endY,s.endY=l}var h=void 0,c=void 0;a.globals.isRangeBar?(h=a.globals.yAxisScale[0].niceMin+s.startX*r.invertedYRatio,c=a.globals.yAxisScale[0].niceMin+s.endX*r.invertedYRatio):(h=a.globals.xAxisScale.niceMin+s.startX*r.xRatio,c=a.globals.xAxisScale.niceMin+s.endX*r.xRatio);var d=[],g=[];if(a.config.yaxis.forEach((function(t,e){d.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.startY),g.push(a.globals.yAxisScale[e].niceMax-r.yRatio[e]*s.endY)})),s.dragged&&(s.dragX>10||s.dragY>10)&&h!==c)if(a.globals.zoomEnabled){var u=x.clone(a.globals.initialConfig.yaxis),f=x.clone(a.globals.initialConfig.xaxis);if(a.globals.zoomed=!0,a.config.xaxis.convertedCatToNumeric&&(h=Math.floor(h),c=Math.floor(c),h<1&&(h=1,c=a.globals.dataPoints),c-h<2&&(c=h+1)),\"xy\"!==i&&\"x\"!==i||(f={min:h,max:c}),\"xy\"!==i&&\"y\"!==i||u.forEach((function(t,e){u[e].min=g[e],u[e].max=d[e]})),a.config.chart.zoom.autoScaleYaxis){var p=new _(s.ctx);u=p.autoScaleY(s.ctx,u,{xaxis:f})}if(o){var b=o.getBeforeZoomRange(f,u);b&&(f=b.xaxis?b.xaxis:f,u=b.yaxis?b.yaxis:u)}var v={xaxis:f};a.config.chart.group||(v.yaxis=u),s.ctx.updateHelpers._updateOptions(v,!1,s.w.config.chart.animations.dynamicAnimation.enabled),\"function\"==typeof a.config.chart.events.zoomed&&o.zoomCallback(f,u)}else if(a.globals.selectionEnabled){var m,y=null;m={min:h,max:c},\"xy\"!==i&&\"y\"!==i||(y=x.clone(a.config.yaxis)).forEach((function(t,e){y[e].min=g[e],y[e].max=d[e]})),a.globals.selection=s.selection,\"function\"==typeof a.config.chart.events.selection&&a.config.chart.events.selection(s.ctx,{xaxis:m,yaxis:y})}}},{key:\"panDragging\",value:function(t){var e=t.context,i=this.w,a=e;if(void 0!==i.globals.lastClientPosition.x){var s=i.globals.lastClientPosition.x-a.clientX,r=i.globals.lastClientPosition.y-a.clientY;Math.abs(s)>Math.abs(r)&&s>0?this.moveDirection=\"left\":Math.abs(s)>Math.abs(r)&&s<0?this.moveDirection=\"right\":Math.abs(r)>Math.abs(s)&&r>0?this.moveDirection=\"up\":Math.abs(r)>Math.abs(s)&&r<0&&(this.moveDirection=\"down\")}i.globals.lastClientPosition={x:a.clientX,y:a.clientY};var o=i.globals.isRangeBar?i.globals.minY:i.globals.minX,n=i.globals.isRangeBar?i.globals.maxY:i.globals.maxX;i.config.xaxis.convertedCatToNumeric||a.panScrolled(o,n)}},{key:\"delayedPanScrolled\",value:function(){var t=this.w,e=t.globals.minX,i=t.globals.maxX,a=(t.globals.maxX-t.globals.minX)/2;\"left\"===this.moveDirection?(e=t.globals.minX+a,i=t.globals.maxX+a):\"right\"===this.moveDirection&&(e=t.globals.minX-a,i=t.globals.maxX-a),e=Math.floor(e),i=Math.floor(i),this.updateScrolledChart({xaxis:{min:e,max:i}},e,i)}},{key:\"panScrolled\",value:function(t,e){var i=this.w,a=this.xyRatios,s=x.clone(i.globals.initialConfig.yaxis),r=a.xRatio,o=i.globals.minX,n=i.globals.maxX;i.globals.isRangeBar&&(r=a.invertedYRatio,o=i.globals.minY,n=i.globals.maxY),\"left\"===this.moveDirection?(t=o+i.globals.gridWidth/15*r,e=n+i.globals.gridWidth/15*r):\"right\"===this.moveDirection&&(t=o-i.globals.gridWidth/15*r,e=n-i.globals.gridWidth/15*r),i.globals.isRangeBar||(t<i.globals.initialMinX||e>i.globals.initialMaxX)&&(t=o,e=n);var l={min:t,max:e};i.config.chart.zoom.autoScaleYaxis&&(s=new _(this.ctx).autoScaleY(this.ctx,s,{xaxis:l}));var h={xaxis:{min:t,max:e}};i.config.chart.group||(h.yaxis=s),this.updateScrolledChart(h,t,e)}},{key:\"updateScrolledChart\",value:function(t,e,i){var a=this.w;this.ctx.updateHelpers._updateOptions(t,!1,!1),\"function\"==typeof a.config.chart.events.scrolled&&a.config.chart.events.scrolled(this.ctx,{xaxis:{min:e,max:i}})}}]),i}(ht),dt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx}return r(t,[{key:\"getNearestValues\",value:function(t){var e=t.hoverArea,i=t.elGrid,a=t.clientX,s=t.clientY,r=this.w,o=i.getBoundingClientRect(),n=o.width,l=o.height,h=n/(r.globals.dataPoints-1),c=l/r.globals.dataPoints,d=this.hasBars();!r.globals.comboCharts&&!d||r.config.xaxis.convertedCatToNumeric||(h=n/r.globals.dataPoints);var g=a-o.left-r.globals.barPadForNumericAxis,u=s-o.top;g<0||u<0||g>n||u>l?(e.classList.remove(\"hovering-zoom\"),e.classList.remove(\"hovering-pan\")):r.globals.zoomEnabled?(e.classList.remove(\"hovering-pan\"),e.classList.add(\"hovering-zoom\")):r.globals.panEnabled&&(e.classList.remove(\"hovering-zoom\"),e.classList.add(\"hovering-pan\"));var f=Math.round(g/h),p=Math.floor(u/c);d&&!r.config.xaxis.convertedCatToNumeric&&(f=Math.ceil(g/h),f-=1);var b=null,v=null,m=[],y=[];if(r.globals.seriesXvalues.forEach((function(t){m.push([t[0]+1e-6].concat(t))})),r.globals.seriesYvalues.forEach((function(t){y.push([t[0]+1e-6].concat(t))})),m=m.map((function(t){return t.filter((function(t){return x.isNumber(t)}))})),y=y.map((function(t){return t.filter((function(t){return x.isNumber(t)}))})),r.globals.isXNumeric){var w=this.ttCtx.getElGrid().getBoundingClientRect(),k=g*(w.width/n),A=u*(w.height/l);b=(v=this.closestInMultiArray(k,A,m,y)).index,f=v.j,null!==b&&(m=r.globals.seriesXvalues[b],f=(v=this.closestInArray(k,m)).index)}return r.globals.capturedSeriesIndex=null===b?-1:b,(!f||f<1)&&(f=0),r.globals.isBarHorizontal?r.globals.capturedDataPointIndex=p:r.globals.capturedDataPointIndex=f,{capturedSeries:b,j:r.globals.isBarHorizontal?p:f,hoverX:g,hoverY:u}}},{key:\"closestInMultiArray\",value:function(t,e,i,a){var s=this.w,r=0,o=null,n=-1;s.globals.series.length>1?r=this.getFirstActiveXArray(i):o=0;var l=i[r][0],h=Math.abs(t-l);if(i.forEach((function(e){e.forEach((function(e,i){var a=Math.abs(t-e);a<h&&(h=a,n=i)}))})),-1!==n){var c=a[r][n],d=Math.abs(e-c);o=r,a.forEach((function(t,i){var a=Math.abs(e-t[n]);a<d&&(d=a,o=i)}))}return{index:o,j:n}}},{key:\"getFirstActiveXArray\",value:function(t){for(var e=this.w,i=0,a=t.map((function(t,e){return t.length>0?e:-1})),s=0;s<a.length;s++)if(-1!==a[s]&&-1===e.globals.collapsedSeriesIndices.indexOf(s)&&-1===e.globals.ancillaryCollapsedSeriesIndices.indexOf(s)){i=a[s];break}return i}},{key:\"closestInArray\",value:function(t,e){for(var i=e[0],a=null,s=Math.abs(t-i),r=0;r<e.length;r++){var o=Math.abs(t-e[r]);o<s&&(s=o,a=r)}return{index:a}}},{key:\"isXoverlap\",value:function(t){var e=[],i=this.w.globals.seriesX.filter((function(t){return void 0!==t[0]}));if(i.length>0)for(var a=0;a<i.length-1;a++)void 0!==i[a][t]&&void 0!==i[a+1][t]&&i[a][t]!==i[a+1][t]&&e.push(\"unEqual\");return 0===e.length}},{key:\"isInitialSeriesSameLen\",value:function(){for(var t=!0,e=this.w.globals.initialSeries,i=0;i<e.length-1;i++)if(e[i].data.length!==e[i+1].data.length){t=!1;break}return t}},{key:\"getBarsHeight\",value:function(t){return u(t).reduce((function(t,e){return t+e.getBBox().height}),0)}},{key:\"getElMarkers\",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(\" .apexcharts-series-markers\")}},{key:\"getAllMarkers\",value:function(){var t=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap\");(t=u(t)).sort((function(t,e){var i=Number(t.getAttribute(\"data:realIndex\")),a=Number(e.getAttribute(\"data:realIndex\"));return a<i?1:a>i?-1:0}));var e=[];return t.forEach((function(t){e.push(t.querySelector(\".apexcharts-marker\"))})),e}},{key:\"hasMarkers\",value:function(){return this.getElMarkers().length>0}},{key:\"getElBars\",value:function(){return this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-rangebar-series\")}},{key:\"hasBars\",value:function(){return this.getElBars().length>0}},{key:\"getHoverMarkerSize\",value:function(t){var e=this.w,i=e.config.markers.hover.size;return void 0===i&&(i=e.globals.markers.size[t]+e.config.markers.hover.sizeOffset),i}},{key:\"toggleAllTooltipSeriesGroups\",value:function(t){var e=this.w,i=this.ttCtx;0===i.allTooltipSeriesGroups.length&&(i.allTooltipSeriesGroups=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-tooltip-series-group\"));for(var a=i.allTooltipSeriesGroups,s=0;s<a.length;s++)\"enable\"===t?(a[s].classList.add(\"apexcharts-active\"),a[s].style.display=e.config.tooltip.items.display):(a[s].classList.remove(\"apexcharts-active\"),a[s].style.display=\"none\")}}]),t}(),gt=function(){function t(e){a(this,t),this.w=e.w,this.ctx=e.ctx,this.ttCtx=e,this.tooltipUtil=new dt(e)}return r(t,[{key:\"drawSeriesTexts\",value:function(t){var e=t.shared,i=void 0===e||e,a=t.ttItems,s=t.i,r=void 0===s?0:s,o=t.j,n=void 0===o?null:o,l=t.y1,h=t.y2,c=t.e,d=this.w;void 0!==d.config.tooltip.custom?this.handleCustomTooltip({i:r,j:n,y1:l,y2:h,w:d}):this.toggleActiveInactiveSeries(i);var g=this.getValuesToPrint({i:r,j:n});this.printLabels({i:r,j:n,values:g,ttItems:a,shared:i,e:c});var u=this.ttCtx.getElTooltip();this.ttCtx.tooltipRect.ttWidth=u.getBoundingClientRect().width,this.ttCtx.tooltipRect.ttHeight=u.getBoundingClientRect().height}},{key:\"printLabels\",value:function(t){var i,a=this,s=t.i,r=t.j,o=t.values,n=t.ttItems,l=t.shared,h=t.e,c=this.w,d=[],g=function(t){return c.globals.seriesGoals[t]&&c.globals.seriesGoals[t][r]&&Array.isArray(c.globals.seriesGoals[t][r])},u=o.xVal,f=o.zVal,p=o.xAxisTTVal,x=\"\",b=c.globals.colors[s];null!==r&&c.config.plotOptions.bar.distributed&&(b=c.globals.colors[r]);for(var v=function(t,o){var v=a.getFormatters(s);x=a.getSeriesName({fn:v.yLbTitleFormatter,index:s,seriesIndex:s,j:r}),\"treemap\"===c.config.chart.type&&(x=v.yLbTitleFormatter(String(c.config.series[s].data[r].x),{series:c.globals.series,seriesIndex:s,dataPointIndex:r,w:c}));var m=c.config.tooltip.inverseOrder?o:t;if(c.globals.axisCharts){var y=function(t){return v.yLbFormatter(c.globals.series[t][r],{series:c.globals.series,seriesIndex:t,dataPointIndex:r,w:c})};if(l)v=a.getFormatters(m),x=a.getSeriesName({fn:v.yLbTitleFormatter,index:m,seriesIndex:s,j:r}),b=c.globals.colors[m],i=y(m),g(m)&&(d=c.globals.seriesGoals[m][r].map((function(t){return{attrs:t,val:v.yLbFormatter(t.value,{seriesIndex:m,dataPointIndex:r,w:c})}})));else{var w,k=null==h||null===(w=h.target)||void 0===w?void 0:w.getAttribute(\"fill\");k&&(b=-1!==k.indexOf(\"url\")?document.querySelector(k.substr(4).slice(0,-1)).childNodes[0].getAttribute(\"stroke\"):k),i=y(s),g(s)&&Array.isArray(c.globals.seriesGoals[s][r])&&(d=c.globals.seriesGoals[s][r].map((function(t){return{attrs:t,val:v.yLbFormatter(t.value,{seriesIndex:s,dataPointIndex:r,w:c})}})))}}null===r&&(i=v.yLbFormatter(c.globals.series[s],e(e({},c),{},{seriesIndex:s,dataPointIndex:s}))),a.DOMHandling({i:s,t:m,j:r,ttItems:n,values:{val:i,goalVals:d,xVal:u,xAxisTTVal:p,zVal:f},seriesName:x,shared:l,pColor:b})},m=0,y=c.globals.series.length-1;m<c.globals.series.length;m++,y--)v(m,y)}},{key:\"getFormatters\",value:function(t){var e,i=this.w,a=i.globals.yLabelFormatters[t];return void 0!==i.globals.ttVal?Array.isArray(i.globals.ttVal)?(a=i.globals.ttVal[t]&&i.globals.ttVal[t].formatter,e=i.globals.ttVal[t]&&i.globals.ttVal[t].title&&i.globals.ttVal[t].title.formatter):(a=i.globals.ttVal.formatter,\"function\"==typeof i.globals.ttVal.title.formatter&&(e=i.globals.ttVal.title.formatter)):e=i.config.tooltip.y.title.formatter,\"function\"!=typeof a&&(a=i.globals.yLabelFormatters[0]?i.globals.yLabelFormatters[0]:function(t){return t}),\"function\"!=typeof e&&(e=function(t){return t}),{yLbFormatter:a,yLbTitleFormatter:e}}},{key:\"getSeriesName\",value:function(t){var e=t.fn,i=t.index,a=t.seriesIndex,s=t.j,r=this.w;return e(String(r.globals.seriesNames[i]),{series:r.globals.series,seriesIndex:a,dataPointIndex:s,w:r})}},{key:\"DOMHandling\",value:function(t){t.i;var e=t.t,i=t.j,a=t.ttItems,s=t.values,r=t.seriesName,o=t.shared,n=t.pColor,l=this.w,h=this.ttCtx,c=s.val,d=s.goalVals,g=s.xVal,u=s.xAxisTTVal,f=s.zVal,p=null;p=a[e].children,l.config.tooltip.fillSeriesColor&&(a[e].style.backgroundColor=n,p[0].style.display=\"none\"),h.showTooltipTitle&&(null===h.tooltipTitle&&(h.tooltipTitle=l.globals.dom.baseEl.querySelector(\".apexcharts-tooltip-title\")),h.tooltipTitle.innerHTML=g),h.isXAxisTooltipEnabled&&(h.xaxisTooltipText.innerHTML=\"\"!==u?u:g);var x=a[e].querySelector(\".apexcharts-tooltip-text-y-label\");x&&(x.innerHTML=r||\"\");var b=a[e].querySelector(\".apexcharts-tooltip-text-y-value\");b&&(b.innerHTML=void 0!==c?c:\"\"),p[0]&&p[0].classList.contains(\"apexcharts-tooltip-marker\")&&(l.config.tooltip.marker.fillColors&&Array.isArray(l.config.tooltip.marker.fillColors)&&(n=l.config.tooltip.marker.fillColors[e]),p[0].style.backgroundColor=n),l.config.tooltip.marker.show||(p[0].style.display=\"none\");var v=a[e].querySelector(\".apexcharts-tooltip-text-goals-label\"),m=a[e].querySelector(\".apexcharts-tooltip-text-goals-value\");if(d.length&&l.globals.seriesGoals[e]){var y=function(){var t=\"<div >\",e=\"<div>\";d.forEach((function(i,a){t+=' <div style=\"display: flex\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color: '.concat(i.attrs.strokeColor,'; height: 3px; border-radius: 0; top: 5px;\"></span> ').concat(i.attrs.name,\"</div>\"),e+=\"<div>\".concat(i.val,\"</div>\")})),v.innerHTML=t+\"</div>\",m.innerHTML=e+\"</div>\"};o?l.globals.seriesGoals[e][i]&&Array.isArray(l.globals.seriesGoals[e][i])?y():(v.innerHTML=\"\",m.innerHTML=\"\"):y()}else v.innerHTML=\"\",m.innerHTML=\"\";null!==f&&(a[e].querySelector(\".apexcharts-tooltip-text-z-label\").innerHTML=l.config.tooltip.z.title,a[e].querySelector(\".apexcharts-tooltip-text-z-value\").innerHTML=void 0!==f?f:\"\");o&&p[0]&&(null==c||l.globals.ancillaryCollapsedSeriesIndices.indexOf(e)>-1||l.globals.collapsedSeriesIndices.indexOf(e)>-1?p[0].parentNode.style.display=\"none\":p[0].parentNode.style.display=l.config.tooltip.items.display)}},{key:\"toggleActiveInactiveSeries\",value:function(t){var e=this.w;if(t)this.tooltipUtil.toggleAllTooltipSeriesGroups(\"enable\");else{this.tooltipUtil.toggleAllTooltipSeriesGroups(\"disable\");var i=e.globals.dom.baseEl.querySelector(\".apexcharts-tooltip-series-group\");i&&(i.classList.add(\"apexcharts-active\"),i.style.display=e.config.tooltip.items.display)}}},{key:\"getValuesToPrint\",value:function(t){var e=t.i,i=t.j,a=this.w,s=this.ctx.series.filteredSeriesX(),r=\"\",o=\"\",n=null,l=null,h={series:a.globals.series,seriesIndex:e,dataPointIndex:i,w:a},c=a.globals.ttZFormatter;null===i?l=a.globals.series[e]:a.globals.isXNumeric&&\"treemap\"!==a.config.chart.type?(r=s[e][i],0===s[e].length&&(r=s[this.tooltipUtil.getFirstActiveXArray(s)][i])):r=void 0!==a.globals.labels[i]?a.globals.labels[i]:\"\";var d=r;a.globals.isXNumeric&&\"datetime\"===a.config.xaxis.type?r=new W(this.ctx).xLabelFormat(a.globals.ttKeyFormatter,d,d,{i:void 0,dateFormatter:new T(this.ctx).formatDate,w:this.w}):r=a.globals.isBarHorizontal?a.globals.yLabelFormatters[0](d,h):a.globals.xLabelFormatter(d,h);return void 0!==a.config.tooltip.x.formatter&&(r=a.globals.ttKeyFormatter(d,h)),a.globals.seriesZ.length>0&&a.globals.seriesZ[e].length>0&&(n=c(a.globals.seriesZ[e][i],a)),o=\"function\"==typeof a.config.xaxis.tooltip.formatter?a.globals.xaxisTooltipFormatter(d,h):r,{val:Array.isArray(l)?l.join(\" \"):l,xVal:Array.isArray(r)?r.join(\" \"):r,xAxisTTVal:Array.isArray(o)?o.join(\" \"):o,zVal:n}}},{key:\"handleCustomTooltip\",value:function(t){var e=t.i,i=t.j,a=t.y1,s=t.y2,r=t.w,o=this.ttCtx.getElTooltip(),n=r.config.tooltip.custom;Array.isArray(n)&&n[e]&&(n=n[e]),o.innerHTML=n({ctx:this.ctx,series:r.globals.series,seriesIndex:e,dataPointIndex:i,y1:a,y2:s,w:r})}}]),t}(),ut=function(){function t(e){a(this,t),this.ttCtx=e,this.ctx=e.ctx,this.w=e.w}return r(t,[{key:\"moveXCrosshairs\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=this.ttCtx,a=this.w,s=i.getElXCrosshairs(),r=t-i.xcrosshairsWidth/2,o=a.globals.labels.slice().length;if(null!==e&&(r=a.globals.gridWidth/o*e),null===s||a.globals.isBarHorizontal||(s.setAttribute(\"x\",r),s.setAttribute(\"x1\",r),s.setAttribute(\"x2\",r),s.setAttribute(\"y2\",a.globals.gridHeight),s.classList.add(\"apexcharts-active\")),r<0&&(r=0),r>a.globals.gridWidth&&(r=a.globals.gridWidth),i.isXAxisTooltipEnabled){var n=r;\"tickWidth\"!==a.config.xaxis.crosshairs.width&&\"barWidth\"!==a.config.xaxis.crosshairs.width||(n=r+i.xcrosshairsWidth/2),this.moveXAxisTooltip(n)}}},{key:\"moveYCrosshairs\",value:function(t){var e=this.ttCtx;null!==e.ycrosshairs&&m.setAttrs(e.ycrosshairs,{y1:t,y2:t}),null!==e.ycrosshairsHidden&&m.setAttrs(e.ycrosshairsHidden,{y1:t,y2:t})}},{key:\"moveXAxisTooltip\",value:function(t){var e=this.w,i=this.ttCtx;if(null!==i.xaxisTooltip&&0!==i.xcrosshairsWidth){i.xaxisTooltip.classList.add(\"apexcharts-active\");var a=i.xaxisOffY+e.config.xaxis.tooltip.offsetY+e.globals.translateY+1+e.config.xaxis.offsetY;if(t-=i.xaxisTooltip.getBoundingClientRect().width/2,!isNaN(t)){t+=e.globals.translateX;var s;s=new m(this.ctx).getTextRects(i.xaxisTooltipText.innerHTML),i.xaxisTooltipText.style.minWidth=s.width+\"px\",i.xaxisTooltip.style.left=t+\"px\",i.xaxisTooltip.style.top=a+\"px\"}}}},{key:\"moveYAxisTooltip\",value:function(t){var e=this.w,i=this.ttCtx;null===i.yaxisTTEls&&(i.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\"));var a=parseInt(i.ycrosshairsHidden.getAttribute(\"y1\"),10),s=e.globals.translateY+a,r=i.yaxisTTEls[t].getBoundingClientRect().height,o=e.globals.translateYAxisX[t]-2;e.config.yaxis[t].opposite&&(o-=26),s-=r/2,-1===e.globals.ignoreYAxisIndexes.indexOf(t)?(i.yaxisTTEls[t].classList.add(\"apexcharts-active\"),i.yaxisTTEls[t].style.top=s+\"px\",i.yaxisTTEls[t].style.left=o+e.config.yaxis[t].tooltip.offsetX+\"px\"):i.yaxisTTEls[t].classList.remove(\"apexcharts-active\")}},{key:\"moveTooltip\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=this.w,s=this.ttCtx,r=s.getElTooltip(),o=s.tooltipRect,n=null!==i?parseFloat(i):1,l=parseFloat(t)+n+5,h=parseFloat(e)+n/2;if(l>a.globals.gridWidth/2&&(l=l-o.ttWidth-n-10),l>a.globals.gridWidth-o.ttWidth-10&&(l=a.globals.gridWidth-o.ttWidth),l<-20&&(l=-20),a.config.tooltip.followCursor){var c=s.getElGrid(),d=c.getBoundingClientRect();h=s.e.clientY+a.globals.translateY-d.top-o.ttHeight/2}else a.globals.isBarHorizontal||(o.ttHeight/2+h>a.globals.gridHeight&&(h=a.globals.gridHeight-o.ttHeight+a.globals.translateY),h<0&&(h=0));isNaN(l)||(l+=a.globals.translateX,r.style.left=l+\"px\",r.style.top=h+\"px\")}},{key:\"moveMarkers\",value:function(t,e){var i=this.w,a=this.ttCtx;if(i.globals.markers.size[t]>0)for(var s=i.globals.dom.baseEl.querySelectorAll(\" .apexcharts-series[data\\\\:realIndex='\".concat(t,\"'] .apexcharts-marker\")),r=0;r<s.length;r++)parseInt(s[r].getAttribute(\"rel\"),10)===e&&(a.marker.resetPointsSize(),a.marker.enlargeCurrentPoint(e,s[r]));else a.marker.resetPointsSize(),this.moveDynamicPointOnHover(e,t)}},{key:\"moveDynamicPointOnHover\",value:function(t,e){var i,a,s=this.w,r=this.ttCtx,o=s.globals.pointsArray,n=r.tooltipUtil.getHoverMarkerSize(e),l=s.config.series[e].type;if(!l||\"column\"!==l&&\"candlestick\"!==l&&\"boxPlot\"!==l){i=o[e][t][0],a=o[e][t][1]?o[e][t][1]:0;var h=s.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(e,\"'] .apexcharts-series-markers circle\"));h&&a<s.globals.gridHeight&&a>0&&(h.setAttribute(\"r\",n),h.setAttribute(\"cx\",i),h.setAttribute(\"cy\",a)),this.moveXCrosshairs(i),r.fixedTooltip||this.moveTooltip(i,a,n)}}},{key:\"moveDynamicPointsOnHover\",value:function(t){var e,i=this.ttCtx,a=i.w,s=0,r=0,o=a.globals.pointsArray;e=new N(this.ctx).getActiveConfigSeriesIndex(\"asc\",[\"line\",\"area\",\"scatter\",\"bubble\"]);var n=i.tooltipUtil.getHoverMarkerSize(e);o[e]&&(s=o[e][t][0],r=o[e][t][1]);var l=i.tooltipUtil.getAllMarkers();if(null!==l)for(var h=0;h<a.globals.series.length;h++){var c=o[h];if(a.globals.comboCharts&&void 0===c&&l.splice(h,0,null),c&&c.length){var d=o[h][t][1],g=void 0;if(l[h].setAttribute(\"cx\",s),\"rangeArea\"===a.config.chart.type&&!a.globals.comboCharts){var u=t+a.globals.series[h].length;g=o[h][u][1],d-=Math.abs(d-g)/2}null!==d&&!isNaN(d)&&d<a.globals.gridHeight+n&&d+n>0?(l[h]&&l[h].setAttribute(\"r\",n),l[h]&&l[h].setAttribute(\"cy\",d)):l[h]&&l[h].setAttribute(\"r\",0)}}if(this.moveXCrosshairs(s),!i.fixedTooltip){var f=r||a.globals.gridHeight;this.moveTooltip(s,f,n)}}},{key:\"moveStickyTooltipOverBars\",value:function(t){var e=this.w,i=this.ttCtx,a=e.globals.columnSeries?e.globals.columnSeries.length:e.globals.series.length,s=a>=2&&a%2==0?Math.floor(a/2):Math.floor(a/2)+1;e.globals.isBarHorizontal&&(s=new N(this.ctx).getActiveConfigSeriesIndex(\"desc\")+1);var r=e.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[rel='\".concat(s,\"'] path[j='\").concat(t,\"'], .apexcharts-candlestick-series .apexcharts-series[rel='\").concat(s,\"'] path[j='\").concat(t,\"'], .apexcharts-boxPlot-series .apexcharts-series[rel='\").concat(s,\"'] path[j='\").concat(t,\"'], .apexcharts-rangebar-series .apexcharts-series[rel='\").concat(s,\"'] path[j='\").concat(t,\"']\")),o=r?parseFloat(r.getAttribute(\"cx\")):0,n=r?parseFloat(r.getAttribute(\"cy\")):0,l=r?parseFloat(r.getAttribute(\"barWidth\")):0,h=r?parseFloat(r.getAttribute(\"barHeight\")):0,c=i.getElGrid().getBoundingClientRect(),d=r.classList.contains(\"apexcharts-candlestick-area\")||r.classList.contains(\"apexcharts-boxPlot-area\");if(e.globals.isXNumeric?(r&&!d&&(o-=a%2!=0?l/2:0),r&&d&&e.globals.comboCharts&&(o-=l/2)):e.globals.isBarHorizontal||(o=i.xAxisTicksPositions[t-1]+i.dataPointsDividedWidth/2,isNaN(o)&&(o=i.xAxisTicksPositions[t]-i.dataPointsDividedWidth/2)),e.globals.isBarHorizontal?(n>e.globals.gridHeight/2&&(n-=i.tooltipRect.ttHeight),(n=n+e.config.grid.padding.top+h/3)+h>e.globals.gridHeight&&(n=e.globals.gridHeight-h)):e.config.tooltip.followCursor?n=i.e.clientY-c.top-i.tooltipRect.ttHeight/2:n+i.tooltipRect.ttHeight+15>e.globals.gridHeight&&(n=e.globals.gridHeight),n<-10&&(n=-10),e.globals.isBarHorizontal||this.moveXCrosshairs(o),!i.fixedTooltip){var g=n||e.globals.gridHeight;this.moveTooltip(o,g)}}}]),t}(),ft=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e,this.ctx=e.ctx,this.tooltipPosition=new ut(e)}return r(t,[{key:\"drawDynamicPoints\",value:function(){var t=this.w,e=new m(this.ctx),i=new R(this.ctx),a=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");a=u(a),t.config.chart.stacked&&a.sort((function(t,e){return parseFloat(t.getAttribute(\"data:realIndex\"))-parseFloat(e.getAttribute(\"data:realIndex\"))}));for(var s=0;s<a.length;s++){var r=a[s].querySelector(\".apexcharts-series-markers-wrap\");if(null!==r){var o=void 0,n=\"apexcharts-marker w\".concat((Math.random()+1).toString(36).substring(4));\"line\"!==t.config.chart.type&&\"area\"!==t.config.chart.type||t.globals.comboCharts||t.config.tooltip.intersect||(n+=\" no-pointer-events\");var l=i.getMarkerConfig({cssClass:n,seriesIndex:Number(r.getAttribute(\"data:realIndex\"))});(o=e.drawMarker(0,0,l)).node.setAttribute(\"default-marker-size\",0);var h=document.createElementNS(t.globals.SVGNS,\"g\");h.classList.add(\"apexcharts-series-markers\"),h.appendChild(o.node),r.appendChild(h)}}}},{key:\"enlargeCurrentPoint\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=this.w;\"bubble\"!==s.config.chart.type&&this.newPointSize(t,e);var r=e.getAttribute(\"cx\"),o=e.getAttribute(\"cy\");if(null!==i&&null!==a&&(r=i,o=a),this.tooltipPosition.moveXCrosshairs(r),!this.fixedTooltip){if(\"radar\"===s.config.chart.type){var n=this.ttCtx.getElGrid(),l=n.getBoundingClientRect();r=this.ttCtx.e.clientX-l.left}this.tooltipPosition.moveTooltip(r,o,s.config.markers.hover.size)}}},{key:\"enlargePoints\",value:function(t){for(var e=this.w,i=this,a=this.ttCtx,s=t,r=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"),o=e.config.markers.hover.size,n=0;n<r.length;n++){var l=r[n].getAttribute(\"rel\"),h=r[n].getAttribute(\"index\");if(void 0===o&&(o=e.globals.markers.size[h]+e.config.markers.hover.sizeOffset),s===parseInt(l,10)){i.newPointSize(s,r[n]);var c=r[n].getAttribute(\"cx\"),d=r[n].getAttribute(\"cy\");i.tooltipPosition.moveXCrosshairs(c),a.fixedTooltip||i.tooltipPosition.moveTooltip(c,d,o)}else i.oldPointSize(r[n])}}},{key:\"newPointSize\",value:function(t,e){var i=this.w,a=i.config.markers.hover.size,s=0===t?e.parentNode.firstChild:e.parentNode.lastChild;if(\"0\"!==s.getAttribute(\"default-marker-size\")){var r=parseInt(s.getAttribute(\"index\"),10);void 0===a&&(a=i.globals.markers.size[r]+i.config.markers.hover.sizeOffset),a<0&&(a=0),s.setAttribute(\"r\",a)}}},{key:\"oldPointSize\",value:function(t){var e=parseFloat(t.getAttribute(\"default-marker-size\"));t.setAttribute(\"r\",e)}},{key:\"resetPointsSize\",value:function(){for(var t=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"),e=0;e<t.length;e++){var i=parseFloat(t[e].getAttribute(\"default-marker-size\"));x.isNumber(i)&&i>=0?t[e].setAttribute(\"r\",i):t[e].setAttribute(\"r\",0)}}}]),t}(),pt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e}return r(t,[{key:\"getAttr\",value:function(t,e){return parseFloat(t.target.getAttribute(e))}},{key:\"handleHeatTreeTooltip\",value:function(t){var e=t.e,i=t.opt,a=t.x,s=t.y,r=t.type,o=this.ttCtx,n=this.w;if(e.target.classList.contains(\"apexcharts-\".concat(r,\"-rect\"))){var l=this.getAttr(e,\"i\"),h=this.getAttr(e,\"j\"),c=this.getAttr(e,\"cx\"),d=this.getAttr(e,\"cy\"),g=this.getAttr(e,\"width\"),u=this.getAttr(e,\"height\");if(o.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:l,j:h,shared:!1,e:e}),n.globals.capturedSeriesIndex=l,n.globals.capturedDataPointIndex=h,a=c+o.tooltipRect.ttWidth/2+g,s=d+o.tooltipRect.ttHeight/2-u/2,o.tooltipPosition.moveXCrosshairs(c+g/2),a>n.globals.gridWidth/2&&(a=c-o.tooltipRect.ttWidth/2+g),o.w.config.tooltip.followCursor){var f=n.globals.dom.elWrap.getBoundingClientRect();a=n.globals.clientX-f.left-(a>n.globals.gridWidth/2?o.tooltipRect.ttWidth:0),s=n.globals.clientY-f.top-(s>n.globals.gridHeight/2?o.tooltipRect.ttHeight:0)}}return{x:a,y:s}}},{key:\"handleMarkerTooltip\",value:function(t){var e,i,a=t.e,s=t.opt,r=t.x,o=t.y,n=this.w,l=this.ttCtx;if(a.target.classList.contains(\"apexcharts-marker\")){var h=parseInt(s.paths.getAttribute(\"cx\"),10),c=parseInt(s.paths.getAttribute(\"cy\"),10),d=parseFloat(s.paths.getAttribute(\"val\"));if(i=parseInt(s.paths.getAttribute(\"rel\"),10),e=parseInt(s.paths.parentNode.parentNode.parentNode.getAttribute(\"rel\"),10)-1,l.intersect){var g=x.findAncestor(s.paths,\"apexcharts-series\");g&&(e=parseInt(g.getAttribute(\"data:realIndex\"),10))}if(l.tooltipLabels.drawSeriesTexts({ttItems:s.ttItems,i:e,j:i,shared:!l.showOnIntersect&&n.config.tooltip.shared,e:a}),\"mouseup\"===a.type&&l.markerClick(a,e,i),n.globals.capturedSeriesIndex=e,n.globals.capturedDataPointIndex=i,r=h,o=c+n.globals.translateY-1.4*l.tooltipRect.ttHeight,l.w.config.tooltip.followCursor){var u=l.getElGrid().getBoundingClientRect();o=l.e.clientY+n.globals.translateY-u.top}d<0&&(o=c),l.marker.enlargeCurrentPoint(i,s.paths,r,o)}return{x:r,y:o}}},{key:\"handleBarTooltip\",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=this.ttCtx,n=o.getElTooltip(),l=0,h=0,c=0,d=this.getBarTooltipXY({e:a,opt:s});e=d.i;var g=d.barHeight,u=d.j;r.globals.capturedSeriesIndex=e,r.globals.capturedDataPointIndex=u,r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||!r.config.tooltip.shared?(h=d.x,c=d.y,i=Array.isArray(r.config.stroke.width)?r.config.stroke.width[e]:r.config.stroke.width,l=h):r.globals.comboCharts||r.config.tooltip.shared||(l/=2),isNaN(c)?c=r.globals.svgHeight-o.tooltipRect.ttHeight:c<0&&(c=0);var f=parseInt(s.paths.parentNode.getAttribute(\"data:realIndex\"),10),p=r.globals.isMultipleYAxis?r.config.yaxis[f]&&r.config.yaxis[f].reversed:r.config.yaxis[0].reversed;if(h+o.tooltipRect.ttWidth>r.globals.gridWidth&&!p?h-=o.tooltipRect.ttWidth:h<0&&(h=0),o.w.config.tooltip.followCursor){var x=o.getElGrid().getBoundingClientRect();c=o.e.clientY-x.top}null===o.tooltip&&(o.tooltip=r.globals.dom.baseEl.querySelector(\".apexcharts-tooltip\")),r.config.tooltip.shared||(r.globals.comboBarCount>0?o.tooltipPosition.moveXCrosshairs(l+i/2):o.tooltipPosition.moveXCrosshairs(l)),!o.fixedTooltip&&(!r.config.tooltip.shared||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars())&&(p&&(h-=o.tooltipRect.ttWidth)<0&&(h=0),!p||r.globals.isBarHorizontal&&o.tooltipUtil.hasBars()||(c=c+g-2*(r.globals.series[e][u]<0?g:0)),o.tooltipRect.ttHeight+c>r.globals.gridHeight?c=r.globals.gridHeight-o.tooltipRect.ttHeight+r.globals.translateY:(c=c+r.globals.translateY-o.tooltipRect.ttHeight/2)<0&&(c=0),n.style.left=h+r.globals.translateX+\"px\",n.style.top=c+\"px\")}},{key:\"getBarTooltipXY\",value:function(t){var e=t.e,i=t.opt,a=this.w,s=null,r=this.ttCtx,o=0,n=0,l=0,h=0,c=0,d=e.target.classList;if(d.contains(\"apexcharts-bar-area\")||d.contains(\"apexcharts-candlestick-area\")||d.contains(\"apexcharts-boxPlot-area\")||d.contains(\"apexcharts-rangebar-area\")){var g=e.target,u=g.getBoundingClientRect(),f=i.elGrid.getBoundingClientRect(),p=u.height;c=u.height;var x=u.width,b=parseInt(g.getAttribute(\"cx\"),10),v=parseInt(g.getAttribute(\"cy\"),10);h=parseFloat(g.getAttribute(\"barWidth\"));var m=\"touchmove\"===e.type?e.touches[0].clientX:e.clientX;s=parseInt(g.getAttribute(\"j\"),10),o=parseInt(g.parentNode.getAttribute(\"rel\"),10)-1;var y=g.getAttribute(\"data-range-y1\"),w=g.getAttribute(\"data-range-y2\");a.globals.comboCharts&&(o=parseInt(g.parentNode.getAttribute(\"data:realIndex\"),10)),r.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:o,j:s,y1:y?parseInt(y,10):null,y2:w?parseInt(w,10):null,shared:!r.showOnIntersect&&a.config.tooltip.shared,e:e}),a.config.tooltip.followCursor?a.globals.isBarHorizontal?(n=m-f.left+15,l=v-r.dataPointsDividedHeight+p/2-r.tooltipRect.ttHeight/2):(n=a.globals.isXNumeric?b-x/2:b-r.dataPointsDividedWidth+x/2,l=e.clientY-f.top-r.tooltipRect.ttHeight/2-15):a.globals.isBarHorizontal?((n=b)<r.xyRatios.baseLineInvertedY&&(n=b-r.tooltipRect.ttWidth),l=v-r.dataPointsDividedHeight+p/2-r.tooltipRect.ttHeight/2):(n=a.globals.isXNumeric?b-x/2:b-r.dataPointsDividedWidth+x/2,l=v)}return{x:n,y:l,barHeight:c,barWidth:h,i:o,j:s}}}]),t}(),xt=function(){function t(e){a(this,t),this.w=e.w,this.ttCtx=e}return r(t,[{key:\"drawXaxisTooltip\",value:function(){var t=this.w,e=this.ttCtx,i=\"bottom\"===t.config.xaxis.position;e.xaxisOffY=i?t.globals.gridHeight+1:-t.globals.xAxisHeight-t.config.xaxis.axisTicks.height+3;var a=i?\"apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom\":\"apexcharts-xaxistooltip apexcharts-xaxistooltip-top\",s=t.globals.dom.elWrap;e.isXAxisTooltipEnabled&&(null===t.globals.dom.baseEl.querySelector(\".apexcharts-xaxistooltip\")&&(e.xaxisTooltip=document.createElement(\"div\"),e.xaxisTooltip.setAttribute(\"class\",a+\" apexcharts-theme-\"+t.config.tooltip.theme),s.appendChild(e.xaxisTooltip),e.xaxisTooltipText=document.createElement(\"div\"),e.xaxisTooltipText.classList.add(\"apexcharts-xaxistooltip-text\"),e.xaxisTooltipText.style.fontFamily=t.config.xaxis.tooltip.style.fontFamily||t.config.chart.fontFamily,e.xaxisTooltipText.style.fontSize=t.config.xaxis.tooltip.style.fontSize,e.xaxisTooltip.appendChild(e.xaxisTooltipText)))}},{key:\"drawYaxisTooltip\",value:function(){for(var t=this.w,e=this.ttCtx,i=function(i){var a=t.config.yaxis[i].opposite||t.config.yaxis[i].crosshairs.opposite;e.yaxisOffX=a?t.globals.gridWidth+1:1;var s=\"apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i,a?\" apexcharts-yaxistooltip-right\":\" apexcharts-yaxistooltip-left\");t.globals.yAxisSameScaleIndices.map((function(e,a){e.map((function(e,a){a===i&&(s+=t.config.yaxis[a].show?\" \":\" apexcharts-yaxistooltip-hidden\")}))}));var r=t.globals.dom.elWrap;null===t.globals.dom.baseEl.querySelector(\".apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i))&&(e.yaxisTooltip=document.createElement(\"div\"),e.yaxisTooltip.setAttribute(\"class\",s+\" apexcharts-theme-\"+t.config.tooltip.theme),r.appendChild(e.yaxisTooltip),0===i&&(e.yaxisTooltipText=[]),e.yaxisTooltipText[i]=document.createElement(\"div\"),e.yaxisTooltipText[i].classList.add(\"apexcharts-yaxistooltip-text\"),e.yaxisTooltip.appendChild(e.yaxisTooltipText[i]))},a=0;a<t.config.yaxis.length;a++)i(a)}},{key:\"setXCrosshairWidth\",value:function(){var t=this.w,e=this.ttCtx,i=e.getElXCrosshairs();if(e.xcrosshairsWidth=parseInt(t.config.xaxis.crosshairs.width,10),t.globals.comboCharts){var a=t.globals.dom.baseEl.querySelector(\".apexcharts-bar-area\");if(null!==a&&\"barWidth\"===t.config.xaxis.crosshairs.width){var s=parseFloat(a.getAttribute(\"barWidth\"));e.xcrosshairsWidth=s}else if(\"tickWidth\"===t.config.xaxis.crosshairs.width){var r=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/r}}else if(\"tickWidth\"===t.config.xaxis.crosshairs.width){var o=t.globals.labels.length;e.xcrosshairsWidth=t.globals.gridWidth/o}else if(\"barWidth\"===t.config.xaxis.crosshairs.width){var n=t.globals.dom.baseEl.querySelector(\".apexcharts-bar-area\");if(null!==n){var l=parseFloat(n.getAttribute(\"barWidth\"));e.xcrosshairsWidth=l}else e.xcrosshairsWidth=1}t.globals.isBarHorizontal&&(e.xcrosshairsWidth=0),null!==i&&e.xcrosshairsWidth>0&&i.setAttribute(\"width\",e.xcrosshairsWidth)}},{key:\"handleYCrosshair\",value:function(){var t=this.w,e=this.ttCtx;e.ycrosshairs=t.globals.dom.baseEl.querySelector(\".apexcharts-ycrosshairs\"),e.ycrosshairsHidden=t.globals.dom.baseEl.querySelector(\".apexcharts-ycrosshairs-hidden\")}},{key:\"drawYaxisTooltipText\",value:function(t,e,i){var a=this.ttCtx,s=this.w,r=s.globals.yLabelFormatters[t];if(a.yaxisTooltips[t]){var o=a.getElGrid().getBoundingClientRect(),n=(e-o.top)*i.yRatio[t],l=s.globals.maxYArr[t]-s.globals.minYArr[t],h=s.globals.minYArr[t]+(l-n);a.tooltipPosition.moveYCrosshairs(e-o.top),a.yaxisTooltipText[t].innerHTML=r(h),a.tooltipPosition.moveYAxisTooltip(t)}}}]),t}(),bt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.tConfig=i.config.tooltip,this.tooltipUtil=new dt(this),this.tooltipLabels=new gt(this),this.tooltipPosition=new ut(this),this.marker=new ft(this),this.intersect=new pt(this),this.axesTooltip=new xt(this),this.showOnIntersect=this.tConfig.intersect,this.showTooltipTitle=this.tConfig.x.show,this.fixedTooltip=this.tConfig.fixed.enabled,this.xaxisTooltip=null,this.yaxisTTEls=null,this.isBarShared=!i.globals.isBarHorizontal&&this.tConfig.shared,this.lastHoverTime=Date.now()}return r(t,[{key:\"getElTooltip\",value:function(t){return t||(t=this),t.w.globals.dom.baseEl?t.w.globals.dom.baseEl.querySelector(\".apexcharts-tooltip\"):null}},{key:\"getElXCrosshairs\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-xcrosshairs\")}},{key:\"getElGrid\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-grid\")}},{key:\"drawTooltip\",value:function(t){var e=this.w;this.xyRatios=t,this.isXAxisTooltipEnabled=e.config.xaxis.tooltip.enabled&&e.globals.axisCharts,this.yaxisTooltips=e.config.yaxis.map((function(t,i){return!!(t.show&&t.tooltip.enabled&&e.globals.axisCharts)})),this.allTooltipSeriesGroups=[],e.globals.axisCharts||(this.showTooltipTitle=!1);var i=document.createElement(\"div\");if(i.classList.add(\"apexcharts-tooltip\"),e.config.tooltip.cssClass&&i.classList.add(e.config.tooltip.cssClass),i.classList.add(\"apexcharts-theme-\".concat(this.tConfig.theme)),e.globals.dom.elWrap.appendChild(i),e.globals.axisCharts){this.axesTooltip.drawXaxisTooltip(),this.axesTooltip.drawYaxisTooltip(),this.axesTooltip.setXCrosshairWidth(),this.axesTooltip.handleYCrosshair();var a=new G(this.ctx);this.xAxisTicksPositions=a.getXAxisTicksPositions()}if(!e.globals.comboCharts&&!this.tConfig.intersect&&\"rangeBar\"!==e.config.chart.type||this.tConfig.shared||(this.showOnIntersect=!0),0!==e.config.markers.size&&0!==e.globals.markers.largestSize||this.marker.drawDynamicPoints(this),e.globals.collapsedSeries.length!==e.globals.series.length){this.dataPointsDividedHeight=e.globals.gridHeight/e.globals.dataPoints,this.dataPointsDividedWidth=e.globals.gridWidth/e.globals.dataPoints,this.showTooltipTitle&&(this.tooltipTitle=document.createElement(\"div\"),this.tooltipTitle.classList.add(\"apexcharts-tooltip-title\"),this.tooltipTitle.style.fontFamily=this.tConfig.style.fontFamily||e.config.chart.fontFamily,this.tooltipTitle.style.fontSize=this.tConfig.style.fontSize,i.appendChild(this.tooltipTitle));var s=e.globals.series.length;(e.globals.xyCharts||e.globals.comboCharts)&&this.tConfig.shared&&(s=this.showOnIntersect?1:e.globals.series.length),this.legendLabels=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-legend-text\"),this.ttItems=this.createTTElements(s),this.addSVGEvents()}}},{key:\"createTTElements\",value:function(t){for(var e=this,i=this.w,a=[],s=this.getElTooltip(),r=function(r){var o=document.createElement(\"div\");o.classList.add(\"apexcharts-tooltip-series-group\"),o.style.order=i.config.tooltip.inverseOrder?t-r:r+1,e.tConfig.shared&&e.tConfig.enabledOnSeries&&Array.isArray(e.tConfig.enabledOnSeries)&&e.tConfig.enabledOnSeries.indexOf(r)<0&&o.classList.add(\"apexcharts-tooltip-series-group-hidden\");var n=document.createElement(\"span\");n.classList.add(\"apexcharts-tooltip-marker\"),n.style.backgroundColor=i.globals.colors[r],o.appendChild(n);var l=document.createElement(\"div\");l.classList.add(\"apexcharts-tooltip-text\"),l.style.fontFamily=e.tConfig.style.fontFamily||i.config.chart.fontFamily,l.style.fontSize=e.tConfig.style.fontSize,[\"y\",\"goals\",\"z\"].forEach((function(t){var e=document.createElement(\"div\");e.classList.add(\"apexcharts-tooltip-\".concat(t,\"-group\"));var i=document.createElement(\"span\");i.classList.add(\"apexcharts-tooltip-text-\".concat(t,\"-label\")),e.appendChild(i);var a=document.createElement(\"span\");a.classList.add(\"apexcharts-tooltip-text-\".concat(t,\"-value\")),e.appendChild(a),l.appendChild(e)})),o.appendChild(l),s.appendChild(o),a.push(o)},o=0;o<t;o++)r(o);return a}},{key:\"addSVGEvents\",value:function(){var t=this.w,e=t.config.chart.type,i=this.getElTooltip(),a=!(\"bar\"!==e&&\"candlestick\"!==e&&\"boxPlot\"!==e&&\"rangeBar\"!==e),s=\"area\"===e||\"line\"===e||\"scatter\"===e||\"bubble\"===e||\"radar\"===e,r=t.globals.dom.Paper.node,o=this.getElGrid();o&&(this.seriesBound=o.getBoundingClientRect());var n,l=[],h=[],c={hoverArea:r,elGrid:o,tooltipEl:i,tooltipY:l,tooltipX:h,ttItems:this.ttItems};if(t.globals.axisCharts&&(s?n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\"):a?n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-rangebar-area\"):\"heatmap\"!==e&&\"treemap\"!==e||(n=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap\")),n&&n.length))for(var d=0;d<n.length;d++)l.push(n[d].getAttribute(\"cy\")),h.push(n[d].getAttribute(\"cx\"));if(t.globals.xyCharts&&!this.showOnIntersect||t.globals.comboCharts&&!this.showOnIntersect||a&&this.tooltipUtil.hasBars()&&this.tConfig.shared)this.addPathsEventListeners([r],c);else if(a&&!t.globals.comboCharts||s&&this.showOnIntersect)this.addDatapointEventsListeners(c);else if(!t.globals.axisCharts||\"heatmap\"===e||\"treemap\"===e){var g=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");this.addPathsEventListeners(g,c)}if(this.showOnIntersect){var u=t.globals.dom.baseEl.querySelectorAll(\".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker\");u.length>0&&this.addPathsEventListeners(u,c),this.tooltipUtil.hasBars()&&!this.tConfig.shared&&this.addDatapointEventsListeners(c)}}},{key:\"drawFixedTooltipRect\",value:function(){var t=this.w,e=this.getElTooltip(),i=e.getBoundingClientRect(),a=i.width+10,s=i.height+10,r=this.tConfig.fixed.offsetX,o=this.tConfig.fixed.offsetY,n=this.tConfig.fixed.position.toLowerCase();return n.indexOf(\"right\")>-1&&(r=r+t.globals.svgWidth-a+10),n.indexOf(\"bottom\")>-1&&(o=o+t.globals.svgHeight-s-10),e.style.left=r+\"px\",e.style.top=o+\"px\",{x:r,y:o,ttWidth:a,ttHeight:s}}},{key:\"addDatapointEventsListeners\",value:function(t){var e=this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area\");this.addPathsEventListeners(e,t)}},{key:\"addPathsEventListeners\",value:function(t,e){for(var i=this,a=function(a){var s={paths:t[a],tooltipEl:e.tooltipEl,tooltipY:e.tooltipY,tooltipX:e.tooltipX,elGrid:e.elGrid,hoverArea:e.hoverArea,ttItems:e.ttItems};[\"mousemove\",\"mouseup\",\"touchmove\",\"mouseout\",\"touchend\"].map((function(e){return t[a].addEventListener(e,i.onSeriesHover.bind(i,s),{capture:!1,passive:!0})}))},s=0;s<t.length;s++)a(s)}},{key:\"onSeriesHover\",value:function(t,e){var i=this,a=Date.now()-this.lastHoverTime;a>=100?this.seriesHover(t,e):(clearTimeout(this.seriesHoverTimeout),this.seriesHoverTimeout=setTimeout((function(){i.seriesHover(t,e)}),100-a))}},{key:\"seriesHover\",value:function(t,e){var i=this;this.lastHoverTime=Date.now();var a=[],s=this.w;s.config.chart.group&&(a=this.ctx.getGroupedCharts()),s.globals.axisCharts&&(s.globals.minX===-1/0&&s.globals.maxX===1/0||0===s.globals.dataPoints)||(a.length?a.forEach((function(a){var s=i.getElTooltip(a),r={paths:t.paths,tooltipEl:s,tooltipY:t.tooltipY,tooltipX:t.tooltipX,elGrid:t.elGrid,hoverArea:t.hoverArea,ttItems:a.w.globals.tooltip.ttItems};a.w.globals.minX===i.w.globals.minX&&a.w.globals.maxX===i.w.globals.maxX&&a.w.globals.tooltip.seriesHoverByContext({chartCtx:a,ttCtx:a.w.globals.tooltip,opt:r,e:e})})):this.seriesHoverByContext({chartCtx:this.ctx,ttCtx:this.w.globals.tooltip,opt:t,e:e}))}},{key:\"seriesHoverByContext\",value:function(t){var e=t.chartCtx,i=t.ttCtx,a=t.opt,s=t.e,r=e.w,o=this.getElTooltip();if(o){if(i.tooltipRect={x:0,y:0,ttWidth:o.getBoundingClientRect().width,ttHeight:o.getBoundingClientRect().height},i.e=s,i.tooltipUtil.hasBars()&&!r.globals.comboCharts&&!i.isBarShared)if(this.tConfig.onDatasetHover.highlightDataSeries)new N(e).toggleSeriesOnHover(s,s.target.parentNode);i.fixedTooltip&&i.drawFixedTooltipRect(),r.globals.axisCharts?i.axisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect}):i.nonAxisChartsTooltips({e:s,opt:a,tooltipRect:i.tooltipRect})}}},{key:\"axisChartsTooltips\",value:function(t){var e,i,a=t.e,s=t.opt,r=this.w,o=s.elGrid.getBoundingClientRect(),n=\"touchmove\"===a.type?a.touches[0].clientX:a.clientX,l=\"touchmove\"===a.type?a.touches[0].clientY:a.clientY;if(this.clientY=l,this.clientX=n,r.globals.capturedSeriesIndex=-1,r.globals.capturedDataPointIndex=-1,l<o.top||l>o.top+o.height)this.handleMouseOut(s);else{if(Array.isArray(this.tConfig.enabledOnSeries)&&!r.config.tooltip.shared){var h=parseInt(s.paths.getAttribute(\"index\"),10);if(this.tConfig.enabledOnSeries.indexOf(h)<0)return void this.handleMouseOut(s)}var c=this.getElTooltip(),d=this.getElXCrosshairs(),g=r.globals.xyCharts||\"bar\"===r.config.chart.type&&!r.globals.isBarHorizontal&&this.tooltipUtil.hasBars()&&this.tConfig.shared||r.globals.comboCharts&&this.tooltipUtil.hasBars();if(\"mousemove\"===a.type||\"touchmove\"===a.type||\"mouseup\"===a.type){if(r.globals.collapsedSeries.length+r.globals.ancillaryCollapsedSeries.length===r.globals.series.length)return;null!==d&&d.classList.add(\"apexcharts-active\");var u=this.yaxisTooltips.filter((function(t){return!0===t}));if(null!==this.ycrosshairs&&u.length&&this.ycrosshairs.classList.add(\"apexcharts-active\"),g&&!this.showOnIntersect)this.handleStickyTooltip(a,n,l,s);else if(\"heatmap\"===r.config.chart.type||\"treemap\"===r.config.chart.type){var f=this.intersect.handleHeatTreeTooltip({e:a,opt:s,x:e,y:i,type:r.config.chart.type});e=f.x,i=f.y,c.style.left=e+\"px\",c.style.top=i+\"px\"}else this.tooltipUtil.hasBars()&&this.intersect.handleBarTooltip({e:a,opt:s}),this.tooltipUtil.hasMarkers()&&this.intersect.handleMarkerTooltip({e:a,opt:s,x:e,y:i});if(this.yaxisTooltips.length)for(var p=0;p<r.config.yaxis.length;p++)this.axesTooltip.drawYaxisTooltipText(p,l,this.xyRatios);s.tooltipEl.classList.add(\"apexcharts-active\")}else\"mouseout\"!==a.type&&\"touchend\"!==a.type||this.handleMouseOut(s)}}},{key:\"nonAxisChartsTooltips\",value:function(t){var e=t.e,i=t.opt,a=t.tooltipRect,s=this.w,r=i.paths.getAttribute(\"rel\"),o=this.getElTooltip(),n=s.globals.dom.elWrap.getBoundingClientRect();if(\"mousemove\"===e.type||\"touchmove\"===e.type){o.classList.add(\"apexcharts-active\"),this.tooltipLabels.drawSeriesTexts({ttItems:i.ttItems,i:parseInt(r,10)-1,shared:!1});var l=s.globals.clientX-n.left-a.ttWidth/2,h=s.globals.clientY-n.top-a.ttHeight-10;if(o.style.left=l+\"px\",o.style.top=h+\"px\",s.config.legend.tooltipHoverFormatter){var c=r-1,d=(0,s.config.legend.tooltipHoverFormatter)(this.legendLabels[c].getAttribute(\"data:default-text\"),{seriesIndex:c,dataPointIndex:c,w:s});this.legendLabels[c].innerHTML=d}}else\"mouseout\"!==e.type&&\"touchend\"!==e.type||(o.classList.remove(\"apexcharts-active\"),s.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)})))}},{key:\"handleStickyTooltip\",value:function(t,e,i,a){var s=this.w,r=this.tooltipUtil.getNearestValues({context:this,hoverArea:a.hoverArea,elGrid:a.elGrid,clientX:e,clientY:i}),o=r.j,n=r.capturedSeries,l=a.elGrid.getBoundingClientRect();r.hoverX<0||r.hoverX>l.width?this.handleMouseOut(a):null!==n?this.handleStickyCapturedSeries(t,n,a,o):(this.tooltipUtil.isXoverlap(o)||s.globals.isBarHorizontal)&&this.create(t,this,0,o,a.ttItems)}},{key:\"handleStickyCapturedSeries\",value:function(t,e,i,a){var s=this.w;if(!this.tConfig.shared&&null===s.globals.series[e][a])return void this.handleMouseOut(i);void 0!==s.globals.series[e][a]?this.tConfig.shared&&this.tooltipUtil.isXoverlap(a)&&this.tooltipUtil.isInitialSeriesSameLen()?this.create(t,this,e,a,i.ttItems):this.create(t,this,e,a,i.ttItems,!1):this.tooltipUtil.isXoverlap(a)&&this.create(t,this,0,a,i.ttItems)}},{key:\"deactivateHoverFilter\",value:function(){for(var t=this.w,e=new m(this.ctx),i=t.globals.dom.Paper.select(\".apexcharts-bar-area\"),a=0;a<i.length;a++)e.pathMouseLeave(i[a])}},{key:\"handleMouseOut\",value:function(t){var e=this.w,i=this.getElXCrosshairs();if(t.tooltipEl.classList.remove(\"apexcharts-active\"),this.deactivateHoverFilter(),\"bubble\"!==e.config.chart.type&&this.marker.resetPointsSize(),null!==i&&i.classList.remove(\"apexcharts-active\"),null!==this.ycrosshairs&&this.ycrosshairs.classList.remove(\"apexcharts-active\"),this.isXAxisTooltipEnabled&&this.xaxisTooltip.classList.remove(\"apexcharts-active\"),this.yaxisTooltips.length){null===this.yaxisTTEls&&(this.yaxisTTEls=e.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\"));for(var a=0;a<this.yaxisTTEls.length;a++)this.yaxisTTEls[a].classList.remove(\"apexcharts-active\")}e.config.legend.tooltipHoverFormatter&&this.legendLabels.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)}))}},{key:\"markerClick\",value:function(t,e,i){var a=this.w;\"function\"==typeof a.config.chart.events.markerClick&&a.config.chart.events.markerClick(t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}),this.ctx.events.fireEvent(\"markerClick\",[t,this.ctx,{seriesIndex:e,dataPointIndex:i,w:a}])}},{key:\"create\",value:function(t,e,i,a,s){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,o=this.w,n=e;\"mouseup\"===t.type&&this.markerClick(t,i,a),null===r&&(r=this.tConfig.shared);var l=this.tooltipUtil.hasMarkers(),h=this.tooltipUtil.getElBars();if(o.config.legend.tooltipHoverFormatter){var c=o.config.legend.tooltipHoverFormatter,d=Array.from(this.legendLabels);d.forEach((function(t){var e=t.getAttribute(\"data:default-text\");t.innerHTML=decodeURIComponent(e)}));for(var g=0;g<d.length;g++){var u=d[g],f=parseInt(u.getAttribute(\"i\"),10),p=decodeURIComponent(u.getAttribute(\"data:default-text\")),x=c(p,{seriesIndex:r?f:i,dataPointIndex:a,w:o});if(r)u.innerHTML=o.globals.collapsedSeriesIndices.indexOf(f)<0?x:p;else if(u.innerHTML=f===i?x:p,i===f)break}}if(r){if(n.tooltipLabels.drawSeriesTexts({ttItems:s,i:i,j:a,shared:!this.showOnIntersect&&this.tConfig.shared}),l&&(o.globals.markers.largestSize>0?n.marker.enlargePoints(a):n.tooltipPosition.moveDynamicPointsOnHover(a)),this.tooltipUtil.hasBars()&&(this.barSeriesHeight=this.tooltipUtil.getBarsHeight(h),this.barSeriesHeight>0)){var b=new m(this.ctx),v=o.globals.dom.Paper.select(\".apexcharts-bar-area[j='\".concat(a,\"']\"));this.deactivateHoverFilter(),this.tooltipPosition.moveStickyTooltipOverBars(a);for(var y=0;y<v.length;y++)b.pathMouseEnter(v[y])}}else n.tooltipLabels.drawSeriesTexts({shared:!1,ttItems:s,i:i,j:a}),this.tooltipUtil.hasBars()&&n.tooltipPosition.moveStickyTooltipOverBars(a),l&&n.tooltipPosition.moveMarkers(i,a)}}]),t}(),vt=function(){function t(e){a(this,t),this.w=e.w,this.barCtx=e,this.totalFormatter=this.w.config.plotOptions.bar.dataLabels.total.formatter,this.totalFormatter||(this.totalFormatter=this.w.config.dataLabels.formatter)}return r(t,[{key:\"handleBarDataLabels\",value:function(t){var e=t.x,i=t.y,a=t.y1,s=t.y2,r=t.i,o=t.j,n=t.realIndex,l=t.series,h=t.barHeight,c=t.barWidth,d=t.barYPosition,g=t.visibleSeries,u=t.renderedPath,f=this.w,p=new m(this.barCtx.ctx),x=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[n]:this.barCtx.strokeWidth,b=e+parseFloat(c*g),v=i+parseFloat(h*g);f.globals.isXNumeric&&!f.globals.isBarHorizontal&&(b=e+parseFloat(c*(g+1)),v=i+parseFloat(h*(g+1))-x);var y,w=null,k=e,A=i,S={},C=f.config.dataLabels,L=this.barCtx.barOptions.dataLabels,P=this.barCtx.barOptions.dataLabels.total;void 0!==d&&this.barCtx.isRangeBar&&(v=d,A=d);var T=C.offsetX,M=C.offsetY,I={width:0,height:0};if(f.config.dataLabels.enabled){var X=this.barCtx.series[r][o];I=p.getTextRects(f.globals.yLabelFormatters[0](X),parseFloat(C.style.fontSize))}var z={x:e,y:i,i:r,j:o,realIndex:n,renderedPath:u,bcx:b,bcy:v,barHeight:h,barWidth:c,textRects:I,strokeWidth:x,dataLabelsX:k,dataLabelsY:A,dataLabelsConfig:C,barDataLabelsConfig:L,barTotalDataLabelsConfig:P,offX:T,offY:M};return S=this.barCtx.isHorizontal?this.calculateBarsDataLabelsPosition(z):this.calculateColumnsDataLabelsPosition(z),u.attr({cy:S.bcy,cx:S.bcx,j:o,val:l[r][o],barHeight:h,barWidth:c}),y=this.drawCalculatedDataLabels({x:S.dataLabelsX,y:S.dataLabelsY,val:this.barCtx.isRangeBar?[a,s]:l[r][o],i:n,j:o,barWidth:c,barHeight:h,textRects:I,dataLabelsConfig:C}),f.config.chart.stacked&&P.enabled&&(w=this.drawTotalDataLabels({x:S.totalDataLabelsX,y:S.totalDataLabelsY,realIndex:n,textAnchor:S.totalDataLabelsAnchor,val:this.getStackedTotalDataLabel({realIndex:n,j:o}),dataLabelsConfig:C,barTotalDataLabelsConfig:P})),{dataLabels:y,totalDataLabels:w}}},{key:\"getStackedTotalDataLabel\",value:function(t){var i=t.realIndex,a=t.j,s=this.w,r=this.barCtx.stackedSeriesTotals[a];return this.totalFormatter&&(r=this.totalFormatter(r,e(e({},s),{},{seriesIndex:i,dataPointIndex:a,w:s}))),r}},{key:\"calculateColumnsDataLabelsPosition\",value:function(t){var e,i,a,s=this.w,r=t.i,o=t.j,n=t.realIndex,l=t.y,h=t.bcx,c=t.barWidth,d=t.barHeight,g=t.textRects,u=t.dataLabelsY,f=t.dataLabelsConfig,p=t.barDataLabelsConfig,x=t.barTotalDataLabelsConfig,b=t.strokeWidth,v=t.offX,y=t.offY;d=Math.abs(d);var w=\"vertical\"===s.config.plotOptions.bar.dataLabels.orientation;h-=b/2;var k=s.globals.gridWidth/s.globals.dataPoints;if(e=s.globals.isXNumeric?h-c/2+v:h-k+c/2+v,w){e=e+g.height/2-b/2-2}var A=this.barCtx.series[r][o]<0,S=l;switch(this.barCtx.isReversed&&(S=l-d+(A?2*d:0),l-=d),p.position){case\"center\":u=w?A?S+d/2+y:S+d/2-y:A?S-d/2+g.height/2+y:S+d/2+g.height/2-y;break;case\"bottom\":u=w?A?S+d+y:S+d-y:A?S-d+g.height+b+y:S+d-g.height/2+b-y;break;case\"top\":u=w?A?S+y:S-y:A?S-g.height/2-y:S+g.height+y}if(this.barCtx.lastActiveBarSerieIndex===n&&x.enabled){var C=new m(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:n,j:o}),f.fontSize);i=A?S-C.height/2-y-x.offsetY+18:S+C.height+y+x.offsetY-18,a=e+x.offsetX}return s.config.chart.stacked||(u<0?u=0+b:u+g.height/3>s.globals.gridHeight&&(u=s.globals.gridHeight-b)),{bcx:h,bcy:l,dataLabelsX:e,dataLabelsY:u,totalDataLabelsX:a,totalDataLabelsY:i,totalDataLabelsAnchor:\"middle\"}}},{key:\"calculateBarsDataLabelsPosition\",value:function(t){var e=this.w,i=t.x,a=t.i,s=t.j,r=t.realIndex,o=t.bcy,n=t.barHeight,l=t.barWidth,h=t.textRects,c=t.dataLabelsX,d=t.strokeWidth,g=t.dataLabelsConfig,u=t.barDataLabelsConfig,f=t.barTotalDataLabelsConfig,p=t.offX,x=t.offY,b=e.globals.gridHeight/e.globals.dataPoints;l=Math.abs(l);var v,y,w=o-(this.barCtx.isRangeBar?0:b)+n/2+h.height/2+x-3,k=\"start\",A=this.barCtx.series[a][s]<0,S=i;switch(this.barCtx.isReversed&&(S=i+l-(A?2*l:0),i=e.globals.gridWidth-l),u.position){case\"center\":c=A?S+l/2-p:Math.max(h.width/2,S-l/2)+p;break;case\"bottom\":c=A?S+l-d-Math.round(h.width/2)-p:S-l+d+Math.round(h.width/2)+p;break;case\"top\":c=A?S-d+Math.round(h.width/2)-p:S-d-Math.round(h.width/2)+p}if(this.barCtx.lastActiveBarSerieIndex===r&&f.enabled){var C=new m(this.barCtx.ctx).getTextRects(this.getStackedTotalDataLabel({realIndex:r,j:s}),g.fontSize);A?(v=S-d+Math.round(C.width/2)-p-f.offsetX-15,k=\"end\"):v=S-d-Math.round(C.width/2)+p+f.offsetX+15,y=w+f.offsetY}return e.config.chart.stacked||(c<0?c=c+h.width+d:c+h.width/2>e.globals.gridWidth&&(c=e.globals.gridWidth-h.width-d)),{bcx:i,bcy:o,dataLabelsX:c,dataLabelsY:w,totalDataLabelsX:v,totalDataLabelsY:y,totalDataLabelsAnchor:k}}},{key:\"drawCalculatedDataLabels\",value:function(t){var i=t.x,a=t.y,s=t.val,r=t.i,o=t.j,n=t.textRects,l=t.barHeight,h=t.barWidth,c=t.dataLabelsConfig,d=this.w,g=\"rotate(0)\";\"vertical\"===d.config.plotOptions.bar.dataLabels.orientation&&(g=\"rotate(-90, \".concat(i,\", \").concat(a,\")\"));var u=new H(this.barCtx.ctx),f=new m(this.barCtx.ctx),p=c.formatter,x=null,b=d.globals.collapsedSeriesIndices.indexOf(r)>-1;if(c.enabled&&!b){x=f.group({class:\"apexcharts-data-labels\",transform:g});var v=\"\";void 0!==s&&(v=p(s,e(e({},d),{},{seriesIndex:r,dataPointIndex:o,w:d})));var y=d.globals.series[r][o]<0,w=d.config.plotOptions.bar.dataLabels.position;if(\"vertical\"===d.config.plotOptions.bar.dataLabels.orientation&&(\"top\"===w&&(c.textAnchor=y?\"end\":\"start\"),\"center\"===w&&(c.textAnchor=\"middle\"),\"bottom\"===w&&(c.textAnchor=y?\"end\":\"start\")),this.barCtx.isRangeBar&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels)h<f.getTextRects(v,parseFloat(c.style.fontSize)).width&&(v=\"\");d.config.chart.stacked&&this.barCtx.barOptions.dataLabels.hideOverflowingLabels&&(this.barCtx.isHorizontal?n.width/1.6>Math.abs(h)&&(v=\"\"):n.height/1.6>Math.abs(l)&&(v=\"\"));var k=e({},c);this.barCtx.isHorizontal&&s<0&&(\"start\"===c.textAnchor?k.textAnchor=\"end\":\"end\"===c.textAnchor&&(k.textAnchor=\"start\")),u.plotDataLabelsText({x:i,y:a,text:v,i:r,j:o,parent:x,dataLabelsConfig:k,alwaysDrawDataLabel:!0,offsetCorrection:!0})}return x}},{key:\"drawTotalDataLabels\",value:function(t){var e,i=t.x,a=t.y,s=t.val,r=t.realIndex,o=t.textAnchor,n=t.barTotalDataLabelsConfig,l=new m(this.barCtx.ctx);return n.enabled&&void 0!==i&&void 0!==a&&this.barCtx.lastActiveBarSerieIndex===r&&(e=l.drawText({x:i,y:a,foreColor:n.style.color,text:s,textAnchor:o,fontFamily:n.style.fontFamily,fontSize:n.style.fontSize,fontWeight:n.style.fontWeight})),e}}]),t}(),mt=function(){function t(e){a(this,t),this.w=e.w,this.barCtx=e}return r(t,[{key:\"initVariables\",value:function(t){var e=this.w;this.barCtx.series=t,this.barCtx.totalItems=0,this.barCtx.seriesLen=0,this.barCtx.visibleI=-1,this.barCtx.visibleItems=1;for(var i=0;i<t.length;i++)if(t[i].length>0&&(this.barCtx.seriesLen=this.barCtx.seriesLen+1,this.barCtx.totalItems+=t[i].length),e.globals.isXNumeric)for(var a=0;a<t[i].length;a++)e.globals.seriesX[i][a]>e.globals.minX&&e.globals.seriesX[i][a]<e.globals.maxX&&this.barCtx.visibleItems++;else this.barCtx.visibleItems=e.globals.dataPoints;0===this.barCtx.seriesLen&&(this.barCtx.seriesLen=1),this.barCtx.zeroSerieses=[],this.barCtx.radiusOnSeriesNumber=t.length-1,e.globals.comboCharts||this.checkZeroSeries({series:t})}},{key:\"initialPositions\",value:function(){var t,e,i,a,s,r,o,n,l=this.w,h=l.globals.dataPoints;this.barCtx.isRangeBar&&(h=l.globals.labels.length);var c=this.barCtx.seriesLen;if(l.config.plotOptions.bar.rangeBarGroupRows&&(c=1),this.barCtx.isHorizontal)s=(i=l.globals.gridHeight/h)/c,l.globals.isXNumeric&&(s=(i=l.globals.gridHeight/this.barCtx.totalItems)/this.barCtx.seriesLen),s=s*parseInt(this.barCtx.barOptions.barHeight,10)/100,n=this.barCtx.baseLineInvertedY+l.globals.padHorizontal+(this.barCtx.isReversed?l.globals.gridWidth:0)-(this.barCtx.isReversed?2*this.barCtx.baseLineInvertedY:0),e=(i-s*this.barCtx.seriesLen)/2;else{if(a=l.globals.gridWidth/this.barCtx.visibleItems,l.config.xaxis.convertedCatToNumeric&&(a=l.globals.gridWidth/l.globals.dataPoints),r=a/this.barCtx.seriesLen*parseInt(this.barCtx.barOptions.columnWidth,10)/100,l.globals.isXNumeric){var d=this.barCtx.xRatio;l.config.xaxis.convertedCatToNumeric&&(d=this.barCtx.initialXRatio),l.globals.minXDiff&&.5!==l.globals.minXDiff&&l.globals.minXDiff/d>0&&(a=l.globals.minXDiff/d),(r=a/this.barCtx.seriesLen*parseInt(this.barCtx.barOptions.columnWidth,10)/100)<1&&(r=1)}o=l.globals.gridHeight-this.barCtx.baseLineY[this.barCtx.yaxisIndex]-(this.barCtx.isReversed?l.globals.gridHeight:0)+(this.barCtx.isReversed?2*this.barCtx.baseLineY[this.barCtx.yaxisIndex]:0),t=l.globals.padHorizontal+(a-r*this.barCtx.seriesLen)/2}return{x:t,y:e,yDivision:i,xDivision:a,barHeight:s,barWidth:r,zeroH:o,zeroW:n}}},{key:\"getPathFillColor\",value:function(t,e,i,a){var s,r,o,n,l=this.w,h=new F(this.barCtx.ctx),c=null,d=this.barCtx.barOptions.distributed?i:e;this.barCtx.barOptions.colors.ranges.length>0&&this.barCtx.barOptions.colors.ranges.map((function(a){t[e][i]>=a.from&&t[e][i]<=a.to&&(c=a.color)}));return l.config.series[e].data[i]&&l.config.series[e].data[i].fillColor&&(c=l.config.series[e].data[i].fillColor),h.fillPath({seriesNumber:this.barCtx.barOptions.distributed?d:a,dataPointIndex:i,color:c,value:t[e][i],fillConfig:null===(s=l.config.series[e].data[i])||void 0===s?void 0:s.fill,fillType:null!==(r=l.config.series[e].data[i])&&void 0!==r&&null!==(o=r.fill)&&void 0!==o&&o.type?null===(n=l.config.series[e].data[i])||void 0===n?void 0:n.fill.type:l.config.fill.type})}},{key:\"getStrokeWidth\",value:function(t,e,i){var a=0,s=this.w;return void 0===this.barCtx.series[t][e]||null===this.barCtx.series[t][e]?this.barCtx.isNullValue=!0:this.barCtx.isNullValue=!1,s.config.stroke.show&&(this.barCtx.isNullValue||(a=Array.isArray(this.barCtx.strokeWidth)?this.barCtx.strokeWidth[i]:this.barCtx.strokeWidth)),a}},{key:\"barBackground\",value:function(t){var e=t.j,i=t.i,a=t.x1,s=t.x2,r=t.y1,o=t.y2,n=t.elSeries,l=this.w,h=new m(this.barCtx.ctx),c=new N(this.barCtx.ctx).getActiveConfigSeriesIndex();if(this.barCtx.barOptions.colors.backgroundBarColors.length>0&&c===i){e>=this.barCtx.barOptions.colors.backgroundBarColors.length&&(e%=this.barCtx.barOptions.colors.backgroundBarColors.length);var d=this.barCtx.barOptions.colors.backgroundBarColors[e],g=h.drawRect(void 0!==a?a:0,void 0!==r?r:0,void 0!==s?s:l.globals.gridWidth,void 0!==o?o:l.globals.gridHeight,this.barCtx.barOptions.colors.backgroundBarRadius,d,this.barCtx.barOptions.colors.backgroundBarOpacity);n.add(g),g.node.classList.add(\"apexcharts-backgroundBar\")}}},{key:\"getColumnPaths\",value:function(t){var e=t.barWidth,i=t.barXPosition,a=t.yRatio,s=t.y1,r=t.y2,o=t.strokeWidth,n=t.series,l=t.realIndex,h=t.i,c=t.j,d=t.w,g=new m(this.barCtx.ctx);(o=Array.isArray(o)?o[l]:o)||(o=0);var u={barWidth:e,strokeWidth:o,yRatio:a,barXPosition:i,y1:s,y2:r},f=this.getRoundedBars(d,u,n,h,c),p=i,x=i+e,b=g.move(p,s),v=g.move(p,s),y=g.line(x-o,s);return d.globals.previousPaths.length>0&&(v=this.barCtx.getPreviousPath(l,c,!1)),b=b+g.line(p,f.y2)+f.pathWithRadius+g.line(x-o,f.y2)+y+y+\"z\",v=v+g.line(p,s)+y+y+y+y+y+g.line(p,s),d.config.chart.stacked&&(this.barCtx.yArrj.push(f.y2WithRadius),this.barCtx.yArrjF.push(Math.abs(s-f.y2WithRadius)),this.barCtx.yArrjVal.push(this.barCtx.series[h][c])),{pathTo:b,pathFrom:v}}},{key:\"getBarpaths\",value:function(t){var e=t.barYPosition,i=t.barHeight,a=t.x1,s=t.x2,r=t.strokeWidth,o=t.series,n=t.realIndex,l=t.i,h=t.j,c=t.w,d=new m(this.barCtx.ctx);(r=Array.isArray(r)?r[n]:r)||(r=0);var g={barHeight:i,strokeWidth:r,barYPosition:e,x2:s,x1:a},u=this.getRoundedBars(c,g,o,l,h),f=d.move(a,e),p=d.move(a,e);c.globals.previousPaths.length>0&&(p=this.barCtx.getPreviousPath(n,h,!1));var x=e,b=e+i,v=d.line(a,b-r);return f=f+d.line(u.x2,x)+u.pathWithRadius+d.line(u.x2,b-r)+v+v+\"z\",p=p+d.line(a,x)+v+v+v+v+v+d.line(a,x),c.config.chart.stacked&&(this.barCtx.xArrj.push(u.x2WithRadius),this.barCtx.xArrjF.push(Math.abs(a-u.x2WithRadius)),this.barCtx.xArrjVal.push(this.barCtx.series[l][h])),{pathTo:f,pathFrom:p}}},{key:\"getRoundedBars\",value:function(t,e,i,a,s){var r=new m(this.barCtx.ctx),o=0,n=t.config.plotOptions.bar.borderRadius,l=Array.isArray(n);l?o=n[a>n.length-1?n.length-1:a]:o=n;if(t.config.chart.stacked&&i.length>1&&a!==this.barCtx.radiusOnSeriesNumber&&!l&&(o=0),this.barCtx.isHorizontal){var h=\"\",c=e.x2;if(Math.abs(e.x1-e.x2)<o&&(o=Math.abs(e.x1-e.x2)),void 0!==i[a][s]||null!==i[a][s]){var d=this.barCtx.isReversed?i[a][s]>0:i[a][s]<0;d&&(o*=-1),c-=o,h=r.quadraticCurve(c+o,e.barYPosition,c+o,e.barYPosition+(d?-1*o:o))+r.line(c+o,e.barYPosition+e.barHeight-e.strokeWidth-(d?-1*o:o))+r.quadraticCurve(c+o,e.barYPosition+e.barHeight-e.strokeWidth,c,e.barYPosition+e.barHeight-e.strokeWidth)}return{pathWithRadius:h,x2WithRadius:c+o,x2:c}}var g=\"\",u=e.y2;if(Math.abs(e.y1-e.y2)<o&&(o=Math.abs(e.y1-e.y2)),void 0!==i[a][s]||null!==i[a][s]){var f=i[a][s]<0;f&&(o*=-1),u+=o,g=r.quadraticCurve(e.barXPosition,u-o,e.barXPosition+(f?-1*o:o),u-o)+r.line(e.barXPosition+e.barWidth-e.strokeWidth-(f?-1*o:o),u-o)+r.quadraticCurve(e.barXPosition+e.barWidth-e.strokeWidth,u-o,e.barXPosition+e.barWidth-e.strokeWidth,u)}return{pathWithRadius:g,y2WithRadius:u-o,y2:u}}},{key:\"checkZeroSeries\",value:function(t){for(var e=t.series,i=this.w,a=0;a<e.length;a++){for(var s=0,r=0;r<e[i.globals.maxValsInArrayIndex].length;r++)s+=e[a][r];0===s&&this.barCtx.zeroSerieses.push(a)}for(var o=e.length-1;o>=0;o--)this.barCtx.zeroSerieses.indexOf(o)>-1&&o===this.radiusOnSeriesNumber&&(this.barCtx.radiusOnSeriesNumber-=1);for(var n=e.length-1;n>=0;n--)i.globals.collapsedSeriesIndices.indexOf(this.barCtx.radiusOnSeriesNumber)>-1&&(this.barCtx.radiusOnSeriesNumber-=1)}},{key:\"getXForValue\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=i?e:null;return null!=t&&(a=e+t/this.barCtx.invertedYRatio-2*(this.barCtx.isReversed?t/this.barCtx.invertedYRatio:0)),a}},{key:\"getYForValue\",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=i?e:null;return null!=t&&(a=e-t/this.barCtx.yRatio[this.barCtx.yaxisIndex]+2*(this.barCtx.isReversed?t/this.barCtx.yRatio[this.barCtx.yaxisIndex]:0)),a}},{key:\"getGoalValues\",value:function(t,e,i,a,s){var r=this,n=this.w,l=[];return n.globals.seriesGoals[a]&&n.globals.seriesGoals[a][s]&&Array.isArray(n.globals.seriesGoals[a][s])&&n.globals.seriesGoals[a][s].forEach((function(a){var s;l.push((o(s={},t,\"x\"===t?r.getXForValue(a.value,e,!1):r.getYForValue(a.value,i,!1)),o(s,\"attrs\",a),s))})),l}},{key:\"drawGoalLine\",value:function(t){var e=t.barXPosition,i=t.barYPosition,a=t.goalX,s=t.goalY,r=t.barWidth,o=t.barHeight,n=new m(this.barCtx.ctx),l=n.group({className:\"apexcharts-bar-goals-groups\"}),h=null;return this.barCtx.isHorizontal?Array.isArray(a)&&a.forEach((function(t){var e=void 0!==t.attrs.strokeHeight?t.attrs.strokeHeight:o/2,a=i+e+o/2;h=n.drawLine(t.x,a-2*e,t.x,a,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeWidth?t.attrs.strokeWidth:2,t.attrs.strokeLineCap),l.add(h)})):Array.isArray(s)&&s.forEach((function(t){var i=void 0!==t.attrs.strokeWidth?t.attrs.strokeWidth:r/2,a=e+i+r/2;h=n.drawLine(a-2*i,t.y,a,t.y,t.attrs.strokeColor?t.attrs.strokeColor:void 0,t.attrs.strokeDashArray,t.attrs.strokeHeight?t.attrs.strokeHeight:2,t.attrs.strokeLineCap),l.add(h)})),l}}]),t}(),yt=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w;var s=this.w;this.barOptions=s.config.plotOptions.bar,this.isHorizontal=this.barOptions.horizontal,this.strokeWidth=s.config.stroke.width,this.isNullValue=!1,this.isRangeBar=s.globals.seriesRange.length&&this.isHorizontal,this.xyRatios=i,null!==this.xyRatios&&(this.xRatio=i.xRatio,this.initialXRatio=i.initialXRatio,this.yRatio=i.yRatio,this.invertedXRatio=i.invertedXRatio,this.invertedYRatio=i.invertedYRatio,this.baseLineY=i.baseLineY,this.baseLineInvertedY=i.baseLineInvertedY),this.yaxisIndex=0,this.seriesLen=0;var r=new N(this.ctx);this.lastActiveBarSerieIndex=r.getActiveConfigSeriesIndex(\"desc\",[\"bar\",\"column\"]);var o=r.getBarSeriesIndices(),n=new y(this.ctx);this.stackedSeriesTotals=n.getStackedSeriesTotals(this.w.config.series.map((function(t,e){return-1===o.indexOf(e)?e:-1})).filter((function(t){return-1!==t}))),this.barHelpers=new mt(this)}return r(t,[{key:\"draw\",value:function(t,i){var a=this.w,s=new m(this.ctx),r=new y(this.ctx,a);t=r.getLogSeries(t),this.series=t,this.yRatio=r.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);var o=s.group({class:\"apexcharts-bar-series apexcharts-plot-series\"});a.config.dataLabels.enabled&&this.totalItems>this.barOptions.dataLabels.maxItems&&console.warn(\"WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.\");for(var n=0,l=0;n<t.length;n++,l++){var h,c,d,g,u=void 0,f=void 0,p=[],b=[],v=a.globals.comboCharts?i[n]:n,w=s.group({class:\"apexcharts-series\",rel:n+1,seriesName:x.escapeString(a.globals.seriesNames[v]),\"data:realIndex\":v});this.ctx.series.addCollapsedClassToSeries(w,v),t[n].length>0&&(this.visibleI=this.visibleI+1);var k=0,A=0;this.yRatio.length>1&&(this.yaxisIndex=v),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed;var S=this.barHelpers.initialPositions();f=S.y,k=S.barHeight,c=S.yDivision,g=S.zeroW,u=S.x,A=S.barWidth,h=S.xDivision,d=S.zeroH,this.horizontal||b.push(u+A/2);for(var C=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":v}),L=s.group({class:\"apexcharts-bar-goals-markers\",style:\"pointer-events: none\"}),P=0;P<a.globals.dataPoints;P++){var T=this.barHelpers.getStrokeWidth(n,P,v),M=null,I={indexes:{i:n,j:P,realIndex:v,bc:l},x:u,y:f,strokeWidth:T,elSeries:w};this.isHorizontal?(M=this.drawBarPaths(e(e({},I),{},{barHeight:k,zeroW:g,yDivision:c})),A=this.series[n][P]/this.invertedYRatio):(M=this.drawColumnPaths(e(e({},I),{},{xDivision:h,barWidth:A,zeroH:d})),k=this.series[n][P]/this.yRatio[this.yaxisIndex]);var X=this.barHelpers.drawGoalLine({barXPosition:M.barXPosition,barYPosition:M.barYPosition,goalX:M.goalX,goalY:M.goalY,barHeight:k,barWidth:A});X&&L.add(X),f=M.y,u=M.x,P>0&&b.push(u+A/2),p.push(f);var z=this.barHelpers.getPathFillColor(t,n,P,v);this.renderSeries({realIndex:v,pathFill:z,j:P,i:n,pathFrom:M.pathFrom,pathTo:M.pathTo,strokeWidth:T,elSeries:w,x:u,y:f,series:t,barHeight:k,barWidth:A,elDataLabelsWrap:C,elGoalsMarkers:L,visibleSeries:this.visibleI,type:\"bar\"})}a.globals.seriesXvalues[v]=b,a.globals.seriesYvalues[v]=p,o.add(w)}return o}},{key:\"renderSeries\",value:function(t){var e=t.realIndex,i=t.pathFill,a=t.lineFill,s=t.j,r=t.i,o=t.pathFrom,n=t.pathTo,l=t.strokeWidth,h=t.elSeries,c=t.x,d=t.y,g=t.y1,u=t.y2,f=t.series,p=t.barHeight,x=t.barWidth,b=t.barYPosition,y=t.elDataLabelsWrap,w=t.elGoalsMarkers,k=t.visibleSeries,A=t.type,S=this.w,C=new m(this.ctx);a||(a=this.barOptions.distributed?S.globals.stroke.colors[s]:S.globals.stroke.colors[e]),S.config.series[r].data[s]&&S.config.series[r].data[s].strokeColor&&(a=S.config.series[r].data[s].strokeColor),this.isNullValue&&(i=\"none\");var L=s/S.config.chart.animations.animateGradually.delay*(S.config.chart.animations.speed/S.globals.dataPoints)/2.4,P=C.renderPaths({i:r,j:s,realIndex:e,pathFrom:o,pathTo:n,stroke:a,strokeWidth:l,strokeLineCap:S.config.stroke.lineCap,fill:i,animationDelay:L,initialSpeed:S.config.chart.animations.speed,dataChangeSpeed:S.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-\".concat(A,\"-area\")});P.attr(\"clip-path\",\"url(#gridRectMask\".concat(S.globals.cuid,\")\"));var T=S.config.forecastDataPoints;T.count>0&&s>=S.globals.dataPoints-T.count&&(P.node.setAttribute(\"stroke-dasharray\",T.dashArray),P.node.setAttribute(\"stroke-width\",T.strokeWidth),P.node.setAttribute(\"fill-opacity\",T.fillOpacity)),void 0!==g&&void 0!==u&&(P.attr(\"data-range-y1\",g),P.attr(\"data-range-y2\",u)),new v(this.ctx).setSelectionFilter(P,e,s),h.add(P);var M=new vt(this).handleBarDataLabels({x:c,y:d,y1:g,y2:u,i:r,j:s,series:f,realIndex:e,barHeight:p,barWidth:x,barYPosition:b,renderedPath:P,visibleSeries:k});return null!==M.dataLabels&&y.add(M.dataLabels),M.totalDataLabels&&y.add(M.totalDataLabels),h.add(y),w&&h.add(w),h}},{key:\"drawBarPaths\",value:function(t){var e=t.indexes,i=t.barHeight,a=t.strokeWidth,s=t.zeroW,r=t.x,o=t.y,n=t.yDivision,l=t.elSeries,h=this.w,c=e.i,d=e.j;h.globals.isXNumeric&&(o=(h.globals.seriesX[c][d]-h.globals.minX)/this.invertedXRatio-i);var g=o+i*this.visibleI;r=this.barHelpers.getXForValue(this.series[c][d],s);var u=this.barHelpers.getBarpaths({barYPosition:g,barHeight:i,x1:s,x2:r,strokeWidth:a,series:this.series,realIndex:e.realIndex,i:c,j:d,w:h});return h.globals.isXNumeric||(o+=n),this.barHelpers.barBackground({j:d,i:c,y1:g-i*this.visibleI,y2:i*this.seriesLen,elSeries:l}),{pathTo:u.pathTo,pathFrom:u.pathFrom,x:r,y:o,goalX:this.barHelpers.getGoalValues(\"x\",s,null,c,d),barYPosition:g}}},{key:\"drawColumnPaths\",value:function(t){var e=t.indexes,i=t.x,a=t.y,s=t.xDivision,r=t.barWidth,o=t.zeroH,n=t.strokeWidth,l=t.elSeries,h=this.w,c=e.realIndex,d=e.i,g=e.j,u=e.bc;if(h.globals.isXNumeric){var f=c;h.globals.seriesX[c].length||(f=h.globals.maxValsInArrayIndex),i=(h.globals.seriesX[f][g]-h.globals.minX)/this.xRatio-r*this.seriesLen/2}var p=i+r*this.visibleI;a=this.barHelpers.getYForValue(this.series[d][g],o);var x=this.barHelpers.getColumnPaths({barXPosition:p,barWidth:r,y1:o,y2:a,strokeWidth:n,series:this.series,realIndex:e.realIndex,i:d,j:g,w:h});return h.globals.isXNumeric||(i+=s),this.barHelpers.barBackground({bc:u,j:g,i:d,x1:p-n/2-r*this.visibleI,x2:r*this.seriesLen+n/2,elSeries:l}),{pathTo:x.pathTo,pathFrom:x.pathFrom,x:i,y:a,goalY:this.barHelpers.getGoalValues(\"y\",null,o,d,g),barXPosition:p}}},{key:\"getPreviousPath\",value:function(t,e){for(var i,a=this.w,s=0;s<a.globals.previousPaths.length;s++){var r=a.globals.previousPaths[s];r.paths&&r.paths.length>0&&parseInt(r.realIndex,10)===parseInt(t,10)&&void 0!==a.globals.previousPaths[s].paths[e]&&(i=a.globals.previousPaths[s].paths[e].d)}return i}}]),t}(),wt=function(t){n(s,t);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\"draw\",value:function(t,i){var a=this,s=this.w;this.graphics=new m(this.ctx),this.bar=new yt(this.ctx,this.xyRatios);var r=new y(this.ctx,s);t=r.getLogSeries(t),this.yRatio=r.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t),\"100%\"===s.config.chart.stackType&&(t=s.globals.seriesPercent.slice()),this.series=t,this.totalItems=0,this.prevY=[],this.prevX=[],this.prevYF=[],this.prevXF=[],this.prevYVal=[],this.prevXVal=[],this.xArrj=[],this.xArrjF=[],this.xArrjVal=[],this.yArrj=[],this.yArrjF=[],this.yArrjVal=[];for(var o=0;o<t.length;o++)t[o].length>0&&(this.totalItems+=t[o].length);for(var n=this.graphics.group({class:\"apexcharts-bar-series apexcharts-plot-series\"}),l=0,h=0,c=function(r,o){var c=void 0,d=void 0,g=void 0,u=void 0,f=[],p=[],b=s.globals.comboCharts?i[r]:r;a.yRatio.length>1&&(a.yaxisIndex=b),a.isReversed=s.config.yaxis[a.yaxisIndex]&&s.config.yaxis[a.yaxisIndex].reversed;var v=a.graphics.group({class:\"apexcharts-series\",seriesName:x.escapeString(s.globals.seriesNames[b]),rel:r+1,\"data:realIndex\":b});a.ctx.series.addCollapsedClassToSeries(v,b);var m=a.graphics.group({class:\"apexcharts-datalabels\",\"data:realIndex\":b}),y=a.graphics.group({class:\"apexcharts-bar-goals-markers\",style:\"pointer-events: none\"}),w=0,k=0,A=a.initialPositions(l,h,c,d,g,u);h=A.y,w=A.barHeight,d=A.yDivision,u=A.zeroW,l=A.x,k=A.barWidth,c=A.xDivision,g=A.zeroH,a.yArrj=[],a.yArrjF=[],a.yArrjVal=[],a.xArrj=[],a.xArrjF=[],a.xArrjVal=[],1===a.prevY.length&&a.prevY[0].every((function(t){return isNaN(t)}))&&(a.prevY[0]=a.prevY[0].map((function(t){return g})),a.prevYF[0]=a.prevYF[0].map((function(t){return 0})));for(var S=0;S<s.globals.dataPoints;S++){var C=a.barHelpers.getStrokeWidth(r,S,b),L={indexes:{i:r,j:S,realIndex:b,bc:o},strokeWidth:C,x:l,y:h,elSeries:v},P=null;a.isHorizontal?(P=a.drawStackedBarPaths(e(e({},L),{},{zeroW:u,barHeight:w,yDivision:d})),k=a.series[r][S]/a.invertedYRatio):(P=a.drawStackedColumnPaths(e(e({},L),{},{xDivision:c,barWidth:k,zeroH:g})),w=a.series[r][S]/a.yRatio[a.yaxisIndex]);var T=a.barHelpers.drawGoalLine({barXPosition:P.barXPosition,barYPosition:P.barYPosition,goalX:P.goalX,goalY:P.goalY,barHeight:w,barWidth:k});T&&y.add(T),h=P.y,l=P.x,f.push(l),p.push(h);var M=a.barHelpers.getPathFillColor(t,r,S,b);v=a.renderSeries({realIndex:b,pathFill:M,j:S,i:r,pathFrom:P.pathFrom,pathTo:P.pathTo,strokeWidth:C,elSeries:v,x:l,y:h,series:t,barHeight:w,barWidth:k,elDataLabelsWrap:m,elGoalsMarkers:y,type:\"bar\",visibleSeries:0})}s.globals.seriesXvalues[b]=f,s.globals.seriesYvalues[b]=p,a.prevY.push(a.yArrj),a.prevYF.push(a.yArrjF),a.prevYVal.push(a.yArrjVal),a.prevX.push(a.xArrj),a.prevXF.push(a.xArrjF),a.prevXVal.push(a.xArrjVal),n.add(v)},d=0,g=0;d<t.length;d++,g++)c(d,g);return n}},{key:\"initialPositions\",value:function(t,e,i,a,s,r){var o,n,l=this.w;return this.isHorizontal?(o=(o=a=l.globals.gridHeight/l.globals.dataPoints)*parseInt(l.config.plotOptions.bar.barHeight,10)/100,r=this.baseLineInvertedY+l.globals.padHorizontal+(this.isReversed?l.globals.gridWidth:0)-(this.isReversed?2*this.baseLineInvertedY:0),e=(a-o)/2):(n=i=l.globals.gridWidth/l.globals.dataPoints,n=l.globals.isXNumeric&&l.globals.dataPoints>1?(i=l.globals.minXDiff/this.xRatio)*parseInt(this.barOptions.columnWidth,10)/100:n*parseInt(l.config.plotOptions.bar.columnWidth,10)/100,s=l.globals.gridHeight-this.baseLineY[this.yaxisIndex]+(this.isReversed?l.globals.gridHeight:0)-(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),t=l.globals.padHorizontal+(i-n)/2),{x:t,y:e,yDivision:a,xDivision:i,barHeight:o,barWidth:n,zeroH:s,zeroW:r}}},{key:\"drawStackedBarPaths\",value:function(t){for(var e,i=t.indexes,a=t.barHeight,s=t.strokeWidth,r=t.zeroW,o=t.x,n=t.y,l=t.yDivision,h=t.elSeries,c=this.w,d=n,g=i.i,u=i.j,f=0,p=0;p<this.prevXF.length;p++)f+=this.prevXF[p][u];if(g>0){var x=r;this.prevXVal[g-1][u]<0?x=this.series[g][u]>=0?this.prevX[g-1][u]+f-2*(this.isReversed?f:0):this.prevX[g-1][u]:this.prevXVal[g-1][u]>=0&&(x=this.series[g][u]>=0?this.prevX[g-1][u]:this.prevX[g-1][u]-f+2*(this.isReversed?f:0)),e=x}else e=r;o=null===this.series[g][u]?e:e+this.series[g][u]/this.invertedYRatio-2*(this.isReversed?this.series[g][u]/this.invertedYRatio:0);var b=this.barHelpers.getBarpaths({barYPosition:d,barHeight:a,x1:e,x2:o,strokeWidth:s,series:this.series,realIndex:i.realIndex,i:g,j:u,w:c});return this.barHelpers.barBackground({j:u,i:g,y1:d,y2:a,elSeries:h}),n+=l,{pathTo:b.pathTo,pathFrom:b.pathFrom,goalX:this.barHelpers.getGoalValues(\"x\",r,null,g,u),barYPosition:d,x:o,y:n}}},{key:\"drawStackedColumnPaths\",value:function(t){var e=t.indexes,i=t.x,a=t.y,s=t.xDivision,r=t.barWidth,o=t.zeroH;t.strokeWidth;var n=t.elSeries,l=this.w,h=e.i,c=e.j,d=e.bc;if(l.globals.isXNumeric){var g=l.globals.seriesX[h][c];g||(g=0),i=(g-l.globals.minX)/this.xRatio-r/2}for(var u,f=i,p=0,x=0;x<this.prevYF.length;x++)p+=isNaN(this.prevYF[x][c])?0:this.prevYF[x][c];if(h>0&&!l.globals.isXNumeric||h>0&&l.globals.isXNumeric&&l.globals.seriesX[h-1][c]===l.globals.seriesX[h][c]){var b,v,m=Math.min(this.yRatio.length+1,h+1);if(void 0!==this.prevY[h-1])for(var y=1;y<m;y++)if(!isNaN(this.prevY[h-y][c])){v=this.prevY[h-y][c];break}for(var w=1;w<m;w++){if(this.prevYVal[h-w][c]<0){b=this.series[h][c]>=0?v-p+2*(this.isReversed?p:0):v;break}if(this.prevYVal[h-w][c]>=0){b=this.series[h][c]>=0?v:v+p-2*(this.isReversed?p:0);break}}void 0===b&&(b=l.globals.gridHeight),u=this.prevYF[0].every((function(t){return 0===t}))&&this.prevYF.slice(1,h).every((function(t){return t.every((function(t){return isNaN(t)}))}))?o:b}else u=o;a=u-this.series[h][c]/this.yRatio[this.yaxisIndex]+2*(this.isReversed?this.series[h][c]/this.yRatio[this.yaxisIndex]:0);var k=this.barHelpers.getColumnPaths({barXPosition:f,barWidth:r,y1:u,y2:a,yRatio:this.yRatio[this.yaxisIndex],strokeWidth:this.strokeWidth,series:this.series,realIndex:e.realIndex,i:h,j:c,w:l});return this.barHelpers.barBackground({bc:d,j:c,i:h,x1:f,x2:r,elSeries:n}),i+=s,{pathTo:k.pathTo,pathFrom:k.pathFrom,goalY:this.barHelpers.getGoalValues(\"y\",null,o,h,c),barXPosition:f,x:l.globals.isXNumeric?i-s:i,y:a}}}]),s}(yt),kt=function(t){n(s,t);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\"draw\",value:function(t,i){var a=this,s=this.w,r=new m(this.ctx),o=new F(this.ctx);this.candlestickOptions=this.w.config.plotOptions.candlestick,this.boxOptions=this.w.config.plotOptions.boxPlot,this.isHorizontal=s.config.plotOptions.bar.horizontal;var n=new y(this.ctx,s);t=n.getLogSeries(t),this.series=t,this.yRatio=n.getLogYRatios(this.yRatio),this.barHelpers.initVariables(t);for(var l=r.group({class:\"apexcharts-\".concat(s.config.chart.type,\"-series apexcharts-plot-series\")}),h=function(n){a.isBoxPlot=\"boxPlot\"===s.config.chart.type||\"boxPlot\"===s.config.series[n].type;var h,c,d,g,u=void 0,f=void 0,p=[],b=[],v=s.globals.comboCharts?i[n]:n,m=r.group({class:\"apexcharts-series\",seriesName:x.escapeString(s.globals.seriesNames[v]),rel:n+1,\"data:realIndex\":v});a.ctx.series.addCollapsedClassToSeries(m,v),t[n].length>0&&(a.visibleI=a.visibleI+1);var y,w;a.yRatio.length>1&&(a.yaxisIndex=v);var k=a.barHelpers.initialPositions();f=k.y,y=k.barHeight,c=k.yDivision,g=k.zeroW,u=k.x,w=k.barWidth,h=k.xDivision,d=k.zeroH,b.push(u+w/2);for(var A=r.group({class:\"apexcharts-datalabels\",\"data:realIndex\":v}),S=function(i){var r=a.barHelpers.getStrokeWidth(n,i,v),l=null,x={indexes:{i:n,j:i,realIndex:v},x:u,y:f,strokeWidth:r,elSeries:m};l=a.isHorizontal?a.drawHorizontalBoxPaths(e(e({},x),{},{yDivision:c,barHeight:y,zeroW:g})):a.drawVerticalBoxPaths(e(e({},x),{},{xDivision:h,barWidth:w,zeroH:d})),f=l.y,u=l.x,i>0&&b.push(u+w/2),p.push(f),l.pathTo.forEach((function(e,h){var c=!a.isBoxPlot&&a.candlestickOptions.wick.useFillColor?l.color[h]:s.globals.stroke.colors[n],d=o.fillPath({seriesNumber:v,dataPointIndex:i,color:l.color[h],value:t[n][i]});a.renderSeries({realIndex:v,pathFill:d,lineFill:c,j:i,i:n,pathFrom:l.pathFrom,pathTo:e,strokeWidth:r,elSeries:m,x:u,y:f,series:t,barHeight:y,barWidth:w,elDataLabelsWrap:A,visibleSeries:a.visibleI,type:s.config.chart.type})}))},C=0;C<s.globals.dataPoints;C++)S(C);s.globals.seriesXvalues[v]=b,s.globals.seriesYvalues[v]=p,l.add(m)},c=0;c<t.length;c++)h(c);return l}},{key:\"drawVerticalBoxPaths\",value:function(t){var e=t.indexes,i=t.x;t.y;var a=t.xDivision,s=t.barWidth,r=t.zeroH,o=t.strokeWidth,n=this.w,l=new m(this.ctx),h=e.i,c=e.j,d=!0,g=n.config.plotOptions.candlestick.colors.upward,u=n.config.plotOptions.candlestick.colors.downward,f=\"\";this.isBoxPlot&&(f=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var p=this.yRatio[this.yaxisIndex],x=e.realIndex,b=this.getOHLCValue(x,c),v=r,y=r;b.o>b.c&&(d=!1);var w=Math.min(b.o,b.c),k=Math.max(b.o,b.c),A=b.m;n.globals.isXNumeric&&(i=(n.globals.seriesX[x][c]-n.globals.minX)/this.xRatio-s/2);var S=i+s*this.visibleI;void 0===this.series[h][c]||null===this.series[h][c]?(w=r,k=r):(w=r-w/p,k=r-k/p,v=r-b.h/p,y=r-b.l/p,A=r-b.m/p);var C=l.move(S,r),L=l.move(S+s/2,w);return n.globals.previousPaths.length>0&&(L=this.getPreviousPath(x,c,!0)),C=this.isBoxPlot?[l.move(S,w)+l.line(S+s/2,w)+l.line(S+s/2,v)+l.line(S+s/4,v)+l.line(S+s-s/4,v)+l.line(S+s/2,v)+l.line(S+s/2,w)+l.line(S+s,w)+l.line(S+s,A)+l.line(S,A)+l.line(S,w+o/2),l.move(S,A)+l.line(S+s,A)+l.line(S+s,k)+l.line(S+s/2,k)+l.line(S+s/2,y)+l.line(S+s-s/4,y)+l.line(S+s/4,y)+l.line(S+s/2,y)+l.line(S+s/2,k)+l.line(S,k)+l.line(S,A)+\"z\"]:[l.move(S,k)+l.line(S+s/2,k)+l.line(S+s/2,v)+l.line(S+s/2,k)+l.line(S+s,k)+l.line(S+s,w)+l.line(S+s/2,w)+l.line(S+s/2,y)+l.line(S+s/2,w)+l.line(S,w)+l.line(S,k-o/2)],L+=l.move(S,w),n.globals.isXNumeric||(i+=a),{pathTo:C,pathFrom:L,x:i,y:k,barXPosition:S,color:this.isBoxPlot?f:d?[g]:[u]}}},{key:\"drawHorizontalBoxPaths\",value:function(t){var e=t.indexes;t.x;var i=t.y,a=t.yDivision,s=t.barHeight,r=t.zeroW,o=t.strokeWidth,n=this.w,l=new m(this.ctx),h=e.i,c=e.j,d=this.boxOptions.colors.lower;this.isBoxPlot&&(d=[this.boxOptions.colors.lower,this.boxOptions.colors.upper]);var g=this.invertedYRatio,u=e.realIndex,f=this.getOHLCValue(u,c),p=r,x=r,b=Math.min(f.o,f.c),v=Math.max(f.o,f.c),y=f.m;n.globals.isXNumeric&&(i=(n.globals.seriesX[u][c]-n.globals.minX)/this.invertedXRatio-s/2);var w=i+s*this.visibleI;void 0===this.series[h][c]||null===this.series[h][c]?(b=r,v=r):(b=r+b/g,v=r+v/g,p=r+f.h/g,x=r+f.l/g,y=r+f.m/g);var k=l.move(r,w),A=l.move(b,w+s/2);return n.globals.previousPaths.length>0&&(A=this.getPreviousPath(u,c,!0)),k=[l.move(b,w)+l.line(b,w+s/2)+l.line(p,w+s/2)+l.line(p,w+s/2-s/4)+l.line(p,w+s/2+s/4)+l.line(p,w+s/2)+l.line(b,w+s/2)+l.line(b,w+s)+l.line(y,w+s)+l.line(y,w)+l.line(b+o/2,w),l.move(y,w)+l.line(y,w+s)+l.line(v,w+s)+l.line(v,w+s/2)+l.line(x,w+s/2)+l.line(x,w+s-s/4)+l.line(x,w+s/4)+l.line(x,w+s/2)+l.line(v,w+s/2)+l.line(v,w)+l.line(y,w)+\"z\"],A+=l.move(b,w),n.globals.isXNumeric||(i+=a),{pathTo:k,pathFrom:A,x:v,y:i,barYPosition:w,color:d}}},{key:\"getOHLCValue\",value:function(t,e){var i=this.w;return{o:this.isBoxPlot?i.globals.seriesCandleH[t][e]:i.globals.seriesCandleO[t][e],h:this.isBoxPlot?i.globals.seriesCandleO[t][e]:i.globals.seriesCandleH[t][e],m:i.globals.seriesCandleM[t][e],l:this.isBoxPlot?i.globals.seriesCandleC[t][e]:i.globals.seriesCandleL[t][e],c:this.isBoxPlot?i.globals.seriesCandleL[t][e]:i.globals.seriesCandleC[t][e]}}}]),s}(yt),At=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"checkColorRange\",value:function(){var t=this.w,e=!1,i=t.config.plotOptions[t.config.chart.type];return i.colorScale.ranges.length>0&&i.colorScale.ranges.map((function(t,i){t.from<=0&&(e=!0)})),e}},{key:\"getShadeColor\",value:function(t,e,i,a){var s=this.w,r=1,o=s.config.plotOptions[t].shadeIntensity,n=this.determineColor(t,e,i);s.globals.hasNegs||a?r=s.config.plotOptions[t].reverseNegativeShade?n.percent<0?n.percent/100*(1.25*o):(1-n.percent/100)*(1.25*o):n.percent<=0?1-(1+n.percent/100)*o:(1-n.percent/100)*o:(r=1-n.percent/100,\"treemap\"===t&&(r=(1-n.percent/100)*(1.25*o)));var l=n.color,h=new x;return s.config.plotOptions[t].enableShades&&(l=\"dark\"===this.w.config.theme.mode?x.hexToRgba(h.shadeColor(-1*r,n.color),s.config.fill.opacity):x.hexToRgba(h.shadeColor(r,n.color),s.config.fill.opacity)),{color:l,colorProps:n}}},{key:\"determineColor\",value:function(t,e,i){var a=this.w,s=a.globals.series[e][i],r=a.config.plotOptions[t],o=r.colorScale.inverse?i:e;r.distributed&&\"treemap\"===a.config.chart.type&&(o=i);var n=a.globals.colors[o],l=null,h=Math.min.apply(Math,u(a.globals.series[e])),c=Math.max.apply(Math,u(a.globals.series[e]));r.distributed||\"heatmap\"!==t||(h=a.globals.minY,c=a.globals.maxY),void 0!==r.colorScale.min&&(h=r.colorScale.min<a.globals.minY?r.colorScale.min:a.globals.minY,c=r.colorScale.max>a.globals.maxY?r.colorScale.max:a.globals.maxY);var d=Math.abs(c)+Math.abs(h),g=100*s/(0===d?d-1e-6:d);r.colorScale.ranges.length>0&&r.colorScale.ranges.map((function(t,e){if(s>=t.from&&s<=t.to){n=t.color,l=t.foreColor?t.foreColor:null,h=t.from,c=t.to;var i=Math.abs(c)+Math.abs(h);g=100*s/(0===i?i-1e-6:i)}}));return{color:n,foreColor:l,percent:g}}},{key:\"calculateDataLabels\",value:function(t){var e=t.text,i=t.x,a=t.y,s=t.i,r=t.j,o=t.colorProps,n=t.fontSize,l=this.w.config.dataLabels,h=new m(this.ctx),c=new H(this.ctx),d=null;if(l.enabled){d=h.group({class:\"apexcharts-data-labels\"});var g=l.offsetX,u=l.offsetY,f=i+g,p=a+parseFloat(l.style.fontSize)/3+u;c.plotDataLabelsText({x:f,y:p,text:e,i:s,j:r,color:o.foreColor,parent:d,fontSize:n,dataLabelsConfig:l})}return d}},{key:\"addListeners\",value:function(t){var e=new m(this.ctx);t.node.addEventListener(\"mouseenter\",e.pathMouseEnter.bind(this,t)),t.node.addEventListener(\"mouseleave\",e.pathMouseLeave.bind(this,t)),t.node.addEventListener(\"mousedown\",e.pathMouseDown.bind(this,t))}}]),t}(),St=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.xRatio=i.xRatio,this.yRatio=i.yRatio,this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.helpers=new At(e),this.rectRadius=this.w.config.plotOptions.heatmap.radius,this.strokeWidth=this.w.config.stroke.show?this.w.config.stroke.width:0}return r(t,[{key:\"draw\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-heatmap\"});a.attr(\"clip-path\",\"url(#gridRectMask\".concat(e.globals.cuid,\")\"));var s=e.globals.gridWidth/e.globals.dataPoints,r=e.globals.gridHeight/e.globals.series.length,o=0,n=!1;this.negRange=this.helpers.checkColorRange();var l=t.slice();e.config.yaxis[0].reversed&&(n=!0,l.reverse());for(var h=n?0:l.length-1;n?h<l.length:h>=0;n?h++:h--){var c=i.group({class:\"apexcharts-series apexcharts-heatmap-series\",seriesName:x.escapeString(e.globals.seriesNames[h]),rel:h+1,\"data:realIndex\":h});if(this.ctx.series.addCollapsedClassToSeries(c,h),e.config.chart.dropShadow.enabled){var d=e.config.chart.dropShadow;new v(this.ctx).dropShadow(c,d,h)}for(var g=0,u=e.config.plotOptions.heatmap.shadeIntensity,f=0;f<l[h].length;f++){var p=this.helpers.getShadeColor(e.config.chart.type,h,f,this.negRange),b=p.color,y=p.colorProps;if(\"image\"===e.config.fill.type)b=new F(this.ctx).fillPath({seriesNumber:h,dataPointIndex:f,opacity:e.globals.hasNegs?y.percent<0?1-(1+y.percent/100):u+y.percent/100:y.percent/100,patternID:x.randomId(),width:e.config.fill.image.width?e.config.fill.image.width:s,height:e.config.fill.image.height?e.config.fill.image.height:r});var w=this.rectRadius,k=i.drawRect(g,o,s,r,w);if(k.attr({cx:g,cy:o}),k.node.classList.add(\"apexcharts-heatmap-rect\"),c.add(k),k.attr({fill:b,i:h,index:h,j:f,val:l[h][f],\"stroke-width\":this.strokeWidth,stroke:e.config.plotOptions.heatmap.useFillColorAsStroke?b:e.globals.stroke.colors[0],color:b}),this.helpers.addListeners(k),e.config.chart.animations.enabled&&!e.globals.dataChanged){var A=1;e.globals.resized||(A=e.config.chart.animations.speed),this.animateHeatMap(k,g,o,s,r,A)}if(e.globals.dataChanged){var S=1;if(this.dynamicAnim.enabled&&e.globals.shouldAnimate){S=this.dynamicAnim.speed;var C=e.globals.previousPaths[h]&&e.globals.previousPaths[h][f]&&e.globals.previousPaths[h][f].color;C||(C=\"rgba(255, 255, 255, 0)\"),this.animateHeatColor(k,x.isColorHex(C)?C:x.rgb2hex(C),x.isColorHex(b)?b:x.rgb2hex(b),S)}}var L=(0,e.config.dataLabels.formatter)(e.globals.series[h][f],{value:e.globals.series[h][f],seriesIndex:h,dataPointIndex:f,w:e}),P=this.helpers.calculateDataLabels({text:L,x:g+s/2,y:o+r/2,i:h,j:f,colorProps:y,series:l});null!==P&&c.add(P),g+=s}o+=r,a.add(c)}var T=e.globals.yAxisScale[0].result.slice();e.config.yaxis[0].reversed?T.unshift(\"\"):T.push(\"\"),e.globals.yAxisScale[0].result=T;var M=e.globals.gridHeight/e.globals.series.length;return e.config.yaxis[0].labels.offsetY=-M/2,a}},{key:\"animateHeatMap\",value:function(t,e,i,a,s,r){var o=new b(this.ctx);o.animateRect(t,{x:e+a/2,y:i+s/2,width:0,height:0},{x:e,y:i,width:a,height:s},r,(function(){o.animationCompleted(t)}))}},{key:\"animateHeatColor\",value:function(t,e,i,a){t.attr({fill:e}).animate(a).attr({fill:i})}}]),t}(),Ct=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"drawYAxisTexts\",value:function(t,e,i,a){var s=this.w,r=s.config.yaxis[0],o=s.globals.yLabelFormatters[0];return new m(this.ctx).drawText({x:t+r.labels.offsetX,y:e+r.labels.offsetY,text:o(a,i),textAnchor:\"middle\",fontSize:r.labels.style.fontSize,fontFamily:r.labels.style.fontFamily,foreColor:Array.isArray(r.labels.style.colors)?r.labels.style.colors[i]:r.labels.style.colors})}}]),t}(),Lt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w;var i=this.w;this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animBeginArr=[0],this.animDur=0,this.donutDataLabels=this.w.config.plotOptions.pie.donut.labels,this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=Math.min(i.globals.gridWidth,i.globals.gridHeight),this.centerY=this.defaultSize/2,this.centerX=i.globals.gridWidth/2,\"radialBar\"===i.config.chart.type?this.fullAngle=360:this.fullAngle=Math.abs(i.config.plotOptions.pie.endAngle-i.config.plotOptions.pie.startAngle),this.initialAngle=i.config.plotOptions.pie.startAngle%this.fullAngle,i.globals.radialSize=this.defaultSize/2.05-i.config.stroke.width-(i.config.chart.sparkline.enabled?0:i.config.chart.dropShadow.blur),this.donutSize=i.globals.radialSize*parseInt(i.config.plotOptions.pie.donut.size,10)/100,this.maxY=0,this.sliceLabels=[],this.sliceSizes=[],this.prevSectorAngleArr=[]}return r(t,[{key:\"draw\",value:function(t){var e=this,i=this.w,a=new m(this.ctx);if(this.ret=a.group({class:\"apexcharts-pie\"}),i.globals.noData)return this.ret;for(var s=0,r=0;r<t.length;r++)s+=x.negToZero(t[r]);var o=[],n=a.group();0===s&&(s=1e-5),t.forEach((function(t){e.maxY=Math.max(e.maxY,t)})),i.config.yaxis[0].max&&(this.maxY=i.config.yaxis[0].max),\"back\"===i.config.grid.position&&\"polarArea\"===this.chartType&&this.drawPolarElements(this.ret);for(var l=0;l<t.length;l++){var h=this.fullAngle*x.negToZero(t[l])/s;o.push(h),\"polarArea\"===this.chartType?(o[l]=this.fullAngle/t.length,this.sliceSizes.push(i.globals.radialSize*t[l]/this.maxY)):this.sliceSizes.push(i.globals.radialSize)}if(i.globals.dataChanged){for(var c,d=0,g=0;g<i.globals.previousPaths.length;g++)d+=x.negToZero(i.globals.previousPaths[g]);for(var u=0;u<i.globals.previousPaths.length;u++)c=this.fullAngle*x.negToZero(i.globals.previousPaths[u])/d,this.prevSectorAngleArr.push(c)}this.donutSize<0&&(this.donutSize=0);var f=i.config.plotOptions.pie.customScale,p=i.globals.gridWidth/2,b=i.globals.gridHeight/2,v=p-i.globals.gridWidth/2*f,y=b-i.globals.gridHeight/2*f;if(\"donut\"===this.chartType){var w=a.drawCircle(this.donutSize);w.attr({cx:this.centerX,cy:this.centerY,fill:i.config.plotOptions.pie.donut.background?i.config.plotOptions.pie.donut.background:\"transparent\"}),n.add(w)}var k=this.drawArcs(o,t);if(this.sliceLabels.forEach((function(t){k.add(t)})),n.attr({transform:\"translate(\".concat(v,\", \").concat(y,\") scale(\").concat(f,\")\")}),n.add(k),this.ret.add(n),this.donutDataLabels.show){var A=this.renderInnerDataLabels(this.donutDataLabels,{hollowSize:this.donutSize,centerX:this.centerX,centerY:this.centerY,opacity:this.donutDataLabels.show,translateX:v,translateY:y});this.ret.add(A)}return\"front\"===i.config.grid.position&&\"polarArea\"===this.chartType&&this.drawPolarElements(this.ret),this.ret}},{key:\"drawArcs\",value:function(t,e){var i=this.w,a=new v(this.ctx),s=new m(this.ctx),r=new F(this.ctx),o=s.group({class:\"apexcharts-slices\"}),n=this.initialAngle,l=this.initialAngle,h=this.initialAngle,c=this.initialAngle;this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0;for(var d=0;d<t.length;d++){var g=s.group({class:\"apexcharts-series apexcharts-pie-series\",seriesName:x.escapeString(i.globals.seriesNames[d]),rel:d+1,\"data:realIndex\":d});o.add(g),l=c,h=(n=h)+t[d],c=l+this.prevSectorAngleArr[d];var u=h<n?this.fullAngle+h-n:h-n,f=r.fillPath({seriesNumber:d,size:this.sliceSizes[d],value:e[d]}),p=this.getChangedPath(l,c),b=s.drawPath({d:p,stroke:Array.isArray(this.lineColorArr)?this.lineColorArr[d]:this.lineColorArr,strokeWidth:0,fill:f,fillOpacity:i.config.fill.opacity,classes:\"apexcharts-pie-area apexcharts-\".concat(this.chartType.toLowerCase(),\"-slice-\").concat(d)});if(b.attr({index:0,j:d}),a.setSelectionFilter(b,0,d),i.config.chart.dropShadow.enabled){var y=i.config.chart.dropShadow;a.dropShadow(b,y,d)}this.addListeners(b,this.donutDataLabels),m.setAttrs(b.node,{\"data:angle\":u,\"data:startAngle\":n,\"data:strokeWidth\":this.strokeWidth,\"data:value\":e[d]});var w={x:0,y:0};\"pie\"===this.chartType||\"polarArea\"===this.chartType?w=x.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize/1.25+i.config.plotOptions.pie.dataLabels.offset,(n+u/2)%this.fullAngle):\"donut\"===this.chartType&&(w=x.polarToCartesian(this.centerX,this.centerY,(i.globals.radialSize+this.donutSize)/2+i.config.plotOptions.pie.dataLabels.offset,(n+u/2)%this.fullAngle)),g.add(b);var k=0;if(!this.initialAnim||i.globals.resized||i.globals.dataChanged?this.animBeginArr.push(0):(0===(k=u/this.fullAngle*i.config.chart.animations.speed)&&(k=1),this.animDur=k+this.animDur,this.animBeginArr.push(this.animDur)),this.dynamicAnim&&i.globals.dataChanged?this.animatePaths(b,{size:this.sliceSizes[d],endAngle:h,startAngle:n,prevStartAngle:l,prevEndAngle:c,animateStartingPos:!0,i:d,animBeginArr:this.animBeginArr,shouldSetPrevPaths:!0,dur:i.config.chart.animations.dynamicAnimation.speed}):this.animatePaths(b,{size:this.sliceSizes[d],endAngle:h,startAngle:n,i:d,totalItems:t.length-1,animBeginArr:this.animBeginArr,dur:k}),i.config.plotOptions.pie.expandOnClick&&\"polarArea\"!==this.chartType&&b.click(this.pieClicked.bind(this,d)),void 0!==i.globals.selectedDataPoints[0]&&i.globals.selectedDataPoints[0].indexOf(d)>-1&&this.pieClicked(d),i.config.dataLabels.enabled){var A=w.x,S=w.y,C=100*u/this.fullAngle+\"%\";if(0!==u&&i.config.plotOptions.pie.dataLabels.minAngleToShowLabel<t[d]){var L=i.config.dataLabels.formatter;void 0!==L&&(C=L(i.globals.seriesPercent[d][0],{seriesIndex:d,w:i}));var P=i.globals.dataLabels.style.colors[d],T=s.group({class:\"apexcharts-datalabels\"}),M=s.drawText({x:A,y:S,text:C,textAnchor:\"middle\",fontSize:i.config.dataLabels.style.fontSize,fontFamily:i.config.dataLabels.style.fontFamily,fontWeight:i.config.dataLabels.style.fontWeight,foreColor:P});if(T.add(M),i.config.dataLabels.dropShadow.enabled){var I=i.config.dataLabels.dropShadow;a.dropShadow(M,I)}M.node.classList.add(\"apexcharts-pie-label\"),i.config.chart.animations.animate&&!1===i.globals.resized&&(M.node.classList.add(\"apexcharts-pie-label-delay\"),M.node.style.animationDelay=i.config.chart.animations.speed/940+\"s\"),this.sliceLabels.push(T)}}}return o}},{key:\"addListeners\",value:function(t,e){var i=new m(this.ctx);t.node.addEventListener(\"mouseenter\",i.pathMouseEnter.bind(this,t)),t.node.addEventListener(\"mouseleave\",i.pathMouseLeave.bind(this,t)),t.node.addEventListener(\"mouseleave\",this.revertDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\"mousedown\",i.pathMouseDown.bind(this,t)),this.donutDataLabels.total.showAlways||(t.node.addEventListener(\"mouseenter\",this.printDataLabelsInner.bind(this,t.node,e)),t.node.addEventListener(\"mousedown\",this.printDataLabelsInner.bind(this,t.node,e)))}},{key:\"animatePaths\",value:function(t,e){var i=this.w,a=e.endAngle<e.startAngle?this.fullAngle+e.endAngle-e.startAngle:e.endAngle-e.startAngle,s=a,r=e.startAngle,o=e.startAngle;void 0!==e.prevStartAngle&&void 0!==e.prevEndAngle&&(r=e.prevEndAngle,s=e.prevEndAngle<e.prevStartAngle?this.fullAngle+e.prevEndAngle-e.prevStartAngle:e.prevEndAngle-e.prevStartAngle),e.i===i.config.series.length-1&&(a+o>this.fullAngle?e.endAngle=e.endAngle-(a+o):a+o<this.fullAngle&&(e.endAngle=e.endAngle+(this.fullAngle-(a+o)))),a===this.fullAngle&&(a=this.fullAngle-.01),this.animateArc(t,r,o,a,s,e)}},{key:\"animateArc\",value:function(t,e,i,a,s,r){var o,n=this,l=this.w,h=new b(this.ctx),c=r.size;(isNaN(e)||isNaN(s))&&(e=i,s=a,r.dur=0);var d=a,g=i,u=e<i?this.fullAngle+e-i:e-i;l.globals.dataChanged&&r.shouldSetPrevPaths&&r.prevEndAngle&&(o=n.getPiePath({me:n,startAngle:r.prevStartAngle,angle:r.prevEndAngle<r.prevStartAngle?this.fullAngle+r.prevEndAngle-r.prevStartAngle:r.prevEndAngle-r.prevStartAngle,size:c}),t.attr({d:o})),0!==r.dur?t.animate(r.dur,l.globals.easing,r.animBeginArr[r.i]).afterAll((function(){\"pie\"!==n.chartType&&\"donut\"!==n.chartType&&\"polarArea\"!==n.chartType||this.animate(l.config.chart.animations.dynamicAnimation.speed).attr({\"stroke-width\":n.strokeWidth}),r.i===l.config.series.length-1&&h.animationCompleted(t)})).during((function(l){d=u+(a-u)*l,r.animateStartingPos&&(d=s+(a-s)*l,g=e-s+(i-(e-s))*l),o=n.getPiePath({me:n,startAngle:g,angle:d,size:c}),t.node.setAttribute(\"data:pathOrig\",o),t.attr({d:o})})):(o=n.getPiePath({me:n,startAngle:g,angle:a,size:c}),r.isTrack||(l.globals.animationEnded=!0),t.node.setAttribute(\"data:pathOrig\",o),t.attr({d:o,\"stroke-width\":n.strokeWidth}))}},{key:\"pieClicked\",value:function(t){var e,i=this.w,a=this,s=a.sliceSizes[t]+(i.config.plotOptions.pie.expandOnClick?4:0),r=i.globals.dom.Paper.select(\".apexcharts-\".concat(a.chartType.toLowerCase(),\"-slice-\").concat(t)).members[0];if(\"true\"!==r.attr(\"data:pieClicked\")){var o=i.globals.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\");Array.prototype.forEach.call(o,(function(t){t.setAttribute(\"data:pieClicked\",\"false\");var e=t.getAttribute(\"data:pathOrig\");t.setAttribute(\"d\",e)})),r.attr(\"data:pieClicked\",\"true\");var n=parseInt(r.attr(\"data:startAngle\"),10),l=parseInt(r.attr(\"data:angle\"),10);e=a.getPiePath({me:a,startAngle:n,angle:l,size:s}),360!==l&&r.plot(e)}else{r.attr({\"data:pieClicked\":\"false\"}),this.revertDataLabelsInner(r.node,this.donutDataLabels);var h=r.attr(\"data:pathOrig\");r.attr({d:h})}}},{key:\"getChangedPath\",value:function(t,e){var i=\"\";return this.dynamicAnim&&this.w.globals.dataChanged&&(i=this.getPiePath({me:this,startAngle:t,angle:e-t,size:this.size})),i}},{key:\"getPiePath\",value:function(t){var e=t.me,i=t.startAngle,a=t.angle,s=t.size,r=i,o=Math.PI*(r-90)/180,n=a+i;Math.ceil(n)>=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle&&(n=this.fullAngle+this.w.config.plotOptions.pie.startAngle%this.fullAngle-.01),Math.ceil(n)>this.fullAngle&&(n-=this.fullAngle);var l=Math.PI*(n-90)/180,h=e.centerX+s*Math.cos(o),c=e.centerY+s*Math.sin(o),d=e.centerX+s*Math.cos(l),g=e.centerY+s*Math.sin(l),u=x.polarToCartesian(e.centerX,e.centerY,e.donutSize,n),f=x.polarToCartesian(e.centerX,e.centerY,e.donutSize,r),p=a>180?1:0,b=[\"M\",h,c,\"A\",s,s,0,p,1,d,g];return\"donut\"===e.chartType?[].concat(b,[\"L\",u.x,u.y,\"A\",e.donutSize,e.donutSize,0,p,0,f.x,f.y,\"L\",h,c,\"z\"]).join(\" \"):\"pie\"===e.chartType||\"polarArea\"===e.chartType?[].concat(b,[\"L\",e.centerX,e.centerY,\"L\",h,c]).join(\" \"):[].concat(b).join(\" \")}},{key:\"drawPolarElements\",value:function(t){var e=this.w,i=new _(this.ctx),a=new m(this.ctx),s=new Ct(this.ctx),r=a.group(),o=a.group(),n=i.niceScale(0,Math.ceil(this.maxY),e.config.yaxis[0].tickAmount,0,!0),l=n.result.reverse(),h=n.result.length;this.maxY=n.niceMax;for(var c=e.globals.radialSize,d=c/(h-1),g=0;g<h-1;g++){var u=a.drawCircle(c);if(u.attr({cx:this.centerX,cy:this.centerY,fill:\"none\",\"stroke-width\":e.config.plotOptions.polarArea.rings.strokeWidth,stroke:e.config.plotOptions.polarArea.rings.strokeColor}),e.config.yaxis[0].show){var f=s.drawYAxisTexts(this.centerX,this.centerY-c+parseInt(e.config.yaxis[0].labels.style.fontSize,10)/2,g,l[g]);o.add(f)}r.add(u),c-=d}this.drawSpokes(t),t.add(r),t.add(o)}},{key:\"renderInnerDataLabels\",value:function(t,e){var i=this.w,a=new m(this.ctx),s=a.group({class:\"apexcharts-datalabels-group\",transform:\"translate(\".concat(e.translateX?e.translateX:0,\", \").concat(e.translateY?e.translateY:0,\") scale(\").concat(i.config.plotOptions.pie.customScale,\")\")}),r=t.total.show;s.node.style.opacity=e.opacity;var o,n,l=e.centerX,h=e.centerY;o=void 0===t.name.color?i.globals.colors[0]:t.name.color;var c=t.name.fontSize,d=t.name.fontFamily,g=t.name.fontWeight;n=void 0===t.value.color?i.config.chart.foreColor:t.value.color;var u=t.value.formatter,f=\"\",p=\"\";if(r?(o=t.total.color,c=t.total.fontSize,d=t.total.fontFamily,g=t.total.fontWeight,p=t.total.label,f=t.total.formatter(i)):1===i.globals.series.length&&(f=u(i.globals.series[0],i),p=i.globals.seriesNames[0]),p&&(p=t.name.formatter(p,t.total.show,i)),t.name.show){var x=a.drawText({x:l,y:h+parseFloat(t.name.offsetY),text:p,textAnchor:\"middle\",foreColor:o,fontSize:c,fontWeight:g,fontFamily:d});x.node.classList.add(\"apexcharts-datalabel-label\"),s.add(x)}if(t.value.show){var b=t.name.show?parseFloat(t.value.offsetY)+16:t.value.offsetY,v=a.drawText({x:l,y:h+b,text:f,textAnchor:\"middle\",foreColor:n,fontWeight:t.value.fontWeight,fontSize:t.value.fontSize,fontFamily:t.value.fontFamily});v.node.classList.add(\"apexcharts-datalabel-value\"),s.add(v)}return s}},{key:\"printInnerLabels\",value:function(t,e,i,a){var s,r=this.w;a?s=void 0===t.name.color?r.globals.colors[parseInt(a.parentNode.getAttribute(\"rel\"),10)-1]:t.name.color:r.globals.series.length>1&&t.total.show&&(s=t.total.color);var o=r.globals.dom.baseEl.querySelector(\".apexcharts-datalabel-label\"),n=r.globals.dom.baseEl.querySelector(\".apexcharts-datalabel-value\");i=(0,t.value.formatter)(i,r),a||\"function\"!=typeof t.total.formatter||(i=t.total.formatter(r));var l=e===t.total.label;e=t.name.formatter(e,l,r),null!==o&&(o.textContent=e),null!==n&&(n.textContent=i),null!==o&&(o.style.fill=s)}},{key:\"printDataLabelsInner\",value:function(t,e){var i=this.w,a=t.getAttribute(\"data:value\"),s=i.globals.seriesNames[parseInt(t.parentNode.getAttribute(\"rel\"),10)-1];i.globals.series.length>1&&this.printInnerLabels(e,s,a,t);var r=i.globals.dom.baseEl.querySelector(\".apexcharts-datalabels-group\");null!==r&&(r.style.opacity=1)}},{key:\"drawSpokes\",value:function(t){var e=this,i=this.w,a=new m(this.ctx),s=i.config.plotOptions.polarArea.spokes;if(0!==s.strokeWidth){for(var r=[],o=360/i.globals.series.length,n=0;n<i.globals.series.length;n++)r.push(x.polarToCartesian(this.centerX,this.centerY,i.globals.radialSize,i.config.plotOptions.pie.startAngle+o*n));r.forEach((function(i,r){var o=a.drawLine(i.x,i.y,e.centerX,e.centerY,Array.isArray(s.connectorColors)?s.connectorColors[r]:s.connectorColors);t.add(o)}))}}},{key:\"revertDataLabelsInner\",value:function(t,e,i){var a=this,s=this.w,r=s.globals.dom.baseEl.querySelector(\".apexcharts-datalabels-group\"),o=!1,n=s.globals.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\"),l=function(t){var i=t.makeSliceOut,s=t.printLabel;Array.prototype.forEach.call(n,(function(t){\"true\"===t.getAttribute(\"data:pieClicked\")&&(i&&(o=!0),s&&a.printDataLabelsInner(t,e))}))};if(l({makeSliceOut:!0,printLabel:!1}),e.total.show&&s.globals.series.length>1)o&&!e.total.showAlways?l({makeSliceOut:!1,printLabel:!0}):this.printInnerLabels(e,e.total.label,e.total.formatter(s));else if(l({makeSliceOut:!1,printLabel:!0}),!o)if(s.globals.selectedDataPoints.length&&s.globals.series.length>1)if(s.globals.selectedDataPoints[0].length>0){var h=s.globals.selectedDataPoints[0],c=s.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(this.chartType.toLowerCase(),\"-slice-\").concat(h));this.printDataLabelsInner(c,e)}else r&&s.globals.selectedDataPoints.length&&0===s.globals.selectedDataPoints[0].length&&(r.style.opacity=0);else r&&s.globals.series.length>1&&(r.style.opacity=0)}}]),t}(),Pt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.chartType=this.w.config.chart.type,this.initialAnim=this.w.config.chart.animations.enabled,this.dynamicAnim=this.initialAnim&&this.w.config.chart.animations.dynamicAnimation.enabled,this.animDur=0;var i=this.w;this.graphics=new m(this.ctx),this.lineColorArr=void 0!==i.globals.stroke.colors?i.globals.stroke.colors:i.globals.colors,this.defaultSize=i.globals.svgHeight<i.globals.svgWidth?i.globals.gridHeight+1.5*i.globals.goldenPadding:i.globals.gridWidth,this.isLog=i.config.yaxis[0].logarithmic,this.coreUtils=new y(this.ctx),this.maxValue=this.isLog?this.coreUtils.getLogVal(i.globals.maxY,0):i.globals.maxY,this.minValue=this.isLog?this.coreUtils.getLogVal(this.w.globals.minY,0):i.globals.minY,this.polygons=i.config.plotOptions.radar.polygons,this.strokeWidth=i.config.stroke.show?i.config.stroke.width:0,this.size=this.defaultSize/2.1-this.strokeWidth-i.config.chart.dropShadow.blur,i.config.xaxis.labels.show&&(this.size=this.size-i.globals.xAxisLabelsWidth/1.75),void 0!==i.config.plotOptions.radar.size&&(this.size=i.config.plotOptions.radar.size),this.dataRadiusOfPercent=[],this.dataRadius=[],this.angleArr=[],this.yaxisLabelsTextsPos=[]}return r(t,[{key:\"draw\",value:function(t){var i=this,a=this.w,s=new F(this.ctx),r=[],o=new H(this.ctx);t.length&&(this.dataPointsLen=t[a.globals.maxValsInArrayIndex].length),this.disAngle=2*Math.PI/this.dataPointsLen;var n=a.globals.gridWidth/2,l=a.globals.gridHeight/2,h=n+a.config.plotOptions.radar.offsetX,c=l+a.config.plotOptions.radar.offsetY,d=this.graphics.group({class:\"apexcharts-radar-series apexcharts-plot-series\",transform:\"translate(\".concat(h||0,\", \").concat(c||0,\")\")}),g=[],u=null,f=null;if(this.yaxisLabels=this.graphics.group({class:\"apexcharts-yaxis\"}),t.forEach((function(t,n){var l=t.length===a.globals.dataPoints,h=i.graphics.group().attr({class:\"apexcharts-series\",\"data:longestSeries\":l,seriesName:x.escapeString(a.globals.seriesNames[n]),rel:n+1,\"data:realIndex\":n});i.dataRadiusOfPercent[n]=[],i.dataRadius[n]=[],i.angleArr[n]=[],t.forEach((function(t,e){var a=Math.abs(i.maxValue-i.minValue);t+=Math.abs(i.minValue),i.isLog&&(t=i.coreUtils.getLogVal(t,0)),i.dataRadiusOfPercent[n][e]=t/a,i.dataRadius[n][e]=i.dataRadiusOfPercent[n][e]*i.size,i.angleArr[n][e]=e*i.disAngle})),g=i.getDataPointsPos(i.dataRadius[n],i.angleArr[n]);var c=i.createPaths(g,{x:0,y:0});u=i.graphics.group({class:\"apexcharts-series-markers-wrap apexcharts-element-hidden\"}),f=i.graphics.group({class:\"apexcharts-datalabels\",\"data:realIndex\":n}),a.globals.delayedElements.push({el:u.node,index:n});var d={i:n,realIndex:n,animationDelay:n,initialSpeed:a.config.chart.animations.speed,dataChangeSpeed:a.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-radar\",shouldClipToGrid:!1,bindEventsOnPaths:!1,stroke:a.globals.stroke.colors[n],strokeLineCap:a.config.stroke.lineCap},p=null;a.globals.previousPaths.length>0&&(p=i.getPreviousPath(n));for(var b=0;b<c.linePathsTo.length;b++){var m=i.graphics.renderPaths(e(e({},d),{},{pathFrom:null===p?c.linePathsFrom[b]:p,pathTo:c.linePathsTo[b],strokeWidth:Array.isArray(i.strokeWidth)?i.strokeWidth[n]:i.strokeWidth,fill:\"none\",drawShadow:!1}));h.add(m);var y=s.fillPath({seriesNumber:n}),w=i.graphics.renderPaths(e(e({},d),{},{pathFrom:null===p?c.areaPathsFrom[b]:p,pathTo:c.areaPathsTo[b],strokeWidth:0,fill:y,drawShadow:!1}));if(a.config.chart.dropShadow.enabled){var k=new v(i.ctx),A=a.config.chart.dropShadow;k.dropShadow(w,Object.assign({},A,{noUserSpaceOnUse:!0}),n)}h.add(w)}t.forEach((function(t,s){var r=new R(i.ctx).getMarkerConfig({cssClass:\"apexcharts-marker\",seriesIndex:n,dataPointIndex:s}),l=i.graphics.drawMarker(g[s].x,g[s].y,r);l.attr(\"rel\",s),l.attr(\"j\",s),l.attr(\"index\",n),l.node.setAttribute(\"default-marker-size\",r.pSize);var c=i.graphics.group({class:\"apexcharts-series-markers\"});c&&c.add(l),u.add(c),h.add(u);var d=a.config.dataLabels;if(d.enabled){var p=d.formatter(a.globals.series[n][s],{seriesIndex:n,dataPointIndex:s,w:a});o.plotDataLabelsText({x:g[s].x,y:g[s].y,text:p,textAnchor:\"middle\",i:n,j:n,parent:f,offsetCorrection:!1,dataLabelsConfig:e({},d)})}h.add(f)})),r.push(h)})),this.drawPolygons({parent:d}),a.config.xaxis.labels.show){var p=this.drawXAxisTexts();d.add(p)}return r.forEach((function(t){d.add(t)})),d.add(this.yaxisLabels),d}},{key:\"drawPolygons\",value:function(t){for(var e=this,i=this.w,a=t.parent,s=new Ct(this.ctx),r=i.globals.yAxisScale[0].result.reverse(),o=r.length,n=[],l=this.size/(o-1),h=0;h<o;h++)n[h]=l*h;n.reverse();var c=[],d=[];n.forEach((function(t,i){var a=x.getPolygonPos(t,e.dataPointsLen),s=\"\";a.forEach((function(t,a){if(0===i){var r=e.graphics.drawLine(t.x,t.y,0,0,Array.isArray(e.polygons.connectorColors)?e.polygons.connectorColors[a]:e.polygons.connectorColors);d.push(r)}0===a&&e.yaxisLabelsTextsPos.push({x:t.x,y:t.y}),s+=t.x+\",\"+t.y+\" \"})),c.push(s)})),c.forEach((function(t,s){var r=e.polygons.strokeColors,o=e.polygons.strokeWidth,n=e.graphics.drawPolygon(t,Array.isArray(r)?r[s]:r,Array.isArray(o)?o[s]:o,i.globals.radarPolygons.fill.colors[s]);a.add(n)})),d.forEach((function(t){a.add(t)})),i.config.yaxis[0].show&&this.yaxisLabelsTextsPos.forEach((function(t,i){var a=s.drawYAxisTexts(t.x,t.y,i,r[i]);e.yaxisLabels.add(a)}))}},{key:\"drawXAxisTexts\",value:function(){var t=this,i=this.w,a=i.config.xaxis.labels,s=this.graphics.group({class:\"apexcharts-xaxis\"}),r=x.getPolygonPos(this.size,this.dataPointsLen);return i.globals.labels.forEach((function(o,n){var l=i.config.xaxis.labels.formatter,h=new H(t.ctx);if(r[n]){var c=t.getTextPos(r[n],t.size),d=l(o,{seriesIndex:-1,dataPointIndex:n,w:i});h.plotDataLabelsText({x:c.newX,y:c.newY,text:d,textAnchor:c.textAnchor,i:n,j:n,parent:s,color:Array.isArray(a.style.colors)&&a.style.colors[n]?a.style.colors[n]:\"#a8a8a8\",dataLabelsConfig:e({textAnchor:c.textAnchor,dropShadow:{enabled:!1}},a),offsetCorrection:!1})}})),s}},{key:\"createPaths\",value:function(t,e){var i=this,a=[],s=[],r=[],o=[];if(t.length){s=[this.graphics.move(e.x,e.y)],o=[this.graphics.move(e.x,e.y)];var n=this.graphics.move(t[0].x,t[0].y),l=this.graphics.move(t[0].x,t[0].y);t.forEach((function(e,a){n+=i.graphics.line(e.x,e.y),l+=i.graphics.line(e.x,e.y),a===t.length-1&&(n+=\"Z\",l+=\"Z\")})),a.push(n),r.push(l)}return{linePathsFrom:s,linePathsTo:a,areaPathsFrom:o,areaPathsTo:r}}},{key:\"getTextPos\",value:function(t,e){var i=\"middle\",a=t.x,s=t.y;return Math.abs(t.x)>=10?t.x>0?(i=\"start\",a+=10):t.x<0&&(i=\"end\",a-=10):i=\"middle\",Math.abs(t.y)>=e-10&&(t.y<0?s-=10:t.y>0&&(s+=10)),{textAnchor:i,newX:a,newY:s}}},{key:\"getPreviousPath\",value:function(t){for(var e=this.w,i=null,a=0;a<e.globals.previousPaths.length;a++){var s=e.globals.previousPaths[a];s.paths.length>0&&parseInt(s.realIndex,10)===parseInt(t,10)&&void 0!==e.globals.previousPaths[a].paths[0]&&(i=e.globals.previousPaths[a].paths[0].d)}return i}},{key:\"getDataPointsPos\",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.dataPointsLen;t=t||[],e=e||[];for(var a=[],s=0;s<i;s++){var r={};r.x=t[s]*Math.sin(e[s]),r.y=-t[s]*Math.cos(e[s]),a.push(r)}return a}}]),t}(),Tt=function(t){n(i,t);var e=d(i);function i(t){var s;a(this,i),(s=e.call(this,t)).ctx=t,s.w=t.w,s.animBeginArr=[0],s.animDur=0;var r=s.w;return s.startAngle=r.config.plotOptions.radialBar.startAngle,s.endAngle=r.config.plotOptions.radialBar.endAngle,s.totalAngle=Math.abs(r.config.plotOptions.radialBar.endAngle-r.config.plotOptions.radialBar.startAngle),s.trackStartAngle=r.config.plotOptions.radialBar.track.startAngle,s.trackEndAngle=r.config.plotOptions.radialBar.track.endAngle,s.donutDataLabels=s.w.config.plotOptions.radialBar.dataLabels,s.radialDataLabels=s.donutDataLabels,s.trackStartAngle||(s.trackStartAngle=s.startAngle),s.trackEndAngle||(s.trackEndAngle=s.endAngle),360===s.endAngle&&(s.endAngle=359.99),s.margin=parseInt(r.config.plotOptions.radialBar.track.margin,10),s}return r(i,[{key:\"draw\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-radialbar\"});if(e.globals.noData)return a;var s=i.group(),r=this.defaultSize/2,o=e.globals.gridWidth/2,n=this.defaultSize/2.05;e.config.chart.sparkline.enabled||(n=n-e.config.stroke.width-e.config.chart.dropShadow.blur);var l=e.globals.fill.colors;if(e.config.plotOptions.radialBar.track.show){var h=this.drawTracks({size:n,centerX:o,centerY:r,colorArr:l,series:t});s.add(h)}var c=this.drawArcs({size:n,centerX:o,centerY:r,colorArr:l,series:t}),d=360;e.config.plotOptions.radialBar.startAngle<0&&(d=this.totalAngle);var g=(360-d)/360;if(e.globals.radialSize=n-n*g,this.radialDataLabels.value.show){var u=Math.max(this.radialDataLabels.value.offsetY,this.radialDataLabels.name.offsetY);e.globals.radialSize+=u*g}return s.add(c.g),\"front\"===e.config.plotOptions.radialBar.hollow.position&&(c.g.add(c.elHollow),c.dataLabels&&c.g.add(c.dataLabels)),a.add(s),a}},{key:\"drawTracks\",value:function(t){var e=this.w,i=new m(this.ctx),a=i.group({class:\"apexcharts-tracks\"}),s=new v(this.ctx),r=new F(this.ctx),o=this.getStrokeWidth(t);t.size=t.size-o/2;for(var n=0;n<t.series.length;n++){var l=i.group({class:\"apexcharts-radialbar-track apexcharts-track\"});a.add(l),l.attr({rel:n+1}),t.size=t.size-o-this.margin;var h=e.config.plotOptions.radialBar.track,c=r.fillPath({seriesNumber:0,size:t.size,fillColors:Array.isArray(h.background)?h.background[n]:h.background,solid:!0}),d=this.trackStartAngle,g=this.trackEndAngle;Math.abs(g)+Math.abs(d)>=360&&(g=360-Math.abs(this.startAngle)-.1);var u=i.drawPath({d:\"\",stroke:c,strokeWidth:o*parseInt(h.strokeWidth,10)/100,fill:\"none\",strokeOpacity:h.opacity,classes:\"apexcharts-radialbar-area\"});if(h.dropShadow.enabled){var f=h.dropShadow;s.dropShadow(u,f)}l.add(u),u.attr(\"id\",\"apexcharts-radialbarTrack-\"+n),this.animatePaths(u,{centerX:t.centerX,centerY:t.centerY,endAngle:g,startAngle:d,size:t.size,i:n,totalItems:2,animBeginArr:0,dur:0,isTrack:!0,easing:e.globals.easing})}return a}},{key:\"drawArcs\",value:function(t){var e=this.w,i=new m(this.ctx),a=new F(this.ctx),s=new v(this.ctx),r=i.group(),o=this.getStrokeWidth(t);t.size=t.size-o/2;var n=e.config.plotOptions.radialBar.hollow.background,l=t.size-o*t.series.length-this.margin*t.series.length-o*parseInt(e.config.plotOptions.radialBar.track.strokeWidth,10)/100/2,h=l-e.config.plotOptions.radialBar.hollow.margin;void 0!==e.config.plotOptions.radialBar.hollow.image&&(n=this.drawHollowImage(t,r,l,n));var c=this.drawHollow({size:h,centerX:t.centerX,centerY:t.centerY,fill:n||\"transparent\"});if(e.config.plotOptions.radialBar.hollow.dropShadow.enabled){var d=e.config.plotOptions.radialBar.hollow.dropShadow;s.dropShadow(c,d)}var g=1;!this.radialDataLabels.total.show&&e.globals.series.length>1&&(g=0);var u=null;this.radialDataLabels.show&&(u=this.renderInnerDataLabels(this.radialDataLabels,{hollowSize:l,centerX:t.centerX,centerY:t.centerY,opacity:g})),\"back\"===e.config.plotOptions.radialBar.hollow.position&&(r.add(c),u&&r.add(u));var f=!1;e.config.plotOptions.radialBar.inverseOrder&&(f=!0);for(var p=f?t.series.length-1:0;f?p>=0:p<t.series.length;f?p--:p++){var b=i.group({class:\"apexcharts-series apexcharts-radial-series\",seriesName:x.escapeString(e.globals.seriesNames[p])});r.add(b),b.attr({rel:p+1,\"data:realIndex\":p}),this.ctx.series.addCollapsedClassToSeries(b,p),t.size=t.size-o-this.margin;var y=a.fillPath({seriesNumber:p,size:t.size,value:t.series[p]}),w=this.startAngle,k=void 0,A=x.negToZero(t.series[p]>100?100:t.series[p])/100,S=Math.round(this.totalAngle*A)+this.startAngle,C=void 0;e.globals.dataChanged&&(k=this.startAngle,C=Math.round(this.totalAngle*x.negToZero(e.globals.previousPaths[p])/100)+k),Math.abs(S)+Math.abs(w)>=360&&(S-=.01),Math.abs(C)+Math.abs(k)>=360&&(C-=.01);var L=S-w,P=Array.isArray(e.config.stroke.dashArray)?e.config.stroke.dashArray[p]:e.config.stroke.dashArray,T=i.drawPath({d:\"\",stroke:y,strokeWidth:o,fill:\"none\",fillOpacity:e.config.fill.opacity,classes:\"apexcharts-radialbar-area apexcharts-radialbar-slice-\"+p,strokeDashArray:P});if(m.setAttrs(T.node,{\"data:angle\":L,\"data:value\":t.series[p]}),e.config.chart.dropShadow.enabled){var M=e.config.chart.dropShadow;s.dropShadow(T,M,p)}s.setSelectionFilter(T,0,p),this.addListeners(T,this.radialDataLabels),b.add(T),T.attr({index:0,j:p});var I=0;!this.initialAnim||e.globals.resized||e.globals.dataChanged||(I=e.config.chart.animations.speed),e.globals.dataChanged&&(I=e.config.chart.animations.dynamicAnimation.speed),this.animDur=I/(1.2*t.series.length)+this.animDur,this.animBeginArr.push(this.animDur),this.animatePaths(T,{centerX:t.centerX,centerY:t.centerY,endAngle:S,startAngle:w,prevEndAngle:C,prevStartAngle:k,size:t.size,i:p,totalItems:2,animBeginArr:this.animBeginArr,dur:I,shouldSetPrevPaths:!0,easing:e.globals.easing})}return{g:r,elHollow:c,dataLabels:u}}},{key:\"drawHollow\",value:function(t){var e=new m(this.ctx).drawCircle(2*t.size);return e.attr({class:\"apexcharts-radialbar-hollow\",cx:t.centerX,cy:t.centerY,r:t.size,fill:t.fill}),e}},{key:\"drawHollowImage\",value:function(t,e,i,a){var s=this.w,r=new F(this.ctx),o=x.randomId(),n=s.config.plotOptions.radialBar.hollow.image;if(s.config.plotOptions.radialBar.hollow.imageClipped)r.clippedImgArea({width:i,height:i,image:n,patternID:\"pattern\".concat(s.globals.cuid).concat(o)}),a=\"url(#pattern\".concat(s.globals.cuid).concat(o,\")\");else{var l=s.config.plotOptions.radialBar.hollow.imageWidth,h=s.config.plotOptions.radialBar.hollow.imageHeight;if(void 0===l&&void 0===h){var c=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-e.width/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-e.height/2+s.config.plotOptions.radialBar.hollow.imageOffsetY)}));e.add(c)}else{var d=s.globals.dom.Paper.image(n).loaded((function(e){this.move(t.centerX-l/2+s.config.plotOptions.radialBar.hollow.imageOffsetX,t.centerY-h/2+s.config.plotOptions.radialBar.hollow.imageOffsetY),this.size(l,h)}));e.add(d)}}return a}},{key:\"getStrokeWidth\",value:function(t){var e=this.w;return t.size*(100-parseInt(e.config.plotOptions.radialBar.hollow.size,10))/100/(t.series.length+1)-this.margin}}]),i}(Lt),Mt=function(t){n(s,t);var i=d(s);function s(){return a(this,s),i.apply(this,arguments)}return r(s,[{key:\"draw\",value:function(t,i){var a=this.w,s=new m(this.ctx);this.rangeBarOptions=this.w.config.plotOptions.rangeBar,this.series=t,this.seriesRangeStart=a.globals.seriesRangeStart,this.seriesRangeEnd=a.globals.seriesRangeEnd,this.barHelpers.initVariables(t);for(var r=s.group({class:\"apexcharts-rangebar-series apexcharts-plot-series\"}),o=0;o<t.length;o++){var n,l,h,c=void 0,d=void 0,g=void 0,u=a.globals.comboCharts?i[o]:o,f=s.group({class:\"apexcharts-series\",seriesName:x.escapeString(a.globals.seriesNames[u]),rel:o+1,\"data:realIndex\":u});this.ctx.series.addCollapsedClassToSeries(f,u),t[o].length>0&&(this.visibleI=this.visibleI+1);var p=0,b=0;this.yRatio.length>1&&(this.yaxisIndex=u);var v=this.barHelpers.initialPositions();d=v.y,h=v.zeroW,c=v.x,b=v.barWidth,n=v.xDivision,l=v.zeroH;for(var y=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":u}),w=s.group({class:\"apexcharts-rangebar-goals-markers\",style:\"pointer-events: none\"}),k=0;k<a.globals.dataPoints;k++){var A=this.barHelpers.getStrokeWidth(o,k,u),S=this.seriesRangeStart[o][k],C=this.seriesRangeEnd[o][k],L=null,P=null,T={x:c,y:d,strokeWidth:A,elSeries:f};if(g=v.yDivision,p=v.barHeight,this.isHorizontal){P=d+p*this.visibleI;var M=this.seriesLen;a.config.plotOptions.bar.rangeBarGroupRows&&(M=1);var I=(g-p*M)/2;if(void 0===a.config.series[o].data[k])break;if(a.config.series[o].data[k].x){var X=this.detectOverlappingBars({i:o,j:k,barYPosition:P,srty:I,barHeight:p,yDivision:g,initPositions:v});p=X.barHeight,P=X.barYPosition}b=(L=this.drawRangeBarPaths(e({indexes:{i:o,j:k,realIndex:u},barHeight:p,barYPosition:P,zeroW:h,yDivision:g,y1:S,y2:C},T))).barWidth}else p=(L=this.drawRangeColumnPaths(e({indexes:{i:o,j:k,realIndex:u},zeroH:l,barWidth:b,xDivision:n},T))).barHeight;var z=this.barHelpers.drawGoalLine({barXPosition:L.barXPosition,barYPosition:P,goalX:L.goalX,goalY:L.goalY,barHeight:p,barWidth:b});z&&w.add(z),d=L.y,c=L.x;var E=this.barHelpers.getPathFillColor(t,o,k,u),Y=a.globals.stroke.colors[u];this.renderSeries({realIndex:u,pathFill:E,lineFill:Y,j:k,i:o,x:c,y:d,y1:S,y2:C,pathFrom:L.pathFrom,pathTo:L.pathTo,strokeWidth:A,elSeries:f,series:t,barHeight:p,barYPosition:P,barWidth:b,elDataLabelsWrap:y,elGoalsMarkers:w,visibleSeries:this.visibleI,type:\"rangebar\"})}r.add(f)}return r}},{key:\"detectOverlappingBars\",value:function(t){var e=t.i,i=t.j,a=t.barYPosition,s=t.srty,r=t.barHeight,o=t.yDivision,n=t.initPositions,l=this.w,h=[],c=l.config.series[e].data[i].rangeName,d=l.config.series[e].data[i].x,g=l.globals.labels.indexOf(d),u=l.globals.seriesRange[e].findIndex((function(t){return t.x===d&&t.overlaps.length>0}));return a=l.config.plotOptions.bar.rangeBarGroupRows?s+o*g:s+r*this.visibleI+o*g,u>-1&&!l.config.plotOptions.bar.rangeBarOverlap&&(h=l.globals.seriesRange[e][u].overlaps).indexOf(c)>-1&&(a=(r=n.barHeight/h.length)*this.visibleI+o*(100-parseInt(this.barOptions.barHeight,10))/100/2+r*(this.visibleI+h.indexOf(c))+o*g),{barYPosition:a,barHeight:r}}},{key:\"drawRangeColumnPaths\",value:function(t){var e=t.indexes,i=t.x;t.strokeWidth;var a=t.xDivision,s=t.barWidth,r=t.zeroH,o=this.w,n=e.i,l=e.j,h=this.yRatio[this.yaxisIndex],c=e.realIndex,d=this.getRangeValue(c,l),g=Math.min(d.start,d.end),u=Math.max(d.start,d.end);o.globals.isXNumeric&&(i=(o.globals.seriesX[n][l]-o.globals.minX)/this.xRatio-s/2);var f=i+s*this.visibleI;void 0===this.series[n][l]||null===this.series[n][l]?g=r:(g=r-g/h,u=r-u/h);var p=Math.abs(u-g),x=this.barHelpers.getColumnPaths({barXPosition:f,barWidth:s,y1:g,y2:u,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,realIndex:e.realIndex,i:c,j:l,w:o});return o.globals.isXNumeric||(i+=a),{pathTo:x.pathTo,pathFrom:x.pathFrom,barHeight:p,x:i,y:u,goalY:this.barHelpers.getGoalValues(\"y\",null,r,n,l),barXPosition:f}}},{key:\"drawRangeBarPaths\",value:function(t){var e=t.indexes,i=t.y,a=t.y1,s=t.y2,r=t.yDivision,o=t.barHeight,n=t.barYPosition,l=t.zeroW,h=this.w,c=l+a/this.invertedYRatio,d=l+s/this.invertedYRatio,g=Math.abs(d-c),u=this.barHelpers.getBarpaths({barYPosition:n,barHeight:o,x1:c,x2:d,strokeWidth:this.strokeWidth,series:this.seriesRangeEnd,i:e.realIndex,realIndex:e.realIndex,j:e.j,w:h});return h.globals.isXNumeric||(i+=r),{pathTo:u.pathTo,pathFrom:u.pathFrom,barWidth:g,x:d,goalX:this.barHelpers.getGoalValues(\"x\",l,null,e.realIndex,e.j),y:i}}},{key:\"getRangeValue\",value:function(t,e){var i=this.w;return{start:i.globals.seriesRangeStart[t][e],end:i.globals.seriesRangeEnd[t][e]}}}]),s}(yt),It=function(){function t(e){a(this,t),this.w=e.w,this.lineCtx=e}return r(t,[{key:\"sameValueSeriesFix\",value:function(t,e){var i=this.w;if((\"gradient\"===i.config.fill.type||\"gradient\"===i.config.fill.type[t])&&new y(this.lineCtx.ctx,i).seriesHaveSameValues(t)){var a=e[t].slice();a[a.length-1]=a[a.length-1]+1e-6,e[t]=a}return e}},{key:\"calculatePoints\",value:function(t){var e=t.series,i=t.realIndex,a=t.x,s=t.y,r=t.i,o=t.j,n=t.prevY,l=this.w,h=[],c=[];if(0===o){var d=this.lineCtx.categoryAxisCorrection+l.config.markers.offsetX;l.globals.isXNumeric&&(d=(l.globals.seriesX[i][0]-l.globals.minX)/this.lineCtx.xRatio+l.config.markers.offsetX),h.push(d),c.push(x.isNumber(e[r][0])?n+l.config.markers.offsetY:null),h.push(a+l.config.markers.offsetX),c.push(x.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null)}else h.push(a+l.config.markers.offsetX),c.push(x.isNumber(e[r][o+1])?s+l.config.markers.offsetY:null);return{x:h,y:c}}},{key:\"checkPreviousPaths\",value:function(t){for(var e=t.pathFromLine,i=t.pathFromArea,a=t.realIndex,s=this.w,r=0;r<s.globals.previousPaths.length;r++){var o=s.globals.previousPaths[r];(\"line\"===o.type||\"area\"===o.type)&&o.paths.length>0&&parseInt(o.realIndex,10)===parseInt(a,10)&&(\"line\"===o.type?(this.lineCtx.appendPathFrom=!1,e=s.globals.previousPaths[r].paths[0].d):\"area\"===o.type&&(this.lineCtx.appendPathFrom=!1,i=s.globals.previousPaths[r].paths[0].d,s.config.stroke.show&&s.globals.previousPaths[r].paths[1]&&(e=s.globals.previousPaths[r].paths[1].d)))}return{pathFromLine:e,pathFromArea:i}}},{key:\"determineFirstPrevY\",value:function(t){var e,i=t.i,a=t.series,s=t.prevY,r=t.lineYPosition,o=this.w;if(void 0!==(null===(e=a[i])||void 0===e?void 0:e[0]))s=(r=o.config.chart.stacked&&i>0?this.lineCtx.prevSeriesY[i-1][0]:this.lineCtx.zeroY)-a[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]+2*(this.lineCtx.isReversed?a[i][0]/this.lineCtx.yRatio[this.lineCtx.yaxisIndex]:0);else if(o.config.chart.stacked&&i>0&&void 0===a[i][0])for(var n=i-1;n>=0;n--)if(null!==a[n][0]&&void 0!==a[n][0]){s=r=this.lineCtx.prevSeriesY[n][0];break}return{prevY:s,lineYPosition:r}}}]),t}(),Xt=function(){function t(e,i,s){a(this,t),this.ctx=e,this.w=e.w,this.xyRatios=i,this.pointsChart=!(\"bubble\"!==this.w.config.chart.type&&\"scatter\"!==this.w.config.chart.type)||s,this.scatter=new D(this.ctx),this.noNegatives=this.w.globals.minX===Number.MAX_VALUE,this.lineHelpers=new It(this),this.markers=new R(this.ctx),this.prevSeriesY=[],this.categoryAxisCorrection=0,this.yaxisIndex=0}return r(t,[{key:\"draw\",value:function(t,i,a,s){var r=this.w,o=new m(this.ctx),n=r.globals.comboCharts?i:r.config.chart.type,l=o.group({class:\"apexcharts-\".concat(n,\"-series apexcharts-plot-series\")}),h=new y(this.ctx,r);this.yRatio=this.xyRatios.yRatio,this.zRatio=this.xyRatios.zRatio,this.xRatio=this.xyRatios.xRatio,this.baseLineY=this.xyRatios.baseLineY,t=h.getLogSeries(t),this.yRatio=h.getLogYRatios(this.yRatio);for(var c=[],d=0;d<t.length;d++){t=this.lineHelpers.sameValueSeriesFix(d,t);var g=r.globals.comboCharts?a[d]:d;this._initSerieVariables(t,d,g);var u=[],f=[],p=r.globals.padHorizontal+this.categoryAxisCorrection;this.ctx.series.addCollapsedClassToSeries(this.elSeries,g),r.globals.isXNumeric&&r.globals.seriesX.length>0&&(p=(r.globals.seriesX[g][0]-r.globals.minX)/this.xRatio),f.push(p);var x,b=p,v=void 0,w=b,k=this.zeroY,A=this.zeroY;k=this.lineHelpers.determineFirstPrevY({i:d,series:t,prevY:k,lineYPosition:0}).prevY,u.push(k),x=k;\"rangeArea\"===n&&(v=A=this.lineHelpers.determineFirstPrevY({i:d,series:s,prevY:A,lineYPosition:0}).prevY);var S={type:n,series:t,realIndex:g,i:d,x:p,y:1,pX:b,pY:x,pathsFrom:this._calculatePathsFrom({type:n,series:t,i:d,realIndex:g,prevX:w,prevY:k,prevY2:A}),linePaths:[],areaPaths:[],seriesIndex:a,lineYPosition:0,xArrj:f,yArrj:u,seriesRangeEnd:s},C=this._iterateOverDataPoints(e(e({},S),{},{iterations:\"rangeArea\"===n?t[d].length-1:void 0,isRangeStart:!0}));if(\"rangeArea\"===n){var L=this._calculatePathsFrom({series:s,i:d,realIndex:g,prevX:w,prevY:A}),P=this._iterateOverDataPoints(e(e({},S),{},{series:s,pY:v,pathsFrom:L,iterations:s[d].length-1,isRangeStart:!1}));C.linePaths[0]=P.linePath+C.linePath,C.pathFromLine=P.pathFromLine+C.pathFromLine}this._handlePaths({type:n,realIndex:g,i:d,paths:C}),this.elSeries.add(this.elPointsMain),this.elSeries.add(this.elDataLabelsWrap),c.push(this.elSeries)}if(r.config.chart.stacked)for(var T=c.length;T>0;T--)l.add(c[T-1]);else for(var M=0;M<c.length;M++)l.add(c[M]);return l}},{key:\"_initSerieVariables\",value:function(t,e,i){var a=this.w,s=new m(this.ctx);this.xDivision=a.globals.gridWidth/(a.globals.dataPoints-(\"on\"===a.config.xaxis.tickPlacement?1:0)),this.strokeWidth=Array.isArray(a.config.stroke.width)?a.config.stroke.width[i]:a.config.stroke.width,this.yRatio.length>1&&(this.yaxisIndex=i),this.isReversed=a.config.yaxis[this.yaxisIndex]&&a.config.yaxis[this.yaxisIndex].reversed,this.zeroY=a.globals.gridHeight-this.baseLineY[this.yaxisIndex]-(this.isReversed?a.globals.gridHeight:0)+(this.isReversed?2*this.baseLineY[this.yaxisIndex]:0),this.areaBottomY=this.zeroY,(this.zeroY>a.globals.gridHeight||\"end\"===a.config.plotOptions.area.fillTo)&&(this.areaBottomY=a.globals.gridHeight),this.categoryAxisCorrection=this.xDivision/2,this.elSeries=s.group({class:\"apexcharts-series\",seriesName:x.escapeString(a.globals.seriesNames[i])}),this.elPointsMain=s.group({class:\"apexcharts-series-markers-wrap\",\"data:realIndex\":i}),this.elDataLabelsWrap=s.group({class:\"apexcharts-datalabels\",\"data:realIndex\":i});var r=t[e].length===a.globals.dataPoints;this.elSeries.attr({\"data:longestSeries\":r,rel:e+1,\"data:realIndex\":i}),this.appendPathFrom=!0}},{key:\"_calculatePathsFrom\",value:function(t){var e,i,a,s,r=t.type,o=t.series,n=t.i,l=t.realIndex,h=t.prevX,c=t.prevY,d=t.prevY2,g=this.w,u=new m(this.ctx);if(null===o[n][0]){for(var f=0;f<o[n].length;f++)if(null!==o[n][f]){h=this.xDivision*f,c=this.zeroY-o[n][f]/this.yRatio[this.yaxisIndex],e=u.move(h,c),i=u.move(h,this.areaBottomY);break}}else e=u.move(h,c),\"rangeArea\"===r&&(e=u.move(h,d)+u.line(h,c)),i=u.move(h,this.areaBottomY)+u.line(h,c);if(a=u.move(-1,this.zeroY)+u.line(-1,this.zeroY),s=u.move(-1,this.zeroY)+u.line(-1,this.zeroY),g.globals.previousPaths.length>0){var p=this.lineHelpers.checkPreviousPaths({pathFromLine:a,pathFromArea:s,realIndex:l});a=p.pathFromLine,s=p.pathFromArea}return{prevX:h,prevY:c,linePath:e,areaPath:i,pathFromLine:a,pathFromArea:s}}},{key:\"_handlePaths\",value:function(t){var i=t.type,a=t.realIndex,s=t.i,r=t.paths,o=this.w,n=new m(this.ctx),l=new F(this.ctx);this.prevSeriesY.push(r.yArrj),o.globals.seriesXvalues[a]=r.xArrj,o.globals.seriesYvalues[a]=r.yArrj;var h=o.config.forecastDataPoints;if(h.count>0&&\"rangeArea\"!==i){var c=o.globals.seriesXvalues[a][o.globals.seriesXvalues[a].length-h.count-1],d=n.drawRect(c,0,o.globals.gridWidth,o.globals.gridHeight,0);o.globals.dom.elForecastMask.appendChild(d.node);var g=n.drawRect(0,0,c,o.globals.gridHeight,0);o.globals.dom.elNonForecastMask.appendChild(g.node)}this.pointsChart||o.globals.delayedElements.push({el:this.elPointsMain.node,index:a});var u={i:s,realIndex:a,animationDelay:s,initialSpeed:o.config.chart.animations.speed,dataChangeSpeed:o.config.chart.animations.dynamicAnimation.speed,className:\"apexcharts-\".concat(i)};if(\"area\"===i)for(var f=l.fillPath({seriesNumber:a}),p=0;p<r.areaPaths.length;p++){var x=n.renderPaths(e(e({},u),{},{pathFrom:r.pathFromArea,pathTo:r.areaPaths[p],stroke:\"none\",strokeWidth:0,strokeLineCap:null,fill:f}));this.elSeries.add(x)}if(o.config.stroke.show&&!this.pointsChart){var b=null;if(\"line\"===i)b=l.fillPath({seriesNumber:a,i:s});else if(\"solid\"===o.config.stroke.fill.type)b=o.globals.stroke.colors[a];else{var v=o.config.fill;o.config.fill=o.config.stroke.fill,b=l.fillPath({seriesNumber:a,i:s}),o.config.fill=v}for(var y=0;y<r.linePaths.length;y++){var w=b;\"rangeArea\"===i&&(w=l.fillPath({seriesNumber:a}));var k=e(e({},u),{},{pathFrom:r.pathFromLine,pathTo:r.linePaths[y],stroke:b,strokeWidth:this.strokeWidth,strokeLineCap:o.config.stroke.lineCap,fill:\"rangeArea\"===i?w:\"none\"}),A=n.renderPaths(k);if(this.elSeries.add(A),A.attr(\"fill-rule\",\"evenodd\"),h.count>0&&\"rangeArea\"!==i){var S=n.renderPaths(k);S.node.setAttribute(\"stroke-dasharray\",h.dashArray),h.strokeWidth&&S.node.setAttribute(\"stroke-width\",h.strokeWidth),this.elSeries.add(S),S.attr(\"clip-path\",\"url(#forecastMask\".concat(o.globals.cuid,\")\")),A.attr(\"clip-path\",\"url(#nonForecastMask\".concat(o.globals.cuid,\")\"))}}}}},{key:\"_iterateOverDataPoints\",value:function(t){var e=t.type,i=t.series,a=t.iterations,s=t.realIndex,r=t.i,o=t.x,n=t.y,l=t.pX,h=t.pY,c=t.pathsFrom,d=t.linePaths,g=t.areaPaths,u=t.seriesIndex,f=t.lineYPosition,p=t.xArrj,b=t.yArrj,v=t.isRangeStart,y=t.seriesRangeEnd,w=this.w,k=new m(this.ctx),A=this.yRatio,S=c.prevY,C=c.linePath,L=c.areaPath,P=c.pathFromLine,T=c.pathFromArea,M=x.isNumber(w.globals.minYArr[s])?w.globals.minYArr[s]:w.globals.minY;a||(a=w.globals.dataPoints>1?w.globals.dataPoints-1:w.globals.dataPoints);for(var I=n,X=0;X<a;X++){var z=void 0===i[r][X+1]||null===i[r][X+1];if(w.globals.isXNumeric){var E=w.globals.seriesX[s][X+1];void 0===w.globals.seriesX[s][X+1]&&(E=w.globals.seriesX[s][a-1]),o=(E-w.globals.minX)/this.xRatio}else o+=this.xDivision;if(w.config.chart.stacked)if(r>0&&w.globals.collapsedSeries.length<w.config.series.length-1){f=this.prevSeriesY[function(t){for(var e=t,i=0;i<w.globals.series.length;i++)if(w.globals.collapsedSeriesIndices.indexOf(t)>-1){e--;break}return e>=0?e:0}(r-1)][X+1]}else f=this.zeroY;else f=this.zeroY;z?n=f-M/A[this.yaxisIndex]+2*(this.isReversed?M/A[this.yaxisIndex]:0):(n=f-i[r][X+1]/A[this.yaxisIndex]+2*(this.isReversed?i[r][X+1]/A[this.yaxisIndex]:0),\"rangeArea\"===e&&(I=f-y[r][X+1]/A[this.yaxisIndex]+2*(this.isReversed?y[r][X+1]/A[this.yaxisIndex]:0))),p.push(o),b.push(n);var Y=this.lineHelpers.calculatePoints({series:i,x:o,y:n,realIndex:s,i:r,j:X,prevY:S}),F=this._createPaths({type:e,series:i,i:r,realIndex:s,j:X,x:o,y:n,y2:I,pX:l,pY:h,linePath:C,areaPath:L,linePaths:d,areaPaths:g,seriesIndex:u,isRangeStart:v});g=F.areaPaths,d=F.linePaths,l=F.pX,h=F.pY,L=F.areaPath,C=F.linePath,this.appendPathFrom&&(P+=k.line(o,this.zeroY),T+=k.line(o,this.zeroY)),this.handleNullDataPoints(i,Y,r,X,s),this._handleMarkersAndLabels({type:e,pointsPos:Y,i:r,j:X,realIndex:s,isRangeStart:v})}return{yArrj:b,xArrj:p,pathFromArea:T,areaPaths:g,pathFromLine:P,linePaths:d,linePath:C,areaPath:L}}},{key:\"_handleMarkersAndLabels\",value:function(t){var e=t.type,i=t.pointsPos,a=t.isRangeStart,s=t.i,r=t.j,o=t.realIndex,n=this.w,l=new H(this.ctx);if(this.pointsChart)this.scatter.draw(this.elSeries,r,{realIndex:o,pointsPos:i,zRatio:this.zRatio,elParent:this.elPointsMain});else{n.globals.series[s].length>1&&this.elPointsMain.node.classList.add(\"apexcharts-element-hidden\");var h=this.markers.plotChartMarkers(i,o,r+1);null!==h&&this.elPointsMain.add(h)}var c=l.drawDataLabel({type:e,isRangeStart:a,pos:i,i:o,j:r+1});null!==c&&this.elDataLabelsWrap.add(c)}},{key:\"_createPaths\",value:function(t){var e=t.type,i=t.series,a=t.i,s=t.realIndex,r=t.j,o=t.x,n=t.y,l=t.y2,h=t.pX,c=t.pY,d=t.linePath,g=t.areaPath,u=t.linePaths,f=t.areaPaths,p=t.seriesIndex,x=t.isRangeStart,b=this.w,v=new m(this.ctx),y=b.config.stroke.curve,w=this.areaBottomY;if(Array.isArray(b.config.stroke.curve)&&(y=Array.isArray(p)?b.config.stroke.curve[p[a]]:b.config.stroke.curve[a]),\"smooth\"===y){var k=.35*(o-h);b.globals.hasNullValues?(null!==i[a][r]&&(null!==i[a][r+1]?(d=v.move(h,c)+v.curve(h+k,c,o-k,n,o+1,n),g=v.move(h+1,c)+v.curve(h+k,c,o-k,n,o+1,n)+v.line(o,w)+v.line(h,w)+\"z\"):(d=v.move(h,c),g=v.move(h,c)+\"z\")),u.push(d),f.push(g)):(d+=v.curve(h+k,c,o-k,n,o,n),g+=v.curve(h+k,c,o-k,n,o,n)),h=o,c=n,r===i[a].length-2&&(g=g+v.curve(h,c,o,n,o,w)+v.move(o,n)+\"z\",\"rangeArea\"===e&&x?d=d+v.curve(h,c,o,n,o,l)+v.move(o,l)+\"z\":b.globals.hasNullValues||(u.push(d),f.push(g)))}else{if(null===i[a][r+1]){d+=v.move(o,n);var A=b.globals.isXNumeric?(b.globals.seriesX[s][r]-b.globals.minX)/this.xRatio:o-this.xDivision;g=g+v.line(A,w)+v.move(o,n)+\"z\"}null===i[a][r]&&(d+=v.move(o,n),g+=v.move(o,w)),\"stepline\"===y?(d=d+v.line(o,null,\"H\")+v.line(null,n,\"V\"),g=g+v.line(o,null,\"H\")+v.line(null,n,\"V\")):\"straight\"===y&&(d+=v.line(o,n),g+=v.line(o,n)),r===i[a].length-2&&(g=g+v.line(o,w)+v.move(o,n)+\"z\",\"rangeArea\"===e&&x?d=d+v.line(o,l)+v.move(o,l)+\"z\":(u.push(d),f.push(g)))}return{linePaths:u,areaPaths:f,pX:h,pY:c,linePath:d,areaPath:g}}},{key:\"handleNullDataPoints\",value:function(t,e,i,a,s){var r=this.w;if(null===t[i][a]&&r.config.markers.showNullDataPoints||1===t[i].length){var o=this.markers.plotChartMarkers(e,s,a+1,this.strokeWidth-r.config.markers.strokeWidth/2,!0);null!==o&&this.elPointsMain.add(o)}}}]),t}();window.TreemapSquared={},window.TreemapSquared.generate=function(){function t(e,i,a,s){this.xoffset=e,this.yoffset=i,this.height=s,this.width=a,this.shortestEdge=function(){return Math.min(this.height,this.width)},this.getCoordinates=function(t){var e,i=[],a=this.xoffset,s=this.yoffset,o=r(t)/this.height,n=r(t)/this.width;if(this.width>=this.height)for(e=0;e<t.length;e++)i.push([a,s,a+o,s+t[e]/o]),s+=t[e]/o;else for(e=0;e<t.length;e++)i.push([a,s,a+t[e]/n,s+n]),a+=t[e]/n;return i},this.cutArea=function(e){var i;if(this.width>=this.height){var a=e/this.height,s=this.width-a;i=new t(this.xoffset+a,this.yoffset,s,this.height)}else{var r=e/this.width,o=this.height-r;i=new t(this.xoffset,this.yoffset+r,this.width,o)}return i}}function e(e,a,s,o,n){o=void 0===o?0:o,n=void 0===n?0:n;var l=i(function(t,e){var i,a=[],s=e/r(t);for(i=0;i<t.length;i++)a[i]=t[i]*s;return a}(e,a*s),[],new t(o,n,a,s),[]);return function(t){var e,i,a=[];for(e=0;e<t.length;e++)for(i=0;i<t[e].length;i++)a.push(t[e][i]);return a}(l)}function i(t,e,s,o){var n,l,h;if(0!==t.length)return n=s.shortestEdge(),function(t,e,i){var s;if(0===t.length)return!0;(s=t.slice()).push(e);var r=a(t,i),o=a(s,i);return r>=o}(e,l=t[0],n)?(e.push(l),i(t.slice(1),e,s,o)):(h=s.cutArea(r(e),o),o.push(s.getCoordinates(e)),i(t,[],h,o)),o;o.push(s.getCoordinates(e))}function a(t,e){var i=Math.min.apply(Math,t),a=Math.max.apply(Math,t),s=r(t);return Math.max(Math.pow(e,2)*a/Math.pow(s,2),Math.pow(s,2)/(Math.pow(e,2)*i))}function s(t){return t&&t.constructor===Array}function r(t){var e,i=0;for(e=0;e<t.length;e++)i+=t[e];return i}function o(t){var e,i=0;if(s(t[0]))for(e=0;e<t.length;e++)i+=o(t[e]);else i=r(t);return i}return function t(i,a,r,n,l){n=void 0===n?0:n,l=void 0===l?0:l;var h,c,d=[],g=[];if(s(i[0])){for(c=0;c<i.length;c++)d[c]=o(i[c]);for(h=e(d,a,r,n,l),c=0;c<i.length;c++)g.push(t(i[c],h[c][2]-h[c][0],h[c][3]-h[c][1],h[c][0],h[c][1]))}else g=e(i,a,r,n,l);return g}}();var zt,Et,Yt=function(){function t(e,i){a(this,t),this.ctx=e,this.w=e.w,this.strokeWidth=this.w.config.stroke.width,this.helpers=new At(e),this.dynamicAnim=this.w.config.chart.animations.dynamicAnimation,this.labels=[]}return r(t,[{key:\"draw\",value:function(t){var e=this,i=this.w,a=new m(this.ctx),s=new F(this.ctx),r=a.group({class:\"apexcharts-treemap\"});if(i.globals.noData)return r;var o=[];return t.forEach((function(t){var e=t.map((function(t){return Math.abs(t)}));o.push(e)})),this.negRange=this.helpers.checkColorRange(),i.config.series.forEach((function(t,i){t.data.forEach((function(t){Array.isArray(e.labels[i])||(e.labels[i]=[]),e.labels[i].push(t.x)}))})),window.TreemapSquared.generate(o,i.globals.gridWidth,i.globals.gridHeight).forEach((function(o,n){var l=a.group({class:\"apexcharts-series apexcharts-treemap-series\",seriesName:x.escapeString(i.globals.seriesNames[n]),rel:n+1,\"data:realIndex\":n});if(i.config.chart.dropShadow.enabled){var h=i.config.chart.dropShadow;new v(e.ctx).dropShadow(r,h,n)}var c=a.group({class:\"apexcharts-data-labels\"});o.forEach((function(r,o){var h=r[0],c=r[1],d=r[2],g=r[3],u=a.drawRect(h,c,d-h,g-c,0,\"#fff\",1,e.strokeWidth,i.config.plotOptions.treemap.useFillColorAsStroke?p:i.globals.stroke.colors[n]);u.attr({cx:h,cy:c,index:n,i:n,j:o,width:d-h,height:g-c});var f=e.helpers.getShadeColor(i.config.chart.type,n,o,e.negRange),p=f.color;void 0!==i.config.series[n].data[o]&&i.config.series[n].data[o].fillColor&&(p=i.config.series[n].data[o].fillColor);var x=s.fillPath({color:p,seriesNumber:n,dataPointIndex:o});u.node.classList.add(\"apexcharts-treemap-rect\"),u.attr({fill:x}),e.helpers.addListeners(u);var b={x:h+(d-h)/2,y:c+(g-c)/2,width:0,height:0},v={x:h,y:c,width:d-h,height:g-c};if(i.config.chart.animations.enabled&&!i.globals.dataChanged){var m=1;i.globals.resized||(m=i.config.chart.animations.speed),e.animateTreemap(u,b,v,m)}if(i.globals.dataChanged){var y=1;e.dynamicAnim.enabled&&i.globals.shouldAnimate&&(y=e.dynamicAnim.speed,i.globals.previousPaths[n]&&i.globals.previousPaths[n][o]&&i.globals.previousPaths[n][o].rect&&(b=i.globals.previousPaths[n][o].rect),e.animateTreemap(u,b,v,y))}var w=e.getFontSize(r),k=i.config.dataLabels.formatter(e.labels[n][o],{value:i.globals.series[n][o],seriesIndex:n,dataPointIndex:o,w:i}),A=e.helpers.calculateDataLabels({text:k,x:(h+d)/2,y:(c+g)/2+e.strokeWidth/2+w/3,i:n,j:o,colorProps:f,fontSize:w,series:t});i.config.dataLabels.enabled&&A&&e.rotateToFitLabel(A,w,k,h,c,d,g),l.add(u),null!==A&&l.add(A)})),l.add(c),r.add(l)})),r}},{key:\"getFontSize\",value:function(t){var e=this.w;var i,a,s,r,o=function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=e[i].length;return a}(this.labels)/function t(e){var i,a=0;if(Array.isArray(e[0]))for(i=0;i<e.length;i++)a+=t(e[i]);else for(i=0;i<e.length;i++)a+=1;return a}(this.labels);return i=t[2]-t[0],a=t[3]-t[1],s=i*a,r=Math.pow(s,.5),Math.min(r/o,parseInt(e.config.dataLabels.style.fontSize,10))}},{key:\"rotateToFitLabel\",value:function(t,e,i,a,s,r,o){var n=new m(this.ctx),l=n.getTextRects(i,e);if(l.width+this.w.config.stroke.width+5>r-a&&l.width<=o-s){var h=n.rotateAroundCenter(t.node);t.node.setAttribute(\"transform\",\"rotate(-90 \".concat(h.x,\" \").concat(h.y,\")\"))}}},{key:\"animateTreemap\",value:function(t,e,i,a){var s=new b(this.ctx);s.animateRect(t,{x:e.x,y:e.y,width:e.width,height:e.height},{x:i.x,y:i.y,width:i.width,height:i.height},a,(function(){s.animationCompleted(t)}))}}]),t}(),Ft=86400,Rt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w,this.timeScaleArray=[],this.utc=this.w.config.xaxis.labels.datetimeUTC}return r(t,[{key:\"calculateTimeScaleTicks\",value:function(t,i){var a=this,s=this.w;if(s.globals.allSeriesCollapsed)return s.globals.labels=[],s.globals.timescaleLabels=[],[];var r=new T(this.ctx),o=(i-t)/864e5;this.determineInterval(o),s.globals.disableZoomIn=!1,s.globals.disableZoomOut=!1,o<.00011574074074074075?s.globals.disableZoomIn=!0:o>5e4&&(s.globals.disableZoomOut=!0);var n=r.getTimeUnitsfromTimestamp(t,i,this.utc),l=s.globals.gridWidth/o,h=l/24,c=h/60,d=c/60,g=Math.floor(24*o),u=Math.floor(1440*o),f=Math.floor(o*Ft),p=Math.floor(o),x=Math.floor(o/30),b=Math.floor(o/365),v={minMillisecond:n.minMillisecond,minSecond:n.minSecond,minMinute:n.minMinute,minHour:n.minHour,minDate:n.minDate,minMonth:n.minMonth,minYear:n.minYear},m={firstVal:v,currentMillisecond:v.minMillisecond,currentSecond:v.minSecond,currentMinute:v.minMinute,currentHour:v.minHour,currentMonthDate:v.minDate,currentDate:v.minDate,currentMonth:v.minMonth,currentYear:v.minYear,daysWidthOnXAxis:l,hoursWidthOnXAxis:h,minutesWidthOnXAxis:c,secondsWidthOnXAxis:d,numberOfSeconds:f,numberOfMinutes:u,numberOfHours:g,numberOfDays:p,numberOfMonths:x,numberOfYears:b};switch(this.tickInterval){case\"years\":this.generateYearScale(m);break;case\"months\":case\"half_year\":this.generateMonthScale(m);break;case\"months_days\":case\"months_fortnight\":case\"days\":case\"week_days\":this.generateDayScale(m);break;case\"hours\":this.generateHourScale(m);break;case\"minutes_fives\":case\"minutes\":this.generateMinuteScale(m);break;case\"seconds_tens\":case\"seconds_fives\":case\"seconds\":this.generateSecondScale(m)}var y=this.timeScaleArray.map((function(t){var i={position:t.position,unit:t.unit,year:t.year,day:t.day?t.day:1,hour:t.hour?t.hour:0,month:t.month+1};return\"month\"===t.unit?e(e({},i),{},{day:1,value:t.value+1}):\"day\"===t.unit||\"hour\"===t.unit?e(e({},i),{},{value:t.value}):\"minute\"===t.unit?e(e({},i),{},{value:t.value,minute:t.value}):\"second\"===t.unit?e(e({},i),{},{value:t.value,minute:t.minute,second:t.second}):t}));return y.filter((function(t){var e=1,i=Math.ceil(s.globals.gridWidth/120),r=t.value;void 0!==s.config.xaxis.tickAmount&&(i=s.config.xaxis.tickAmount),y.length>i&&(e=Math.floor(y.length/i));var o=!1,n=!1;switch(a.tickInterval){case\"years\":\"year\"===t.unit&&(o=!0);break;case\"half_year\":e=7,\"year\"===t.unit&&(o=!0);break;case\"months\":e=1,\"year\"===t.unit&&(o=!0);break;case\"months_fortnight\":e=15,\"year\"!==t.unit&&\"month\"!==t.unit||(o=!0),30===r&&(n=!0);break;case\"months_days\":e=10,\"month\"===t.unit&&(o=!0),30===r&&(n=!0);break;case\"week_days\":e=8,\"month\"===t.unit&&(o=!0);break;case\"days\":e=1,\"month\"===t.unit&&(o=!0);break;case\"hours\":\"day\"===t.unit&&(o=!0);break;case\"minutes_fives\":case\"seconds_fives\":r%5!=0&&(n=!0);break;case\"seconds_tens\":r%10!=0&&(n=!0)}if(\"hours\"===a.tickInterval||\"minutes_fives\"===a.tickInterval||\"seconds_tens\"===a.tickInterval||\"seconds_fives\"===a.tickInterval){if(!n)return!0}else if((r%e==0||o)&&!n)return!0}))}},{key:\"recalcDimensionsBasedOnFormat\",value:function(t,e){var i=this.w,a=this.formatDates(t),s=this.removeOverlappingTS(a);i.globals.timescaleLabels=s.slice(),new ot(this.ctx).plotCoords()}},{key:\"determineInterval\",value:function(t){var e=24*t,i=60*e;switch(!0){case t/365>5:this.tickInterval=\"years\";break;case t>800:this.tickInterval=\"half_year\";break;case t>180:this.tickInterval=\"months\";break;case t>90:this.tickInterval=\"months_fortnight\";break;case t>60:this.tickInterval=\"months_days\";break;case t>30:this.tickInterval=\"week_days\";break;case t>2:this.tickInterval=\"days\";break;case e>2.4:this.tickInterval=\"hours\";break;case i>15:this.tickInterval=\"minutes_fives\";break;case i>5:this.tickInterval=\"minutes\";break;case i>1:this.tickInterval=\"seconds_tens\";break;case 60*i>20:this.tickInterval=\"seconds_fives\";break;default:this.tickInterval=\"seconds\"}}},{key:\"generateYearScale\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.daysWidthOnXAxis,r=t.numberOfYears,o=e.minYear,n=0,l=new T(this.ctx),h=\"year\";if(e.minDate>1||e.minMonth>0){var c=l.determineRemainingDaysOfYear(e.minYear,e.minMonth,e.minDate);n=(l.determineDaysOfYear(e.minYear)-c+1)*s,o=e.minYear+1,this.timeScaleArray.push({position:n,value:o,unit:h,year:o,month:x.monthMod(i+1)})}else 1===e.minDate&&0===e.minMonth&&this.timeScaleArray.push({position:n,value:o,unit:h,year:a,month:x.monthMod(i+1)});for(var d=o,g=n,u=0;u<r;u++)d++,g=l.determineDaysOfYear(d-1)*s+g,this.timeScaleArray.push({position:g,value:d,unit:h,year:d,month:1})}},{key:\"generateMonthScale\",value:function(t){var e=t.firstVal,i=t.currentMonthDate,a=t.currentMonth,s=t.currentYear,r=t.daysWidthOnXAxis,o=t.numberOfMonths,n=a,l=0,h=new T(this.ctx),c=\"month\",d=0;if(e.minDate>1){l=(h.determineDaysOfMonths(a+1,e.minYear)-i+1)*r,n=x.monthMod(a+1);var g=s+d,u=x.monthMod(n),f=n;0===n&&(c=\"year\",f=g,u=1,g+=d+=1),this.timeScaleArray.push({position:l,value:f,unit:c,year:g,month:u})}else this.timeScaleArray.push({position:l,value:n,unit:c,year:s,month:x.monthMod(a)});for(var p=n+1,b=l,v=0,m=1;v<o;v++,m++){0===(p=x.monthMod(p))?(c=\"year\",d+=1):c=\"month\";var y=this._getYear(s,p,d);b=h.determineDaysOfMonths(p,y)*r+b;var w=0===p?y:p;this.timeScaleArray.push({position:b,value:w,unit:c,year:y,month:0===p?1:p}),p++}}},{key:\"generateDayScale\",value:function(t){var e=t.firstVal,i=t.currentMonth,a=t.currentYear,s=t.hoursWidthOnXAxis,r=t.numberOfDays,o=new T(this.ctx),n=\"day\",l=e.minDate+1,h=l,c=function(t,e,i){return t>o.determineDaysOfMonths(e+1,i)?(h=1,n=\"month\",g=e+=1,e):e},d=(24-e.minHour)*s,g=l,u=c(h,i,a);0===e.minHour&&1===e.minDate?(d=0,g=x.monthMod(e.minMonth),n=\"month\",h=e.minDate,r++):1!==e.minDate&&0===e.minHour&&0===e.minMinute&&(d=0,l=e.minDate,g=l,u=c(h=l,i,a)),this.timeScaleArray.push({position:d,value:g,unit:n,year:this._getYear(a,u,0),month:x.monthMod(u),day:h});for(var f=d,p=0;p<r;p++){n=\"day\",u=c(h+=1,u,this._getYear(a,u,0));var b=this._getYear(a,u,0);f=24*s+f;var v=1===h?x.monthMod(u):h;this.timeScaleArray.push({position:f,value:v,unit:n,year:b,month:x.monthMod(u),day:v})}}},{key:\"generateHourScale\",value:function(t){var e=t.firstVal,i=t.currentDate,a=t.currentMonth,s=t.currentYear,r=t.minutesWidthOnXAxis,o=t.numberOfHours,n=new T(this.ctx),l=\"hour\",h=function(t,e){return t>n.determineDaysOfMonths(e+1,s)&&(p=1,e+=1),{month:e,date:p}},c=function(t,e){return t>n.determineDaysOfMonths(e+1,s)?e+=1:e},d=60-(e.minMinute+e.minSecond/60),g=d*r,u=e.minHour+1,f=u+1;60===d&&(g=0,f=(u=e.minHour)+1);var p=i,b=c(p,a);this.timeScaleArray.push({position:g,value:u,unit:l,day:p,hour:f,year:s,month:x.monthMod(b)});for(var v=g,m=0;m<o;m++){if(l=\"hour\",f>=24)f=0,l=\"day\",b=h(p+=1,b).month,b=c(p,b);var y=this._getYear(s,b,0);v=0===f&&0===m?d*r:60*r+v;var w=0===f?p:f;this.timeScaleArray.push({position:v,value:w,unit:l,hour:f,day:p,year:y,month:x.monthMod(b)}),f++}}},{key:\"generateMinuteScale\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.minutesWidthOnXAxis,h=t.secondsWidthOnXAxis,c=t.numberOfMinutes,d=a+1,g=r,u=o,f=n,p=s,b=(60-i-e/1e3)*h,v=0;v<c;v++)d>=60&&(d=0,24===(p+=1)&&(p=0)),this.timeScaleArray.push({position:b,value:d,unit:\"minute\",hour:p,minute:d,day:g,year:this._getYear(f,u,0),month:x.monthMod(u)}),b+=l,d++}},{key:\"generateSecondScale\",value:function(t){for(var e=t.currentMillisecond,i=t.currentSecond,a=t.currentMinute,s=t.currentHour,r=t.currentDate,o=t.currentMonth,n=t.currentYear,l=t.secondsWidthOnXAxis,h=t.numberOfSeconds,c=i+1,d=a,g=r,u=o,f=n,p=s,b=(1e3-e)/1e3*l,v=0;v<h;v++)c>=60&&(c=0,++d>=60&&(d=0,24===++p&&(p=0))),this.timeScaleArray.push({position:b,value:c,unit:\"second\",hour:p,minute:d,second:c,day:g,year:this._getYear(f,u,0),month:x.monthMod(u)}),b+=l,c++}},{key:\"createRawDateString\",value:function(t,e){var i=t.year;return 0===t.month&&(t.month=1),i+=\"-\"+(\"0\"+t.month.toString()).slice(-2),\"day\"===t.unit?i+=\"day\"===t.unit?\"-\"+(\"0\"+e).slice(-2):\"-01\":i+=\"-\"+(\"0\"+(t.day?t.day:\"1\")).slice(-2),\"hour\"===t.unit?i+=\"hour\"===t.unit?\"T\"+(\"0\"+e).slice(-2):\"T00\":i+=\"T\"+(\"0\"+(t.hour?t.hour:\"0\")).slice(-2),\"minute\"===t.unit?i+=\":\"+(\"0\"+e).slice(-2):i+=\":\"+(t.minute?(\"0\"+t.minute).slice(-2):\"00\"),\"second\"===t.unit?i+=\":\"+(\"0\"+e).slice(-2):i+=\":00\",this.utc&&(i+=\".000Z\"),i}},{key:\"formatDates\",value:function(t){var e=this,i=this.w;return t.map((function(t){var a=t.value.toString(),s=new T(e.ctx),r=e.createRawDateString(t,a),o=s.getDate(s.parseDate(r));if(e.utc||(o=s.getDate(s.parseDateWithTimezone(r))),void 0===i.config.xaxis.labels.format){var n=\"dd MMM\",l=i.config.xaxis.labels.datetimeFormatter;\"year\"===t.unit&&(n=l.year),\"month\"===t.unit&&(n=l.month),\"day\"===t.unit&&(n=l.day),\"hour\"===t.unit&&(n=l.hour),\"minute\"===t.unit&&(n=l.minute),\"second\"===t.unit&&(n=l.second),a=s.formatDate(o,n)}else a=s.formatDate(o,i.config.xaxis.labels.format);return{dateString:r,position:t.position,value:a,unit:t.unit,year:t.year,month:t.month}}))}},{key:\"removeOverlappingTS\",value:function(t){var e,i=this,a=new m(this.ctx),s=!1;t.length>0&&t[0].value&&t.every((function(e){return e.value.length===t[0].value.length}))&&(s=!0,e=a.getTextRects(t[0].value).width);var r=0,o=t.map((function(o,n){if(n>0&&i.w.config.xaxis.labels.hideOverlappingLabels){var l=s?e:a.getTextRects(t[r].value).width,h=t[r].position;return o.position>h+l+10?(r=n,o):null}return o}));return o=o.filter((function(t){return null!==t}))}},{key:\"_getYear\",value:function(t,e,i){return t+Math.floor(e/12)+i}}]),t}(),Dt=function(){function t(e,i){a(this,t),this.ctx=i,this.w=i.w,this.el=e}return r(t,[{key:\"setupElements\",value:function(){var t=this.w.globals,e=this.w.config,i=e.chart.type;t.axisCharts=[\"line\",\"area\",\"bar\",\"rangeBar\",\"rangeArea\",\"candlestick\",\"boxPlot\",\"scatter\",\"bubble\",\"radar\",\"heatmap\",\"treemap\"].indexOf(i)>-1,t.xyCharts=[\"line\",\"area\",\"bar\",\"rangeBar\",\"rangeArea\",\"candlestick\",\"boxPlot\",\"scatter\",\"bubble\"].indexOf(i)>-1,t.isBarHorizontal=(\"bar\"===e.chart.type||\"rangeBar\"===e.chart.type||\"boxPlot\"===e.chart.type)&&e.plotOptions.bar.horizontal,t.chartClass=\".apexcharts\"+t.chartID,t.dom.baseEl=this.el,t.dom.elWrap=document.createElement(\"div\"),m.setAttrs(t.dom.elWrap,{id:t.chartClass.substring(1),class:\"apexcharts-canvas \"+t.chartClass.substring(1)}),this.el.appendChild(t.dom.elWrap),t.dom.Paper=new window.SVG.Doc(t.dom.elWrap),t.dom.Paper.attr({class:\"apexcharts-svg\",\"xmlns:data\":\"ApexChartsNS\",transform:\"translate(\".concat(e.chart.offsetX,\", \").concat(e.chart.offsetY,\")\")}),t.dom.Paper.node.style.background=e.chart.background,this.setSVGDimensions(),t.dom.elGraphical=t.dom.Paper.group().attr({class:\"apexcharts-inner apexcharts-graphical\"}),t.dom.elAnnotations=t.dom.Paper.group().attr({class:\"apexcharts-annotations\"}),t.dom.elDefs=t.dom.Paper.defs(),t.dom.elLegendWrap=document.createElement(\"div\"),t.dom.elLegendWrap.classList.add(\"apexcharts-legend\"),t.dom.elWrap.appendChild(t.dom.elLegendWrap),t.dom.Paper.add(t.dom.elGraphical),t.dom.elGraphical.add(t.dom.elDefs)}},{key:\"plotChartType\",value:function(t,e){var i=this.w,a=i.config,s=i.globals,r={series:[],i:[]},o={series:[],i:[]},n={series:[],i:[]},l={series:[],i:[]},h={series:[],i:[]},c={series:[],i:[]},d={series:[],i:[]},g={series:[],i:[]},u={series:[],seriesRangeEnd:[],i:[]};s.series.map((function(e,f){var p=0;void 0!==t[f].type?(\"column\"===t[f].type||\"bar\"===t[f].type?(s.series.length>1&&a.plotOptions.bar.horizontal&&console.warn(\"Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`\"),h.series.push(e),h.i.push(f),p++,i.globals.columnSeries=h.series):\"area\"===t[f].type?(o.series.push(e),o.i.push(f),p++):\"line\"===t[f].type?(r.series.push(e),r.i.push(f),p++):\"scatter\"===t[f].type?(n.series.push(e),n.i.push(f)):\"bubble\"===t[f].type?(l.series.push(e),l.i.push(f),p++):\"candlestick\"===t[f].type?(c.series.push(e),c.i.push(f),p++):\"boxPlot\"===t[f].type?(d.series.push(e),d.i.push(f),p++):\"rangeBar\"===t[f].type?(g.series.push(e),g.i.push(f),p++):\"rangeArea\"===t[f].type?(u.series.push(s.seriesRangeStart[f]),u.seriesRangeEnd.push(s.seriesRangeEnd[f]),u.i.push(f),p++):console.warn(\"You have specified an unrecognized chart type. Available types for this property are line/area/column/bar/scatter/bubble\"),p>1&&(s.comboCharts=!0)):(r.series.push(e),r.i.push(f))}));var f=new Xt(this.ctx,e),p=new kt(this.ctx,e);this.ctx.pie=new Lt(this.ctx);var x=new Tt(this.ctx);this.ctx.rangeBar=new Mt(this.ctx,e);var b=new Pt(this.ctx),v=[];if(s.comboCharts){if(o.series.length>0&&v.push(f.draw(o.series,\"area\",o.i)),h.series.length>0)if(i.config.chart.stacked){var m=new wt(this.ctx,e);v.push(m.draw(h.series,h.i))}else this.ctx.bar=new yt(this.ctx,e),v.push(this.ctx.bar.draw(h.series,h.i));if(u.series.length>0&&v.push(f.draw(u.series,\"rangeArea\",u.i,u.seriesRangeEnd)),r.series.length>0&&v.push(f.draw(r.series,\"line\",r.i)),c.series.length>0&&v.push(p.draw(c.series,c.i)),d.series.length>0&&v.push(p.draw(d.series,d.i)),g.series.length>0&&v.push(this.ctx.rangeBar.draw(g.series,g.i)),n.series.length>0){var y=new Xt(this.ctx,e,!0);v.push(y.draw(n.series,\"scatter\",n.i))}if(l.series.length>0){var w=new Xt(this.ctx,e,!0);v.push(w.draw(l.series,\"bubble\",l.i))}}else switch(a.chart.type){case\"line\":v=f.draw(s.series,\"line\");break;case\"area\":v=f.draw(s.series,\"area\");break;case\"bar\":if(a.chart.stacked)v=new wt(this.ctx,e).draw(s.series);else this.ctx.bar=new yt(this.ctx,e),v=this.ctx.bar.draw(s.series);break;case\"candlestick\":v=new kt(this.ctx,e).draw(s.series);break;case\"boxPlot\":v=new kt(this.ctx,e).draw(s.series);break;case\"rangeBar\":v=this.ctx.rangeBar.draw(s.series);break;case\"rangeArea\":v=f.draw(s.seriesRangeStart,\"rangeArea\",void 0,s.seriesRangeEnd);break;case\"heatmap\":v=new St(this.ctx,e).draw(s.series);break;case\"treemap\":v=new Yt(this.ctx,e).draw(s.series);break;case\"pie\":case\"donut\":case\"polarArea\":v=this.ctx.pie.draw(s.series);break;case\"radialBar\":v=x.draw(s.series);break;case\"radar\":v=b.draw(s.series);break;default:v=f.draw(s.series)}return v}},{key:\"setSVGDimensions\",value:function(){var t=this.w.globals,e=this.w.config;t.svgWidth=e.chart.width,t.svgHeight=e.chart.height;var i=x.getDimensions(this.el),a=e.chart.width.toString().split(/[0-9]+/g).pop();\"%\"===a?x.isNumber(i[0])&&(0===i[0].width&&(i=x.getDimensions(this.el.parentNode)),t.svgWidth=i[0]*parseInt(e.chart.width,10)/100):\"px\"!==a&&\"\"!==a||(t.svgWidth=parseInt(e.chart.width,10));var s=e.chart.height.toString().split(/[0-9]+/g).pop();if(\"auto\"!==t.svgHeight&&\"\"!==t.svgHeight)if(\"%\"===s){var r=x.getDimensions(this.el.parentNode);t.svgHeight=r[1]*parseInt(e.chart.height,10)/100}else t.svgHeight=parseInt(e.chart.height,10);else t.axisCharts?t.svgHeight=t.svgWidth/1.61:t.svgHeight=t.svgWidth/1.2;if(t.svgWidth<0&&(t.svgWidth=0),t.svgHeight<0&&(t.svgHeight=0),m.setAttrs(t.dom.Paper.node,{width:t.svgWidth,height:t.svgHeight}),\"%\"!==s){var o=e.chart.sparkline.enabled?0:t.axisCharts?e.chart.parentHeightOffset:0;t.dom.Paper.node.parentNode.parentNode.style.minHeight=t.svgHeight+o+\"px\"}t.dom.elWrap.style.width=t.svgWidth+\"px\",t.dom.elWrap.style.height=t.svgHeight+\"px\"}},{key:\"shiftGraphPosition\",value:function(){var t=this.w.globals,e=t.translateY,i={transform:\"translate(\"+t.translateX+\", \"+e+\")\"};m.setAttrs(t.dom.elGraphical.node,i)}},{key:\"resizeNonAxisCharts\",value:function(){var t=this.w,e=t.globals,i=0,a=t.config.chart.sparkline.enabled?1:15;a+=t.config.grid.padding.bottom,\"top\"!==t.config.legend.position&&\"bottom\"!==t.config.legend.position||!t.config.legend.show||t.config.legend.floating||(i=new lt(this.ctx).legendHelpers.getLegendBBox().clwh+10);var s=t.globals.dom.baseEl.querySelector(\".apexcharts-radialbar, .apexcharts-pie\"),r=2.05*t.globals.radialSize;if(s&&!t.config.chart.sparkline.enabled&&0!==t.config.plotOptions.radialBar.startAngle){var o=x.getBoundingClientRect(s);r=o.bottom;var n=o.bottom-o.top;r=Math.max(2.05*t.globals.radialSize,n)}var l=r+e.translateY+i+a;e.dom.elLegendForeign&&e.dom.elLegendForeign.setAttribute(\"height\",l),t.config.chart.height&&String(t.config.chart.height).indexOf(\"%\")>0||(e.dom.elWrap.style.height=l+\"px\",m.setAttrs(e.dom.Paper.node,{height:l}),e.dom.Paper.node.parentNode.parentNode.style.minHeight=l+\"px\")}},{key:\"coreCalculations\",value:function(){new U(this.ctx).init()}},{key:\"resetGlobals\",value:function(){var t=this,e=function(){return t.w.config.series.map((function(t){return[]}))},i=new E,a=this.w.globals;i.initGlobalVars(a),a.seriesXvalues=e(),a.seriesYvalues=e()}},{key:\"isMultipleY\",value:function(){if(this.w.config.yaxis.constructor===Array&&this.w.config.yaxis.length>1)return this.w.globals.isMultipleYAxis=!0,!0}},{key:\"xySettings\",value:function(){var t=null,e=this.w;if(e.globals.axisCharts){if(\"back\"===e.config.xaxis.crosshairs.position)new Q(this.ctx).drawXCrosshairs();if(\"back\"===e.config.yaxis[0].crosshairs.position)new Q(this.ctx).drawYCrosshairs();if(\"datetime\"===e.config.xaxis.type&&void 0===e.config.xaxis.labels.formatter){this.ctx.timeScale=new Rt(this.ctx);var i=[];isFinite(e.globals.minX)&&isFinite(e.globals.maxX)&&!e.globals.isBarHorizontal?i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minX,e.globals.maxX):e.globals.isBarHorizontal&&(i=this.ctx.timeScale.calculateTimeScaleTicks(e.globals.minY,e.globals.maxY)),this.ctx.timeScale.recalcDimensionsBasedOnFormat(i)}t=new y(this.ctx).getCalculatedRatios()}return t}},{key:\"updateSourceChart\",value:function(t){this.ctx.w.globals.selection=void 0,this.ctx.updateHelpers._updateOptions({chart:{selection:{xaxis:{min:t.w.globals.minX,max:t.w.globals.maxX}}}},!1,!1)}},{key:\"setupBrushHandler\",value:function(){var t=this,i=this.w;if(i.config.chart.brush.enabled&&\"function\"!=typeof i.config.chart.events.selection){var a=i.config.chart.brush.targets||[i.config.chart.brush.target];a.forEach((function(e){var i=ApexCharts.getChartByID(e);i.w.globals.brushSource=t.ctx,\"function\"!=typeof i.w.config.chart.events.zoomed&&(i.w.config.chart.events.zoomed=function(){t.updateSourceChart(i)}),\"function\"!=typeof i.w.config.chart.events.scrolled&&(i.w.config.chart.events.scrolled=function(){t.updateSourceChart(i)})})),i.config.chart.events.selection=function(t,s){a.forEach((function(t){var a=ApexCharts.getChartByID(t),r=x.clone(i.config.yaxis);if(i.config.chart.brush.autoScaleYaxis&&1===a.w.globals.series.length){var o=new _(a);r=o.autoScaleY(a,r,s)}var n=a.w.config.yaxis.reduce((function(t,i,s){return[].concat(u(t),[e(e({},a.w.config.yaxis[s]),{},{min:r[0].min,max:r[0].max})])}),[]);a.ctx.updateHelpers._updateOptions({xaxis:{min:s.xaxis.min,max:s.xaxis.max},yaxis:n},!1,!1,!1,!1)}))}}}}]),t}(),Ht=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"_updateOptions\",value:function(t){var e=this,a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return new Promise((function(n){var l=[e.ctx];r&&(l=e.ctx.getSyncedCharts()),e.ctx.w.globals.isExecCalled&&(l=[e.ctx],e.ctx.w.globals.isExecCalled=!1),l.forEach((function(r,h){var c=r.w;if(c.globals.shouldAnimate=s,a||(c.globals.resized=!0,c.globals.dataChanged=!0,s&&r.series.getPreviousPaths()),t&&\"object\"===i(t)&&(r.config=new z(t),t=y.extendArrayProps(r.config,t,c),r.w.globals.chartID!==e.ctx.w.globals.chartID&&delete t.series,c.config=x.extend(c.config,t),o&&(c.globals.lastXAxis=t.xaxis?x.clone(t.xaxis):[],c.globals.lastYAxis=t.yaxis?x.clone(t.yaxis):[],c.globals.initialConfig=x.extend({},c.config),c.globals.initialSeries=x.clone(c.config.series),t.series))){for(var d=0;d<c.globals.collapsedSeriesIndices.length;d++){var g=c.config.series[c.globals.collapsedSeriesIndices[d]];c.globals.collapsedSeries[d].data=c.globals.axisCharts?g.data.slice():g}for(var u=0;u<c.globals.ancillaryCollapsedSeriesIndices.length;u++){var f=c.config.series[c.globals.ancillaryCollapsedSeriesIndices[u]];c.globals.ancillaryCollapsedSeries[u].data=c.globals.axisCharts?f.data.slice():f}r.series.emptyCollapsedSeries(c.config.series)}return r.update(t).then((function(){h===l.length-1&&n(r)}))}))}))}},{key:\"_updateSeries\",value:function(t,e){var i=this,a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return new Promise((function(s){var r,o=i.w;return o.globals.shouldAnimate=e,o.globals.dataChanged=!0,e&&i.ctx.series.getPreviousPaths(),o.globals.axisCharts?(0===(r=t.map((function(t,e){return i._extendSeries(t,e)}))).length&&(r=[{data:[]}]),o.config.series=r):o.config.series=t.slice(),a&&(o.globals.initialConfig.series=x.clone(o.config.series),o.globals.initialSeries=x.clone(o.config.series)),i.ctx.update().then((function(){s(i.ctx)}))}))}},{key:\"_extendSeries\",value:function(t,i){var a=this.w,s=a.config.series[i];return e(e({},a.config.series[i]),{},{name:t.name?t.name:s&&s.name,color:t.color?t.color:s&&s.color,type:t.type?t.type:s&&s.type,data:t.data?t.data:s&&s.data})}},{key:\"toggleDataPointSelection\",value:function(t,e){var i=this.w,a=null,s=\".apexcharts-series[data\\\\:realIndex='\".concat(t,\"']\");return i.globals.axisCharts?a=i.globals.dom.Paper.select(\"\".concat(s,\" path[j='\").concat(e,\"'], \").concat(s,\" circle[j='\").concat(e,\"'], \").concat(s,\" rect[j='\").concat(e,\"']\")).members[0]:void 0===e&&(a=i.globals.dom.Paper.select(\"\".concat(s,\" path[j='\").concat(t,\"']\")).members[0],\"pie\"!==i.config.chart.type&&\"polarArea\"!==i.config.chart.type&&\"donut\"!==i.config.chart.type||this.ctx.pie.pieClicked(t)),a?(new m(this.ctx).pathMouseDown(a,null),a.node?a.node:null):(console.warn(\"toggleDataPointSelection: Element not found\"),null)}},{key:\"forceXAxisUpdate\",value:function(t){var e=this.w;if([\"min\",\"max\"].forEach((function(i){void 0!==t.xaxis[i]&&(e.config.xaxis[i]=t.xaxis[i],e.globals.lastXAxis[i]=t.xaxis[i])})),t.xaxis.categories&&t.xaxis.categories.length&&(e.config.xaxis.categories=t.xaxis.categories),e.config.xaxis.convertedCatToNumeric){var i=new X(t);t=i.convertCatToNumericXaxis(t,this.ctx)}return t}},{key:\"forceYAxisUpdate\",value:function(t){return t.chart&&t.chart.stacked&&\"100%\"===t.chart.stackType&&(Array.isArray(t.yaxis)?t.yaxis.forEach((function(e,i){t.yaxis[i].min=0,t.yaxis[i].max=100})):(t.yaxis.min=0,t.yaxis.max=100)),t}},{key:\"revertDefaultAxisMinMax\",value:function(t){var e=this,i=this.w,a=i.globals.lastXAxis,s=i.globals.lastYAxis;t&&t.xaxis&&(a=t.xaxis),t&&t.yaxis&&(s=t.yaxis),i.config.xaxis.min=a.min,i.config.xaxis.max=a.max;var r=function(t){void 0!==s[t]&&(i.config.yaxis[t].min=s[t].min,i.config.yaxis[t].max=s[t].max)};i.config.yaxis.map((function(t,a){i.globals.zoomed||void 0!==s[a]?r(a):void 0!==e.ctx.opts.yaxis[a]&&(t.min=e.ctx.opts.yaxis[a].min,t.max=e.ctx.opts.yaxis[a].max)}))}}]),t}();zt=\"undefined\"!=typeof window?window:void 0,Et=function(t,e){var a=(void 0!==this?this:t).SVG=function(t){if(a.supported)return t=new a.Doc(t),a.parser.draw||a.prepare(),t};if(a.ns=\"http://www.w3.org/2000/svg\",a.xmlns=\"http://www.w3.org/2000/xmlns/\",a.xlink=\"http://www.w3.org/1999/xlink\",a.svgjs=\"http://svgjs.dev\",a.supported=!0,!a.supported)return!1;a.did=1e3,a.eid=function(t){return\"Svgjs\"+d(t)+a.did++},a.create=function(t){var i=e.createElementNS(this.ns,t);return i.setAttribute(\"id\",this.eid(t)),i},a.extend=function(){var t,e;e=(t=[].slice.call(arguments)).pop();for(var i=t.length-1;i>=0;i--)if(t[i])for(var s in e)t[i].prototype[s]=e[s];a.Set&&a.Set.inherit&&a.Set.inherit()},a.invent=function(t){var e=\"function\"==typeof t.create?t.create:function(){this.constructor.call(this,a.create(t.create))};return t.inherit&&(e.prototype=new t.inherit),t.extend&&a.extend(e,t.extend),t.construct&&a.extend(t.parent||a.Container,t.construct),e},a.adopt=function(e){return e?e.instance?e.instance:((i=\"svg\"==e.nodeName?e.parentNode instanceof t.SVGElement?new a.Nested:new a.Doc:\"linearGradient\"==e.nodeName?new a.Gradient(\"linear\"):\"radialGradient\"==e.nodeName?new a.Gradient(\"radial\"):a[d(e.nodeName)]?new(a[d(e.nodeName)]):new a.Element(e)).type=e.nodeName,i.node=e,e.instance=i,i instanceof a.Doc&&i.namespace().defs(),i.setData(JSON.parse(e.getAttribute(\"svgjs:data\"))||{}),i):null;var i},a.prepare=function(){var t=e.getElementsByTagName(\"body\")[0],i=(t?new a.Doc(t):a.adopt(e.documentElement).nested()).size(2,0);a.parser={body:t||e.documentElement,draw:i.style(\"opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden\").node,poly:i.polyline().node,path:i.path().node,native:a.create(\"svg\")}},a.parser={native:a.create(\"svg\")},e.addEventListener(\"DOMContentLoaded\",(function(){a.parser.draw||a.prepare()}),!1),a.regex={numberAndUnit:/^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i,hex:/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,rgb:/rgb\\((\\d+),(\\d+),(\\d+)\\)/,reference:/#([a-z0-9\\-_]+)/i,transforms:/\\)\\s*,?\\s*/,whitespace:/\\s/g,isHex:/^#[a-f0-9]{3,6}$/i,isRgb:/^rgb\\(/,isCss:/[^:]+:[^;]+;?/,isBlank:/^(\\s+)?$/,isNumber:/^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,isPercent:/^-?[\\d\\.]+%$/,isImage:/\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i,delimiter:/[\\s,]+/,hyphen:/([^e])\\-/gi,pathLetters:/[MLHVCSQTAZ]/gi,isPathLetter:/[MLHVCSQTAZ]/i,numbersWithDots:/((\\d?\\.\\d+(?:e[+-]?\\d+)?)((?:\\.\\d+(?:e[+-]?\\d+)?)+))+/gi,dots:/\\./g},a.utils={map:function(t,e){for(var i=t.length,a=[],s=0;s<i;s++)a.push(e(t[s]));return a},filter:function(t,e){for(var i=t.length,a=[],s=0;s<i;s++)e(t[s])&&a.push(t[s]);return a},filterSVGElements:function(e){return this.filter(e,(function(e){return e instanceof t.SVGElement}))}},a.defaults={attrs:{\"fill-opacity\":1,\"stroke-opacity\":1,\"stroke-width\":0,\"stroke-linejoin\":\"miter\",\"stroke-linecap\":\"butt\",fill:\"#000000\",stroke:\"#000000\",opacity:1,x:0,y:0,cx:0,cy:0,width:0,height:0,r:0,rx:0,ry:0,offset:0,\"stop-opacity\":1,\"stop-color\":\"#000000\",\"font-size\":16,\"font-family\":\"Helvetica, Arial, sans-serif\",\"text-anchor\":\"start\"}},a.Color=function(t){var e,s;this.r=0,this.g=0,this.b=0,t&&(\"string\"==typeof t?a.regex.isRgb.test(t)?(e=a.regex.rgb.exec(t.replace(a.regex.whitespace,\"\")),this.r=parseInt(e[1]),this.g=parseInt(e[2]),this.b=parseInt(e[3])):a.regex.isHex.test(t)&&(e=a.regex.hex.exec(4==(s=t).length?[\"#\",s.substring(1,2),s.substring(1,2),s.substring(2,3),s.substring(2,3),s.substring(3,4),s.substring(3,4)].join(\"\"):s),this.r=parseInt(e[1],16),this.g=parseInt(e[2],16),this.b=parseInt(e[3],16)):\"object\"===i(t)&&(this.r=t.r,this.g=t.g,this.b=t.b))},a.extend(a.Color,{toString:function(){return this.toHex()},toHex:function(){return\"#\"+g(this.r)+g(this.g)+g(this.b)},toRgb:function(){return\"rgb(\"+[this.r,this.g,this.b].join()+\")\"},brightness:function(){return this.r/255*.3+this.g/255*.59+this.b/255*.11},morph:function(t){return this.destination=new a.Color(t),this},at:function(t){return this.destination?(t=t<0?0:t>1?1:t,new a.Color({r:~~(this.r+(this.destination.r-this.r)*t),g:~~(this.g+(this.destination.g-this.g)*t),b:~~(this.b+(this.destination.b-this.b)*t)})):this}}),a.Color.test=function(t){return t+=\"\",a.regex.isHex.test(t)||a.regex.isRgb.test(t)},a.Color.isRgb=function(t){return t&&\"number\"==typeof t.r&&\"number\"==typeof t.g&&\"number\"==typeof t.b},a.Color.isColor=function(t){return a.Color.isRgb(t)||a.Color.test(t)},a.Array=function(t,e){0==(t=(t||[]).valueOf()).length&&e&&(t=e.valueOf()),this.value=this.parse(t)},a.extend(a.Array,{toString:function(){return this.value.join(\" \")},valueOf:function(){return this.value},parse:function(t){return t=t.valueOf(),Array.isArray(t)?t:this.split(t)}}),a.PointArray=function(t,e){a.Array.call(this,t,e||[[0,0]])},a.PointArray.prototype=new a.Array,a.PointArray.prototype.constructor=a.PointArray;for(var s={M:function(t,e,i){return e.x=i.x=t[0],e.y=i.y=t[1],[\"M\",e.x,e.y]},L:function(t,e){return e.x=t[0],e.y=t[1],[\"L\",t[0],t[1]]},H:function(t,e){return e.x=t[0],[\"H\",t[0]]},V:function(t,e){return e.y=t[0],[\"V\",t[0]]},C:function(t,e){return e.x=t[4],e.y=t[5],[\"C\",t[0],t[1],t[2],t[3],t[4],t[5]]},Q:function(t,e){return e.x=t[2],e.y=t[3],[\"Q\",t[0],t[1],t[2],t[3]]},Z:function(t,e,i){return e.x=i.x,e.y=i.y,[\"Z\"]}},r=\"mlhvqtcsaz\".split(\"\"),o=0,n=r.length;o<n;++o)s[r[o]]=function(t){return function(e,i,a){if(\"H\"==t)e[0]=e[0]+i.x;else if(\"V\"==t)e[0]=e[0]+i.y;else if(\"A\"==t)e[5]=e[5]+i.x,e[6]=e[6]+i.y;else for(var r=0,o=e.length;r<o;++r)e[r]=e[r]+(r%2?i.y:i.x);if(s&&\"function\"==typeof s[t])return s[t](e,i,a)}}(r[o].toUpperCase());a.PathArray=function(t,e){a.Array.call(this,t,e||[[\"M\",0,0]])},a.PathArray.prototype=new a.Array,a.PathArray.prototype.constructor=a.PathArray,a.extend(a.PathArray,{toString:function(){return function(t){for(var e=0,i=t.length,a=\"\";e<i;e++)a+=t[e][0],null!=t[e][1]&&(a+=t[e][1],null!=t[e][2]&&(a+=\" \",a+=t[e][2],null!=t[e][3]&&(a+=\" \",a+=t[e][3],a+=\" \",a+=t[e][4],null!=t[e][5]&&(a+=\" \",a+=t[e][5],a+=\" \",a+=t[e][6],null!=t[e][7]&&(a+=\" \",a+=t[e][7])))));return a+\" \"}(this.value)},move:function(t,e){var i=this.bbox();return i.x,i.y,this},at:function(t){if(!this.destination)return this;for(var e=this.value,i=this.destination.value,s=[],r=new a.PathArray,o=0,n=e.length;o<n;o++){s[o]=[e[o][0]];for(var l=1,h=e[o].length;l<h;l++)s[o][l]=e[o][l]+(i[o][l]-e[o][l])*t;\"A\"===s[o][0]&&(s[o][4]=+(0!=s[o][4]),s[o][5]=+(0!=s[o][5]))}return r.value=s,r},parse:function(t){if(t instanceof a.PathArray)return t.valueOf();var e,i={M:2,L:2,H:1,V:1,C:6,S:4,Q:4,T:2,A:7,Z:0};t=\"string\"==typeof t?t.replace(a.regex.numbersWithDots,h).replace(a.regex.pathLetters,\" $& \").replace(a.regex.hyphen,\"$1 -\").trim().split(a.regex.delimiter):t.reduce((function(t,e){return[].concat.call(t,e)}),[]);var r=[],o=new a.Point,n=new a.Point,l=0,c=t.length;do{a.regex.isPathLetter.test(t[l])?(e=t[l],++l):\"M\"==e?e=\"L\":\"m\"==e&&(e=\"l\"),r.push(s[e].call(null,t.slice(l,l+=i[e.toUpperCase()]).map(parseFloat),o,n))}while(c>l);return r},bbox:function(){return a.parser.draw||a.prepare(),a.parser.path.setAttribute(\"d\",this.toString()),a.parser.path.getBBox()}}),a.Number=a.invent({create:function(t,e){this.value=0,this.unit=e||\"\",\"number\"==typeof t?this.value=isNaN(t)?0:isFinite(t)?t:t<0?-34e37:34e37:\"string\"==typeof t?(e=t.match(a.regex.numberAndUnit))&&(this.value=parseFloat(e[1]),\"%\"==e[5]?this.value/=100:\"s\"==e[5]&&(this.value*=1e3),this.unit=e[5]):t instanceof a.Number&&(this.value=t.valueOf(),this.unit=t.unit)},extend:{toString:function(){return(\"%\"==this.unit?~~(1e8*this.value)/1e6:\"s\"==this.unit?this.value/1e3:this.value)+this.unit},toJSON:function(){return this.toString()},valueOf:function(){return this.value},plus:function(t){return t=new a.Number(t),new a.Number(this+t,this.unit||t.unit)},minus:function(t){return t=new a.Number(t),new a.Number(this-t,this.unit||t.unit)},times:function(t){return t=new a.Number(t),new a.Number(this*t,this.unit||t.unit)},divide:function(t){return t=new a.Number(t),new a.Number(this/t,this.unit||t.unit)},to:function(t){var e=new a.Number(this);return\"string\"==typeof t&&(e.unit=t),e},morph:function(t){return this.destination=new a.Number(t),t.relative&&(this.destination.value+=this.value),this},at:function(t){return this.destination?new a.Number(this.destination).minus(this).times(t).plus(this):this}}}),a.Element=a.invent({create:function(t){this._stroke=a.defaults.attrs.stroke,this._event=null,this.dom={},(this.node=t)&&(this.type=t.nodeName,this.node.instance=this,this._stroke=t.getAttribute(\"stroke\")||this._stroke)},extend:{x:function(t){return this.attr(\"x\",t)},y:function(t){return this.attr(\"y\",t)},cx:function(t){return null==t?this.x()+this.width()/2:this.x(t-this.width()/2)},cy:function(t){return null==t?this.y()+this.height()/2:this.y(t-this.height()/2)},move:function(t,e){return this.x(t).y(e)},center:function(t,e){return this.cx(t).cy(e)},width:function(t){return this.attr(\"width\",t)},height:function(t){return this.attr(\"height\",t)},size:function(t,e){var i=u(this,t,e);return this.width(new a.Number(i.width)).height(new a.Number(i.height))},clone:function(t){this.writeDataToDom();var e=x(this.node.cloneNode(!0));return t?t.add(e):this.after(e),e},remove:function(){return this.parent()&&this.parent().removeElement(this),this},replace:function(t){return this.after(t).remove(),t},addTo:function(t){return t.put(this)},putIn:function(t){return t.add(this)},id:function(t){return this.attr(\"id\",t)},show:function(){return this.style(\"display\",\"\")},hide:function(){return this.style(\"display\",\"none\")},visible:function(){return\"none\"!=this.style(\"display\")},toString:function(){return this.attr(\"id\")},classes:function(){var t=this.attr(\"class\");return null==t?[]:t.trim().split(a.regex.delimiter)},hasClass:function(t){return-1!=this.classes().indexOf(t)},addClass:function(t){if(!this.hasClass(t)){var e=this.classes();e.push(t),this.attr(\"class\",e.join(\" \"))}return this},removeClass:function(t){return this.hasClass(t)&&this.attr(\"class\",this.classes().filter((function(e){return e!=t})).join(\" \")),this},toggleClass:function(t){return this.hasClass(t)?this.removeClass(t):this.addClass(t)},reference:function(t){return a.get(this.attr(t))},parent:function(e){var i=this;if(!i.node.parentNode)return null;if(i=a.adopt(i.node.parentNode),!e)return i;for(;i&&i.node instanceof t.SVGElement;){if(\"string\"==typeof e?i.matches(e):i instanceof e)return i;if(!i.node.parentNode||\"#document\"==i.node.parentNode.nodeName)return null;i=a.adopt(i.node.parentNode)}},doc:function(){return this instanceof a.Doc?this:this.parent(a.Doc)},parents:function(t){var e=[],i=this;do{if(!(i=i.parent(t))||!i.node)break;e.push(i)}while(i.parent);return e},matches:function(t){return function(t,e){return(t.matches||t.matchesSelector||t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||t.oMatchesSelector).call(t,e)}(this.node,t)},native:function(){return this.node},svg:function(t){var i=e.createElement(\"svg\");if(!(t&&this instanceof a.Parent))return i.appendChild(t=e.createElement(\"svg\")),this.writeDataToDom(),t.appendChild(this.node.cloneNode(!0)),i.innerHTML.replace(/^<svg>/,\"\").replace(/<\\/svg>$/,\"\");i.innerHTML=\"<svg>\"+t.replace(/\\n/,\"\").replace(/<([\\w:-]+)([^<]+?)\\/>/g,\"<$1$2></$1>\")+\"</svg>\";for(var s=0,r=i.firstChild.childNodes.length;s<r;s++)this.node.appendChild(i.firstChild.firstChild);return this},writeDataToDom:function(){return(this.each||this.lines)&&(this.each?this:this.lines()).each((function(){this.writeDataToDom()})),this.node.removeAttribute(\"svgjs:data\"),Object.keys(this.dom).length&&this.node.setAttribute(\"svgjs:data\",JSON.stringify(this.dom)),this},setData:function(t){return this.dom=t,this},is:function(t){return function(t,e){return t instanceof e}(this,t)}}}),a.easing={\"-\":function(t){return t},\"<>\":function(t){return-Math.cos(t*Math.PI)/2+.5},\">\":function(t){return Math.sin(t*Math.PI/2)},\"<\":function(t){return 1-Math.cos(t*Math.PI/2)}},a.morph=function(t){return function(e,i){return new a.MorphObj(e,i).at(t)}},a.Situation=a.invent({create:function(t){this.init=!1,this.reversed=!1,this.reversing=!1,this.duration=new a.Number(t.duration).valueOf(),this.delay=new a.Number(t.delay).valueOf(),this.start=+new Date+this.delay,this.finish=this.start+this.duration,this.ease=t.ease,this.loop=0,this.loops=!1,this.animations={},this.attrs={},this.styles={},this.transforms=[],this.once={}}}),a.FX=a.invent({create:function(t){this._target=t,this.situations=[],this.active=!1,this.situation=null,this.paused=!1,this.lastPos=0,this.pos=0,this.absPos=0,this._speed=1},extend:{animate:function(t,e,s){\"object\"===i(t)&&(e=t.ease,s=t.delay,t=t.duration);var r=new a.Situation({duration:t||1e3,delay:s||0,ease:a.easing[e||\"-\"]||e});return this.queue(r),this},target:function(t){return t&&t instanceof a.Element?(this._target=t,this):this._target},timeToAbsPos:function(t){return(t-this.situation.start)/(this.situation.duration/this._speed)},absPosToTime:function(t){return this.situation.duration/this._speed*t+this.situation.start},startAnimFrame:function(){this.stopAnimFrame(),this.animationFrame=t.requestAnimationFrame(function(){this.step()}.bind(this))},stopAnimFrame:function(){t.cancelAnimationFrame(this.animationFrame)},start:function(){return!this.active&&this.situation&&(this.active=!0,this.startCurrent()),this},startCurrent:function(){return this.situation.start=+new Date+this.situation.delay/this._speed,this.situation.finish=this.situation.start+this.situation.duration/this._speed,this.initAnimations().step()},queue:function(t){return(\"function\"==typeof t||t instanceof a.Situation)&&this.situations.push(t),this.situation||(this.situation=this.situations.shift()),this},dequeue:function(){return this.stop(),this.situation=this.situations.shift(),this.situation&&(this.situation instanceof a.Situation?this.start():this.situation.call(this)),this},initAnimations:function(){var t,e=this.situation;if(e.init)return this;for(var i in e.animations){t=this.target()[i](),Array.isArray(t)||(t=[t]),Array.isArray(e.animations[i])||(e.animations[i]=[e.animations[i]]);for(var s=t.length;s--;)e.animations[i][s]instanceof a.Number&&(t[s]=new a.Number(t[s])),e.animations[i][s]=t[s].morph(e.animations[i][s])}for(var i in e.attrs)e.attrs[i]=new a.MorphObj(this.target().attr(i),e.attrs[i]);for(var i in e.styles)e.styles[i]=new a.MorphObj(this.target().style(i),e.styles[i]);return e.initialTransformation=this.target().matrixify(),e.init=!0,this},clearQueue:function(){return this.situations=[],this},clearCurrent:function(){return this.situation=null,this},stop:function(t,e){var i=this.active;return this.active=!1,e&&this.clearQueue(),t&&this.situation&&(!i&&this.startCurrent(),this.atEnd()),this.stopAnimFrame(),this.clearCurrent()},after:function(t){var e=this.last();return this.target().on(\"finished.fx\",(function i(a){a.detail.situation==e&&(t.call(this,e),this.off(\"finished.fx\",i))})),this._callStart()},during:function(t){var e=this.last(),i=function(i){i.detail.situation==e&&t.call(this,i.detail.pos,a.morph(i.detail.pos),i.detail.eased,e)};return this.target().off(\"during.fx\",i).on(\"during.fx\",i),this.after((function(){this.off(\"during.fx\",i)})),this._callStart()},afterAll:function(t){var e=function e(i){t.call(this),this.off(\"allfinished.fx\",e)};return this.target().off(\"allfinished.fx\",e).on(\"allfinished.fx\",e),this._callStart()},last:function(){return this.situations.length?this.situations[this.situations.length-1]:this.situation},add:function(t,e,i){return this.last()[i||\"animations\"][t]=e,this._callStart()},step:function(t){var e,i,a;t||(this.absPos=this.timeToAbsPos(+new Date)),!1!==this.situation.loops?(e=Math.max(this.absPos,0),i=Math.floor(e),!0===this.situation.loops||i<this.situation.loops?(this.pos=e-i,a=this.situation.loop,this.situation.loop=i):(this.absPos=this.situation.loops,this.pos=1,a=this.situation.loop-1,this.situation.loop=this.situation.loops),this.situation.reversing&&(this.situation.reversed=this.situation.reversed!=Boolean((this.situation.loop-a)%2))):(this.absPos=Math.min(this.absPos,1),this.pos=this.absPos),this.pos<0&&(this.pos=0),this.situation.reversed&&(this.pos=1-this.pos);var s=this.situation.ease(this.pos);for(var r in this.situation.once)r>this.lastPos&&r<=s&&(this.situation.once[r].call(this.target(),this.pos,s),delete this.situation.once[r]);return this.active&&this.target().fire(\"during\",{pos:this.pos,eased:s,fx:this,situation:this.situation}),this.situation?(this.eachAt(),1==this.pos&&!this.situation.reversed||this.situation.reversed&&0==this.pos?(this.stopAnimFrame(),this.target().fire(\"finished\",{fx:this,situation:this.situation}),this.situations.length||(this.target().fire(\"allfinished\"),this.situations.length||(this.target().off(\".fx\"),this.active=!1)),this.active?this.dequeue():this.clearCurrent()):!this.paused&&this.active&&this.startAnimFrame(),this.lastPos=s,this):this},eachAt:function(){var t,e=this,i=this.target(),s=this.situation;for(var r in s.animations)t=[].concat(s.animations[r]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i[r].apply(i,t);for(var r in s.attrs)t=[r].concat(s.attrs[r]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.attr.apply(i,t);for(var r in s.styles)t=[r].concat(s.styles[r]).map((function(t){return\"string\"!=typeof t&&t.at?t.at(s.ease(e.pos),e.pos):t})),i.style.apply(i,t);if(s.transforms.length){t=s.initialTransformation,r=0;for(var o=s.transforms.length;r<o;r++){var n=s.transforms[r];n instanceof a.Matrix?t=n.relative?t.multiply((new a.Matrix).morph(n).at(s.ease(this.pos))):t.morph(n).at(s.ease(this.pos)):(n.relative||n.undo(t.extract()),t=t.multiply(n.at(s.ease(this.pos))))}i.matrix(t)}return this},once:function(t,e,i){var a=this.last();return i||(t=a.ease(t)),a.once[t]=e,this},_callStart:function(){return setTimeout(function(){this.start()}.bind(this),0),this}},parent:a.Element,construct:{animate:function(t,e,i){return(this.fx||(this.fx=new a.FX(this))).animate(t,e,i)},delay:function(t){return(this.fx||(this.fx=new a.FX(this))).delay(t)},stop:function(t,e){return this.fx&&this.fx.stop(t,e),this},finish:function(){return this.fx&&this.fx.finish(),this}}}),a.MorphObj=a.invent({create:function(t,e){return a.Color.isColor(e)?new a.Color(t).morph(e):a.regex.delimiter.test(t)?a.regex.pathLetters.test(t)?new a.PathArray(t).morph(e):new a.Array(t).morph(e):a.regex.numberAndUnit.test(e)?new a.Number(t).morph(e):(this.value=t,void(this.destination=e))},extend:{at:function(t,e){return e<1?this.value:this.destination},valueOf:function(){return this.value}}}),a.extend(a.FX,{attr:function(t,e,a){if(\"object\"===i(t))for(var s in t)this.attr(s,t[s]);else this.add(t,e,\"attrs\");return this},plot:function(t,e,i,a){return 4==arguments.length?this.plot([t,e,i,a]):this.add(\"plot\",new(this.target().morphArray)(t))}}),a.Box=a.invent({create:function(t,e,s,r){if(!(\"object\"!==i(t)||t instanceof a.Element))return a.Box.call(this,null!=t.left?t.left:t.x,null!=t.top?t.top:t.y,t.width,t.height);4==arguments.length&&(this.x=t,this.y=e,this.width=s,this.height=r),b(this)}}),a.BBox=a.invent({create:function(t){if(a.Box.apply(this,[].slice.call(arguments)),t instanceof a.Element){var i;try{if(!e.documentElement.contains){for(var s=t.node;s.parentNode;)s=s.parentNode;if(s!=e)throw new Error(\"Element not in the dom\")}i=t.node.getBBox()}catch(e){if(t instanceof a.Shape){a.parser.draw||a.prepare();var r=t.clone(a.parser.draw.instance).show();r&&r.node&&\"function\"==typeof r.node.getBBox&&(i=r.node.getBBox()),r&&\"function\"==typeof r.remove&&r.remove()}else i={x:t.node.clientLeft,y:t.node.clientTop,width:t.node.clientWidth,height:t.node.clientHeight}}a.Box.call(this,i)}},inherit:a.Box,parent:a.Element,construct:{bbox:function(){return new a.BBox(this)}}}),a.BBox.prototype.constructor=a.BBox,a.Matrix=a.invent({create:function(t){var e=p([1,0,0,1,0,0]);t=null===t?e:t instanceof a.Element?t.matrixify():\"string\"==typeof t?p(t.split(a.regex.delimiter).map(parseFloat)):6==arguments.length?p([].slice.call(arguments)):Array.isArray(t)?p(t):t&&\"object\"===i(t)?t:e;for(var s=m.length-1;s>=0;--s)this[m[s]]=null!=t[m[s]]?t[m[s]]:e[m[s]]},extend:{extract:function(){var t=f(this,0,1);f(this,1,0);var e=180/Math.PI*Math.atan2(t.y,t.x)-90;return{x:this.e,y:this.f,transformedX:(this.e*Math.cos(e*Math.PI/180)+this.f*Math.sin(e*Math.PI/180))/Math.sqrt(this.a*this.a+this.b*this.b),transformedY:(this.f*Math.cos(e*Math.PI/180)+this.e*Math.sin(-e*Math.PI/180))/Math.sqrt(this.c*this.c+this.d*this.d),rotation:e,a:this.a,b:this.b,c:this.c,d:this.d,e:this.e,f:this.f,matrix:new a.Matrix(this)}},clone:function(){return new a.Matrix(this)},morph:function(t){return this.destination=new a.Matrix(t),this},multiply:function(t){return new a.Matrix(this.native().multiply(function(t){return t instanceof a.Matrix||(t=new a.Matrix(t)),t}(t).native()))},inverse:function(){return new a.Matrix(this.native().inverse())},translate:function(t,e){return new a.Matrix(this.native().translate(t||0,e||0))},native:function(){for(var t=a.parser.native.createSVGMatrix(),e=m.length-1;e>=0;e--)t[m[e]]=this[m[e]];return t},toString:function(){return\"matrix(\"+v(this.a)+\",\"+v(this.b)+\",\"+v(this.c)+\",\"+v(this.d)+\",\"+v(this.e)+\",\"+v(this.f)+\")\"}},parent:a.Element,construct:{ctm:function(){return new a.Matrix(this.node.getCTM())},screenCTM:function(){if(this instanceof a.Nested){var t=this.rect(1,1),e=t.node.getScreenCTM();return t.remove(),new a.Matrix(e)}return new a.Matrix(this.node.getScreenCTM())}}}),a.Point=a.invent({create:function(t,e){var a;a=Array.isArray(t)?{x:t[0],y:t[1]}:\"object\"===i(t)?{x:t.x,y:t.y}:null!=t?{x:t,y:null!=e?e:t}:{x:0,y:0},this.x=a.x,this.y=a.y},extend:{clone:function(){return new a.Point(this)},morph:function(t,e){return this.destination=new a.Point(t,e),this}}}),a.extend(a.Element,{point:function(t,e){return new a.Point(t,e).transform(this.screenCTM().inverse())}}),a.extend(a.Element,{attr:function(t,e,s){if(null==t){for(t={},s=(e=this.node.attributes).length-1;s>=0;s--)t[e[s].nodeName]=a.regex.isNumber.test(e[s].nodeValue)?parseFloat(e[s].nodeValue):e[s].nodeValue;return t}if(\"object\"===i(t))for(var r in t)this.attr(r,t[r]);else if(null===e)this.node.removeAttribute(t);else{if(null==e)return null==(e=this.node.getAttribute(t))?a.defaults.attrs[t]:a.regex.isNumber.test(e)?parseFloat(e):e;\"stroke-width\"==t?this.attr(\"stroke\",parseFloat(e)>0?this._stroke:null):\"stroke\"==t&&(this._stroke=e),\"fill\"!=t&&\"stroke\"!=t||(a.regex.isImage.test(e)&&(e=this.doc().defs().image(e,0,0)),e instanceof a.Image&&(e=this.doc().defs().pattern(0,0,(function(){this.add(e)})))),\"number\"==typeof e?e=new a.Number(e):a.Color.isColor(e)?e=new a.Color(e):Array.isArray(e)&&(e=new a.Array(e)),\"leading\"==t?this.leading&&this.leading(e):\"string\"==typeof s?this.node.setAttributeNS(s,t,e.toString()):this.node.setAttribute(t,e.toString()),!this.rebuild||\"font-size\"!=t&&\"x\"!=t||this.rebuild(t,e)}return this}}),a.extend(a.Element,{transform:function(t,e){var s;return\"object\"!==i(t)?(s=new a.Matrix(this).extract(),\"string\"==typeof t?s[t]:s):(s=new a.Matrix(this),e=!!e||!!t.relative,null!=t.a&&(s=e?s.multiply(new a.Matrix(t)):new a.Matrix(t)),this.attr(\"transform\",s))}}),a.extend(a.Element,{untransform:function(){return this.attr(\"transform\",null)},matrixify:function(){return(this.attr(\"transform\")||\"\").split(a.regex.transforms).slice(0,-1).map((function(t){var e=t.trim().split(\"(\");return[e[0],e[1].split(a.regex.delimiter).map((function(t){return parseFloat(t)}))]})).reduce((function(t,e){return\"matrix\"==e[0]?t.multiply(p(e[1])):t[e[0]].apply(t,e[1])}),new a.Matrix)},toParent:function(t){if(this==t)return this;var e=this.screenCTM(),i=t.screenCTM().inverse();return this.addTo(t).untransform().transform(i.multiply(e)),this},toDoc:function(){return this.toParent(this.doc())}}),a.Transformation=a.invent({create:function(t,e){if(arguments.length>1&&\"boolean\"!=typeof e)return this.constructor.call(this,[].slice.call(arguments));if(Array.isArray(t))for(var a=0,s=this.arguments.length;a<s;++a)this[this.arguments[a]]=t[a];else if(t&&\"object\"===i(t))for(a=0,s=this.arguments.length;a<s;++a)this[this.arguments[a]]=t[this.arguments[a]];this.inversed=!1,!0===e&&(this.inversed=!0)}}),a.Translate=a.invent({parent:a.Matrix,inherit:a.Transformation,create:function(t,e){this.constructor.apply(this,[].slice.call(arguments))},extend:{arguments:[\"transformedX\",\"transformedY\"],method:\"translate\"}}),a.extend(a.Element,{style:function(t,e){if(0==arguments.length)return this.node.style.cssText||\"\";if(arguments.length<2)if(\"object\"===i(t))for(var s in t)this.style(s,t[s]);else{if(!a.regex.isCss.test(t))return this.node.style[c(t)];for(t=t.split(/\\s*;\\s*/).filter((function(t){return!!t})).map((function(t){return t.split(/\\s*:\\s*/)}));e=t.pop();)this.style(e[0],e[1])}else this.node.style[c(t)]=null===e||a.regex.isBlank.test(e)?\"\":e;return this}}),a.Parent=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Element,extend:{children:function(){return a.utils.map(a.utils.filterSVGElements(this.node.childNodes),(function(t){return a.adopt(t)}))},add:function(t,e){return null==e?this.node.appendChild(t.node):t.node!=this.node.childNodes[e]&&this.node.insertBefore(t.node,this.node.childNodes[e]),this},put:function(t,e){return this.add(t,e),t},has:function(t){return this.index(t)>=0},index:function(t){return[].slice.call(this.node.childNodes).indexOf(t.node)},get:function(t){return a.adopt(this.node.childNodes[t])},first:function(){return this.get(0)},last:function(){return this.get(this.node.childNodes.length-1)},each:function(t,e){for(var i=this.children(),s=0,r=i.length;s<r;s++)i[s]instanceof a.Element&&t.apply(i[s],[s,i]),e&&i[s]instanceof a.Container&&i[s].each(t,e);return this},removeElement:function(t){return this.node.removeChild(t.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,this},defs:function(){return this.doc().defs()}}}),a.extend(a.Parent,{ungroup:function(t,e){return 0===e||this instanceof a.Defs||this.node==a.parser.draw||(t=t||(this instanceof a.Doc?this:this.parent(a.Parent)),e=e||1/0,this.each((function(){return this instanceof a.Defs?this:this instanceof a.Parent?this.ungroup(t,e-1):this.toParent(t)})),this.node.firstChild||this.remove()),this},flatten:function(t,e){return this.ungroup(t,e)}}),a.Container=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Parent}),a.ViewBox=a.invent({parent:a.Container,construct:{}}),[\"click\",\"dblclick\",\"mousedown\",\"mouseup\",\"mouseover\",\"mouseout\",\"mousemove\",\"touchstart\",\"touchmove\",\"touchleave\",\"touchend\",\"touchcancel\"].forEach((function(t){a.Element.prototype[t]=function(e){return a.on(this.node,t,e),this}})),a.listeners=[],a.handlerMap=[],a.listenerId=0,a.on=function(t,e,i,s,r){var o=i.bind(s||t.instance||t),n=(a.handlerMap.indexOf(t)+1||a.handlerMap.push(t))-1,l=e.split(\".\")[0],h=e.split(\".\")[1]||\"*\";a.listeners[n]=a.listeners[n]||{},a.listeners[n][l]=a.listeners[n][l]||{},a.listeners[n][l][h]=a.listeners[n][l][h]||{},i._svgjsListenerId||(i._svgjsListenerId=++a.listenerId),a.listeners[n][l][h][i._svgjsListenerId]=o,t.addEventListener(l,o,r||{passive:!0})},a.off=function(t,e,i){var s=a.handlerMap.indexOf(t),r=e&&e.split(\".\")[0],o=e&&e.split(\".\")[1],n=\"\";if(-1!=s)if(i){if(\"function\"==typeof i&&(i=i._svgjsListenerId),!i)return;a.listeners[s][r]&&a.listeners[s][r][o||\"*\"]&&(t.removeEventListener(r,a.listeners[s][r][o||\"*\"][i],!1),delete a.listeners[s][r][o||\"*\"][i])}else if(o&&r){if(a.listeners[s][r]&&a.listeners[s][r][o]){for(var l in a.listeners[s][r][o])a.off(t,[r,o].join(\".\"),l);delete a.listeners[s][r][o]}}else if(o)for(var h in a.listeners[s])for(var n in a.listeners[s][h])o===n&&a.off(t,[h,o].join(\".\"));else if(r){if(a.listeners[s][r]){for(var n in a.listeners[s][r])a.off(t,[r,n].join(\".\"));delete a.listeners[s][r]}}else{for(var h in a.listeners[s])a.off(t,h);delete a.listeners[s],delete a.handlerMap[s]}},a.extend(a.Element,{on:function(t,e,i,s){return a.on(this.node,t,e,i,s),this},off:function(t,e){return a.off(this.node,t,e),this},fire:function(e,i){return e instanceof t.Event?this.node.dispatchEvent(e):this.node.dispatchEvent(e=new a.CustomEvent(e,{detail:i,cancelable:!0})),this._event=e,this},event:function(){return this._event}}),a.Defs=a.invent({create:\"defs\",inherit:a.Container}),a.G=a.invent({create:\"g\",inherit:a.Container,extend:{x:function(t){return null==t?this.transform(\"x\"):this.transform({x:t-this.x()},!0)}},construct:{group:function(){return this.put(new a.G)}}}),a.Doc=a.invent({create:function(t){t&&(\"svg\"==(t=\"string\"==typeof t?e.getElementById(t):t).nodeName?this.constructor.call(this,t):(this.constructor.call(this,a.create(\"svg\")),t.appendChild(this.node),this.size(\"100%\",\"100%\")),this.namespace().defs())},inherit:a.Container,extend:{namespace:function(){return this.attr({xmlns:a.ns,version:\"1.1\"}).attr(\"xmlns:xlink\",a.xlink,a.xmlns).attr(\"xmlns:svgjs\",a.svgjs,a.xmlns)},defs:function(){var t;return this._defs||((t=this.node.getElementsByTagName(\"defs\")[0])?this._defs=a.adopt(t):this._defs=new a.Defs,this.node.appendChild(this._defs.node)),this._defs},parent:function(){return this.node.parentNode&&\"#document\"!=this.node.parentNode.nodeName?this.node.parentNode:null},remove:function(){return this.parent()&&this.parent().removeChild(this.node),this},clear:function(){for(;this.node.hasChildNodes();)this.node.removeChild(this.node.lastChild);return delete this._defs,a.parser.draw&&!a.parser.draw.parentNode&&this.node.appendChild(a.parser.draw),this},clone:function(t){this.writeDataToDom();var e=this.node,i=x(e.cloneNode(!0));return t?(t.node||t).appendChild(i.node):e.parentNode.insertBefore(i.node,e.nextSibling),i}}}),a.extend(a.Element,{}),a.Gradient=a.invent({create:function(t){this.constructor.call(this,a.create(t+\"Gradient\")),this.type=t},inherit:a.Container,extend:{at:function(t,e,i){return this.put(new a.Stop).update(t,e,i)},update:function(t){return this.clear(),\"function\"==typeof t&&t.call(this,this),this},fill:function(){return\"url(#\"+this.id()+\")\"},toString:function(){return this.fill()},attr:function(t,e,i){return\"transform\"==t&&(t=\"gradientTransform\"),a.Container.prototype.attr.call(this,t,e,i)}},construct:{gradient:function(t,e){return this.defs().gradient(t,e)}}}),a.extend(a.Gradient,a.FX,{from:function(t,e){return\"radial\"==(this._target||this).type?this.attr({fx:new a.Number(t),fy:new a.Number(e)}):this.attr({x1:new a.Number(t),y1:new a.Number(e)})},to:function(t,e){return\"radial\"==(this._target||this).type?this.attr({cx:new a.Number(t),cy:new a.Number(e)}):this.attr({x2:new a.Number(t),y2:new a.Number(e)})}}),a.extend(a.Defs,{gradient:function(t,e){return this.put(new a.Gradient(t)).update(e)}}),a.Stop=a.invent({create:\"stop\",inherit:a.Element,extend:{update:function(t){return(\"number\"==typeof t||t instanceof a.Number)&&(t={offset:arguments[0],color:arguments[1],opacity:arguments[2]}),null!=t.opacity&&this.attr(\"stop-opacity\",t.opacity),null!=t.color&&this.attr(\"stop-color\",t.color),null!=t.offset&&this.attr(\"offset\",new a.Number(t.offset)),this}}}),a.Pattern=a.invent({create:\"pattern\",inherit:a.Container,extend:{fill:function(){return\"url(#\"+this.id()+\")\"},update:function(t){return this.clear(),\"function\"==typeof t&&t.call(this,this),this},toString:function(){return this.fill()},attr:function(t,e,i){return\"transform\"==t&&(t=\"patternTransform\"),a.Container.prototype.attr.call(this,t,e,i)}},construct:{pattern:function(t,e,i){return this.defs().pattern(t,e,i)}}}),a.extend(a.Defs,{pattern:function(t,e,i){return this.put(new a.Pattern).update(i).attr({x:0,y:0,width:t,height:e,patternUnits:\"userSpaceOnUse\"})}}),a.Shape=a.invent({create:function(t){this.constructor.call(this,t)},inherit:a.Element}),a.Symbol=a.invent({create:\"symbol\",inherit:a.Container,construct:{symbol:function(){return this.put(new a.Symbol)}}}),a.Use=a.invent({create:\"use\",inherit:a.Shape,extend:{element:function(t,e){return this.attr(\"href\",(e||\"\")+\"#\"+t,a.xlink)}},construct:{use:function(t,e){return this.put(new a.Use).element(t,e)}}}),a.Rect=a.invent({create:\"rect\",inherit:a.Shape,construct:{rect:function(t,e){return this.put(new a.Rect).size(t,e)}}}),a.Circle=a.invent({create:\"circle\",inherit:a.Shape,construct:{circle:function(t){return this.put(new a.Circle).rx(new a.Number(t).divide(2)).move(0,0)}}}),a.extend(a.Circle,a.FX,{rx:function(t){return this.attr(\"r\",t)},ry:function(t){return this.rx(t)}}),a.Ellipse=a.invent({create:\"ellipse\",inherit:a.Shape,construct:{ellipse:function(t,e){return this.put(new a.Ellipse).size(t,e).move(0,0)}}}),a.extend(a.Ellipse,a.Rect,a.FX,{rx:function(t){return this.attr(\"rx\",t)},ry:function(t){return this.attr(\"ry\",t)}}),a.extend(a.Circle,a.Ellipse,{x:function(t){return null==t?this.cx()-this.rx():this.cx(t+this.rx())},y:function(t){return null==t?this.cy()-this.ry():this.cy(t+this.ry())},cx:function(t){return null==t?this.attr(\"cx\"):this.attr(\"cx\",t)},cy:function(t){return null==t?this.attr(\"cy\"):this.attr(\"cy\",t)},width:function(t){return null==t?2*this.rx():this.rx(new a.Number(t).divide(2))},height:function(t){return null==t?2*this.ry():this.ry(new a.Number(t).divide(2))},size:function(t,e){var i=u(this,t,e);return this.rx(new a.Number(i.width).divide(2)).ry(new a.Number(i.height).divide(2))}}),a.Line=a.invent({create:\"line\",inherit:a.Shape,extend:{array:function(){return new a.PointArray([[this.attr(\"x1\"),this.attr(\"y1\")],[this.attr(\"x2\"),this.attr(\"y2\")]])},plot:function(t,e,i,s){return null==t?this.array():(t=void 0!==e?{x1:t,y1:e,x2:i,y2:s}:new a.PointArray(t).toLine(),this.attr(t))},move:function(t,e){return this.attr(this.array().move(t,e).toLine())},size:function(t,e){var i=u(this,t,e);return this.attr(this.array().size(i.width,i.height).toLine())}},construct:{line:function(t,e,i,s){return a.Line.prototype.plot.apply(this.put(new a.Line),null!=t?[t,e,i,s]:[0,0,0,0])}}}),a.Polyline=a.invent({create:\"polyline\",inherit:a.Shape,construct:{polyline:function(t){return this.put(new a.Polyline).plot(t||new a.PointArray)}}}),a.Polygon=a.invent({create:\"polygon\",inherit:a.Shape,construct:{polygon:function(t){return this.put(new a.Polygon).plot(t||new a.PointArray)}}}),a.extend(a.Polyline,a.Polygon,{array:function(){return this._array||(this._array=new a.PointArray(this.attr(\"points\")))},plot:function(t){return null==t?this.array():this.clear().attr(\"points\",\"string\"==typeof t?t:this._array=new a.PointArray(t))},clear:function(){return delete this._array,this},move:function(t,e){return this.attr(\"points\",this.array().move(t,e))},size:function(t,e){var i=u(this,t,e);return this.attr(\"points\",this.array().size(i.width,i.height))}}),a.extend(a.Line,a.Polyline,a.Polygon,{morphArray:a.PointArray,x:function(t){return null==t?this.bbox().x:this.move(t,this.bbox().y)},y:function(t){return null==t?this.bbox().y:this.move(this.bbox().x,t)},width:function(t){var e=this.bbox();return null==t?e.width:this.size(t,e.height)},height:function(t){var e=this.bbox();return null==t?e.height:this.size(e.width,t)}}),a.Path=a.invent({create:\"path\",inherit:a.Shape,extend:{morphArray:a.PathArray,array:function(){return this._array||(this._array=new a.PathArray(this.attr(\"d\")))},plot:function(t){return null==t?this.array():this.clear().attr(\"d\",\"string\"==typeof t?t:this._array=new a.PathArray(t))},clear:function(){return delete this._array,this}},construct:{path:function(t){return this.put(new a.Path).plot(t||new a.PathArray)}}}),a.Image=a.invent({create:\"image\",inherit:a.Shape,extend:{load:function(e){if(!e)return this;var i=this,s=new t.Image;return a.on(s,\"load\",(function(){a.off(s);var t=i.parent(a.Pattern);null!==t&&(0==i.width()&&0==i.height()&&i.size(s.width,s.height),t&&0==t.width()&&0==t.height()&&t.size(i.width(),i.height()),\"function\"==typeof i._loaded&&i._loaded.call(i,{width:s.width,height:s.height,ratio:s.width/s.height,url:e}))})),a.on(s,\"error\",(function(t){a.off(s),\"function\"==typeof i._error&&i._error.call(i,t)})),this.attr(\"href\",s.src=this.src=e,a.xlink)},loaded:function(t){return this._loaded=t,this},error:function(t){return this._error=t,this}},construct:{image:function(t,e,i){return this.put(new a.Image).load(t).size(e||0,i||e||0)}}}),a.Text=a.invent({create:function(){this.constructor.call(this,a.create(\"text\")),this.dom.leading=new a.Number(1.3),this._rebuild=!0,this._build=!1,this.attr(\"font-family\",a.defaults.attrs[\"font-family\"])},inherit:a.Shape,extend:{x:function(t){return null==t?this.attr(\"x\"):this.attr(\"x\",t)},text:function(t){if(void 0===t){t=\"\";for(var e=this.node.childNodes,i=0,s=e.length;i<s;++i)0!=i&&3!=e[i].nodeType&&1==a.adopt(e[i]).dom.newLined&&(t+=\"\\n\"),t+=e[i].textContent;return t}if(this.clear().build(!0),\"function\"==typeof t)t.call(this,this);else{i=0;for(var r=(t=t.split(\"\\n\")).length;i<r;i++)this.tspan(t[i]).newLine()}return this.build(!1).rebuild()},size:function(t){return this.attr(\"font-size\",t).rebuild()},leading:function(t){return null==t?this.dom.leading:(this.dom.leading=new a.Number(t),this.rebuild())},lines:function(){var t=(this.textPath&&this.textPath()||this).node,e=a.utils.map(a.utils.filterSVGElements(t.childNodes),(function(t){return a.adopt(t)}));return new a.Set(e)},rebuild:function(t){if(\"boolean\"==typeof t&&(this._rebuild=t),this._rebuild){var e=this,i=0,s=this.dom.leading*new a.Number(this.attr(\"font-size\"));this.lines().each((function(){this.dom.newLined&&(e.textPath()||this.attr(\"x\",e.attr(\"x\")),\"\\n\"==this.text()?i+=s:(this.attr(\"dy\",s+i),i=0))})),this.fire(\"rebuild\")}return this},build:function(t){return this._build=!!t,this},setData:function(t){return this.dom=t,this.dom.leading=new a.Number(t.leading||1.3),this}},construct:{text:function(t){return this.put(new a.Text).text(t)},plain:function(t){return this.put(new a.Text).plain(t)}}}),a.Tspan=a.invent({create:\"tspan\",inherit:a.Shape,extend:{text:function(t){return null==t?this.node.textContent+(this.dom.newLined?\"\\n\":\"\"):(\"function\"==typeof t?t.call(this,this):this.plain(t),this)},dx:function(t){return this.attr(\"dx\",t)},dy:function(t){return this.attr(\"dy\",t)},newLine:function(){var t=this.parent(a.Text);return this.dom.newLined=!0,this.dy(t.dom.leading*t.attr(\"font-size\")).attr(\"x\",t.x())}}}),a.extend(a.Text,a.Tspan,{plain:function(t){return!1===this._build&&this.clear(),this.node.appendChild(e.createTextNode(t)),this},tspan:function(t){var e=(this.textPath&&this.textPath()||this).node,i=new a.Tspan;return!1===this._build&&this.clear(),e.appendChild(i.node),i.text(t)},clear:function(){for(var t=(this.textPath&&this.textPath()||this).node;t.hasChildNodes();)t.removeChild(t.lastChild);return this},length:function(){return this.node.getComputedTextLength()}}),a.TextPath=a.invent({create:\"textPath\",inherit:a.Parent,parent:a.Text,construct:{morphArray:a.PathArray,array:function(){var t=this.track();return t?t.array():null},plot:function(t){var e=this.track(),i=null;return e&&(i=e.plot(t)),null==t?i:this},track:function(){var t=this.textPath();if(t)return t.reference(\"href\")},textPath:function(){if(this.node.firstChild&&\"textPath\"==this.node.firstChild.nodeName)return a.adopt(this.node.firstChild)}}}),a.Nested=a.invent({create:function(){this.constructor.call(this,a.create(\"svg\")),this.style(\"overflow\",\"visible\")},inherit:a.Container,construct:{nested:function(){return this.put(new a.Nested)}}});var l={stroke:[\"color\",\"width\",\"opacity\",\"linecap\",\"linejoin\",\"miterlimit\",\"dasharray\",\"dashoffset\"],fill:[\"color\",\"opacity\",\"rule\"],prefix:function(t,e){return\"color\"==e?t:t+\"-\"+e}};function h(t,e,i,s){return i+s.replace(a.regex.dots,\" .\")}function c(t){return t.toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()}))}function d(t){return t.charAt(0).toUpperCase()+t.slice(1)}function g(t){var e=t.toString(16);return 1==e.length?\"0\"+e:e}function u(t,e,i){if(null==e||null==i){var a=t.bbox();null==e?e=a.width/a.height*i:null==i&&(i=a.height/a.width*e)}return{width:e,height:i}}function f(t,e,i){return{x:e*t.a+i*t.c+0,y:e*t.b+i*t.d+0}}function p(t){return{a:t[0],b:t[1],c:t[2],d:t[3],e:t[4],f:t[5]}}function x(e){for(var i=e.childNodes.length-1;i>=0;i--)e.childNodes[i]instanceof t.SVGElement&&x(e.childNodes[i]);return a.adopt(e).id(a.eid(e.nodeName))}function b(t){return null==t.x&&(t.x=0,t.y=0,t.width=0,t.height=0),t.w=t.width,t.h=t.height,t.x2=t.x+t.width,t.y2=t.y+t.height,t.cx=t.x+t.width/2,t.cy=t.y+t.height/2,t}function v(t){return Math.abs(t)>1e-37?t:0}[\"fill\",\"stroke\"].forEach((function(t){var e={};e[t]=function(e){if(void 0===e)return this;if(\"string\"==typeof e||a.Color.isRgb(e)||e&&\"function\"==typeof e.fill)this.attr(t,e);else for(var i=l[t].length-1;i>=0;i--)null!=e[l[t][i]]&&this.attr(l.prefix(t,l[t][i]),e[l[t][i]]);return this},a.extend(a.Element,a.FX,e)})),a.extend(a.Element,a.FX,{translate:function(t,e){return this.transform({x:t,y:e})},matrix:function(t){return this.attr(\"transform\",new a.Matrix(6==arguments.length?[].slice.call(arguments):t))},opacity:function(t){return this.attr(\"opacity\",t)},dx:function(t){return this.x(new a.Number(t).plus(this instanceof a.FX?0:this.x()),!0)},dy:function(t){return this.y(new a.Number(t).plus(this instanceof a.FX?0:this.y()),!0)}}),a.extend(a.Path,{length:function(){return this.node.getTotalLength()},pointAt:function(t){return this.node.getPointAtLength(t)}}),a.Set=a.invent({create:function(t){Array.isArray(t)?this.members=t:this.clear()},extend:{add:function(){for(var t=[].slice.call(arguments),e=0,i=t.length;e<i;e++)this.members.push(t[e]);return this},remove:function(t){var e=this.index(t);return e>-1&&this.members.splice(e,1),this},each:function(t){for(var e=0,i=this.members.length;e<i;e++)t.apply(this.members[e],[e,this.members]);return this},clear:function(){return this.members=[],this},length:function(){return this.members.length},has:function(t){return this.index(t)>=0},index:function(t){return this.members.indexOf(t)},get:function(t){return this.members[t]},first:function(){return this.get(0)},last:function(){return this.get(this.members.length-1)},valueOf:function(){return this.members}},construct:{set:function(t){return new a.Set(t)}}}),a.FX.Set=a.invent({create:function(t){this.set=t}}),a.Set.inherit=function(){var t=[];for(var e in a.Shape.prototype)\"function\"==typeof a.Shape.prototype[e]&&\"function\"!=typeof a.Set.prototype[e]&&t.push(e);for(var e in t.forEach((function(t){a.Set.prototype[t]=function(){for(var e=0,i=this.members.length;e<i;e++)this.members[e]&&\"function\"==typeof this.members[e][t]&&this.members[e][t].apply(this.members[e],arguments);return\"animate\"==t?this.fx||(this.fx=new a.FX.Set(this)):this}})),t=[],a.FX.prototype)\"function\"==typeof a.FX.prototype[e]&&\"function\"!=typeof a.FX.Set.prototype[e]&&t.push(e);t.forEach((function(t){a.FX.Set.prototype[t]=function(){for(var e=0,i=this.set.members.length;e<i;e++)this.set.members[e].fx[t].apply(this.set.members[e].fx,arguments);return this}}))},a.extend(a.Element,{}),a.extend(a.Element,{remember:function(t,e){if(\"object\"===i(arguments[0]))for(var a in t)this.remember(a,t[a]);else{if(1==arguments.length)return this.memory()[t];this.memory()[t]=e}return this},forget:function(){if(0==arguments.length)this._memory={};else for(var t=arguments.length-1;t>=0;t--)delete this.memory()[arguments[t]];return this},memory:function(){return this._memory||(this._memory={})}}),a.get=function(t){var i=e.getElementById(function(t){var e=(t||\"\").toString().match(a.regex.reference);if(e)return e[1]}(t)||t);return a.adopt(i)},a.select=function(t,i){return new a.Set(a.utils.map((i||e).querySelectorAll(t),(function(t){return a.adopt(t)})))},a.extend(a.Parent,{select:function(t){return a.select(t,this.node)}});var m=\"abcdef\".split(\"\");if(\"function\"!=typeof t.CustomEvent){var y=function(t,i){i=i||{bubbles:!1,cancelable:!1,detail:void 0};var a=e.createEvent(\"CustomEvent\");return a.initCustomEvent(t,i.bubbles,i.cancelable,i.detail),a};y.prototype=t.Event.prototype,a.CustomEvent=y}else a.CustomEvent=t.CustomEvent;return a}, true?!(__WEBPACK_AMD_DEFINE_RESULT__ = (function(){return Et(zt,zt.document)}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):undefined,\n/*! svg.filter.js - v2.0.2 - 2016-02-24\n * https://github.com/wout/svg.filter.js\n * Copyright (c) 2016 Wout Fierens; Licensed MIT */\nfunction(){SVG.Filter=SVG.invent({create:\"filter\",inherit:SVG.Parent,extend:{source:\"SourceGraphic\",sourceAlpha:\"SourceAlpha\",background:\"BackgroundImage\",backgroundAlpha:\"BackgroundAlpha\",fill:\"FillPaint\",stroke:\"StrokePaint\",autoSetIn:!0,put:function(t,e){return this.add(t,e),!t.attr(\"in\")&&this.autoSetIn&&t.attr(\"in\",this.source),t.attr(\"result\")||t.attr(\"result\",t),t},blend:function(t,e,i){return this.put(new SVG.BlendEffect(t,e,i))},colorMatrix:function(t,e){return this.put(new SVG.ColorMatrixEffect(t,e))},convolveMatrix:function(t){return this.put(new SVG.ConvolveMatrixEffect(t))},componentTransfer:function(t){return this.put(new SVG.ComponentTransferEffect(t))},composite:function(t,e,i){return this.put(new SVG.CompositeEffect(t,e,i))},flood:function(t,e){return this.put(new SVG.FloodEffect(t,e))},offset:function(t,e){return this.put(new SVG.OffsetEffect(t,e))},image:function(t){return this.put(new SVG.ImageEffect(t))},merge:function(){var t=[void 0];for(var e in arguments)t.push(arguments[e]);return this.put(new(SVG.MergeEffect.bind.apply(SVG.MergeEffect,t)))},gaussianBlur:function(t,e){return this.put(new SVG.GaussianBlurEffect(t,e))},morphology:function(t,e){return this.put(new SVG.MorphologyEffect(t,e))},diffuseLighting:function(t,e,i){return this.put(new SVG.DiffuseLightingEffect(t,e,i))},displacementMap:function(t,e,i,a,s){return this.put(new SVG.DisplacementMapEffect(t,e,i,a,s))},specularLighting:function(t,e,i,a){return this.put(new SVG.SpecularLightingEffect(t,e,i,a))},tile:function(){return this.put(new SVG.TileEffect)},turbulence:function(t,e,i,a,s){return this.put(new SVG.TurbulenceEffect(t,e,i,a,s))},toString:function(){return\"url(#\"+this.attr(\"id\")+\")\"}}}),SVG.extend(SVG.Defs,{filter:function(t){var e=this.put(new SVG.Filter);return\"function\"==typeof t&&t.call(e,e),e}}),SVG.extend(SVG.Container,{filter:function(t){return this.defs().filter(t)}}),SVG.extend(SVG.Element,SVG.G,SVG.Nested,{filter:function(t){return this.filterer=t instanceof SVG.Element?t:this.doc().filter(t),this.doc()&&this.filterer.doc()!==this.doc()&&this.doc().defs().add(this.filterer),this.attr(\"filter\",this.filterer),this.filterer},unfilter:function(t){return this.filterer&&!0===t&&this.filterer.remove(),delete this.filterer,this.attr(\"filter\",null)}}),SVG.Effect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in\")+'\"]').get(0)||this.attr(\"in\"):this.attr(\"in\",t)},result:function(t){return null==t?this.attr(\"result\"):this.attr(\"result\",t)},toString:function(){return this.result()}}}),SVG.ParentEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Parent,extend:{in:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in\")+'\"]').get(0)||this.attr(\"in\"):this.attr(\"in\",t)},result:function(t){return null==t?this.attr(\"result\"):this.attr(\"result\",t)},toString:function(){return this.result()}}});var t={blend:function(t,e){return this.parent()&&this.parent().blend(this,t,e)},colorMatrix:function(t,e){return this.parent()&&this.parent().colorMatrix(t,e).in(this)},convolveMatrix:function(t){return this.parent()&&this.parent().convolveMatrix(t).in(this)},componentTransfer:function(t){return this.parent()&&this.parent().componentTransfer(t).in(this)},composite:function(t,e){return this.parent()&&this.parent().composite(this,t,e)},flood:function(t,e){return this.parent()&&this.parent().flood(t,e)},offset:function(t,e){return this.parent()&&this.parent().offset(t,e).in(this)},image:function(t){return this.parent()&&this.parent().image(t)},merge:function(){return this.parent()&&this.parent().merge.apply(this.parent(),[this].concat(arguments))},gaussianBlur:function(t,e){return this.parent()&&this.parent().gaussianBlur(t,e).in(this)},morphology:function(t,e){return this.parent()&&this.parent().morphology(t,e).in(this)},diffuseLighting:function(t,e,i){return this.parent()&&this.parent().diffuseLighting(t,e,i).in(this)},displacementMap:function(t,e,i,a){return this.parent()&&this.parent().displacementMap(this,t,e,i,a)},specularLighting:function(t,e,i,a){return this.parent()&&this.parent().specularLighting(t,e,i,a).in(this)},tile:function(){return this.parent()&&this.parent().tile().in(this)},turbulence:function(t,e,i,a,s){return this.parent()&&this.parent().turbulence(t,e,i,a,s).in(this)}};SVG.extend(SVG.Effect,t),SVG.extend(SVG.ParentEffect,t),SVG.ChildEffect=SVG.invent({create:function(){this.constructor.call(this)},inherit:SVG.Element,extend:{in:function(t){this.attr(\"in\",t)}}});var e={blend:function(t,e,i){this.attr({in:t,in2:e,mode:i||\"normal\"})},colorMatrix:function(t,e){\"matrix\"==t&&(e=s(e)),this.attr({type:t,values:void 0===e?null:e})},convolveMatrix:function(t){t=s(t),this.attr({order:Math.sqrt(t.split(\" \").length),kernelMatrix:t})},composite:function(t,e,i){this.attr({in:t,in2:e,operator:i})},flood:function(t,e){this.attr(\"flood-color\",t),null!=e&&this.attr(\"flood-opacity\",e)},offset:function(t,e){this.attr({dx:t,dy:e})},image:function(t){this.attr(\"href\",t,SVG.xlink)},displacementMap:function(t,e,i,a,s){this.attr({in:t,in2:e,scale:i,xChannelSelector:a,yChannelSelector:s})},gaussianBlur:function(t,e){null!=t||null!=e?this.attr(\"stdDeviation\",r(Array.prototype.slice.call(arguments))):this.attr(\"stdDeviation\",\"0 0\")},morphology:function(t,e){this.attr({operator:t,radius:e})},tile:function(){},turbulence:function(t,e,i,a,s){this.attr({numOctaves:e,seed:i,stitchTiles:a,baseFrequency:t,type:s})}},i={merge:function(){var t;if(arguments[0]instanceof SVG.Set){var e=this;arguments[0].each((function(t){this instanceof SVG.MergeNode?e.put(this):(this instanceof SVG.Effect||this instanceof SVG.ParentEffect)&&e.put(new SVG.MergeNode(this))}))}else{t=Array.isArray(arguments[0])?arguments[0]:arguments;for(var i=0;i<t.length;i++)t[i]instanceof SVG.MergeNode?this.put(t[i]):this.put(new SVG.MergeNode(t[i]))}},componentTransfer:function(t){if(this.rgb=new SVG.Set,[\"r\",\"g\",\"b\",\"a\"].forEach(function(t){this[t]=new(SVG[\"Func\"+t.toUpperCase()])(\"identity\"),this.rgb.add(this[t]),this.node.appendChild(this[t].node)}.bind(this)),t)for(var e in t.rgb&&([\"r\",\"g\",\"b\"].forEach(function(e){this[e].attr(t.rgb)}.bind(this)),delete t.rgb),t)this[e].attr(t[e])},diffuseLighting:function(t,e,i){this.attr({surfaceScale:t,diffuseConstant:e,kernelUnitLength:i})},specularLighting:function(t,e,i,a){this.attr({surfaceScale:t,diffuseConstant:e,specularExponent:i,kernelUnitLength:a})}},a={distantLight:function(t,e){this.attr({azimuth:t,elevation:e})},pointLight:function(t,e,i){this.attr({x:t,y:e,z:i})},spotLight:function(t,e,i,a,s,r){this.attr({x:t,y:e,z:i,pointsAtX:a,pointsAtY:s,pointsAtZ:r})},mergeNode:function(t){this.attr(\"in\",t)}};function s(t){return Array.isArray(t)&&(t=new SVG.Array(t)),t.toString().replace(/^\\s+/,\"\").replace(/\\s+$/,\"\").replace(/\\s+/g,\" \")}function r(t){if(!Array.isArray(t))return t;for(var e=0,i=t.length,a=[];e<i;e++)a.push(t[e]);return a.join(\" \")}function o(){var t=function(){};for(var e in\"function\"==typeof arguments[arguments.length-1]&&(t=arguments[arguments.length-1],Array.prototype.splice.call(arguments,arguments.length-1,1)),arguments)for(var i in arguments[e])t(arguments[e][i],i,arguments[e])}[\"r\",\"g\",\"b\",\"a\"].forEach((function(t){a[\"Func\"+t.toUpperCase()]=function(t){switch(this.attr(\"type\",t),t){case\"table\":this.attr(\"tableValues\",arguments[1]);break;case\"linear\":this.attr(\"slope\",arguments[1]),this.attr(\"intercept\",arguments[2]);break;case\"gamma\":this.attr(\"amplitude\",arguments[1]),this.attr(\"exponent\",arguments[2]),this.attr(\"offset\",arguments[2])}}})),o(e,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\"Effect\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments),this.result(this.attr(\"id\")+\"Out\")},inherit:SVG.Effect,extend:{}})})),o(i,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i+\"Effect\"]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments),this.result(this.attr(\"id\")+\"Out\")},inherit:SVG.ParentEffect,extend:{}})})),o(a,(function(t,e){var i=e.charAt(0).toUpperCase()+e.slice(1);SVG[i]=SVG.invent({create:function(){this.constructor.call(this,SVG.create(\"fe\"+i)),t.apply(this,arguments)},inherit:SVG.ChildEffect,extend:{}})})),SVG.extend(SVG.MergeEffect,{in:function(t){return t instanceof SVG.MergeNode?this.add(t,0):this.add(new SVG.MergeNode(t),0),this}}),SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{in2:function(t){return null==t?this.parent()&&this.parent().select('[result=\"'+this.attr(\"in2\")+'\"]').get(0)||this.attr(\"in2\"):this.attr(\"in2\",t)}}),SVG.filter={sepiatone:[.343,.669,.119,0,0,.249,.626,.13,0,0,.172,.334,.111,0,0,0,0,0,1,0]}}.call(void 0),function(){function t(t,s,r,o,n,l,h){for(var c=t.slice(s,r||h),d=o.slice(n,l||h),g=0,u={pos:[0,0],start:[0,0]},f={pos:[0,0],start:[0,0]};;){if(c[g]=e.call(u,c[g]),d[g]=e.call(f,d[g]),c[g][0]!=d[g][0]||\"M\"==c[g][0]||\"A\"==c[g][0]&&(c[g][4]!=d[g][4]||c[g][5]!=d[g][5])?(Array.prototype.splice.apply(c,[g,1].concat(a.call(u,c[g]))),Array.prototype.splice.apply(d,[g,1].concat(a.call(f,d[g])))):(c[g]=i.call(u,c[g]),d[g]=i.call(f,d[g])),++g==c.length&&g==d.length)break;g==c.length&&c.push([\"C\",u.pos[0],u.pos[1],u.pos[0],u.pos[1],u.pos[0],u.pos[1]]),g==d.length&&d.push([\"C\",f.pos[0],f.pos[1],f.pos[0],f.pos[1],f.pos[0],f.pos[1]])}return{start:c,dest:d}}function e(t){switch(t[0]){case\"z\":case\"Z\":t[0]=\"L\",t[1]=this.start[0],t[2]=this.start[1];break;case\"H\":t[0]=\"L\",t[2]=this.pos[1];break;case\"V\":t[0]=\"L\",t[2]=t[1],t[1]=this.pos[0];break;case\"T\":t[0]=\"Q\",t[3]=t[1],t[4]=t[2],t[1]=this.reflection[1],t[2]=this.reflection[0];break;case\"S\":t[0]=\"C\",t[6]=t[4],t[5]=t[3],t[4]=t[2],t[3]=t[1],t[2]=this.reflection[1],t[1]=this.reflection[0]}return t}function i(t){var e=t.length;return this.pos=[t[e-2],t[e-1]],-1!=\"SCQT\".indexOf(t[0])&&(this.reflection=[2*this.pos[0]-t[e-4],2*this.pos[1]-t[e-3]]),t}function a(t){var e=[t];switch(t[0]){case\"M\":return this.pos=this.start=[t[1],t[2]],e;case\"L\":t[5]=t[3]=t[1],t[6]=t[4]=t[2],t[1]=this.pos[0],t[2]=this.pos[1];break;case\"Q\":t[6]=t[4],t[5]=t[3],t[4]=1*t[4]/3+2*t[2]/3,t[3]=1*t[3]/3+2*t[1]/3,t[2]=1*this.pos[1]/3+2*t[2]/3,t[1]=1*this.pos[0]/3+2*t[1]/3;break;case\"A\":e=function(t,e){var i,a,s,r,o,n,l,h,c,d,g,u,f,p,x,b,v,m,y,w,k,A,S,C,L,P,T=Math.abs(e[1]),M=Math.abs(e[2]),I=e[3]%360,X=e[4],z=e[5],E=e[6],Y=e[7],F=new SVG.Point(t),R=new SVG.Point(E,Y),D=[];if(0===T||0===M||F.x===R.x&&F.y===R.y)return[[\"C\",F.x,F.y,R.x,R.y,R.x,R.y]];i=new SVG.Point((F.x-R.x)/2,(F.y-R.y)/2).transform((new SVG.Matrix).rotate(I)),(a=i.x*i.x/(T*T)+i.y*i.y/(M*M))>1&&(T*=a=Math.sqrt(a),M*=a);s=(new SVG.Matrix).rotate(I).scale(1/T,1/M).rotate(-I),F=F.transform(s),R=R.transform(s),r=[R.x-F.x,R.y-F.y],n=r[0]*r[0]+r[1]*r[1],o=Math.sqrt(n),r[0]/=o,r[1]/=o,l=n<4?Math.sqrt(1-n/4):0,X===z&&(l*=-1);h=new SVG.Point((R.x+F.x)/2+l*-r[1],(R.y+F.y)/2+l*r[0]),c=new SVG.Point(F.x-h.x,F.y-h.y),d=new SVG.Point(R.x-h.x,R.y-h.y),g=Math.acos(c.x/Math.sqrt(c.x*c.x+c.y*c.y)),c.y<0&&(g*=-1);u=Math.acos(d.x/Math.sqrt(d.x*d.x+d.y*d.y)),d.y<0&&(u*=-1);z&&g>u&&(u+=2*Math.PI);!z&&g<u&&(u-=2*Math.PI);for(p=Math.ceil(2*Math.abs(g-u)/Math.PI),b=[],v=g,f=(u-g)/p,x=4*Math.tan(f/4)/3,k=0;k<=p;k++)y=Math.cos(v),m=Math.sin(v),w=new SVG.Point(h.x+y,h.y+m),b[k]=[new SVG.Point(w.x+x*m,w.y-x*y),w,new SVG.Point(w.x-x*m,w.y+x*y)],v+=f;for(b[0][0]=b[0][1].clone(),b[b.length-1][2]=b[b.length-1][1].clone(),s=(new SVG.Matrix).rotate(I).scale(T,M).rotate(-I),k=0,A=b.length;k<A;k++)b[k][0]=b[k][0].transform(s),b[k][1]=b[k][1].transform(s),b[k][2]=b[k][2].transform(s);for(k=1,A=b.length;k<A;k++)S=(w=b[k-1][2]).x,C=w.y,L=(w=b[k][0]).x,P=w.y,E=(w=b[k][1]).x,Y=w.y,D.push([\"C\",S,C,L,P,E,Y]);return D}(this.pos,t),t=e[0]}return t[0]=\"C\",this.pos=[t[5],t[6]],this.reflection=[2*t[5]-t[3],2*t[6]-t[4]],e}function s(t,e){if(!1===e)return!1;for(var i=e,a=t.length;i<a;++i)if(\"M\"==t[i][0])return i;return!1}SVG.extend(SVG.PathArray,{morph:function(e){for(var i=this.value,a=this.parse(e),r=0,o=0,n=!1,l=!1;!1!==r||!1!==o;){var h;n=s(i,!1!==r&&r+1),l=s(a,!1!==o&&o+1),!1===r&&(r=0==(h=new SVG.PathArray(c.start).bbox()).height||0==h.width?i.push(i[0])-1:i.push([\"M\",h.x+h.width/2,h.y+h.height/2])-1),!1===o&&(o=0==(h=new SVG.PathArray(c.dest).bbox()).height||0==h.width?a.push(a[0])-1:a.push([\"M\",h.x+h.width/2,h.y+h.height/2])-1);var c=t(i,r,n,a,o,l);i=i.slice(0,r).concat(c.start,!1===n?[]:i.slice(n)),a=a.slice(0,o).concat(c.dest,!1===l?[]:a.slice(l)),r=!1!==n&&r+c.start.length,o=!1!==l&&o+c.dest.length}return this.value=i,this.destination=new SVG.PathArray,this.destination.value=a,this}})}(),\n/*! svg.draggable.js - v2.2.2 - 2019-01-08\n * https://github.com/svgdotjs/svg.draggable.js\n * Copyright (c) 2019 Wout Fierens; Licensed MIT */\nfunction(){function t(t){t.remember(\"_draggable\",this),this.el=t}t.prototype.init=function(t,e){var i=this;this.constraint=t,this.value=e,this.el.on(\"mousedown.drag\",(function(t){i.start(t)})),this.el.on(\"touchstart.drag\",(function(t){i.start(t)}))},t.prototype.transformPoint=function(t,e){var i=(t=t||window.event).changedTouches&&t.changedTouches[0]||t;return this.p.x=i.clientX-(e||0),this.p.y=i.clientY,this.p.matrixTransform(this.m)},t.prototype.getBBox=function(){var t=this.el.bbox();return this.el instanceof SVG.Nested&&(t=this.el.rbox()),(this.el instanceof SVG.G||this.el instanceof SVG.Use||this.el instanceof SVG.Nested)&&(t.x=this.el.x(),t.y=this.el.y()),t},t.prototype.start=function(t){if(\"click\"!=t.type&&\"mousedown\"!=t.type&&\"mousemove\"!=t.type||1==(t.which||t.buttons)){var e=this;if(this.el.fire(\"beforedrag\",{event:t,handler:this}),!this.el.event().defaultPrevented){t.preventDefault(),t.stopPropagation(),this.parent=this.parent||this.el.parent(SVG.Nested)||this.el.parent(SVG.Doc),this.p=this.parent.node.createSVGPoint(),this.m=this.el.node.getScreenCTM().inverse();var i,a=this.getBBox();if(this.el instanceof SVG.Text)switch(i=this.el.node.getComputedTextLength(),this.el.attr(\"text-anchor\")){case\"middle\":i/=2;break;case\"start\":i=0}this.startPoints={point:this.transformPoint(t,i),box:a,transform:this.el.transform()},SVG.on(window,\"mousemove.drag\",(function(t){e.drag(t)})),SVG.on(window,\"touchmove.drag\",(function(t){e.drag(t)})),SVG.on(window,\"mouseup.drag\",(function(t){e.end(t)})),SVG.on(window,\"touchend.drag\",(function(t){e.end(t)})),this.el.fire(\"dragstart\",{event:t,p:this.startPoints.point,m:this.m,handler:this})}}},t.prototype.drag=function(t){var e=this.getBBox(),i=this.transformPoint(t),a=this.startPoints.box.x+i.x-this.startPoints.point.x,s=this.startPoints.box.y+i.y-this.startPoints.point.y,r=this.constraint,o=i.x-this.startPoints.point.x,n=i.y-this.startPoints.point.y;if(this.el.fire(\"dragmove\",{event:t,p:i,m:this.m,handler:this}),this.el.event().defaultPrevented)return i;if(\"function\"==typeof r){var l=r.call(this.el,a,s,this.m);\"boolean\"==typeof l&&(l={x:l,y:l}),!0===l.x?this.el.x(a):!1!==l.x&&this.el.x(l.x),!0===l.y?this.el.y(s):!1!==l.y&&this.el.y(l.y)}else\"object\"==typeof r&&(null!=r.minX&&a<r.minX?o=(a=r.minX)-this.startPoints.box.x:null!=r.maxX&&a>r.maxX-e.width&&(o=(a=r.maxX-e.width)-this.startPoints.box.x),null!=r.minY&&s<r.minY?n=(s=r.minY)-this.startPoints.box.y:null!=r.maxY&&s>r.maxY-e.height&&(n=(s=r.maxY-e.height)-this.startPoints.box.y),null!=r.snapToGrid&&(a-=a%r.snapToGrid,s-=s%r.snapToGrid,o-=o%r.snapToGrid,n-=n%r.snapToGrid),this.el instanceof SVG.G?this.el.matrix(this.startPoints.transform).transform({x:o,y:n},!0):this.el.move(a,s));return i},t.prototype.end=function(t){var e=this.drag(t);this.el.fire(\"dragend\",{event:t,p:e,m:this.m,handler:this}),SVG.off(window,\"mousemove.drag\"),SVG.off(window,\"touchmove.drag\"),SVG.off(window,\"mouseup.drag\"),SVG.off(window,\"touchend.drag\")},SVG.extend(SVG.Element,{draggable:function(e,i){\"function\"!=typeof e&&\"object\"!=typeof e||(i=e,e=!0);var a=this.remember(\"_draggable\")||new t(this);return(e=void 0===e||e)?a.init(i||{},e):(this.off(\"mousedown.drag\"),this.off(\"touchstart.drag\")),this}})}.call(void 0),function(){function t(t){this.el=t,t.remember(\"_selectHandler\",this),this.pointSelection={isSelected:!1},this.rectSelection={isSelected:!1},this.pointsList={lt:[0,0],rt:[\"width\",0],rb:[\"width\",\"height\"],lb:[0,\"height\"],t:[\"width\",0],r:[\"width\",\"height\"],b:[\"width\",\"height\"],l:[0,\"height\"]},this.pointCoord=function(t,e,i){var a=\"string\"!=typeof t?t:e[t];return i?a/2:a},this.pointCoords=function(t,e){var i=this.pointsList[t];return{x:this.pointCoord(i[0],e,\"t\"===t||\"b\"===t),y:this.pointCoord(i[1],e,\"r\"===t||\"l\"===t)}}}t.prototype.init=function(t,e){var i=this.el.bbox();this.options={};var a=this.el.selectize.defaults.points;for(var s in this.el.selectize.defaults)this.options[s]=this.el.selectize.defaults[s],void 0!==e[s]&&(this.options[s]=e[s]);var r=[\"points\",\"pointsExclude\"];for(var s in r){var o=this.options[r[s]];\"string\"==typeof o?o=o.length>0?o.split(/\\s*,\\s*/i):[]:\"boolean\"==typeof o&&\"points\"===r[s]&&(o=o?a:[]),this.options[r[s]]=o}this.options.points=[a,this.options.points].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)>-1}))})),this.options.points=[this.options.points,this.options.pointsExclude].reduce((function(t,e){return t.filter((function(t){return e.indexOf(t)<0}))})),this.parent=this.el.parent(),this.nested=this.nested||this.parent.group(),this.nested.matrix(new SVG.Matrix(this.el).translate(i.x,i.y)),this.options.deepSelect&&-1!==[\"line\",\"polyline\",\"polygon\"].indexOf(this.el.type)?this.selectPoints(t):this.selectRect(t),this.observe(),this.cleanup()},t.prototype.selectPoints=function(t){return this.pointSelection.isSelected=t,this.pointSelection.set||(this.pointSelection.set=this.parent.set(),this.drawPoints()),this},t.prototype.getPointArray=function(){var t=this.el.bbox();return this.el.array().valueOf().map((function(e){return[e[0]-t.x,e[1]-t.y]}))},t.prototype.drawPoints=function(){for(var t=this,e=this.getPointArray(),i=0,a=e.length;i<a;++i){var s=function(e){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,s=i.pageY||i.touches[0].pageY;t.el.fire(\"point\",{x:a,y:s,i:e,event:i})}}(i),r=this.drawPoint(e[i][0],e[i][1]).addClass(this.options.classPoints).addClass(this.options.classPoints+\"_point\").on(\"touchstart\",s).on(\"mousedown\",s);this.pointSelection.set.add(r)}},t.prototype.drawPoint=function(t,e){var i=this.options.pointType;switch(i){case\"circle\":return this.drawCircle(t,e);case\"rect\":return this.drawRect(t,e);default:if(\"function\"==typeof i)return i.call(this,t,e);throw new Error(\"Unknown \"+i+\" point type!\")}},t.prototype.drawCircle=function(t,e){return this.nested.circle(this.options.pointSize).center(t,e)},t.prototype.drawRect=function(t,e){return this.nested.rect(this.options.pointSize,this.options.pointSize).center(t,e)},t.prototype.updatePointSelection=function(){var t=this.getPointArray();this.pointSelection.set.each((function(e){this.cx()===t[e][0]&&this.cy()===t[e][1]||this.center(t[e][0],t[e][1])}))},t.prototype.updateRectSelection=function(){var t=this,e=this.el.bbox();if(this.rectSelection.set.get(0).attr({width:e.width,height:e.height}),this.options.points.length&&this.options.points.map((function(i,a){var s=t.pointCoords(i,e);t.rectSelection.set.get(a+1).center(s.x,s.y)})),this.options.rotationPoint){var i=this.rectSelection.set.length();this.rectSelection.set.get(i-1).center(e.width/2,20)}},t.prototype.selectRect=function(t){var e=this,i=this.el.bbox();function a(t){return function(i){(i=i||window.event).preventDefault?i.preventDefault():i.returnValue=!1,i.stopPropagation();var a=i.pageX||i.touches[0].pageX,s=i.pageY||i.touches[0].pageY;e.el.fire(t,{x:a,y:s,event:i})}}if(this.rectSelection.isSelected=t,this.rectSelection.set=this.rectSelection.set||this.parent.set(),this.rectSelection.set.get(0)||this.rectSelection.set.add(this.nested.rect(i.width,i.height).addClass(this.options.classRect)),this.options.points.length&&this.rectSelection.set.length()<2){this.options.points.map((function(t,s){var r=e.pointCoords(t,i),o=e.drawPoint(r.x,r.y).attr(\"class\",e.options.classPoints+\"_\"+t).on(\"mousedown\",a(t)).on(\"touchstart\",a(t));e.rectSelection.set.add(o)})),this.rectSelection.set.each((function(){this.addClass(e.options.classPoints)}))}if(this.options.rotationPoint&&(this.options.points&&!this.rectSelection.set.get(9)||!this.options.points&&!this.rectSelection.set.get(1))){var s=function(t){(t=t||window.event).preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation();var i=t.pageX||t.touches[0].pageX,a=t.pageY||t.touches[0].pageY;e.el.fire(\"rot\",{x:i,y:a,event:t})},r=this.drawPoint(i.width/2,20).attr(\"class\",this.options.classPoints+\"_rot\").on(\"touchstart\",s).on(\"mousedown\",s);this.rectSelection.set.add(r)}},t.prototype.handler=function(){var t=this.el.bbox();this.nested.matrix(new SVG.Matrix(this.el).translate(t.x,t.y)),this.rectSelection.isSelected&&this.updateRectSelection(),this.pointSelection.isSelected&&this.updatePointSelection()},t.prototype.observe=function(){var t=this;if(MutationObserver)if(this.rectSelection.isSelected||this.pointSelection.isSelected)this.observerInst=this.observerInst||new MutationObserver((function(){t.handler()})),this.observerInst.observe(this.el.node,{attributes:!0});else try{this.observerInst.disconnect(),delete this.observerInst}catch(t){}else this.el.off(\"DOMAttrModified.select\"),(this.rectSelection.isSelected||this.pointSelection.isSelected)&&this.el.on(\"DOMAttrModified.select\",(function(){t.handler()}))},t.prototype.cleanup=function(){!this.rectSelection.isSelected&&this.rectSelection.set&&(this.rectSelection.set.each((function(){this.remove()})),this.rectSelection.set.clear(),delete this.rectSelection.set),!this.pointSelection.isSelected&&this.pointSelection.set&&(this.pointSelection.set.each((function(){this.remove()})),this.pointSelection.set.clear(),delete this.pointSelection.set),this.pointSelection.isSelected||this.rectSelection.isSelected||(this.nested.remove(),delete this.nested)},SVG.extend(SVG.Element,{selectize:function(e,i){return\"object\"==typeof e&&(i=e,e=!0),(this.remember(\"_selectHandler\")||new t(this)).init(void 0===e||e,i||{}),this}}),SVG.Element.prototype.selectize.defaults={points:[\"lt\",\"rt\",\"rb\",\"lb\",\"t\",\"r\",\"b\",\"l\"],pointsExclude:[],classRect:\"svg_select_boundingRect\",classPoints:\"svg_select_points\",pointSize:7,rotationPoint:!0,deepSelect:!1,pointType:\"circle\"}}(),function(){(function(){function t(t){t.remember(\"_resizeHandler\",this),this.el=t,this.parameters={},this.lastUpdateCall=null,this.p=t.doc().node.createSVGPoint()}t.prototype.transformPoint=function(t,e,i){return this.p.x=t-(this.offset.x-window.pageXOffset),this.p.y=e-(this.offset.y-window.pageYOffset),this.p.matrixTransform(i||this.m)},t.prototype._extractPosition=function(t){return{x:null!=t.clientX?t.clientX:t.touches[0].clientX,y:null!=t.clientY?t.clientY:t.touches[0].clientY}},t.prototype.init=function(t){var e=this;if(this.stop(),\"stop\"!==t){for(var i in this.options={},this.el.resize.defaults)this.options[i]=this.el.resize.defaults[i],void 0!==t[i]&&(this.options[i]=t[i]);this.el.on(\"lt.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rt.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rb.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"lb.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"t.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"r.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"b.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"l.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"rot.resize\",(function(t){e.resize(t||window.event)})),this.el.on(\"point.resize\",(function(t){e.resize(t||window.event)})),this.update()}},t.prototype.stop=function(){return this.el.off(\"lt.resize\"),this.el.off(\"rt.resize\"),this.el.off(\"rb.resize\"),this.el.off(\"lb.resize\"),this.el.off(\"t.resize\"),this.el.off(\"r.resize\"),this.el.off(\"b.resize\"),this.el.off(\"l.resize\"),this.el.off(\"rot.resize\"),this.el.off(\"point.resize\"),this},t.prototype.resize=function(t){var e=this;this.m=this.el.node.getScreenCTM().inverse(),this.offset={x:window.pageXOffset,y:window.pageYOffset};var i=this._extractPosition(t.detail.event);if(this.parameters={type:this.el.type,p:this.transformPoint(i.x,i.y),x:t.detail.x,y:t.detail.y,box:this.el.bbox(),rotation:this.el.transform().rotation},\"text\"===this.el.type&&(this.parameters.fontSize=this.el.attr()[\"font-size\"]),void 0!==t.detail.i){var a=this.el.array().valueOf();this.parameters.i=t.detail.i,this.parameters.pointCoords=[a[t.detail.i][0],a[t.detail.i][1]]}switch(t.type){case\"lt\":this.calc=function(t,e){var i=this.snapToGrid(t,e);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y+i[1]).size(this.parameters.box.width-i[0],this.parameters.box.height-i[1])}};break;case\"rt\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).size(this.parameters.box.width+i[0],this.parameters.box.height-i[1])}};break;case\"rb\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0&&this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x-i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize+i[0]);i=this.checkAspectRatio(i),this.el.move(this.parameters.box.x,this.parameters.box.y).size(this.parameters.box.width+i[0],this.parameters.box.height+i[1])}};break;case\"lb\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0&&this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return this.el.move(this.parameters.box.x+i[0],this.parameters.box.y),void this.el.attr(\"font-size\",this.parameters.fontSize-i[0]);i=this.checkAspectRatio(i,!0),this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).size(this.parameters.box.width-i[0],this.parameters.box.height+i[1])}};break;case\"t\":this.calc=function(t,e){var i=this.snapToGrid(t,e,2);if(this.parameters.box.height-i[1]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y+i[1]).height(this.parameters.box.height-i[1])}};break;case\"r\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.width+i[0]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).width(this.parameters.box.width+i[0])}};break;case\"b\":this.calc=function(t,e){var i=this.snapToGrid(t,e,0);if(this.parameters.box.height+i[1]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x,this.parameters.box.y).height(this.parameters.box.height+i[1])}};break;case\"l\":this.calc=function(t,e){var i=this.snapToGrid(t,e,1);if(this.parameters.box.width-i[0]>0){if(\"text\"===this.parameters.type)return;this.el.move(this.parameters.box.x+i[0],this.parameters.box.y).width(this.parameters.box.width-i[0])}};break;case\"rot\":this.calc=function(t,e){var i=t+this.parameters.p.x,a=e+this.parameters.p.y,s=Math.atan2(this.parameters.p.y-this.parameters.box.y-this.parameters.box.height/2,this.parameters.p.x-this.parameters.box.x-this.parameters.box.width/2),r=Math.atan2(a-this.parameters.box.y-this.parameters.box.height/2,i-this.parameters.box.x-this.parameters.box.width/2),o=this.parameters.rotation+180*(r-s)/Math.PI+this.options.snapToAngle/2;this.el.center(this.parameters.box.cx,this.parameters.box.cy).rotate(o-o%this.options.snapToAngle,this.parameters.box.cx,this.parameters.box.cy)};break;case\"point\":this.calc=function(t,e){var i=this.snapToGrid(t,e,this.parameters.pointCoords[0],this.parameters.pointCoords[1]),a=this.el.array().valueOf();a[this.parameters.i][0]=this.parameters.pointCoords[0]+i[0],a[this.parameters.i][1]=this.parameters.pointCoords[1]+i[1],this.el.plot(a)}}this.el.fire(\"resizestart\",{dx:this.parameters.x,dy:this.parameters.y,event:t}),SVG.on(window,\"touchmove.resize\",(function(t){e.update(t||window.event)})),SVG.on(window,\"touchend.resize\",(function(){e.done()})),SVG.on(window,\"mousemove.resize\",(function(t){e.update(t||window.event)})),SVG.on(window,\"mouseup.resize\",(function(){e.done()}))},t.prototype.update=function(t){if(t){var e=this._extractPosition(t),i=this.transformPoint(e.x,e.y),a=i.x-this.parameters.p.x,s=i.y-this.parameters.p.y;this.lastUpdateCall=[a,s],this.calc(a,s),this.el.fire(\"resizing\",{dx:a,dy:s,event:t})}else this.lastUpdateCall&&this.calc(this.lastUpdateCall[0],this.lastUpdateCall[1])},t.prototype.done=function(){this.lastUpdateCall=null,SVG.off(window,\"mousemove.resize\"),SVG.off(window,\"mouseup.resize\"),SVG.off(window,\"touchmove.resize\"),SVG.off(window,\"touchend.resize\"),this.el.fire(\"resizedone\")},t.prototype.snapToGrid=function(t,e,i,a){var s;return void 0!==a?s=[(i+t)%this.options.snapToGrid,(a+e)%this.options.snapToGrid]:(i=null==i?3:i,s=[(this.parameters.box.x+t+(1&i?0:this.parameters.box.width))%this.options.snapToGrid,(this.parameters.box.y+e+(2&i?0:this.parameters.box.height))%this.options.snapToGrid]),t<0&&(s[0]-=this.options.snapToGrid),e<0&&(s[1]-=this.options.snapToGrid),t-=Math.abs(s[0])<this.options.snapToGrid/2?s[0]:s[0]-(t<0?-this.options.snapToGrid:this.options.snapToGrid),e-=Math.abs(s[1])<this.options.snapToGrid/2?s[1]:s[1]-(e<0?-this.options.snapToGrid:this.options.snapToGrid),this.constraintToBox(t,e,i,a)},t.prototype.constraintToBox=function(t,e,i,a){var s,r,o=this.options.constraint||{};return void 0!==a?(s=i,r=a):(s=this.parameters.box.x+(1&i?0:this.parameters.box.width),r=this.parameters.box.y+(2&i?0:this.parameters.box.height)),void 0!==o.minX&&s+t<o.minX&&(t=o.minX-s),void 0!==o.maxX&&s+t>o.maxX&&(t=o.maxX-s),void 0!==o.minY&&r+e<o.minY&&(e=o.minY-r),void 0!==o.maxY&&r+e>o.maxY&&(e=o.maxY-r),[t,e]},t.prototype.checkAspectRatio=function(t,e){if(!this.options.saveAspectRatio)return t;var i=t.slice(),a=this.parameters.box.width/this.parameters.box.height,s=this.parameters.box.width+t[0],r=this.parameters.box.height-t[1],o=s/r;return o<a?(i[1]=s/a-this.parameters.box.height,e&&(i[1]=-i[1])):o>a&&(i[0]=this.parameters.box.width-r*a,e&&(i[0]=-i[0])),i},SVG.extend(SVG.Element,{resize:function(e){return(this.remember(\"_resizeHandler\")||new t(this)).init(e||{}),this}}),SVG.Element.prototype.resize.defaults={snapToAngle:.1,snapToGrid:1,constraint:{},saveAspectRatio:!1}}).call(this)}(),void 0===window.Apex&&(window.Apex={});var Nt=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"initModules\",value:function(){this.ctx.publicMethods=[\"updateOptions\",\"updateSeries\",\"appendData\",\"appendSeries\",\"toggleSeries\",\"showSeries\",\"hideSeries\",\"setLocale\",\"resetSeries\",\"zoomX\",\"toggleDataPointSelection\",\"dataURI\",\"exportToCSV\",\"addXaxisAnnotation\",\"addYaxisAnnotation\",\"addPointAnnotation\",\"clearAnnotations\",\"removeAnnotation\",\"paper\",\"destroy\"],this.ctx.eventList=[\"click\",\"mousedown\",\"mousemove\",\"mouseleave\",\"touchstart\",\"touchmove\",\"touchleave\",\"mouseup\",\"touchend\"],this.ctx.animations=new b(this.ctx),this.ctx.axes=new J(this.ctx),this.ctx.core=new Dt(this.ctx.el,this.ctx),this.ctx.config=new z({}),this.ctx.data=new O(this.ctx),this.ctx.grid=new j(this.ctx),this.ctx.graphics=new m(this.ctx),this.ctx.coreUtils=new y(this.ctx),this.ctx.crosshairs=new Q(this.ctx),this.ctx.events=new Z(this.ctx),this.ctx.exports=new V(this.ctx),this.ctx.localization=new $(this.ctx),this.ctx.options=new L,this.ctx.responsive=new K(this.ctx),this.ctx.series=new N(this.ctx),this.ctx.theme=new tt(this.ctx),this.ctx.formatters=new W(this.ctx),this.ctx.titleSubtitle=new et(this.ctx),this.ctx.legend=new lt(this.ctx),this.ctx.toolbar=new ht(this.ctx),this.ctx.tooltip=new bt(this.ctx),this.ctx.dimensions=new ot(this.ctx),this.ctx.updateHelpers=new Ht(this.ctx),this.ctx.zoomPanSelection=new ct(this.ctx),this.ctx.w.globals.tooltip=new bt(this.ctx)}}]),t}(),Ot=function(){function t(e){a(this,t),this.ctx=e,this.w=e.w}return r(t,[{key:\"clear\",value:function(t){var e=t.isUpdating;this.ctx.zoomPanSelection&&this.ctx.zoomPanSelection.destroy(),this.ctx.toolbar&&this.ctx.toolbar.destroy(),this.ctx.animations=null,this.ctx.axes=null,this.ctx.annotations=null,this.ctx.core=null,this.ctx.data=null,this.ctx.grid=null,this.ctx.series=null,this.ctx.responsive=null,this.ctx.theme=null,this.ctx.formatters=null,this.ctx.titleSubtitle=null,this.ctx.legend=null,this.ctx.dimensions=null,this.ctx.options=null,this.ctx.crosshairs=null,this.ctx.zoomPanSelection=null,this.ctx.updateHelpers=null,this.ctx.toolbar=null,this.ctx.localization=null,this.ctx.w.globals.tooltip=null,this.clearDomElements({isUpdating:e})}},{key:\"killSVG\",value:function(t){t.each((function(t,e){this.removeClass(\"*\"),this.off(),this.stop()}),!0),t.ungroup(),t.clear()}},{key:\"clearDomElements\",value:function(t){var e=this,i=t.isUpdating,a=this.w.globals.dom.Paper.node;a.parentNode&&a.parentNode.parentNode&&!i&&(a.parentNode.parentNode.style.minHeight=\"unset\");var s=this.w.globals.dom.baseEl;s&&this.ctx.eventList.forEach((function(t){s.removeEventListener(t,e.ctx.events.documentEvent)}));var r=this.w.globals.dom;if(null!==this.ctx.el)for(;this.ctx.el.firstChild;)this.ctx.el.removeChild(this.ctx.el.firstChild);this.killSVG(r.Paper),r.Paper.remove(),r.elWrap=null,r.elGraphical=null,r.elAnnotations=null,r.elLegendWrap=null,r.baseEl=null,r.elGridRect=null,r.elGridRectMask=null,r.elGridRectMarkerMask=null,r.elForecastMask=null,r.elNonForecastMask=null,r.elDefs=null}}]),t}(),Wt=new WeakMap;var Bt=function(){function t(e,i){a(this,t),this.opts=i,this.ctx=this,this.w=new Y(i).init(),this.el=e,this.w.globals.cuid=x.randomId(),this.w.globals.chartID=this.w.config.chart.id?x.escapeString(this.w.config.chart.id):this.w.globals.cuid,new Nt(this).initModules(),this.create=x.bind(this.create,this),this.windowResizeHandler=this._windowResizeHandler.bind(this),this.parentResizeHandler=this._parentResizeCallback.bind(this)}return r(t,[{key:\"render\",value:function(){var t=this;return new Promise((function(e,i){if(null!==t.el){void 0===Apex._chartInstances&&(Apex._chartInstances=[]),t.w.config.chart.id&&Apex._chartInstances.push({id:t.w.globals.chartID,group:t.w.config.chart.group,chart:t}),t.setLocale(t.w.config.chart.defaultLocale);var a=t.w.config.chart.events.beforeMount;if(\"function\"==typeof a&&a(t,t.w),t.events.fireEvent(\"beforeMount\",[t,t.w]),window.addEventListener(\"resize\",t.windowResizeHandler),function(t,e){var i=!1;if(t.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var a=t.getBoundingClientRect();\"none\"!==t.style.display&&0!==a.width||(i=!0)}var s=new ResizeObserver((function(a){i&&e.call(t,a),i=!0}));t.nodeType===Node.DOCUMENT_FRAGMENT_NODE?Array.from(t.children).forEach((function(t){return s.observe(t)})):s.observe(t),Wt.set(e,s)}(t.el.parentNode,t.parentResizeHandler),!t.css){var s=t.el.getRootNode&&t.el.getRootNode(),r=x.is(\"ShadowRoot\",s),o=t.el.ownerDocument,n=o.getElementById(\"apexcharts-css\");!r&&n||(t.css=document.createElement(\"style\"),t.css.id=\"apexcharts-css\",t.css.textContent='@keyframes opaque {\\n 0% {\\n opacity: 0\\n }\\n\\n to {\\n opacity: 1\\n }\\n}\\n\\n@keyframes resizeanim {\\n 0%,to {\\n opacity: 0\\n }\\n}\\n\\n.apexcharts-canvas {\\n position: relative;\\n user-select: none\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar {\\n -webkit-appearance: none;\\n width: 6px\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\n border-radius: 4px;\\n background-color: rgba(0,0,0,.5);\\n box-shadow: 0 0 1px rgba(255,255,255,.5);\\n -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5)\\n}\\n\\n.apexcharts-inner {\\n position: relative\\n}\\n\\n.apexcharts-text tspan {\\n font-family: inherit\\n}\\n\\n.legend-mouseover-inactive {\\n transition: .15s ease all;\\n opacity: .2\\n}\\n\\n.apexcharts-series-collapsed {\\n opacity: 0\\n}\\n\\n.apexcharts-tooltip {\\n border-radius: 5px;\\n box-shadow: 2px 2px 6px -4px #999;\\n cursor: default;\\n font-size: 14px;\\n left: 62px;\\n opacity: 0;\\n pointer-events: none;\\n position: absolute;\\n top: 20px;\\n display: flex;\\n flex-direction: column;\\n overflow: hidden;\\n white-space: nowrap;\\n z-index: 12;\\n transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-active {\\n opacity: 1;\\n transition: .15s ease all\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light {\\n border: 1px solid #e3e3e3;\\n background: rgba(255,255,255,.96)\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark {\\n color: #fff;\\n background: rgba(30,30,30,.8)\\n}\\n\\n.apexcharts-tooltip * {\\n font-family: inherit\\n}\\n\\n.apexcharts-tooltip-title {\\n padding: 6px;\\n font-size: 15px;\\n margin-bottom: 4px\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\\n background: #eceff1;\\n border-bottom: 1px solid #ddd\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\\n background: rgba(0,0,0,.7);\\n border-bottom: 1px solid #333\\n}\\n\\n.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value {\\n display: inline-block;\\n margin-left: 5px;\\n font-weight: 600\\n}\\n\\n.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty {\\n display: none\\n}\\n\\n.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n padding: 6px 0 5px\\n}\\n\\n.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value {\\n display: flex\\n}\\n\\n.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty) {\\n margin-top: -6px\\n}\\n\\n.apexcharts-tooltip-marker {\\n width: 12px;\\n height: 12px;\\n position: relative;\\n top: 0;\\n margin-right: 10px;\\n border-radius: 50%\\n}\\n\\n.apexcharts-tooltip-series-group {\\n padding: 0 10px;\\n display: none;\\n text-align: left;\\n justify-content: left;\\n align-items: center\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\\n opacity: 1\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active,.apexcharts-tooltip-series-group:last-child {\\n padding-bottom: 4px\\n}\\n\\n.apexcharts-tooltip-series-group-hidden {\\n opacity: 0;\\n height: 0;\\n line-height: 0;\\n padding: 0!important\\n}\\n\\n.apexcharts-tooltip-y-group {\\n padding: 6px 0 5px\\n}\\n\\n.apexcharts-custom-tooltip,.apexcharts-tooltip-box {\\n padding: 4px 8px\\n}\\n\\n.apexcharts-tooltip-boxPlot {\\n display: flex;\\n flex-direction: column-reverse\\n}\\n\\n.apexcharts-tooltip-box>div {\\n margin: 4px 0\\n}\\n\\n.apexcharts-tooltip-box span.value {\\n font-weight: 700\\n}\\n\\n.apexcharts-tooltip-rangebar {\\n padding: 5px 8px\\n}\\n\\n.apexcharts-tooltip-rangebar .category {\\n font-weight: 600;\\n color: #777\\n}\\n\\n.apexcharts-tooltip-rangebar .series-name {\\n font-weight: 700;\\n display: block;\\n margin-bottom: 5px\\n}\\n\\n.apexcharts-xaxistooltip,.apexcharts-yaxistooltip {\\n opacity: 0;\\n pointer-events: none;\\n color: #373d3f;\\n font-size: 13px;\\n text-align: center;\\n border-radius: 2px;\\n position: absolute;\\n z-index: 10;\\n background: #eceff1;\\n border: 1px solid #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip {\\n padding: 9px 10px;\\n transition: .15s ease all\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\\n background: rgba(0,0,0,.7);\\n border: 1px solid rgba(0,0,0,.5);\\n color: #fff\\n}\\n\\n.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before {\\n left: 50%;\\n border: solid transparent;\\n content: \" \";\\n height: 0;\\n width: 0;\\n position: absolute;\\n pointer-events: none\\n}\\n\\n.apexcharts-xaxistooltip:after {\\n border-color: transparent;\\n border-width: 6px;\\n margin-left: -6px\\n}\\n\\n.apexcharts-xaxistooltip:before {\\n border-color: transparent;\\n border-width: 7px;\\n margin-left: -7px\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before {\\n bottom: 100%\\n}\\n\\n.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before {\\n top: 100%\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after {\\n border-bottom-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-bottom:before {\\n border-bottom-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\\n border-bottom-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip-top:after {\\n border-top-color: #eceff1\\n}\\n\\n.apexcharts-xaxistooltip-top:before {\\n border-top-color: #90a4ae\\n}\\n\\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after,.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\\n border-top-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-active {\\n opacity: 1;\\n transition: .15s ease all\\n}\\n\\n.apexcharts-yaxistooltip {\\n padding: 4px 10px\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\\n background: rgba(0,0,0,.7);\\n border: 1px solid rgba(0,0,0,.5);\\n color: #fff\\n}\\n\\n.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before {\\n top: 50%;\\n border: solid transparent;\\n content: \" \";\\n height: 0;\\n width: 0;\\n position: absolute;\\n pointer-events: none\\n}\\n\\n.apexcharts-yaxistooltip:after {\\n border-color: transparent;\\n border-width: 6px;\\n margin-top: -6px\\n}\\n\\n.apexcharts-yaxistooltip:before {\\n border-color: transparent;\\n border-width: 7px;\\n margin-top: -7px\\n}\\n\\n.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before {\\n left: 100%\\n}\\n\\n.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before {\\n right: 100%\\n}\\n\\n.apexcharts-yaxistooltip-left:after {\\n border-left-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-left:before {\\n border-left-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\\n border-left-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip-right:after {\\n border-right-color: #eceff1\\n}\\n\\n.apexcharts-yaxistooltip-right:before {\\n border-right-color: #90a4ae\\n}\\n\\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after,.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\\n border-right-color: rgba(0,0,0,.5)\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-active {\\n opacity: 1\\n}\\n\\n.apexcharts-yaxistooltip-hidden {\\n display: none\\n}\\n\\n.apexcharts-xcrosshairs,.apexcharts-ycrosshairs {\\n pointer-events: none;\\n opacity: 0;\\n transition: .15s ease all\\n}\\n\\n.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active {\\n opacity: 1;\\n transition: .15s ease all\\n}\\n\\n.apexcharts-ycrosshairs-hidden {\\n opacity: 0\\n}\\n\\n.apexcharts-selection-rect {\\n cursor: move\\n}\\n\\n.svg_select_boundingRect,.svg_select_points_rot {\\n pointer-events: none;\\n opacity: 0;\\n visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_boundingRect,.apexcharts-selection-rect+g .svg_select_points_rot {\\n opacity: 0;\\n visibility: hidden\\n}\\n\\n.apexcharts-selection-rect+g .svg_select_points_l,.apexcharts-selection-rect+g .svg_select_points_r {\\n cursor: ew-resize;\\n opacity: 1;\\n visibility: visible\\n}\\n\\n.svg_select_points {\\n fill: #efefef;\\n stroke: #333;\\n rx: 2\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\\n cursor: crosshair\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\\n cursor: move\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-pan-icon,.apexcharts-reset-icon,.apexcharts-selection-icon,.apexcharts-toolbar-custom-icon,.apexcharts-zoom-icon,.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n cursor: pointer;\\n width: 20px;\\n height: 20px;\\n line-height: 24px;\\n color: #6e8192;\\n text-align: center\\n}\\n\\n.apexcharts-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg {\\n fill: #6e8192\\n}\\n\\n.apexcharts-selection-icon svg {\\n fill: #444;\\n transform: scale(.76)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon svg,.apexcharts-theme-dark .apexcharts-pan-icon svg,.apexcharts-theme-dark .apexcharts-reset-icon svg,.apexcharts-theme-dark .apexcharts-selection-icon svg,.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg,.apexcharts-theme-dark .apexcharts-zoom-icon svg,.apexcharts-theme-dark .apexcharts-zoomin-icon svg,.apexcharts-theme-dark .apexcharts-zoomout-icon svg {\\n fill: #f3f4f5\\n}\\n\\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg {\\n fill: #008ffb\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg,.apexcharts-theme-light .apexcharts-reset-icon:hover svg,.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg {\\n fill: #333\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-selection-icon {\\n position: relative\\n}\\n\\n.apexcharts-reset-icon {\\n margin-left: 5px\\n}\\n\\n.apexcharts-menu-icon,.apexcharts-reset-icon,.apexcharts-zoom-icon {\\n transform: scale(.85)\\n}\\n\\n.apexcharts-zoomin-icon,.apexcharts-zoomout-icon {\\n transform: scale(.7)\\n}\\n\\n.apexcharts-zoomout-icon {\\n margin-right: 3px\\n}\\n\\n.apexcharts-pan-icon {\\n transform: scale(.62);\\n position: relative;\\n left: 1px;\\n top: 0\\n}\\n\\n.apexcharts-pan-icon svg {\\n fill: #fff;\\n stroke: #6e8192;\\n stroke-width: 2\\n}\\n\\n.apexcharts-pan-icon.apexcharts-selected svg {\\n stroke: #008ffb\\n}\\n\\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\\n stroke: #333\\n}\\n\\n.apexcharts-toolbar {\\n position: absolute;\\n z-index: 11;\\n max-width: 176px;\\n text-align: right;\\n border-radius: 3px;\\n padding: 0 6px 2px;\\n display: flex;\\n justify-content: space-between;\\n align-items: center\\n}\\n\\n.apexcharts-menu {\\n background: #fff;\\n position: absolute;\\n top: 100%;\\n border: 1px solid #ddd;\\n border-radius: 3px;\\n padding: 3px;\\n right: 10px;\\n opacity: 0;\\n min-width: 110px;\\n transition: .15s ease all;\\n pointer-events: none\\n}\\n\\n.apexcharts-menu.apexcharts-menu-open {\\n opacity: 1;\\n pointer-events: all;\\n transition: .15s ease all\\n}\\n\\n.apexcharts-menu-item {\\n padding: 6px 7px;\\n font-size: 12px;\\n cursor: pointer\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-item:hover {\\n background: #eee\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu {\\n background: rgba(0,0,0,.7);\\n color: #fff\\n}\\n\\n@media screen and (min-width:768px) {\\n .apexcharts-canvas:hover .apexcharts-toolbar {\\n opacity: 1\\n }\\n}\\n\\n.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points {\\n opacity: 0\\n}\\n\\n.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label {\\n cursor: default;\\n pointer-events: none\\n}\\n\\n.apexcharts-pie-label-delay {\\n opacity: 0;\\n animation-name: opaque;\\n animation-duration: .3s;\\n animation-fill-mode: forwards;\\n animation-timing-function: ease\\n}\\n\\n.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-gridline,.apexcharts-line,.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,.apexcharts-point-annotation-label,.apexcharts-radar-series path,.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect {\\n pointer-events: none\\n}\\n\\n.apexcharts-marker {\\n transition: .15s ease all\\n}\\n\\n.resize-triggers {\\n animation: 1ms resizeanim;\\n visibility: hidden;\\n opacity: 0;\\n height: 100%;\\n width: 100%;\\n overflow: hidden\\n}\\n\\n.contract-trigger:before,.resize-triggers,.resize-triggers>div {\\n content: \" \";\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0\\n}\\n\\n.resize-triggers>div {\\n height: 100%;\\n width: 100%;\\n background: #eee;\\n overflow: auto\\n}\\n\\n.contract-trigger:before {\\n overflow: hidden;\\n width: 200%;\\n height: 200%\\n}',r?s.prepend(t.css):o.head.appendChild(t.css))}var l=t.create(t.w.config.series,{});if(!l)return e(t);t.mount(l).then((function(){\"function\"==typeof t.w.config.chart.events.mounted&&t.w.config.chart.events.mounted(t,t.w),t.events.fireEvent(\"mounted\",[t,t.w]),e(l)})).catch((function(t){i(t)}))}else i(new Error(\"Element not found\"))}))}},{key:\"create\",value:function(t,e){var i=this.w;new Nt(this).initModules();var a=this.w.globals;(a.noData=!1,a.animationEnded=!1,this.responsive.checkResponsiveConfig(e),i.config.xaxis.convertedCatToNumeric)&&new X(i.config).convertCatToNumericXaxis(i.config,this.ctx);if(null===this.el)return a.animationEnded=!0,null;if(this.core.setupElements(),\"treemap\"===i.config.chart.type&&(i.config.grid.show=!1,i.config.yaxis[0].show=!1),0===a.svgWidth)return a.animationEnded=!0,null;var s=y.checkComboSeries(t);a.comboCharts=s.comboCharts,a.comboBarCount=s.comboBarCount;var r=t.every((function(t){return t.data&&0===t.data.length}));(0===t.length||r)&&this.series.handleNoData(),this.events.setupEventHandlers(),this.data.parseData(t),this.theme.init(),new R(this).setGlobalMarkerSize(),this.formatters.setLabelFormatters(),this.titleSubtitle.draw(),a.noData&&a.collapsedSeries.length!==a.series.length&&!i.config.legend.showForSingleSeries||this.legend.init(),this.series.hasAllSeriesEqualX(),a.axisCharts&&(this.core.coreCalculations(),\"category\"!==i.config.xaxis.type&&this.formatters.setLabelFormatters(),this.ctx.toolbar.minX=i.globals.minX,this.ctx.toolbar.maxX=i.globals.maxX),this.formatters.heatmapLabelFormatters(),new y(this).getLargestMarkerSize(),this.dimensions.plotCoords();var o=this.core.xySettings();this.grid.createGridMask();var n=this.core.plotChartType(t,o),l=new H(this);l.bringForward(),i.config.dataLabels.background.enabled&&l.dataLabelsBackground(),this.core.shiftGraphPosition();var h={plot:{left:i.globals.translateX,top:i.globals.translateY,width:i.globals.gridWidth,height:i.globals.gridHeight}};return{elGraph:n,xyRatios:o,elInner:i.globals.dom.elGraphical,dimensions:h}}},{key:\"mount\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=this,a=i.w;return new Promise((function(s,r){if(null===i.el)return r(new Error(\"Not enough data to display or target element not found\"));(null===e||a.globals.allSeriesCollapsed)&&i.series.handleNoData(),\"treemap\"!==a.config.chart.type&&i.axes.drawAxis(a.config.chart.type,e.xyRatios),i.grid=new j(i);var o=i.grid.drawGrid();i.annotations=new P(i),i.annotations.drawImageAnnos(),i.annotations.drawTextAnnos(),\"back\"===a.config.grid.position&&o&&a.globals.dom.elGraphical.add(o.el);var n=new G(t.ctx),l=new q(t.ctx);if(null!==o&&(n.xAxisLabelCorrections(o.xAxisTickWidth),l.setYAxisTextAlignments(),a.config.yaxis.map((function(t,e){-1===a.globals.ignoreYAxisIndexes.indexOf(e)&&l.yAxisTitleRotate(e,t.opposite)}))),\"back\"===a.config.annotations.position&&(a.globals.dom.Paper.add(a.globals.dom.elAnnotations),i.annotations.drawAxesAnnotations()),Array.isArray(e.elGraph))for(var h=0;h<e.elGraph.length;h++)a.globals.dom.elGraphical.add(e.elGraph[h]);else a.globals.dom.elGraphical.add(e.elGraph);if(\"front\"===a.config.grid.position&&o&&a.globals.dom.elGraphical.add(o.el),\"front\"===a.config.xaxis.crosshairs.position&&i.crosshairs.drawXCrosshairs(),\"front\"===a.config.yaxis[0].crosshairs.position&&i.crosshairs.drawYCrosshairs(),\"front\"===a.config.annotations.position&&(a.globals.dom.Paper.add(a.globals.dom.elAnnotations),i.annotations.drawAxesAnnotations()),!a.globals.noData){if(a.config.tooltip.enabled&&!a.globals.noData&&i.w.globals.tooltip.drawTooltip(e.xyRatios),a.globals.axisCharts&&(a.globals.isXNumeric||a.config.xaxis.convertedCatToNumeric||a.globals.isRangeBar))(a.config.chart.zoom.enabled||a.config.chart.selection&&a.config.chart.selection.enabled||a.config.chart.pan&&a.config.chart.pan.enabled)&&i.zoomPanSelection.init({xyRatios:e.xyRatios});else{var c=a.config.chart.toolbar.tools;[\"zoom\",\"zoomin\",\"zoomout\",\"selection\",\"pan\",\"reset\"].forEach((function(t){c[t]=!1}))}a.config.chart.toolbar.show&&!a.globals.allSeriesCollapsed&&i.toolbar.createToolbar()}a.globals.memory.methodsToExec.length>0&&a.globals.memory.methodsToExec.forEach((function(t){t.method(t.params,!1,t.context)})),a.globals.axisCharts||a.globals.noData||i.core.resizeNonAxisCharts(),s(i)}))}},{key:\"destroy\",value:function(){var t,e;window.removeEventListener(\"resize\",this.windowResizeHandler),this.el.parentNode,t=this.parentResizeHandler,(e=Wt.get(t))&&(e.disconnect(),Wt.delete(t));var i=this.w.config.chart.id;i&&Apex._chartInstances.forEach((function(t,e){t.id===x.escapeString(i)&&Apex._chartInstances.splice(e,1)})),new Ot(this.ctx).clear({isUpdating:!1})}},{key:\"updateOptions\",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=this.w;return o.globals.selection=void 0,t.series&&(this.series.resetSeries(!1,!0,!1),t.series.length&&t.series[0].data&&(t.series=t.series.map((function(t,i){return e.updateHelpers._extendSeries(t,i)}))),this.updateHelpers.revertDefaultAxisMinMax()),t.xaxis&&(t=this.updateHelpers.forceXAxisUpdate(t)),t.yaxis&&(t=this.updateHelpers.forceYAxisUpdate(t)),o.globals.collapsedSeriesIndices.length>0&&this.series.clearPreviousPaths(),t.theme&&(t=this.theme.updateThemeOptions(t)),this.updateHelpers._updateOptions(t,i,a,s,r)}},{key:\"updateSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(t,e,i)}},{key:\"appendSeries\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=this.w.config.series.slice();return a.push(t),this.series.resetSeries(!1),this.updateHelpers.revertDefaultAxisMinMax(),this.updateHelpers._updateSeries(a,e,i)}},{key:\"appendData\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this;i.w.globals.dataChanged=!0,i.series.getPreviousPaths();for(var a=i.w.config.series.slice(),s=0;s<a.length;s++)if(null!==t[s]&&void 0!==t[s])for(var r=0;r<t[s].data.length;r++)a[s].data.push(t[s].data[r]);return i.w.config.series=a,e&&(i.w.globals.initialSeries=x.clone(i.w.config.series)),this.update()}},{key:\"update\",value:function(t){var e=this;return new Promise((function(i,a){new Ot(e.ctx).clear({isUpdating:!0});var s=e.create(e.w.config.series,t);if(!s)return i(e);e.mount(s).then((function(){\"function\"==typeof e.w.config.chart.events.updated&&e.w.config.chart.events.updated(e,e.w),e.events.fireEvent(\"updated\",[e,e.w]),e.w.globals.isDirty=!0,i(e)})).catch((function(t){a(t)}))}))}},{key:\"getSyncedCharts\",value:function(){var t=this.getGroupedCharts(),e=[this];return t.length&&(e=[],t.forEach((function(t){e.push(t)}))),e}},{key:\"getGroupedCharts\",value:function(){var t=this;return Apex._chartInstances.filter((function(t){if(t.group)return!0})).map((function(e){return t.w.config.chart.group===e.group?e.chart:t}))}},{key:\"toggleSeries\",value:function(t){return this.series.toggleSeries(t)}},{key:\"highlightSeriesOnLegendHover\",value:function(t,e){return this.series.toggleSeriesOnHover(t,e)}},{key:\"showSeries\",value:function(t){this.series.showSeries(t)}},{key:\"hideSeries\",value:function(t){this.series.hideSeries(t)}},{key:\"resetSeries\",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.series.resetSeries(t,e)}},{key:\"addEventListener\",value:function(t,e){this.events.addEventListener(t,e)}},{key:\"removeEventListener\",value:function(t,e){this.events.removeEventListener(t,e)}},{key:\"addXaxisAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addXaxisAnnotationExternal(t,e,a)}},{key:\"addYaxisAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addYaxisAnnotationExternal(t,e,a)}},{key:\"addPointAnnotation\",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=this;i&&(a=i),a.annotations.addPointAnnotationExternal(t,e,a)}},{key:\"clearAnnotations\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,e=this;t&&(e=t),e.annotations.clearAnnotations(e)}},{key:\"removeAnnotation\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this;e&&(i=e),i.annotations.removeAnnotation(i,t)}},{key:\"getChartArea\",value:function(){return this.w.globals.dom.baseEl.querySelector(\".apexcharts-inner\")}},{key:\"getSeriesTotalXRange\",value:function(t,e){return this.coreUtils.getSeriesTotalsXRange(t,e)}},{key:\"getHighestValueInSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=new U(this.ctx);return e.getMinYMaxY(t).highestY}},{key:\"getLowestValueInSeries\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=new U(this.ctx);return e.getMinYMaxY(t).lowestY}},{key:\"getSeriesTotal\",value:function(){return this.w.globals.seriesTotals}},{key:\"toggleDataPointSelection\",value:function(t,e){return this.updateHelpers.toggleDataPointSelection(t,e)}},{key:\"zoomX\",value:function(t,e){this.ctx.toolbar.zoomUpdateOptions(t,e)}},{key:\"setLocale\",value:function(t){this.localization.setCurrentLocaleValues(t)}},{key:\"dataURI\",value:function(t){return new V(this.ctx).dataURI(t)}},{key:\"exportToCSV\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=new V(this.ctx);return e.exportToCSV(t)}},{key:\"paper\",value:function(){return this.w.globals.dom.Paper}},{key:\"_parentResizeCallback\",value:function(){this.w.globals.animationEnded&&this.w.config.chart.redrawOnParentResize&&this._windowResize()}},{key:\"_windowResize\",value:function(){var t=this;clearTimeout(this.w.globals.resizeTimer),this.w.globals.resizeTimer=window.setTimeout((function(){t.w.globals.resized=!0,t.w.globals.dataChanged=!1,t.ctx.update()}),150)}},{key:\"_windowResizeHandler\",value:function(){var t=this.w.config.chart.redrawOnWindowResize;\"function\"==typeof t&&(t=t()),t&&this._windowResize()}}],[{key:\"getChartByID\",value:function(t){var e=x.escapeString(t),i=Apex._chartInstances.filter((function(t){return t.id===e}))[0];return i&&i.chart}},{key:\"initOnLoad\",value:function(){for(var e=document.querySelectorAll(\"[data-apexcharts]\"),i=0;i<e.length;i++){new t(e[i],JSON.parse(e[i].getAttribute(\"data-options\"))).render()}}},{key:\"exec\",value:function(t,e){var i=this.getChartByID(t);if(i){i.w.globals.isExecCalled=!0;var a=null;if(-1!==i.publicMethods.indexOf(e)){for(var s=arguments.length,r=new Array(s>2?s-2:0),o=2;o<s;o++)r[o-2]=arguments[o];a=i[e].apply(i,r)}return a}}},{key:\"merge\",value:function(t,e){return x.extend(t,e)}}]),t}();return Bt}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXBleGNoYXJ0cy9kaXN0L2FwZXhjaGFydHMubWluLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FwZXhjaGFydHMvZGlzdC9hcGV4Y2hhcnRzLm1pbi5qcz8zZDFlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQXBleENoYXJ0cyB2My4zNi4wXG4gKiAoYykgMjAxOC0yMDIyIEFwZXhDaGFydHNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5BcGV4Q2hhcnRzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0KHQsZSl7dmFyIGk9T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYoYT1hLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxpLnB1c2guYXBwbHkoaSxhKX1yZXR1cm4gaX1mdW5jdGlvbiBlKGUpe2Zvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tpXT9hcmd1bWVudHNbaV06e307aSUyP3QoT2JqZWN0KGEpLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtvKGUsdCxhW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTp0KE9iamVjdChhKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsdCkpfSkpfXJldHVybiBlfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGk9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgdH0saSh0KX1mdW5jdGlvbiBhKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07YS5lbnVtZXJhYmxlPWEuZW51bWVyYWJsZXx8ITEsYS5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGEua2V5LGEpfX1mdW5jdGlvbiByKHQsZSxpKXtyZXR1cm4gZSYmcyh0LnByb3RvdHlwZSxlKSxpJiZzKHQsaSksdH1mdW5jdGlvbiBvKHQsZSxpKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOmksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPWksdH1mdW5jdGlvbiBuKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiZoKHQsZSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gbD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfSxsKHQpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gaD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX19wcm90b19fPWUsdH0saCh0LGUpfWZ1bmN0aW9uIGModCxlKXtpZihlJiYoXCJvYmplY3RcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpKXJldHVybiBlO2lmKHZvaWQgMCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4gdH0odCl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBpLGE9bCh0KTtpZihlKXt2YXIgcz1sKHRoaXMpLmNvbnN0cnVjdG9yO2k9UmVmbGVjdC5jb25zdHJ1Y3QoYSxhcmd1bWVudHMscyl9ZWxzZSBpPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBjKHRoaXMsaSl9fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdH0odCl8fGZ1bmN0aW9uKHQsZSl7dmFyIGk9bnVsbD09dD9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFtcIkBAaXRlcmF0b3JcIl07aWYobnVsbD09aSlyZXR1cm47dmFyIGEscyxyPVtdLG89ITAsbj0hMTt0cnl7Zm9yKGk9aS5jYWxsKHQpOyEobz0oYT1pLm5leHQoKSkuZG9uZSkmJihyLnB1c2goYS52YWx1ZSksIWV8fHIubGVuZ3RoIT09ZSk7bz0hMCk7fWNhdGNoKHQpe249ITAscz10fWZpbmFsbHl7dHJ5e298fG51bGw9PWkucmV0dXJufHxpLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBzfX1yZXR1cm4gcn0odCxlKXx8Zih0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gcCh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFtcIkBAaXRlcmF0b3JcIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmKHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIGYodCxlKXtpZih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdClyZXR1cm4gcCh0LGUpO3ZhciBpPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09aSYmdC5jb25zdHJ1Y3RvciYmKGk9dC5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09aXx8XCJTZXRcIj09PWk/QXJyYXkuZnJvbSh0KTpcIkFyZ3VtZW50c1wiPT09aXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoaSk/cCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gcCh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgaT0wLGE9bmV3IEFycmF5KGUpO2k8ZTtpKyspYVtpXT10W2ldO3JldHVybiBhfXZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2EodGhpcyx0KX1yZXR1cm4gcih0LFt7a2V5Olwic2hhZGVSR0JDb2xvclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5zcGxpdChcIixcIiksYT10PDA/MDoyNTUscz10PDA/LTEqdDp0LHI9cGFyc2VJbnQoaVswXS5zbGljZSg0KSwxMCksbz1wYXJzZUludChpWzFdLDEwKSxuPXBhcnNlSW50KGlbMl0sMTApO3JldHVyblwicmdiKFwiKyhNYXRoLnJvdW5kKChhLXIpKnMpK3IpK1wiLFwiKyhNYXRoLnJvdW5kKChhLW8pKnMpK28pK1wiLFwiKyhNYXRoLnJvdW5kKChhLW4pKnMpK24pK1wiKVwifX0se2tleTpcInNoYWRlSGV4Q29sb3JcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXBhcnNlSW50KGUuc2xpY2UoMSksMTYpLGE9dDwwPzA6MjU1LHM9dDwwPy0xKnQ6dCxyPWk+PjE2LG89aT4+OCYyNTUsbj0yNTUmaTtyZXR1cm5cIiNcIisoMTY3NzcyMTYrNjU1MzYqKE1hdGgucm91bmQoKGEtcikqcykrcikrMjU2KihNYXRoLnJvdW5kKChhLW8pKnMpK28pKyhNYXRoLnJvdW5kKChhLW4pKnMpK24pKS50b1N0cmluZygxNikuc2xpY2UoMSl9fSx7a2V5Olwic2hhZGVDb2xvclwiLHZhbHVlOmZ1bmN0aW9uKGUsaSl7cmV0dXJuIHQuaXNDb2xvckhleChpKT90aGlzLnNoYWRlSGV4Q29sb3IoZSxpKTp0aGlzLnNoYWRlUkdCQ29sb3IoZSxpKX19XSxbe2tleTpcImJpbmRcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSx7a2V5OlwiaXNPYmplY3RcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJvYmplY3RcIj09PWkodCkmJiFBcnJheS5pc0FycmF5KHQpJiZudWxsIT10fX0se2tleTpcImlzXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09XCJbb2JqZWN0IFwiK3QrXCJdXCJ9fSx7a2V5OlwibGlzdFRvQXJyYXlcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxpPVtdO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspaVtlXT10W2VdO3JldHVybiBpfX0se2tleTpcImV4dGVuZFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztcImZ1bmN0aW9uXCIhPXR5cGVvZiBPYmplY3QuYXNzaWduJiYoT2JqZWN0LmFzc2lnbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7Zm9yKHZhciBlPU9iamVjdCh0KSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIGE9YXJndW1lbnRzW2ldO2lmKG51bGwhPWEpZm9yKHZhciBzIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShzKSYmKGVbc109YVtzXSl9cmV0dXJuIGV9KTt2YXIgYT1PYmplY3QuYXNzaWduKHt9LHQpO3JldHVybiB0aGlzLmlzT2JqZWN0KHQpJiZ0aGlzLmlzT2JqZWN0KGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihzKXtpLmlzT2JqZWN0KGVbc10pJiZzIGluIHQ/YVtzXT1pLmV4dGVuZCh0W3NdLGVbc10pOk9iamVjdC5hc3NpZ24oYSxvKHt9LHMsZVtzXSkpfSkpLGF9fSx7a2V5OlwiZXh0ZW5kQXJyYXlcIix2YWx1ZTpmdW5jdGlvbihlLGkpe3ZhciBhPVtdO3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7YS5wdXNoKHQuZXh0ZW5kKGksZSkpfSkpLGU9YX19LHtrZXk6XCJtb250aE1vZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0JTEyfX0se2tleTpcImNsb25lXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodC5pcyhcIkFycmF5XCIsZSkpe2Zvcih2YXIgYT1bXSxzPTA7czxlLmxlbmd0aDtzKyspYVtzXT10aGlzLmNsb25lKGVbc10pO3JldHVybiBhfWlmKHQuaXMoXCJOdWxsXCIsZSkpcmV0dXJuIG51bGw7aWYodC5pcyhcIkRhdGVcIixlKSlyZXR1cm4gZTtpZihcIm9iamVjdFwiPT09aShlKSl7dmFyIHI9e307Zm9yKHZhciBvIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShvKSYmKHJbb109dGhpcy5jbG9uZShlW29dKSk7cmV0dXJuIHJ9cmV0dXJuIGV9fSx7a2V5OlwibG9nMTBcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwfX0se2tleTpcInJvdW5kVG9CYXNlMTBcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZzEwKHQpKSl9fSx7a2V5Olwicm91bmRUb0Jhc2VcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLnBvdyhlLE1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5sb2coZSkpKX19LHtrZXk6XCJwYXJzZU51bWJlclwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD90OnBhcnNlRmxvYXQodCl9fSx7a2V5OlwicmFuZG9tSWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybihNYXRoLnJhbmRvbSgpKzEpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNCl9fSx7a2V5Olwibm9FeHBvbmVudHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcodCkuc3BsaXQoL1tlRV0vKTtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIGVbMF07dmFyIGk9XCJcIixhPXQ8MD9cIi1cIjpcIlwiLHM9ZVswXS5yZXBsYWNlKFwiLlwiLFwiXCIpLHI9TnVtYmVyKGVbMV0pKzE7aWYocjwwKXtmb3IoaT1hK1wiMC5cIjtyKys7KWkrPVwiMFwiO3JldHVybiBpK3MucmVwbGFjZSgvXi0vLFwiXCIpfWZvcihyLT1zLmxlbmd0aDtyLS07KWkrPVwiMFwiO3JldHVybiBzK2l9fSx7a2V5OlwiZ2V0RGltZW5zaW9uc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWdldENvbXB1dGVkU3R5bGUodCxudWxsKSxpPXQuY2xpZW50SGVpZ2h0LGE9dC5jbGllbnRXaWR0aDtyZXR1cm4gaS09cGFyc2VGbG9hdChlLnBhZGRpbmdUb3ApK3BhcnNlRmxvYXQoZS5wYWRkaW5nQm90dG9tKSxbYS09cGFyc2VGbG9hdChlLnBhZGRpbmdMZWZ0KStwYXJzZUZsb2F0KGUucGFkZGluZ1JpZ2h0KSxpXX19LHtrZXk6XCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6ZS50b3AscmlnaHQ6ZS5yaWdodCxib3R0b206ZS5ib3R0b20sbGVmdDplLmxlZnQsd2lkdGg6dC5jbGllbnRXaWR0aCxoZWlnaHQ6dC5jbGllbnRIZWlnaHQseDplLmxlZnQseTplLnRvcH19fSx7a2V5OlwiZ2V0TGFyZ2VzdFN0cmluZ0Zyb21BcnJcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJihlPWUucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aD5lLmxlbmd0aD90OmV9KSkpLHQubGVuZ3RoPmUubGVuZ3RoP3Q6ZX0pLDApfX0se2tleTpcImhleFRvUmdiYVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlwiIzk5OTk5OVwiLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOi42O1wiI1wiIT09dC5zdWJzdHJpbmcoMCwxKSYmKHQ9XCIjOTk5OTk5XCIpO3ZhciBpPXQucmVwbGFjZShcIiNcIixcIlwiKTtpPWkubWF0Y2gobmV3IFJlZ0V4cChcIigue1wiK2kubGVuZ3RoLzMrXCJ9KVwiLFwiZ1wiKSk7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspaVthXT1wYXJzZUludCgxPT09aVthXS5sZW5ndGg/aVthXStpW2FdOmlbYV0sMTYpO3JldHVybiB2b2lkIDAhPT1lJiZpLnB1c2goZSksXCJyZ2JhKFwiK2kuam9pbihcIixcIikrXCIpXCJ9fSx7a2V5OlwiZ2V0T3BhY2l0eUZyb21SR0JBXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodC5yZXBsYWNlKC9eLiosKC4rKVxcKS8sXCIkMVwiKSl9fSx7a2V5OlwicmdiMmhleFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybih0PXQubWF0Y2goL15yZ2JhP1tcXHMrXT9cXChbXFxzK10/KFxcZCspW1xccytdPyxbXFxzK10/KFxcZCspW1xccytdPyxbXFxzK10/KFxcZCspW1xccytdPy9pKSkmJjQ9PT10Lmxlbmd0aD9cIiNcIisoXCIwXCIrcGFyc2VJbnQodFsxXSwxMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMikrKFwiMFwiK3BhcnNlSW50KHRbMl0sMTApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKyhcIjBcIitwYXJzZUludCh0WzNdLDEwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTpcIlwifX0se2tleTpcImlzQ29sb3JIZXhcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4vKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpfCheI1swLTlBLUZdezh9JCkvaS50ZXN0KHQpfX0se2tleTpcImdldFBvbHlnb25Qb3NcIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bXSxhPTIqTWF0aC5QSS9lLHM9MDtzPGU7cysrKXt2YXIgcj17fTtyLng9dCpNYXRoLnNpbihzKmEpLHIueT0tdCpNYXRoLmNvcyhzKmEpLGkucHVzaChyKX1yZXR1cm4gaX19LHtrZXk6XCJwb2xhclRvQ2FydGVzaWFuXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM9KGEtOTApKk1hdGguUEkvMTgwO3JldHVybnt4OnQraSpNYXRoLmNvcyhzKSx5OmUraSpNYXRoLnNpbihzKX19fSx7a2V5OlwiZXNjYXBlU3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlwieFwiLGk9dC50b1N0cmluZygpLnNsaWNlKCk7cmV0dXJuIGk9aS5yZXBsYWNlKC9bYCB+IUAjJCVeJiooKXwrXFw9Pzs6J1wiLC48Pnt9W1xcXVxcXFwvXS9naSxlKX19LHtrZXk6XCJuZWdUb1plcm9cIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdDwwPzA6dH19LHtrZXk6XCJtb3ZlSW5kZXhJbkFycmF5XCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe2lmKGk+PXQubGVuZ3RoKWZvcih2YXIgYT1pLXQubGVuZ3RoKzE7YS0tOyl0LnB1c2godm9pZCAwKTtyZXR1cm4gdC5zcGxpY2UoaSwwLHQuc3BsaWNlKGUsMSlbMF0pLHR9fSx7a2V5OlwiZXh0cmFjdE51bWJlclwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQucmVwbGFjZSgvW15cXGQuXSovZyxcIlwiKSl9fSx7a2V5OlwiZmluZEFuY2VzdG9yXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtmb3IoOyh0PXQucGFyZW50RWxlbWVudCkmJiF0LmNsYXNzTGlzdC5jb250YWlucyhlKTspO3JldHVybiB0fX0se2tleTpcInNldEVMc3R5bGVzXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYodC5zdHlsZS5rZXk9ZVtpXSl9fSx7a2V5OlwiaXNOdW1iZXJcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4haXNOYU4odCkmJnBhcnNlRmxvYXQoTnVtYmVyKHQpKT09PXQmJiFpc05hTihwYXJzZUludCh0LDEwKSl9fSx7a2V5OlwiaXNGbG9hdFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBOdW1iZXIodCk9PT10JiZ0JTEhPTB9fSx7a2V5OlwiaXNTYWZhcmlcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9fSx7a2V5OlwiaXNGaXJlZm94XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJmaXJlZm94XCIpPi0xfX0se2tleTpcImlzSUUxMVwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoLTEhPT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRVwiKXx8d2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoXCJUcmlkZW50L1wiKT4tMSlyZXR1cm4hMH19LHtrZXk6XCJpc0lFXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCxlPXQuaW5kZXhPZihcIk1TSUUgXCIpO2lmKGU+MClyZXR1cm4gcGFyc2VJbnQodC5zdWJzdHJpbmcoZSs1LHQuaW5kZXhPZihcIi5cIixlKSksMTApO2lmKHQuaW5kZXhPZihcIlRyaWRlbnQvXCIpPjApe3ZhciBpPXQuaW5kZXhPZihcInJ2OlwiKTtyZXR1cm4gcGFyc2VJbnQodC5zdWJzdHJpbmcoaSszLHQuaW5kZXhPZihcIi5cIixpKSksMTApfXZhciBhPXQuaW5kZXhPZihcIkVkZ2UvXCIpO3JldHVybiBhPjAmJnBhcnNlSW50KHQuc3Vic3RyaW5nKGErNSx0LmluZGV4T2YoXCIuXCIsYSkpLDEwKX19XSksdH0oKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53LHRoaXMuc2V0RWFzaW5nRnVuY3Rpb25zKCl9cmV0dXJuIHIodCxbe2tleTpcInNldEVhc2luZ0Z1bmN0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7aWYoIXRoaXMudy5nbG9iYWxzLmVhc2luZyl7c3dpdGNoKHRoaXMudy5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5lYXNpbmcpe2Nhc2VcImxpbmVhclwiOnQ9XCItXCI7YnJlYWs7Y2FzZVwiZWFzZWluXCI6dD1cIjxcIjticmVhaztjYXNlXCJlYXNlb3V0XCI6dD1cIj5cIjticmVhaztjYXNlXCJlYXNlaW5vdXRcIjpkZWZhdWx0OnQ9XCI8PlwiO2JyZWFrO2Nhc2VcInN3aW5nXCI6dD1mdW5jdGlvbih0KXt2YXIgZT0xLjcwMTU4O3JldHVybih0LT0xKSp0KigoZSsxKSp0K2UpKzF9O2JyZWFrO2Nhc2VcImJvdW5jZVwiOnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MS8yLjc1PzcuNTYyNSp0KnQ6dDwyLzIuNzU/Ny41NjI1Kih0LT0xLjUvMi43NSkqdCsuNzU6dDwyLjUvMi43NT83LjU2MjUqKHQtPTIuMjUvMi43NSkqdCsuOTM3NTo3LjU2MjUqKHQtPTIuNjI1LzIuNzUpKnQrLjk4NDM3NX07YnJlYWs7Y2FzZVwiZWxhc3RpY1wiOnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0hIXQ/dDpNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigodC0uMDc1KSooMipNYXRoLlBJKS8uMykrMX19dGhpcy53Lmdsb2JhbHMuZWFzaW5nPXR9fX0se2tleTpcImFuaW1hdGVMaW5lXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dC5hdHRyKGUpLmFuaW1hdGUoYSkuYXR0cihpKX19LHtrZXk6XCJhbmltYXRlTWFya2VyXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSxzLHIpe2V8fChlPTApLHQuYXR0cih7cjplLHdpZHRoOmUsaGVpZ2h0OmV9KS5hbmltYXRlKGEscykuYXR0cih7cjppLHdpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0fSkuYWZ0ZXJBbGwoKGZ1bmN0aW9uKCl7cigpfSkpfX0se2tleTpcImFuaW1hdGVDaXJjbGVcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhLHMpe3QuYXR0cih7cjplLnIsY3g6ZS5jeCxjeTplLmN5fSkuYW5pbWF0ZShhLHMpLmF0dHIoe3I6aS5yLGN4OmkuY3gsY3k6aS5jeX0pfX0se2tleTpcImFuaW1hdGVSZWN0XCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSxzKXt0LmF0dHIoZSkuYW5pbWF0ZShhKS5hdHRyKGkpLmFmdGVyQWxsKChmdW5jdGlvbigpe3JldHVybiBzKCl9KSl9fSx7a2V5OlwiYW5pbWF0ZVBhdGhzR3JhZHVhbGx5XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5lbCxpPXQucmVhbEluZGV4LGE9dC5qLHM9dC5maWxsLHI9dC5wYXRoRnJvbSxvPXQucGF0aFRvLG49dC5zcGVlZCxsPXQuZGVsYXksaD10aGlzLncsYz0wO2guY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuYW5pbWF0ZUdyYWR1YWxseS5lbmFibGVkJiYoYz1oLmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmFuaW1hdGVHcmFkdWFsbHkuZGVsYXkpLGguY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuZHluYW1pY0FuaW1hdGlvbi5lbmFibGVkJiZoLmdsb2JhbHMuZGF0YUNoYW5nZWQmJlwiYmFyXCIhPT1oLmNvbmZpZy5jaGFydC50eXBlJiYoYz0wKSx0aGlzLm1vcnBoU1ZHKGUsaSxhLFwibGluZVwiIT09aC5jb25maWcuY2hhcnQudHlwZXx8aC5nbG9iYWxzLmNvbWJvQ2hhcnRzP3M6XCJzdHJva2VcIixyLG8sbixsKmMpfX0se2tleTpcInNob3dEZWxheWVkRWxlbWVudHNcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudy5nbG9iYWxzLmRlbGF5ZWRFbGVtZW50cy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmVsLmNsYXNzTGlzdC5yZW1vdmUoXCJhcGV4Y2hhcnRzLWVsZW1lbnQtaGlkZGVuXCIpfSkpfX0se2tleTpcImFuaW1hdGlvbkNvbXBsZXRlZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudztlLmdsb2JhbHMuYW5pbWF0aW9uRW5kZWR8fChlLmdsb2JhbHMuYW5pbWF0aW9uRW5kZWQ9ITAsdGhpcy5zaG93RGVsYXllZEVsZW1lbnRzKCksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25maWcuY2hhcnQuZXZlbnRzLmFuaW1hdGlvbkVuZCYmZS5jb25maWcuY2hhcnQuZXZlbnRzLmFuaW1hdGlvbkVuZCh0aGlzLmN0eCx7ZWw6dCx3OmV9KSl9fSx7a2V5OlwibW9ycGhTVkdcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhLHMscixvLG4pe3ZhciBsPXRoaXMsaD10aGlzLnc7c3x8KHM9dC5hdHRyKFwicGF0aEZyb21cIikpLHJ8fChyPXQuYXR0cihcInBhdGhUb1wiKSk7dmFyIGM9ZnVuY3Rpb24odCl7cmV0dXJuXCJyYWRhclwiPT09aC5jb25maWcuY2hhcnQudHlwZSYmKG89MSksXCJNIDAgXCIuY29uY2F0KGguZ2xvYmFscy5ncmlkSGVpZ2h0KX07KCFzfHxzLmluZGV4T2YoXCJ1bmRlZmluZWRcIik+LTF8fHMuaW5kZXhPZihcIk5hTlwiKT4tMSkmJihzPWMoKSksKCFyfHxyLmluZGV4T2YoXCJ1bmRlZmluZWRcIik+LTF8fHIuaW5kZXhPZihcIk5hTlwiKT4tMSkmJihyPWMoKSksaC5nbG9iYWxzLnNob3VsZEFuaW1hdGV8fChvPTEpLHQucGxvdChzKS5hbmltYXRlKDEsaC5nbG9iYWxzLmVhc2luZyxuKS5wbG90KHMpLmFuaW1hdGUobyxoLmdsb2JhbHMuZWFzaW5nLG4pLnBsb3QocikuYWZ0ZXJBbGwoKGZ1bmN0aW9uKCl7eC5pc051bWJlcihpKT9pPT09aC5nbG9iYWxzLnNlcmllc1toLmdsb2JhbHMubWF4VmFsc0luQXJyYXlJbmRleF0ubGVuZ3RoLTImJmguZ2xvYmFscy5zaG91bGRBbmltYXRlJiZsLmFuaW1hdGlvbkNvbXBsZXRlZCh0KTpcIm5vbmVcIiE9PWEmJmguZ2xvYmFscy5zaG91bGRBbmltYXRlJiYoIWguZ2xvYmFscy5jb21ib0NoYXJ0cyYmZT09PWguZ2xvYmFscy5zZXJpZXMubGVuZ3RoLTF8fGguZ2xvYmFscy5jb21ib0NoYXJ0cykmJmwuYW5pbWF0aW9uQ29tcGxldGVkKHQpLGwuc2hvd0RlbGF5ZWRFbGVtZW50cygpfSkpfX1dKSx0fSgpLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLnd9cmV0dXJuIHIodCxbe2tleTpcImdldERlZmF1bHRGaWx0ZXJcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudzt0LnVuZmlsdGVyKCEwKSwobmV3IHdpbmRvdy5TVkcuRmlsdGVyKS5zaXplKFwiMTIwJVwiLFwiMTgwJVwiLFwiLTUlXCIsXCItNDAlXCIpLFwibm9uZVwiIT09aS5jb25maWcuc3RhdGVzLm5vcm1hbC5maWx0ZXI/dGhpcy5hcHBseUZpbHRlcih0LGUsaS5jb25maWcuc3RhdGVzLm5vcm1hbC5maWx0ZXIudHlwZSxpLmNvbmZpZy5zdGF0ZXMubm9ybWFsLmZpbHRlci52YWx1ZSk6aS5jb25maWcuY2hhcnQuZHJvcFNoYWRvdy5lbmFibGVkJiZ0aGlzLmRyb3BTaGFkb3codCxpLmNvbmZpZy5jaGFydC5kcm9wU2hhZG93LGUpfX0se2tleTpcImFkZE5vcm1hbEZpbHRlclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53O2kuY29uZmlnLmNoYXJ0LmRyb3BTaGFkb3cuZW5hYmxlZCYmIXQubm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJhcGV4Y2hhcnRzLW1hcmtlclwiKSYmdGhpcy5kcm9wU2hhZG93KHQsaS5jb25maWcuY2hhcnQuZHJvcFNoYWRvdyxlKX19LHtrZXk6XCJhZGRMaWdodGVuRmlsdGVyXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMscz10aGlzLncscj1pLmludGVuc2l0eTt0LnVuZmlsdGVyKCEwKTtuZXcgd2luZG93LlNWRy5GaWx0ZXI7dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3ZhciBpPXMuY29uZmlnLmNoYXJ0LmRyb3BTaGFkb3c7KGkuZW5hYmxlZD9hLmFkZFNoYWRvdyh0LGUsaSk6dCkuY29tcG9uZW50VHJhbnNmZXIoe3JnYjp7dHlwZTpcImxpbmVhclwiLHNsb3BlOjEuNSxpbnRlcmNlcHQ6cn19KX0pKSx0LmZpbHRlcmVyLm5vZGUuc2V0QXR0cmlidXRlKFwiZmlsdGVyVW5pdHNcIixcInVzZXJTcGFjZU9uVXNlXCIpLHRoaXMuX3NjYWxlRmlsdGVyU2l6ZSh0LmZpbHRlcmVyLm5vZGUpfX0se2tleTpcImFkZERhcmtlbkZpbHRlclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10aGlzLHM9dGhpcy53LHI9aS5pbnRlbnNpdHk7dC51bmZpbHRlcighMCk7bmV3IHdpbmRvdy5TVkcuRmlsdGVyO3QuZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgaT1zLmNvbmZpZy5jaGFydC5kcm9wU2hhZG93OyhpLmVuYWJsZWQ/YS5hZGRTaGFkb3codCxlLGkpOnQpLmNvbXBvbmVudFRyYW5zZmVyKHtyZ2I6e3R5cGU6XCJsaW5lYXJcIixzbG9wZTpyfX0pfSkpLHQuZmlsdGVyZXIubm9kZS5zZXRBdHRyaWJ1dGUoXCJmaWx0ZXJVbml0c1wiLFwidXNlclNwYWNlT25Vc2VcIiksdGhpcy5fc2NhbGVGaWx0ZXJTaXplKHQuZmlsdGVyZXIubm9kZSl9fSx7a2V5OlwiYXBwbHlGaWx0ZXJcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOi41O3N3aXRjaChpKXtjYXNlXCJub25lXCI6dGhpcy5hZGROb3JtYWxGaWx0ZXIodCxlKTticmVhaztjYXNlXCJsaWdodGVuXCI6dGhpcy5hZGRMaWdodGVuRmlsdGVyKHQsZSx7aW50ZW5zaXR5OmF9KTticmVhaztjYXNlXCJkYXJrZW5cIjp0aGlzLmFkZERhcmtlbkZpbHRlcih0LGUse2ludGVuc2l0eTphfSl9fX0se2tleTpcImFkZFNoYWRvd1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT1pLmJsdXIscz1pLnRvcCxyPWkubGVmdCxvPWkuY29sb3Isbj1pLm9wYWNpdHksbD10LmZsb29kKEFycmF5LmlzQXJyYXkobyk/b1tlXTpvLG4pLmNvbXBvc2l0ZSh0LnNvdXJjZUFscGhhLFwiaW5cIikub2Zmc2V0KHIscykuZ2F1c3NpYW5CbHVyKGEpLm1lcmdlKHQuc291cmNlKTtyZXR1cm4gdC5ibGVuZCh0LnNvdXJjZSxsKX19LHtrZXk6XCJkcm9wU2hhZG93XCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxhPWUudG9wLHM9ZS5sZWZ0LHI9ZS5ibHVyLG89ZS5jb2xvcixuPWUub3BhY2l0eSxsPWUubm9Vc2VyU3BhY2VPblVzZSxoPXRoaXMudztyZXR1cm4gdC51bmZpbHRlcighMCkseC5pc0lFKCkmJlwicmFkaWFsQmFyXCI9PT1oLmNvbmZpZy5jaGFydC50eXBlfHwobz1BcnJheS5pc0FycmF5KG8pP29baV06byx0LmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGU9bnVsbDtlPXguaXNTYWZhcmkoKXx8eC5pc0ZpcmVmb3goKXx8eC5pc0lFKCk/dC5mbG9vZChvLG4pLmNvbXBvc2l0ZSh0LnNvdXJjZUFscGhhLFwiaW5cIikub2Zmc2V0KHMsYSkuZ2F1c3NpYW5CbHVyKHIpOnQuZmxvb2QobyxuKS5jb21wb3NpdGUodC5zb3VyY2VBbHBoYSxcImluXCIpLm9mZnNldChzLGEpLmdhdXNzaWFuQmx1cihyKS5tZXJnZSh0LnNvdXJjZSksdC5ibGVuZCh0LnNvdXJjZSxlKX0pKSxsfHx0LmZpbHRlcmVyLm5vZGUuc2V0QXR0cmlidXRlKFwiZmlsdGVyVW5pdHNcIixcInVzZXJTcGFjZU9uVXNlXCIpLHRoaXMuX3NjYWxlRmlsdGVyU2l6ZSh0LmZpbHRlcmVyLm5vZGUpKSx0fX0se2tleTpcInNldFNlbGVjdGlvbkZpbHRlclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10aGlzLnc7aWYodm9pZCAwIT09YS5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50c1tlXSYmYS5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50c1tlXS5pbmRleE9mKGkpPi0xKXt0Lm5vZGUuc2V0QXR0cmlidXRlKFwic2VsZWN0ZWRcIiwhMCk7dmFyIHM9YS5jb25maWcuc3RhdGVzLmFjdGl2ZS5maWx0ZXI7XCJub25lXCIhPT1zJiZ0aGlzLmFwcGx5RmlsdGVyKHQsZSxzLnR5cGUscy52YWx1ZSl9fX0se2tleTpcIl9zY2FsZUZpbHRlclNpemVcIix2YWx1ZTpmdW5jdGlvbih0KXshZnVuY3Rpb24oZSl7Zm9yKHZhciBpIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShpKSYmdC5zZXRBdHRyaWJ1dGUoaSxlW2ldKX0oe3dpZHRoOlwiMjAwJVwiLGhlaWdodDpcIjIwMCVcIix4OlwiLTUwJVwiLHk6XCItNTAlXCJ9KX19XSksdH0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53fXJldHVybiByKHQsW3trZXk6XCJkcmF3TGluZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBzPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTpcIiNhOGE4YThcIixyPWFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTowLG89YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOm51bGwsbj1hcmd1bWVudHMubGVuZ3RoPjcmJnZvaWQgMCE9PWFyZ3VtZW50c1s3XT9hcmd1bWVudHNbN106XCJidXR0XCIsbD10aGlzLncsaD1sLmdsb2JhbHMuZG9tLlBhcGVyLmxpbmUoKS5hdHRyKHt4MTp0LHkxOmUseDI6aSx5MjphLHN0cm9rZTpzLFwic3Ryb2tlLWRhc2hhcnJheVwiOnIsXCJzdHJva2Utd2lkdGhcIjpvLFwic3Ryb2tlLWxpbmVjYXBcIjpufSk7cmV0dXJuIGh9fSx7a2V5OlwiZHJhd1JlY3RcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLHM9YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOjAscj1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06XCIjZmVmZWZlXCIsbz1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06MSxuPWFyZ3VtZW50cy5sZW5ndGg+NyYmdm9pZCAwIT09YXJndW1lbnRzWzddP2FyZ3VtZW50c1s3XTpudWxsLGw9YXJndW1lbnRzLmxlbmd0aD44JiZ2b2lkIDAhPT1hcmd1bWVudHNbOF0/YXJndW1lbnRzWzhdOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjkmJnZvaWQgMCE9PWFyZ3VtZW50c1s5XT9hcmd1bWVudHNbOV06MCxjPXRoaXMudyxkPWMuZ2xvYmFscy5kb20uUGFwZXIucmVjdCgpO3JldHVybiBkLmF0dHIoe3g6dCx5OmUsd2lkdGg6aT4wP2k6MCxoZWlnaHQ6YT4wP2E6MCxyeDpzLHJ5OnMsb3BhY2l0eTpvLFwic3Ryb2tlLXdpZHRoXCI6bnVsbCE9PW4/bjowLHN0cm9rZTpudWxsIT09bD9sOlwibm9uZVwiLFwic3Ryb2tlLWRhc2hhcnJheVwiOmh9KSxkLm5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLHIpLGR9fSx7a2V5OlwiZHJhd1BvbHlnb25cIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06XCIjZTFlMWUxXCIsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpcIm5vbmVcIixzPXRoaXMudyxyPXMuZ2xvYmFscy5kb20uUGFwZXIucG9seWdvbih0KS5hdHRyKHtmaWxsOmEsc3Ryb2tlOmUsXCJzdHJva2Utd2lkdGhcIjppfSk7cmV0dXJuIHJ9fSx7a2V5OlwiZHJhd0NpcmNsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLGk9dGhpcy53O3Q8MCYmKHQ9MCk7dmFyIGE9aS5nbG9iYWxzLmRvbS5QYXBlci5jaXJjbGUoMip0KTtyZXR1cm4gbnVsbCE9PWUmJmEuYXR0cihlKSxhfX0se2tleTpcImRyYXdQYXRoXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5kLGk9dm9pZCAwPT09ZT9cIlwiOmUsYT10LnN0cm9rZSxzPXZvaWQgMD09PWE/XCIjYThhOGE4XCI6YSxyPXQuc3Ryb2tlV2lkdGgsbz12b2lkIDA9PT1yPzE6cixuPXQuZmlsbCxsPXQuZmlsbE9wYWNpdHksaD12b2lkIDA9PT1sPzE6bCxjPXQuc3Ryb2tlT3BhY2l0eSxkPXZvaWQgMD09PWM/MTpjLGc9dC5jbGFzc2VzLHU9dC5zdHJva2VMaW5lY2FwLGY9dm9pZCAwPT09dT9udWxsOnUscD10LnN0cm9rZURhc2hBcnJheSx4PXZvaWQgMD09PXA/MDpwLGI9dGhpcy53O3JldHVybiBudWxsPT09ZiYmKGY9Yi5jb25maWcuc3Ryb2tlLmxpbmVDYXApLChpLmluZGV4T2YoXCJ1bmRlZmluZWRcIik+LTF8fGkuaW5kZXhPZihcIk5hTlwiKT4tMSkmJihpPVwiTSAwIFwiLmNvbmNhdChiLmdsb2JhbHMuZ3JpZEhlaWdodCkpLGIuZ2xvYmFscy5kb20uUGFwZXIucGF0aChpKS5hdHRyKHtmaWxsOm4sXCJmaWxsLW9wYWNpdHlcIjpoLHN0cm9rZTpzLFwic3Ryb2tlLW9wYWNpdHlcIjpkLFwic3Ryb2tlLWxpbmVjYXBcIjpmLFwic3Ryb2tlLXdpZHRoXCI6byxcInN0cm9rZS1kYXNoYXJyYXlcIjp4LGNsYXNzOmd9KX19LHtrZXk6XCJncm91cFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsZT10aGlzLncsaT1lLmdsb2JhbHMuZG9tLlBhcGVyLmdyb3VwKCk7cmV0dXJuIG51bGwhPT10JiZpLmF0dHIodCksaX19LHtrZXk6XCJtb3ZlXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1bXCJNXCIsdCxlXS5qb2luKFwiIFwiKTtyZXR1cm4gaX19LHtrZXk6XCJsaW5lXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxhPW51bGw7cmV0dXJuIG51bGw9PT1pP2E9W1wiTFwiLHQsZV0uam9pbihcIiBcIik6XCJIXCI9PT1pP2E9W1wiSFwiLHRdLmpvaW4oXCIgXCIpOlwiVlwiPT09aSYmKGE9W1wiVlwiLGVdLmpvaW4oXCIgXCIpKSxhfX0se2tleTpcImN1cnZlXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSxzLHIpe3ZhciBvPVtcIkNcIix0LGUsaSxhLHMscl0uam9pbihcIiBcIik7cmV0dXJuIG99fSx7a2V5OlwicXVhZHJhdGljQ3VydmVcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhKXtyZXR1cm5bXCJRXCIsdCxlLGksYV0uam9pbihcIiBcIil9fSx7a2V5OlwiYXJjXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSxzLHIsbyl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD43JiZ2b2lkIDAhPT1hcmd1bWVudHNbN10mJmFyZ3VtZW50c1s3XSxsPVwiQVwiO24mJihsPVwiYVwiKTt2YXIgaD1bbCx0LGUsaSxhLHMscixvXS5qb2luKFwiIFwiKTtyZXR1cm4gaH19LHtrZXk6XCJyZW5kZXJQYXRoc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBpLGE9dC5qLHM9dC5yZWFsSW5kZXgscj10LnBhdGhGcm9tLG89dC5wYXRoVG8sbj10LnN0cm9rZSxsPXQuc3Ryb2tlV2lkdGgsaD10LnN0cm9rZUxpbmVjYXAsYz10LmZpbGwsZD10LmFuaW1hdGlvbkRlbGF5LGc9dC5pbml0aWFsU3BlZWQsdT10LmRhdGFDaGFuZ2VTcGVlZCxmPXQuY2xhc3NOYW1lLHA9dC5zaG91bGRDbGlwVG9HcmlkLHg9dm9pZCAwPT09cHx8cCxtPXQuYmluZEV2ZW50c09uUGF0aHMseT12b2lkIDA9PT1tfHxtLHc9dC5kcmF3U2hhZG93LGs9dm9pZCAwPT09d3x8dyxBPXRoaXMudyxTPW5ldyB2KHRoaXMuY3R4KSxDPW5ldyBiKHRoaXMuY3R4KSxMPXRoaXMudy5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5lbmFibGVkLFA9TCYmdGhpcy53LmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmR5bmFtaWNBbmltYXRpb24uZW5hYmxlZCxUPSEhKEwmJiFBLmdsb2JhbHMucmVzaXplZHx8UCYmQS5nbG9iYWxzLmRhdGFDaGFuZ2VkJiZBLmdsb2JhbHMuc2hvdWxkQW5pbWF0ZSk7VD9pPXI6KGk9byxBLmdsb2JhbHMuYW5pbWF0aW9uRW5kZWQ9ITApO3ZhciBNPUEuY29uZmlnLnN0cm9rZS5kYXNoQXJyYXksST0wO0k9QXJyYXkuaXNBcnJheShNKT9NW3NdOkEuY29uZmlnLnN0cm9rZS5kYXNoQXJyYXk7dmFyIFg9dGhpcy5kcmF3UGF0aCh7ZDppLHN0cm9rZTpuLHN0cm9rZVdpZHRoOmwsZmlsbDpjLGZpbGxPcGFjaXR5OjEsY2xhc3NlczpmLHN0cm9rZUxpbmVjYXA6aCxzdHJva2VEYXNoQXJyYXk6SX0pO2lmKFguYXR0cihcImluZGV4XCIscykseCYmWC5hdHRyKHtcImNsaXAtcGF0aFwiOlwidXJsKCNncmlkUmVjdE1hc2tcIi5jb25jYXQoQS5nbG9iYWxzLmN1aWQsXCIpXCIpfSksXCJub25lXCIhPT1BLmNvbmZpZy5zdGF0ZXMubm9ybWFsLmZpbHRlci50eXBlKVMuZ2V0RGVmYXVsdEZpbHRlcihYLHMpO2Vsc2UgaWYoQS5jb25maWcuY2hhcnQuZHJvcFNoYWRvdy5lbmFibGVkJiZrJiYoIUEuY29uZmlnLmNoYXJ0LmRyb3BTaGFkb3cuZW5hYmxlZE9uU2VyaWVzfHxBLmNvbmZpZy5jaGFydC5kcm9wU2hhZG93LmVuYWJsZWRPblNlcmllcyYmLTEhPT1BLmNvbmZpZy5jaGFydC5kcm9wU2hhZG93LmVuYWJsZWRPblNlcmllcy5pbmRleE9mKHMpKSl7dmFyIHo9QS5jb25maWcuY2hhcnQuZHJvcFNoYWRvdztTLmRyb3BTaGFkb3coWCx6LHMpfXkmJihYLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIix0aGlzLnBhdGhNb3VzZUVudGVyLmJpbmQodGhpcyxYKSksWC5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsdGhpcy5wYXRoTW91c2VMZWF2ZS5iaW5kKHRoaXMsWCkpLFgubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsdGhpcy5wYXRoTW91c2VEb3duLmJpbmQodGhpcyxYKSkpLFguYXR0cih7cGF0aFRvOm8scGF0aEZyb206cn0pO3ZhciBFPXtlbDpYLGo6YSxyZWFsSW5kZXg6cyxwYXRoRnJvbTpyLHBhdGhUbzpvLGZpbGw6YyxzdHJva2VXaWR0aDpsLGRlbGF5OmR9O3JldHVybiFMfHxBLmdsb2JhbHMucmVzaXplZHx8QS5nbG9iYWxzLmRhdGFDaGFuZ2VkPyFBLmdsb2JhbHMucmVzaXplZCYmQS5nbG9iYWxzLmRhdGFDaGFuZ2VkfHxDLnNob3dEZWxheWVkRWxlbWVudHMoKTpDLmFuaW1hdGVQYXRoc0dyYWR1YWxseShlKGUoe30sRSkse30se3NwZWVkOmd9KSksQS5nbG9iYWxzLmRhdGFDaGFuZ2VkJiZQJiZUJiZDLmFuaW1hdGVQYXRoc0dyYWR1YWxseShlKGUoe30sRSkse30se3NwZWVkOnV9KSksWH19LHtrZXk6XCJkcmF3UGF0dGVyblwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106XCIjYThhOGE4XCIscz1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06MCxyPXRoaXMudyxvPXIuZ2xvYmFscy5kb20uUGFwZXIucGF0dGVybihlLGksKGZ1bmN0aW9uKHIpe1wiaG9yaXpvbnRhbExpbmVzXCI9PT10P3IubGluZSgwLDAsaSwwKS5zdHJva2Uoe2NvbG9yOmEsd2lkdGg6cysxfSk6XCJ2ZXJ0aWNhbExpbmVzXCI9PT10P3IubGluZSgwLDAsMCxlKS5zdHJva2Uoe2NvbG9yOmEsd2lkdGg6cysxfSk6XCJzbGFudGVkTGluZXNcIj09PXQ/ci5saW5lKDAsMCxlLGkpLnN0cm9rZSh7Y29sb3I6YSx3aWR0aDpzfSk6XCJzcXVhcmVzXCI9PT10P3IucmVjdChlLGkpLmZpbGwoXCJub25lXCIpLnN0cm9rZSh7Y29sb3I6YSx3aWR0aDpzfSk6XCJjaXJjbGVzXCI9PT10JiZyLmNpcmNsZShlKS5maWxsKFwibm9uZVwiKS5zdHJva2Uoe2NvbG9yOmEsd2lkdGg6c30pfSkpO3JldHVybiBvfX0se2tleTpcImRyYXdHcmFkaWVudFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEscyl7dmFyIHIsbz1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsLGw9YXJndW1lbnRzLmxlbmd0aD43JiZ2b2lkIDAhPT1hcmd1bWVudHNbN10/YXJndW1lbnRzWzddOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjgmJnZvaWQgMCE9PWFyZ3VtZW50c1s4XT9hcmd1bWVudHNbOF06MCxjPXRoaXMudztlLmxlbmd0aDw5JiYwPT09ZS5pbmRleE9mKFwiI1wiKSYmKGU9eC5oZXhUb1JnYmEoZSxhKSksaS5sZW5ndGg8OSYmMD09PWkuaW5kZXhPZihcIiNcIikmJihpPXguaGV4VG9SZ2JhKGkscykpO3ZhciBkPTAsZz0xLHU9MSxmPW51bGw7bnVsbCE9PW4mJihkPXZvaWQgMCE9PW5bMF0/blswXS8xMDA6MCxnPXZvaWQgMCE9PW5bMV0/blsxXS8xMDA6MSx1PXZvaWQgMCE9PW5bMl0/blsyXS8xMDA6MSxmPXZvaWQgMCE9PW5bM10/blszXS8xMDA6bnVsbCk7dmFyIHA9IShcImRvbnV0XCIhPT1jLmNvbmZpZy5jaGFydC50eXBlJiZcInBpZVwiIT09Yy5jb25maWcuY2hhcnQudHlwZSYmXCJwb2xhckFyZWFcIiE9PWMuY29uZmlnLmNoYXJ0LnR5cGUmJlwiYnViYmxlXCIhPT1jLmNvbmZpZy5jaGFydC50eXBlKTtpZihyPW51bGw9PT1sfHwwPT09bC5sZW5ndGg/Yy5nbG9iYWxzLmRvbS5QYXBlci5ncmFkaWVudChwP1wicmFkaWFsXCI6XCJsaW5lYXJcIiwoZnVuY3Rpb24odCl7dC5hdChkLGUsYSksdC5hdChnLGkscyksdC5hdCh1LGkscyksbnVsbCE9PWYmJnQuYXQoZixlLGEpfSkpOmMuZ2xvYmFscy5kb20uUGFwZXIuZ3JhZGllbnQocD9cInJhZGlhbFwiOlwibGluZWFyXCIsKGZ1bmN0aW9uKHQpeyhBcnJheS5pc0FycmF5KGxbaF0pP2xbaF06bCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5hdChlLm9mZnNldC8xMDAsZS5jb2xvcixlLm9wYWNpdHkpfSkpfSkpLHApe3ZhciBiPWMuZ2xvYmFscy5ncmlkV2lkdGgvMix2PWMuZ2xvYmFscy5ncmlkSGVpZ2h0LzI7XCJidWJibGVcIiE9PWMuY29uZmlnLmNoYXJ0LnR5cGU/ci5hdHRyKHtncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjeDpiLGN5OnYscjpvfSk6ci5hdHRyKHtjeDouNSxjeTouNSxyOi44LGZ4Oi4yLGZ5Oi4yfSl9ZWxzZVwidmVydGljYWxcIj09PXQ/ci5mcm9tKDAsMCkudG8oMCwxKTpcImRpYWdvbmFsXCI9PT10P3IuZnJvbSgwLDApLnRvKDEsMSk6XCJob3Jpem9udGFsXCI9PT10P3IuZnJvbSgwLDEpLnRvKDEsMSk6XCJkaWFnb25hbDJcIj09PXQmJnIuZnJvbSgxLDApLnRvKDAsMSk7cmV0dXJuIHJ9fSx7a2V5OlwiZ2V0VGV4dEJhc2VkT25NYXhXaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudGV4dCxpPXQubWF4V2lkdGgsYT10LmZvbnRTaXplLHM9dC5mb250RmFtaWx5LHI9dGhpcy5nZXRUZXh0UmVjdHMoZSxhLHMpLG89ci53aWR0aC9lLmxlbmd0aCxuPU1hdGguZmxvb3IoaS9vKTtyZXR1cm4gaTxyLndpZHRoP2Uuc2xpY2UoMCxuLTMpK1wiLi4uXCI6ZX19LHtrZXk6XCJkcmF3VGV4dFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMsYT10Lngscz10Lnkscj10LnRleHQsbz10LnRleHRBbmNob3Isbj10LmZvbnRTaXplLGw9dC5mb250RmFtaWx5LGg9dC5mb250V2VpZ2h0LGM9dC5mb3JlQ29sb3IsZD10Lm9wYWNpdHksZz10Lm1heFdpZHRoLHU9dC5jc3NDbGFzcyxmPXZvaWQgMD09PXU/XCJcIjp1LHA9dC5pc1BsYWluVGV4dCx4PXZvaWQgMD09PXB8fHAsYj10aGlzLnc7dm9pZCAwPT09ciYmKHI9XCJcIik7dmFyIHY9cjtvfHwobz1cInN0YXJ0XCIpLGMmJmMubGVuZ3RofHwoYz1iLmNvbmZpZy5jaGFydC5mb3JlQ29sb3IpLGw9bHx8Yi5jb25maWcuY2hhcnQuZm9udEZhbWlseSxoPWh8fFwicmVndWxhclwiO3ZhciBtLHk9e21heFdpZHRoOmcsZm9udFNpemU6bj1ufHxcIjExcHhcIixmb250RmFtaWx5Omx9O3JldHVybiBBcnJheS5pc0FycmF5KHIpP209Yi5nbG9iYWxzLmRvbS5QYXBlci50ZXh0KChmdW5jdGlvbih0KXtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl2PXJbYV0sZyYmKHY9aS5nZXRUZXh0QmFzZWRPbk1heFdpZHRoKGUoe3RleHQ6clthXX0seSkpKSwwPT09YT90LnRzcGFuKHYpOnQudHNwYW4odikubmV3TGluZSgpfSkpOihnJiYodj10aGlzLmdldFRleHRCYXNlZE9uTWF4V2lkdGgoZSh7dGV4dDpyfSx5KSkpLG09eD9iLmdsb2JhbHMuZG9tLlBhcGVyLnBsYWluKHIpOmIuZ2xvYmFscy5kb20uUGFwZXIudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudHNwYW4odil9KSkpLG0uYXR0cih7eDphLHk6cyxcInRleHQtYW5jaG9yXCI6byxcImRvbWluYW50LWJhc2VsaW5lXCI6XCJhdXRvXCIsXCJmb250LXNpemVcIjpuLFwiZm9udC1mYW1pbHlcIjpsLFwiZm9udC13ZWlnaHRcIjpoLGZpbGw6YyxjbGFzczpcImFwZXhjaGFydHMtdGV4dCBcIitmfSksbS5ub2RlLnN0eWxlLmZvbnRGYW1pbHk9bCxtLm5vZGUuc3R5bGUub3BhY2l0eT1kLG19fSx7a2V5OlwiZHJhd01hcmtlclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt0PXR8fDA7dmFyIGE9aS5wU2l6ZXx8MCxzPW51bGw7aWYoXCJzcXVhcmVcIj09PWkuc2hhcGV8fFwicmVjdFwiPT09aS5zaGFwZSl7dmFyIHI9dm9pZCAwPT09aS5wUmFkaXVzP2EvMjppLnBSYWRpdXM7bnVsbCE9PWUmJmF8fChhPTAscj0wKTt2YXIgbz0xLjIqYStyLG49dGhpcy5kcmF3UmVjdChvLG8sbyxvLHIpO24uYXR0cih7eDp0LW8vMix5OmUtby8yLGN4OnQsY3k6ZSxjbGFzczppLmNsYXNzP2kuY2xhc3M6XCJcIixmaWxsOmkucG9pbnRGaWxsQ29sb3IsXCJmaWxsLW9wYWNpdHlcIjppLnBvaW50RmlsbE9wYWNpdHk/aS5wb2ludEZpbGxPcGFjaXR5OjEsc3Ryb2tlOmkucG9pbnRTdHJva2VDb2xvcixcInN0cm9rZS13aWR0aFwiOmkucG9pbnRTdHJva2VXaWR0aD9pLnBvaW50U3Ryb2tlV2lkdGg6MCxcInN0cm9rZS1vcGFjaXR5XCI6aS5wb2ludFN0cm9rZU9wYWNpdHk/aS5wb2ludFN0cm9rZU9wYWNpdHk6MX0pLHM9bn1lbHNlXCJjaXJjbGVcIiE9PWkuc2hhcGUmJmkuc2hhcGV8fCh4LmlzTnVtYmVyKGUpfHwoYT0wLGU9MCkscz10aGlzLmRyYXdDaXJjbGUoYSx7Y3g6dCxjeTplLGNsYXNzOmkuY2xhc3M/aS5jbGFzczpcIlwiLHN0cm9rZTppLnBvaW50U3Ryb2tlQ29sb3IsZmlsbDppLnBvaW50RmlsbENvbG9yLFwiZmlsbC1vcGFjaXR5XCI6aS5wb2ludEZpbGxPcGFjaXR5P2kucG9pbnRGaWxsT3BhY2l0eToxLFwic3Ryb2tlLXdpZHRoXCI6aS5wb2ludFN0cm9rZVdpZHRoP2kucG9pbnRTdHJva2VXaWR0aDowLFwic3Ryb2tlLW9wYWNpdHlcIjppLnBvaW50U3Ryb2tlT3BhY2l0eT9pLnBvaW50U3Ryb2tlT3BhY2l0eToxfSkpO3JldHVybiBzfX0se2tleTpcInBhdGhNb3VzZUVudGVyXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLncsYT1uZXcgdih0aGlzLmN0eCkscz1wYXJzZUludCh0Lm5vZGUuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIiksMTApLHI9cGFyc2VJbnQodC5ub2RlLmdldEF0dHJpYnV0ZShcImpcIiksMTApO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuY29uZmlnLmNoYXJ0LmV2ZW50cy5kYXRhUG9pbnRNb3VzZUVudGVyJiZpLmNvbmZpZy5jaGFydC5ldmVudHMuZGF0YVBvaW50TW91c2VFbnRlcihlLHRoaXMuY3R4LHtzZXJpZXNJbmRleDpzLGRhdGFQb2ludEluZGV4OnIsdzppfSksdGhpcy5jdHguZXZlbnRzLmZpcmVFdmVudChcImRhdGFQb2ludE1vdXNlRW50ZXJcIixbZSx0aGlzLmN0eCx7c2VyaWVzSW5kZXg6cyxkYXRhUG9pbnRJbmRleDpyLHc6aX1dKSwoXCJub25lXCI9PT1pLmNvbmZpZy5zdGF0ZXMuYWN0aXZlLmZpbHRlci50eXBlfHxcInRydWVcIiE9PXQubm9kZS5nZXRBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiKSkmJlwibm9uZVwiIT09aS5jb25maWcuc3RhdGVzLmhvdmVyLmZpbHRlci50eXBlJiYhaS5nbG9iYWxzLmlzVG91Y2hEZXZpY2Upe3ZhciBvPWkuY29uZmlnLnN0YXRlcy5ob3Zlci5maWx0ZXI7YS5hcHBseUZpbHRlcih0LHMsby50eXBlLG8udmFsdWUpfX19LHtrZXk6XCJwYXRoTW91c2VMZWF2ZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53LGE9bmV3IHYodGhpcy5jdHgpLHM9cGFyc2VJbnQodC5ub2RlLmdldEF0dHJpYnV0ZShcImluZGV4XCIpLDEwKSxyPXBhcnNlSW50KHQubm9kZS5nZXRBdHRyaWJ1dGUoXCJqXCIpLDEwKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmNvbmZpZy5jaGFydC5ldmVudHMuZGF0YVBvaW50TW91c2VMZWF2ZSYmaS5jb25maWcuY2hhcnQuZXZlbnRzLmRhdGFQb2ludE1vdXNlTGVhdmUoZSx0aGlzLmN0eCx7c2VyaWVzSW5kZXg6cyxkYXRhUG9pbnRJbmRleDpyLHc6aX0pLHRoaXMuY3R4LmV2ZW50cy5maXJlRXZlbnQoXCJkYXRhUG9pbnRNb3VzZUxlYXZlXCIsW2UsdGhpcy5jdHgse3Nlcmllc0luZGV4OnMsZGF0YVBvaW50SW5kZXg6cix3Oml9XSksXCJub25lXCIhPT1pLmNvbmZpZy5zdGF0ZXMuYWN0aXZlLmZpbHRlci50eXBlJiZcInRydWVcIj09PXQubm9kZS5nZXRBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiKXx8XCJub25lXCIhPT1pLmNvbmZpZy5zdGF0ZXMuaG92ZXIuZmlsdGVyLnR5cGUmJmEuZ2V0RGVmYXVsdEZpbHRlcih0LHMpfX0se2tleTpcInBhdGhNb3VzZURvd25cIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudyxhPW5ldyB2KHRoaXMuY3R4KSxzPXBhcnNlSW50KHQubm9kZS5nZXRBdHRyaWJ1dGUoXCJpbmRleFwiKSwxMCkscj1wYXJzZUludCh0Lm5vZGUuZ2V0QXR0cmlidXRlKFwialwiKSwxMCksbz1cImZhbHNlXCI7aWYoXCJ0cnVlXCI9PT10Lm5vZGUuZ2V0QXR0cmlidXRlKFwic2VsZWN0ZWRcIikpe2lmKHQubm9kZS5zZXRBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiLFwiZmFsc2VcIiksaS5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50c1tzXS5pbmRleE9mKHIpPi0xKXt2YXIgbj1pLmdsb2JhbHMuc2VsZWN0ZWREYXRhUG9pbnRzW3NdLmluZGV4T2Yocik7aS5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50c1tzXS5zcGxpY2UobiwxKX19ZWxzZXtpZighaS5jb25maWcuc3RhdGVzLmFjdGl2ZS5hbGxvd011bHRpcGxlRGF0YVBvaW50c1NlbGVjdGlvbiYmaS5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50cy5sZW5ndGg+MCl7aS5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50cz1bXTt2YXIgbD1pLmdsb2JhbHMuZG9tLlBhcGVyLnNlbGVjdChcIi5hcGV4Y2hhcnRzLXNlcmllcyBwYXRoXCIpLm1lbWJlcnMsaD1pLmdsb2JhbHMuZG9tLlBhcGVyLnNlbGVjdChcIi5hcGV4Y2hhcnRzLXNlcmllcyBjaXJjbGUsIC5hcGV4Y2hhcnRzLXNlcmllcyByZWN0XCIpLm1lbWJlcnMsYz1mdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQsKGZ1bmN0aW9uKHQpe3Qubm9kZS5zZXRBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiLFwiZmFsc2VcIiksYS5nZXREZWZhdWx0RmlsdGVyKHQscyl9KSl9O2MobCksYyhoKX10Lm5vZGUuc2V0QXR0cmlidXRlKFwic2VsZWN0ZWRcIixcInRydWVcIiksbz1cInRydWVcIix2b2lkIDA9PT1pLmdsb2JhbHMuc2VsZWN0ZWREYXRhUG9pbnRzW3NdJiYoaS5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50c1tzXT1bXSksaS5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50c1tzXS5wdXNoKHIpfWlmKFwidHJ1ZVwiPT09byl7dmFyIGQ9aS5jb25maWcuc3RhdGVzLmFjdGl2ZS5maWx0ZXI7aWYoXCJub25lXCIhPT1kKWEuYXBwbHlGaWx0ZXIodCxzLGQudHlwZSxkLnZhbHVlKTtlbHNlIGlmKFwibm9uZVwiIT09aS5jb25maWcuc3RhdGVzLmhvdmVyLmZpbHRlciYmIWkuZ2xvYmFscy5pc1RvdWNoRGV2aWNlKXt2YXIgZz1pLmNvbmZpZy5zdGF0ZXMuaG92ZXIuZmlsdGVyO2EuYXBwbHlGaWx0ZXIodCxzLGcudHlwZSxnLnZhbHVlKX19ZWxzZSBpZihcIm5vbmVcIiE9PWkuY29uZmlnLnN0YXRlcy5hY3RpdmUuZmlsdGVyLnR5cGUpaWYoXCJub25lXCI9PT1pLmNvbmZpZy5zdGF0ZXMuaG92ZXIuZmlsdGVyLnR5cGV8fGkuZ2xvYmFscy5pc1RvdWNoRGV2aWNlKWEuZ2V0RGVmYXVsdEZpbHRlcih0LHMpO2Vsc2V7Zz1pLmNvbmZpZy5zdGF0ZXMuaG92ZXIuZmlsdGVyO2EuYXBwbHlGaWx0ZXIodCxzLGcudHlwZSxnLnZhbHVlKX1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmNvbmZpZy5jaGFydC5ldmVudHMuZGF0YVBvaW50U2VsZWN0aW9uJiZpLmNvbmZpZy5jaGFydC5ldmVudHMuZGF0YVBvaW50U2VsZWN0aW9uKGUsdGhpcy5jdHgse3NlbGVjdGVkRGF0YVBvaW50czppLmdsb2JhbHMuc2VsZWN0ZWREYXRhUG9pbnRzLHNlcmllc0luZGV4OnMsZGF0YVBvaW50SW5kZXg6cix3Oml9KSxlJiZ0aGlzLmN0eC5ldmVudHMuZmlyZUV2ZW50KFwiZGF0YVBvaW50U2VsZWN0aW9uXCIsW2UsdGhpcy5jdHgse3NlbGVjdGVkRGF0YVBvaW50czppLmdsb2JhbHMuc2VsZWN0ZWREYXRhUG9pbnRzLHNlcmllc0luZGV4OnMsZGF0YVBvaW50SW5kZXg6cix3Oml9XSl9fSx7a2V5Olwicm90YXRlQXJvdW5kQ2VudGVyXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0QkJveCYmKGU9dC5nZXRCQm94KCkpLHt4OmUueCtlLndpZHRoLzIseTplLnkrZS5oZWlnaHQvMn19fSx7a2V5OlwiZ2V0VGV4dFJlY3RzXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxyPXRoaXMudyxvPXRoaXMuZHJhd1RleHQoe3g6LTIwMCx5Oi0yMDAsdGV4dDp0LHRleHRBbmNob3I6XCJzdGFydFwiLGZvbnRTaXplOmUsZm9udEZhbWlseTppLGZvcmVDb2xvcjpcIiNmZmZcIixvcGFjaXR5OjB9KTthJiZvLmF0dHIoXCJ0cmFuc2Zvcm1cIixhKSxyLmdsb2JhbHMuZG9tLlBhcGVyLmFkZChvKTt2YXIgbj1vLmJib3goKTtyZXR1cm4gc3x8KG49by5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxvLnJlbW92ZSgpLHt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodH19fSx7a2V5OlwicGxhY2VUZXh0V2l0aEVsbGlwc2lzXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoJiYodC50ZXh0Q29udGVudD1lLGUubGVuZ3RoPjAmJnQuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+PWkvMS4xKSl7Zm9yKHZhciBhPWUubGVuZ3RoLTM7YT4wO2EtPTMpaWYodC5nZXRTdWJTdHJpbmdMZW5ndGgoMCxhKTw9aS8xLjEpcmV0dXJuIHZvaWQodC50ZXh0Q29udGVudD1lLnN1YnN0cmluZygwLGEpK1wiLi4uXCIpO3QudGV4dENvbnRlbnQ9XCIuXCJ9fX1dLFt7a2V5Olwic2V0QXR0cnNcIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiBlKWUuaGFzT3duUHJvcGVydHkoaSkmJnQuc2V0QXR0cmlidXRlKGksZVtpXSl9fV0pLHR9KCkseT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUud31yZXR1cm4gcih0LFt7a2V5OlwiZ2V0U3RhY2tlZFNlcmllc1RvdGFsc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLGU9dGhpcy53LGk9W107aWYoMD09PWUuZ2xvYmFscy5zZXJpZXMubGVuZ3RoKXJldHVybiBpO2Zvcih2YXIgYT0wO2E8ZS5nbG9iYWxzLnNlcmllc1tlLmdsb2JhbHMubWF4VmFsc0luQXJyYXlJbmRleF0ubGVuZ3RoO2ErKyl7Zm9yKHZhciBzPTAscj0wO3I8ZS5nbG9iYWxzLnNlcmllcy5sZW5ndGg7cisrKXZvaWQgMCE9PWUuZ2xvYmFscy5zZXJpZXNbcl1bYV0mJi0xPT09dC5pbmRleE9mKHIpJiYocys9ZS5nbG9iYWxzLnNlcmllc1tyXVthXSk7aS5wdXNoKHMpfXJldHVybiBpfX0se2tleTpcImdldFNlcmllc1RvdGFsQnlJbmRleFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIG51bGw9PT10P3RoaXMudy5jb25maWcuc2VyaWVzLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksMCk6dGhpcy53Lmdsb2JhbHMuc2VyaWVzW3RdLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksMCl9fSx7a2V5OlwiaXNTZXJpZXNOdWxsXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gMD09PShudWxsPT09dD90aGlzLncuY29uZmlnLnNlcmllcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dH0pKTp0aGlzLncuY29uZmlnLnNlcmllc1t0XS5kYXRhLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10fSkpKS5sZW5ndGh9fSx7a2V5Olwic2VyaWVzSGF2ZVNhbWVWYWx1ZXNcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53Lmdsb2JhbHMuc2VyaWVzW3RdLmV2ZXJ5KChmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQ9PT1pWzBdfSkpfX0se2tleTpcImdldENhdGVnb3J5TGFiZWxzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53LGk9dC5zbGljZSgpO3JldHVybiBlLmNvbmZpZy54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWMmJihpPXQubWFwKChmdW5jdGlvbih0LGkpe3JldHVybiBlLmNvbmZpZy54YXhpcy5sYWJlbHMuZm9ybWF0dGVyKHQtZS5nbG9iYWxzLm1pblgrMSl9KSkpLGl9fSx7a2V5OlwiZ2V0TGFyZ2VzdFNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53O3QuZ2xvYmFscy5tYXhWYWxzSW5BcnJheUluZGV4PXQuZ2xvYmFscy5zZXJpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSkuaW5kZXhPZihNYXRoLm1heC5hcHBseShNYXRoLHQuZ2xvYmFscy5zZXJpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KSkpKX19LHtrZXk6XCJnZXRMYXJnZXN0TWFya2VyU2l6ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9MDtyZXR1cm4gdC5nbG9iYWxzLm1hcmtlcnMuc2l6ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtlPU1hdGgubWF4KGUsdCl9KSksdC5jb25maWcubWFya2Vycy5kaXNjcmV0ZSYmdC5jb25maWcubWFya2Vycy5kaXNjcmV0ZS5sZW5ndGgmJnQuY29uZmlnLm1hcmtlcnMuZGlzY3JldGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZT1NYXRoLm1heChlLHQuc2l6ZSl9KSksZT4wJiYoZSs9dC5jb25maWcubWFya2Vycy5ob3Zlci5zaXplT2Zmc2V0KzEpLHQuZ2xvYmFscy5tYXJrZXJzLmxhcmdlc3RTaXplPWUsZX19LHtrZXk6XCJnZXRTZXJpZXNUb3RhbHNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMudzt0Lmdsb2JhbHMuc2VyaWVzVG90YWxzPXQuZ2xvYmFscy5zZXJpZXMubWFwKChmdW5jdGlvbih0LGUpe3ZhciBpPTA7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpKz10W2FdO2Vsc2UgaSs9dDtyZXR1cm4gaX0pKX19LHtrZXk6XCJnZXRTZXJpZXNUb3RhbHNYUmFuZ2VcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudztyZXR1cm4gaS5nbG9iYWxzLnNlcmllcy5tYXAoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciByPTAsbz0wO288YS5sZW5ndGg7bysrKWkuZ2xvYmFscy5zZXJpZXNYW3NdW29dPnQmJmkuZ2xvYmFscy5zZXJpZXNYW3NdW29dPGUmJihyKz1hW29dKTtyZXR1cm4gcn0pKX19LHtrZXk6XCJnZXRQZXJjZW50U2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnc7dC5nbG9iYWxzLnNlcmllc1BlcmNlbnQ9dC5nbG9iYWxzLnNlcmllcy5tYXAoKGZ1bmN0aW9uKGUsaSl7dmFyIGE9W107aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIHI9dC5nbG9iYWxzLnN0YWNrZWRTZXJpZXNUb3RhbHNbc10sbz0wO3ImJihvPTEwMCplW3NdL3IpLGEucHVzaChvKX1lbHNle3ZhciBuPTEwMCplL3QuZ2xvYmFscy5zZXJpZXNUb3RhbHMucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSwwKTthLnB1c2gobil9cmV0dXJuIGF9KSl9fSx7a2V5OlwiZ2V0Q2FsY3VsYXRlZFJhdGlvc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLGEscz10aGlzLncuZ2xvYmFscyxyPVtdLG89MCxuPVtdLGw9LjEsaD0wO2lmKHMueVJhbmdlPVtdLHMuaXNNdWx0aXBsZVlBeGlzKWZvcih2YXIgYz0wO2M8cy5taW5ZQXJyLmxlbmd0aDtjKyspcy55UmFuZ2UucHVzaChNYXRoLmFicyhzLm1pbllBcnJbY10tcy5tYXhZQXJyW2NdKSksbi5wdXNoKDApO2Vsc2Ugcy55UmFuZ2UucHVzaChNYXRoLmFicyhzLm1pblktcy5tYXhZKSk7cy54UmFuZ2U9TWF0aC5hYnMocy5tYXhYLXMubWluWCkscy56UmFuZ2U9TWF0aC5hYnMocy5tYXhaLXMubWluWik7Zm9yKHZhciBkPTA7ZDxzLnlSYW5nZS5sZW5ndGg7ZCsrKXIucHVzaChzLnlSYW5nZVtkXS9zLmdyaWRIZWlnaHQpO2lmKGU9cy54UmFuZ2Uvcy5ncmlkV2lkdGgsaT1NYXRoLmFicyhzLmluaXRpYWxNYXhYLXMuaW5pdGlhbE1pblgpL3MuZ3JpZFdpZHRoLHQ9cy55UmFuZ2Uvcy5ncmlkV2lkdGgsYT1zLnhSYW5nZS9zLmdyaWRIZWlnaHQsKG89cy56UmFuZ2Uvcy5ncmlkSGVpZ2h0KjE2KXx8KG89MSkscy5taW5ZIT09TnVtYmVyLk1JTl9WQUxVRSYmMCE9PU1hdGguYWJzKHMubWluWSkmJihzLmhhc05lZ3M9ITApLHMuaXNNdWx0aXBsZVlBeGlzKXtuPVtdO2Zvcih2YXIgZz0wO2c8ci5sZW5ndGg7ZysrKW4ucHVzaCgtcy5taW5ZQXJyW2ddL3JbZ10pfWVsc2Ugbi5wdXNoKC1zLm1pblkvclswXSkscy5taW5ZIT09TnVtYmVyLk1JTl9WQUxVRSYmMCE9PU1hdGguYWJzKHMubWluWSkmJihsPS1zLm1pblkvdCxoPXMubWluWC9lKTtyZXR1cm57eVJhdGlvOnIsaW52ZXJ0ZWRZUmF0aW86dCx6UmF0aW86byx4UmF0aW86ZSxpbml0aWFsWFJhdGlvOmksaW52ZXJ0ZWRYUmF0aW86YSxiYXNlTGluZUludmVydGVkWTpsLGJhc2VMaW5lWTpuLGJhc2VMaW5lWDpofX19LHtrZXk6XCJnZXRMb2dTZXJpZXNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dGhpcy53O3JldHVybiBpLmdsb2JhbHMuc2VyaWVzTG9nPXQubWFwKChmdW5jdGlvbih0LGEpe3JldHVybiBpLmNvbmZpZy55YXhpc1thXSYmaS5jb25maWcueWF4aXNbYV0ubG9nYXJpdGhtaWM/dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9udWxsOmUuZ2V0TG9nVmFsKGkuY29uZmlnLnlheGlzW2FdLmxvZ0Jhc2UsdCxhKX0pKTp0fSkpLGkuZ2xvYmFscy5pbnZhbGlkTG9nU2NhbGU/dDppLmdsb2JhbHMuc2VyaWVzTG9nfX0se2tleTpcImdldEJhc2VMb2dcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmxvZyhlKS9NYXRoLmxvZyh0KX19LHtrZXk6XCJnZXRMb2dWYWxcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7aWYoMD09PWUpcmV0dXJuIDA7dmFyIGE9dGhpcy53LHM9MD09PWEuZ2xvYmFscy5taW5ZQXJyW2ldPy0xOnRoaXMuZ2V0QmFzZUxvZyh0LGEuZ2xvYmFscy5taW5ZQXJyW2ldKSxyPSgwPT09YS5nbG9iYWxzLm1heFlBcnJbaV0/MDp0aGlzLmdldEJhc2VMb2codCxhLmdsb2JhbHMubWF4WUFycltpXSkpLXM7cmV0dXJuIGU8MT9lL3I6KHRoaXMuZ2V0QmFzZUxvZyh0LGUpLXMpL3J9fSx7a2V5OlwiZ2V0TG9nWVJhdGlvc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLncsYT10aGlzLncuZ2xvYmFscztyZXR1cm4gYS55TG9nUmF0aW89dC5zbGljZSgpLGEubG9nWVJhbmdlPWEueVJhbmdlLm1hcCgoZnVuY3Rpb24odCxzKXtpZihpLmNvbmZpZy55YXhpc1tzXSYmZS53LmNvbmZpZy55YXhpc1tzXS5sb2dhcml0aG1pYyl7dmFyIHIsbz0tTnVtYmVyLk1BWF9WQUxVRSxuPU51bWJlci5NSU5fVkFMVUU7cmV0dXJuIGEuc2VyaWVzTG9nLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtpLmNvbmZpZy55YXhpc1tlXSYmaS5jb25maWcueWF4aXNbZV0ubG9nYXJpdGhtaWMmJihvPU1hdGgubWF4KHQsbyksbj1NYXRoLm1pbih0LG4pKX0pKX0pKSxyPU1hdGgucG93KGEueVJhbmdlW3NdLE1hdGguYWJzKG4tbykvYS55UmFuZ2Vbc10pLGEueUxvZ1JhdGlvW3NdPXIvYS5ncmlkSGVpZ2h0LHJ9fSkpLGEuaW52YWxpZExvZ1NjYWxlP3Quc2xpY2UoKTphLnlMb2dSYXRpb319XSxbe2tleTpcImNoZWNrQ29tYm9TZXJpZXNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0hMSxpPTAsYT0wO3JldHVybiB0Lmxlbmd0aCYmdm9pZCAwIT09dFswXS50eXBlJiZ0LmZvckVhY2goKGZ1bmN0aW9uKHQpe1wiYmFyXCIhPT10LnR5cGUmJlwiY29sdW1uXCIhPT10LnR5cGUmJlwiY2FuZGxlc3RpY2tcIiE9PXQudHlwZSYmXCJib3hQbG90XCIhPT10LnR5cGV8fGkrKyx2b2lkIDAhPT10LnR5cGUmJmErK30pKSxhPjAmJihlPSEwKSx7Y29tYm9CYXJDb3VudDppLGNvbWJvQ2hhcnRzOmV9fX0se2tleTpcImV4dGVuZEFycmF5UHJvcHNcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIGUueWF4aXMmJihlPXQuZXh0ZW5kWUF4aXMoZSxpKSksZS5hbm5vdGF0aW9ucyYmKGUuYW5ub3RhdGlvbnMueWF4aXMmJihlPXQuZXh0ZW5kWUF4aXNBbm5vdGF0aW9ucyhlKSksZS5hbm5vdGF0aW9ucy54YXhpcyYmKGU9dC5leHRlbmRYQXhpc0Fubm90YXRpb25zKGUpKSxlLmFubm90YXRpb25zLnBvaW50cyYmKGU9dC5leHRlbmRQb2ludEFubm90YXRpb25zKGUpKSksZX19XSksdH0oKSx3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy53PWUudyx0aGlzLmFubm9DdHg9ZX1yZXR1cm4gcih0LFt7a2V5Olwic2V0T3JpZW50YXRpb25zXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsaT10aGlzLnc7aWYoXCJ2ZXJ0aWNhbFwiPT09dC5sYWJlbC5vcmllbnRhdGlvbil7dmFyIGE9bnVsbCE9PWU/ZTowLHM9aS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLXhheGlzLWFubm90YXRpb25zIC5hcGV4Y2hhcnRzLXhheGlzLWFubm90YXRpb24tbGFiZWxbcmVsPSdcIi5jb25jYXQoYSxcIiddXCIpKTtpZihudWxsIT09cyl7dmFyIHI9cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtzLnNldEF0dHJpYnV0ZShcInhcIixwYXJzZUZsb2F0KHMuZ2V0QXR0cmlidXRlKFwieFwiKSktci5oZWlnaHQrNCksXCJ0b3BcIj09PXQubGFiZWwucG9zaXRpb24/cy5zZXRBdHRyaWJ1dGUoXCJ5XCIscGFyc2VGbG9hdChzLmdldEF0dHJpYnV0ZShcInlcIikpK3Iud2lkdGgpOnMuc2V0QXR0cmlidXRlKFwieVwiLHBhcnNlRmxvYXQocy5nZXRBdHRyaWJ1dGUoXCJ5XCIpKS1yLndpZHRoKTt2YXIgbz10aGlzLmFubm9DdHguZ3JhcGhpY3Mucm90YXRlQXJvdW5kQ2VudGVyKHMpLG49by54LGw9by55O3Muc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsXCJyb3RhdGUoLTkwIFwiLmNvbmNhdChuLFwiIFwiKS5jb25jYXQobCxcIilcIikpfX19fSx7a2V5OlwiYWRkQmFja2dyb3VuZFRvQW5ub1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53O2lmKCF0fHx2b2lkIDA9PT1lLmxhYmVsLnRleHR8fHZvaWQgMCE9PWUubGFiZWwudGV4dCYmIVN0cmluZyhlLmxhYmVsLnRleHQpLnRyaW0oKSlyZXR1cm4gbnVsbDt2YXIgYT1pLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtZ3JpZFwiKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1lLmxhYmVsLnN0eWxlLnBhZGRpbmcubGVmdCxvPWUubGFiZWwuc3R5bGUucGFkZGluZy5yaWdodCxuPWUubGFiZWwuc3R5bGUucGFkZGluZy50b3AsbD1lLmxhYmVsLnN0eWxlLnBhZGRpbmcuYm90dG9tO1widmVydGljYWxcIj09PWUubGFiZWwub3JpZW50YXRpb24mJihuPWUubGFiZWwuc3R5bGUucGFkZGluZy5sZWZ0LGw9ZS5sYWJlbC5zdHlsZS5wYWRkaW5nLnJpZ2h0LHI9ZS5sYWJlbC5zdHlsZS5wYWRkaW5nLnRvcCxvPWUubGFiZWwuc3R5bGUucGFkZGluZy5ib3R0b20pO3ZhciBoPXMubGVmdC1hLmxlZnQtcixjPXMudG9wLWEudG9wLW4sZD10aGlzLmFubm9DdHguZ3JhcGhpY3MuZHJhd1JlY3QoaC1pLmdsb2JhbHMuYmFyUGFkRm9yTnVtZXJpY0F4aXMsYyxzLndpZHRoK3IrbyxzLmhlaWdodCtuK2wsZS5sYWJlbC5ib3JkZXJSYWRpdXMsZS5sYWJlbC5zdHlsZS5iYWNrZ3JvdW5kLDEsZS5sYWJlbC5ib3JkZXJXaWR0aCxlLmxhYmVsLmJvcmRlckNvbG9yLDApO3JldHVybiBlLmlkJiZkLm5vZGUuY2xhc3NMaXN0LmFkZChlLmlkKSxkfX0se2tleTpcImFubm90YXRpb25zQmFja2dyb3VuZFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMudyxpPWZ1bmN0aW9uKGksYSxzKXt2YXIgcj1lLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtXCIuY29uY2F0KHMsXCItYW5ub3RhdGlvbnMgLmFwZXhjaGFydHMtXCIpLmNvbmNhdChzLFwiLWFubm90YXRpb24tbGFiZWxbcmVsPSdcIikuY29uY2F0KGEsXCInXVwiKSk7aWYocil7dmFyIG89ci5wYXJlbnROb2RlLG49dC5hZGRCYWNrZ3JvdW5kVG9Bbm5vKHIsaSk7biYmKG8uaW5zZXJ0QmVmb3JlKG4ubm9kZSxyKSxpLmxhYmVsLm1vdXNlRW50ZXImJm4ubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLGkubGFiZWwubW91c2VFbnRlci5iaW5kKHQsaSkpLGkubGFiZWwubW91c2VMZWF2ZSYmbi5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsaS5sYWJlbC5tb3VzZUxlYXZlLmJpbmQodCxpKSksaS5sYWJlbC5jbGljayYmbi5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGkubGFiZWwuY2xpY2suYmluZCh0LGkpKSl9fTtlLmNvbmZpZy5hbm5vdGF0aW9ucy54YXhpcy5tYXAoKGZ1bmN0aW9uKHQsZSl7aSh0LGUsXCJ4YXhpc1wiKX0pKSxlLmNvbmZpZy5hbm5vdGF0aW9ucy55YXhpcy5tYXAoKGZ1bmN0aW9uKHQsZSl7aSh0LGUsXCJ5YXhpc1wiKX0pKSxlLmNvbmZpZy5hbm5vdGF0aW9ucy5wb2ludHMubWFwKChmdW5jdGlvbih0LGUpe2kodCxlLFwicG9pbnRcIil9KSl9fSx7a2V5OlwiZ2V0WTFZMlwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGksYT1cInkxXCI9PT10P2UueTplLnkyLHM9dGhpcy53O2lmKHRoaXMuYW5ub0N0eC5pbnZlcnRBeGlzKXt2YXIgcj1zLmdsb2JhbHMubGFiZWxzLmluZGV4T2YoYSk7cy5jb25maWcueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljJiYocj1zLmdsb2JhbHMuY2F0ZWdvcnlMYWJlbHMuaW5kZXhPZihhKSk7dmFyIG89cy5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLXlheGlzLXRleHRzLWcgdGV4dDpudGgtY2hpbGQoXCIrKHIrMSkrXCIpXCIpO28mJihpPXBhcnNlRmxvYXQoby5nZXRBdHRyaWJ1dGUoXCJ5XCIpKSl9ZWxzZXt2YXIgbjtpZihzLmNvbmZpZy55YXhpc1tlLnlBeGlzSW5kZXhdLmxvZ2FyaXRobWljKW49KGE9bmV3IHkodGhpcy5hbm5vQ3R4LmN0eCkuZ2V0TG9nVmFsKGEsZS55QXhpc0luZGV4KSkvcy5nbG9iYWxzLnlMb2dSYXRpb1tlLnlBeGlzSW5kZXhdO2Vsc2Ugbj0oYS1zLmdsb2JhbHMubWluWUFycltlLnlBeGlzSW5kZXhdKS8ocy5nbG9iYWxzLnlSYW5nZVtlLnlBeGlzSW5kZXhdL3MuZ2xvYmFscy5ncmlkSGVpZ2h0KTtpPXMuZ2xvYmFscy5ncmlkSGVpZ2h0LW4sIWUubWFya2VyfHx2b2lkIDAhPT1lLnkmJm51bGwhPT1lLnl8fChpPTApLHMuY29uZmlnLnlheGlzW2UueUF4aXNJbmRleF0mJnMuY29uZmlnLnlheGlzW2UueUF4aXNJbmRleF0ucmV2ZXJzZWQmJihpPW4pfXJldHVybiBpfX0se2tleTpcImdldFgxWDJcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudyxhPXRoaXMuYW5ub0N0eC5pbnZlcnRBeGlzP2kuZ2xvYmFscy5taW5ZOmkuZ2xvYmFscy5taW5YLHM9dGhpcy5hbm5vQ3R4LmludmVydEF4aXM/aS5nbG9iYWxzLm1heFk6aS5nbG9iYWxzLm1heFgscj10aGlzLmFubm9DdHguaW52ZXJ0QXhpcz9pLmdsb2JhbHMueVJhbmdlWzBdOmkuZ2xvYmFscy54UmFuZ2Usbz0oZS54LWEpLyhyL2kuZ2xvYmFscy5ncmlkV2lkdGgpO3RoaXMuYW5ub0N0eC5pbnZlcnNlZFJldmVyc2VkQXhpcyYmKG89KHMtZS54KS8oci9pLmdsb2JhbHMuZ3JpZFdpZHRoKSksXCJjYXRlZ29yeVwiIT09aS5jb25maWcueGF4aXMudHlwZSYmIWkuY29uZmlnLnhheGlzLmNvbnZlcnRlZENhdFRvTnVtZXJpY3x8dGhpcy5hbm5vQ3R4LmludmVydEF4aXN8fGkuZ2xvYmFscy5kYXRhRm9ybWF0WE51bWVyaWN8fChvPXRoaXMuZ2V0U3RyaW5nWChlLngpKTt2YXIgbj0oZS54Mi1hKS8oci9pLmdsb2JhbHMuZ3JpZFdpZHRoKTtyZXR1cm4gdGhpcy5hbm5vQ3R4LmludmVyc2VkUmV2ZXJzZWRBeGlzJiYobj0ocy1lLngyKS8oci9pLmdsb2JhbHMuZ3JpZFdpZHRoKSksXCJjYXRlZ29yeVwiIT09aS5jb25maWcueGF4aXMudHlwZSYmIWkuY29uZmlnLnhheGlzLmNvbnZlcnRlZENhdFRvTnVtZXJpY3x8dGhpcy5hbm5vQ3R4LmludmVydEF4aXN8fGkuZ2xvYmFscy5kYXRhRm9ybWF0WE51bWVyaWN8fChuPXRoaXMuZ2V0U3RyaW5nWChlLngyKSksdm9pZCAwIT09ZS54JiZudWxsIT09ZS54fHwhZS5tYXJrZXJ8fChvPWkuZ2xvYmFscy5ncmlkV2lkdGgpLFwieDFcIj09PXQ/bzpufX0se2tleTpcImdldFN0cmluZ1hcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT10O2UuY29uZmlnLnhheGlzLmNvbnZlcnRlZENhdFRvTnVtZXJpYyYmZS5nbG9iYWxzLmNhdGVnb3J5TGFiZWxzLmxlbmd0aCYmKHQ9ZS5nbG9iYWxzLmNhdGVnb3J5TGFiZWxzLmluZGV4T2YodCkrMSk7dmFyIGE9ZS5nbG9iYWxzLmxhYmVscy5pbmRleE9mKHQpLHM9ZS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLXhheGlzLXRleHRzLWcgdGV4dDpudGgtY2hpbGQoXCIrKGErMSkrXCIpXCIpO3JldHVybiBzJiYoaT1wYXJzZUZsb2F0KHMuZ2V0QXR0cmlidXRlKFwieFwiKSkpLGl9fV0pLHR9KCksaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMudz1lLncsdGhpcy5hbm5vQ3R4PWUsdGhpcy5pbnZlcnRBeGlzPXRoaXMuYW5ub0N0eC5pbnZlcnRBeGlzLHRoaXMuaGVscGVycz1uZXcgdyh0aGlzLmFubm9DdHgpfXJldHVybiByKHQsW3trZXk6XCJhZGRYYXhpc0Fubm90YXRpb25cIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dmFyIGEscz10aGlzLncscj10aGlzLmhlbHBlcnMuZ2V0WDFYMihcIngxXCIsdCksbz10LmxhYmVsLnRleHQsbj10LnN0cm9rZURhc2hBcnJheTtpZih4LmlzTnVtYmVyKHIpKXtpZihudWxsPT09dC54Mnx8dm9pZCAwPT09dC54Mil7dmFyIGw9dGhpcy5hbm5vQ3R4LmdyYXBoaWNzLmRyYXdMaW5lKHIrdC5vZmZzZXRYLDArdC5vZmZzZXRZLHIrdC5vZmZzZXRYLHMuZ2xvYmFscy5ncmlkSGVpZ2h0K3Qub2Zmc2V0WSx0LmJvcmRlckNvbG9yLG4sdC5ib3JkZXJXaWR0aCk7ZS5hcHBlbmRDaGlsZChsLm5vZGUpLHQuaWQmJmwubm9kZS5jbGFzc0xpc3QuYWRkKHQuaWQpfWVsc2V7aWYoKGE9dGhpcy5oZWxwZXJzLmdldFgxWDIoXCJ4MlwiLHQpKTxyKXt2YXIgaD1yO3I9YSxhPWh9dmFyIGM9dGhpcy5hbm5vQ3R4LmdyYXBoaWNzLmRyYXdSZWN0KHIrdC5vZmZzZXRYLDArdC5vZmZzZXRZLGEtcixzLmdsb2JhbHMuZ3JpZEhlaWdodCt0Lm9mZnNldFksMCx0LmZpbGxDb2xvcix0Lm9wYWNpdHksMSx0LmJvcmRlckNvbG9yLG4pO2Mubm9kZS5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1hbm5vdGF0aW9uLXJlY3RcIiksYy5hdHRyKFwiY2xpcC1wYXRoXCIsXCJ1cmwoI2dyaWRSZWN0TWFza1wiLmNvbmNhdChzLmdsb2JhbHMuY3VpZCxcIilcIikpLGUuYXBwZW5kQ2hpbGQoYy5ub2RlKSx0LmlkJiZjLm5vZGUuY2xhc3NMaXN0LmFkZCh0LmlkKX12YXIgZD1cInRvcFwiPT09dC5sYWJlbC5wb3NpdGlvbj80OnMuZ2xvYmFscy5ncmlkSGVpZ2h0LGc9dGhpcy5hbm5vQ3R4LmdyYXBoaWNzLmdldFRleHRSZWN0cyhvLHBhcnNlRmxvYXQodC5sYWJlbC5zdHlsZS5mb250U2l6ZSkpLHU9dGhpcy5hbm5vQ3R4LmdyYXBoaWNzLmRyYXdUZXh0KHt4OnIrdC5sYWJlbC5vZmZzZXRYLHk6ZCt0LmxhYmVsLm9mZnNldFktKFwidmVydGljYWxcIj09PXQubGFiZWwub3JpZW50YXRpb24/XCJ0b3BcIj09PXQubGFiZWwucG9zaXRpb24/Zy53aWR0aC8yLTEyOi1nLndpZHRoLzI6MCksdGV4dDpvLHRleHRBbmNob3I6dC5sYWJlbC50ZXh0QW5jaG9yLGZvbnRTaXplOnQubGFiZWwuc3R5bGUuZm9udFNpemUsZm9udEZhbWlseTp0LmxhYmVsLnN0eWxlLmZvbnRGYW1pbHksZm9udFdlaWdodDp0LmxhYmVsLnN0eWxlLmZvbnRXZWlnaHQsZm9yZUNvbG9yOnQubGFiZWwuc3R5bGUuY29sb3IsY3NzQ2xhc3M6XCJhcGV4Y2hhcnRzLXhheGlzLWFubm90YXRpb24tbGFiZWwgXCIuY29uY2F0KHQubGFiZWwuc3R5bGUuY3NzQ2xhc3MsXCIgXCIpLmNvbmNhdCh0LmlkP3QuaWQ6XCJcIil9KTt1LmF0dHIoe3JlbDppfSksZS5hcHBlbmRDaGlsZCh1Lm5vZGUpLHRoaXMuYW5ub0N0eC5oZWxwZXJzLnNldE9yaWVudGF0aW9ucyh0LGkpfX19LHtrZXk6XCJkcmF3WEF4aXNBbm5vdGF0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMudyxpPXRoaXMuYW5ub0N0eC5ncmFwaGljcy5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLXhheGlzLWFubm90YXRpb25zXCJ9KTtyZXR1cm4gZS5jb25maWcuYW5ub3RhdGlvbnMueGF4aXMubWFwKChmdW5jdGlvbihlLGEpe3QuYWRkWGF4aXNBbm5vdGF0aW9uKGUsaS5ub2RlLGEpfSkpLGl9fV0pLHR9KCksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMudz1lLncsdGhpcy5hbm5vQ3R4PWUsdGhpcy5oZWxwZXJzPW5ldyB3KHRoaXMuYW5ub0N0eCl9cmV0dXJuIHIodCxbe2tleTpcImFkZFlheGlzQW5ub3RhdGlvblwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYSxzPXRoaXMudyxyPXQuc3Ryb2tlRGFzaEFycmF5LG89dGhpcy5oZWxwZXJzLmdldFkxWTIoXCJ5MVwiLHQpLG49dC5sYWJlbC50ZXh0O2lmKG51bGw9PT10LnkyfHx2b2lkIDA9PT10LnkyKXt2YXIgbD10aGlzLmFubm9DdHguZ3JhcGhpY3MuZHJhd0xpbmUoMCt0Lm9mZnNldFgsbyt0Lm9mZnNldFksdGhpcy5fZ2V0WUF4aXNBbm5vdGF0aW9uV2lkdGgodCksbyt0Lm9mZnNldFksdC5ib3JkZXJDb2xvcixyLHQuYm9yZGVyV2lkdGgpO2UuYXBwZW5kQ2hpbGQobC5ub2RlKSx0LmlkJiZsLm5vZGUuY2xhc3NMaXN0LmFkZCh0LmlkKX1lbHNle2lmKChhPXRoaXMuaGVscGVycy5nZXRZMVkyKFwieTJcIix0KSk+byl7dmFyIGg9bztvPWEsYT1ofXZhciBjPXRoaXMuYW5ub0N0eC5ncmFwaGljcy5kcmF3UmVjdCgwK3Qub2Zmc2V0WCxhK3Qub2Zmc2V0WSx0aGlzLl9nZXRZQXhpc0Fubm90YXRpb25XaWR0aCh0KSxvLWEsMCx0LmZpbGxDb2xvcix0Lm9wYWNpdHksMSx0LmJvcmRlckNvbG9yLHIpO2Mubm9kZS5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1hbm5vdGF0aW9uLXJlY3RcIiksYy5hdHRyKFwiY2xpcC1wYXRoXCIsXCJ1cmwoI2dyaWRSZWN0TWFza1wiLmNvbmNhdChzLmdsb2JhbHMuY3VpZCxcIilcIikpLGUuYXBwZW5kQ2hpbGQoYy5ub2RlKSx0LmlkJiZjLm5vZGUuY2xhc3NMaXN0LmFkZCh0LmlkKX12YXIgZD1cInJpZ2h0XCI9PT10LmxhYmVsLnBvc2l0aW9uP3MuZ2xvYmFscy5ncmlkV2lkdGg6MCxnPXRoaXMuYW5ub0N0eC5ncmFwaGljcy5kcmF3VGV4dCh7eDpkK3QubGFiZWwub2Zmc2V0WCx5OihudWxsIT1hP2E6bykrdC5sYWJlbC5vZmZzZXRZLTMsdGV4dDpuLHRleHRBbmNob3I6dC5sYWJlbC50ZXh0QW5jaG9yLGZvbnRTaXplOnQubGFiZWwuc3R5bGUuZm9udFNpemUsZm9udEZhbWlseTp0LmxhYmVsLnN0eWxlLmZvbnRGYW1pbHksZm9udFdlaWdodDp0LmxhYmVsLnN0eWxlLmZvbnRXZWlnaHQsZm9yZUNvbG9yOnQubGFiZWwuc3R5bGUuY29sb3IsY3NzQ2xhc3M6XCJhcGV4Y2hhcnRzLXlheGlzLWFubm90YXRpb24tbGFiZWwgXCIuY29uY2F0KHQubGFiZWwuc3R5bGUuY3NzQ2xhc3MsXCIgXCIpLmNvbmNhdCh0LmlkP3QuaWQ6XCJcIil9KTtnLmF0dHIoe3JlbDppfSksZS5hcHBlbmRDaGlsZChnLm5vZGUpfX0se2tleTpcIl9nZXRZQXhpc0Fubm90YXRpb25XaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudztlLmdsb2JhbHMuZ3JpZFdpZHRoO3JldHVybih0LndpZHRoLmluZGV4T2YoXCIlXCIpPi0xP2UuZ2xvYmFscy5ncmlkV2lkdGgqcGFyc2VJbnQodC53aWR0aCwxMCkvMTAwOnBhcnNlSW50KHQud2lkdGgsMTApKSt0Lm9mZnNldFh9fSx7a2V5OlwiZHJhd1lBeGlzQW5ub3RhdGlvbnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLncsaT10aGlzLmFubm9DdHguZ3JhcGhpY3MuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy15YXhpcy1hbm5vdGF0aW9uc1wifSk7cmV0dXJuIGUuY29uZmlnLmFubm90YXRpb25zLnlheGlzLm1hcCgoZnVuY3Rpb24oZSxhKXt0LmFkZFlheGlzQW5ub3RhdGlvbihlLGkubm9kZSxhKX0pKSxpfX1dKSx0fSgpLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLnc9ZS53LHRoaXMuYW5ub0N0eD1lLHRoaXMuaGVscGVycz1uZXcgdyh0aGlzLmFubm9DdHgpfXJldHVybiByKHQsW3trZXk6XCJhZGRQb2ludEFubm90YXRpb25cIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy53O3ZhciBhPXRoaXMuaGVscGVycy5nZXRYMVgyKFwieDFcIix0KSxzPXRoaXMuaGVscGVycy5nZXRZMVkyKFwieTFcIix0KTtpZih4LmlzTnVtYmVyKGEpKXt2YXIgcj17cFNpemU6dC5tYXJrZXIuc2l6ZSxwb2ludFN0cm9rZVdpZHRoOnQubWFya2VyLnN0cm9rZVdpZHRoLHBvaW50RmlsbENvbG9yOnQubWFya2VyLmZpbGxDb2xvcixwb2ludFN0cm9rZUNvbG9yOnQubWFya2VyLnN0cm9rZUNvbG9yLHNoYXBlOnQubWFya2VyLnNoYXBlLHBSYWRpdXM6dC5tYXJrZXIucmFkaXVzLGNsYXNzOlwiYXBleGNoYXJ0cy1wb2ludC1hbm5vdGF0aW9uLW1hcmtlciBcIi5jb25jYXQodC5tYXJrZXIuY3NzQ2xhc3MsXCIgXCIpLmNvbmNhdCh0LmlkP3QuaWQ6XCJcIil9LG89dGhpcy5hbm5vQ3R4LmdyYXBoaWNzLmRyYXdNYXJrZXIoYSt0Lm1hcmtlci5vZmZzZXRYLHMrdC5tYXJrZXIub2Zmc2V0WSxyKTtlLmFwcGVuZENoaWxkKG8ubm9kZSk7dmFyIG49dC5sYWJlbC50ZXh0P3QubGFiZWwudGV4dDpcIlwiLGw9dGhpcy5hbm5vQ3R4LmdyYXBoaWNzLmRyYXdUZXh0KHt4OmErdC5sYWJlbC5vZmZzZXRYLHk6cyt0LmxhYmVsLm9mZnNldFktdC5tYXJrZXIuc2l6ZS1wYXJzZUZsb2F0KHQubGFiZWwuc3R5bGUuZm9udFNpemUpLzEuNix0ZXh0Om4sdGV4dEFuY2hvcjp0LmxhYmVsLnRleHRBbmNob3IsZm9udFNpemU6dC5sYWJlbC5zdHlsZS5mb250U2l6ZSxmb250RmFtaWx5OnQubGFiZWwuc3R5bGUuZm9udEZhbWlseSxmb250V2VpZ2h0OnQubGFiZWwuc3R5bGUuZm9udFdlaWdodCxmb3JlQ29sb3I6dC5sYWJlbC5zdHlsZS5jb2xvcixjc3NDbGFzczpcImFwZXhjaGFydHMtcG9pbnQtYW5ub3RhdGlvbi1sYWJlbCBcIi5jb25jYXQodC5sYWJlbC5zdHlsZS5jc3NDbGFzcyxcIiBcIikuY29uY2F0KHQuaWQ/dC5pZDpcIlwiKX0pO2lmKGwuYXR0cih7cmVsOml9KSxlLmFwcGVuZENoaWxkKGwubm9kZSksdC5jdXN0b21TVkcuU1ZHKXt2YXIgaD10aGlzLmFubm9DdHguZ3JhcGhpY3MuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1wb2ludC1hbm5vdGF0aW9ucy1jdXN0b20tc3ZnIFwiK3QuY3VzdG9tU1ZHLmNzc0NsYXNzfSk7aC5hdHRyKHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIuY29uY2F0KGErdC5jdXN0b21TVkcub2Zmc2V0WCxcIiwgXCIpLmNvbmNhdChzK3QuY3VzdG9tU1ZHLm9mZnNldFksXCIpXCIpfSksaC5ub2RlLmlubmVySFRNTD10LmN1c3RvbVNWRy5TVkcsZS5hcHBlbmRDaGlsZChoLm5vZGUpfWlmKHQuaW1hZ2UucGF0aCl7dmFyIGM9dC5pbWFnZS53aWR0aD90LmltYWdlLndpZHRoOjIwLGQ9dC5pbWFnZS5oZWlnaHQ/dC5pbWFnZS5oZWlnaHQ6MjA7bz10aGlzLmFubm9DdHguYWRkSW1hZ2Uoe3g6YSt0LmltYWdlLm9mZnNldFgtYy8yLHk6cyt0LmltYWdlLm9mZnNldFktZC8yLHdpZHRoOmMsaGVpZ2h0OmQscGF0aDp0LmltYWdlLnBhdGgsYXBwZW5kVG86XCIuYXBleGNoYXJ0cy1wb2ludC1hbm5vdGF0aW9uc1wifSl9dC5tb3VzZUVudGVyJiZvLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIix0Lm1vdXNlRW50ZXIuYmluZCh0aGlzLHQpKSx0Lm1vdXNlTGVhdmUmJm8ubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLHQubW91c2VMZWF2ZS5iaW5kKHRoaXMsdCkpLHQuY2xpY2smJm8ubm9kZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0LmNsaWNrLmJpbmQodGhpcyx0KSl9fX0se2tleTpcImRyYXdQb2ludEFubm90YXRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy53LGk9dGhpcy5hbm5vQ3R4LmdyYXBoaWNzLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtcG9pbnQtYW5ub3RhdGlvbnNcIn0pO3JldHVybiBlLmNvbmZpZy5hbm5vdGF0aW9ucy5wb2ludHMubWFwKChmdW5jdGlvbihlLGEpe3QuYWRkUG9pbnRBbm5vdGF0aW9uKGUsaS5ub2RlLGEpfSkpLGl9fV0pLHR9KCk7dmFyIEM9e25hbWU6XCJlblwiLG9wdGlvbnM6e21vbnRoczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sc2hvcnRNb250aHM6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkRlY1wiXSxkYXlzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLHNob3J0RGF5czpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sdG9vbGJhcjp7ZXhwb3J0VG9TVkc6XCJEb3dubG9hZCBTVkdcIixleHBvcnRUb1BORzpcIkRvd25sb2FkIFBOR1wiLGV4cG9ydFRvQ1NWOlwiRG93bmxvYWQgQ1NWXCIsbWVudTpcIk1lbnVcIixzZWxlY3Rpb246XCJTZWxlY3Rpb25cIixzZWxlY3Rpb25ab29tOlwiU2VsZWN0aW9uIFpvb21cIix6b29tSW46XCJab29tIEluXCIsem9vbU91dDpcIlpvb20gT3V0XCIscGFuOlwiUGFubmluZ1wiLHJlc2V0OlwiUmVzZXQgWm9vbVwifX19LEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7YSh0aGlzLHQpLHRoaXMueUF4aXM9e3Nob3c6ITAsc2hvd0Fsd2F5czohMSxzaG93Rm9yTnVsbFNlcmllczohMCxzZXJpZXNOYW1lOnZvaWQgMCxvcHBvc2l0ZTohMSxyZXZlcnNlZDohMSxsb2dhcml0aG1pYzohMSxsb2dCYXNlOjEwLHRpY2tBbW91bnQ6dm9pZCAwLGZvcmNlTmljZVNjYWxlOiExLG1heDp2b2lkIDAsbWluOnZvaWQgMCxmbG9hdGluZzohMSxkZWNpbWFsc0luRmxvYXQ6dm9pZCAwLGxhYmVsczp7c2hvdzohMCxtaW5XaWR0aDowLG1heFdpZHRoOjE2MCxvZmZzZXRYOjAsb2Zmc2V0WTowLGFsaWduOnZvaWQgMCxyb3RhdGU6MCxwYWRkaW5nOjIwLHN0eWxlOntjb2xvcnM6W10sZm9udFNpemU6XCIxMXB4XCIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseTp2b2lkIDAsY3NzQ2xhc3M6XCJcIn0sZm9ybWF0dGVyOnZvaWQgMH0sYXhpc0JvcmRlcjp7c2hvdzohMSxjb2xvcjpcIiNlMGUwZTBcIix3aWR0aDoxLG9mZnNldFg6MCxvZmZzZXRZOjB9LGF4aXNUaWNrczp7c2hvdzohMSxjb2xvcjpcIiNlMGUwZTBcIix3aWR0aDo2LG9mZnNldFg6MCxvZmZzZXRZOjB9LHRpdGxlOnt0ZXh0OnZvaWQgMCxyb3RhdGU6LTkwLG9mZnNldFk6MCxvZmZzZXRYOjAsc3R5bGU6e2NvbG9yOnZvaWQgMCxmb250U2l6ZTpcIjExcHhcIixmb250V2VpZ2h0OjkwMCxmb250RmFtaWx5OnZvaWQgMCxjc3NDbGFzczpcIlwifX0sdG9vbHRpcDp7ZW5hYmxlZDohMSxvZmZzZXRYOjB9LGNyb3NzaGFpcnM6e3Nob3c6ITAscG9zaXRpb246XCJmcm9udFwiLHN0cm9rZTp7Y29sb3I6XCIjYjZiNmI2XCIsd2lkdGg6MSxkYXNoQXJyYXk6MH19fSx0aGlzLnBvaW50QW5ub3RhdGlvbj17aWQ6dm9pZCAwLHg6MCx5Om51bGwseUF4aXNJbmRleDowLHNlcmllc0luZGV4OjAsbW91c2VFbnRlcjp2b2lkIDAsbW91c2VMZWF2ZTp2b2lkIDAsY2xpY2s6dm9pZCAwLG1hcmtlcjp7c2l6ZTo0LGZpbGxDb2xvcjpcIiNmZmZcIixzdHJva2VXaWR0aDoyLHN0cm9rZUNvbG9yOlwiIzMzM1wiLHNoYXBlOlwiY2lyY2xlXCIsb2Zmc2V0WDowLG9mZnNldFk6MCxyYWRpdXM6Mixjc3NDbGFzczpcIlwifSxsYWJlbDp7Ym9yZGVyQ29sb3I6XCIjYzJjMmMyXCIsYm9yZGVyV2lkdGg6MSxib3JkZXJSYWRpdXM6Mix0ZXh0OnZvaWQgMCx0ZXh0QW5jaG9yOlwibWlkZGxlXCIsb2Zmc2V0WDowLG9mZnNldFk6MCxtb3VzZUVudGVyOnZvaWQgMCxtb3VzZUxlYXZlOnZvaWQgMCxjbGljazp2b2lkIDAsc3R5bGU6e2JhY2tncm91bmQ6XCIjZmZmXCIsY29sb3I6dm9pZCAwLGZvbnRTaXplOlwiMTFweFwiLGZvbnRGYW1pbHk6dm9pZCAwLGZvbnRXZWlnaHQ6NDAwLGNzc0NsYXNzOlwiXCIscGFkZGluZzp7bGVmdDo1LHJpZ2h0OjUsdG9wOjIsYm90dG9tOjJ9fX0sY3VzdG9tU1ZHOntTVkc6dm9pZCAwLGNzc0NsYXNzOnZvaWQgMCxvZmZzZXRYOjAsb2Zmc2V0WTowfSxpbWFnZTp7cGF0aDp2b2lkIDAsd2lkdGg6MjAsaGVpZ2h0OjIwLG9mZnNldFg6MCxvZmZzZXRZOjB9fSx0aGlzLnlBeGlzQW5ub3RhdGlvbj17aWQ6dm9pZCAwLHk6MCx5MjpudWxsLHN0cm9rZURhc2hBcnJheToxLGZpbGxDb2xvcjpcIiNjMmMyYzJcIixib3JkZXJDb2xvcjpcIiNjMmMyYzJcIixib3JkZXJXaWR0aDoxLG9wYWNpdHk6LjMsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDpcIjEwMCVcIix5QXhpc0luZGV4OjAsbGFiZWw6e2JvcmRlckNvbG9yOlwiI2MyYzJjMlwiLGJvcmRlcldpZHRoOjEsYm9yZGVyUmFkaXVzOjIsdGV4dDp2b2lkIDAsdGV4dEFuY2hvcjpcImVuZFwiLHBvc2l0aW9uOlwicmlnaHRcIixvZmZzZXRYOjAsb2Zmc2V0WTotMyxtb3VzZUVudGVyOnZvaWQgMCxtb3VzZUxlYXZlOnZvaWQgMCxjbGljazp2b2lkIDAsc3R5bGU6e2JhY2tncm91bmQ6XCIjZmZmXCIsY29sb3I6dm9pZCAwLGZvbnRTaXplOlwiMTFweFwiLGZvbnRGYW1pbHk6dm9pZCAwLGZvbnRXZWlnaHQ6NDAwLGNzc0NsYXNzOlwiXCIscGFkZGluZzp7bGVmdDo1LHJpZ2h0OjUsdG9wOjIsYm90dG9tOjJ9fX19LHRoaXMueEF4aXNBbm5vdGF0aW9uPXtpZDp2b2lkIDAseDowLHgyOm51bGwsc3Ryb2tlRGFzaEFycmF5OjEsZmlsbENvbG9yOlwiI2MyYzJjMlwiLGJvcmRlckNvbG9yOlwiI2MyYzJjMlwiLGJvcmRlcldpZHRoOjEsb3BhY2l0eTouMyxvZmZzZXRYOjAsb2Zmc2V0WTowLGxhYmVsOntib3JkZXJDb2xvcjpcIiNjMmMyYzJcIixib3JkZXJXaWR0aDoxLGJvcmRlclJhZGl1czoyLHRleHQ6dm9pZCAwLHRleHRBbmNob3I6XCJtaWRkbGVcIixvcmllbnRhdGlvbjpcInZlcnRpY2FsXCIscG9zaXRpb246XCJ0b3BcIixvZmZzZXRYOjAsb2Zmc2V0WTowLG1vdXNlRW50ZXI6dm9pZCAwLG1vdXNlTGVhdmU6dm9pZCAwLGNsaWNrOnZvaWQgMCxzdHlsZTp7YmFja2dyb3VuZDpcIiNmZmZcIixjb2xvcjp2b2lkIDAsZm9udFNpemU6XCIxMXB4XCIsZm9udEZhbWlseTp2b2lkIDAsZm9udFdlaWdodDo0MDAsY3NzQ2xhc3M6XCJcIixwYWRkaW5nOntsZWZ0OjUscmlnaHQ6NSx0b3A6Mixib3R0b206Mn19fX0sdGhpcy50ZXh0PXt4OjAseTowLHRleHQ6XCJcIix0ZXh0QW5jaG9yOlwic3RhcnRcIixmb3JlQ29sb3I6dm9pZCAwLGZvbnRTaXplOlwiMTNweFwiLGZvbnRGYW1pbHk6dm9pZCAwLGZvbnRXZWlnaHQ6NDAwLGFwcGVuZFRvOlwiLmFwZXhjaGFydHMtYW5ub3RhdGlvbnNcIixiYWNrZ3JvdW5kQ29sb3I6XCJ0cmFuc3BhcmVudFwiLGJvcmRlckNvbG9yOlwiI2MyYzJjMlwiLGJvcmRlclJhZGl1czowLGJvcmRlcldpZHRoOjAscGFkZGluZ0xlZnQ6NCxwYWRkaW5nUmlnaHQ6NCxwYWRkaW5nVG9wOjIscGFkZGluZ0JvdHRvbToyfX1yZXR1cm4gcih0LFt7a2V5OlwiaW5pdFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2Fubm90YXRpb25zOntwb3NpdGlvbjpcImZyb250XCIseWF4aXM6W3RoaXMueUF4aXNBbm5vdGF0aW9uXSx4YXhpczpbdGhpcy54QXhpc0Fubm90YXRpb25dLHBvaW50czpbdGhpcy5wb2ludEFubm90YXRpb25dLHRleHRzOltdLGltYWdlczpbXSxzaGFwZXM6W119LGNoYXJ0OnthbmltYXRpb25zOntlbmFibGVkOiEwLGVhc2luZzpcImVhc2Vpbm91dFwiLHNwZWVkOjgwMCxhbmltYXRlR3JhZHVhbGx5OntkZWxheToxNTAsZW5hYmxlZDohMH0sZHluYW1pY0FuaW1hdGlvbjp7ZW5hYmxlZDohMCxzcGVlZDozNTB9fSxiYWNrZ3JvdW5kOlwidHJhbnNwYXJlbnRcIixsb2NhbGVzOltDXSxkZWZhdWx0TG9jYWxlOlwiZW5cIixkcm9wU2hhZG93OntlbmFibGVkOiExLGVuYWJsZWRPblNlcmllczp2b2lkIDAsdG9wOjIsbGVmdDoyLGJsdXI6NCxjb2xvcjpcIiMwMDBcIixvcGFjaXR5Oi4zNX0sZXZlbnRzOnthbmltYXRpb25FbmQ6dm9pZCAwLGJlZm9yZU1vdW50OnZvaWQgMCxtb3VudGVkOnZvaWQgMCx1cGRhdGVkOnZvaWQgMCxjbGljazp2b2lkIDAsbW91c2VNb3ZlOnZvaWQgMCxtb3VzZUxlYXZlOnZvaWQgMCx4QXhpc0xhYmVsQ2xpY2s6dm9pZCAwLGxlZ2VuZENsaWNrOnZvaWQgMCxtYXJrZXJDbGljazp2b2lkIDAsc2VsZWN0aW9uOnZvaWQgMCxkYXRhUG9pbnRTZWxlY3Rpb246dm9pZCAwLGRhdGFQb2ludE1vdXNlRW50ZXI6dm9pZCAwLGRhdGFQb2ludE1vdXNlTGVhdmU6dm9pZCAwLGJlZm9yZVpvb206dm9pZCAwLGJlZm9yZVJlc2V0Wm9vbTp2b2lkIDAsem9vbWVkOnZvaWQgMCxzY3JvbGxlZDp2b2lkIDAsYnJ1c2hTY3JvbGxlZDp2b2lkIDB9LGZvcmVDb2xvcjpcIiMzNzNkM2ZcIixmb250RmFtaWx5OlwiSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLGhlaWdodDpcImF1dG9cIixwYXJlbnRIZWlnaHRPZmZzZXQ6MTUscmVkcmF3T25QYXJlbnRSZXNpemU6ITAscmVkcmF3T25XaW5kb3dSZXNpemU6ITAsaWQ6dm9pZCAwLGdyb3VwOnZvaWQgMCxvZmZzZXRYOjAsb2Zmc2V0WTowLHNlbGVjdGlvbjp7ZW5hYmxlZDohMSx0eXBlOlwieFwiLGZpbGw6e2NvbG9yOlwiIzI0MjkyZVwiLG9wYWNpdHk6LjF9LHN0cm9rZTp7d2lkdGg6MSxjb2xvcjpcIiMyNDI5MmVcIixvcGFjaXR5Oi40LGRhc2hBcnJheTozfSx4YXhpczp7bWluOnZvaWQgMCxtYXg6dm9pZCAwfSx5YXhpczp7bWluOnZvaWQgMCxtYXg6dm9pZCAwfX0sc3BhcmtsaW5lOntlbmFibGVkOiExfSxicnVzaDp7ZW5hYmxlZDohMSxhdXRvU2NhbGVZYXhpczohMCx0YXJnZXQ6dm9pZCAwfSxzdGFja2VkOiExLHN0YWNrVHlwZTpcIm5vcm1hbFwiLHRvb2xiYXI6e3Nob3c6ITAsb2Zmc2V0WDowLG9mZnNldFk6MCx0b29sczp7ZG93bmxvYWQ6ITAsc2VsZWN0aW9uOiEwLHpvb206ITAsem9vbWluOiEwLHpvb21vdXQ6ITAscGFuOiEwLHJlc2V0OiEwLGN1c3RvbUljb25zOltdfSxleHBvcnQ6e2Nzdjp7ZmlsZW5hbWU6dm9pZCAwLGNvbHVtbkRlbGltaXRlcjpcIixcIixoZWFkZXJDYXRlZ29yeTpcImNhdGVnb3J5XCIsaGVhZGVyVmFsdWU6XCJ2YWx1ZVwiLGRhdGVGb3JtYXR0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKHQpLnRvRGF0ZVN0cmluZygpfX0scG5nOntmaWxlbmFtZTp2b2lkIDB9LHN2Zzp7ZmlsZW5hbWU6dm9pZCAwfX0sYXV0b1NlbGVjdGVkOlwiem9vbVwifSx0eXBlOlwibGluZVwiLHdpZHRoOlwiMTAwJVwiLHpvb206e2VuYWJsZWQ6ITAsdHlwZTpcInhcIixhdXRvU2NhbGVZYXhpczohMSx6b29tZWRBcmVhOntmaWxsOntjb2xvcjpcIiM5MENBRjlcIixvcGFjaXR5Oi40fSxzdHJva2U6e2NvbG9yOlwiIzBENDdBMVwiLG9wYWNpdHk6LjQsd2lkdGg6MX19fX0scGxvdE9wdGlvbnM6e2FyZWE6e2ZpbGxUbzpcIm9yaWdpblwifSxiYXI6e2hvcml6b250YWw6ITEsY29sdW1uV2lkdGg6XCI3MCVcIixiYXJIZWlnaHQ6XCI3MCVcIixkaXN0cmlidXRlZDohMSxib3JkZXJSYWRpdXM6MCxyYW5nZUJhck92ZXJsYXA6ITAscmFuZ2VCYXJHcm91cFJvd3M6ITEsY29sb3JzOntyYW5nZXM6W10sYmFja2dyb3VuZEJhckNvbG9yczpbXSxiYWNrZ3JvdW5kQmFyT3BhY2l0eToxLGJhY2tncm91bmRCYXJSYWRpdXM6MH0sZGF0YUxhYmVsczp7cG9zaXRpb246XCJ0b3BcIixtYXhJdGVtczoxMDAsaGlkZU92ZXJmbG93aW5nTGFiZWxzOiEwLG9yaWVudGF0aW9uOlwiaG9yaXpvbnRhbFwiLHRvdGFsOntlbmFibGVkOiExLGZvcm1hdHRlcjp2b2lkIDAsb2Zmc2V0WDowLG9mZnNldFk6MCxzdHlsZTp7Y29sb3I6XCIjMzczZDNmXCIsZm9udFNpemU6XCIxMnB4XCIsZm9udEZhbWlseTp2b2lkIDAsZm9udFdlaWdodDo2MDB9fX19LGJ1YmJsZTp7bWluQnViYmxlUmFkaXVzOnZvaWQgMCxtYXhCdWJibGVSYWRpdXM6dm9pZCAwfSxjYW5kbGVzdGljazp7Y29sb3JzOnt1cHdhcmQ6XCIjMDBCNzQ2XCIsZG93bndhcmQ6XCIjRUY0MDNDXCJ9LHdpY2s6e3VzZUZpbGxDb2xvcjohMH19LGJveFBsb3Q6e2NvbG9yczp7dXBwZXI6XCIjMDBFMzk2XCIsbG93ZXI6XCIjMDA4RkZCXCJ9fSxoZWF0bWFwOntyYWRpdXM6MixlbmFibGVTaGFkZXM6ITAsc2hhZGVJbnRlbnNpdHk6LjUscmV2ZXJzZU5lZ2F0aXZlU2hhZGU6ITEsZGlzdHJpYnV0ZWQ6ITEsdXNlRmlsbENvbG9yQXNTdHJva2U6ITEsY29sb3JTY2FsZTp7aW52ZXJzZTohMSxyYW5nZXM6W10sbWluOnZvaWQgMCxtYXg6dm9pZCAwfX0sdHJlZW1hcDp7ZW5hYmxlU2hhZGVzOiEwLHNoYWRlSW50ZW5zaXR5Oi41LGRpc3RyaWJ1dGVkOiExLHJldmVyc2VOZWdhdGl2ZVNoYWRlOiExLHVzZUZpbGxDb2xvckFzU3Ryb2tlOiExLGNvbG9yU2NhbGU6e2ludmVyc2U6ITEscmFuZ2VzOltdLG1pbjp2b2lkIDAsbWF4OnZvaWQgMH19LHJhZGlhbEJhcjp7aW52ZXJzZU9yZGVyOiExLHN0YXJ0QW5nbGU6MCxlbmRBbmdsZTozNjAsb2Zmc2V0WDowLG9mZnNldFk6MCxob2xsb3c6e21hcmdpbjo1LHNpemU6XCI1MCVcIixiYWNrZ3JvdW5kOlwidHJhbnNwYXJlbnRcIixpbWFnZTp2b2lkIDAsaW1hZ2VXaWR0aDoxNTAsaW1hZ2VIZWlnaHQ6MTUwLGltYWdlT2Zmc2V0WDowLGltYWdlT2Zmc2V0WTowLGltYWdlQ2xpcHBlZDohMCxwb3NpdGlvbjpcImZyb250XCIsZHJvcFNoYWRvdzp7ZW5hYmxlZDohMSx0b3A6MCxsZWZ0OjAsYmx1cjozLGNvbG9yOlwiIzAwMFwiLG9wYWNpdHk6LjV9fSx0cmFjazp7c2hvdzohMCxzdGFydEFuZ2xlOnZvaWQgMCxlbmRBbmdsZTp2b2lkIDAsYmFja2dyb3VuZDpcIiNmMmYyZjJcIixzdHJva2VXaWR0aDpcIjk3JVwiLG9wYWNpdHk6MSxtYXJnaW46NSxkcm9wU2hhZG93OntlbmFibGVkOiExLHRvcDowLGxlZnQ6MCxibHVyOjMsY29sb3I6XCIjMDAwXCIsb3BhY2l0eTouNX19LGRhdGFMYWJlbHM6e3Nob3c6ITAsbmFtZTp7c2hvdzohMCxmb250U2l6ZTpcIjE2cHhcIixmb250RmFtaWx5OnZvaWQgMCxmb250V2VpZ2h0OjYwMCxjb2xvcjp2b2lkIDAsb2Zmc2V0WTowLGZvcm1hdHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHZhbHVlOntzaG93OiEwLGZvbnRTaXplOlwiMTRweFwiLGZvbnRGYW1pbHk6dm9pZCAwLGZvbnRXZWlnaHQ6NDAwLGNvbG9yOnZvaWQgMCxvZmZzZXRZOjE2LGZvcm1hdHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCtcIiVcIn19LHRvdGFsOntzaG93OiExLGxhYmVsOlwiVG90YWxcIixmb250U2l6ZTpcIjE2cHhcIixmb250V2VpZ2h0OjYwMCxmb250RmFtaWx5OnZvaWQgMCxjb2xvcjp2b2lkIDAsZm9ybWF0dGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuc2VyaWVzVG90YWxzLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksMCkvdC5nbG9iYWxzLnNlcmllcy5sZW5ndGgrXCIlXCJ9fX19LHBpZTp7Y3VzdG9tU2NhbGU6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHN0YXJ0QW5nbGU6MCxlbmRBbmdsZTozNjAsZXhwYW5kT25DbGljazohMCxkYXRhTGFiZWxzOntvZmZzZXQ6MCxtaW5BbmdsZVRvU2hvd0xhYmVsOjEwfSxkb251dDp7c2l6ZTpcIjY1JVwiLGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLGxhYmVsczp7c2hvdzohMSxuYW1lOntzaG93OiEwLGZvbnRTaXplOlwiMTZweFwiLGZvbnRGYW1pbHk6dm9pZCAwLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOnZvaWQgMCxvZmZzZXRZOi0xMCxmb3JtYXR0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSx2YWx1ZTp7c2hvdzohMCxmb250U2l6ZTpcIjIwcHhcIixmb250RmFtaWx5OnZvaWQgMCxmb250V2VpZ2h0OjQwMCxjb2xvcjp2b2lkIDAsb2Zmc2V0WToxMCxmb3JtYXR0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSx0b3RhbDp7c2hvdzohMSxzaG93QWx3YXlzOiExLGxhYmVsOlwiVG90YWxcIixmb250U2l6ZTpcIjE2cHhcIixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OnZvaWQgMCxjb2xvcjp2b2lkIDAsZm9ybWF0dGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuc2VyaWVzVG90YWxzLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksMCl9fX19fSxwb2xhckFyZWE6e3JpbmdzOntzdHJva2VXaWR0aDoxLHN0cm9rZUNvbG9yOlwiI2U4ZThlOFwifSxzcG9rZXM6e3N0cm9rZVdpZHRoOjEsY29ubmVjdG9yQ29sb3JzOlwiI2U4ZThlOFwifX0scmFkYXI6e3NpemU6dm9pZCAwLG9mZnNldFg6MCxvZmZzZXRZOjAscG9seWdvbnM6e3N0cm9rZVdpZHRoOjEsc3Ryb2tlQ29sb3JzOlwiI2U4ZThlOFwiLGNvbm5lY3RvckNvbG9yczpcIiNlOGU4ZThcIixmaWxsOntjb2xvcnM6dm9pZCAwfX19fSxjb2xvcnM6dm9pZCAwLGRhdGFMYWJlbHM6e2VuYWJsZWQ6ITAsZW5hYmxlZE9uU2VyaWVzOnZvaWQgMCxmb3JtYXR0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10P3Q6XCJcIn0sdGV4dEFuY2hvcjpcIm1pZGRsZVwiLGRpc3RyaWJ1dGVkOiExLG9mZnNldFg6MCxvZmZzZXRZOjAsc3R5bGU6e2ZvbnRTaXplOlwiMTJweFwiLGZvbnRGYW1pbHk6dm9pZCAwLGZvbnRXZWlnaHQ6NjAwLGNvbG9yczp2b2lkIDB9LGJhY2tncm91bmQ6e2VuYWJsZWQ6ITAsZm9yZUNvbG9yOlwiI2ZmZlwiLGJvcmRlclJhZGl1czoyLHBhZGRpbmc6NCxvcGFjaXR5Oi45LGJvcmRlcldpZHRoOjEsYm9yZGVyQ29sb3I6XCIjZmZmXCIsZHJvcFNoYWRvdzp7ZW5hYmxlZDohMSx0b3A6MSxsZWZ0OjEsYmx1cjoxLGNvbG9yOlwiIzAwMFwiLG9wYWNpdHk6LjQ1fX0sZHJvcFNoYWRvdzp7ZW5hYmxlZDohMSx0b3A6MSxsZWZ0OjEsYmx1cjoxLGNvbG9yOlwiIzAwMFwiLG9wYWNpdHk6LjQ1fX0sZmlsbDp7dHlwZTpcInNvbGlkXCIsY29sb3JzOnZvaWQgMCxvcGFjaXR5Oi44NSxncmFkaWVudDp7c2hhZGU6XCJkYXJrXCIsdHlwZTpcImhvcml6b250YWxcIixzaGFkZUludGVuc2l0eTouNSxncmFkaWVudFRvQ29sb3JzOnZvaWQgMCxpbnZlcnNlQ29sb3JzOiEwLG9wYWNpdHlGcm9tOjEsb3BhY2l0eVRvOjEsc3RvcHM6WzAsNTAsMTAwXSxjb2xvclN0b3BzOltdfSxpbWFnZTp7c3JjOltdLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwfSxwYXR0ZXJuOntzdHlsZTpcInNxdWFyZXNcIix3aWR0aDo2LGhlaWdodDo2LHN0cm9rZVdpZHRoOjJ9fSxmb3JlY2FzdERhdGFQb2ludHM6e2NvdW50OjAsZmlsbE9wYWNpdHk6LjUsc3Ryb2tlV2lkdGg6dm9pZCAwLGRhc2hBcnJheTo0fSxncmlkOntzaG93OiEwLGJvcmRlckNvbG9yOlwiI2UwZTBlMFwiLHN0cm9rZURhc2hBcnJheTowLHBvc2l0aW9uOlwiYmFja1wiLHhheGlzOntsaW5lczp7c2hvdzohMX19LHlheGlzOntsaW5lczp7c2hvdzohMH19LHJvdzp7Y29sb3JzOnZvaWQgMCxvcGFjaXR5Oi41fSxjb2x1bW46e2NvbG9yczp2b2lkIDAsb3BhY2l0eTouNX0scGFkZGluZzp7dG9wOjAscmlnaHQ6MTAsYm90dG9tOjAsbGVmdDoxMn19LGxhYmVsczpbXSxsZWdlbmQ6e3Nob3c6ITAsc2hvd0ZvclNpbmdsZVNlcmllczohMSxzaG93Rm9yTnVsbFNlcmllczohMCxzaG93Rm9yWmVyb1NlcmllczohMCxmbG9hdGluZzohMSxwb3NpdGlvbjpcImJvdHRvbVwiLGhvcml6b250YWxBbGlnbjpcImNlbnRlclwiLGludmVyc2VPcmRlcjohMSxmb250U2l6ZTpcIjEycHhcIixmb250RmFtaWx5OnZvaWQgMCxmb250V2VpZ2h0OjQwMCx3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxmb3JtYXR0ZXI6dm9pZCAwLHRvb2x0aXBIb3ZlckZvcm1hdHRlcjp2b2lkIDAsb2Zmc2V0WDotMjAsb2Zmc2V0WTo0LGN1c3RvbUxlZ2VuZEl0ZW1zOltdLGxhYmVsczp7Y29sb3JzOnZvaWQgMCx1c2VTZXJpZXNDb2xvcnM6ITF9LG1hcmtlcnM6e3dpZHRoOjEyLGhlaWdodDoxMixzdHJva2VXaWR0aDowLGZpbGxDb2xvcnM6dm9pZCAwLHN0cm9rZUNvbG9yOlwiI2ZmZlwiLHJhZGl1czoxMixjdXN0b21IVE1MOnZvaWQgMCxvZmZzZXRYOjAsb2Zmc2V0WTowLG9uQ2xpY2s6dm9pZCAwfSxpdGVtTWFyZ2luOntob3Jpem9udGFsOjUsdmVydGljYWw6Mn0sb25JdGVtQ2xpY2s6e3RvZ2dsZURhdGFTZXJpZXM6ITB9LG9uSXRlbUhvdmVyOntoaWdobGlnaHREYXRhU2VyaWVzOiEwfX0sbWFya2Vyczp7ZGlzY3JldGU6W10sc2l6ZTowLGNvbG9yczp2b2lkIDAsc3Ryb2tlQ29sb3JzOlwiI2ZmZlwiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlT3BhY2l0eTouOSxzdHJva2VEYXNoQXJyYXk6MCxmaWxsT3BhY2l0eToxLHNoYXBlOlwiY2lyY2xlXCIsd2lkdGg6OCxoZWlnaHQ6OCxyYWRpdXM6MixvZmZzZXRYOjAsb2Zmc2V0WTowLG9uQ2xpY2s6dm9pZCAwLG9uRGJsQ2xpY2s6dm9pZCAwLHNob3dOdWxsRGF0YVBvaW50czohMCxob3Zlcjp7c2l6ZTp2b2lkIDAsc2l6ZU9mZnNldDozfX0sbm9EYXRhOnt0ZXh0OnZvaWQgMCxhbGlnbjpcImNlbnRlclwiLHZlcnRpY2FsQWxpZ246XCJtaWRkbGVcIixvZmZzZXRYOjAsb2Zmc2V0WTowLHN0eWxlOntjb2xvcjp2b2lkIDAsZm9udFNpemU6XCIxNHB4XCIsZm9udEZhbWlseTp2b2lkIDB9fSxyZXNwb25zaXZlOltdLHNlcmllczp2b2lkIDAsc3RhdGVzOntub3JtYWw6e2ZpbHRlcjp7dHlwZTpcIm5vbmVcIix2YWx1ZTowfX0saG92ZXI6e2ZpbHRlcjp7dHlwZTpcImxpZ2h0ZW5cIix2YWx1ZTouMX19LGFjdGl2ZTp7YWxsb3dNdWx0aXBsZURhdGFQb2ludHNTZWxlY3Rpb246ITEsZmlsdGVyOnt0eXBlOlwiZGFya2VuXCIsdmFsdWU6LjV9fX0sdGl0bGU6e3RleHQ6dm9pZCAwLGFsaWduOlwibGVmdFwiLG1hcmdpbjo1LG9mZnNldFg6MCxvZmZzZXRZOjAsZmxvYXRpbmc6ITEsc3R5bGU6e2ZvbnRTaXplOlwiMTRweFwiLGZvbnRXZWlnaHQ6OTAwLGZvbnRGYW1pbHk6dm9pZCAwLGNvbG9yOnZvaWQgMH19LHN1YnRpdGxlOnt0ZXh0OnZvaWQgMCxhbGlnbjpcImxlZnRcIixtYXJnaW46NSxvZmZzZXRYOjAsb2Zmc2V0WTozMCxmbG9hdGluZzohMSxzdHlsZTp7Zm9udFNpemU6XCIxMnB4XCIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseTp2b2lkIDAsY29sb3I6dm9pZCAwfX0sc3Ryb2tlOntzaG93OiEwLGN1cnZlOlwic21vb3RoXCIsbGluZUNhcDpcImJ1dHRcIix3aWR0aDoyLGNvbG9yczp2b2lkIDAsZGFzaEFycmF5OjAsZmlsbDp7dHlwZTpcInNvbGlkXCIsY29sb3JzOnZvaWQgMCxvcGFjaXR5Oi44NSxncmFkaWVudDp7c2hhZGU6XCJkYXJrXCIsdHlwZTpcImhvcml6b250YWxcIixzaGFkZUludGVuc2l0eTouNSxncmFkaWVudFRvQ29sb3JzOnZvaWQgMCxpbnZlcnNlQ29sb3JzOiEwLG9wYWNpdHlGcm9tOjEsb3BhY2l0eVRvOjEsc3RvcHM6WzAsNTAsMTAwXSxjb2xvclN0b3BzOltdfX19LHRvb2x0aXA6e2VuYWJsZWQ6ITAsZW5hYmxlZE9uU2VyaWVzOnZvaWQgMCxzaGFyZWQ6ITAsZm9sbG93Q3Vyc29yOiExLGludGVyc2VjdDohMSxpbnZlcnNlT3JkZXI6ITEsY3VzdG9tOnZvaWQgMCxmaWxsU2VyaWVzQ29sb3I6ITEsdGhlbWU6XCJsaWdodFwiLGNzc0NsYXNzOlwiXCIsc3R5bGU6e2ZvbnRTaXplOlwiMTJweFwiLGZvbnRGYW1pbHk6dm9pZCAwfSxvbkRhdGFzZXRIb3Zlcjp7aGlnaGxpZ2h0RGF0YVNlcmllczohMX0seDp7c2hvdzohMCxmb3JtYXQ6XCJkZCBNTU1cIixmb3JtYXR0ZXI6dm9pZCAwfSx5Ontmb3JtYXR0ZXI6dm9pZCAwLHRpdGxlOntmb3JtYXR0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dCtcIjogXCI6XCJcIn19fSx6Ontmb3JtYXR0ZXI6dm9pZCAwLHRpdGxlOlwiU2l6ZTogXCJ9LG1hcmtlcjp7c2hvdzohMCxmaWxsQ29sb3JzOnZvaWQgMH0saXRlbXM6e2Rpc3BsYXk6XCJmbGV4XCJ9LGZpeGVkOntlbmFibGVkOiExLHBvc2l0aW9uOlwidG9wUmlnaHRcIixvZmZzZXRYOjAsb2Zmc2V0WTowfX0seGF4aXM6e3R5cGU6XCJjYXRlZ29yeVwiLGNhdGVnb3JpZXM6W10sY29udmVydGVkQ2F0VG9OdW1lcmljOiExLG9mZnNldFg6MCxvZmZzZXRZOjAsb3ZlcndyaXRlQ2F0ZWdvcmllczp2b2lkIDAsbGFiZWxzOntzaG93OiEwLHJvdGF0ZTotNDUscm90YXRlQWx3YXlzOiExLGhpZGVPdmVybGFwcGluZ0xhYmVsczohMCx0cmltOiExLG1pbkhlaWdodDp2b2lkIDAsbWF4SGVpZ2h0OjEyMCxzaG93RHVwbGljYXRlczohMCxzdHlsZTp7Y29sb3JzOltdLGZvbnRTaXplOlwiMTJweFwiLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6dm9pZCAwLGNzc0NsYXNzOlwiXCJ9LG9mZnNldFg6MCxvZmZzZXRZOjAsZm9ybWF0OnZvaWQgMCxmb3JtYXR0ZXI6dm9pZCAwLGRhdGV0aW1lVVRDOiEwLGRhdGV0aW1lRm9ybWF0dGVyOnt5ZWFyOlwieXl5eVwiLG1vbnRoOlwiTU1NICd5eVwiLGRheTpcImRkIE1NTVwiLGhvdXI6XCJISDptbVwiLG1pbnV0ZTpcIkhIOm1tOnNzXCIsc2Vjb25kOlwiSEg6bW06c3NcIn19LGdyb3VwOntncm91cHM6W10sc3R5bGU6e2NvbG9yczpbXSxmb250U2l6ZTpcIjEycHhcIixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OnZvaWQgMCxjc3NDbGFzczpcIlwifX0sYXhpc0JvcmRlcjp7c2hvdzohMCxjb2xvcjpcIiNlMGUwZTBcIix3aWR0aDpcIjEwMCVcIixoZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowfSxheGlzVGlja3M6e3Nob3c6ITAsY29sb3I6XCIjZTBlMGUwXCIsaGVpZ2h0OjYsb2Zmc2V0WDowLG9mZnNldFk6MH0sdGlja0Ftb3VudDp2b2lkIDAsdGlja1BsYWNlbWVudDpcIm9uXCIsbWluOnZvaWQgMCxtYXg6dm9pZCAwLHJhbmdlOnZvaWQgMCxmbG9hdGluZzohMSxkZWNpbWFsc0luRmxvYXQ6dm9pZCAwLHBvc2l0aW9uOlwiYm90dG9tXCIsdGl0bGU6e3RleHQ6dm9pZCAwLG9mZnNldFg6MCxvZmZzZXRZOjAsc3R5bGU6e2NvbG9yOnZvaWQgMCxmb250U2l6ZTpcIjEycHhcIixmb250V2VpZ2h0OjkwMCxmb250RmFtaWx5OnZvaWQgMCxjc3NDbGFzczpcIlwifX0sY3Jvc3NoYWlyczp7c2hvdzohMCx3aWR0aDoxLHBvc2l0aW9uOlwiYmFja1wiLG9wYWNpdHk6Ljksc3Ryb2tlOntjb2xvcjpcIiNiNmI2YjZcIix3aWR0aDoxLGRhc2hBcnJheTozfSxmaWxsOnt0eXBlOlwic29saWRcIixjb2xvcjpcIiNCMUI5QzRcIixncmFkaWVudDp7Y29sb3JGcm9tOlwiI0Q4RTNGMFwiLGNvbG9yVG86XCIjQkVEMUU2XCIsc3RvcHM6WzAsMTAwXSxvcGFjaXR5RnJvbTouNCxvcGFjaXR5VG86LjV9fSxkcm9wU2hhZG93OntlbmFibGVkOiExLGxlZnQ6MCx0b3A6MCxibHVyOjEsb3BhY2l0eTouNH19LHRvb2x0aXA6e2VuYWJsZWQ6ITAsb2Zmc2V0WTowLGZvcm1hdHRlcjp2b2lkIDAsc3R5bGU6e2ZvbnRTaXplOlwiMTJweFwiLGZvbnRGYW1pbHk6dm9pZCAwfX19LHlheGlzOnRoaXMueUF4aXMsdGhlbWU6e21vZGU6XCJsaWdodFwiLHBhbGV0dGU6XCJwYWxldHRlMVwiLG1vbm9jaHJvbWU6e2VuYWJsZWQ6ITEsY29sb3I6XCIjMDA4RkZCXCIsc2hhZGVUbzpcImxpZ2h0XCIsc2hhZGVJbnRlbnNpdHk6LjY1fX19fX1dKSx0fSgpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLncsdGhpcy5ncmFwaGljcz1uZXcgbSh0aGlzLmN0eCksdGhpcy53Lmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsJiYodGhpcy5pbnZlcnRBeGlzPSEwKSx0aGlzLmhlbHBlcnM9bmV3IHcodGhpcyksdGhpcy54QXhpc0Fubm90YXRpb25zPW5ldyBrKHRoaXMpLHRoaXMueUF4aXNBbm5vdGF0aW9ucz1uZXcgQSh0aGlzKSx0aGlzLnBvaW50c0Fubm90YXRpb25zPW5ldyBTKHRoaXMpLHRoaXMudy5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCYmdGhpcy53LmNvbmZpZy55YXhpc1swXS5yZXZlcnNlZCYmKHRoaXMuaW52ZXJzZWRSZXZlcnNlZEF4aXM9ITApLHRoaXMueERpdmlzaW9uPXRoaXMudy5nbG9iYWxzLmdyaWRXaWR0aC90aGlzLncuZ2xvYmFscy5kYXRhUG9pbnRzfXJldHVybiByKHQsW3trZXk6XCJkcmF3QXhlc0Fubm90YXRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnc7aWYodC5nbG9iYWxzLmF4aXNDaGFydHMpe2Zvcih2YXIgZT10aGlzLnlBeGlzQW5ub3RhdGlvbnMuZHJhd1lBeGlzQW5ub3RhdGlvbnMoKSxpPXRoaXMueEF4aXNBbm5vdGF0aW9ucy5kcmF3WEF4aXNBbm5vdGF0aW9ucygpLGE9dGhpcy5wb2ludHNBbm5vdGF0aW9ucy5kcmF3UG9pbnRBbm5vdGF0aW9ucygpLHM9dC5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5lbmFibGVkLHI9W2UsaSxhXSxvPVtpLm5vZGUsZS5ub2RlLGEubm9kZV0sbj0wO248MztuKyspdC5nbG9iYWxzLmRvbS5lbEdyYXBoaWNhbC5hZGQocltuXSksIXN8fHQuZ2xvYmFscy5yZXNpemVkfHx0Lmdsb2JhbHMuZGF0YUNoYW5nZWR8fFwic2NhdHRlclwiIT09dC5jb25maWcuY2hhcnQudHlwZSYmXCJidWJibGVcIiE9PXQuY29uZmlnLmNoYXJ0LnR5cGUmJnQuZ2xvYmFscy5kYXRhUG9pbnRzPjEmJm9bbl0uY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtZWxlbWVudC1oaWRkZW5cIiksdC5nbG9iYWxzLmRlbGF5ZWRFbGVtZW50cy5wdXNoKHtlbDpvW25dLGluZGV4OjB9KTt0aGlzLmhlbHBlcnMuYW5ub3RhdGlvbnNCYWNrZ3JvdW5kKCl9fX0se2tleTpcImRyYXdJbWFnZUFubm9zXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMudy5jb25maWcuYW5ub3RhdGlvbnMuaW1hZ2VzLm1hcCgoZnVuY3Rpb24oZSxpKXt0LmFkZEltYWdlKGUsaSl9KSl9fSx7a2V5OlwiZHJhd1RleHRBbm5vc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLncuY29uZmlnLmFubm90YXRpb25zLnRleHRzLm1hcCgoZnVuY3Rpb24oZSxpKXt0LmFkZFRleHQoZSxpKX0pKX19LHtrZXk6XCJhZGRYYXhpc0Fubm90YXRpb25cIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy54QXhpc0Fubm90YXRpb25zLmFkZFhheGlzQW5ub3RhdGlvbih0LGUsaSl9fSx7a2V5OlwiYWRkWWF4aXNBbm5vdGF0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3RoaXMueUF4aXNBbm5vdGF0aW9ucy5hZGRZYXhpc0Fubm90YXRpb24odCxlLGkpfX0se2tleTpcImFkZFBvaW50QW5ub3RhdGlvblwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt0aGlzLnBvaW50c0Fubm90YXRpb25zLmFkZFBvaW50QW5ub3RhdGlvbih0LGUsaSl9fSx7a2V5OlwiYWRkVGV4dFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC54LGE9dC55LHM9dC50ZXh0LHI9dC50ZXh0QW5jaG9yLG89dC5mb3JlQ29sb3Isbj10LmZvbnRTaXplLGw9dC5mb250RmFtaWx5LGg9dC5mb250V2VpZ2h0LGM9dC5jc3NDbGFzcyxkPXQuYmFja2dyb3VuZENvbG9yLGc9dC5ib3JkZXJXaWR0aCx1PXQuc3Ryb2tlRGFzaEFycmF5LGY9dC5ib3JkZXJSYWRpdXMscD10LmJvcmRlckNvbG9yLHg9dC5hcHBlbmRUbyxiPXZvaWQgMD09PXg/XCIuYXBleGNoYXJ0cy1hbm5vdGF0aW9uc1wiOngsdj10LnBhZGRpbmdMZWZ0LG09dm9pZCAwPT09dj80OnYseT10LnBhZGRpbmdSaWdodCx3PXZvaWQgMD09PXk/NDp5LGs9dC5wYWRkaW5nQm90dG9tLEE9dm9pZCAwPT09az8yOmssUz10LnBhZGRpbmdUb3AsQz12b2lkIDA9PT1TPzI6UyxMPXRoaXMudyxQPXRoaXMuZ3JhcGhpY3MuZHJhd1RleHQoe3g6aSx5OmEsdGV4dDpzLHRleHRBbmNob3I6cnx8XCJzdGFydFwiLGZvbnRTaXplOm58fFwiMTJweFwiLGZvbnRXZWlnaHQ6aHx8XCJyZWd1bGFyXCIsZm9udEZhbWlseTpsfHxMLmNvbmZpZy5jaGFydC5mb250RmFtaWx5LGZvcmVDb2xvcjpvfHxMLmNvbmZpZy5jaGFydC5mb3JlQ29sb3IsY3NzQ2xhc3M6Y30pLFQ9TC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihiKTtUJiZULmFwcGVuZENoaWxkKFAubm9kZSk7dmFyIE09UC5iYm94KCk7aWYocyl7dmFyIEk9dGhpcy5ncmFwaGljcy5kcmF3UmVjdChNLngtbSxNLnktQyxNLndpZHRoK20rdyxNLmhlaWdodCtBK0MsZixkfHxcInRyYW5zcGFyZW50XCIsMSxnLHAsdSk7VC5pbnNlcnRCZWZvcmUoSS5ub2RlLFAubm9kZSl9fX0se2tleTpcImFkZEltYWdlXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLncsYT10LnBhdGgscz10Lngscj12b2lkIDA9PT1zPzA6cyxvPXQueSxuPXZvaWQgMD09PW8/MDpvLGw9dC53aWR0aCxoPXZvaWQgMD09PWw/MjA6bCxjPXQuaGVpZ2h0LGQ9dm9pZCAwPT09Yz8yMDpjLGc9dC5hcHBlbmRUbyx1PXZvaWQgMD09PWc/XCIuYXBleGNoYXJ0cy1hbm5vdGF0aW9uc1wiOmcsZj1pLmdsb2JhbHMuZG9tLlBhcGVyLmltYWdlKGEpO2Yuc2l6ZShoLGQpLm1vdmUocixuKTt2YXIgcD1pLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKHUpO3JldHVybiBwJiZwLmFwcGVuZENoaWxkKGYubm9kZSksZn19LHtrZXk6XCJhZGRYYXhpc0Fubm90YXRpb25FeHRlcm5hbFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5hZGRBbm5vdGF0aW9uRXh0ZXJuYWwoe3BhcmFtczp0LHB1c2hUb01lbW9yeTplLGNvbnRleHQ6aSx0eXBlOlwieGF4aXNcIixjb250ZXh0TWV0aG9kOmkuYWRkWGF4aXNBbm5vdGF0aW9ufSksaX19LHtrZXk6XCJhZGRZYXhpc0Fubm90YXRpb25FeHRlcm5hbFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5hZGRBbm5vdGF0aW9uRXh0ZXJuYWwoe3BhcmFtczp0LHB1c2hUb01lbW9yeTplLGNvbnRleHQ6aSx0eXBlOlwieWF4aXNcIixjb250ZXh0TWV0aG9kOmkuYWRkWWF4aXNBbm5vdGF0aW9ufSksaX19LHtrZXk6XCJhZGRQb2ludEFubm90YXRpb25FeHRlcm5hbFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5pbnZlcnRBeGlzJiYodGhpcy5pbnZlcnRBeGlzPWkudy5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCksdGhpcy5hZGRBbm5vdGF0aW9uRXh0ZXJuYWwoe3BhcmFtczp0LHB1c2hUb01lbW9yeTplLGNvbnRleHQ6aSx0eXBlOlwicG9pbnRcIixjb250ZXh0TWV0aG9kOmkuYWRkUG9pbnRBbm5vdGF0aW9ufSksaX19LHtrZXk6XCJhZGRBbm5vdGF0aW9uRXh0ZXJuYWxcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnBhcmFtcyxpPXQucHVzaFRvTWVtb3J5LGE9dC5jb250ZXh0LHM9dC50eXBlLHI9dC5jb250ZXh0TWV0aG9kLG89YSxuPW8udyxsPW4uZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1cIi5jb25jYXQocyxcIi1hbm5vdGF0aW9uc1wiKSksaD1sLmNoaWxkTm9kZXMubGVuZ3RoKzEsYz1uZXcgTCxkPU9iamVjdC5hc3NpZ24oe30sXCJ4YXhpc1wiPT09cz9jLnhBeGlzQW5ub3RhdGlvbjpcInlheGlzXCI9PT1zP2MueUF4aXNBbm5vdGF0aW9uOmMucG9pbnRBbm5vdGF0aW9uKSxnPXguZXh0ZW5kKGQsZSk7c3dpdGNoKHMpe2Nhc2VcInhheGlzXCI6dGhpcy5hZGRYYXhpc0Fubm90YXRpb24oZyxsLGgpO2JyZWFrO2Nhc2VcInlheGlzXCI6dGhpcy5hZGRZYXhpc0Fubm90YXRpb24oZyxsLGgpO2JyZWFrO2Nhc2VcInBvaW50XCI6dGhpcy5hZGRQb2ludEFubm90YXRpb24oZyxsLGgpfXZhciB1PW4uZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1cIi5jb25jYXQocyxcIi1hbm5vdGF0aW9ucyAuYXBleGNoYXJ0cy1cIikuY29uY2F0KHMsXCItYW5ub3RhdGlvbi1sYWJlbFtyZWw9J1wiKS5jb25jYXQoaCxcIiddXCIpKSxmPXRoaXMuaGVscGVycy5hZGRCYWNrZ3JvdW5kVG9Bbm5vKHUsZyk7cmV0dXJuIGYmJmwuaW5zZXJ0QmVmb3JlKGYubm9kZSx1KSxpJiZuLmdsb2JhbHMubWVtb3J5Lm1ldGhvZHNUb0V4ZWMucHVzaCh7Y29udGV4dDpvLGlkOmcuaWQ/Zy5pZDp4LnJhbmRvbUlkKCksbWV0aG9kOnIsbGFiZWw6XCJhZGRBbm5vdGF0aW9uXCIscGFyYW1zOmV9KSxhfX0se2tleTpcImNsZWFyQW5ub3RhdGlvbnNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LncsaT1lLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFwZXhjaGFydHMteWF4aXMtYW5ub3RhdGlvbnMsIC5hcGV4Y2hhcnRzLXhheGlzLWFubm90YXRpb25zLCAuYXBleGNoYXJ0cy1wb2ludC1hbm5vdGF0aW9uc1wiKTtlLmdsb2JhbHMubWVtb3J5Lm1ldGhvZHNUb0V4ZWMubWFwKChmdW5jdGlvbih0LGkpe1wiYWRkVGV4dFwiIT09dC5sYWJlbCYmXCJhZGRBbm5vdGF0aW9uXCIhPT10LmxhYmVsfHxlLmdsb2JhbHMubWVtb3J5Lm1ldGhvZHNUb0V4ZWMuc3BsaWNlKGksMSl9KSksaT14Lmxpc3RUb0FycmF5KGkpLEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoaSwoZnVuY3Rpb24odCl7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX0pKX19LHtrZXk6XCJyZW1vdmVBbm5vdGF0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10LncsYT1pLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiLmNvbmNhdChlKSk7YSYmKGkuZ2xvYmFscy5tZW1vcnkubWV0aG9kc1RvRXhlYy5tYXAoKGZ1bmN0aW9uKHQsYSl7dC5pZD09PWUmJmkuZ2xvYmFscy5tZW1vcnkubWV0aG9kc1RvRXhlYy5zcGxpY2UoYSwxKX0pKSxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGEsKGZ1bmN0aW9uKHQpe3QucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0KX0pKSl9fV0pLHR9KCksVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUudyx0aGlzLm1vbnRoczMxPVsxLDMsNSw3LDgsMTAsMTJdLHRoaXMubW9udGhzMzA9WzIsNCw2LDksMTFdLHRoaXMuZGF5c0NudE9mWWVhcj1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XX1yZXR1cm4gcih0LFt7a2V5OlwiaXNWYWxpZERhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4haXNOYU4odGhpcy5wYXJzZURhdGUodCkpfX0se2tleTpcImdldFRpbWVTdGFtcFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBEYXRlLnBhcnNlKHQpP3RoaXMudy5jb25maWcueGF4aXMubGFiZWxzLmRhdGV0aW1lVVRDP25ldyBEYXRlKG5ldyBEYXRlKHQpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsMjUpKS5nZXRUaW1lKCk6bmV3IERhdGUodCkuZ2V0VGltZSgpOnR9fSx7a2V5OlwiZ2V0RGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLncuY29uZmlnLnhheGlzLmxhYmVscy5kYXRldGltZVVUQz9uZXcgRGF0ZShuZXcgRGF0ZSh0KS50b1VUQ1N0cmluZygpKTpuZXcgRGF0ZSh0KX19LHtrZXk6XCJwYXJzZURhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1EYXRlLnBhcnNlKHQpO2lmKCFpc05hTihlKSlyZXR1cm4gdGhpcy5nZXRUaW1lU3RhbXAodCk7dmFyIGk9RGF0ZS5wYXJzZSh0LnJlcGxhY2UoLy0vZyxcIi9cIikucmVwbGFjZSgvW2Etel0rL2dpLFwiIFwiKSk7cmV0dXJuIGk9dGhpcy5nZXRUaW1lU3RhbXAoaSl9fSx7a2V5OlwicGFyc2VEYXRlV2l0aFRpbWV6b25lXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIERhdGUucGFyc2UodC5yZXBsYWNlKC8tL2csXCIvXCIpLnJlcGxhY2UoL1thLXpdKy9naSxcIiBcIikpfX0se2tleTpcImZvcm1hdERhdGVcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudy5nbG9iYWxzLmxvY2FsZSxhPXRoaXMudy5jb25maWcueGF4aXMubGFiZWxzLmRhdGV0aW1lVVRDLHM9W1wiXFwwXCJdLmNvbmNhdCh1KGkubW9udGhzKSkscj1bXCJcXHgwMVwiXS5jb25jYXQodShpLnNob3J0TW9udGhzKSksbz1bXCJcXHgwMlwiXS5jb25jYXQodShpLmRheXMpKSxuPVtcIlxceDAzXCJdLmNvbmNhdCh1KGkuc2hvcnREYXlzKSk7ZnVuY3Rpb24gbCh0LGUpe3ZhciBpPXQrXCJcIjtmb3IoZT1lfHwyO2kubGVuZ3RoPGU7KWk9XCIwXCIraTtyZXR1cm4gaX12YXIgaD1hP3QuZ2V0VVRDRnVsbFllYXIoKTp0LmdldEZ1bGxZZWFyKCk7ZT0oZT0oZT1lLnJlcGxhY2UoLyhefFteXFxcXF0peXl5eSsvZyxcIiQxXCIraCkpLnJlcGxhY2UoLyhefFteXFxcXF0peXkvZyxcIiQxXCIraC50b1N0cmluZygpLnN1YnN0cigyLDIpKSkucmVwbGFjZSgvKF58W15cXFxcXSl5L2csXCIkMVwiK2gpO3ZhciBjPShhP3QuZ2V0VVRDTW9udGgoKTp0LmdldE1vbnRoKCkpKzE7ZT0oZT0oZT0oZT1lLnJlcGxhY2UoLyhefFteXFxcXF0pTU1NTSsvZyxcIiQxXCIrc1swXSkpLnJlcGxhY2UoLyhefFteXFxcXF0pTU1NL2csXCIkMVwiK3JbMF0pKS5yZXBsYWNlKC8oXnxbXlxcXFxdKU1NL2csXCIkMVwiK2woYykpKS5yZXBsYWNlKC8oXnxbXlxcXFxdKU0vZyxcIiQxXCIrYyk7dmFyIGQ9YT90LmdldFVUQ0RhdGUoKTp0LmdldERhdGUoKTtlPShlPShlPShlPWUucmVwbGFjZSgvKF58W15cXFxcXSlkZGRkKy9nLFwiJDFcIitvWzBdKSkucmVwbGFjZSgvKF58W15cXFxcXSlkZGQvZyxcIiQxXCIrblswXSkpLnJlcGxhY2UoLyhefFteXFxcXF0pZGQvZyxcIiQxXCIrbChkKSkpLnJlcGxhY2UoLyhefFteXFxcXF0pZC9nLFwiJDFcIitkKTt2YXIgZz1hP3QuZ2V0VVRDSG91cnMoKTp0LmdldEhvdXJzKCksZj1nPjEyP2ctMTI6MD09PWc/MTI6ZztlPShlPShlPShlPWUucmVwbGFjZSgvKF58W15cXFxcXSlISCsvZyxcIiQxXCIrbChnKSkpLnJlcGxhY2UoLyhefFteXFxcXF0pSC9nLFwiJDFcIitnKSkucmVwbGFjZSgvKF58W15cXFxcXSloaCsvZyxcIiQxXCIrbChmKSkpLnJlcGxhY2UoLyhefFteXFxcXF0paC9nLFwiJDFcIitmKTt2YXIgcD1hP3QuZ2V0VVRDTWludXRlcygpOnQuZ2V0TWludXRlcygpO2U9KGU9ZS5yZXBsYWNlKC8oXnxbXlxcXFxdKW1tKy9nLFwiJDFcIitsKHApKSkucmVwbGFjZSgvKF58W15cXFxcXSltL2csXCIkMVwiK3ApO3ZhciB4PWE/dC5nZXRVVENTZWNvbmRzKCk6dC5nZXRTZWNvbmRzKCk7ZT0oZT1lLnJlcGxhY2UoLyhefFteXFxcXF0pc3MrL2csXCIkMVwiK2woeCkpKS5yZXBsYWNlKC8oXnxbXlxcXFxdKXMvZyxcIiQxXCIreCk7dmFyIGI9YT90LmdldFVUQ01pbGxpc2Vjb25kcygpOnQuZ2V0TWlsbGlzZWNvbmRzKCk7ZT1lLnJlcGxhY2UoLyhefFteXFxcXF0pZmZmKy9nLFwiJDFcIitsKGIsMykpLGI9TWF0aC5yb3VuZChiLzEwKSxlPWUucmVwbGFjZSgvKF58W15cXFxcXSlmZi9nLFwiJDFcIitsKGIpKSxiPU1hdGgucm91bmQoYi8xMCk7dmFyIHY9ZzwxMj9cIkFNXCI6XCJQTVwiO2U9KGU9KGU9ZS5yZXBsYWNlKC8oXnxbXlxcXFxdKWYvZyxcIiQxXCIrYikpLnJlcGxhY2UoLyhefFteXFxcXF0pVFQrL2csXCIkMVwiK3YpKS5yZXBsYWNlKC8oXnxbXlxcXFxdKVQvZyxcIiQxXCIrdi5jaGFyQXQoMCkpO3ZhciBtPXYudG9Mb3dlckNhc2UoKTtlPShlPWUucmVwbGFjZSgvKF58W15cXFxcXSl0dCsvZyxcIiQxXCIrbSkpLnJlcGxhY2UoLyhefFteXFxcXF0pdC9nLFwiJDFcIittLmNoYXJBdCgwKSk7dmFyIHk9LXQuZ2V0VGltZXpvbmVPZmZzZXQoKSx3PWF8fCF5P1wiWlwiOnk+MD9cIitcIjpcIi1cIjtpZighYSl7dmFyIGs9KHk9TWF0aC5hYnMoeSkpJTYwO3crPWwoTWF0aC5mbG9vcih5LzYwKSkrXCI6XCIrbChrKX1lPWUucmVwbGFjZSgvKF58W15cXFxcXSlLL2csXCIkMVwiK3cpO3ZhciBBPShhP3QuZ2V0VVRDRGF5KCk6dC5nZXREYXkoKSkrMTtyZXR1cm4gZT0oZT0oZT0oZT0oZT1lLnJlcGxhY2UobmV3IFJlZ0V4cChvWzBdLFwiZ1wiKSxvW0FdKSkucmVwbGFjZShuZXcgUmVnRXhwKG5bMF0sXCJnXCIpLG5bQV0pKS5yZXBsYWNlKG5ldyBSZWdFeHAoc1swXSxcImdcIiksc1tjXSkpLnJlcGxhY2UobmV3IFJlZ0V4cChyWzBdLFwiZ1wiKSxyW2NdKSkucmVwbGFjZSgvXFxcXCguKS9nLFwiJDFcIil9fSx7a2V5OlwiZ2V0VGltZVVuaXRzZnJvbVRpbWVzdGFtcFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10aGlzLnc7dm9pZCAwIT09YS5jb25maWcueGF4aXMubWluJiYodD1hLmNvbmZpZy54YXhpcy5taW4pLHZvaWQgMCE9PWEuY29uZmlnLnhheGlzLm1heCYmKGU9YS5jb25maWcueGF4aXMubWF4KTt2YXIgcz10aGlzLmdldERhdGUodCkscj10aGlzLmdldERhdGUoZSksbz10aGlzLmZvcm1hdERhdGUocyxcInl5eXkgTU0gZGQgSEggbW0gc3MgZmZmXCIpLnNwbGl0KFwiIFwiKSxuPXRoaXMuZm9ybWF0RGF0ZShyLFwieXl5eSBNTSBkZCBISCBtbSBzcyBmZmZcIikuc3BsaXQoXCIgXCIpO3JldHVybnttaW5NaWxsaXNlY29uZDpwYXJzZUludChvWzZdLDEwKSxtYXhNaWxsaXNlY29uZDpwYXJzZUludChuWzZdLDEwKSxtaW5TZWNvbmQ6cGFyc2VJbnQob1s1XSwxMCksbWF4U2Vjb25kOnBhcnNlSW50KG5bNV0sMTApLG1pbk1pbnV0ZTpwYXJzZUludChvWzRdLDEwKSxtYXhNaW51dGU6cGFyc2VJbnQobls0XSwxMCksbWluSG91cjpwYXJzZUludChvWzNdLDEwKSxtYXhIb3VyOnBhcnNlSW50KG5bM10sMTApLG1pbkRhdGU6cGFyc2VJbnQob1syXSwxMCksbWF4RGF0ZTpwYXJzZUludChuWzJdLDEwKSxtaW5Nb250aDpwYXJzZUludChvWzFdLDEwKS0xLG1heE1vbnRoOnBhcnNlSW50KG5bMV0sMTApLTEsbWluWWVhcjpwYXJzZUludChvWzBdLDEwKSxtYXhZZWFyOnBhcnNlSW50KG5bMF0sMTApfX19LHtrZXk6XCJpc0xlYXBZZWFyXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQlND09MCYmdCUxMDAhPTB8fHQlNDAwPT0wfX0se2tleTpcImNhbGN1bGNhdGVMYXN0RGF5c09mTW9udGhcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuZGV0ZXJtaW5lRGF5c09mTW9udGhzKHQsZSktaX19LHtrZXk6XCJkZXRlcm1pbmVEYXlzT2ZZZWFyXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9MzY1O3JldHVybiB0aGlzLmlzTGVhcFllYXIodCkmJihlPTM2NiksZX19LHtrZXk6XCJkZXRlcm1pbmVSZW1haW5pbmdEYXlzT2ZZZWFyXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMuZGF5c0NudE9mWWVhcltlXStpO3JldHVybiBlPjEmJnRoaXMuaXNMZWFwWWVhcigpJiZhKyssYX19LHtrZXk6XCJkZXRlcm1pbmVEYXlzT2ZNb250aHNcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPTMwO3N3aXRjaCh0PXgubW9udGhNb2QodCksITApe2Nhc2UgdGhpcy5tb250aHMzMC5pbmRleE9mKHQpPi0xOjI9PT10JiYoaT10aGlzLmlzTGVhcFllYXIoZSk/Mjk6MjgpO2JyZWFrO2Nhc2UgdGhpcy5tb250aHMzMS5pbmRleE9mKHQpPi0xOmRlZmF1bHQ6aT0zMX1yZXR1cm4gaX19XSksdH0oKSxNPWZ1bmN0aW9uKHQpe3ZhciBlLGk9dC5jdHgsYT10LnNlcmllc0luZGV4LHM9dC5kYXRhUG9pbnRJbmRleCxyPXQueTEsbz10LnkyLG49dC53LGw9bi5nbG9iYWxzLnNlcmllc1JhbmdlU3RhcnRbYV1bc10saD1uLmdsb2JhbHMuc2VyaWVzUmFuZ2VFbmRbYV1bc10sYz1uLmdsb2JhbHMubGFiZWxzW3NdLGQ9bi5jb25maWcuc2VyaWVzW2FdLm5hbWU/bi5jb25maWcuc2VyaWVzW2FdLm5hbWU6XCJcIixnPW4uY29uZmlnLnRvb2x0aXAueS5mb3JtYXR0ZXIsdT1uLmNvbmZpZy50b29sdGlwLnkudGl0bGUuZm9ybWF0dGVyLGY9e3c6bixzZXJpZXNJbmRleDphLGRhdGFQb2ludEluZGV4OnMsc3RhcnQ6bCxlbmQ6aH07XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKGQ9dShkLGYpKSxudWxsIT09KGU9bi5jb25maWcuc2VyaWVzW2FdLmRhdGFbc10pJiZ2b2lkIDAhPT1lJiZlLngmJihjPW4uY29uZmlnLnNlcmllc1thXS5kYXRhW3NdLngrXCI6XCIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGcmJihjPWcoYyxmKSksTnVtYmVyLmlzRmluaXRlKHIpJiZOdW1iZXIuaXNGaW5pdGUobykmJihsPXIsaD1vKTt2YXIgcD1cIlwiLHg9XCJcIixiPW4uZ2xvYmFscy5jb2xvcnNbYV07aWYodm9pZCAwPT09bi5jb25maWcudG9vbHRpcC54LmZvcm1hdHRlcilpZihcImRhdGV0aW1lXCI9PT1uLmNvbmZpZy54YXhpcy50eXBlKXt2YXIgdj1uZXcgVChpKTtwPXYuZm9ybWF0RGF0ZSh2LmdldERhdGUobCksbi5jb25maWcudG9vbHRpcC54LmZvcm1hdCkseD12LmZvcm1hdERhdGUodi5nZXREYXRlKGgpLG4uY29uZmlnLnRvb2x0aXAueC5mb3JtYXQpfWVsc2UgcD1sLHg9aDtlbHNlIHA9bi5jb25maWcudG9vbHRpcC54LmZvcm1hdHRlcihsKSx4PW4uY29uZmlnLnRvb2x0aXAueC5mb3JtYXR0ZXIoaCk7cmV0dXJue3N0YXJ0OmwsZW5kOmgsc3RhcnRWYWw6cCxlbmRWYWw6eCx5bGFiZWw6Yyxjb2xvcjpiLHNlcmllc05hbWU6ZH19LEk9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb2xvcixpPXQuc2VyaWVzTmFtZSxhPXQueWxhYmVsLHM9dC5zdGFydCxyPXQuZW5kLG89dC5zZXJpZXNJbmRleCxuPXQuZGF0YVBvaW50SW5kZXgsbD10LmN0eC50b29sdGlwLnRvb2x0aXBMYWJlbHMuZ2V0Rm9ybWF0dGVycyhvKTtzPWwueUxiRm9ybWF0dGVyKHMpLHI9bC55TGJGb3JtYXR0ZXIocik7dmFyIGg9bC55TGJGb3JtYXR0ZXIodC53Lmdsb2JhbHMuc2VyaWVzW29dW25dKSxjPSc8c3BhbiBjbGFzcz1cInZhbHVlIHN0YXJ0LXZhbHVlXCI+XFxuICAnLmNvbmNhdChzLCdcXG4gIDwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3JcIj4tPC9zcGFuPiA8c3BhbiBjbGFzcz1cInZhbHVlIGVuZC12YWx1ZVwiPlxcbiAgJykuY29uY2F0KHIsXCJcXG4gIDwvc3Bhbj5cIik7cmV0dXJuJzxkaXYgY2xhc3M9XCJhcGV4Y2hhcnRzLXRvb2x0aXAtcmFuZ2ViYXJcIj48ZGl2PiA8c3BhbiBjbGFzcz1cInNlcmllcy1uYW1lXCIgc3R5bGU9XCJjb2xvcjogJytlKydcIj4nKyhpfHxcIlwiKSsnPC9zcGFuPjwvZGl2PjxkaXY+IDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIj4nK2ErXCIgPC9zcGFuPiBcIisodC53Lmdsb2JhbHMuY29tYm9DaGFydHM/XCJyYW5nZUFyZWFcIj09PXQudy5jb25maWcuc2VyaWVzW29dLnR5cGV8fFwicmFuZ2VCYXJcIj09PXQudy5jb25maWcuc2VyaWVzW29dLnR5cGU/YzpcIjxzcGFuPlwiLmNvbmNhdChoLFwiPC9zcGFuPlwiKTpjKStcIiA8L2Rpdj48L2Rpdj5cIn0sWD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMub3B0cz1lfXJldHVybiByKHQsW3trZXk6XCJsaW5lXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57Y2hhcnQ6e2FuaW1hdGlvbnM6e2Vhc2luZzpcInN3aW5nXCJ9fSxkYXRhTGFiZWxzOntlbmFibGVkOiExfSxzdHJva2U6e3dpZHRoOjUsY3VydmU6XCJzdHJhaWdodFwifSxtYXJrZXJzOntzaXplOjAsaG92ZXI6e3NpemVPZmZzZXQ6Nn19LHhheGlzOntjcm9zc2hhaXJzOnt3aWR0aDoxfX19fX0se2tleTpcInNwYXJrbGluZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMub3B0cy55YXhpc1swXS5zaG93PSExLHRoaXMub3B0cy55YXhpc1swXS50aXRsZS50ZXh0PVwiXCIsdGhpcy5vcHRzLnlheGlzWzBdLmF4aXNCb3JkZXIuc2hvdz0hMSx0aGlzLm9wdHMueWF4aXNbMF0uYXhpc1RpY2tzLnNob3c9ITEsdGhpcy5vcHRzLnlheGlzWzBdLmZsb2F0aW5nPSEwO3JldHVybiB4LmV4dGVuZCh0LHtncmlkOntzaG93OiExLHBhZGRpbmc6e2xlZnQ6MCxyaWdodDowLHRvcDowLGJvdHRvbTowfX0sbGVnZW5kOntzaG93OiExfSx4YXhpczp7bGFiZWxzOntzaG93OiExfSx0b29sdGlwOntlbmFibGVkOiExfSxheGlzQm9yZGVyOntzaG93OiExfSxheGlzVGlja3M6e3Nob3c6ITF9fSxjaGFydDp7dG9vbGJhcjp7c2hvdzohMX0sem9vbTp7ZW5hYmxlZDohMX19LGRhdGFMYWJlbHM6e2VuYWJsZWQ6ITF9fSl9fSx7a2V5OlwiYmFyXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57Y2hhcnQ6e3N0YWNrZWQ6ITEsYW5pbWF0aW9uczp7ZWFzaW5nOlwic3dpbmdcIn19LHBsb3RPcHRpb25zOntiYXI6e2RhdGFMYWJlbHM6e3Bvc2l0aW9uOlwiY2VudGVyXCJ9fX0sZGF0YUxhYmVsczp7c3R5bGU6e2NvbG9yczpbXCIjZmZmXCJdfSxiYWNrZ3JvdW5kOntlbmFibGVkOiExfX0sc3Ryb2tlOnt3aWR0aDowLGxpbmVDYXA6XCJyb3VuZFwifSxmaWxsOntvcGFjaXR5Oi44NX0sbGVnZW5kOnttYXJrZXJzOntzaGFwZTpcInNxdWFyZVwiLHJhZGl1czoyLHNpemU6OH19LHRvb2x0aXA6e3NoYXJlZDohMSxpbnRlcnNlY3Q6ITB9LHhheGlzOnt0b29sdGlwOntlbmFibGVkOiExfSx0aWNrUGxhY2VtZW50OlwiYmV0d2VlblwiLGNyb3NzaGFpcnM6e3dpZHRoOlwiYmFyV2lkdGhcIixwb3NpdGlvbjpcImJhY2tcIixmaWxsOnt0eXBlOlwiZ3JhZGllbnRcIn0sZHJvcFNoYWRvdzp7ZW5hYmxlZDohMX0sc3Ryb2tlOnt3aWR0aDowfX19fX19LHtrZXk6XCJjYW5kbGVzdGlja1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm57c3Ryb2tlOnt3aWR0aDoxLGNvbG9yczpbXCIjMzMzXCJdfSxmaWxsOntvcGFjaXR5OjF9LGRhdGFMYWJlbHM6e2VuYWJsZWQ6ITF9LHRvb2x0aXA6e3NoYXJlZDohMCxjdXN0b206ZnVuY3Rpb24oZSl7dmFyIGk9ZS5zZXJpZXNJbmRleCxhPWUuZGF0YVBvaW50SW5kZXgscz1lLnc7cmV0dXJuIHQuX2dldEJveFRvb2x0aXAocyxpLGEsW1wiT3BlblwiLFwiSGlnaFwiLFwiXCIsXCJMb3dcIixcIkNsb3NlXCJdLFwiY2FuZGxlc3RpY2tcIil9fSxzdGF0ZXM6e2FjdGl2ZTp7ZmlsdGVyOnt0eXBlOlwibm9uZVwifX19LHhheGlzOntjcm9zc2hhaXJzOnt3aWR0aDoxfX19fX0se2tleTpcImJveFBsb3RcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJue2NoYXJ0OnthbmltYXRpb25zOntkeW5hbWljQW5pbWF0aW9uOntlbmFibGVkOiExfX19LHN0cm9rZTp7d2lkdGg6MSxjb2xvcnM6W1wiIzI0MjkyZVwiXX0sZGF0YUxhYmVsczp7ZW5hYmxlZDohMX0sdG9vbHRpcDp7c2hhcmVkOiEwLGN1c3RvbTpmdW5jdGlvbihlKXt2YXIgaT1lLnNlcmllc0luZGV4LGE9ZS5kYXRhUG9pbnRJbmRleCxzPWUudztyZXR1cm4gdC5fZ2V0Qm94VG9vbHRpcChzLGksYSxbXCJNaW5pbXVtXCIsXCJRMVwiLFwiTWVkaWFuXCIsXCJRM1wiLFwiTWF4aW11bVwiXSxcImJveFBsb3RcIil9fSxtYXJrZXJzOntzaXplOjUsc3Ryb2tlV2lkdGg6MSxzdHJva2VDb2xvcnM6XCIjMTExXCJ9LHhheGlzOntjcm9zc2hhaXJzOnt3aWR0aDoxfX19fX0se2tleTpcInJhbmdlQmFyXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57c3Ryb2tlOnt3aWR0aDowLGxpbmVDYXA6XCJzcXVhcmVcIn0scGxvdE9wdGlvbnM6e2Jhcjp7Ym9yZGVyUmFkaXVzOjAsZGF0YUxhYmVsczp7cG9zaXRpb246XCJjZW50ZXJcIn19fSxkYXRhTGFiZWxzOntlbmFibGVkOiExLGZvcm1hdHRlcjpmdW5jdGlvbih0LGUpe2UuY3R4O3ZhciBpPWUuc2VyaWVzSW5kZXgsYT1lLmRhdGFQb2ludEluZGV4LHM9ZS53LHI9ZnVuY3Rpb24oKXt2YXIgdD1zLmdsb2JhbHMuc2VyaWVzUmFuZ2VTdGFydFtpXVthXTtyZXR1cm4gcy5nbG9iYWxzLnNlcmllc1JhbmdlRW5kW2ldW2FdLXR9O3JldHVybiBzLmdsb2JhbHMuY29tYm9DaGFydHM/XCJyYW5nZUJhclwiPT09cy5jb25maWcuc2VyaWVzW2ldLnR5cGV8fFwicmFuZ2VBcmVhXCI9PT1zLmNvbmZpZy5zZXJpZXNbaV0udHlwZT9yKCk6dDpyKCl9LGJhY2tncm91bmQ6e2VuYWJsZWQ6ITF9LHN0eWxlOntjb2xvcnM6W1wiI2ZmZlwiXX19LHRvb2x0aXA6e3NoYXJlZDohMSxmb2xsb3dDdXJzb3I6ITAsY3VzdG9tOmZ1bmN0aW9uKHQpe3JldHVybiB0LncuY29uZmlnLnBsb3RPcHRpb25zJiZ0LncuY29uZmlnLnBsb3RPcHRpb25zLmJhciYmdC53LmNvbmZpZy5wbG90T3B0aW9ucy5iYXIuaG9yaXpvbnRhbD9mdW5jdGlvbih0KXt2YXIgZT1NKHQpLGk9ZS5jb2xvcixhPWUuc2VyaWVzTmFtZSxzPWUueWxhYmVsLHI9ZS5zdGFydFZhbCxvPWUuZW5kVmFsO3JldHVybiBJKHtjb2xvcjppLHNlcmllc05hbWU6YSx5bGFiZWw6cyxzdGFydDpyLGVuZDpvfSl9KHQpOmZ1bmN0aW9uKHQpe3ZhciBlPU0odCksaT1lLmNvbG9yLGE9ZS5zZXJpZXNOYW1lLHM9ZS55bGFiZWwscj1lLnN0YXJ0LG89ZS5lbmQ7cmV0dXJuIEkoe2NvbG9yOmksc2VyaWVzTmFtZTphLHlsYWJlbDpzLHN0YXJ0OnIsZW5kOm99KX0odCl9fSx4YXhpczp7dGlja1BsYWNlbWVudDpcImJldHdlZW5cIix0b29sdGlwOntlbmFibGVkOiExfSxjcm9zc2hhaXJzOntzdHJva2U6e3dpZHRoOjB9fX19fX0se2tleTpcImFyZWFcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntzdHJva2U6e3dpZHRoOjQsZmlsbDp7dHlwZTpcInNvbGlkXCIsZ3JhZGllbnQ6e2ludmVyc2VDb2xvcnM6ITEsc2hhZGU6XCJsaWdodFwiLHR5cGU6XCJ2ZXJ0aWNhbFwiLG9wYWNpdHlGcm9tOi42NSxvcGFjaXR5VG86LjUsc3RvcHM6WzAsMTAwLDEwMF19fX0sZmlsbDp7dHlwZTpcImdyYWRpZW50XCIsZ3JhZGllbnQ6e2ludmVyc2VDb2xvcnM6ITEsc2hhZGU6XCJsaWdodFwiLHR5cGU6XCJ2ZXJ0aWNhbFwiLG9wYWNpdHlGcm9tOi42NSxvcGFjaXR5VG86LjUsc3RvcHM6WzAsMTAwLDEwMF19fSxtYXJrZXJzOntzaXplOjAsaG92ZXI6e3NpemVPZmZzZXQ6Nn19LHRvb2x0aXA6e2ZvbGxvd0N1cnNvcjohMX19fX0se2tleTpcInJhbmdlQXJlYVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3N0cm9rZTp7Y3VydmU6XCJzdHJhaWdodFwiLHdpZHRoOjB9LGZpbGw6e3R5cGU6XCJzb2xpZFwiLG9wYWNpdHk6LjZ9LG1hcmtlcnM6e3NpemU6MH0sc3RhdGVzOntob3Zlcjp7ZmlsdGVyOnt0eXBlOlwibm9uZVwifX0sYWN0aXZlOntmaWx0ZXI6e3R5cGU6XCJub25lXCJ9fX0sdG9vbHRpcDp7aW50ZXJzZWN0OiExLHNoYXJlZDohMCxmb2xsb3dDdXJzb3I6ITAsY3VzdG9tOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgaT1NKHQpLGE9aS5jb2xvcixzPWkuc2VyaWVzTmFtZSxyPWkueWxhYmVsLG89aS5zdGFydCxuPWkuZW5kO3JldHVybiBJKGUoZSh7fSx0KSx7fSx7Y29sb3I6YSxzZXJpZXNOYW1lOnMseWxhYmVsOnIsc3RhcnQ6byxlbmQ6bn0pKX0odCl9fX19fSx7a2V5OlwiYnJ1c2hcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4geC5leHRlbmQodCx7Y2hhcnQ6e3Rvb2xiYXI6e2F1dG9TZWxlY3RlZDpcInNlbGVjdGlvblwiLHNob3c6ITF9LHpvb206e2VuYWJsZWQ6ITF9fSxkYXRhTGFiZWxzOntlbmFibGVkOiExfSxzdHJva2U6e3dpZHRoOjF9LHRvb2x0aXA6e2VuYWJsZWQ6ITF9LHhheGlzOnt0b29sdGlwOntlbmFibGVkOiExfX19KX19LHtrZXk6XCJzdGFja2VkMTAwXCIsdmFsdWU6ZnVuY3Rpb24odCl7dC5kYXRhTGFiZWxzPXQuZGF0YUxhYmVsc3x8e30sdC5kYXRhTGFiZWxzLmZvcm1hdHRlcj10LmRhdGFMYWJlbHMuZm9ybWF0dGVyfHx2b2lkIDA7dmFyIGU9dC5kYXRhTGFiZWxzLmZvcm1hdHRlcjtyZXR1cm4gdC55YXhpcy5mb3JFYWNoKChmdW5jdGlvbihlLGkpe3QueWF4aXNbaV0ubWluPTAsdC55YXhpc1tpXS5tYXg9MTAwfSkpLFwiYmFyXCI9PT10LmNoYXJ0LnR5cGUmJih0LmRhdGFMYWJlbHMuZm9ybWF0dGVyPWV8fGZ1bmN0aW9uKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0P3QudG9GaXhlZCgwKStcIiVcIjp0fSksdH19LHtrZXk6XCJjb252ZXJ0Q2F0VG9OdW1lcmljXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljPSEwLHR9fSx7a2V5OlwiY29udmVydENhdFRvTnVtZXJpY1hheGlzXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3QueGF4aXMudHlwZT1cIm51bWVyaWNcIix0LnhheGlzLmxhYmVscz10LnhheGlzLmxhYmVsc3x8e30sdC54YXhpcy5sYWJlbHMuZm9ybWF0dGVyPXQueGF4aXMubGFiZWxzLmZvcm1hdHRlcnx8ZnVuY3Rpb24odCl7cmV0dXJuIHguaXNOdW1iZXIodCk/TWF0aC5mbG9vcih0KTp0fTt2YXIgYT10LnhheGlzLmxhYmVscy5mb3JtYXR0ZXIscz10LnhheGlzLmNhdGVnb3JpZXMmJnQueGF4aXMuY2F0ZWdvcmllcy5sZW5ndGg/dC54YXhpcy5jYXRlZ29yaWVzOnQubGFiZWxzO3JldHVybiBpJiZpLmxlbmd0aCYmKHM9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6U3RyaW5nKHQpfSkpKSxzJiZzLmxlbmd0aCYmKHQueGF4aXMubGFiZWxzLmZvcm1hdHRlcj1mdW5jdGlvbih0KXtyZXR1cm4geC5pc051bWJlcih0KT9hKHNbTWF0aC5mbG9vcih0KS0xXSk6YSh0KX0pLHQueGF4aXMuY2F0ZWdvcmllcz1bXSx0LmxhYmVscz1bXSx0LnhheGlzLnRpY2tBbW91bnQ9dC54YXhpcy50aWNrQW1vdW50fHxcImRhdGFQb2ludHNcIix0fX0se2tleTpcImJ1YmJsZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2RhdGFMYWJlbHM6e3N0eWxlOntjb2xvcnM6W1wiI2ZmZlwiXX19LHRvb2x0aXA6e3NoYXJlZDohMSxpbnRlcnNlY3Q6ITB9LHhheGlzOntjcm9zc2hhaXJzOnt3aWR0aDowfX0sZmlsbDp7dHlwZTpcInNvbGlkXCIsZ3JhZGllbnQ6e3NoYWRlOlwibGlnaHRcIixpbnZlcnNlOiEwLHNoYWRlSW50ZW5zaXR5Oi41NSxvcGFjaXR5RnJvbTouNCxvcGFjaXR5VG86Ljh9fX19fSx7a2V5Olwic2NhdHRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2RhdGFMYWJlbHM6e2VuYWJsZWQ6ITF9LHRvb2x0aXA6e3NoYXJlZDohMSxpbnRlcnNlY3Q6ITB9LG1hcmtlcnM6e3NpemU6NixzdHJva2VXaWR0aDoxLGhvdmVyOntzaXplT2Zmc2V0OjJ9fX19fSx7a2V5OlwiaGVhdG1hcFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2NoYXJ0OntzdGFja2VkOiExfSxmaWxsOntvcGFjaXR5OjF9LGRhdGFMYWJlbHM6e3N0eWxlOntjb2xvcnM6W1wiI2ZmZlwiXX19LHN0cm9rZTp7Y29sb3JzOltcIiNmZmZcIl19LHRvb2x0aXA6e2ZvbGxvd0N1cnNvcjohMCxtYXJrZXI6e3Nob3c6ITF9LHg6e3Nob3c6ITF9fSxsZWdlbmQ6e3Bvc2l0aW9uOlwidG9wXCIsbWFya2Vyczp7c2hhcGU6XCJzcXVhcmVcIixzaXplOjEwLG9mZnNldFk6Mn19LGdyaWQ6e3BhZGRpbmc6e3JpZ2h0OjIwfX19fX0se2tleTpcInRyZWVtYXBcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntjaGFydDp7em9vbTp7ZW5hYmxlZDohMX19LGRhdGFMYWJlbHM6e3N0eWxlOntmb250U2l6ZToxNCxmb250V2VpZ2h0OjYwMCxjb2xvcnM6W1wiI2ZmZlwiXX19LHN0cm9rZTp7c2hvdzohMCx3aWR0aDoyLGNvbG9yczpbXCIjZmZmXCJdfSxsZWdlbmQ6e3Nob3c6ITF9LGZpbGw6e2dyYWRpZW50OntzdG9wczpbMCwxMDBdfX0sdG9vbHRpcDp7Zm9sbG93Q3Vyc29yOiEwLHg6e3Nob3c6ITF9fSxncmlkOntwYWRkaW5nOntsZWZ0OjAscmlnaHQ6MH19LHhheGlzOntjcm9zc2hhaXJzOntzaG93OiExfSx0b29sdGlwOntlbmFibGVkOiExfX19fX0se2tleTpcInBpZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2NoYXJ0Ont0b29sYmFyOntzaG93OiExfX0scGxvdE9wdGlvbnM6e3BpZTp7ZG9udXQ6e2xhYmVsczp7c2hvdzohMX19fX0sZGF0YUxhYmVsczp7Zm9ybWF0dGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvRml4ZWQoMSkrXCIlXCJ9LHN0eWxlOntjb2xvcnM6W1wiI2ZmZlwiXX0sYmFja2dyb3VuZDp7ZW5hYmxlZDohMX0sZHJvcFNoYWRvdzp7ZW5hYmxlZDohMH19LHN0cm9rZTp7Y29sb3JzOltcIiNmZmZcIl19LGZpbGw6e29wYWNpdHk6MSxncmFkaWVudDp7c2hhZGU6XCJsaWdodFwiLHN0b3BzOlswLDEwMF19fSx0b29sdGlwOnt0aGVtZTpcImRhcmtcIixmaWxsU2VyaWVzQ29sb3I6ITB9LGxlZ2VuZDp7cG9zaXRpb246XCJyaWdodFwifX19fSx7a2V5OlwiZG9udXRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntjaGFydDp7dG9vbGJhcjp7c2hvdzohMX19LGRhdGFMYWJlbHM6e2Zvcm1hdHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKDEpK1wiJVwifSxzdHlsZTp7Y29sb3JzOltcIiNmZmZcIl19LGJhY2tncm91bmQ6e2VuYWJsZWQ6ITF9LGRyb3BTaGFkb3c6e2VuYWJsZWQ6ITB9fSxzdHJva2U6e2NvbG9yczpbXCIjZmZmXCJdfSxmaWxsOntvcGFjaXR5OjEsZ3JhZGllbnQ6e3NoYWRlOlwibGlnaHRcIixzaGFkZUludGVuc2l0eTouMzUsc3RvcHM6WzgwLDEwMF0sb3BhY2l0eUZyb206MSxvcGFjaXR5VG86MX19LHRvb2x0aXA6e3RoZW1lOlwiZGFya1wiLGZpbGxTZXJpZXNDb2xvcjohMH0sbGVnZW5kOntwb3NpdGlvbjpcInJpZ2h0XCJ9fX19LHtrZXk6XCJwb2xhckFyZWFcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdHMueWF4aXNbMF0udGlja0Ftb3VudD10aGlzLm9wdHMueWF4aXNbMF0udGlja0Ftb3VudD90aGlzLm9wdHMueWF4aXNbMF0udGlja0Ftb3VudDo2LHtjaGFydDp7dG9vbGJhcjp7c2hvdzohMX19LGRhdGFMYWJlbHM6e2Zvcm1hdHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKDEpK1wiJVwifSxlbmFibGVkOiExfSxzdHJva2U6e3Nob3c6ITAsd2lkdGg6Mn0sZmlsbDp7b3BhY2l0eTouN30sdG9vbHRpcDp7dGhlbWU6XCJkYXJrXCIsZmlsbFNlcmllc0NvbG9yOiEwfSxsZWdlbmQ6e3Bvc2l0aW9uOlwicmlnaHRcIn19fX0se2tleTpcInJhZGFyXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRzLnlheGlzWzBdLmxhYmVscy5vZmZzZXRZPXRoaXMub3B0cy55YXhpc1swXS5sYWJlbHMub2Zmc2V0WT90aGlzLm9wdHMueWF4aXNbMF0ubGFiZWxzLm9mZnNldFk6Nix7ZGF0YUxhYmVsczp7ZW5hYmxlZDohMSxzdHlsZTp7Zm9udFNpemU6XCIxMXB4XCJ9fSxzdHJva2U6e3dpZHRoOjJ9LG1hcmtlcnM6e3NpemU6MyxzdHJva2VXaWR0aDoxLHN0cm9rZU9wYWNpdHk6MX0sZmlsbDp7b3BhY2l0eTouMn0sdG9vbHRpcDp7c2hhcmVkOiExLGludGVyc2VjdDohMCxmb2xsb3dDdXJzb3I6ITB9LGdyaWQ6e3Nob3c6ITF9LHhheGlzOntsYWJlbHM6e2Zvcm1hdHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdH0sc3R5bGU6e2NvbG9yczpbXCIjYThhOGE4XCJdLGZvbnRTaXplOlwiMTFweFwifX0sdG9vbHRpcDp7ZW5hYmxlZDohMX0sY3Jvc3NoYWlyczp7c2hvdzohMX19fX19LHtrZXk6XCJyYWRpYWxCYXJcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybntjaGFydDp7YW5pbWF0aW9uczp7ZHluYW1pY0FuaW1hdGlvbjp7ZW5hYmxlZDohMCxzcGVlZDo4MDB9fSx0b29sYmFyOntzaG93OiExfX0sZmlsbDp7Z3JhZGllbnQ6e3NoYWRlOlwiZGFya1wiLHNoYWRlSW50ZW5zaXR5Oi40LGludmVyc2VDb2xvcnM6ITEsdHlwZTpcImRpYWdvbmFsMlwiLG9wYWNpdHlGcm9tOjEsb3BhY2l0eVRvOjEsc3RvcHM6WzcwLDk4LDEwMF19fSxsZWdlbmQ6e3Nob3c6ITEscG9zaXRpb246XCJyaWdodFwifSx0b29sdGlwOntlbmFibGVkOiExLGZpbGxTZXJpZXNDb2xvcjohMH19fX0se2tleTpcIl9nZXRCb3hUb29sdGlwXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSxzKXt2YXIgcj10Lmdsb2JhbHMuc2VyaWVzQ2FuZGxlT1tlXVtpXSxvPXQuZ2xvYmFscy5zZXJpZXNDYW5kbGVIW2VdW2ldLG49dC5nbG9iYWxzLnNlcmllc0NhbmRsZU1bZV1baV0sbD10Lmdsb2JhbHMuc2VyaWVzQ2FuZGxlTFtlXVtpXSxoPXQuZ2xvYmFscy5zZXJpZXNDYW5kbGVDW2VdW2ldO3JldHVybiB0LmNvbmZpZy5zZXJpZXNbZV0udHlwZSYmdC5jb25maWcuc2VyaWVzW2VdLnR5cGUhPT1zPyc8ZGl2IGNsYXNzPVwiYXBleGNoYXJ0cy1jdXN0b20tdG9vbHRpcFwiPlxcbiAgICAgICAgICAnLmNvbmNhdCh0LmNvbmZpZy5zZXJpZXNbZV0ubmFtZT90LmNvbmZpZy5zZXJpZXNbZV0ubmFtZTpcInNlcmllcy1cIisoZSsxKSxcIjogPHN0cm9uZz5cIikuY29uY2F0KHQuZ2xvYmFscy5zZXJpZXNbZV1baV0sXCI8L3N0cm9uZz5cXG4gICAgICAgIDwvZGl2PlwiKTonPGRpdiBjbGFzcz1cImFwZXhjaGFydHMtdG9vbHRpcC1ib3ggYXBleGNoYXJ0cy10b29sdGlwLScuY29uY2F0KHQuY29uZmlnLmNoYXJ0LnR5cGUsJ1wiPicpK1wiPGRpdj5cIi5jb25jYXQoYVswXSwnOiA8c3BhbiBjbGFzcz1cInZhbHVlXCI+JykrcitcIjwvc3Bhbj48L2Rpdj5cIitcIjxkaXY+XCIuY29uY2F0KGFbMV0sJzogPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPicpK28rXCI8L3NwYW4+PC9kaXY+XCIrKG4/XCI8ZGl2PlwiLmNvbmNhdChhWzJdLCc6IDxzcGFuIGNsYXNzPVwidmFsdWVcIj4nKStuK1wiPC9zcGFuPjwvZGl2PlwiOlwiXCIpK1wiPGRpdj5cIi5jb25jYXQoYVszXSwnOiA8c3BhbiBjbGFzcz1cInZhbHVlXCI+JykrbCtcIjwvc3Bhbj48L2Rpdj5cIitcIjxkaXY+XCIuY29uY2F0KGFbNF0sJzogPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPicpK2grXCI8L3NwYW4+PC9kaXY+PC9kaXY+XCJ9fV0pLHR9KCksej1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMub3B0cz1lfXJldHVybiByKHQsW3trZXk6XCJpbml0XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXNwb25zaXZlT3ZlcnJpZGUsYT10aGlzLm9wdHMscz1uZXcgTCxyPW5ldyBYKGEpO3RoaXMuY2hhcnRUeXBlPWEuY2hhcnQudHlwZSxcImhpc3RvZ3JhbVwiPT09dGhpcy5jaGFydFR5cGUmJihhLmNoYXJ0LnR5cGU9XCJiYXJcIixhPXguZXh0ZW5kKHtwbG90T3B0aW9uczp7YmFyOntjb2x1bW5XaWR0aDpcIjk5Ljk5JVwifX19LGEpKSxhPXRoaXMuZXh0ZW5kWUF4aXMoYSksYT10aGlzLmV4dGVuZEFubm90YXRpb25zKGEpO3ZhciBvPXMuaW5pdCgpLG49e307aWYoYSYmXCJvYmplY3RcIj09PWkoYSkpe3ZhciBsPXt9O2w9LTEhPT1bXCJsaW5lXCIsXCJhcmVhXCIsXCJiYXJcIixcImNhbmRsZXN0aWNrXCIsXCJib3hQbG90XCIsXCJyYW5nZUJhclwiLFwicmFuZ2VBcmVhXCIsXCJoaXN0b2dyYW1cIixcImJ1YmJsZVwiLFwic2NhdHRlclwiLFwiaGVhdG1hcFwiLFwidHJlZW1hcFwiLFwicGllXCIsXCJwb2xhckFyZWFcIixcImRvbnV0XCIsXCJyYWRhclwiLFwicmFkaWFsQmFyXCJdLmluZGV4T2YoYS5jaGFydC50eXBlKT9yW2EuY2hhcnQudHlwZV0oKTpyLmxpbmUoKSxhLmNoYXJ0LmJydXNoJiZhLmNoYXJ0LmJydXNoLmVuYWJsZWQmJihsPXIuYnJ1c2gobCkpLGEuY2hhcnQuc3RhY2tlZCYmXCIxMDAlXCI9PT1hLmNoYXJ0LnN0YWNrVHlwZSYmKGE9ci5zdGFja2VkMTAwKGEpKSx0aGlzLmNoZWNrRm9yRGFya1RoZW1lKHdpbmRvdy5BcGV4KSx0aGlzLmNoZWNrRm9yRGFya1RoZW1lKGEpLGEueGF4aXM9YS54YXhpc3x8d2luZG93LkFwZXgueGF4aXN8fHt9LGV8fChhLnhheGlzLmNvbnZlcnRlZENhdFRvTnVtZXJpYz0hMSksKChhPXRoaXMuY2hlY2tGb3JDYXRUb051bWVyaWNYQXhpcyh0aGlzLmNoYXJ0VHlwZSxsLGEpKS5jaGFydC5zcGFya2xpbmUmJmEuY2hhcnQuc3BhcmtsaW5lLmVuYWJsZWR8fHdpbmRvdy5BcGV4LmNoYXJ0JiZ3aW5kb3cuQXBleC5jaGFydC5zcGFya2xpbmUmJndpbmRvdy5BcGV4LmNoYXJ0LnNwYXJrbGluZS5lbmFibGVkKSYmKGw9ci5zcGFya2xpbmUobCkpLG49eC5leHRlbmQobyxsKX12YXIgaD14LmV4dGVuZChuLHdpbmRvdy5BcGV4KTtyZXR1cm4gbz14LmV4dGVuZChoLGEpLG89dGhpcy5oYW5kbGVVc2VySW5wdXRFcnJvcnMobyl9fSx7a2V5OlwiY2hlY2tGb3JDYXRUb051bWVyaWNYQXhpc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT1uZXcgWChpKSxzPShcImJhclwiPT09dHx8XCJib3hQbG90XCI9PT10KSYmaS5wbG90T3B0aW9ucyYmaS5wbG90T3B0aW9ucy5iYXImJmkucGxvdE9wdGlvbnMuYmFyLmhvcml6b250YWwscj1cInBpZVwiPT09dHx8XCJwb2xhckFyZWFcIj09PXR8fFwiZG9udXRcIj09PXR8fFwicmFkYXJcIj09PXR8fFwicmFkaWFsQmFyXCI9PT10fHxcImhlYXRtYXBcIj09PXQsbz1cImRhdGV0aW1lXCIhPT1pLnhheGlzLnR5cGUmJlwibnVtZXJpY1wiIT09aS54YXhpcy50eXBlLG49aS54YXhpcy50aWNrUGxhY2VtZW50P2kueGF4aXMudGlja1BsYWNlbWVudDplLnhheGlzJiZlLnhheGlzLnRpY2tQbGFjZW1lbnQ7cmV0dXJuIHN8fHJ8fCFvfHxcImJldHdlZW5cIj09PW58fChpPWEuY29udmVydENhdFRvTnVtZXJpYyhpKSksaX19LHtrZXk6XCJleHRlbmRZQXhpc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9bmV3IEw7KHZvaWQgMD09PXQueWF4aXN8fCF0LnlheGlzfHxBcnJheS5pc0FycmF5KHQueWF4aXMpJiYwPT09dC55YXhpcy5sZW5ndGgpJiYodC55YXhpcz17fSksdC55YXhpcy5jb25zdHJ1Y3RvciE9PUFycmF5JiZ3aW5kb3cuQXBleC55YXhpcyYmd2luZG93LkFwZXgueWF4aXMuY29uc3RydWN0b3IhPT1BcnJheSYmKHQueWF4aXM9eC5leHRlbmQodC55YXhpcyx3aW5kb3cuQXBleC55YXhpcykpLHQueWF4aXMuY29uc3RydWN0b3IhPT1BcnJheT90LnlheGlzPVt4LmV4dGVuZChpLnlBeGlzLHQueWF4aXMpXTp0LnlheGlzPXguZXh0ZW5kQXJyYXkodC55YXhpcyxpLnlBeGlzKTt2YXIgYT0hMTt0LnlheGlzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QubG9nYXJpdGhtaWMmJihhPSEwKX0pKTt2YXIgcz10LnNlcmllcztyZXR1cm4gZSYmIXMmJihzPWUuY29uZmlnLnNlcmllcyksYSYmcy5sZW5ndGghPT10LnlheGlzLmxlbmd0aCYmcy5sZW5ndGgmJih0LnlheGlzPXMubWFwKChmdW5jdGlvbihlLGEpe2lmKGUubmFtZXx8KHNbYV0ubmFtZT1cInNlcmllcy1cIi5jb25jYXQoYSsxKSksdC55YXhpc1thXSlyZXR1cm4gdC55YXhpc1thXS5zZXJpZXNOYW1lPXNbYV0ubmFtZSx0LnlheGlzW2FdO3ZhciByPXguZXh0ZW5kKGkueUF4aXMsdC55YXhpc1swXSk7cmV0dXJuIHIuc2hvdz0hMSxyfSkpKSxhJiZzLmxlbmd0aD4xJiZzLmxlbmd0aCE9PXQueWF4aXMubGVuZ3RoJiZjb25zb2xlLndhcm4oXCJBIG11bHRpLXNlcmllcyBsb2dhcml0aG1pYyBjaGFydCBzaG91bGQgaGF2ZSBlcXVhbCBudW1iZXIgb2Ygc2VyaWVzIGFuZCB5LWF4ZXMuIFBsZWFzZSBtYWtlIHN1cmUgdG8gZXF1YWxpemUgYm90aC5cIiksdH19LHtrZXk6XCJleHRlbmRBbm5vdGF0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10LmFubm90YXRpb25zJiYodC5hbm5vdGF0aW9ucz17fSx0LmFubm90YXRpb25zLnlheGlzPVtdLHQuYW5ub3RhdGlvbnMueGF4aXM9W10sdC5hbm5vdGF0aW9ucy5wb2ludHM9W10pLHQ9dGhpcy5leHRlbmRZQXhpc0Fubm90YXRpb25zKHQpLHQ9dGhpcy5leHRlbmRYQXhpc0Fubm90YXRpb25zKHQpLHQ9dGhpcy5leHRlbmRQb2ludEFubm90YXRpb25zKHQpfX0se2tleTpcImV4dGVuZFlBeGlzQW5ub3RhdGlvbnNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgTDtyZXR1cm4gdC5hbm5vdGF0aW9ucy55YXhpcz14LmV4dGVuZEFycmF5KHZvaWQgMCE9PXQuYW5ub3RhdGlvbnMueWF4aXM/dC5hbm5vdGF0aW9ucy55YXhpczpbXSxlLnlBeGlzQW5ub3RhdGlvbiksdH19LHtrZXk6XCJleHRlbmRYQXhpc0Fubm90YXRpb25zXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEw7cmV0dXJuIHQuYW5ub3RhdGlvbnMueGF4aXM9eC5leHRlbmRBcnJheSh2b2lkIDAhPT10LmFubm90YXRpb25zLnhheGlzP3QuYW5ub3RhdGlvbnMueGF4aXM6W10sZS54QXhpc0Fubm90YXRpb24pLHR9fSx7a2V5OlwiZXh0ZW5kUG9pbnRBbm5vdGF0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBMO3JldHVybiB0LmFubm90YXRpb25zLnBvaW50cz14LmV4dGVuZEFycmF5KHZvaWQgMCE9PXQuYW5ub3RhdGlvbnMucG9pbnRzP3QuYW5ub3RhdGlvbnMucG9pbnRzOltdLGUucG9pbnRBbm5vdGF0aW9uKSx0fX0se2tleTpcImNoZWNrRm9yRGFya1RoZW1lXCIsdmFsdWU6ZnVuY3Rpb24odCl7dC50aGVtZSYmXCJkYXJrXCI9PT10LnRoZW1lLm1vZGUmJih0LnRvb2x0aXB8fCh0LnRvb2x0aXA9e30pLFwibGlnaHRcIiE9PXQudG9vbHRpcC50aGVtZSYmKHQudG9vbHRpcC50aGVtZT1cImRhcmtcIiksdC5jaGFydC5mb3JlQ29sb3J8fCh0LmNoYXJ0LmZvcmVDb2xvcj1cIiNmNmY3ZjhcIiksdC5jaGFydC5iYWNrZ3JvdW5kfHwodC5jaGFydC5iYWNrZ3JvdW5kPVwiIzQyNDI0MlwiKSx0LnRoZW1lLnBhbGV0dGV8fCh0LnRoZW1lLnBhbGV0dGU9XCJwYWxldHRlNFwiKSl9fSx7a2V5OlwiaGFuZGxlVXNlcklucHV0RXJyb3JzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dDtpZihlLnRvb2x0aXAuc2hhcmVkJiZlLnRvb2x0aXAuaW50ZXJzZWN0KXRocm93IG5ldyBFcnJvcihcInRvb2x0aXAuc2hhcmVkIGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gdG9vbHRpcC5pbnRlcnNlY3QgaXMgdHJ1ZS4gVHVybiBvZmYgYW55IG90aGVyIG9wdGlvbiBieSBzZXR0aW5nIGl0IHRvIGZhbHNlLlwiKTtpZihcImJhclwiPT09ZS5jaGFydC50eXBlJiZlLnBsb3RPcHRpb25zLmJhci5ob3Jpem9udGFsKXtpZihlLnlheGlzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcihcIk11bHRpcGxlIFkgQXhpcyBmb3IgYmFycyBhcmUgbm90IHN1cHBvcnRlZC4gU3dpdGNoIHRvIGNvbHVtbiBjaGFydCBieSBzZXR0aW5nIHBsb3RPcHRpb25zLmJhci5ob3Jpem9udGFsPWZhbHNlXCIpO2UueWF4aXNbMF0ucmV2ZXJzZWQmJihlLnlheGlzWzBdLm9wcG9zaXRlPSEwKSxlLnhheGlzLnRvb2x0aXAuZW5hYmxlZD0hMSxlLnlheGlzWzBdLnRvb2x0aXAuZW5hYmxlZD0hMSxlLmNoYXJ0Lnpvb20uZW5hYmxlZD0hMX1yZXR1cm5cImJhclwiIT09ZS5jaGFydC50eXBlJiZcInJhbmdlQmFyXCIhPT1lLmNoYXJ0LnR5cGV8fGUudG9vbHRpcC5zaGFyZWQmJlwiYmFyV2lkdGhcIj09PWUueGF4aXMuY3Jvc3NoYWlycy53aWR0aCYmZS5zZXJpZXMubGVuZ3RoPjEmJihlLnhheGlzLmNyb3NzaGFpcnMud2lkdGg9XCJ0aWNrV2lkdGhcIiksXCJjYW5kbGVzdGlja1wiIT09ZS5jaGFydC50eXBlJiZcImJveFBsb3RcIiE9PWUuY2hhcnQudHlwZXx8ZS55YXhpc1swXS5yZXZlcnNlZCYmKGNvbnNvbGUud2FybihcIlJldmVyc2VkIHktYXhpcyBpbiBcIi5jb25jYXQoZS5jaGFydC50eXBlLFwiIGNoYXJ0IGlzIG5vdCBzdXBwb3J0ZWQuXCIpKSxlLnlheGlzWzBdLnJldmVyc2VkPSExKSxlfX1dKSx0fSgpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7YSh0aGlzLHQpfXJldHVybiByKHQsW3trZXk6XCJpbml0R2xvYmFsVmFyc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3Quc2VyaWVzPVtdLHQuc2VyaWVzQ2FuZGxlTz1bXSx0LnNlcmllc0NhbmRsZUg9W10sdC5zZXJpZXNDYW5kbGVNPVtdLHQuc2VyaWVzQ2FuZGxlTD1bXSx0LnNlcmllc0NhbmRsZUM9W10sdC5zZXJpZXNSYW5nZVN0YXJ0PVtdLHQuc2VyaWVzUmFuZ2VFbmQ9W10sdC5zZXJpZXNSYW5nZT1bXSx0LnNlcmllc1BlcmNlbnQ9W10sdC5zZXJpZXNHb2Fscz1bXSx0LnNlcmllc1g9W10sdC5zZXJpZXNaPVtdLHQuc2VyaWVzTmFtZXM9W10sdC5zZXJpZXNUb3RhbHM9W10sdC5zZXJpZXNMb2c9W10sdC5zZXJpZXNDb2xvcnM9W10sdC5zdGFja2VkU2VyaWVzVG90YWxzPVtdLHQuc2VyaWVzWHZhbHVlcz1bXSx0LnNlcmllc1l2YWx1ZXM9W10sdC5sYWJlbHM9W10sdC5oYXNHcm91cHM9ITEsdC5ncm91cHM9W10sdC5jYXRlZ29yeUxhYmVscz1bXSx0LnRpbWVzY2FsZUxhYmVscz1bXSx0Lm5vTGFiZWxzUHJvdmlkZWQ9ITEsdC5yZXNpemVUaW1lcj1udWxsLHQuc2VsZWN0aW9uUmVzaXplVGltZXI9bnVsbCx0LmRlbGF5ZWRFbGVtZW50cz1bXSx0LnBvaW50c0FycmF5PVtdLHQuZGF0YUxhYmVsc1JlY3RzPVtdLHQuaXNYTnVtZXJpYz0hMSx0LnhheGlzTGFiZWxzQ291bnQ9MCx0LnNraXBMYXN0VGltZWxpbmVsYWJlbD0hMSx0LnNraXBGaXJzdFRpbWVsaW5lbGFiZWw9ITEsdC5pc0RhdGFYWVo9ITEsdC5pc011bHRpTGluZVg9ITEsdC5pc011bHRpcGxlWUF4aXM9ITEsdC5tYXhZPS1OdW1iZXIuTUFYX1ZBTFVFLHQubWluWT1OdW1iZXIuTUlOX1ZBTFVFLHQubWluWUFycj1bXSx0Lm1heFlBcnI9W10sdC5tYXhYPS1OdW1iZXIuTUFYX1ZBTFVFLHQubWluWD1OdW1iZXIuTUFYX1ZBTFVFLHQuaW5pdGlhbE1heFg9LU51bWJlci5NQVhfVkFMVUUsdC5pbml0aWFsTWluWD1OdW1iZXIuTUFYX1ZBTFVFLHQubWF4RGF0ZT0wLHQubWluRGF0ZT1OdW1iZXIuTUFYX1ZBTFVFLHQubWluWj1OdW1iZXIuTUFYX1ZBTFVFLHQubWF4Wj0tTnVtYmVyLk1BWF9WQUxVRSx0Lm1pblhEaWZmPU51bWJlci5NQVhfVkFMVUUsdC55QXhpc1NjYWxlPVtdLHQueEF4aXNTY2FsZT1udWxsLHQueEF4aXNUaWNrc1Bvc2l0aW9ucz1bXSx0LnlMYWJlbHNDb29yZHM9W10sdC55VGl0bGVDb29yZHM9W10sdC5iYXJQYWRGb3JOdW1lcmljQXhpcz0wLHQucGFkSG9yaXpvbnRhbD0wLHQueFJhbmdlPTAsdC55UmFuZ2U9W10sdC56UmFuZ2U9MCx0LmRhdGFQb2ludHM9MCx0LnhUaWNrQW1vdW50PTB9fSx7a2V5OlwiZ2xvYmFsVmFyc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybntjaGFydElEOm51bGwsY3VpZDpudWxsLGV2ZW50czp7YmVmb3JlTW91bnQ6W10sbW91bnRlZDpbXSx1cGRhdGVkOltdLGNsaWNrZWQ6W10sc2VsZWN0aW9uOltdLGRhdGFQb2ludFNlbGVjdGlvbjpbXSx6b29tZWQ6W10sc2Nyb2xsZWQ6W119LGNvbG9yczpbXSxjbGllbnRYOm51bGwsY2xpZW50WTpudWxsLGZpbGw6e2NvbG9yczpbXX0sc3Ryb2tlOntjb2xvcnM6W119LGRhdGFMYWJlbHM6e3N0eWxlOntjb2xvcnM6W119fSxyYWRhclBvbHlnb25zOntmaWxsOntjb2xvcnM6W119fSxtYXJrZXJzOntjb2xvcnM6W10sc2l6ZTp0Lm1hcmtlcnMuc2l6ZSxsYXJnZXN0U2l6ZTowfSxhbmltYXRpb25FbmRlZDohMSxpc1RvdWNoRGV2aWNlOlwib250b3VjaHN0YXJ0XCJpbiB3aW5kb3d8fG5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzLGlzRGlydHk6ITEsaXNFeGVjQ2FsbGVkOiExLGluaXRpYWxDb25maWc6bnVsbCxpbml0aWFsU2VyaWVzOltdLGxhc3RYQXhpczpbXSxsYXN0WUF4aXM6W10sY29sdW1uU2VyaWVzOm51bGwsbGFiZWxzOltdLHRpbWVzY2FsZUxhYmVsczpbXSxub0xhYmVsc1Byb3ZpZGVkOiExLGFsbFNlcmllc0NvbGxhcHNlZDohMSxjb2xsYXBzZWRTZXJpZXM6W10sY29sbGFwc2VkU2VyaWVzSW5kaWNlczpbXSxhbmNpbGxhcnlDb2xsYXBzZWRTZXJpZXM6W10sYW5jaWxsYXJ5Q29sbGFwc2VkU2VyaWVzSW5kaWNlczpbXSxyaXNpbmdTZXJpZXM6W10sZGF0YUZvcm1hdFhOdW1lcmljOiExLGNhcHR1cmVkU2VyaWVzSW5kZXg6LTEsY2FwdHVyZWREYXRhUG9pbnRJbmRleDotMSxzZWxlY3RlZERhdGFQb2ludHM6W10sZ29sZGVuUGFkZGluZzozNSxpbnZhbGlkTG9nU2NhbGU6ITEsaWdub3JlWUF4aXNJbmRleGVzOltdLHlBeGlzU2FtZVNjYWxlSW5kaWNlczpbXSxtYXhWYWxzSW5BcnJheUluZGV4OjAscmFkaWFsU2l6ZTowLHNlbGVjdGlvbjp2b2lkIDAsem9vbUVuYWJsZWQ6XCJ6b29tXCI9PT10LmNoYXJ0LnRvb2xiYXIuYXV0b1NlbGVjdGVkJiZ0LmNoYXJ0LnRvb2xiYXIudG9vbHMuem9vbSYmdC5jaGFydC56b29tLmVuYWJsZWQscGFuRW5hYmxlZDpcInBhblwiPT09dC5jaGFydC50b29sYmFyLmF1dG9TZWxlY3RlZCYmdC5jaGFydC50b29sYmFyLnRvb2xzLnBhbixzZWxlY3Rpb25FbmFibGVkOlwic2VsZWN0aW9uXCI9PT10LmNoYXJ0LnRvb2xiYXIuYXV0b1NlbGVjdGVkJiZ0LmNoYXJ0LnRvb2xiYXIudG9vbHMuc2VsZWN0aW9uLHlheGlzOm51bGwsbW91c2Vkb3duOiExLGxhc3RDbGllbnRQb3NpdGlvbjp7fSx2aXNpYmxlWFJhbmdlOnZvaWQgMCx5VmFsdWVEZWNpbWFsOjAsdG90YWw6MCxTVkdOUzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsc3ZnV2lkdGg6MCxzdmdIZWlnaHQ6MCxub0RhdGE6ITEsbG9jYWxlOnt9LGRvbTp7fSxtZW1vcnk6e21ldGhvZHNUb0V4ZWM6W119LHNob3VsZEFuaW1hdGU6ITAsc2tpcExhc3RUaW1lbGluZWxhYmVsOiExLHNraXBGaXJzdFRpbWVsaW5lbGFiZWw6ITEsZGVsYXllZEVsZW1lbnRzOltdLGF4aXNDaGFydHM6ITAsaXNEYXRhWFlaOiExLHJlc2l6ZWQ6ITEscmVzaXplVGltZXI6bnVsbCxjb21ib0NoYXJ0czohMSxkYXRhQ2hhbmdlZDohMSxwcmV2aW91c1BhdGhzOltdLGFsbFNlcmllc0hhc0VxdWFsWDohMCxwb2ludHNBcnJheTpbXSxkYXRhTGFiZWxzUmVjdHM6W10sbGFzdERyYXduRGF0YUxhYmVsc0luZGV4ZXM6W10saGFzTnVsbFZhbHVlczohMSxlYXNpbmc6bnVsbCx6b29tZWQ6ITEsZ3JpZFdpZHRoOjAsZ3JpZEhlaWdodDowLHJvdGF0ZVhMYWJlbHM6ITEsZGVmYXVsdExhYmVsczohMSx4TGFiZWxGb3JtYXR0ZXI6dm9pZCAwLHlMYWJlbEZvcm1hdHRlcnM6W10seGF4aXNUb29sdGlwRm9ybWF0dGVyOnZvaWQgMCx0dEtleUZvcm1hdHRlcjp2b2lkIDAsdHRWYWw6dm9pZCAwLHR0WkZvcm1hdHRlcjp2b2lkIDAsTElORV9IRUlHSFRfUkFUSU86MS42MTgseEF4aXNMYWJlbHNIZWlnaHQ6MCx4QXhpc0dyb3VwTGFiZWxzSGVpZ2h0OjAseEF4aXNMYWJlbHNXaWR0aDowLHlBeGlzTGFiZWxzV2lkdGg6MCxzY2FsZVg6MSxzY2FsZVk6MSx0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHRyYW5zbGF0ZVlBeGlzWDpbXSx5QXhpc1dpZHRoczpbXSx0cmFuc2xhdGVYQXhpc1k6MCx0cmFuc2xhdGVYQXhpc1g6MCx0b29sdGlwOm51bGx9fX0se2tleTpcImluaXRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsb2JhbFZhcnModCk7cmV0dXJuIHRoaXMuaW5pdEdsb2JhbFZhcnMoZSksZS5pbml0aWFsQ29uZmlnPXguZXh0ZW5kKHt9LHQpLGUuaW5pdGlhbFNlcmllcz14LmNsb25lKHQuc2VyaWVzKSxlLmxhc3RYQXhpcz14LmNsb25lKGUuaW5pdGlhbENvbmZpZy54YXhpcyksZS5sYXN0WUF4aXM9eC5jbG9uZShlLmluaXRpYWxDb25maWcueWF4aXMpLGV9fV0pLHR9KCksWT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMub3B0cz1lfXJldHVybiByKHQsW3trZXk6XCJpbml0XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgeih0aGlzLm9wdHMpLmluaXQoe3Jlc3BvbnNpdmVPdmVycmlkZTohMX0pO3JldHVybntjb25maWc6dCxnbG9iYWxzOihuZXcgRSkuaW5pdCh0KX19fV0pLHR9KCksRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUudyx0aGlzLm9wdHM9bnVsbCx0aGlzLnNlcmllc0luZGV4PTB9cmV0dXJuIHIodCxbe2tleTpcImNsaXBwZWRJbWdBcmVhXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53LGk9ZS5jb25maWcsYT1wYXJzZUludChlLmdsb2JhbHMuZ3JpZFdpZHRoLDEwKSxzPXBhcnNlSW50KGUuZ2xvYmFscy5ncmlkSGVpZ2h0LDEwKSxyPWE+cz9hOnMsbz10LmltYWdlLG49MCxsPTA7dm9pZCAwPT09dC53aWR0aCYmdm9pZCAwPT09dC5oZWlnaHQ/dm9pZCAwIT09aS5maWxsLmltYWdlLndpZHRoJiZ2b2lkIDAhPT1pLmZpbGwuaW1hZ2UuaGVpZ2h0PyhuPWkuZmlsbC5pbWFnZS53aWR0aCsxLGw9aS5maWxsLmltYWdlLmhlaWdodCk6KG49cisxLGw9cik6KG49dC53aWR0aCxsPXQuaGVpZ2h0KTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5nbG9iYWxzLlNWR05TLFwicGF0dGVyblwiKTttLnNldEF0dHJzKGgse2lkOnQucGF0dGVybklELHBhdHRlcm5Vbml0czp0LnBhdHRlcm5Vbml0cz90LnBhdHRlcm5Vbml0czpcInVzZXJTcGFjZU9uVXNlXCIsd2lkdGg6bitcInB4XCIsaGVpZ2h0OmwrXCJweFwifSk7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuZ2xvYmFscy5TVkdOUyxcImltYWdlXCIpO2guYXBwZW5kQ2hpbGQoYyksYy5zZXRBdHRyaWJ1dGVOUyh3aW5kb3cuU1ZHLnhsaW5rLFwiaHJlZlwiLG8pLG0uc2V0QXR0cnMoYyx7eDowLHk6MCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwiLHdpZHRoOm4rXCJweFwiLGhlaWdodDpsK1wicHhcIn0pLGMuc3R5bGUub3BhY2l0eT10Lm9wYWNpdHksZS5nbG9iYWxzLmRvbS5lbERlZnMubm9kZS5hcHBlbmRDaGlsZChoKX19LHtrZXk6XCJnZXRTZXJpZXNJbmRleFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudztyZXR1cm4oXCJiYXJcIj09PWUuY29uZmlnLmNoYXJ0LnR5cGV8fFwicmFuZ2VCYXJcIj09PWUuY29uZmlnLmNoYXJ0LnR5cGUpJiZlLmNvbmZpZy5wbG90T3B0aW9ucy5iYXIuZGlzdHJpYnV0ZWR8fFwiaGVhdG1hcFwiPT09ZS5jb25maWcuY2hhcnQudHlwZXx8XCJ0cmVlbWFwXCI9PT1lLmNvbmZpZy5jaGFydC50eXBlP3RoaXMuc2VyaWVzSW5kZXg9dC5zZXJpZXNOdW1iZXI6dGhpcy5zZXJpZXNJbmRleD10LnNlcmllc051bWJlciVlLmdsb2JhbHMuc2VyaWVzLmxlbmd0aCx0aGlzLnNlcmllc0luZGV4fX0se2tleTpcImZpbGxQYXRoXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53O3RoaXMub3B0cz10O3ZhciBpLGEscyxyPXRoaXMudy5jb25maWc7dGhpcy5zZXJpZXNJbmRleD10aGlzLmdldFNlcmllc0luZGV4KHQpO3ZhciBvPXRoaXMuZ2V0RmlsbENvbG9ycygpW3RoaXMuc2VyaWVzSW5kZXhdO3ZvaWQgMCE9PWUuZ2xvYmFscy5zZXJpZXNDb2xvcnNbdGhpcy5zZXJpZXNJbmRleF0mJihvPWUuZ2xvYmFscy5zZXJpZXNDb2xvcnNbdGhpcy5zZXJpZXNJbmRleF0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIG8mJihvPW8oe3Nlcmllc0luZGV4OnRoaXMuc2VyaWVzSW5kZXgsZGF0YVBvaW50SW5kZXg6dC5kYXRhUG9pbnRJbmRleCx2YWx1ZTp0LnZhbHVlLHc6ZX0pKTt2YXIgbj10LmZpbGxUeXBlP3QuZmlsbFR5cGU6dGhpcy5nZXRGaWxsVHlwZSh0aGlzLnNlcmllc0luZGV4KSxsPUFycmF5LmlzQXJyYXkoci5maWxsLm9wYWNpdHkpP3IuZmlsbC5vcGFjaXR5W3RoaXMuc2VyaWVzSW5kZXhdOnIuZmlsbC5vcGFjaXR5O3QuY29sb3ImJihvPXQuY29sb3IpO3ZhciBoPW87aWYoLTE9PT1vLmluZGV4T2YoXCJyZ2JcIik/by5sZW5ndGg8OSYmKGg9eC5oZXhUb1JnYmEobyxsKSk6by5pbmRleE9mKFwicmdiYVwiKT4tMSYmKGw9eC5nZXRPcGFjaXR5RnJvbVJHQkEobykpLHQub3BhY2l0eSYmKGw9dC5vcGFjaXR5KSxcInBhdHRlcm5cIj09PW4mJihhPXRoaXMuaGFuZGxlUGF0dGVybkZpbGwoe2ZpbGxDb25maWc6dC5maWxsQ29uZmlnLHBhdHRlcm5GaWxsOmEsZmlsbENvbG9yOm8sZmlsbE9wYWNpdHk6bCxkZWZhdWx0Q29sb3I6aH0pKSxcImdyYWRpZW50XCI9PT1uJiYocz10aGlzLmhhbmRsZUdyYWRpZW50RmlsbCh7ZmlsbENvbmZpZzp0LmZpbGxDb25maWcsZmlsbENvbG9yOm8sZmlsbE9wYWNpdHk6bCxpOnRoaXMuc2VyaWVzSW5kZXh9KSksXCJpbWFnZVwiPT09bil7dmFyIGM9ci5maWxsLmltYWdlLnNyYyxkPXQucGF0dGVybklEP3QucGF0dGVybklEOlwiXCI7dGhpcy5jbGlwcGVkSW1nQXJlYSh7b3BhY2l0eTpsLGltYWdlOkFycmF5LmlzQXJyYXkoYyk/dC5zZXJpZXNOdW1iZXI8Yy5sZW5ndGg/Y1t0LnNlcmllc051bWJlcl06Y1swXTpjLHdpZHRoOnQud2lkdGg/dC53aWR0aDp2b2lkIDAsaGVpZ2h0OnQuaGVpZ2h0P3QuaGVpZ2h0OnZvaWQgMCxwYXR0ZXJuVW5pdHM6dC5wYXR0ZXJuVW5pdHMscGF0dGVybklEOlwicGF0dGVyblwiLmNvbmNhdChlLmdsb2JhbHMuY3VpZCkuY29uY2F0KHQuc2VyaWVzTnVtYmVyKzEpLmNvbmNhdChkKX0pLGk9XCJ1cmwoI3BhdHRlcm5cIi5jb25jYXQoZS5nbG9iYWxzLmN1aWQpLmNvbmNhdCh0LnNlcmllc051bWJlcisxKS5jb25jYXQoZCxcIilcIil9ZWxzZSBpPVwiZ3JhZGllbnRcIj09PW4/czpcInBhdHRlcm5cIj09PW4/YTpoO3JldHVybiB0LnNvbGlkJiYoaT1oKSxpfX0se2tleTpcImdldEZpbGxUeXBlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53O3JldHVybiBBcnJheS5pc0FycmF5KGUuY29uZmlnLmZpbGwudHlwZSk/ZS5jb25maWcuZmlsbC50eXBlW3RdOmUuY29uZmlnLmZpbGwudHlwZX19LHtrZXk6XCJnZXRGaWxsQ29sb3JzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT10LmNvbmZpZyxpPXRoaXMub3B0cyxhPVtdO3JldHVybiB0Lmdsb2JhbHMuY29tYm9DaGFydHM/XCJsaW5lXCI9PT10LmNvbmZpZy5zZXJpZXNbdGhpcy5zZXJpZXNJbmRleF0udHlwZT9BcnJheS5pc0FycmF5KHQuZ2xvYmFscy5zdHJva2UuY29sb3JzKT9hPXQuZ2xvYmFscy5zdHJva2UuY29sb3JzOmEucHVzaCh0Lmdsb2JhbHMuc3Ryb2tlLmNvbG9ycyk6QXJyYXkuaXNBcnJheSh0Lmdsb2JhbHMuZmlsbC5jb2xvcnMpP2E9dC5nbG9iYWxzLmZpbGwuY29sb3JzOmEucHVzaCh0Lmdsb2JhbHMuZmlsbC5jb2xvcnMpOlwibGluZVwiPT09ZS5jaGFydC50eXBlP0FycmF5LmlzQXJyYXkodC5nbG9iYWxzLnN0cm9rZS5jb2xvcnMpP2E9dC5nbG9iYWxzLnN0cm9rZS5jb2xvcnM6YS5wdXNoKHQuZ2xvYmFscy5zdHJva2UuY29sb3JzKTpBcnJheS5pc0FycmF5KHQuZ2xvYmFscy5maWxsLmNvbG9ycyk/YT10Lmdsb2JhbHMuZmlsbC5jb2xvcnM6YS5wdXNoKHQuZ2xvYmFscy5maWxsLmNvbG9ycyksdm9pZCAwIT09aS5maWxsQ29sb3JzJiYoYT1bXSxBcnJheS5pc0FycmF5KGkuZmlsbENvbG9ycyk/YT1pLmZpbGxDb2xvcnMuc2xpY2UoKTphLnB1c2goaS5maWxsQ29sb3JzKSksYX19LHtrZXk6XCJoYW5kbGVQYXR0ZXJuRmlsbFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZmlsbENvbmZpZyxpPXQucGF0dGVybkZpbGwsYT10LmZpbGxDb2xvcixzPXQuZmlsbE9wYWNpdHkscj10LmRlZmF1bHRDb2xvcixvPXRoaXMudy5jb25maWcuZmlsbDtlJiYobz1lKTt2YXIgbj10aGlzLm9wdHMsbD1uZXcgbSh0aGlzLmN0eCksaD1BcnJheS5pc0FycmF5KG8ucGF0dGVybi5zdHJva2VXaWR0aCk/by5wYXR0ZXJuLnN0cm9rZVdpZHRoW3RoaXMuc2VyaWVzSW5kZXhdOm8ucGF0dGVybi5zdHJva2VXaWR0aCxjPWE7QXJyYXkuaXNBcnJheShvLnBhdHRlcm4uc3R5bGUpP2k9dm9pZCAwIT09by5wYXR0ZXJuLnN0eWxlW24uc2VyaWVzTnVtYmVyXT9sLmRyYXdQYXR0ZXJuKG8ucGF0dGVybi5zdHlsZVtuLnNlcmllc051bWJlcl0sby5wYXR0ZXJuLndpZHRoLG8ucGF0dGVybi5oZWlnaHQsYyxoLHMpOnI6aT1sLmRyYXdQYXR0ZXJuKG8ucGF0dGVybi5zdHlsZSxvLnBhdHRlcm4ud2lkdGgsby5wYXR0ZXJuLmhlaWdodCxjLGgscyk7cmV0dXJuIGl9fSx7a2V5OlwiaGFuZGxlR3JhZGllbnRGaWxsXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5maWxsQ29sb3IsaT10LmZpbGxPcGFjaXR5LGE9dC5maWxsQ29uZmlnLHM9dC5pLHI9dGhpcy53LmNvbmZpZy5maWxsO2EmJihyPWEpO3ZhciBvLG49dGhpcy5vcHRzLGw9bmV3IG0odGhpcy5jdHgpLGg9bmV3IHgsYz1yLmdyYWRpZW50LnR5cGUsZD1lLGc9dm9pZCAwPT09ci5ncmFkaWVudC5vcGFjaXR5RnJvbT9pOkFycmF5LmlzQXJyYXkoci5ncmFkaWVudC5vcGFjaXR5RnJvbSk/ci5ncmFkaWVudC5vcGFjaXR5RnJvbVtzXTpyLmdyYWRpZW50Lm9wYWNpdHlGcm9tO2QuaW5kZXhPZihcInJnYmFcIik+LTEmJihnPXguZ2V0T3BhY2l0eUZyb21SR0JBKGQpKTt2YXIgdT12b2lkIDA9PT1yLmdyYWRpZW50Lm9wYWNpdHlUbz9pOkFycmF5LmlzQXJyYXkoci5ncmFkaWVudC5vcGFjaXR5VG8pP3IuZ3JhZGllbnQub3BhY2l0eVRvW3NdOnIuZ3JhZGllbnQub3BhY2l0eVRvO2lmKHZvaWQgMD09PXIuZ3JhZGllbnQuZ3JhZGllbnRUb0NvbG9yc3x8MD09PXIuZ3JhZGllbnQuZ3JhZGllbnRUb0NvbG9ycy5sZW5ndGgpbz1cImRhcmtcIj09PXIuZ3JhZGllbnQuc2hhZGU/aC5zaGFkZUNvbG9yKC0xKnBhcnNlRmxvYXQoci5ncmFkaWVudC5zaGFkZUludGVuc2l0eSksZS5pbmRleE9mKFwicmdiXCIpPi0xP3gucmdiMmhleChlKTplKTpoLnNoYWRlQ29sb3IocGFyc2VGbG9hdChyLmdyYWRpZW50LnNoYWRlSW50ZW5zaXR5KSxlLmluZGV4T2YoXCJyZ2JcIik+LTE/eC5yZ2IyaGV4KGUpOmUpO2Vsc2UgaWYoci5ncmFkaWVudC5ncmFkaWVudFRvQ29sb3JzW24uc2VyaWVzTnVtYmVyXSl7dmFyIGY9ci5ncmFkaWVudC5ncmFkaWVudFRvQ29sb3JzW24uc2VyaWVzTnVtYmVyXTtvPWYsZi5pbmRleE9mKFwicmdiYVwiKT4tMSYmKHU9eC5nZXRPcGFjaXR5RnJvbVJHQkEoZikpfWVsc2Ugbz1lO2lmKHIuZ3JhZGllbnQuZ3JhZGllbnRGcm9tJiYoZD1yLmdyYWRpZW50LmdyYWRpZW50RnJvbSksci5ncmFkaWVudC5ncmFkaWVudFRvJiYobz1yLmdyYWRpZW50LmdyYWRpZW50VG8pLHIuZ3JhZGllbnQuaW52ZXJzZUNvbG9ycyl7dmFyIHA9ZDtkPW8sbz1wfXJldHVybiBkLmluZGV4T2YoXCJyZ2JcIik+LTEmJihkPXgucmdiMmhleChkKSksby5pbmRleE9mKFwicmdiXCIpPi0xJiYobz14LnJnYjJoZXgobykpLGwuZHJhd0dyYWRpZW50KGMsZCxvLGcsdSxuLnNpemUsci5ncmFkaWVudC5zdG9wcyxyLmdyYWRpZW50LmNvbG9yU3RvcHMscyl9fV0pLHR9KCksUj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53fXJldHVybiByKHQsW3trZXk6XCJzZXRHbG9iYWxNYXJrZXJTaXplXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnc7aWYodC5nbG9iYWxzLm1hcmtlcnMuc2l6ZT1BcnJheS5pc0FycmF5KHQuY29uZmlnLm1hcmtlcnMuc2l6ZSk/dC5jb25maWcubWFya2Vycy5zaXplOlt0LmNvbmZpZy5tYXJrZXJzLnNpemVdLHQuZ2xvYmFscy5tYXJrZXJzLnNpemUubGVuZ3RoPjApe2lmKHQuZ2xvYmFscy5tYXJrZXJzLnNpemUubGVuZ3RoPHQuZ2xvYmFscy5zZXJpZXMubGVuZ3RoKzEpZm9yKHZhciBlPTA7ZTw9dC5nbG9iYWxzLnNlcmllcy5sZW5ndGg7ZSsrKXZvaWQgMD09PXQuZ2xvYmFscy5tYXJrZXJzLnNpemVbZV0mJnQuZ2xvYmFscy5tYXJrZXJzLnNpemUucHVzaCh0Lmdsb2JhbHMubWFya2Vycy5zaXplWzBdKX1lbHNlIHQuZ2xvYmFscy5tYXJrZXJzLnNpemU9dC5jb25maWcuc2VyaWVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuY29uZmlnLm1hcmtlcnMuc2l6ZX0pKX19LHtrZXk6XCJwbG90Q2hhcnRNYXJrZXJzXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dmFyIHMscj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSYmYXJndW1lbnRzWzRdLG89dGhpcy53LG49ZSxsPXQsaD1udWxsLGM9bmV3IG0odGhpcy5jdHgpLGQ9by5jb25maWcubWFya2Vycy5kaXNjcmV0ZSYmby5jb25maWcubWFya2Vycy5kaXNjcmV0ZS5sZW5ndGg7aWYoKG8uZ2xvYmFscy5tYXJrZXJzLnNpemVbZV0+MHx8cnx8ZCkmJihoPWMuZ3JvdXAoe2NsYXNzOnJ8fGQ/XCJcIjpcImFwZXhjaGFydHMtc2VyaWVzLW1hcmtlcnNcIn0pKS5hdHRyKFwiY2xpcC1wYXRoXCIsXCJ1cmwoI2dyaWRSZWN0TWFya2VyTWFza1wiLmNvbmNhdChvLmdsb2JhbHMuY3VpZCxcIilcIikpLEFycmF5LmlzQXJyYXkobC54KSlmb3IodmFyIGc9MDtnPGwueC5sZW5ndGg7ZysrKXt2YXIgdT1pOzE9PT1pJiYwPT09ZyYmKHU9MCksMT09PWkmJjE9PT1nJiYodT0xKTt2YXIgZj1cImFwZXhjaGFydHMtbWFya2VyXCI7XCJsaW5lXCIhPT1vLmNvbmZpZy5jaGFydC50eXBlJiZcImFyZWFcIiE9PW8uY29uZmlnLmNoYXJ0LnR5cGV8fG8uZ2xvYmFscy5jb21ib0NoYXJ0c3x8by5jb25maWcudG9vbHRpcC5pbnRlcnNlY3R8fChmKz1cIiBuby1wb2ludGVyLWV2ZW50c1wiKTt2YXIgcD1BcnJheS5pc0FycmF5KG8uY29uZmlnLm1hcmtlcnMuc2l6ZSk/by5nbG9iYWxzLm1hcmtlcnMuc2l6ZVtlXT4wOm8uY29uZmlnLm1hcmtlcnMuc2l6ZT4wO2lmKHB8fHJ8fGQpe3guaXNOdW1iZXIobC55W2ddKT9mKz1cIiB3XCIuY29uY2F0KHgucmFuZG9tSWQoKSk6Zj1cImFwZXhjaGFydHMtbnVsbHBvaW50XCI7dmFyIGI9dGhpcy5nZXRNYXJrZXJDb25maWcoe2Nzc0NsYXNzOmYsc2VyaWVzSW5kZXg6ZSxkYXRhUG9pbnRJbmRleDp1fSk7by5jb25maWcuc2VyaWVzW25dLmRhdGFbdV0mJihvLmNvbmZpZy5zZXJpZXNbbl0uZGF0YVt1XS5maWxsQ29sb3ImJihiLnBvaW50RmlsbENvbG9yPW8uY29uZmlnLnNlcmllc1tuXS5kYXRhW3VdLmZpbGxDb2xvciksby5jb25maWcuc2VyaWVzW25dLmRhdGFbdV0uc3Ryb2tlQ29sb3ImJihiLnBvaW50U3Ryb2tlQ29sb3I9by5jb25maWcuc2VyaWVzW25dLmRhdGFbdV0uc3Ryb2tlQ29sb3IpKSxhJiYoYi5wU2l6ZT1hKSwocz1jLmRyYXdNYXJrZXIobC54W2ddLGwueVtnXSxiKSkuYXR0cihcInJlbFwiLHUpLHMuYXR0cihcImpcIix1KSxzLmF0dHIoXCJpbmRleFwiLGUpLHMubm9kZS5zZXRBdHRyaWJ1dGUoXCJkZWZhdWx0LW1hcmtlci1zaXplXCIsYi5wU2l6ZSk7dmFyIHk9bmV3IHYodGhpcy5jdHgpO3kuc2V0U2VsZWN0aW9uRmlsdGVyKHMsZSx1KSx0aGlzLmFkZEV2ZW50cyhzKSxoJiZoLmFkZChzKX1lbHNlIHZvaWQgMD09PW8uZ2xvYmFscy5wb2ludHNBcnJheVtlXSYmKG8uZ2xvYmFscy5wb2ludHNBcnJheVtlXT1bXSksby5nbG9iYWxzLnBvaW50c0FycmF5W2VdLnB1c2goW2wueFtnXSxsLnlbZ11dKX1yZXR1cm4gaH19LHtrZXk6XCJnZXRNYXJrZXJDb25maWdcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmNzc0NsYXNzLGk9dC5zZXJpZXNJbmRleCxhPXQuZGF0YVBvaW50SW5kZXgscz12b2lkIDA9PT1hP251bGw6YSxyPXQuZmluaXNoUmFkaXVzLG89dm9pZCAwPT09cj9udWxsOnIsbj10aGlzLncsbD10aGlzLmdldE1hcmtlclN0eWxlKGkpLGg9bi5nbG9iYWxzLm1hcmtlcnMuc2l6ZVtpXSxjPW4uY29uZmlnLm1hcmtlcnM7cmV0dXJuIG51bGwhPT1zJiZjLmRpc2NyZXRlLmxlbmd0aCYmYy5kaXNjcmV0ZS5tYXAoKGZ1bmN0aW9uKHQpe3Quc2VyaWVzSW5kZXg9PT1pJiZ0LmRhdGFQb2ludEluZGV4PT09cyYmKGwucG9pbnRTdHJva2VDb2xvcj10LnN0cm9rZUNvbG9yLGwucG9pbnRGaWxsQ29sb3I9dC5maWxsQ29sb3IsaD10LnNpemUsbC5wb2ludFNoYXBlPXQuc2hhcGUpfSkpLHtwU2l6ZTpudWxsPT09bz9oOm8scFJhZGl1czpjLnJhZGl1cyx3aWR0aDpBcnJheS5pc0FycmF5KGMud2lkdGgpP2Mud2lkdGhbaV06Yy53aWR0aCxoZWlnaHQ6QXJyYXkuaXNBcnJheShjLmhlaWdodCk/Yy5oZWlnaHRbaV06Yy5oZWlnaHQscG9pbnRTdHJva2VXaWR0aDpBcnJheS5pc0FycmF5KGMuc3Ryb2tlV2lkdGgpP2Muc3Ryb2tlV2lkdGhbaV06Yy5zdHJva2VXaWR0aCxwb2ludFN0cm9rZUNvbG9yOmwucG9pbnRTdHJva2VDb2xvcixwb2ludEZpbGxDb2xvcjpsLnBvaW50RmlsbENvbG9yLHNoYXBlOmwucG9pbnRTaGFwZXx8KEFycmF5LmlzQXJyYXkoYy5zaGFwZSk/Yy5zaGFwZVtpXTpjLnNoYXBlKSxjbGFzczplLHBvaW50U3Ryb2tlT3BhY2l0eTpBcnJheS5pc0FycmF5KGMuc3Ryb2tlT3BhY2l0eSk/Yy5zdHJva2VPcGFjaXR5W2ldOmMuc3Ryb2tlT3BhY2l0eSxwb2ludFN0cm9rZURhc2hBcnJheTpBcnJheS5pc0FycmF5KGMuc3Ryb2tlRGFzaEFycmF5KT9jLnN0cm9rZURhc2hBcnJheVtpXTpjLnN0cm9rZURhc2hBcnJheSxwb2ludEZpbGxPcGFjaXR5OkFycmF5LmlzQXJyYXkoYy5maWxsT3BhY2l0eSk/Yy5maWxsT3BhY2l0eVtpXTpjLmZpbGxPcGFjaXR5LHNlcmllc0luZGV4Oml9fX0se2tleTpcImFkZEV2ZW50c1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudyxpPW5ldyBtKHRoaXMuY3R4KTt0Lm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIixpLnBhdGhNb3VzZUVudGVyLmJpbmQodGhpcy5jdHgsdCkpLHQubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGkucGF0aE1vdXNlTGVhdmUuYmluZCh0aGlzLmN0eCx0KSksdC5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixpLnBhdGhNb3VzZURvd24uYmluZCh0aGlzLmN0eCx0KSksdC5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGUuY29uZmlnLm1hcmtlcnMub25DbGljayksdC5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJkYmxjbGlja1wiLGUuY29uZmlnLm1hcmtlcnMub25EYmxDbGljayksdC5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsaS5wYXRoTW91c2VEb3duLmJpbmQodGhpcy5jdHgsdCkse3Bhc3NpdmU6ITB9KX19LHtrZXk6XCJnZXRNYXJrZXJTdHlsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudyxpPWUuZ2xvYmFscy5tYXJrZXJzLmNvbG9ycyxhPWUuY29uZmlnLm1hcmtlcnMuc3Ryb2tlQ29sb3J8fGUuY29uZmlnLm1hcmtlcnMuc3Ryb2tlQ29sb3JzO3JldHVybntwb2ludFN0cm9rZUNvbG9yOkFycmF5LmlzQXJyYXkoYSk/YVt0XTphLHBvaW50RmlsbENvbG9yOkFycmF5LmlzQXJyYXkoaSk/aVt0XTppfX19XSksdH0oKSxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53LHRoaXMuaW5pdGlhbEFuaW09dGhpcy53LmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmVuYWJsZWQsdGhpcy5keW5hbWljQW5pbT10aGlzLmluaXRpYWxBbmltJiZ0aGlzLncuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuZHluYW1pY0FuaW1hdGlvbi5lbmFibGVkfXJldHVybiByKHQsW3trZXk6XCJkcmF3XCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMudyxzPW5ldyBtKHRoaXMuY3R4KSxyPWkucmVhbEluZGV4LG89aS5wb2ludHNQb3Msbj1pLnpSYXRpbyxsPWkuZWxQYXJlbnQsaD1zLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtc2VyaWVzLW1hcmtlcnMgYXBleGNoYXJ0cy1zZXJpZXMtXCIuY29uY2F0KGEuY29uZmlnLmNoYXJ0LnR5cGUpfSk7aWYoaC5hdHRyKFwiY2xpcC1wYXRoXCIsXCJ1cmwoI2dyaWRSZWN0TWFya2VyTWFza1wiLmNvbmNhdChhLmdsb2JhbHMuY3VpZCxcIilcIikpLEFycmF5LmlzQXJyYXkoby54KSlmb3IodmFyIGM9MDtjPG8ueC5sZW5ndGg7YysrKXt2YXIgZD1lKzEsZz0hMDswPT09ZSYmMD09PWMmJihkPTApLDA9PT1lJiYxPT09YyYmKGQ9MSk7dmFyIHU9MCxmPWEuZ2xvYmFscy5tYXJrZXJzLnNpemVbcl07aWYobiE9PTEvMCl7Zj1hLmdsb2JhbHMuc2VyaWVzWltyXVtkXS9uO3ZhciBwPWEuY29uZmlnLnBsb3RPcHRpb25zLmJ1YmJsZTtwLm1pbkJ1YmJsZVJhZGl1cyYmZjxwLm1pbkJ1YmJsZVJhZGl1cyYmKGY9cC5taW5CdWJibGVSYWRpdXMpLHAubWF4QnViYmxlUmFkaXVzJiZmPnAubWF4QnViYmxlUmFkaXVzJiYoZj1wLm1heEJ1YmJsZVJhZGl1cyl9YS5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5lbmFibGVkfHwodT1mKTt2YXIgeD1vLnhbY10sYj1vLnlbY107aWYodT11fHwwLG51bGwhPT1iJiZ2b2lkIDAhPT1hLmdsb2JhbHMuc2VyaWVzW3JdW2RdfHwoZz0hMSksZyl7dmFyIHY9dGhpcy5kcmF3UG9pbnQoeCxiLHUsZixyLGQsZSk7aC5hZGQodil9bC5hZGQoaCl9fX0se2tleTpcImRyYXdQb2ludFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEscyxyLG8pe3ZhciBuPXRoaXMudyxsPXMsaD1uZXcgYih0aGlzLmN0eCksYz1uZXcgdih0aGlzLmN0eCksZD1uZXcgRih0aGlzLmN0eCksZz1uZXcgUih0aGlzLmN0eCksdT1uZXcgbSh0aGlzLmN0eCksZj1nLmdldE1hcmtlckNvbmZpZyh7Y3NzQ2xhc3M6XCJhcGV4Y2hhcnRzLW1hcmtlclwiLHNlcmllc0luZGV4OmwsZGF0YVBvaW50SW5kZXg6cixmaW5pc2hSYWRpdXM6XCJidWJibGVcIj09PW4uY29uZmlnLmNoYXJ0LnR5cGV8fG4uZ2xvYmFscy5jb21ib0NoYXJ0cyYmbi5jb25maWcuc2VyaWVzW3NdJiZcImJ1YmJsZVwiPT09bi5jb25maWcuc2VyaWVzW3NdLnR5cGU/YTpudWxsfSk7YT1mLnBTaXplO3ZhciBwLHg9ZC5maWxsUGF0aCh7c2VyaWVzTnVtYmVyOnMsZGF0YVBvaW50SW5kZXg6cixjb2xvcjpmLnBvaW50RmlsbENvbG9yLHBhdHRlcm5Vbml0czpcIm9iamVjdEJvdW5kaW5nQm94XCIsdmFsdWU6bi5nbG9iYWxzLnNlcmllc1tzXVtvXX0pO2lmKFwiY2lyY2xlXCI9PT1mLnNoYXBlP3A9dS5kcmF3Q2lyY2xlKGkpOlwic3F1YXJlXCIhPT1mLnNoYXBlJiZcInJlY3RcIiE9PWYuc2hhcGV8fChwPXUuZHJhd1JlY3QoMCwwLGYud2lkdGgtZi5wb2ludFN0cm9rZVdpZHRoLzIsZi5oZWlnaHQtZi5wb2ludFN0cm9rZVdpZHRoLzIsZi5wUmFkaXVzKSksbi5jb25maWcuc2VyaWVzW2xdLmRhdGFbcl0mJm4uY29uZmlnLnNlcmllc1tsXS5kYXRhW3JdLmZpbGxDb2xvciYmKHg9bi5jb25maWcuc2VyaWVzW2xdLmRhdGFbcl0uZmlsbENvbG9yKSxwLmF0dHIoe3g6dC1mLndpZHRoLzItZi5wb2ludFN0cm9rZVdpZHRoLzIseTplLWYuaGVpZ2h0LzItZi5wb2ludFN0cm9rZVdpZHRoLzIsY3g6dCxjeTplLGZpbGw6eCxcImZpbGwtb3BhY2l0eVwiOmYucG9pbnRGaWxsT3BhY2l0eSxzdHJva2U6Zi5wb2ludFN0cm9rZUNvbG9yLHI6YSxcInN0cm9rZS13aWR0aFwiOmYucG9pbnRTdHJva2VXaWR0aCxcInN0cm9rZS1kYXNoYXJyYXlcIjpmLnBvaW50U3Ryb2tlRGFzaEFycmF5LFwic3Ryb2tlLW9wYWNpdHlcIjpmLnBvaW50U3Ryb2tlT3BhY2l0eX0pLG4uY29uZmlnLmNoYXJ0LmRyb3BTaGFkb3cuZW5hYmxlZCl7dmFyIHk9bi5jb25maWcuY2hhcnQuZHJvcFNoYWRvdztjLmRyb3BTaGFkb3cocCx5LHMpfWlmKCF0aGlzLmluaXRpYWxBbmltfHxuLmdsb2JhbHMuZGF0YUNoYW5nZWR8fG4uZ2xvYmFscy5yZXNpemVkKW4uZ2xvYmFscy5hbmltYXRpb25FbmRlZD0hMDtlbHNle3ZhciB3PW4uY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuc3BlZWQ7aC5hbmltYXRlTWFya2VyKHAsMCxcImNpcmNsZVwiPT09Zi5zaGFwZT9hOnt3aWR0aDpmLndpZHRoLGhlaWdodDpmLmhlaWdodH0sdyxuLmdsb2JhbHMuZWFzaW5nLChmdW5jdGlvbigpe3dpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe2guYW5pbWF0aW9uQ29tcGxldGVkKHApfSksMTAwKX0pKX1pZihuLmdsb2JhbHMuZGF0YUNoYW5nZWQmJlwiY2lyY2xlXCI9PT1mLnNoYXBlKWlmKHRoaXMuZHluYW1pY0FuaW0pe3ZhciBrLEEsUyxDLEw9bi5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5keW5hbWljQW5pbWF0aW9uLnNwZWVkO251bGwhPShDPW4uZ2xvYmFscy5wcmV2aW91c1BhdGhzW3NdJiZuLmdsb2JhbHMucHJldmlvdXNQYXRoc1tzXVtvXSkmJihrPUMueCxBPUMueSxTPXZvaWQgMCE9PUMucj9DLnI6YSk7Zm9yKHZhciBQPTA7UDxuLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzLmxlbmd0aDtQKyspbi5nbG9iYWxzLmNvbGxhcHNlZFNlcmllc1tQXS5pbmRleD09PXMmJihMPTEsYT0wKTswPT09dCYmMD09PWUmJihhPTApLGguYW5pbWF0ZUNpcmNsZShwLHtjeDprLGN5OkEscjpTfSx7Y3g6dCxjeTplLHI6YX0sTCxuLmdsb2JhbHMuZWFzaW5nKX1lbHNlIHAuYXR0cih7cjphfSk7cmV0dXJuIHAuYXR0cih7cmVsOnIsajpyLGluZGV4OnMsXCJkZWZhdWx0LW1hcmtlci1zaXplXCI6YX0pLGMuc2V0U2VsZWN0aW9uRmlsdGVyKHAscyxyKSxnLmFkZEV2ZW50cyhwKSxwLm5vZGUuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtbWFya2VyXCIpLHB9fSx7a2V5OlwiY2VudGVyVGV4dEluQnViYmxlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53O3JldHVybnt5OnQrPXBhcnNlSW50KGUuY29uZmlnLmRhdGFMYWJlbHMuc3R5bGUuZm9udFNpemUsMTApLzR9fX1dKSx0fSgpLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLnd9cmV0dXJuIHIodCxbe2tleTpcImRhdGFMYWJlbHNDb3JyZWN0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSxzLHIsbyl7dmFyIG49dGhpcy53LGw9ITEsaD1uZXcgbSh0aGlzLmN0eCkuZ2V0VGV4dFJlY3RzKGksbyksYz1oLndpZHRoLGQ9aC5oZWlnaHQ7ZTwwJiYoZT0wKSxlPm4uZ2xvYmFscy5ncmlkSGVpZ2h0K2QmJihlPW4uZ2xvYmFscy5ncmlkSGVpZ2h0K2QvMiksdm9pZCAwPT09bi5nbG9iYWxzLmRhdGFMYWJlbHNSZWN0c1thXSYmKG4uZ2xvYmFscy5kYXRhTGFiZWxzUmVjdHNbYV09W10pLG4uZ2xvYmFscy5kYXRhTGFiZWxzUmVjdHNbYV0ucHVzaCh7eDp0LHk6ZSx3aWR0aDpjLGhlaWdodDpkfSk7dmFyIGc9bi5nbG9iYWxzLmRhdGFMYWJlbHNSZWN0c1thXS5sZW5ndGgtMix1PXZvaWQgMCE9PW4uZ2xvYmFscy5sYXN0RHJhd25EYXRhTGFiZWxzSW5kZXhlc1thXT9uLmdsb2JhbHMubGFzdERyYXduRGF0YUxhYmVsc0luZGV4ZXNbYV1bbi5nbG9iYWxzLmxhc3REcmF3bkRhdGFMYWJlbHNJbmRleGVzW2FdLmxlbmd0aC0xXTowO2lmKHZvaWQgMCE9PW4uZ2xvYmFscy5kYXRhTGFiZWxzUmVjdHNbYV1bZ10pe3ZhciBmPW4uZ2xvYmFscy5kYXRhTGFiZWxzUmVjdHNbYV1bdV07KHQ+Zi54K2Yud2lkdGgrMnx8ZT5mLnkrZi5oZWlnaHQrMnx8dCtjPGYueCkmJihsPSEwKX1yZXR1cm4oMD09PXN8fHIpJiYobD0hMCkse3g6dCx5OmUsdGV4dFJlY3RzOmgsZHJhd25leHRMYWJlbDpsfX19LHtrZXk6XCJkcmF3RGF0YUxhYmVsXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXQudHlwZSxhPXQucG9zLHM9dC5pLHI9dC5qLG89dC5pc1JhbmdlU3RhcnQsbj10LnN0cm9rZVdpZHRoLGw9dm9pZCAwPT09bj8yOm4saD10aGlzLncsYz1uZXcgbSh0aGlzLmN0eCksZD1oLmNvbmZpZy5kYXRhTGFiZWxzLGc9MCx1PTAsZj1yLHA9bnVsbDtpZighZC5lbmFibGVkfHwhQXJyYXkuaXNBcnJheShhLngpKXJldHVybiBwO3A9Yy5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWRhdGEtbGFiZWxzXCJ9KTtmb3IodmFyIHg9MDt4PGEueC5sZW5ndGg7eCsrKWlmKGc9YS54W3hdK2Qub2Zmc2V0WCx1PWEueVt4XStkLm9mZnNldFkrbCwhaXNOYU4oZykpezE9PT1yJiYwPT09eCYmKGY9MCksMT09PXImJjE9PT14JiYoZj0xKTt2YXIgYj1oLmdsb2JhbHMuc2VyaWVzW3NdW2ZdO1wicmFuZ2VBcmVhXCI9PT1pJiYoYj1vP2guZ2xvYmFscy5zZXJpZXNSYW5nZVN0YXJ0W3NdW2ZdOmguZ2xvYmFscy5zZXJpZXNSYW5nZUVuZFtzXVtmXSk7dmFyIHY9XCJcIix5PWZ1bmN0aW9uKHQpe3JldHVybiBoLmNvbmZpZy5kYXRhTGFiZWxzLmZvcm1hdHRlcih0LHtjdHg6ZS5jdHgsc2VyaWVzSW5kZXg6cyxkYXRhUG9pbnRJbmRleDpmLHc6aH0pfTtpZihcImJ1YmJsZVwiPT09aC5jb25maWcuY2hhcnQudHlwZSl2PXkoYj1oLmdsb2JhbHMuc2VyaWVzWltzXVtmXSksdT1hLnlbeF0sdT1uZXcgRCh0aGlzLmN0eCkuY2VudGVyVGV4dEluQnViYmxlKHUscyxmKS55O2Vsc2Ugdm9pZCAwIT09YiYmKHY9eShiKSk7dGhpcy5wbG90RGF0YUxhYmVsc1RleHQoe3g6Zyx5OnUsdGV4dDp2LGk6cyxqOmYscGFyZW50OnAsb2Zmc2V0Q29ycmVjdGlvbjohMCxkYXRhTGFiZWxzQ29uZmlnOmguY29uZmlnLmRhdGFMYWJlbHN9KX1yZXR1cm4gcH19LHtrZXk6XCJwbG90RGF0YUxhYmVsc1RleHRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT1uZXcgbSh0aGlzLmN0eCksYT10Lngscz10Lnkscj10Lmksbz10Lmosbj10LnRleHQsbD10LnRleHRBbmNob3IsaD10LmZvbnRTaXplLGM9dC5wYXJlbnQsZD10LmRhdGFMYWJlbHNDb25maWcsZz10LmNvbG9yLHU9dC5hbHdheXNEcmF3RGF0YUxhYmVsLGY9dC5vZmZzZXRDb3JyZWN0aW9uO2lmKCEoQXJyYXkuaXNBcnJheShlLmNvbmZpZy5kYXRhTGFiZWxzLmVuYWJsZWRPblNlcmllcykmJmUuY29uZmlnLmRhdGFMYWJlbHMuZW5hYmxlZE9uU2VyaWVzLmluZGV4T2Yocik8MCkpe3ZhciBwPXt4OmEseTpzLGRyYXduZXh0TGFiZWw6ITAsdGV4dFJlY3RzOm51bGx9O2YmJihwPXRoaXMuZGF0YUxhYmVsc0NvcnJlY3Rpb24oYSxzLG4scixvLHUscGFyc2VJbnQoZC5zdHlsZS5mb250U2l6ZSwxMCkpKSxlLmdsb2JhbHMuem9vbWVkfHwoYT1wLngscz1wLnkpLHAudGV4dFJlY3RzJiYoYTwtMTAtcC50ZXh0UmVjdHMud2lkdGh8fGE+ZS5nbG9iYWxzLmdyaWRXaWR0aCtwLnRleHRSZWN0cy53aWR0aCsxMCkmJihuPVwiXCIpO3ZhciB4PWUuZ2xvYmFscy5kYXRhTGFiZWxzLnN0eWxlLmNvbG9yc1tyXTsoKFwiYmFyXCI9PT1lLmNvbmZpZy5jaGFydC50eXBlfHxcInJhbmdlQmFyXCI9PT1lLmNvbmZpZy5jaGFydC50eXBlKSYmZS5jb25maWcucGxvdE9wdGlvbnMuYmFyLmRpc3RyaWJ1dGVkfHxlLmNvbmZpZy5kYXRhTGFiZWxzLmRpc3RyaWJ1dGVkKSYmKHg9ZS5nbG9iYWxzLmRhdGFMYWJlbHMuc3R5bGUuY29sb3JzW29dKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB4JiYoeD14KHtzZXJpZXM6ZS5nbG9iYWxzLnNlcmllcyxzZXJpZXNJbmRleDpyLGRhdGFQb2ludEluZGV4Om8sdzplfSkpLGcmJih4PWcpO3ZhciBiPWQub2Zmc2V0WCx5PWQub2Zmc2V0WTtpZihcImJhclwiIT09ZS5jb25maWcuY2hhcnQudHlwZSYmXCJyYW5nZUJhclwiIT09ZS5jb25maWcuY2hhcnQudHlwZXx8KGI9MCx5PTApLHAuZHJhd25leHRMYWJlbCl7dmFyIHc9aS5kcmF3VGV4dCh7d2lkdGg6MTAwLGhlaWdodDpwYXJzZUludChkLnN0eWxlLmZvbnRTaXplLDEwKSx4OmErYix5OnMreSxmb3JlQ29sb3I6eCx0ZXh0QW5jaG9yOmx8fGQudGV4dEFuY2hvcix0ZXh0Om4sZm9udFNpemU6aHx8ZC5zdHlsZS5mb250U2l6ZSxmb250RmFtaWx5OmQuc3R5bGUuZm9udEZhbWlseSxmb250V2VpZ2h0OmQuc3R5bGUuZm9udFdlaWdodHx8XCJub3JtYWxcIn0pO2lmKHcuYXR0cih7Y2xhc3M6XCJhcGV4Y2hhcnRzLWRhdGFsYWJlbFwiLGN4OmEsY3k6c30pLGQuZHJvcFNoYWRvdy5lbmFibGVkKXt2YXIgaz1kLmRyb3BTaGFkb3c7bmV3IHYodGhpcy5jdHgpLmRyb3BTaGFkb3codyxrKX1jLmFkZCh3KSx2b2lkIDA9PT1lLmdsb2JhbHMubGFzdERyYXduRGF0YUxhYmVsc0luZGV4ZXNbcl0mJihlLmdsb2JhbHMubGFzdERyYXduRGF0YUxhYmVsc0luZGV4ZXNbcl09W10pLGUuZ2xvYmFscy5sYXN0RHJhd25EYXRhTGFiZWxzSW5kZXhlc1tyXS5wdXNoKG8pfX19fSx7a2V5OlwiYWRkQmFja2dyb3VuZFRvRGF0YUxhYmVsXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLncsYT1pLmNvbmZpZy5kYXRhTGFiZWxzLmJhY2tncm91bmQscz1hLnBhZGRpbmcscj1hLnBhZGRpbmcvMixvPWUud2lkdGgsbj1lLmhlaWdodCxsPW5ldyBtKHRoaXMuY3R4KS5kcmF3UmVjdChlLngtcyxlLnktci8yLG8rMipzLG4rcixhLmJvcmRlclJhZGl1cyxcInRyYW5zcGFyZW50XCI9PT1pLmNvbmZpZy5jaGFydC5iYWNrZ3JvdW5kP1wiI2ZmZlwiOmkuY29uZmlnLmNoYXJ0LmJhY2tncm91bmQsYS5vcGFjaXR5LGEuYm9yZGVyV2lkdGgsYS5ib3JkZXJDb2xvcik7YS5kcm9wU2hhZG93LmVuYWJsZWQmJm5ldyB2KHRoaXMuY3R4KS5kcm9wU2hhZG93KGwsYS5kcm9wU2hhZG93KTtyZXR1cm4gbH19LHtrZXk6XCJkYXRhTGFiZWxzQmFja2dyb3VuZFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53O2lmKFwiYnViYmxlXCIhPT10LmNvbmZpZy5jaGFydC50eXBlKWZvcih2YXIgZT10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFwZXhjaGFydHMtZGF0YWxhYmVscyB0ZXh0XCIpLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxzPWEuZ2V0QkJveCgpLHI9bnVsbDtpZihzLndpZHRoJiZzLmhlaWdodCYmKHI9dGhpcy5hZGRCYWNrZ3JvdW5kVG9EYXRhTGFiZWwoYSxzKSkscil7YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLm5vZGUsYSk7dmFyIG89YS5nZXRBdHRyaWJ1dGUoXCJmaWxsXCIpO3QuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuZW5hYmxlZCYmIXQuZ2xvYmFscy5yZXNpemVkJiYhdC5nbG9iYWxzLmRhdGFDaGFuZ2VkP3IuYW5pbWF0ZSgpLmF0dHIoe2ZpbGw6b30pOnIuYXR0cih7ZmlsbDpvfSksYS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsdC5jb25maWcuZGF0YUxhYmVscy5iYWNrZ3JvdW5kLmZvcmVDb2xvcil9fX19LHtrZXk6XCJicmluZ0ZvcndhcmRcIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLncsZT10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFwZXhjaGFydHMtZGF0YWxhYmVsc1wiKSxpPXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1wbG90LXNlcmllczpsYXN0LWNoaWxkXCIpLGE9MDthPGUubGVuZ3RoO2ErKylpJiZpLmluc2VydEJlZm9yZShlW2FdLGkubmV4dFNpYmxpbmcpfX1dKSx0fSgpLE49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLncsdGhpcy5sZWdlbmRJbmFjdGl2ZUNsYXNzPVwibGVnZW5kLW1vdXNlb3Zlci1pbmFjdGl2ZVwifXJldHVybiByKHQsW3trZXk6XCJnZXRBbGxTZXJpZXNFbHNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLncuZ2xvYmFscy5kb20uYmFzZUVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJhcGV4Y2hhcnRzLXNlcmllc1wiKX19LHtrZXk6XCJnZXRTZXJpZXNCeU5hbWVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtaW5uZXIgLmFwZXhjaGFydHMtc2VyaWVzW3Nlcmllc05hbWU9J1wiLmNvbmNhdCh4LmVzY2FwZVN0cmluZyh0KSxcIiddXCIpKX19LHtrZXk6XCJpc1Nlcmllc0hpZGRlblwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0U2VyaWVzQnlOYW1lKHQpLGk9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoXCJkYXRhOnJlYWxJbmRleFwiKSwxMCk7cmV0dXJue2lzSGlkZGVuOmUuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXBleGNoYXJ0cy1zZXJpZXMtY29sbGFwc2VkXCIpLHJlYWxJbmRleDppfX19LHtrZXk6XCJhZGRDb2xsYXBzZWRDbGFzc1RvU2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnc7ZnVuY3Rpb24gYShpKXtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKylpW2FdLmluZGV4PT09ZSYmdC5ub2RlLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLXNlcmllcy1jb2xsYXBzZWRcIil9YShpLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzKSxhKGkuZ2xvYmFscy5hbmNpbGxhcnlDb2xsYXBzZWRTZXJpZXMpfX0se2tleTpcInRvZ2dsZVNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaXNTZXJpZXNIaWRkZW4odCk7cmV0dXJuIHRoaXMuY3R4LmxlZ2VuZC5sZWdlbmRIZWxwZXJzLnRvZ2dsZURhdGFTZXJpZXMoZS5yZWFsSW5kZXgsZS5pc0hpZGRlbiksZS5pc0hpZGRlbn19LHtrZXk6XCJzaG93U2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pc1Nlcmllc0hpZGRlbih0KTtlLmlzSGlkZGVuJiZ0aGlzLmN0eC5sZWdlbmQubGVnZW5kSGVscGVycy50b2dnbGVEYXRhU2VyaWVzKGUucmVhbEluZGV4LCEwKX19LHtrZXk6XCJoaWRlU2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pc1Nlcmllc0hpZGRlbih0KTtlLmlzSGlkZGVufHx0aGlzLmN0eC5sZWdlbmQubGVnZW5kSGVscGVycy50b2dnbGVEYXRhU2VyaWVzKGUucmVhbEluZGV4LCExKX19LHtrZXk6XCJyZXNldFNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxlPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0saT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLGE9dGhpcy53LHM9eC5jbG9uZShhLmdsb2JhbHMuaW5pdGlhbFNlcmllcyk7YS5nbG9iYWxzLnByZXZpb3VzUGF0aHM9W10saT8oYS5nbG9iYWxzLmNvbGxhcHNlZFNlcmllcz1bXSxhLmdsb2JhbHMuYW5jaWxsYXJ5Q29sbGFwc2VkU2VyaWVzPVtdLGEuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXNJbmRpY2VzPVtdLGEuZ2xvYmFscy5hbmNpbGxhcnlDb2xsYXBzZWRTZXJpZXNJbmRpY2VzPVtdKTpzPXRoaXMuZW1wdHlDb2xsYXBzZWRTZXJpZXMocyksYS5jb25maWcuc2VyaWVzPXMsdCYmKGUmJihhLmdsb2JhbHMuem9vbWVkPSExLHRoaXMuY3R4LnVwZGF0ZUhlbHBlcnMucmV2ZXJ0RGVmYXVsdEF4aXNNaW5NYXgoKSksdGhpcy5jdHgudXBkYXRlSGVscGVycy5fdXBkYXRlU2VyaWVzKHMsYS5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5keW5hbWljQW5pbWF0aW9uLmVuYWJsZWQpKX19LHtrZXk6XCJlbXB0eUNvbGxhcHNlZFNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLncsaT0wO2k8dC5sZW5ndGg7aSsrKWUuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXNJbmRpY2VzLmluZGV4T2YoaSk+LTEmJih0W2ldLmRhdGE9W10pO3JldHVybiB0fX0se2tleTpcInRvZ2dsZVNlcmllc09uSG92ZXJcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudztlfHwoZT10LnRhcmdldCk7dmFyIGE9aS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLXNlcmllcywgLmFwZXhjaGFydHMtZGF0YWxhYmVsc1wiKTtpZihcIm1vdXNlbW92ZVwiPT09dC50eXBlKXt2YXIgcz1wYXJzZUludChlLmdldEF0dHJpYnV0ZShcInJlbFwiKSwxMCktMSxyPW51bGwsbz1udWxsO2kuZ2xvYmFscy5heGlzQ2hhcnRzfHxcInJhZGlhbEJhclwiPT09aS5jb25maWcuY2hhcnQudHlwZT9pLmdsb2JhbHMuYXhpc0NoYXJ0cz8ocj1pLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtc2VyaWVzW2RhdGFcXFxcOnJlYWxJbmRleD0nXCIuY29uY2F0KHMsXCInXVwiKSksbz1pLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtZGF0YWxhYmVsc1tkYXRhXFxcXDpyZWFsSW5kZXg9J1wiLmNvbmNhdChzLFwiJ11cIikpKTpyPWkuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1zZXJpZXNbcmVsPSdcIi5jb25jYXQocysxLFwiJ11cIikpOnI9aS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLXNlcmllc1tyZWw9J1wiLmNvbmNhdChzKzEsXCInXSBwYXRoXCIpKTtmb3IodmFyIG49MDtuPGEubGVuZ3RoO24rKylhW25dLmNsYXNzTGlzdC5hZGQodGhpcy5sZWdlbmRJbmFjdGl2ZUNsYXNzKTtudWxsIT09ciYmKGkuZ2xvYmFscy5heGlzQ2hhcnRzfHxyLnBhcmVudE5vZGUuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmxlZ2VuZEluYWN0aXZlQ2xhc3MpLHIuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmxlZ2VuZEluYWN0aXZlQ2xhc3MpLG51bGwhPT1vJiZvLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5sZWdlbmRJbmFjdGl2ZUNsYXNzKSl9ZWxzZSBpZihcIm1vdXNlb3V0XCI9PT10LnR5cGUpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspYVtsXS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMubGVnZW5kSW5hY3RpdmVDbGFzcyl9fSx7a2V5OlwiaGlnaGxpZ2h0UmFuZ2VJblNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxhPXRoaXMudyxzPWEuZ2xvYmFscy5kb20uYmFzZUVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJhcGV4Y2hhcnRzLWhlYXRtYXAtcmVjdFwiKSxyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cy5sZW5ndGg7ZSsrKXNbZV0uY2xhc3NMaXN0W3RdKGkubGVnZW5kSW5hY3RpdmVDbGFzcyl9O2lmKFwibW91c2Vtb3ZlXCI9PT10LnR5cGUpe3ZhciBvPXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwicmVsXCIpLDEwKS0xO3IoXCJhZGRcIiksZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxzLmxlbmd0aDtlKyspe3ZhciBhPXBhcnNlSW50KHNbZV0uZ2V0QXR0cmlidXRlKFwidmFsXCIpLDEwKTthPj10LmZyb20mJmE8PXQudG8mJnNbZV0uY2xhc3NMaXN0LnJlbW92ZShpLmxlZ2VuZEluYWN0aXZlQ2xhc3MpfX0oYS5jb25maWcucGxvdE9wdGlvbnMuaGVhdG1hcC5jb2xvclNjYWxlLnJhbmdlc1tvXSl9ZWxzZVwibW91c2VvdXRcIj09PXQudHlwZSYmcihcInJlbW92ZVwiKX19LHtrZXk6XCJnZXRBY3RpdmVDb25maWdTZXJpZXNJbmRleFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlwiYXNjXCIsZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saT10aGlzLncsYT0wO2lmKGkuY29uZmlnLnNlcmllcy5sZW5ndGg+MSlmb3IodmFyIHM9aS5jb25maWcuc2VyaWVzLm1hcCgoZnVuY3Rpb24odCxhKXtyZXR1cm4gdC5kYXRhJiZ0LmRhdGEubGVuZ3RoPjAmJighaS5nbG9iYWxzLmNvbWJvQ2hhcnRzfHwwPT09ZS5sZW5ndGh8fGUubGVuZ3RoJiZlLmluZGV4T2YoaS5jb25maWcuc2VyaWVzW2FdLnR5cGUpPi0xKT9hOi0xfSkpLHI9XCJhc2NcIj09PXQ/MDpzLmxlbmd0aC0xO1wiYXNjXCI9PT10P3I8cy5sZW5ndGg6cj49MDtcImFzY1wiPT09dD9yKys6ci0tKWlmKC0xIT09c1tyXSl7YT1zW3JdO2JyZWFrfXJldHVybiBhfX0se2tleTpcImdldEJhclNlcmllc0luZGljZXNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLncuZ2xvYmFscy5jb21ib0NoYXJ0cz90aGlzLncuY29uZmlnLnNlcmllcy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJiYXJcIj09PXQudHlwZXx8XCJjb2x1bW5cIj09PXQudHlwZT9lOi0xfSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuLTEhPT10fSkpOnRoaXMudy5jb25maWcuc2VyaWVzLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKX19LHtrZXk6XCJnZXRQcmV2aW91c1BhdGhzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnc7ZnVuY3Rpb24gZShlLGksYSl7Zm9yKHZhciBzPWVbaV0uY2hpbGROb2RlcyxyPXt0eXBlOmEscGF0aHM6W10scmVhbEluZGV4OmVbaV0uZ2V0QXR0cmlidXRlKFwiZGF0YTpyZWFsSW5kZXhcIil9LG89MDtvPHMubGVuZ3RoO28rKylpZihzW29dLmhhc0F0dHJpYnV0ZShcInBhdGhUb1wiKSl7dmFyIG49c1tvXS5nZXRBdHRyaWJ1dGUoXCJwYXRoVG9cIik7ci5wYXRocy5wdXNoKHtkOm59KX10Lmdsb2JhbHMucHJldmlvdXNQYXRocy5wdXNoKHIpfXQuZ2xvYmFscy5wcmV2aW91c1BhdGhzPVtdO1tcImxpbmVcIixcImFyZWFcIixcImJhclwiLFwicmFuZ2ViYXJcIixcInJhbmdlQXJlYVwiLFwiY2FuZGxlc3RpY2tcIixcInJhZGFyXCJdLmZvckVhY2goKGZ1bmN0aW9uKGkpe2Zvcih2YXIgYSxzPShhPWksdC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLVwiLmNvbmNhdChhLFwiLXNlcmllcyAuYXBleGNoYXJ0cy1zZXJpZXNcIikpKSxyPTA7cjxzLmxlbmd0aDtyKyspZShzLHIsaSl9KSksdGhpcy5oYW5kbGVQcmV2QnViYmxlU2NhdHRlclBhdGhzKFwiYnViYmxlXCIpLHRoaXMuaGFuZGxlUHJldkJ1YmJsZVNjYXR0ZXJQYXRocyhcInNjYXR0ZXJcIik7dmFyIGk9dC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLVwiLmNvbmNhdCh0LmNvbmZpZy5jaGFydC50eXBlLFwiIC5hcGV4Y2hhcnRzLXNlcmllc1wiKSk7aWYoaS5sZW5ndGg+MClmb3IodmFyIGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciBpPXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy1cIi5jb25jYXQodC5jb25maWcuY2hhcnQudHlwZSxcIiAuYXBleGNoYXJ0cy1zZXJpZXNbZGF0YVxcXFw6cmVhbEluZGV4PSdcIikuY29uY2F0KGUsXCInXSByZWN0XCIpKSxhPVtdLHM9ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGlbdF0uZ2V0QXR0cmlidXRlKGUpfSxzPXt4OnBhcnNlRmxvYXQoZShcInhcIikpLHk6cGFyc2VGbG9hdChlKFwieVwiKSksd2lkdGg6cGFyc2VGbG9hdChlKFwid2lkdGhcIikpLGhlaWdodDpwYXJzZUZsb2F0KGUoXCJoZWlnaHRcIikpfTthLnB1c2goe3JlY3Q6cyxjb2xvcjppW3RdLmdldEF0dHJpYnV0ZShcImNvbG9yXCIpfSl9LHI9MDtyPGkubGVuZ3RoO3IrKylzKHIpO3QuZ2xvYmFscy5wcmV2aW91c1BhdGhzLnB1c2goYSl9LHM9MDtzPGkubGVuZ3RoO3MrKylhKHMpO3QuZ2xvYmFscy5heGlzQ2hhcnRzfHwodC5nbG9iYWxzLnByZXZpb3VzUGF0aHM9dC5nbG9iYWxzLnNlcmllcyl9fSx7a2V5OlwiaGFuZGxlUHJldkJ1YmJsZVNjYXR0ZXJQYXRoc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudyxpPWUuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy1cIi5jb25jYXQodCxcIi1zZXJpZXMgLmFwZXhjaGFydHMtc2VyaWVzXCIpKTtpZihpLmxlbmd0aD4wKWZvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKXtmb3IodmFyIHM9ZS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLVwiLmNvbmNhdCh0LFwiLXNlcmllcyAuYXBleGNoYXJ0cy1zZXJpZXNbZGF0YVxcXFw6cmVhbEluZGV4PSdcIikuY29uY2F0KGEsXCInXSBjaXJjbGVcIikpLHI9W10sbz0wO288cy5sZW5ndGg7bysrKXIucHVzaCh7eDpzW29dLmdldEF0dHJpYnV0ZShcImN4XCIpLHk6c1tvXS5nZXRBdHRyaWJ1dGUoXCJjeVwiKSxyOnNbb10uZ2V0QXR0cmlidXRlKFwiclwiKX0pO2UuZ2xvYmFscy5wcmV2aW91c1BhdGhzLnB1c2gocil9fX0se2tleTpcImNsZWFyUHJldmlvdXNQYXRoc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53O3QuZ2xvYmFscy5wcmV2aW91c1BhdGhzPVtdLHQuZ2xvYmFscy5hbGxTZXJpZXNDb2xsYXBzZWQ9ITF9fSx7a2V5OlwiaGFuZGxlTm9EYXRhXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT10LmNvbmZpZy5ub0RhdGEsaT1uZXcgbSh0aGlzLmN0eCksYT10Lmdsb2JhbHMuc3ZnV2lkdGgvMixzPXQuZ2xvYmFscy5zdmdIZWlnaHQvMixyPVwibWlkZGxlXCI7aWYodC5nbG9iYWxzLm5vRGF0YT0hMCx0Lmdsb2JhbHMuYW5pbWF0aW9uRW5kZWQ9ITAsXCJsZWZ0XCI9PT1lLmFsaWduPyhhPTEwLHI9XCJzdGFydFwiKTpcInJpZ2h0XCI9PT1lLmFsaWduJiYoYT10Lmdsb2JhbHMuc3ZnV2lkdGgtMTAscj1cImVuZFwiKSxcInRvcFwiPT09ZS52ZXJ0aWNhbEFsaWduP3M9NTA6XCJib3R0b21cIj09PWUudmVydGljYWxBbGlnbiYmKHM9dC5nbG9iYWxzLnN2Z0hlaWdodC01MCksYSs9ZS5vZmZzZXRYLHM9cytwYXJzZUludChlLnN0eWxlLmZvbnRTaXplLDEwKSsyK2Uub2Zmc2V0WSx2b2lkIDAhPT1lLnRleHQmJlwiXCIhPT1lLnRleHQpe3ZhciBvPWkuZHJhd1RleHQoe3g6YSx5OnMsdGV4dDplLnRleHQsdGV4dEFuY2hvcjpyLGZvbnRTaXplOmUuc3R5bGUuZm9udFNpemUsZm9udEZhbWlseTplLnN0eWxlLmZvbnRGYW1pbHksZm9yZUNvbG9yOmUuc3R5bGUuY29sb3Isb3BhY2l0eToxLGNsYXNzOlwiYXBleGNoYXJ0cy10ZXh0LW5vZGF0YVwifSk7dC5nbG9iYWxzLmRvbS5QYXBlci5hZGQobyl9fX0se2tleTpcInNldE51bGxTZXJpZXNUb1plcm9WYWx1ZXNcIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy53LGk9MDtpPHQubGVuZ3RoO2krKylpZigwPT09dFtpXS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0W2UuZ2xvYmFscy5tYXhWYWxzSW5BcnJheUluZGV4XS5sZW5ndGg7YSsrKXRbaV0ucHVzaCgwKTtyZXR1cm4gdH19LHtrZXk6XCJoYXNBbGxTZXJpZXNFcXVhbFhcIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD0hMCxlPXRoaXMudyxpPXRoaXMuZmlsdGVyZWRTZXJpZXNYKCksYT0wO2E8aS5sZW5ndGgtMTthKyspaWYoaVthXVswXSE9PWlbYSsxXVswXSl7dD0hMTticmVha31yZXR1cm4gZS5nbG9iYWxzLmFsbFNlcmllc0hhc0VxdWFsWD10LHR9fSx7a2V5OlwiZmlsdGVyZWRTZXJpZXNYXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncuZ2xvYmFscy5zZXJpZXNYLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPjA/dDpbXX0pKTtyZXR1cm4gdH19XSksdH0oKSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53LHRoaXMudHdvRFNlcmllcz1bXSx0aGlzLnRocmVlRFNlcmllcz1bXSx0aGlzLnR3b0RTZXJpZXNYPVtdLHRoaXMuc2VyaWVzR29hbHM9W10sdGhpcy5jb3JlVXRpbHM9bmV3IHkodGhpcy5jdHgpfXJldHVybiByKHQsW3trZXk6XCJpc011bHRpRm9ybWF0XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Zvcm1hdFhZKCl8fHRoaXMuaXNGb3JtYXQyREFycmF5KCl9fSx7a2V5OlwiaXNGb3JtYXRYWVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LmNvbmZpZy5zZXJpZXMuc2xpY2UoKSxlPW5ldyBOKHRoaXMuY3R4KTtpZih0aGlzLmFjdGl2ZVNlcmllc0luZGV4PWUuZ2V0QWN0aXZlQ29uZmlnU2VyaWVzSW5kZXgoKSx2b2lkIDAhPT10W3RoaXMuYWN0aXZlU2VyaWVzSW5kZXhdLmRhdGEmJnRbdGhpcy5hY3RpdmVTZXJpZXNJbmRleF0uZGF0YS5sZW5ndGg+MCYmbnVsbCE9PXRbdGhpcy5hY3RpdmVTZXJpZXNJbmRleF0uZGF0YVswXSYmdm9pZCAwIT09dFt0aGlzLmFjdGl2ZVNlcmllc0luZGV4XS5kYXRhWzBdLngmJm51bGwhPT10W3RoaXMuYWN0aXZlU2VyaWVzSW5kZXhdLmRhdGFbMF0pcmV0dXJuITB9fSx7a2V5OlwiaXNGb3JtYXQyREFycmF5XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncuY29uZmlnLnNlcmllcy5zbGljZSgpLGU9bmV3IE4odGhpcy5jdHgpO2lmKHRoaXMuYWN0aXZlU2VyaWVzSW5kZXg9ZS5nZXRBY3RpdmVDb25maWdTZXJpZXNJbmRleCgpLHZvaWQgMCE9PXRbdGhpcy5hY3RpdmVTZXJpZXNJbmRleF0uZGF0YSYmdFt0aGlzLmFjdGl2ZVNlcmllc0luZGV4XS5kYXRhLmxlbmd0aD4wJiZ2b2lkIDAhPT10W3RoaXMuYWN0aXZlU2VyaWVzSW5kZXhdLmRhdGFbMF0mJm51bGwhPT10W3RoaXMuYWN0aXZlU2VyaWVzSW5kZXhdLmRhdGFbMF0mJnRbdGhpcy5hY3RpdmVTZXJpZXNJbmRleF0uZGF0YVswXS5jb25zdHJ1Y3Rvcj09PUFycmF5KXJldHVybiEwfX0se2tleTpcImhhbmRsZUZvcm1hdDJEQXJyYXlcIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10aGlzLncuY29uZmlnLGE9dGhpcy53Lmdsb2JhbHMscz1cImJveFBsb3RcIj09PWkuY2hhcnQudHlwZXx8XCJib3hQbG90XCI9PT1pLnNlcmllc1tlXS50eXBlLHI9MDtyPHRbZV0uZGF0YS5sZW5ndGg7cisrKWlmKHZvaWQgMCE9PXRbZV0uZGF0YVtyXVsxXSYmKEFycmF5LmlzQXJyYXkodFtlXS5kYXRhW3JdWzFdKSYmND09PXRbZV0uZGF0YVtyXVsxXS5sZW5ndGgmJiFzP3RoaXMudHdvRFNlcmllcy5wdXNoKHgucGFyc2VOdW1iZXIodFtlXS5kYXRhW3JdWzFdWzNdKSk6dFtlXS5kYXRhW3JdLmxlbmd0aD49NT90aGlzLnR3b0RTZXJpZXMucHVzaCh4LnBhcnNlTnVtYmVyKHRbZV0uZGF0YVtyXVs0XSkpOnRoaXMudHdvRFNlcmllcy5wdXNoKHgucGFyc2VOdW1iZXIodFtlXS5kYXRhW3JdWzFdKSksYS5kYXRhRm9ybWF0WE51bWVyaWM9ITApLFwiZGF0ZXRpbWVcIj09PWkueGF4aXMudHlwZSl7dmFyIG89bmV3IERhdGUodFtlXS5kYXRhW3JdWzBdKTtvPW5ldyBEYXRlKG8pLmdldFRpbWUoKSx0aGlzLnR3b0RTZXJpZXNYLnB1c2gobyl9ZWxzZSB0aGlzLnR3b0RTZXJpZXNYLnB1c2godFtlXS5kYXRhW3JdWzBdKTtmb3IodmFyIG49MDtuPHRbZV0uZGF0YS5sZW5ndGg7bisrKXZvaWQgMCE9PXRbZV0uZGF0YVtuXVsyXSYmKHRoaXMudGhyZWVEU2VyaWVzLnB1c2godFtlXS5kYXRhW25dWzJdKSxhLmlzRGF0YVhZWj0hMCl9fSx7a2V5OlwiaGFuZGxlRm9ybWF0WFlcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudy5jb25maWcsYT10aGlzLncuZ2xvYmFscyxzPW5ldyBUKHRoaXMuY3R4KSxyPWU7YS5jb2xsYXBzZWRTZXJpZXNJbmRpY2VzLmluZGV4T2YoZSk+LTEmJihyPXRoaXMuYWN0aXZlU2VyaWVzSW5kZXgpO2Zvcih2YXIgbz0wO288dFtlXS5kYXRhLmxlbmd0aDtvKyspdm9pZCAwIT09dFtlXS5kYXRhW29dLnkmJihBcnJheS5pc0FycmF5KHRbZV0uZGF0YVtvXS55KT90aGlzLnR3b0RTZXJpZXMucHVzaCh4LnBhcnNlTnVtYmVyKHRbZV0uZGF0YVtvXS55W3RbZV0uZGF0YVtvXS55Lmxlbmd0aC0xXSkpOnRoaXMudHdvRFNlcmllcy5wdXNoKHgucGFyc2VOdW1iZXIodFtlXS5kYXRhW29dLnkpKSksdm9pZCAwIT09dFtlXS5kYXRhW29dLmdvYWxzJiZBcnJheS5pc0FycmF5KHRbZV0uZGF0YVtvXS5nb2Fscyk/KHZvaWQgMD09PXRoaXMuc2VyaWVzR29hbHNbZV0mJih0aGlzLnNlcmllc0dvYWxzW2VdPVtdKSx0aGlzLnNlcmllc0dvYWxzW2VdLnB1c2godFtlXS5kYXRhW29dLmdvYWxzKSk6KHZvaWQgMD09PXRoaXMuc2VyaWVzR29hbHNbZV0mJih0aGlzLnNlcmllc0dvYWxzW2VdPVtdKSx0aGlzLnNlcmllc0dvYWxzW2VdLnB1c2gobnVsbCkpO2Zvcih2YXIgbj0wO248dFtyXS5kYXRhLmxlbmd0aDtuKyspe3ZhciBsPVwic3RyaW5nXCI9PXR5cGVvZiB0W3JdLmRhdGFbbl0ueCxoPUFycmF5LmlzQXJyYXkodFtyXS5kYXRhW25dLngpLGM9IWgmJiEhcy5pc1ZhbGlkRGF0ZSh0W3JdLmRhdGFbbl0ueC50b1N0cmluZygpKTtpZihsfHxjKWlmKGx8fGkueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljKXt2YXIgZD1hLmlzQmFySG9yaXpvbnRhbCYmYS5pc1JhbmdlRGF0YTtcImRhdGV0aW1lXCIhPT1pLnhheGlzLnR5cGV8fGQ/KHRoaXMuZmFsbGJhY2tUb0NhdGVnb3J5PSEwLHRoaXMudHdvRFNlcmllc1gucHVzaCh0W3JdLmRhdGFbbl0ueCkpOnRoaXMudHdvRFNlcmllc1gucHVzaChzLnBhcnNlRGF0ZSh0W3JdLmRhdGFbbl0ueCkpfWVsc2VcImRhdGV0aW1lXCI9PT1pLnhheGlzLnR5cGU/dGhpcy50d29EU2VyaWVzWC5wdXNoKHMucGFyc2VEYXRlKHRbcl0uZGF0YVtuXS54LnRvU3RyaW5nKCkpKTooYS5kYXRhRm9ybWF0WE51bWVyaWM9ITAsYS5pc1hOdW1lcmljPSEwLHRoaXMudHdvRFNlcmllc1gucHVzaChwYXJzZUZsb2F0KHRbcl0uZGF0YVtuXS54KSkpO2Vsc2UgaD8odGhpcy5mYWxsYmFja1RvQ2F0ZWdvcnk9ITAsdGhpcy50d29EU2VyaWVzWC5wdXNoKHRbcl0uZGF0YVtuXS54KSk6KGEuaXNYTnVtZXJpYz0hMCxhLmRhdGFGb3JtYXRYTnVtZXJpYz0hMCx0aGlzLnR3b0RTZXJpZXNYLnB1c2godFtyXS5kYXRhW25dLngpKX1pZih0W2VdLmRhdGFbMF0mJnZvaWQgMCE9PXRbZV0uZGF0YVswXS56KXtmb3IodmFyIGc9MDtnPHRbZV0uZGF0YS5sZW5ndGg7ZysrKXRoaXMudGhyZWVEU2VyaWVzLnB1c2godFtlXS5kYXRhW2ddLnopO2EuaXNEYXRhWFlaPSEwfX19LHtrZXk6XCJoYW5kbGVSYW5nZURhdGFcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudy5nbG9iYWxzLGE9e307cmV0dXJuIHRoaXMuaXNGb3JtYXQyREFycmF5KCk/YT10aGlzLmhhbmRsZVJhbmdlRGF0YUZvcm1hdChcImFycmF5XCIsdCxlKTp0aGlzLmlzRm9ybWF0WFkoKSYmKGE9dGhpcy5oYW5kbGVSYW5nZURhdGFGb3JtYXQoXCJ4eVwiLHQsZSkpLGkuc2VyaWVzUmFuZ2VTdGFydC5wdXNoKGEuc3RhcnQpLGkuc2VyaWVzUmFuZ2VFbmQucHVzaChhLmVuZCksaS5zZXJpZXNSYW5nZS5wdXNoKGEucmFuZ2VVbmlxdWVzKSxpLnNlcmllc1JhbmdlLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dCYmdC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QueS5mb3JFYWNoKChmdW5jdGlvbihlLGkpe2Zvcih2YXIgYT0wO2E8dC55Lmxlbmd0aDthKyspaWYoaSE9PWEpe3ZhciBzPWUueTEscj1lLnkyLG89dC55W2FdLnkxO3M8PXQueVthXS55MiYmbzw9ciYmKHQub3ZlcmxhcHMuaW5kZXhPZihlLnJhbmdlTmFtZSk8MCYmdC5vdmVybGFwcy5wdXNoKGUucmFuZ2VOYW1lKSx0Lm92ZXJsYXBzLmluZGV4T2YodC55W2FdLnJhbmdlTmFtZSk8MCYmdC5vdmVybGFwcy5wdXNoKHQueVthXS5yYW5nZU5hbWUpKX19KSl9KSl9KSksYX19LHtrZXk6XCJoYW5kbGVDYW5kbGVTdGlja0JveERhdGFcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudy5nbG9iYWxzLGE9e307cmV0dXJuIHRoaXMuaXNGb3JtYXQyREFycmF5KCk/YT10aGlzLmhhbmRsZUNhbmRsZVN0aWNrQm94RGF0YUZvcm1hdChcImFycmF5XCIsdCxlKTp0aGlzLmlzRm9ybWF0WFkoKSYmKGE9dGhpcy5oYW5kbGVDYW5kbGVTdGlja0JveERhdGFGb3JtYXQoXCJ4eVwiLHQsZSkpLGkuc2VyaWVzQ2FuZGxlT1tlXT1hLm8saS5zZXJpZXNDYW5kbGVIW2VdPWEuaCxpLnNlcmllc0NhbmRsZU1bZV09YS5tLGkuc2VyaWVzQ2FuZGxlTFtlXT1hLmwsaS5zZXJpZXNDYW5kbGVDW2VdPWEuYyxhfX0se2tleTpcImhhbmRsZVJhbmdlRGF0YUZvcm1hdFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT1bXSxzPVtdLHI9ZVtpXS5kYXRhLmZpbHRlcigoZnVuY3Rpb24odCxlLGkpe3JldHVybiBlPT09aS5maW5kSW5kZXgoKGZ1bmN0aW9uKGUpe3JldHVybiBlLng9PT10Lnh9KSl9KSkubWFwKChmdW5jdGlvbih0LGUpe3JldHVybnt4OnQueCxvdmVybGFwczpbXSx5OltdfX0pKTtpZihcImFycmF5XCI9PT10KWZvcih2YXIgbz0wO288ZVtpXS5kYXRhLmxlbmd0aDtvKyspQXJyYXkuaXNBcnJheShlW2ldLmRhdGFbb10pPyhhLnB1c2goZVtpXS5kYXRhW29dWzFdWzBdKSxzLnB1c2goZVtpXS5kYXRhW29dWzFdWzFdKSk6KGEucHVzaChlW2ldLmRhdGFbb10pLHMucHVzaChlW2ldLmRhdGFbb10pKTtlbHNlIGlmKFwieHlcIj09PXQpZm9yKHZhciBuPWZ1bmN0aW9uKHQpe3ZhciBvPUFycmF5LmlzQXJyYXkoZVtpXS5kYXRhW3RdLnkpLG49eC5yYW5kb21JZCgpLGw9ZVtpXS5kYXRhW3RdLngsaD17eTE6bz9lW2ldLmRhdGFbdF0ueVswXTplW2ldLmRhdGFbdF0ueSx5MjpvP2VbaV0uZGF0YVt0XS55WzFdOmVbaV0uZGF0YVt0XS55LHJhbmdlTmFtZTpufTtlW2ldLmRhdGFbdF0ucmFuZ2VOYW1lPW47dmFyIGM9ci5maW5kSW5kZXgoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lng9PT1sfSkpO3JbY10ueS5wdXNoKGgpLGEucHVzaChoLnkxKSxzLnB1c2goaC55Mil9LGw9MDtsPGVbaV0uZGF0YS5sZW5ndGg7bCsrKW4obCk7cmV0dXJue3N0YXJ0OmEsZW5kOnMscmFuZ2VVbmlxdWVzOnJ9fX0se2tleTpcImhhbmRsZUNhbmRsZVN0aWNrQm94RGF0YUZvcm1hdFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10aGlzLncscz1cImJveFBsb3RcIj09PWEuY29uZmlnLmNoYXJ0LnR5cGV8fFwiYm94UGxvdFwiPT09YS5jb25maWcuc2VyaWVzW2ldLnR5cGUscj1bXSxvPVtdLG49W10sbD1bXSxoPVtdO2lmKFwiYXJyYXlcIj09PXQpaWYocyYmNj09PWVbaV0uZGF0YVswXS5sZW5ndGh8fCFzJiY1PT09ZVtpXS5kYXRhWzBdLmxlbmd0aClmb3IodmFyIGM9MDtjPGVbaV0uZGF0YS5sZW5ndGg7YysrKXIucHVzaChlW2ldLmRhdGFbY11bMV0pLG8ucHVzaChlW2ldLmRhdGFbY11bMl0pLHM/KG4ucHVzaChlW2ldLmRhdGFbY11bM10pLGwucHVzaChlW2ldLmRhdGFbY11bNF0pLGgucHVzaChlW2ldLmRhdGFbY11bNV0pKToobC5wdXNoKGVbaV0uZGF0YVtjXVszXSksaC5wdXNoKGVbaV0uZGF0YVtjXVs0XSkpO2Vsc2UgZm9yKHZhciBkPTA7ZDxlW2ldLmRhdGEubGVuZ3RoO2QrKylBcnJheS5pc0FycmF5KGVbaV0uZGF0YVtkXVsxXSkmJihyLnB1c2goZVtpXS5kYXRhW2RdWzFdWzBdKSxvLnB1c2goZVtpXS5kYXRhW2RdWzFdWzFdKSxzPyhuLnB1c2goZVtpXS5kYXRhW2RdWzFdWzJdKSxsLnB1c2goZVtpXS5kYXRhW2RdWzFdWzNdKSxoLnB1c2goZVtpXS5kYXRhW2RdWzFdWzRdKSk6KGwucHVzaChlW2ldLmRhdGFbZF1bMV1bMl0pLGgucHVzaChlW2ldLmRhdGFbZF1bMV1bM10pKSk7ZWxzZSBpZihcInh5XCI9PT10KWZvcih2YXIgZz0wO2c8ZVtpXS5kYXRhLmxlbmd0aDtnKyspQXJyYXkuaXNBcnJheShlW2ldLmRhdGFbZ10ueSkmJihyLnB1c2goZVtpXS5kYXRhW2ddLnlbMF0pLG8ucHVzaChlW2ldLmRhdGFbZ10ueVsxXSkscz8obi5wdXNoKGVbaV0uZGF0YVtnXS55WzJdKSxsLnB1c2goZVtpXS5kYXRhW2ddLnlbM10pLGgucHVzaChlW2ldLmRhdGFbZ10ueVs0XSkpOihsLnB1c2goZVtpXS5kYXRhW2ddLnlbMl0pLGgucHVzaChlW2ldLmRhdGFbZ10ueVszXSkpKTtyZXR1cm57bzpyLGg6byxtOm4sbDpsLGM6aH19fSx7a2V5OlwicGFyc2VEYXRhQXhpc0NoYXJ0c1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5jdHgsYT10aGlzLncuY29uZmlnLHM9dGhpcy53Lmdsb2JhbHMscj1uZXcgVChpKSxvPWEubGFiZWxzLmxlbmd0aD4wP2EubGFiZWxzLnNsaWNlKCk6YS54YXhpcy5jYXRlZ29yaWVzLnNsaWNlKCk7cy5pc1JhbmdlQmFyPVwicmFuZ2VCYXJcIj09PWEuY2hhcnQudHlwZSYmcy5pc0Jhckhvcml6b250YWwscy5oYXNHcm91cHM9XCJjYXRlZ29yeVwiPT09YS54YXhpcy50eXBlJiZhLnhheGlzLmdyb3VwLmdyb3Vwcy5sZW5ndGg+MCxzLmhhc0dyb3VwcyYmKHMuZ3JvdXBzPWEueGF4aXMuZ3JvdXAuZ3JvdXBzKTtmb3IodmFyIG49ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoO3QrKylpZihcInN0cmluZ1wiPT10eXBlb2Ygb1t0XSl7aWYoIXIuaXNWYWxpZERhdGUob1t0XSkpdGhyb3cgbmV3IEVycm9yKFwiWW91IGhhdmUgcHJvdmlkZWQgaW52YWxpZCBEYXRlIGZvcm1hdC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBKYXZhU2NyaXB0IERhdGVcIik7ZS50d29EU2VyaWVzWC5wdXNoKHIucGFyc2VEYXRlKG9bdF0pKX1lbHNlIGUudHdvRFNlcmllc1gucHVzaChvW3RdKX0sbD0wO2w8dC5sZW5ndGg7bCsrKXtpZih0aGlzLnR3b0RTZXJpZXM9W10sdGhpcy50d29EU2VyaWVzWD1bXSx0aGlzLnRocmVlRFNlcmllcz1bXSx2b2lkIDA9PT10W2xdLmRhdGEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcIkl0IGlzIGEgcG9zc2liaWxpdHkgdGhhdCB5b3UgbWF5IGhhdmUgbm90IGluY2x1ZGVkICdkYXRhJyBwcm9wZXJ0eSBpbiBzZXJpZXMuXCIpO2lmKFwicmFuZ2VCYXJcIiE9PWEuY2hhcnQudHlwZSYmXCJyYW5nZUFyZWFcIiE9PWEuY2hhcnQudHlwZSYmXCJyYW5nZUJhclwiIT09dFtsXS50eXBlJiZcInJhbmdlQXJlYVwiIT09dFtsXS50eXBlfHwocy5pc1JhbmdlRGF0YT0hMCxzLmlzQ29tYm9DaGFydHM/XCJyYW5nZUJhclwiIT09dFtsXS50eXBlJiZcInJhbmdlQXJlYVwiIT09dFtsXS50eXBlfHx0aGlzLmhhbmRsZVJhbmdlRGF0YSh0LGwpOlwicmFuZ2VCYXJcIiE9PWEuY2hhcnQudHlwZSYmXCJyYW5nZUFyZWFcIiE9PWEuY2hhcnQudHlwZXx8dGhpcy5oYW5kbGVSYW5nZURhdGEodCxsKSksdGhpcy5pc011bHRpRm9ybWF0KCkpdGhpcy5pc0Zvcm1hdDJEQXJyYXkoKT90aGlzLmhhbmRsZUZvcm1hdDJEQXJyYXkodCxsKTp0aGlzLmlzRm9ybWF0WFkoKSYmdGhpcy5oYW5kbGVGb3JtYXRYWSh0LGwpLFwiY2FuZGxlc3RpY2tcIiE9PWEuY2hhcnQudHlwZSYmXCJjYW5kbGVzdGlja1wiIT09dFtsXS50eXBlJiZcImJveFBsb3RcIiE9PWEuY2hhcnQudHlwZSYmXCJib3hQbG90XCIhPT10W2xdLnR5cGV8fHRoaXMuaGFuZGxlQ2FuZGxlU3RpY2tCb3hEYXRhKHQsbCkscy5zZXJpZXMucHVzaCh0aGlzLnR3b0RTZXJpZXMpLHMubGFiZWxzLnB1c2godGhpcy50d29EU2VyaWVzWCkscy5zZXJpZXNYLnB1c2godGhpcy50d29EU2VyaWVzWCkscy5zZXJpZXNHb2Fscz10aGlzLnNlcmllc0dvYWxzLGwhPT10aGlzLmFjdGl2ZVNlcmllc0luZGV4fHx0aGlzLmZhbGxiYWNrVG9DYXRlZ29yeXx8KHMuaXNYTnVtZXJpYz0hMCk7ZWxzZXtcImRhdGV0aW1lXCI9PT1hLnhheGlzLnR5cGU/KHMuaXNYTnVtZXJpYz0hMCxuKCkscy5zZXJpZXNYLnB1c2godGhpcy50d29EU2VyaWVzWCkpOlwibnVtZXJpY1wiPT09YS54YXhpcy50eXBlJiYocy5pc1hOdW1lcmljPSEwLG8ubGVuZ3RoPjAmJih0aGlzLnR3b0RTZXJpZXNYPW8scy5zZXJpZXNYLnB1c2godGhpcy50d29EU2VyaWVzWCkpKSxzLmxhYmVscy5wdXNoKHRoaXMudHdvRFNlcmllc1gpO3ZhciBoPXRbbF0uZGF0YS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB4LnBhcnNlTnVtYmVyKHQpfSkpO3Muc2VyaWVzLnB1c2goaCl9cy5zZXJpZXNaLnB1c2godGhpcy50aHJlZURTZXJpZXMpLHZvaWQgMCE9PXRbbF0ubmFtZT9zLnNlcmllc05hbWVzLnB1c2godFtsXS5uYW1lKTpzLnNlcmllc05hbWVzLnB1c2goXCJzZXJpZXMtXCIrcGFyc2VJbnQobCsxLDEwKSksdm9pZCAwIT09dFtsXS5jb2xvcj9zLnNlcmllc0NvbG9ycy5wdXNoKHRbbF0uY29sb3IpOnMuc2VyaWVzQ29sb3JzLnB1c2godm9pZCAwKX1yZXR1cm4gdGhpcy53fX0se2tleTpcInBhcnNlRGF0YU5vbkF4aXNDaGFydHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncuZ2xvYmFscyxpPXRoaXMudy5jb25maWc7ZS5zZXJpZXM9dC5zbGljZSgpLGUuc2VyaWVzTmFtZXM9aS5sYWJlbHMuc2xpY2UoKTtmb3IodmFyIGE9MDthPGUuc2VyaWVzLmxlbmd0aDthKyspdm9pZCAwPT09ZS5zZXJpZXNOYW1lc1thXSYmZS5zZXJpZXNOYW1lcy5wdXNoKFwic2VyaWVzLVwiKyhhKzEpKTtyZXR1cm4gdGhpcy53fX0se2tleTpcImhhbmRsZUV4dGVybmFsTGFiZWxzRGF0YVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudy5jb25maWcsaT10aGlzLncuZ2xvYmFscztpZihlLnhheGlzLmNhdGVnb3JpZXMubGVuZ3RoPjApaS5sYWJlbHM9ZS54YXhpcy5jYXRlZ29yaWVzO2Vsc2UgaWYoZS5sYWJlbHMubGVuZ3RoPjApaS5sYWJlbHM9ZS5sYWJlbHMuc2xpY2UoKTtlbHNlIGlmKHRoaXMuZmFsbGJhY2tUb0NhdGVnb3J5KXtpZihpLmxhYmVscz1pLmxhYmVsc1swXSxpLnNlcmllc1JhbmdlLmxlbmd0aCYmKGkuc2VyaWVzUmFuZ2UubWFwKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2kubGFiZWxzLmluZGV4T2YodC54KTwwJiZ0LngmJmkubGFiZWxzLnB1c2godC54KX0pKX0pKSxpLmxhYmVscz1pLmxhYmVscy5maWx0ZXIoKGZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gaS5pbmRleE9mKHQpPT09ZX0pKSksZS54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWMpbmV3IFgoZSkuY29udmVydENhdFRvTnVtZXJpY1hheGlzKGUsdGhpcy5jdHgsaS5zZXJpZXNYWzBdKSx0aGlzLl9nZW5lcmF0ZUV4dGVybmFsTGFiZWxzKHQpfWVsc2UgdGhpcy5fZ2VuZXJhdGVFeHRlcm5hbExhYmVscyh0KX19LHtrZXk6XCJfZ2VuZXJhdGVFeHRlcm5hbExhYmVsc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudy5nbG9iYWxzLGk9dGhpcy53LmNvbmZpZyxhPVtdO2lmKGUuYXhpc0NoYXJ0cyl7aWYoZS5zZXJpZXMubGVuZ3RoPjApaWYodGhpcy5pc0Zvcm1hdFhZKCkpZm9yKHZhciBzPWkuc2VyaWVzLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kYXRhLmZpbHRlcigoZnVuY3Rpb24odCxlLGkpe3JldHVybiBpLmZpbmRJbmRleCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUueD09PXQueH0pKT09PWV9KSl9KSkscj1zLnJlZHVjZSgoZnVuY3Rpb24odCxlLGksYSl7cmV0dXJuIGFbdF0ubGVuZ3RoPmUubGVuZ3RoP3Q6aX0pLDApLG89MDtvPHNbcl0ubGVuZ3RoO28rKylhLnB1c2gobysxKTtlbHNlIGZvcih2YXIgbj0wO248ZS5zZXJpZXNbZS5tYXhWYWxzSW5BcnJheUluZGV4XS5sZW5ndGg7bisrKWEucHVzaChuKzEpO2Uuc2VyaWVzWD1bXTtmb3IodmFyIGw9MDtsPHQubGVuZ3RoO2wrKyllLnNlcmllc1gucHVzaChhKTtlLmlzWE51bWVyaWM9ITB9aWYoMD09PWEubGVuZ3RoKXthPWUuYXhpc0NoYXJ0cz9bXTplLnNlcmllcy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUrMX0pKTtmb3IodmFyIGg9MDtoPHQubGVuZ3RoO2grKyllLnNlcmllc1gucHVzaChhKX1lLmxhYmVscz1hLGkueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljJiYoZS5jYXRlZ29yeUxhYmVscz1hLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkueGF4aXMubGFiZWxzLmZvcm1hdHRlcih0KX0pKSksZS5ub0xhYmVsc1Byb3ZpZGVkPSEwfX0se2tleTpcInBhcnNlRGF0YVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudyxpPWUuY29uZmlnLGE9ZS5nbG9iYWxzO2lmKHRoaXMuZXhjbHVkZUNvbGxhcHNlZFNlcmllc0luWUF4aXMoKSx0aGlzLmZhbGxiYWNrVG9DYXRlZ29yeT0hMSx0aGlzLmN0eC5jb3JlLnJlc2V0R2xvYmFscygpLHRoaXMuY3R4LmNvcmUuaXNNdWx0aXBsZVkoKSxhLmF4aXNDaGFydHM/KHRoaXMucGFyc2VEYXRhQXhpc0NoYXJ0cyh0KSx0aGlzLmNvcmVVdGlscy5nZXRMYXJnZXN0U2VyaWVzKCkpOnRoaXMucGFyc2VEYXRhTm9uQXhpc0NoYXJ0cyh0KSxcImJhclwiPT09aS5jaGFydC50eXBlJiZpLmNoYXJ0LnN0YWNrZWQpe3ZhciBzPW5ldyBOKHRoaXMuY3R4KTthLnNlcmllcz1zLnNldE51bGxTZXJpZXNUb1plcm9WYWx1ZXMoYS5zZXJpZXMpfXRoaXMuY29yZVV0aWxzLmdldFNlcmllc1RvdGFscygpLGEuYXhpc0NoYXJ0cyYmKGEuc3RhY2tlZFNlcmllc1RvdGFscz10aGlzLmNvcmVVdGlscy5nZXRTdGFja2VkU2VyaWVzVG90YWxzKCkpLHRoaXMuY29yZVV0aWxzLmdldFBlcmNlbnRTZXJpZXMoKSxhLmRhdGFGb3JtYXRYTnVtZXJpY3x8YS5pc1hOdW1lcmljJiYoXCJudW1lcmljXCIhPT1pLnhheGlzLnR5cGV8fDAhPT1pLmxhYmVscy5sZW5ndGh8fDAhPT1pLnhheGlzLmNhdGVnb3JpZXMubGVuZ3RoKXx8dGhpcy5oYW5kbGVFeHRlcm5hbExhYmVsc0RhdGEodCk7Zm9yKHZhciByPXRoaXMuY29yZVV0aWxzLmdldENhdGVnb3J5TGFiZWxzKGEubGFiZWxzKSxvPTA7bzxyLmxlbmd0aDtvKyspaWYoQXJyYXkuaXNBcnJheShyW29dKSl7YS5pc011bHRpTGluZVg9ITA7YnJlYWt9fX0se2tleTpcImV4Y2x1ZGVDb2xsYXBzZWRTZXJpZXNJbllBeGlzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy53O2UuZ2xvYmFscy5pZ25vcmVZQXhpc0luZGV4ZXM9ZS5nbG9iYWxzLmNvbGxhcHNlZFNlcmllcy5tYXAoKGZ1bmN0aW9uKGksYSl7aWYodC53Lmdsb2JhbHMuaXNNdWx0aXBsZVlBeGlzJiYhZS5jb25maWcuY2hhcnQuc3RhY2tlZClyZXR1cm4gaS5pbmRleH0pKX19XSksdH0oKSxXPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53LHRoaXMudG9vbHRpcEtleUZvcm1hdD1cImRkIE1NTVwifXJldHVybiByKHQsW3trZXk6XCJ4TGFiZWxGb3JtYXRcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhKXt2YXIgcz10aGlzLnc7aWYoXCJkYXRldGltZVwiPT09cy5jb25maWcueGF4aXMudHlwZSYmdm9pZCAwPT09cy5jb25maWcueGF4aXMubGFiZWxzLmZvcm1hdHRlciYmdm9pZCAwPT09cy5jb25maWcudG9vbHRpcC54LmZvcm1hdHRlcil7dmFyIHI9bmV3IFQodGhpcy5jdHgpO3JldHVybiByLmZvcm1hdERhdGUoci5nZXREYXRlKGUpLHMuY29uZmlnLnRvb2x0aXAueC5mb3JtYXQpfXJldHVybiB0KGUsaSxhKX19LHtrZXk6XCJkZWZhdWx0R2VuZXJhbEZvcm1hdHRlclwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTp0fX0se2tleTpcImRlZmF1bHRZRm9ybWF0dGVyXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMudztyZXR1cm4geC5pc051bWJlcih0KSYmKHQ9MCE9PWEuZ2xvYmFscy55VmFsdWVEZWNpbWFsP3QudG9GaXhlZCh2b2lkIDAhPT1lLmRlY2ltYWxzSW5GbG9hdD9lLmRlY2ltYWxzSW5GbG9hdDphLmdsb2JhbHMueVZhbHVlRGVjaW1hbCk6YS5nbG9iYWxzLm1heFlBcnJbaV0tYS5nbG9iYWxzLm1pbllBcnJbaV08NT90LnRvRml4ZWQoMSk6dC50b0ZpeGVkKDApKSx0fX0se2tleTpcInNldExhYmVsRm9ybWF0dGVyc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMudztyZXR1cm4gZS5nbG9iYWxzLnhheGlzVG9vbHRpcEZvcm1hdHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdC5kZWZhdWx0R2VuZXJhbEZvcm1hdHRlcihlKX0sZS5nbG9iYWxzLnR0S2V5Rm9ybWF0dGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0LmRlZmF1bHRHZW5lcmFsRm9ybWF0dGVyKGUpfSxlLmdsb2JhbHMudHRaRm9ybWF0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxlLmdsb2JhbHMubGVnZW5kRm9ybWF0dGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0LmRlZmF1bHRHZW5lcmFsRm9ybWF0dGVyKGUpfSx2b2lkIDAhPT1lLmNvbmZpZy54YXhpcy5sYWJlbHMuZm9ybWF0dGVyP2UuZ2xvYmFscy54TGFiZWxGb3JtYXR0ZXI9ZS5jb25maWcueGF4aXMubGFiZWxzLmZvcm1hdHRlcjplLmdsb2JhbHMueExhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQpe2lmKHguaXNOdW1iZXIodCkpe2lmKCFlLmNvbmZpZy54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWMmJlwibnVtZXJpY1wiPT09ZS5jb25maWcueGF4aXMudHlwZSl7aWYoeC5pc051bWJlcihlLmNvbmZpZy54YXhpcy5kZWNpbWFsc0luRmxvYXQpKXJldHVybiB0LnRvRml4ZWQoZS5jb25maWcueGF4aXMuZGVjaW1hbHNJbkZsb2F0KTt2YXIgaT1lLmdsb2JhbHMubWF4WC1lLmdsb2JhbHMubWluWDtyZXR1cm4gaT4wJiZpPDEwMD90LnRvRml4ZWQoMSk6dC50b0ZpeGVkKDApfWlmKGUuZ2xvYmFscy5pc0Jhckhvcml6b250YWwpaWYoZS5nbG9iYWxzLm1heFktZS5nbG9iYWxzLm1pbllBcnI8NClyZXR1cm4gdC50b0ZpeGVkKDEpO3JldHVybiB0LnRvRml4ZWQoMCl9cmV0dXJuIHR9LFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29uZmlnLnRvb2x0aXAueC5mb3JtYXR0ZXI/ZS5nbG9iYWxzLnR0S2V5Rm9ybWF0dGVyPWUuY29uZmlnLnRvb2x0aXAueC5mb3JtYXR0ZXI6ZS5nbG9iYWxzLnR0S2V5Rm9ybWF0dGVyPWUuZ2xvYmFscy54TGFiZWxGb3JtYXR0ZXIsXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25maWcueGF4aXMudG9vbHRpcC5mb3JtYXR0ZXImJihlLmdsb2JhbHMueGF4aXNUb29sdGlwRm9ybWF0dGVyPWUuY29uZmlnLnhheGlzLnRvb2x0aXAuZm9ybWF0dGVyKSwoQXJyYXkuaXNBcnJheShlLmNvbmZpZy50b29sdGlwLnkpfHx2b2lkIDAhPT1lLmNvbmZpZy50b29sdGlwLnkuZm9ybWF0dGVyKSYmKGUuZ2xvYmFscy50dFZhbD1lLmNvbmZpZy50b29sdGlwLnkpLHZvaWQgMCE9PWUuY29uZmlnLnRvb2x0aXAuei5mb3JtYXR0ZXImJihlLmdsb2JhbHMudHRaRm9ybWF0dGVyPWUuY29uZmlnLnRvb2x0aXAuei5mb3JtYXR0ZXIpLHZvaWQgMCE9PWUuY29uZmlnLmxlZ2VuZC5mb3JtYXR0ZXImJihlLmdsb2JhbHMubGVnZW5kRm9ybWF0dGVyPWUuY29uZmlnLmxlZ2VuZC5mb3JtYXR0ZXIpLGUuY29uZmlnLnlheGlzLmZvckVhY2goKGZ1bmN0aW9uKGksYSl7dm9pZCAwIT09aS5sYWJlbHMuZm9ybWF0dGVyP2UuZ2xvYmFscy55TGFiZWxGb3JtYXR0ZXJzW2FdPWkubGFiZWxzLmZvcm1hdHRlcjplLmdsb2JhbHMueUxhYmVsRm9ybWF0dGVyc1thXT1mdW5jdGlvbihzKXtyZXR1cm4gZS5nbG9iYWxzLnh5Q2hhcnRzP0FycmF5LmlzQXJyYXkocyk/cy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmRlZmF1bHRZRm9ybWF0dGVyKGUsaSxhKX0pKTp0LmRlZmF1bHRZRm9ybWF0dGVyKHMsaSxhKTpzfX0pKSxlLmdsb2JhbHN9fSx7a2V5OlwiaGVhdG1hcExhYmVsRm9ybWF0dGVyc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53O2lmKFwiaGVhdG1hcFwiPT09dC5jb25maWcuY2hhcnQudHlwZSl7dC5nbG9iYWxzLnlBeGlzU2NhbGVbMF0ucmVzdWx0PXQuZ2xvYmFscy5zZXJpZXNOYW1lcy5zbGljZSgpO3ZhciBlPXQuZ2xvYmFscy5zZXJpZXNOYW1lcy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPmUubGVuZ3RoP3Q6ZX0pLDApO3QuZ2xvYmFscy55QXhpc1NjYWxlWzBdLm5pY2VNYXg9ZSx0Lmdsb2JhbHMueUF4aXNTY2FsZVswXS5uaWNlTWluPWV9fX1dKSx0fSgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLnd9cmV0dXJuIHIodCxbe2tleTpcImdldExhYmVsXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM9YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOltdLHI9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOlwiMTJweFwiLG89IShhcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XSl8fGFyZ3VtZW50c1s2XSxuPXRoaXMudyxsPXZvaWQgMD09PXRbYV0/XCJcIjp0W2FdLGg9bCxjPW4uZ2xvYmFscy54TGFiZWxGb3JtYXR0ZXIsZD1uLmNvbmZpZy54YXhpcy5sYWJlbHMuZm9ybWF0dGVyLGc9ITEsdT1uZXcgVyh0aGlzLmN0eCksZj1sO28mJihoPXUueExhYmVsRm9ybWF0KGMsbCxmLHtpOmEsZGF0ZUZvcm1hdHRlcjpuZXcgVCh0aGlzLmN0eCkuZm9ybWF0RGF0ZSx3Om59KSx2b2lkIDAhPT1kJiYoaD1kKGwsdFthXSx7aTphLGRhdGVGb3JtYXR0ZXI6bmV3IFQodGhpcy5jdHgpLmZvcm1hdERhdGUsdzpufSkpKTt2YXIgcD1mdW5jdGlvbih0KXt2YXIgaT1udWxsO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKHQpe1wibW9udGhcIj09PXQudW5pdD9pPVwieWVhclwiOlwiZGF5XCI9PT10LnVuaXQ/aT1cIm1vbnRoXCI6XCJob3VyXCI9PT10LnVuaXQ/aT1cImRheVwiOlwibWludXRlXCI9PT10LnVuaXQmJihpPVwiaG91clwiKX0pKSxpPT09dH07ZS5sZW5ndGg+MD8oZz1wKGVbYV0udW5pdCksaT1lW2FdLnBvc2l0aW9uLGg9ZVthXS52YWx1ZSk6XCJkYXRldGltZVwiPT09bi5jb25maWcueGF4aXMudHlwZSYmdm9pZCAwPT09ZCYmKGg9XCJcIiksdm9pZCAwPT09aCYmKGg9XCJcIiksaD1BcnJheS5pc0FycmF5KGgpP2g6aC50b1N0cmluZygpO3ZhciB4PW5ldyBtKHRoaXMuY3R4KSxiPXt9O2I9bi5nbG9iYWxzLnJvdGF0ZVhMYWJlbHMmJm8/eC5nZXRUZXh0UmVjdHMoaCxwYXJzZUludChyLDEwKSxudWxsLFwicm90YXRlKFwiLmNvbmNhdChuLmNvbmZpZy54YXhpcy5sYWJlbHMucm90YXRlLFwiIDAgMClcIiksITEpOnguZ2V0VGV4dFJlY3RzKGgscGFyc2VJbnQociwxMCkpO3ZhciB2PSFuLmNvbmZpZy54YXhpcy5sYWJlbHMuc2hvd0R1cGxpY2F0ZXMmJnRoaXMuY3R4LnRpbWVTY2FsZTtyZXR1cm4hQXJyYXkuaXNBcnJheShoKSYmKDA9PT1oLmluZGV4T2YoXCJOYU5cIil8fDA9PT1oLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImludmFsaWRcIil8fGgudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiaW5maW5pdHlcIik+PTB8fHMuaW5kZXhPZihoKT49MCYmdikmJihoPVwiXCIpLHt4OmksdGV4dDpoLHRleHRSZWN0OmIsaXNCb2xkOmd9fX0se2tleTpcImNoZWNrTGFiZWxCYXNlZE9uVGlja2Ftb3VudFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10aGlzLncscz1hLmNvbmZpZy54YXhpcy50aWNrQW1vdW50O3JldHVyblwiZGF0YVBvaW50c1wiPT09cyYmKHM9TWF0aC5yb3VuZChhLmdsb2JhbHMuZ3JpZFdpZHRoLzEyMCkpLHM+aXx8dCVNYXRoLnJvdW5kKGkvKHMrMSkpPT0wfHwoZS50ZXh0PVwiXCIpLGV9fSx7a2V5OlwiY2hlY2tGb3JPdmVyZmxvd2luZ0xhYmVsc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEscyl7dmFyIHI9dGhpcy53O2lmKDA9PT10JiZyLmdsb2JhbHMuc2tpcEZpcnN0VGltZWxpbmVsYWJlbCYmKGUudGV4dD1cIlwiKSx0PT09aS0xJiZyLmdsb2JhbHMuc2tpcExhc3RUaW1lbGluZWxhYmVsJiYoZS50ZXh0PVwiXCIpLHIuY29uZmlnLnhheGlzLmxhYmVscy5oaWRlT3ZlcmxhcHBpbmdMYWJlbHMmJmEubGVuZ3RoPjApe3ZhciBvPXNbcy5sZW5ndGgtMV07ZS54PG8udGV4dFJlY3Qud2lkdGgvKHIuZ2xvYmFscy5yb3RhdGVYTGFiZWxzP01hdGguYWJzKHIuY29uZmlnLnhheGlzLmxhYmVscy5yb3RhdGUpLzEyOjEuMDEpK28ueCYmKGUudGV4dD1cIlwiKX1yZXR1cm4gZX19LHtrZXk6XCJjaGVja0ZvclJldmVyc2VkTGFiZWxzXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnc7cmV0dXJuIGkuY29uZmlnLnlheGlzW3RdJiZpLmNvbmZpZy55YXhpc1t0XS5yZXZlcnNlZCYmZS5yZXZlcnNlKCksZX19LHtrZXk6XCJpc1lBeGlzSGlkZGVuXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53LGk9bmV3IHkodGhpcy5jdHgpO3JldHVybiFlLmNvbmZpZy55YXhpc1t0XS5zaG93fHwhZS5jb25maWcueWF4aXNbdF0uc2hvd0Zvck51bGxTZXJpZXMmJmkuaXNTZXJpZXNOdWxsKHQpJiYtMT09PWUuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXNJbmRpY2VzLmluZGV4T2YodCl9fSx7a2V5OlwiZ2V0WUF4aXNGb3JlQ29sb3JcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudztyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmaS5nbG9iYWxzLnlBeGlzU2NhbGVbZV0mJnRoaXMuY3R4LnRoZW1lLnB1c2hFeHRyYUNvbG9ycyh0LGkuZ2xvYmFscy55QXhpc1NjYWxlW2VdLnJlc3VsdC5sZW5ndGgsITEpLHR9fSx7a2V5OlwiZHJhd1lBeGlzVGlja3NcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhLHMscixvKXt2YXIgbj10aGlzLncsbD1uZXcgbSh0aGlzLmN0eCksaD1uLmdsb2JhbHMudHJhbnNsYXRlWTtpZihhLnNob3cmJmU+MCl7ITA9PT1uLmNvbmZpZy55YXhpc1tzXS5vcHBvc2l0ZSYmKHQrPWEud2lkdGgpO2Zvcih2YXIgYz1lO2M+PTA7Yy0tKXt2YXIgZD1oK2UvMTArbi5jb25maWcueWF4aXNbc10ubGFiZWxzLm9mZnNldFktMTtuLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsJiYoZD1yKmMpLFwiaGVhdG1hcFwiPT09bi5jb25maWcuY2hhcnQudHlwZSYmKGQrPXIvMik7dmFyIGc9bC5kcmF3TGluZSh0K2kub2Zmc2V0WC1hLndpZHRoK2Eub2Zmc2V0WCxkK2Eub2Zmc2V0WSx0K2kub2Zmc2V0WCthLm9mZnNldFgsZCthLm9mZnNldFksYS5jb2xvcik7by5hZGQoZyksaCs9cn19fX1dKSx0fSgpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLnd9cmV0dXJuIHIodCxbe2tleTpcInNjYWxlU3ZnTm9kZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9cGFyc2VGbG9hdCh0LmdldEF0dHJpYnV0ZU5TKG51bGwsXCJ3aWR0aFwiKSksYT1wYXJzZUZsb2F0KHQuZ2V0QXR0cmlidXRlTlMobnVsbCxcImhlaWdodFwiKSk7dC5zZXRBdHRyaWJ1dGVOUyhudWxsLFwid2lkdGhcIixpKmUpLHQuc2V0QXR0cmlidXRlTlMobnVsbCxcImhlaWdodFwiLGEqZSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLFwidmlld0JveFwiLFwiMCAwIFwiK2krXCIgXCIrYSl9fSx7a2V5OlwiZml4U3ZnU3RyaW5nRm9ySWUxMVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF4LmlzSUUxMSgpKXJldHVybiB0LnJlcGxhY2UoLyZuYnNwOy9nLFwiJiMxNjA7XCIpO3ZhciBlPTAsaT10LnJlcGxhY2UoL3htbG5zPVwiaHR0cDpcXC9cXC93d3cudzMub3JnXFwvMjAwMFxcL3N2Z1wiL2csKGZ1bmN0aW9uKHQpe3JldHVybiAyPT09KytlPyd4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB4bWxuczpzdmdqcz1cImh0dHA6Ly9zdmdqcy5kZXZcIic6dH0pKTtyZXR1cm4gaT0oaT1pLnJlcGxhY2UoL3htbG5zOk5TXFxkKz1cIlwiL2csXCJcIikpLnJlcGxhY2UoL05TXFxkKzooXFx3KzpcXHcrPVwiKS9nLFwiJDFcIil9fSx7a2V5OlwiZ2V0U3ZnU3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7bnVsbD09dCYmKHQ9MSk7dmFyIGU9dGhpcy53Lmdsb2JhbHMuZG9tLlBhcGVyLnN2ZygpO2lmKDEhPT10KXt2YXIgaT10aGlzLncuZ2xvYmFscy5kb20uUGFwZXIubm9kZS5jbG9uZU5vZGUoITApO3RoaXMuc2NhbGVTdmdOb2RlKGksdCksZT0obmV3IFhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKGkpfXJldHVybiB0aGlzLmZpeFN2Z1N0cmluZ0ZvckllMTEoZSl9fSx7a2V5OlwiY2xlYW51cFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9dC5nbG9iYWxzLmRvbS5iYXNlRWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFwZXhjaGFydHMteGNyb3NzaGFpcnNcIiksaT10Lmdsb2JhbHMuZG9tLmJhc2VFbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYXBleGNoYXJ0cy15Y3Jvc3NoYWlyc1wiKSxhPXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy16b29tLXJlY3QsIC5hcGV4Y2hhcnRzLXNlbGVjdGlvbi1yZWN0XCIpO0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYSwoZnVuY3Rpb24odCl7dC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLDApfSkpLGUmJmVbMF0mJihlWzBdLnNldEF0dHJpYnV0ZShcInhcIiwtNTAwKSxlWzBdLnNldEF0dHJpYnV0ZShcIngxXCIsLTUwMCksZVswXS5zZXRBdHRyaWJ1dGUoXCJ4MlwiLC01MDApKSxpJiZpWzBdJiYoaVswXS5zZXRBdHRyaWJ1dGUoXCJ5XCIsLTEwMCksaVswXS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLC0xMDApLGlbMF0uc2V0QXR0cmlidXRlKFwieTJcIiwtMTAwKSl9fSx7a2V5Olwic3ZnVXJsXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNsZWFudXAoKTt2YXIgdD10aGlzLmdldFN2Z1N0cmluZygpLGU9bmV3IEJsb2IoW3RdLHt0eXBlOlwiaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04XCJ9KTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChlKX19LHtrZXk6XCJkYXRhVVJJXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGkpe3ZhciBhPWUudyxzPXQ/dC5zY2FsZXx8dC53aWR0aC9hLmdsb2JhbHMuc3ZnV2lkdGg6MTtlLmNsZWFudXAoKTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO3Iud2lkdGg9YS5nbG9iYWxzLnN2Z1dpZHRoKnMsci5oZWlnaHQ9cGFyc2VJbnQoYS5nbG9iYWxzLmRvbS5lbFdyYXAuc3R5bGUuaGVpZ2h0LDEwKSpzO3ZhciBvPVwidHJhbnNwYXJlbnRcIj09PWEuY29uZmlnLmNoYXJ0LmJhY2tncm91bmQ/XCIjZmZmXCI6YS5jb25maWcuY2hhcnQuYmFja2dyb3VuZCxuPXIuZ2V0Q29udGV4dChcIjJkXCIpO24uZmlsbFN0eWxlPW8sbi5maWxsUmVjdCgwLDAsci53aWR0aCpzLHIuaGVpZ2h0KnMpO3ZhciBsPWUuZ2V0U3ZnU3RyaW5nKHMpO2lmKHdpbmRvdy5jYW52ZyYmeC5pc0lFMTEoKSl7dmFyIGg9d2luZG93LmNhbnZnLkNhbnZnLmZyb21TdHJpbmcobixsLHtpZ25vcmVDbGVhcjohMCxpZ25vcmVEaW1lbnNpb25zOiEwfSk7aC5zdGFydCgpO3ZhciBjPXIubXNUb0Jsb2IoKTtoLnN0b3AoKSxpKHtibG9iOmN9KX1lbHNle3ZhciBkPVwiZGF0YTppbWFnZS9zdmcreG1sLFwiK2VuY29kZVVSSUNvbXBvbmVudChsKSxnPW5ldyBJbWFnZTtnLmNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCIsZy5vbmxvYWQ9ZnVuY3Rpb24oKXtpZihuLmRyYXdJbWFnZShnLDAsMCksci5tc1RvQmxvYil7dmFyIHQ9ci5tc1RvQmxvYigpO2koe2Jsb2I6dH0pfWVsc2V7dmFyIGU9ci50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7aSh7aW1nVVJJOmV9KX19LGcuc3JjPWR9fSkpfX0se2tleTpcImV4cG9ydFRvU1ZHXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXJEb3dubG9hZCh0aGlzLnN2Z1VybCgpLHRoaXMudy5jb25maWcuY2hhcnQudG9vbGJhci5leHBvcnQuc3ZnLmZpbGVuYW1lLFwiLnN2Z1wiKX19LHtrZXk6XCJleHBvcnRUb1BuZ1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmRhdGFVUkkoKS50aGVuKChmdW5jdGlvbihlKXt2YXIgaT1lLmltZ1VSSSxhPWUuYmxvYjthP25hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGEsdC53Lmdsb2JhbHMuY2hhcnRJRCtcIi5wbmdcIik6dC50cmlnZ2VyRG93bmxvYWQoaSx0LncuY29uZmlnLmNoYXJ0LnRvb2xiYXIuZXhwb3J0LnBuZy5maWxlbmFtZSxcIi5wbmdcIil9KSl9fSx7a2V5OlwiZXhwb3J0VG9DU1ZcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dC5zZXJpZXMsYT10LmZpbGVOYW1lLHM9dC5jb2x1bW5EZWxpbWl0ZXIscj12b2lkIDA9PT1zP1wiLFwiOnMsbz10LmxpbmVEZWxpbWl0ZXIsbj12b2lkIDA9PT1vP1wiXFxuXCI6byxsPXRoaXMudztpfHwoaT1sLmNvbmZpZy5zZXJpZXMpO3ZhciBoPVtdLGM9W10sZD1cIlwiLGc9bC5nbG9iYWxzLnNlcmllcy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuLTE9PT1sLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzSW5kaWNlcy5pbmRleE9mKGUpP3Q6W119KSksZj1NYXRoLm1heC5hcHBseShNYXRoLHUoaS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGE/dC5kYXRhLmxlbmd0aDowfSkpKSkscD1uZXcgTyh0aGlzLmN0eCksYj1uZXcgQih0aGlzLmN0eCksdj1mdW5jdGlvbih0KXt2YXIgaT1cIlwiO2lmKGwuZ2xvYmFscy5heGlzQ2hhcnRzKXtpZihcImNhdGVnb3J5XCI9PT1sLmNvbmZpZy54YXhpcy50eXBlfHxsLmNvbmZpZy54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWMpaWYobC5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCl7dmFyIGE9bC5nbG9iYWxzLnlMYWJlbEZvcm1hdHRlcnNbMF0scz1uZXcgTihlLmN0eCkuZ2V0QWN0aXZlQ29uZmlnU2VyaWVzSW5kZXgoKTtpPWEobC5nbG9iYWxzLmxhYmVsc1t0XSx7c2VyaWVzSW5kZXg6cyxkYXRhUG9pbnRJbmRleDp0LHc6bH0pfWVsc2UgaT1iLmdldExhYmVsKGwuZ2xvYmFscy5sYWJlbHMsbC5nbG9iYWxzLnRpbWVzY2FsZUxhYmVscywwLHQpLnRleHQ7XCJkYXRldGltZVwiPT09bC5jb25maWcueGF4aXMudHlwZSYmKGwuY29uZmlnLnhheGlzLmNhdGVnb3JpZXMubGVuZ3RoP2k9bC5jb25maWcueGF4aXMuY2F0ZWdvcmllc1t0XTpsLmNvbmZpZy5sYWJlbHMubGVuZ3RoJiYoaT1sLmNvbmZpZy5sYWJlbHNbdF0pKX1lbHNlIGk9bC5jb25maWcubGFiZWxzW3RdO3JldHVybiBBcnJheS5pc0FycmF5KGkpJiYoaT1pLmpvaW4oXCIgXCIpKSx4LmlzTnVtYmVyKGkpP2k6aS5zcGxpdChyKS5qb2luKFwiXCIpfSxtPWZ1bmN0aW9uKHQsZSl7aWYoaC5sZW5ndGgmJjA9PT1lJiZjLnB1c2goaC5qb2luKHIpKSx0LmRhdGEpe3QuZGF0YT10LmRhdGEubGVuZ3RoJiZ0LmRhdGF8fHUoQXJyYXkoZikpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm5cIlwifSkpO2Zvcih2YXIgYT0wO2E8dC5kYXRhLmxlbmd0aDthKyspe2g9W107dmFyIHM9dihhKTtpZihzfHwocC5pc0Zvcm1hdFhZKCk/cz1pW2VdLmRhdGFbYV0ueDpwLmlzRm9ybWF0MkRBcnJheSgpJiYocz1pW2VdLmRhdGFbYV0/aVtlXS5kYXRhW2FdWzBdOlwiXCIpKSwwPT09ZSl7aC5wdXNoKChuPXMsXCJkYXRldGltZVwiPT09bC5jb25maWcueGF4aXMudHlwZSYmU3RyaW5nKG4pLmxlbmd0aD49MTA/bC5jb25maWcuY2hhcnQudG9vbGJhci5leHBvcnQuY3N2LmRhdGVGb3JtYXR0ZXIocyk6eC5pc051bWJlcihzKT9zOnMuc3BsaXQocikuam9pbihcIlwiKSkpO2Zvcih2YXIgbz0wO288bC5nbG9iYWxzLnNlcmllcy5sZW5ndGg7bysrKXAuaXNGb3JtYXRYWSgpP2gucHVzaChpW29dLmRhdGFbYV0ueSk6aC5wdXNoKGdbb11bYV0pfShcImNhbmRsZXN0aWNrXCI9PT1sLmNvbmZpZy5jaGFydC50eXBlfHx0LnR5cGUmJlwiY2FuZGxlc3RpY2tcIj09PXQudHlwZSkmJihoLnBvcCgpLGgucHVzaChsLmdsb2JhbHMuc2VyaWVzQ2FuZGxlT1tlXVthXSksaC5wdXNoKGwuZ2xvYmFscy5zZXJpZXNDYW5kbGVIW2VdW2FdKSxoLnB1c2gobC5nbG9iYWxzLnNlcmllc0NhbmRsZUxbZV1bYV0pLGgucHVzaChsLmdsb2JhbHMuc2VyaWVzQ2FuZGxlQ1tlXVthXSkpLChcImJveFBsb3RcIj09PWwuY29uZmlnLmNoYXJ0LnR5cGV8fHQudHlwZSYmXCJib3hQbG90XCI9PT10LnR5cGUpJiYoaC5wb3AoKSxoLnB1c2gobC5nbG9iYWxzLnNlcmllc0NhbmRsZU9bZV1bYV0pLGgucHVzaChsLmdsb2JhbHMuc2VyaWVzQ2FuZGxlSFtlXVthXSksaC5wdXNoKGwuZ2xvYmFscy5zZXJpZXNDYW5kbGVNW2VdW2FdKSxoLnB1c2gobC5nbG9iYWxzLnNlcmllc0NhbmRsZUxbZV1bYV0pLGgucHVzaChsLmdsb2JhbHMuc2VyaWVzQ2FuZGxlQ1tlXVthXSkpLFwicmFuZ2VCYXJcIj09PWwuY29uZmlnLmNoYXJ0LnR5cGUmJihoLnBvcCgpLGgucHVzaChsLmdsb2JhbHMuc2VyaWVzUmFuZ2VTdGFydFtlXVthXSksaC5wdXNoKGwuZ2xvYmFscy5zZXJpZXNSYW5nZUVuZFtlXVthXSkpLGgubGVuZ3RoJiZjLnB1c2goaC5qb2luKHIpKX19dmFyIG59O2gucHVzaChsLmNvbmZpZy5jaGFydC50b29sYmFyLmV4cG9ydC5jc3YuaGVhZGVyQ2F0ZWdvcnkpLFwiYm94UGxvdFwiPT09bC5jb25maWcuY2hhcnQudHlwZT8oaC5wdXNoKFwibWluaW11bVwiKSxoLnB1c2goXCJxMVwiKSxoLnB1c2goXCJtZWRpYW5cIiksaC5wdXNoKFwicTNcIiksaC5wdXNoKFwibWF4aW11bVwiKSk6XCJjYW5kbGVzdGlja1wiPT09bC5jb25maWcuY2hhcnQudHlwZT8oaC5wdXNoKFwib3BlblwiKSxoLnB1c2goXCJoaWdoXCIpLGgucHVzaChcImxvd1wiKSxoLnB1c2goXCJjbG9zZVwiKSk6XCJyYW5nZUJhclwiPT09bC5jb25maWcuY2hhcnQudHlwZT8oaC5wdXNoKFwibWluaW11bVwiKSxoLnB1c2goXCJtYXhpbXVtXCIpKTppLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgaT10Lm5hbWU/dC5uYW1lOlwic2VyaWVzLVwiLmNvbmNhdChlKTtsLmdsb2JhbHMuYXhpc0NoYXJ0cyYmaC5wdXNoKGkuc3BsaXQocikuam9pbihcIlwiKT9pLnNwbGl0KHIpLmpvaW4oXCJcIik6XCJzZXJpZXMtXCIuY29uY2F0KGUpKX0pKSxsLmdsb2JhbHMuYXhpc0NoYXJ0c3x8KGgucHVzaChsLmNvbmZpZy5jaGFydC50b29sYmFyLmV4cG9ydC5jc3YuaGVhZGVyVmFsdWUpLGMucHVzaChoLmpvaW4ocikpKSxpLm1hcCgoZnVuY3Rpb24odCxlKXtsLmdsb2JhbHMuYXhpc0NoYXJ0cz9tKHQsZSk6KChoPVtdKS5wdXNoKGwuZ2xvYmFscy5sYWJlbHNbZV0uc3BsaXQocikuam9pbihcIlwiKSksaC5wdXNoKGdbZV0pLGMucHVzaChoLmpvaW4ocikpKX0pKSxkKz1jLmpvaW4obiksdGhpcy50cmlnZ2VyRG93bmxvYWQoXCJkYXRhOnRleHQvY3N2OyBjaGFyc2V0PXV0Zi04LFwiK2VuY29kZVVSSUNvbXBvbmVudChcIlxcdWZlZmZcIitkKSxhfHxsLmNvbmZpZy5jaGFydC50b29sYmFyLmV4cG9ydC5jc3YuZmlsZW5hbWUsXCIuY3N2XCIpfX0se2tleTpcInRyaWdnZXJEb3dubG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTthLmhyZWY9dCxhLmRvd25sb2FkPShlfHx0aGlzLncuZ2xvYmFscy5jaGFydElEKStpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fV0pLHR9KCksRz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUudzt2YXIgaT10aGlzLnc7dGhpcy5heGVzVXRpbHM9bmV3IEIoZSksdGhpcy54YXhpc0xhYmVscz1pLmdsb2JhbHMubGFiZWxzLnNsaWNlKCksaS5nbG9iYWxzLnRpbWVzY2FsZUxhYmVscy5sZW5ndGg+MCYmIWkuZ2xvYmFscy5pc0Jhckhvcml6b250YWwmJih0aGlzLnhheGlzTGFiZWxzPWkuZ2xvYmFscy50aW1lc2NhbGVMYWJlbHMuc2xpY2UoKSksaS5jb25maWcueGF4aXMub3ZlcndyaXRlQ2F0ZWdvcmllcyYmKHRoaXMueGF4aXNMYWJlbHM9aS5jb25maWcueGF4aXMub3ZlcndyaXRlQ2F0ZWdvcmllcyksdGhpcy5kcmF3bkxhYmVscz1bXSx0aGlzLmRyYXduTGFiZWxzUmVjdHM9W10sXCJ0b3BcIj09PWkuY29uZmlnLnhheGlzLnBvc2l0aW9uP3RoaXMub2ZmWT0wOnRoaXMub2ZmWT1pLmdsb2JhbHMuZ3JpZEhlaWdodCsxLHRoaXMub2ZmWT10aGlzLm9mZlkraS5jb25maWcueGF4aXMuYXhpc0JvcmRlci5vZmZzZXRZLHRoaXMuaXNDYXRlZ29yeUJhckhvcml6b250YWw9XCJiYXJcIj09PWkuY29uZmlnLmNoYXJ0LnR5cGUmJmkuY29uZmlnLnBsb3RPcHRpb25zLmJhci5ob3Jpem9udGFsLHRoaXMueGF4aXNGb250U2l6ZT1pLmNvbmZpZy54YXhpcy5sYWJlbHMuc3R5bGUuZm9udFNpemUsdGhpcy54YXhpc0ZvbnRGYW1pbHk9aS5jb25maWcueGF4aXMubGFiZWxzLnN0eWxlLmZvbnRGYW1pbHksdGhpcy54YXhpc0ZvcmVDb2xvcnM9aS5jb25maWcueGF4aXMubGFiZWxzLnN0eWxlLmNvbG9ycyx0aGlzLnhheGlzQm9yZGVyV2lkdGg9aS5jb25maWcueGF4aXMuYXhpc0JvcmRlci53aWR0aCx0aGlzLmlzQ2F0ZWdvcnlCYXJIb3Jpem9udGFsJiYodGhpcy54YXhpc0JvcmRlcldpZHRoPWkuY29uZmlnLnlheGlzWzBdLmF4aXNCb3JkZXIud2lkdGgudG9TdHJpbmcoKSksdGhpcy54YXhpc0JvcmRlcldpZHRoLmluZGV4T2YoXCIlXCIpPi0xP3RoaXMueGF4aXNCb3JkZXJXaWR0aD1pLmdsb2JhbHMuZ3JpZFdpZHRoKnBhcnNlSW50KHRoaXMueGF4aXNCb3JkZXJXaWR0aCwxMCkvMTAwOnRoaXMueGF4aXNCb3JkZXJXaWR0aD1wYXJzZUludCh0aGlzLnhheGlzQm9yZGVyV2lkdGgsMTApLHRoaXMueGF4aXNCb3JkZXJIZWlnaHQ9aS5jb25maWcueGF4aXMuYXhpc0JvcmRlci5oZWlnaHQsdGhpcy55YXhpcz1pLmNvbmZpZy55YXhpc1swXX1yZXR1cm4gcih0LFt7a2V5OlwiZHJhd1hheGlzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT1uZXcgbSh0aGlzLmN0eCksaT1lLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMteGF4aXNcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIuY29uY2F0KHQuY29uZmlnLnhheGlzLm9mZnNldFgsXCIsIFwiKS5jb25jYXQodC5jb25maWcueGF4aXMub2Zmc2V0WSxcIilcIil9KSxhPWUuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy14YXhpcy10ZXh0cy1nXCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiLmNvbmNhdCh0Lmdsb2JhbHMudHJhbnNsYXRlWEF4aXNYLFwiLCBcIikuY29uY2F0KHQuZ2xvYmFscy50cmFuc2xhdGVYQXhpc1ksXCIpXCIpfSk7aS5hZGQoYSk7Zm9yKHZhciBzPVtdLHI9MDtyPHRoaXMueGF4aXNMYWJlbHMubGVuZ3RoO3IrKylzLnB1c2godGhpcy54YXhpc0xhYmVsc1tyXSk7aWYodGhpcy5kcmF3WEF4aXNMYWJlbEFuZEdyb3VwKCEwLGUsYSxzLHQuZ2xvYmFscy5pc1hOdW1lcmljLChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpLHQuZ2xvYmFscy5oYXNHcm91cHMpe3ZhciBvPXQuZ2xvYmFscy5ncm91cHM7cz1bXTtmb3IodmFyIG49MDtuPG8ubGVuZ3RoO24rKylzLnB1c2gob1tuXS50aXRsZSk7dmFyIGw9e307dC5jb25maWcueGF4aXMuZ3JvdXAuc3R5bGUmJihsLnhheGlzRm9udFNpemU9dC5jb25maWcueGF4aXMuZ3JvdXAuc3R5bGUuZm9udFNpemUsbC54YXhpc0ZvbnRGYW1pbHk9dC5jb25maWcueGF4aXMuZ3JvdXAuc3R5bGUuZm9udEZhbWlseSxsLnhheGlzRm9yZUNvbG9ycz10LmNvbmZpZy54YXhpcy5ncm91cC5zdHlsZS5jb2xvcnMsbC5mb250V2VpZ2h0PXQuY29uZmlnLnhheGlzLmdyb3VwLnN0eWxlLmZvbnRXZWlnaHQsbC5jc3NDbGFzcz10LmNvbmZpZy54YXhpcy5ncm91cC5zdHlsZS5jc3NDbGFzcyksdGhpcy5kcmF3WEF4aXNMYWJlbEFuZEdyb3VwKCExLGUsYSxzLCExLChmdW5jdGlvbih0LGUpe3JldHVybiBvW3RdLmNvbHMqZX0pLGwpfWlmKHZvaWQgMCE9PXQuY29uZmlnLnhheGlzLnRpdGxlLnRleHQpe3ZhciBoPWUuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy14YXhpcy10aXRsZVwifSksYz1lLmRyYXdUZXh0KHt4OnQuZ2xvYmFscy5ncmlkV2lkdGgvMit0LmNvbmZpZy54YXhpcy50aXRsZS5vZmZzZXRYLHk6dGhpcy5vZmZZK3BhcnNlRmxvYXQodGhpcy54YXhpc0ZvbnRTaXplKSt0Lmdsb2JhbHMueEF4aXNMYWJlbHNIZWlnaHQrdC5jb25maWcueGF4aXMudGl0bGUub2Zmc2V0WSx0ZXh0OnQuY29uZmlnLnhheGlzLnRpdGxlLnRleHQsdGV4dEFuY2hvcjpcIm1pZGRsZVwiLGZvbnRTaXplOnQuY29uZmlnLnhheGlzLnRpdGxlLnN0eWxlLmZvbnRTaXplLGZvbnRGYW1pbHk6dC5jb25maWcueGF4aXMudGl0bGUuc3R5bGUuZm9udEZhbWlseSxmb250V2VpZ2h0OnQuY29uZmlnLnhheGlzLnRpdGxlLnN0eWxlLmZvbnRXZWlnaHQsZm9yZUNvbG9yOnQuY29uZmlnLnhheGlzLnRpdGxlLnN0eWxlLmNvbG9yLGNzc0NsYXNzOlwiYXBleGNoYXJ0cy14YXhpcy10aXRsZS10ZXh0IFwiK3QuY29uZmlnLnhheGlzLnRpdGxlLnN0eWxlLmNzc0NsYXNzfSk7aC5hZGQoYyksaS5hZGQoaCl9aWYodC5jb25maWcueGF4aXMuYXhpc0JvcmRlci5zaG93KXt2YXIgZD10Lmdsb2JhbHMuYmFyUGFkRm9yTnVtZXJpY0F4aXMsZz1lLmRyYXdMaW5lKHQuZ2xvYmFscy5wYWRIb3Jpem9udGFsK3QuY29uZmlnLnhheGlzLmF4aXNCb3JkZXIub2Zmc2V0WC1kLHRoaXMub2ZmWSx0aGlzLnhheGlzQm9yZGVyV2lkdGgrZCx0aGlzLm9mZlksdC5jb25maWcueGF4aXMuYXhpc0JvcmRlci5jb2xvciwwLHRoaXMueGF4aXNCb3JkZXJIZWlnaHQpO2kuYWRkKGcpfXJldHVybiBpfX0se2tleTpcImRyYXdYQXhpc0xhYmVsQW5kR3JvdXBcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhLHMscil7dmFyIG8sbj10aGlzLGw9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOnt9LGg9W10sYz1bXSxkPXRoaXMudyxnPWwueGF4aXNGb250U2l6ZXx8dGhpcy54YXhpc0ZvbnRTaXplLHU9bC54YXhpc0ZvbnRGYW1pbHl8fHRoaXMueGF4aXNGb250RmFtaWx5LGY9bC54YXhpc0ZvcmVDb2xvcnN8fHRoaXMueGF4aXNGb3JlQ29sb3JzLHA9bC5mb250V2VpZ2h0fHxkLmNvbmZpZy54YXhpcy5sYWJlbHMuc3R5bGUuZm9udFdlaWdodCx4PWwuY3NzQ2xhc3N8fGQuY29uZmlnLnhheGlzLmxhYmVscy5zdHlsZS5jc3NDbGFzcyxiPWQuZ2xvYmFscy5wYWRIb3Jpem9udGFsLHY9YS5sZW5ndGgsbT1cImNhdGVnb3J5XCI9PT1kLmNvbmZpZy54YXhpcy50eXBlP2QuZ2xvYmFscy5kYXRhUG9pbnRzOnY7aWYoMD09PW0mJnY+bSYmKG09dikscyl7dmFyIHk9bT4xP20tMTptO289ZC5nbG9iYWxzLmdyaWRXaWR0aC95LGI9YityKDAsbykvMitkLmNvbmZpZy54YXhpcy5sYWJlbHMub2Zmc2V0WH1lbHNlIG89ZC5nbG9iYWxzLmdyaWRXaWR0aC9tLGI9YityKDAsbykrZC5jb25maWcueGF4aXMubGFiZWxzLm9mZnNldFg7Zm9yKHZhciB3PWZ1bmN0aW9uKHMpe3ZhciBsPWItcihzLG8pLzIrZC5jb25maWcueGF4aXMubGFiZWxzLm9mZnNldFg7MD09PXMmJjE9PT12JiZvLzI9PT1iJiYxPT09bSYmKGw9ZC5nbG9iYWxzLmdyaWRXaWR0aC8yKTt2YXIgeT1uLmF4ZXNVdGlscy5nZXRMYWJlbChhLGQuZ2xvYmFscy50aW1lc2NhbGVMYWJlbHMsbCxzLGgsZyx0KSx3PTI4O2QuZ2xvYmFscy5yb3RhdGVYTGFiZWxzJiZ0JiYodz0yMiksdHx8KHc9dytwYXJzZUZsb2F0KGcpKyhkLmdsb2JhbHMueEF4aXNMYWJlbHNIZWlnaHQtZC5nbG9iYWxzLnhBeGlzR3JvdXBMYWJlbHNIZWlnaHQpKyhkLmdsb2JhbHMucm90YXRlWExhYmVscz8xMDowKSkseT12b2lkIDAhPT1kLmNvbmZpZy54YXhpcy50aWNrQW1vdW50JiZcImRhdGFQb2ludHNcIiE9PWQuY29uZmlnLnhheGlzLnRpY2tBbW91bnQmJlwiZGF0ZXRpbWVcIiE9PWQuY29uZmlnLnhheGlzLnR5cGU/bi5heGVzVXRpbHMuY2hlY2tMYWJlbEJhc2VkT25UaWNrYW1vdW50KHMseSx2KTpuLmF4ZXNVdGlscy5jaGVja0Zvck92ZXJmbG93aW5nTGFiZWxzKHMseSx2LGgsYyk7aWYodCYmeS50ZXh0JiZkLmdsb2JhbHMueGF4aXNMYWJlbHNDb3VudCsrLGQuY29uZmlnLnhheGlzLmxhYmVscy5zaG93KXt2YXIgaz1lLmRyYXdUZXh0KHt4OnkueCx5Om4ub2ZmWStkLmNvbmZpZy54YXhpcy5sYWJlbHMub2Zmc2V0WSt3LShcInRvcFwiPT09ZC5jb25maWcueGF4aXMucG9zaXRpb24/ZC5nbG9iYWxzLnhBeGlzSGVpZ2h0K2QuY29uZmlnLnhheGlzLmF4aXNUaWNrcy5oZWlnaHQtMjowKSx0ZXh0OnkudGV4dCx0ZXh0QW5jaG9yOlwibWlkZGxlXCIsZm9udFdlaWdodDp5LmlzQm9sZD82MDA6cCxmb250U2l6ZTpnLGZvbnRGYW1pbHk6dSxmb3JlQ29sb3I6QXJyYXkuaXNBcnJheShmKT90JiZkLmNvbmZpZy54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWM/ZltkLmdsb2JhbHMubWluWCtzLTFdOmZbc106Zixpc1BsYWluVGV4dDohMSxjc3NDbGFzczoodD9cImFwZXhjaGFydHMteGF4aXMtbGFiZWwgXCI6XCJhcGV4Y2hhcnRzLXhheGlzLWdyb3VwLWxhYmVsIFwiKSt4fSk7aWYoaS5hZGQoayksay5vbihcImNsaWNrXCIsKGZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGQuY29uZmlnLmNoYXJ0LmV2ZW50cy54QXhpc0xhYmVsQ2xpY2spe3ZhciBlPU9iamVjdC5hc3NpZ24oe30sZCx7bGFiZWxJbmRleDpzfSk7ZC5jb25maWcuY2hhcnQuZXZlbnRzLnhBeGlzTGFiZWxDbGljayh0LG4uY3R4LGUpfX0pKSx0KXt2YXIgQT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5nbG9iYWxzLlNWR05TLFwidGl0bGVcIik7QS50ZXh0Q29udGVudD1BcnJheS5pc0FycmF5KHkudGV4dCk/eS50ZXh0LmpvaW4oXCIgXCIpOnkudGV4dCxrLm5vZGUuYXBwZW5kQ2hpbGQoQSksXCJcIiE9PXkudGV4dCYmKGgucHVzaCh5LnRleHQpLGMucHVzaCh5KSl9fXM8di0xJiYoYis9cihzKzEsbykpfSxrPTA7azw9di0xO2srKyl3KGspfX0se2tleTpcImRyYXdYYXhpc0ludmVyc2VkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaSxhPXRoaXMscz10aGlzLncscj1uZXcgbSh0aGlzLmN0eCksbz1zLmNvbmZpZy55YXhpc1swXS5vcHBvc2l0ZT9zLmdsb2JhbHMudHJhbnNsYXRlWUF4aXNYW3RdOjAsbj1yLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMteWF4aXMgYXBleGNoYXJ0cy14YXhpcy1pbnZlcnNlZFwiLHJlbDp0fSksbD1yLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMteWF4aXMtdGV4dHMtZyBhcGV4Y2hhcnRzLXhheGlzLWludmVyc2VkLXRleHRzLWdcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrbytcIiwgMClcIn0pO24uYWRkKGwpO3ZhciBoPVtdO2lmKHMuY29uZmlnLnlheGlzW3RdLnNob3cpZm9yKHZhciBjPTA7Yzx0aGlzLnhheGlzTGFiZWxzLmxlbmd0aDtjKyspaC5wdXNoKHRoaXMueGF4aXNMYWJlbHNbY10pO2U9cy5nbG9iYWxzLmdyaWRIZWlnaHQvaC5sZW5ndGgsaT0tZS8yLjI7dmFyIGQ9cy5nbG9iYWxzLnlMYWJlbEZvcm1hdHRlcnNbMF0sZz1zLmNvbmZpZy55YXhpc1swXS5sYWJlbHM7aWYoZy5zaG93KWZvcih2YXIgdT1mdW5jdGlvbihvKXt2YXIgbj12b2lkIDA9PT1oW29dP1wiXCI6aFtvXTtuPWQobix7c2VyaWVzSW5kZXg6dCxkYXRhUG9pbnRJbmRleDpvLHc6c30pO3ZhciBjPWEuYXhlc1V0aWxzLmdldFlBeGlzRm9yZUNvbG9yKGcuc3R5bGUuY29sb3JzLHQpLHU9MDtBcnJheS5pc0FycmF5KG4pJiYodT1uLmxlbmd0aC8yKnBhcnNlSW50KGcuc3R5bGUuZm9udFNpemUsMTApKTt2YXIgZj1yLmRyYXdUZXh0KHt4Omcub2Zmc2V0WC0xNSx5OmkrZStnLm9mZnNldFktdSx0ZXh0Om4sdGV4dEFuY2hvcjphLnlheGlzLm9wcG9zaXRlP1wic3RhcnRcIjpcImVuZFwiLGZvcmVDb2xvcjpBcnJheS5pc0FycmF5KGMpP2Nbb106Yyxmb250U2l6ZTpnLnN0eWxlLmZvbnRTaXplLGZvbnRGYW1pbHk6Zy5zdHlsZS5mb250RmFtaWx5LGZvbnRXZWlnaHQ6Zy5zdHlsZS5mb250V2VpZ2h0LGlzUGxhaW5UZXh0OiExLGNzc0NsYXNzOlwiYXBleGNoYXJ0cy15YXhpcy1sYWJlbCBcIitnLnN0eWxlLmNzc0NsYXNzLG1heFdpZHRoOmcubWF4V2lkdGh9KTtsLmFkZChmKSxmLm9uKFwiY2xpY2tcIiwoZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcy5jb25maWcuY2hhcnQuZXZlbnRzLnhBeGlzTGFiZWxDbGljayl7dmFyIGU9T2JqZWN0LmFzc2lnbih7fSxzLHtsYWJlbEluZGV4Om99KTtzLmNvbmZpZy5jaGFydC5ldmVudHMueEF4aXNMYWJlbENsaWNrKHQsYS5jdHgsZSl9fSkpO3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzLmdsb2JhbHMuU1ZHTlMsXCJ0aXRsZVwiKTtpZihwLnRleHRDb250ZW50PUFycmF5LmlzQXJyYXkobik/bi5qb2luKFwiIFwiKTpuLGYubm9kZS5hcHBlbmRDaGlsZChwKSwwIT09cy5jb25maWcueWF4aXNbdF0ubGFiZWxzLnJvdGF0ZSl7dmFyIHg9ci5yb3RhdGVBcm91bmRDZW50ZXIoZi5ub2RlKTtmLm5vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsXCJyb3RhdGUoXCIuY29uY2F0KHMuY29uZmlnLnlheGlzW3RdLmxhYmVscy5yb3RhdGUsXCIgMCBcIikuY29uY2F0KHgueSxcIilcIikpfWkrPWV9LGY9MDtmPD1oLmxlbmd0aC0xO2YrKyl1KGYpO2lmKHZvaWQgMCE9PXMuY29uZmlnLnlheGlzWzBdLnRpdGxlLnRleHQpe3ZhciBwPXIuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy15YXhpcy10aXRsZSBhcGV4Y2hhcnRzLXhheGlzLXRpdGxlLWludmVyc2VkXCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK28rXCIsIDApXCJ9KSx4PXIuZHJhd1RleHQoe3g6MCx5OnMuZ2xvYmFscy5ncmlkSGVpZ2h0LzIsdGV4dDpzLmNvbmZpZy55YXhpc1swXS50aXRsZS50ZXh0LHRleHRBbmNob3I6XCJtaWRkbGVcIixmb3JlQ29sb3I6cy5jb25maWcueWF4aXNbMF0udGl0bGUuc3R5bGUuY29sb3IsZm9udFNpemU6cy5jb25maWcueWF4aXNbMF0udGl0bGUuc3R5bGUuZm9udFNpemUsZm9udFdlaWdodDpzLmNvbmZpZy55YXhpc1swXS50aXRsZS5zdHlsZS5mb250V2VpZ2h0LGZvbnRGYW1pbHk6cy5jb25maWcueWF4aXNbMF0udGl0bGUuc3R5bGUuZm9udEZhbWlseSxjc3NDbGFzczpcImFwZXhjaGFydHMteWF4aXMtdGl0bGUtdGV4dCBcIitzLmNvbmZpZy55YXhpc1swXS50aXRsZS5zdHlsZS5jc3NDbGFzc30pO3AuYWRkKHgpLG4uYWRkKHApfXZhciBiPTA7dGhpcy5pc0NhdGVnb3J5QmFySG9yaXpvbnRhbCYmcy5jb25maWcueWF4aXNbMF0ub3Bwb3NpdGUmJihiPXMuZ2xvYmFscy5ncmlkV2lkdGgpO3ZhciB2PXMuY29uZmlnLnhheGlzLmF4aXNCb3JkZXI7aWYodi5zaG93KXt2YXIgeT1yLmRyYXdMaW5lKHMuZ2xvYmFscy5wYWRIb3Jpem9udGFsK3Yub2Zmc2V0WCtiLDErdi5vZmZzZXRZLHMuZ2xvYmFscy5wYWRIb3Jpem9udGFsK3Yub2Zmc2V0WCtiLHMuZ2xvYmFscy5ncmlkSGVpZ2h0K3Yub2Zmc2V0WSx2LmNvbG9yLDApO24uYWRkKHkpfXJldHVybiBzLmNvbmZpZy55YXhpc1swXS5heGlzVGlja3Muc2hvdyYmdGhpcy5heGVzVXRpbHMuZHJhd1lBeGlzVGlja3MoYixoLmxlbmd0aCxzLmNvbmZpZy55YXhpc1swXS5heGlzQm9yZGVyLHMuY29uZmlnLnlheGlzWzBdLmF4aXNUaWNrcywwLGUsbiksbn19LHtrZXk6XCJkcmF3WGF4aXNUaWNrc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10aGlzLncscz10O2lmKCEodDwwfHx0LTI+YS5nbG9iYWxzLmdyaWRXaWR0aCkpe3ZhciByPXRoaXMub2ZmWSthLmNvbmZpZy54YXhpcy5heGlzVGlja3Mub2Zmc2V0WTtpZihlPWUrcithLmNvbmZpZy54YXhpcy5heGlzVGlja3MuaGVpZ2h0LFwidG9wXCI9PT1hLmNvbmZpZy54YXhpcy5wb3NpdGlvbiYmKGU9ci1hLmNvbmZpZy54YXhpcy5heGlzVGlja3MuaGVpZ2h0KSxhLmNvbmZpZy54YXhpcy5heGlzVGlja3Muc2hvdyl7dmFyIG89bmV3IG0odGhpcy5jdHgpLmRyYXdMaW5lKHQrYS5jb25maWcueGF4aXMuYXhpc1RpY2tzLm9mZnNldFgscithLmNvbmZpZy54YXhpcy5vZmZzZXRZLHMrYS5jb25maWcueGF4aXMuYXhpc1RpY2tzLm9mZnNldFgsZSthLmNvbmZpZy54YXhpcy5vZmZzZXRZLGEuY29uZmlnLnhheGlzLmF4aXNUaWNrcy5jb2xvcik7aS5hZGQobyksby5ub2RlLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLXhheGlzLXRpY2tcIil9fX19LHtrZXk6XCJnZXRYQXhpc1RpY2tzUG9zaXRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT1bXSxpPXRoaXMueGF4aXNMYWJlbHMubGVuZ3RoLGE9dC5nbG9iYWxzLnBhZEhvcml6b250YWw7aWYodC5nbG9iYWxzLnRpbWVzY2FsZUxhYmVscy5sZW5ndGg+MClmb3IodmFyIHM9MDtzPGk7cysrKWE9dGhpcy54YXhpc0xhYmVsc1tzXS5wb3NpdGlvbixlLnB1c2goYSk7ZWxzZSBmb3IodmFyIHI9aSxvPTA7bzxyO28rKyl7dmFyIG49cjt0Lmdsb2JhbHMuaXNYTnVtZXJpYyYmXCJiYXJcIiE9PXQuY29uZmlnLmNoYXJ0LnR5cGUmJihuLT0xKSxhKz10Lmdsb2JhbHMuZ3JpZFdpZHRoL24sZS5wdXNoKGEpfXJldHVybiBlfX0se2tleTpcInhBeGlzTGFiZWxDb3JyZWN0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9bmV3IG0odGhpcy5jdHgpLGk9dC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLXhheGlzLXRleHRzLWdcIiksYT10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFwZXhjaGFydHMteGF4aXMtdGV4dHMtZyB0ZXh0Om5vdCguYXBleGNoYXJ0cy14YXhpcy1ncm91cC1sYWJlbClcIikscz10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFwZXhjaGFydHMteWF4aXMtaW52ZXJzZWQgdGV4dFwiKSxyPXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy14YXhpcy1pbnZlcnNlZC10ZXh0cy1nIHRleHQgdHNwYW5cIik7aWYodC5nbG9iYWxzLnJvdGF0ZVhMYWJlbHN8fHQuY29uZmlnLnhheGlzLmxhYmVscy5yb3RhdGVBbHdheXMpZm9yKHZhciBvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBuPWUucm90YXRlQXJvdW5kQ2VudGVyKGFbb10pO24ueT1uLnktMSxuLng9bi54KzEsYVtvXS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIixcInJvdGF0ZShcIi5jb25jYXQodC5jb25maWcueGF4aXMubGFiZWxzLnJvdGF0ZSxcIiBcIikuY29uY2F0KG4ueCxcIiBcIikuY29uY2F0KG4ueSxcIilcIikpLGFbb10uc2V0QXR0cmlidXRlKFwidGV4dC1hbmNob3JcIixcImVuZFwiKTtpLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKDAsIFwiLmNvbmNhdCgtMTAsXCIpXCIpKTt2YXIgbD1hW29dLmNoaWxkTm9kZXM7dC5jb25maWcueGF4aXMubGFiZWxzLnRyaW0mJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwobCwoZnVuY3Rpb24oaSl7ZS5wbGFjZVRleHRXaXRoRWxsaXBzaXMoaSxpLnRleHRDb250ZW50LHQuZ2xvYmFscy54QXhpc0xhYmVsc0hlaWdodC0oXCJib3R0b21cIj09PXQuY29uZmlnLmxlZ2VuZC5wb3NpdGlvbj8yMDoxMCkpfSkpfWVsc2UhZnVuY3Rpb24oKXtmb3IodmFyIGk9dC5nbG9iYWxzLmdyaWRXaWR0aC8odC5nbG9iYWxzLmxhYmVscy5sZW5ndGgrMSkscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgcj1hW3NdLmNoaWxkTm9kZXM7dC5jb25maWcueGF4aXMubGFiZWxzLnRyaW0mJlwiZGF0ZXRpbWVcIiE9PXQuY29uZmlnLnhheGlzLnR5cGUmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwociwoZnVuY3Rpb24odCl7ZS5wbGFjZVRleHRXaXRoRWxsaXBzaXModCx0LnRleHRDb250ZW50LGkpfSkpfX0oKTtpZihzLmxlbmd0aD4wKXt2YXIgaD1zW3MubGVuZ3RoLTFdLmdldEJCb3goKSxjPXNbMF0uZ2V0QkJveCgpO2gueDwtMjAmJnNbcy5sZW5ndGgtMV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzW3MubGVuZ3RoLTFdKSxjLngrYy53aWR0aD50Lmdsb2JhbHMuZ3JpZFdpZHRoJiYhdC5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCYmc1swXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNbMF0pO2Zvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKWUucGxhY2VUZXh0V2l0aEVsbGlwc2lzKHJbZF0scltkXS50ZXh0Q29udGVudCx0LmNvbmZpZy55YXhpc1swXS5sYWJlbHMubWF4V2lkdGgtKHQuY29uZmlnLnlheGlzWzBdLnRpdGxlLnRleHQ/MipwYXJzZUZsb2F0KHQuY29uZmlnLnlheGlzWzBdLnRpdGxlLnN0eWxlLmZvbnRTaXplKTowKS0xNSl9fX1dKSx0fSgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLnc7dmFyIGk9dGhpcy53O3RoaXMueGF4aXNMYWJlbHM9aS5nbG9iYWxzLmxhYmVscy5zbGljZSgpLHRoaXMuYXhlc1V0aWxzPW5ldyBCKGUpLHRoaXMuaXNSYW5nZUJhcj1pLmdsb2JhbHMuc2VyaWVzUmFuZ2UubGVuZ3RoLGkuZ2xvYmFscy50aW1lc2NhbGVMYWJlbHMubGVuZ3RoPjAmJih0aGlzLnhheGlzTGFiZWxzPWkuZ2xvYmFscy50aW1lc2NhbGVMYWJlbHMuc2xpY2UoKSl9cmV0dXJuIHIodCxbe2tleTpcImRyYXdHcmlkQXJlYVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsZT10aGlzLncsaT1uZXcgbSh0aGlzLmN0eCk7bnVsbD09PXQmJih0PWkuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1ncmlkXCJ9KSk7dmFyIGE9aS5kcmF3TGluZShlLmdsb2JhbHMucGFkSG9yaXpvbnRhbCwxLGUuZ2xvYmFscy5wYWRIb3Jpem9udGFsLGUuZ2xvYmFscy5ncmlkSGVpZ2h0LFwidHJhbnNwYXJlbnRcIikscz1pLmRyYXdMaW5lKGUuZ2xvYmFscy5wYWRIb3Jpem9udGFsLGUuZ2xvYmFscy5ncmlkSGVpZ2h0LGUuZ2xvYmFscy5ncmlkV2lkdGgsZS5nbG9iYWxzLmdyaWRIZWlnaHQsXCJ0cmFuc3BhcmVudFwiKTtyZXR1cm4gdC5hZGQocyksdC5hZGQoYSksdH19LHtrZXk6XCJkcmF3R3JpZFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bnVsbDtyZXR1cm4gdGhpcy53Lmdsb2JhbHMuYXhpc0NoYXJ0cyYmKHQ9dGhpcy5yZW5kZXJHcmlkKCksdGhpcy5kcmF3R3JpZEFyZWEodC5lbCkpLHR9fSx7a2V5OlwiY3JlYXRlR3JpZE1hc2tcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMudyxlPXQuZ2xvYmFscyxpPW5ldyBtKHRoaXMuY3R4KSxhPUFycmF5LmlzQXJyYXkodC5jb25maWcuc3Ryb2tlLndpZHRoKT8wOnQuY29uZmlnLnN0cm9rZS53aWR0aDtpZihBcnJheS5pc0FycmF5KHQuY29uZmlnLnN0cm9rZS53aWR0aCkpe3ZhciBzPTA7dC5jb25maWcuc3Ryb2tlLndpZHRoLmZvckVhY2goKGZ1bmN0aW9uKHQpe3M9TWF0aC5tYXgocyx0KX0pKSxhPXN9ZS5kb20uZWxHcmlkUmVjdE1hc2s9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHTlMsXCJjbGlwUGF0aFwiKSxlLmRvbS5lbEdyaWRSZWN0TWFzay5zZXRBdHRyaWJ1dGUoXCJpZFwiLFwiZ3JpZFJlY3RNYXNrXCIuY29uY2F0KGUuY3VpZCkpLGUuZG9tLmVsR3JpZFJlY3RNYXJrZXJNYXNrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLlNWR05TLFwiY2xpcFBhdGhcIiksZS5kb20uZWxHcmlkUmVjdE1hcmtlck1hc2suc2V0QXR0cmlidXRlKFwiaWRcIixcImdyaWRSZWN0TWFya2VyTWFza1wiLmNvbmNhdChlLmN1aWQpKSxlLmRvbS5lbEZvcmVjYXN0TWFzaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5TVkdOUyxcImNsaXBQYXRoXCIpLGUuZG9tLmVsRm9yZWNhc3RNYXNrLnNldEF0dHJpYnV0ZShcImlkXCIsXCJmb3JlY2FzdE1hc2tcIi5jb25jYXQoZS5jdWlkKSksZS5kb20uZWxOb25Gb3JlY2FzdE1hc2s9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHTlMsXCJjbGlwUGF0aFwiKSxlLmRvbS5lbE5vbkZvcmVjYXN0TWFzay5zZXRBdHRyaWJ1dGUoXCJpZFwiLFwibm9uRm9yZWNhc3RNYXNrXCIuY29uY2F0KGUuY3VpZCkpO3ZhciByPXQuY29uZmlnLmNoYXJ0LnR5cGUsbz0wLG49MDsoXCJiYXJcIj09PXJ8fFwicmFuZ2VCYXJcIj09PXJ8fFwiY2FuZGxlc3RpY2tcIj09PXJ8fFwiYm94UGxvdFwiPT09cnx8dC5nbG9iYWxzLmNvbWJvQmFyQ291bnQ+MCkmJnQuZ2xvYmFscy5pc1hOdW1lcmljJiYhdC5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCYmKG89dC5jb25maWcuZ3JpZC5wYWRkaW5nLmxlZnQsbj10LmNvbmZpZy5ncmlkLnBhZGRpbmcucmlnaHQsZS5iYXJQYWRGb3JOdW1lcmljQXhpcz5vJiYobz1lLmJhclBhZEZvck51bWVyaWNBeGlzLG49ZS5iYXJQYWRGb3JOdW1lcmljQXhpcykpLGUuZG9tLmVsR3JpZFJlY3Q9aS5kcmF3UmVjdCgtYS8yLW8tMiwtYS8yLGUuZ3JpZFdpZHRoK2ErbitvKzQsZS5ncmlkSGVpZ2h0K2EsMCxcIiNmZmZcIik7dmFyIGw9dC5nbG9iYWxzLm1hcmtlcnMubGFyZ2VzdFNpemUrMTtlLmRvbS5lbEdyaWRSZWN0TWFya2VyPWkuZHJhd1JlY3QoMiotbCwyKi1sLGUuZ3JpZFdpZHRoKzQqbCxlLmdyaWRIZWlnaHQrNCpsLDAsXCIjZmZmXCIpLGUuZG9tLmVsR3JpZFJlY3RNYXNrLmFwcGVuZENoaWxkKGUuZG9tLmVsR3JpZFJlY3Qubm9kZSksZS5kb20uZWxHcmlkUmVjdE1hcmtlck1hc2suYXBwZW5kQ2hpbGQoZS5kb20uZWxHcmlkUmVjdE1hcmtlci5ub2RlKTt2YXIgaD1lLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcImRlZnNcIik7aC5hcHBlbmRDaGlsZChlLmRvbS5lbEdyaWRSZWN0TWFzayksaC5hcHBlbmRDaGlsZChlLmRvbS5lbEZvcmVjYXN0TWFzayksaC5hcHBlbmRDaGlsZChlLmRvbS5lbE5vbkZvcmVjYXN0TWFzayksaC5hcHBlbmRDaGlsZChlLmRvbS5lbEdyaWRSZWN0TWFya2VyTWFzayl9fSx7a2V5OlwiX2RyYXdHcmlkTGluZXNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmksaT10LngxLGE9dC55MSxzPXQueDIscj10LnkyLG89dC54Q291bnQsbj10LnBhcmVudCxsPXRoaXMudztpZighKDA9PT1lJiZsLmdsb2JhbHMuc2tpcEZpcnN0VGltZWxpbmVsYWJlbHx8ZT09PW8tMSYmbC5nbG9iYWxzLnNraXBMYXN0VGltZWxpbmVsYWJlbCYmIWwuY29uZmlnLnhheGlzLmxhYmVscy5mb3JtYXR0ZXJ8fFwicmFkYXJcIj09PWwuY29uZmlnLmNoYXJ0LnR5cGUpKXtsLmNvbmZpZy5ncmlkLnhheGlzLmxpbmVzLnNob3cmJnRoaXMuX2RyYXdHcmlkTGluZSh7eDE6aSx5MTphLHgyOnMseTI6cixwYXJlbnQ6bn0pO3ZhciBoPTA7aWYobC5nbG9iYWxzLmhhc0dyb3VwcyYmXCJiZXR3ZWVuXCI9PT1sLmNvbmZpZy54YXhpcy50aWNrUGxhY2VtZW50KXt2YXIgYz1sLmdsb2JhbHMuZ3JvdXBzO2lmKGMpe2Zvcih2YXIgZD0wLGc9MDtkPGUmJmc8Yy5sZW5ndGg7ZysrKWQrPWNbZ10uY29scztkPT09ZSYmKGg9LjYqbC5nbG9iYWxzLnhBeGlzTGFiZWxzSGVpZ2h0KX19bmV3IEcodGhpcy5jdHgpLmRyYXdYYXhpc1RpY2tzKGksaCx0aGlzLmVsZyl9fX0se2tleTpcIl9kcmF3R3JpZExpbmVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LngxLGk9dC55MSxhPXQueDIscz10LnkyLHI9dC5wYXJlbnQsbz10aGlzLncsbj1yLm5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXBleGNoYXJ0cy1ncmlkbGluZXMtaG9yaXpvbnRhbFwiKSxsPW8uY29uZmlnLmdyaWQuc3Ryb2tlRGFzaEFycmF5LGg9by5nbG9iYWxzLmJhclBhZEZvck51bWVyaWNBeGlzLGM9bmV3IG0odGhpcykuZHJhd0xpbmUoZS0obj9oOjApLGksYSsobj9oOjApLHMsby5jb25maWcuZ3JpZC5ib3JkZXJDb2xvcixsKTtjLm5vZGUuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtZ3JpZGxpbmVcIiksci5hZGQoYyl9fSx7a2V5OlwiX2RyYXdHcmlkQmFuZFJlY3RcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmMsaT10LngxLGE9dC55MSxzPXQueDIscj10LnkyLG89dC50eXBlLG49dGhpcy53LGw9bmV3IG0odGhpcy5jdHgpLGg9bi5nbG9iYWxzLmJhclBhZEZvck51bWVyaWNBeGlzO2lmKFwiY29sdW1uXCIhPT1vfHxcImRhdGV0aW1lXCIhPT1uLmNvbmZpZy54YXhpcy50eXBlKXt2YXIgYz1uLmNvbmZpZy5ncmlkW29dLmNvbG9yc1tlXSxkPWwuZHJhd1JlY3QoaS0oXCJyb3dcIj09PW8/aDowKSxhLHMrKFwicm93XCI9PT1vPzIqaDowKSxyLDAsYyxuLmNvbmZpZy5ncmlkW29dLm9wYWNpdHkpO3RoaXMuZWxnLmFkZChkKSxkLmF0dHIoXCJjbGlwLXBhdGhcIixcInVybCgjZ3JpZFJlY3RNYXNrXCIuY29uY2F0KG4uZ2xvYmFscy5jdWlkLFwiKVwiKSksZC5ub2RlLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLWdyaWQtXCIuY29uY2F0KG8pKX19fSx7a2V5OlwiX2RyYXdYWUxpbmVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXQueENvdW50LGE9dC50aWNrQW1vdW50LHM9dGhpcy53O2lmKHMuY29uZmlnLmdyaWQueGF4aXMubGluZXMuc2hvd3x8cy5jb25maWcueGF4aXMuYXhpc1RpY2tzLnNob3cpe3ZhciByLG89cy5nbG9iYWxzLnBhZEhvcml6b250YWwsbj1zLmdsb2JhbHMuZ3JpZEhlaWdodDtzLmdsb2JhbHMudGltZXNjYWxlTGFiZWxzLmxlbmd0aD9mdW5jdGlvbih0KXtmb3IodmFyIGE9dC54QyxzPXQueDEscj10LnkxLG89dC54MixuPXQueTIsbD0wO2w8YTtsKyspcz1lLnhheGlzTGFiZWxzW2xdLnBvc2l0aW9uLG89ZS54YXhpc0xhYmVsc1tsXS5wb3NpdGlvbixlLl9kcmF3R3JpZExpbmVzKHtpOmwseDE6cyx5MTpyLHgyOm8seTI6bix4Q291bnQ6aSxwYXJlbnQ6ZS5lbGdyaWRMaW5lc1Z9KX0oe3hDOmkseDE6byx5MTowLHgyOnIseTI6bn0pOihzLmdsb2JhbHMuaXNYTnVtZXJpYyYmKGk9cy5nbG9iYWxzLnhBeGlzU2NhbGUucmVzdWx0Lmxlbmd0aCkscy5jb25maWcueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljJiYoaT1zLmdsb2JhbHMueGF4aXNMYWJlbHNDb3VudCksZnVuY3Rpb24odCl7dmFyIGE9dC54QyxyPXQueDEsbz10LnkxLG49dC54MixsPXQueTI7aWYodm9pZCAwIT09cy5jb25maWcueGF4aXMudGlja0Ftb3VudCYmXCJkYXRhUG9pbnRzXCIhPT1zLmNvbmZpZy54YXhpcy50aWNrQW1vdW50JiZcIm9uXCI9PT1zLmNvbmZpZy54YXhpcy50aWNrUGxhY2VtZW50KXMuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy10ZXh0LmFwZXhjaGFydHMteGF4aXMtbGFiZWwgdHNwYW46bm90KDplbXB0eSlcIikuZm9yRWFjaCgoZnVuY3Rpb24odCxhKXt2YXIgcz10LmdldEJCb3goKTtlLl9kcmF3R3JpZExpbmVzKHtpOmEseDE6cy54K3Mud2lkdGgvMix5MTpvLHgyOnMueCtzLndpZHRoLzIseTI6bCx4Q291bnQ6aSxwYXJlbnQ6ZS5lbGdyaWRMaW5lc1Z9KX0pKTtlbHNlIGZvcih2YXIgaD0wO2g8YSsocy5nbG9iYWxzLmlzWE51bWVyaWM/MDoxKTtoKyspMD09PWgmJjE9PT1hJiYxPT09cy5nbG9iYWxzLmRhdGFQb2ludHMmJihuPXI9cy5nbG9iYWxzLmdyaWRXaWR0aC8yKSxlLl9kcmF3R3JpZExpbmVzKHtpOmgseDE6cix5MTpvLHgyOm4seTI6bCx4Q291bnQ6aSxwYXJlbnQ6ZS5lbGdyaWRMaW5lc1Z9KSxuPXIrPXMuZ2xvYmFscy5ncmlkV2lkdGgvKHMuZ2xvYmFscy5pc1hOdW1lcmljP2EtMTphKX0oe3hDOmkseDE6byx5MTowLHgyOnIseTI6bn0pKX1pZihzLmNvbmZpZy5ncmlkLnlheGlzLmxpbmVzLnNob3cpe3ZhciBsPTAsaD0wLGM9cy5nbG9iYWxzLmdyaWRXaWR0aCxkPWErMTt0aGlzLmlzUmFuZ2VCYXImJihkPXMuZ2xvYmFscy5sYWJlbHMubGVuZ3RoKTtmb3IodmFyIGc9MDtnPGQrKHRoaXMuaXNSYW5nZUJhcj8xOjApO2crKyl0aGlzLl9kcmF3R3JpZExpbmUoe3gxOjAseTE6bCx4MjpjLHkyOmgscGFyZW50OnRoaXMuZWxncmlkTGluZXNIfSksaD1sKz1zLmdsb2JhbHMuZ3JpZEhlaWdodC8odGhpcy5pc1JhbmdlQmFyP2Q6YSl9fX0se2tleTpcIl9kcmF3SW52ZXJ0ZWRYWUxpbmVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC54Q291bnQsaT10aGlzLnc7aWYoaS5jb25maWcuZ3JpZC54YXhpcy5saW5lcy5zaG93fHxpLmNvbmZpZy54YXhpcy5heGlzVGlja3Muc2hvdylmb3IodmFyIGEscz1pLmdsb2JhbHMucGFkSG9yaXpvbnRhbCxyPWkuZ2xvYmFscy5ncmlkSGVpZ2h0LG89MDtvPGUrMTtvKyspe2kuY29uZmlnLmdyaWQueGF4aXMubGluZXMuc2hvdyYmdGhpcy5fZHJhd0dyaWRMaW5lKHt4MTpzLHkxOjAseDI6YSx5MjpyLHBhcmVudDp0aGlzLmVsZ3JpZExpbmVzVn0pLG5ldyBHKHRoaXMuY3R4KS5kcmF3WGF4aXNUaWNrcyhzLDAsdGhpcy5lbGcpLGE9cz1zK2kuZ2xvYmFscy5ncmlkV2lkdGgvZSsuM31pZihpLmNvbmZpZy5ncmlkLnlheGlzLmxpbmVzLnNob3cpZm9yKHZhciBuPTAsbD0wLGg9aS5nbG9iYWxzLmdyaWRXaWR0aCxjPTA7YzxpLmdsb2JhbHMuZGF0YVBvaW50cysxO2MrKyl0aGlzLl9kcmF3R3JpZExpbmUoe3gxOjAseTE6bix4MjpoLHkyOmwscGFyZW50OnRoaXMuZWxncmlkTGluZXNIfSksbD1uKz1pLmdsb2JhbHMuZ3JpZEhlaWdodC9pLmdsb2JhbHMuZGF0YVBvaW50c319LHtrZXk6XCJyZW5kZXJHcmlkXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT1uZXcgbSh0aGlzLmN0eCk7dGhpcy5lbGc9ZS5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWdyaWRcIn0pLHRoaXMuZWxncmlkTGluZXNIPWUuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1ncmlkbGluZXMtaG9yaXpvbnRhbFwifSksdGhpcy5lbGdyaWRMaW5lc1Y9ZS5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWdyaWRsaW5lcy12ZXJ0aWNhbFwifSksdGhpcy5lbGcuYWRkKHRoaXMuZWxncmlkTGluZXNIKSx0aGlzLmVsZy5hZGQodGhpcy5lbGdyaWRMaW5lc1YpLHQuY29uZmlnLmdyaWQuc2hvd3x8KHRoaXMuZWxncmlkTGluZXNWLmhpZGUoKSx0aGlzLmVsZ3JpZExpbmVzSC5oaWRlKCkpO2Zvcih2YXIgaSxhPXQuZ2xvYmFscy55QXhpc1NjYWxlLmxlbmd0aD90Lmdsb2JhbHMueUF4aXNTY2FsZVswXS5yZXN1bHQubGVuZ3RoLTE6NSxzPTA7czx0Lmdsb2JhbHMuc2VyaWVzLmxlbmd0aCYmKHZvaWQgMCE9PXQuZ2xvYmFscy55QXhpc1NjYWxlW3NdJiYoYT10Lmdsb2JhbHMueUF4aXNTY2FsZVtzXS5yZXN1bHQubGVuZ3RoLTEpLCEoYT4yKSk7cysrKTtyZXR1cm4hdC5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbHx8dGhpcy5pc1JhbmdlQmFyPyhpPXRoaXMueGF4aXNMYWJlbHMubGVuZ3RoLHRoaXMuaXNSYW5nZUJhciYmKGE9dC5nbG9iYWxzLmxhYmVscy5sZW5ndGgsdC5jb25maWcueGF4aXMudGlja0Ftb3VudCYmdC5jb25maWcueGF4aXMubGFiZWxzLmZvcm1hdHRlciYmKGk9dC5jb25maWcueGF4aXMudGlja0Ftb3VudCkpLHRoaXMuX2RyYXdYWUxpbmVzKHt4Q291bnQ6aSx0aWNrQW1vdW50OmF9KSk6KGk9YSxhPXQuZ2xvYmFscy54VGlja0Ftb3VudCx0aGlzLl9kcmF3SW52ZXJ0ZWRYWUxpbmVzKHt4Q291bnQ6aSx0aWNrQW1vdW50OmF9KSksdGhpcy5kcmF3R3JpZEJhbmRzKGksYSkse2VsOnRoaXMuZWxnLHhBeGlzVGlja1dpZHRoOnQuZ2xvYmFscy5ncmlkV2lkdGgvaX19fSx7a2V5OlwiZHJhd0dyaWRCYW5kc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53O2lmKHZvaWQgMCE9PWkuY29uZmlnLmdyaWQucm93LmNvbG9ycyYmaS5jb25maWcuZ3JpZC5yb3cuY29sb3JzLmxlbmd0aD4wKWZvcih2YXIgYT0wLHM9aS5nbG9iYWxzLmdyaWRIZWlnaHQvZSxyPWkuZ2xvYmFscy5ncmlkV2lkdGgsbz0wLG49MDtvPGU7bysrLG4rKyluPj1pLmNvbmZpZy5ncmlkLnJvdy5jb2xvcnMubGVuZ3RoJiYobj0wKSx0aGlzLl9kcmF3R3JpZEJhbmRSZWN0KHtjOm4seDE6MCx5MTphLHgyOnIseTI6cyx0eXBlOlwicm93XCJ9KSxhKz1pLmdsb2JhbHMuZ3JpZEhlaWdodC9lO2lmKHZvaWQgMCE9PWkuY29uZmlnLmdyaWQuY29sdW1uLmNvbG9ycyYmaS5jb25maWcuZ3JpZC5jb2x1bW4uY29sb3JzLmxlbmd0aD4wKWZvcih2YXIgbD1pLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsfHxcImNhdGVnb3J5XCIhPT1pLmNvbmZpZy54YXhpcy50eXBlJiYhaS5jb25maWcueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljP3Q6dC0xLGg9aS5nbG9iYWxzLnBhZEhvcml6b250YWwsYz1pLmdsb2JhbHMucGFkSG9yaXpvbnRhbCtpLmdsb2JhbHMuZ3JpZFdpZHRoL2wsZD1pLmdsb2JhbHMuZ3JpZEhlaWdodCxnPTAsdT0wO2c8dDtnKyssdSsrKXU+PWkuY29uZmlnLmdyaWQuY29sdW1uLmNvbG9ycy5sZW5ndGgmJih1PTApLHRoaXMuX2RyYXdHcmlkQmFuZFJlY3Qoe2M6dSx4MTpoLHkxOjAseDI6Yyx5MjpkLHR5cGU6XCJjb2x1bW5cIn0pLGgrPWkuZ2xvYmFscy5ncmlkV2lkdGgvbH19XSksdH0oKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53fXJldHVybiByKHQsW3trZXk6XCJuaWNlU2NhbGVcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMCxhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLHM9YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTp2b2lkIDAscj10aGlzLncsbz1NYXRoLmFicyhlLXQpO2lmKFwiZGF0YVBvaW50c1wiPT09KGk9dGhpcy5fYWRqdXN0VGlja3NGb3JTbWFsbFJhbmdlKGksYSxvKSkmJihpPXIuZ2xvYmFscy5kYXRhUG9pbnRzLTEpLHQ9PT1OdW1iZXIuTUlOX1ZBTFVFJiYwPT09ZXx8IXguaXNOdW1iZXIodCkmJiF4LmlzTnVtYmVyKGUpfHx0PT09TnVtYmVyLk1JTl9WQUxVRSYmZT09PS1OdW1iZXIuTUFYX1ZBTFVFKXt0PTAsZT1pO3ZhciBuPXRoaXMubGluZWFyU2NhbGUodCxlLGkpO3JldHVybiBufXQ+ZT8oY29uc29sZS53YXJuKFwiYXhpcy5taW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBheGlzLm1heFwiKSxlPXQrLjEpOnQ9PT1lJiYodD0wPT09dD8wOnQtLjUsZT0wPT09ZT8yOmUrLjUpO3ZhciBsPVtdO288MSYmcyYmKFwiY2FuZGxlc3RpY2tcIj09PXIuY29uZmlnLmNoYXJ0LnR5cGV8fFwiY2FuZGxlc3RpY2tcIj09PXIuY29uZmlnLnNlcmllc1thXS50eXBlfHxcImJveFBsb3RcIj09PXIuY29uZmlnLmNoYXJ0LnR5cGV8fFwiYm94UGxvdFwiPT09ci5jb25maWcuc2VyaWVzW2FdLnR5cGV8fHIuZ2xvYmFscy5pc1JhbmdlRGF0YSkmJihlKj0xLjAxKTt2YXIgaD1pKzE7aDwyP2g9MjpoPjImJihoLT0yKTt2YXIgYz1vL2gsZD1NYXRoLmZsb29yKHgubG9nMTAoYykpLGc9TWF0aC5wb3coMTAsZCksdT1NYXRoLnJvdW5kKGMvZyk7dTwxJiYodT0xKTt2YXIgZj11KmcscD1mKk1hdGguZmxvb3IodC9mKSxiPWYqTWF0aC5jZWlsKGUvZiksdj1wO2lmKHMmJm8+Mil7Zm9yKDtsLnB1c2godiksISgodis9Zik+Yik7KTtyZXR1cm57cmVzdWx0OmwsbmljZU1pbjpsWzBdLG5pY2VNYXg6bFtsLmxlbmd0aC0xXX19dmFyIG09dDsobD1bXSkucHVzaChtKTtmb3IodmFyIHk9TWF0aC5hYnMoZS10KS9pLHc9MDt3PD1pO3crKyltKz15LGwucHVzaChtKTtyZXR1cm4gbFtsLmxlbmd0aC0yXT49ZSYmbC5wb3AoKSx7cmVzdWx0OmwsbmljZU1pbjpsWzBdLG5pY2VNYXg6bFtsLmxlbmd0aC0xXX19fSx7a2V5OlwibGluZWFyU2NhbGVcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMCxhPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwLHM9TWF0aC5hYnMoZS10KTtcImRhdGFQb2ludHNcIj09PShpPXRoaXMuX2FkanVzdFRpY2tzRm9yU21hbGxSYW5nZShpLGEscykpJiYoaT10aGlzLncuZ2xvYmFscy5kYXRhUG9pbnRzLTEpO3ZhciByPXMvaTtpPT09TnVtYmVyLk1BWF9WQUxVRSYmKGk9MTAscj0xKTtmb3IodmFyIG89W10sbj10O2k+PTA7KW8ucHVzaChuKSxuKz1yLGktPTE7cmV0dXJue3Jlc3VsdDpvLG5pY2VNaW46b1swXSxuaWNlTWF4Om9bby5sZW5ndGgtMV19fX0se2tleTpcImxvZ2FyaXRobWljU2NhbGVOaWNlXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe2U8PTAmJihlPU1hdGgubWF4KHQsaSkpLHQ8PTAmJih0PU1hdGgubWluKGUsaSkpO2Zvcih2YXIgYT1bXSxzPU1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLmxvZyhpKSsxKSxyPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5sb2coaSkpO3I8cztyKyspYS5wdXNoKE1hdGgucG93KGkscikpO3JldHVybntyZXN1bHQ6YSxuaWNlTWluOmFbMF0sbmljZU1heDphW2EubGVuZ3RoLTFdfX19LHtrZXk6XCJsb2dhcml0aG1pY1NjYWxlXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe2U8PTAmJihlPU1hdGgubWF4KHQsaSkpLHQ8PTAmJih0PU1hdGgubWluKGUsaSkpO2Zvcih2YXIgYT1bXSxzPU1hdGgubG9nKGUpL01hdGgubG9nKGkpLHI9TWF0aC5sb2codCkvTWF0aC5sb2coaSksbz1zLXIsbj1NYXRoLnJvdW5kKG8pLGw9by9uLGg9MCxjPXI7aDxuO2grKyxjKz1sKWEucHVzaChNYXRoLnBvdyhpLGMpKTtyZXR1cm4gYS5wdXNoKE1hdGgucG93KGkscykpLHtyZXN1bHQ6YSxuaWNlTWluOnQsbmljZU1heDplfX19LHtrZXk6XCJfYWRqdXN0VGlja3NGb3JTbWFsbFJhbmdlXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQ7aWYodm9pZCAwIT09ZSYmdGhpcy53LmNvbmZpZy55YXhpc1tlXS5sYWJlbHMuZm9ybWF0dGVyJiZ2b2lkIDA9PT10aGlzLncuY29uZmlnLnlheGlzW2VdLnRpY2tBbW91bnQpe3ZhciBzPXRoaXMudy5jb25maWcueWF4aXNbZV0ubGFiZWxzLmZvcm1hdHRlcigxKTt4LmlzTnVtYmVyKE51bWJlcihzKSkmJiF4LmlzRmxvYXQocykmJihhPU1hdGguY2VpbChpKSl9cmV0dXJuIGE8dD9hOnR9fSx7a2V5Olwic2V0WVNjYWxlRm9ySW5kZXhcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dmFyIGE9dGhpcy53Lmdsb2JhbHMscz10aGlzLncuY29uZmlnLHI9YS5pc0Jhckhvcml6b250YWw/cy54YXhpczpzLnlheGlzW3RdO3ZvaWQgMD09PWEueUF4aXNTY2FsZVt0XSYmKGEueUF4aXNTY2FsZVt0XT1bXSk7dmFyIG89TWF0aC5hYnMoaS1lKTtpZihyLmxvZ2FyaXRobWljJiZvPD01JiYoYS5pbnZhbGlkTG9nU2NhbGU9ITApLHIubG9nYXJpdGhtaWMmJm8+NSlhLmFsbFNlcmllc0NvbGxhcHNlZD0hMSxhLnlBeGlzU2NhbGVbdF09dGhpcy5sb2dhcml0aG1pY1NjYWxlKGUsaSxyLmxvZ0Jhc2UpLGEueUF4aXNTY2FsZVt0XT1yLmZvcmNlTmljZVNjYWxlP3RoaXMubG9nYXJpdGhtaWNTY2FsZU5pY2UoZSxpLHIubG9nQmFzZSk6dGhpcy5sb2dhcml0aG1pY1NjYWxlKGUsaSxyLmxvZ0Jhc2UpO2Vsc2UgaWYoaSE9PS1OdW1iZXIuTUFYX1ZBTFVFJiZ4LmlzTnVtYmVyKGkpKWlmKGEuYWxsU2VyaWVzQ29sbGFwc2VkPSExLHZvaWQgMD09PXIubWluJiZ2b2lkIDA9PT1yLm1heHx8ci5mb3JjZU5pY2VTY2FsZSl7dmFyIG49dm9pZCAwPT09cy55YXhpc1t0XS5tYXgmJnZvaWQgMD09PXMueWF4aXNbdF0ubWlufHxzLnlheGlzW3RdLmZvcmNlTmljZVNjYWxlO2EueUF4aXNTY2FsZVt0XT10aGlzLm5pY2VTY2FsZShlLGksci50aWNrQW1vdW50P3IudGlja0Ftb3VudDpvPDUmJm8+MT9vKzE6NSx0LG4pfWVsc2UgYS55QXhpc1NjYWxlW3RdPXRoaXMubGluZWFyU2NhbGUoZSxpLHIudGlja0Ftb3VudCx0KTtlbHNlIGEueUF4aXNTY2FsZVt0XT10aGlzLmxpbmVhclNjYWxlKDAsNSw1KX19LHtrZXk6XCJzZXRYU2NhbGVcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudyxhPWkuZ2xvYmFscyxzPWkuY29uZmlnLnhheGlzLHI9TWF0aC5hYnMoZS10KTtyZXR1cm4gZSE9PS1OdW1iZXIuTUFYX1ZBTFVFJiZ4LmlzTnVtYmVyKGUpP2EueEF4aXNTY2FsZT10aGlzLmxpbmVhclNjYWxlKHQsZSxzLnRpY2tBbW91bnQ/cy50aWNrQW1vdW50OnI8NSYmcj4xP3IrMTo1LDApOmEueEF4aXNTY2FsZT10aGlzLmxpbmVhclNjYWxlKDAsNSw1KSxhLnhBeGlzU2NhbGV9fSx7a2V5Olwic2V0TXVsdGlwbGVZU2NhbGVzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy53Lmdsb2JhbHMsaT10aGlzLncuY29uZmlnLGE9ZS5taW5ZQXJyLmNvbmNhdChbXSkscz1lLm1heFlBcnIuY29uY2F0KFtdKSxyPVtdO2kueWF4aXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxvKXt2YXIgbj1vO2kuc2VyaWVzLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7dC5uYW1lPT09ZS5zZXJpZXNOYW1lJiYobj1pLG8hPT1pP3IucHVzaCh7aW5kZXg6aSxzaW1pbGFySW5kZXg6byxhbHJlYWR5RXhpc3RzOiEwfSk6ci5wdXNoKHtpbmRleDppfSkpfSkpO3ZhciBsPWFbbl0saD1zW25dO3Quc2V0WVNjYWxlRm9ySW5kZXgobyxsLGgpfSkpLHRoaXMuc2FtZVNjYWxlSW5NdWx0aXBsZUF4ZXMoYSxzLHIpfX0se2tleTpcInNhbWVTY2FsZUluTXVsdGlwbGVBeGVzXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMscz10aGlzLncuY29uZmlnLHI9dGhpcy53Lmdsb2JhbHMsbz1bXTtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuYWxyZWFkeUV4aXN0cyYmKHZvaWQgMD09PW9bdC5pbmRleF0mJihvW3QuaW5kZXhdPVtdKSxvW3QuaW5kZXhdLnB1c2godC5pbmRleCksb1t0LmluZGV4XS5wdXNoKHQuc2ltaWxhckluZGV4KSl9KSksci55QXhpc1NhbWVTY2FsZUluZGljZXM9byxvLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7by5mb3JFYWNoKChmdW5jdGlvbihpLGEpe3ZhciBzLHI7ZSE9PWEmJihzPXQscj1pLHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4tMSE9PXIuaW5kZXhPZih0KX0pKSkubGVuZ3RoPjAmJihvW2VdPW9bZV0uY29uY2F0KG9bYV0pKX0pKX0pKTt2YXIgbj1vLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbihlLGkpe3JldHVybiB0LmluZGV4T2YoZSk9PT1pfSkpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc29ydCgpfSkpO289by5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKTt2YXIgbD1uLnNsaWNlKCksaD1sLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfSkpO2w9bC5maWx0ZXIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGguaW5kZXhPZihKU09OLnN0cmluZ2lmeSh0KSk9PT1lfSkpO3ZhciBjPVtdLGQ9W107dC5mb3JFYWNoKChmdW5jdGlvbih0LGkpe2wuZm9yRWFjaCgoZnVuY3Rpb24oYSxzKXthLmluZGV4T2YoaSk+LTEmJih2b2lkIDA9PT1jW3NdJiYoY1tzXT1bXSxkW3NdPVtdKSxjW3NdLnB1c2goe2tleTppLHZhbHVlOnR9KSxkW3NdLnB1c2goe2tleTppLHZhbHVlOmVbaV19KSl9KSl9KSk7dmFyIGc9QXJyYXkuYXBwbHkobnVsbCxBcnJheShsLmxlbmd0aCkpLm1hcChOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YsTnVtYmVyLk1JTl9WQUxVRSksdT1BcnJheS5hcHBseShudWxsLEFycmF5KGwubGVuZ3RoKSkubWFwKE51bWJlci5wcm90b3R5cGUudmFsdWVPZiwtTnVtYmVyLk1BWF9WQUxVRSk7Yy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtnW2VdPU1hdGgubWluKHQudmFsdWUsZ1tlXSl9KSl9KSksZC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXt1W2VdPU1hdGgubWF4KHQudmFsdWUsdVtlXSl9KSl9KSksdC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2QuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXt2YXIgbz1nW2ldLG49dVtpXTtzLmNoYXJ0LnN0YWNrZWQmJihuPTAsdC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QudmFsdWUhPT0tTnVtYmVyLk1BWF9WQUxVRSYmKG4rPXQudmFsdWUpLG8hPT1OdW1iZXIuTUlOX1ZBTFVFJiYobys9Y1tpXVtlXS52YWx1ZSl9KSkpLHQuZm9yRWFjaCgoZnVuY3Rpb24oaSxsKXt0W2xdLmtleT09PWUmJih2b2lkIDAhPT1zLnlheGlzW2VdLm1pbiYmKG89XCJmdW5jdGlvblwiPT10eXBlb2Ygcy55YXhpc1tlXS5taW4/cy55YXhpc1tlXS5taW4oci5taW5ZKTpzLnlheGlzW2VdLm1pbiksdm9pZCAwIT09cy55YXhpc1tlXS5tYXgmJihuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHMueWF4aXNbZV0ubWF4P3MueWF4aXNbZV0ubWF4KHIubWF4WSk6cy55YXhpc1tlXS5tYXgpLGEuc2V0WVNjYWxlRm9ySW5kZXgoZSxvLG4pKX0pKX0pKX0pKX19LHtrZXk6XCJhdXRvU2NhbGVZXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3R8fCh0PXRoaXMpO3ZhciBhPXQudztpZihhLmdsb2JhbHMuaXNNdWx0aXBsZVlBeGlzfHxhLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJuKFwiYXV0b1NjYWxlWWF4aXMgaXMgbm90IHN1cHBvcnRlZCBpbiBhIG11bHRpLXlheGlzIGNoYXJ0LlwiKSxlO3ZhciBzPWEuZ2xvYmFscy5zZXJpZXNYWzBdLHI9YS5jb25maWcuY2hhcnQuc3RhY2tlZDtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0LG8pe2Zvcih2YXIgbj0wLGw9MDtsPHMubGVuZ3RoO2wrKylpZihzW2xdPj1pLnhheGlzLm1pbil7bj1sO2JyZWFrfXZhciBoLGMsZD1hLmdsb2JhbHMubWluWUFycltvXSxnPWEuZ2xvYmFscy5tYXhZQXJyW29dLHU9YS5nbG9iYWxzLnN0YWNrZWRTZXJpZXNUb3RhbHM7YS5nbG9iYWxzLnNlcmllcy5mb3JFYWNoKChmdW5jdGlvbihvLGwpe3ZhciBmPW9bbl07cj8oZj11W25dLGg9Yz1mLHUuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtzW2VdPD1pLnhheGlzLm1heCYmc1tlXT49aS54YXhpcy5taW4mJih0PmMmJm51bGwhPT10JiYoYz10KSxvW2VdPGgmJm51bGwhPT1vW2VdJiYoaD1vW2VdKSl9KSkpOihoPWM9ZixvLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7aWYoc1tlXTw9aS54YXhpcy5tYXgmJnNbZV0+PWkueGF4aXMubWluKXt2YXIgcj10LG89dDthLmdsb2JhbHMuc2VyaWVzLmZvckVhY2goKGZ1bmN0aW9uKGksYSl7bnVsbCE9PXQmJihyPU1hdGgubWluKGlbZV0sciksbz1NYXRoLm1heChpW2VdLG8pKX0pKSxvPmMmJm51bGwhPT1vJiYoYz1vKSxyPGgmJm51bGwhPT1yJiYoaD1yKX19KSkpLHZvaWQgMD09PWgmJnZvaWQgMD09PWMmJihoPWQsYz1nKSxjKj1jPDA/Ljk6MS4xLDA9PT0oaCo9aDwwPzEuMTouOSkmJjA9PT1jJiYoaD0tMSxjPTEpLGM8MCYmYzxnJiYoYz1nKSxoPDAmJmg+ZCYmKGg9ZCksZS5sZW5ndGg+MT8oZVtsXS5taW49dm9pZCAwPT09dC5taW4/aDp0Lm1pbixlW2xdLm1heD12b2lkIDA9PT10Lm1heD9jOnQubWF4KTooZVswXS5taW49dm9pZCAwPT09dC5taW4/aDp0Lm1pbixlWzBdLm1heD12b2lkIDA9PT10Lm1heD9jOnQubWF4KX0pKX0pKSxlfX1dKSx0fSgpLFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLncsdGhpcy5zY2FsZXM9bmV3IF8oZSl9cmV0dXJuIHIodCxbe2tleTpcImluaXRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0WVJhbmdlKCksdGhpcy5zZXRYUmFuZ2UoKSx0aGlzLnNldFpSYW5nZSgpfX0se2tleTpcImdldE1pbllNYXhZXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOk51bWJlci5NQVhfVkFMVUUsaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06LU51bWJlci5NQVhfVkFMVUUsYT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbCxzPXRoaXMudy5jb25maWcscj10aGlzLncuZ2xvYmFscyxvPS1OdW1iZXIuTUFYX1ZBTFVFLG49TnVtYmVyLk1JTl9WQUxVRTtudWxsPT09YSYmKGE9dCsxKTt2YXIgbD1yLnNlcmllcyxoPWwsYz1sO1wiY2FuZGxlc3RpY2tcIj09PXMuY2hhcnQudHlwZT8oaD1yLnNlcmllc0NhbmRsZUwsYz1yLnNlcmllc0NhbmRsZUgpOlwiYm94UGxvdFwiPT09cy5jaGFydC50eXBlPyhoPXIuc2VyaWVzQ2FuZGxlTyxjPXIuc2VyaWVzQ2FuZGxlQyk6ci5pc1JhbmdlRGF0YSYmKGg9ci5zZXJpZXNSYW5nZVN0YXJ0LGM9ci5zZXJpZXNSYW5nZUVuZCk7Zm9yKHZhciBkPXQ7ZDxhO2QrKyl7ci5kYXRhUG9pbnRzPU1hdGgubWF4KHIuZGF0YVBvaW50cyxsW2RdLmxlbmd0aCksci5jYXRlZ29yeUxhYmVscy5sZW5ndGgmJihyLmRhdGFQb2ludHM9ci5jYXRlZ29yeUxhYmVscy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10fSkpLmxlbmd0aCk7Zm9yKHZhciBnPTA7ZzxyLnNlcmllc1tkXS5sZW5ndGg7ZysrKXt2YXIgdT1sW2RdW2ddO251bGwhPT11JiZ4LmlzTnVtYmVyKHUpPyh2b2lkIDAhPT1jW2RdW2ddJiYobz1NYXRoLm1heChvLGNbZF1bZ10pLGU9TWF0aC5taW4oZSxjW2RdW2ddKSksdm9pZCAwIT09aFtkXVtnXSYmKGU9TWF0aC5taW4oZSxoW2RdW2ddKSxpPU1hdGgubWF4KGksaFtkXVtnXSkpLFwiY2FuZGxlc3RpY2tcIiE9PXRoaXMudy5jb25maWcuY2hhcnQudHlwZSYmXCJib3hQbG90XCIhPT10aGlzLncuY29uZmlnLmNoYXJ0LnR5cGUmJlwicmFuZ2VBcmVhXCI9PT10aGlzLncuY29uZmlnLmNoYXJ0LnR5cGUmJlwicmFuZ2VCYXJcIj09PXRoaXMudy5jb25maWcuY2hhcnQudHlwZXx8KFwiY2FuZGxlc3RpY2tcIiE9PXRoaXMudy5jb25maWcuY2hhcnQudHlwZSYmXCJib3hQbG90XCIhPT10aGlzLncuY29uZmlnLmNoYXJ0LnR5cGV8fHZvaWQgMCE9PXIuc2VyaWVzQ2FuZGxlQ1tkXVtnXSYmKG89TWF0aC5tYXgobyxyLnNlcmllc0NhbmRsZU9bZF1bZ10pLG89TWF0aC5tYXgobyxyLnNlcmllc0NhbmRsZUhbZF1bZ10pLG89TWF0aC5tYXgobyxyLnNlcmllc0NhbmRsZUxbZF1bZ10pLG89TWF0aC5tYXgobyxyLnNlcmllc0NhbmRsZUNbZF1bZ10pLFwiYm94UGxvdFwiPT09dGhpcy53LmNvbmZpZy5jaGFydC50eXBlJiYobz1NYXRoLm1heChvLHIuc2VyaWVzQ2FuZGxlTVtkXVtnXSkpKSwhcy5zZXJpZXNbZF0udHlwZXx8XCJjYW5kbGVzdGlja1wiPT09cy5zZXJpZXNbZF0udHlwZSYmXCJib3hQbG90XCI9PT1zLnNlcmllc1tkXS50eXBlJiZcInJhbmdlQXJlYVwiPT09cy5zZXJpZXNbZF0udHlwZSYmXCJyYW5nZUJhclwiPT09cy5zZXJpZXNbZF0udHlwZXx8KG89TWF0aC5tYXgobyxyLnNlcmllc1tkXVtnXSksZT1NYXRoLm1pbihlLHIuc2VyaWVzW2RdW2ddKSksaT1vKSxyLnNlcmllc0dvYWxzW2RdJiZyLnNlcmllc0dvYWxzW2RdW2ddJiZBcnJheS5pc0FycmF5KHIuc2VyaWVzR29hbHNbZF1bZ10pJiZyLnNlcmllc0dvYWxzW2RdW2ddLmZvckVhY2goKGZ1bmN0aW9uKHQpe24hPT1OdW1iZXIuTUlOX1ZBTFVFJiYobj1NYXRoLm1pbihuLHQudmFsdWUpLGU9biksbz1NYXRoLm1heChvLHQudmFsdWUpLGk9b30pKSx4LmlzRmxvYXQodSkmJih1PXgubm9FeHBvbmVudHModSksci55VmFsdWVEZWNpbWFsPU1hdGgubWF4KHIueVZhbHVlRGVjaW1hbCx1LnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdLmxlbmd0aCkpLG4+aFtkXVtnXSYmaFtkXVtnXTwwJiYobj1oW2RdW2ddKSk6ci5oYXNOdWxsVmFsdWVzPSEwfX1yZXR1cm5cInJhbmdlQmFyXCI9PT1zLmNoYXJ0LnR5cGUmJnIuc2VyaWVzUmFuZ2VTdGFydC5sZW5ndGgmJnIuaXNCYXJIb3Jpem9udGFsJiYobj1lKSxcImJhclwiPT09cy5jaGFydC50eXBlJiYobjwwJiZvPDAmJihvPTApLG49PT1OdW1iZXIuTUlOX1ZBTFVFJiYobj0wKSkse21pblk6bixtYXhZOm8sbG93ZXN0WTplLGhpZ2hlc3RZOml9fX0se2tleTpcInNldFlSYW5nZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53Lmdsb2JhbHMsZT10aGlzLncuY29uZmlnO3QubWF4WT0tTnVtYmVyLk1BWF9WQUxVRSx0Lm1pblk9TnVtYmVyLk1JTl9WQUxVRTt2YXIgaT1OdW1iZXIuTUFYX1ZBTFVFO2lmKHQuaXNNdWx0aXBsZVlBeGlzKWZvcih2YXIgYT0wO2E8dC5zZXJpZXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpcy5nZXRNaW5ZTWF4WShhLGksbnVsbCxhKzEpO3QubWluWUFyci5wdXNoKHMubWluWSksdC5tYXhZQXJyLnB1c2gocy5tYXhZKSxpPXMubG93ZXN0WX12YXIgcj10aGlzLmdldE1pbllNYXhZKDAsaSxudWxsLHQuc2VyaWVzLmxlbmd0aCk7aWYodC5taW5ZPXIubWluWSx0Lm1heFk9ci5tYXhZLGk9ci5sb3dlc3RZLGUuY2hhcnQuc3RhY2tlZCYmdGhpcy5fc2V0U3RhY2tlZE1pbk1heCgpLChcImxpbmVcIj09PWUuY2hhcnQudHlwZXx8XCJhcmVhXCI9PT1lLmNoYXJ0LnR5cGV8fFwiY2FuZGxlc3RpY2tcIj09PWUuY2hhcnQudHlwZXx8XCJib3hQbG90XCI9PT1lLmNoYXJ0LnR5cGV8fFwicmFuZ2VCYXJcIj09PWUuY2hhcnQudHlwZSYmIXQuaXNCYXJIb3Jpem9udGFsKSYmdC5taW5ZPT09TnVtYmVyLk1JTl9WQUxVRSYmaSE9PS1OdW1iZXIuTUFYX1ZBTFVFJiZpIT09dC5tYXhZKXt2YXIgbz10Lm1heFktaTsoaT49MCYmaTw9MTB8fHZvaWQgMCE9PWUueWF4aXNbMF0ubWlufHx2b2lkIDAhPT1lLnlheGlzWzBdLm1heCkmJihvPTApLHQubWluWT1pLTUqby8xMDAsaT4wJiZ0Lm1pblk8MCYmKHQubWluWT0wKSx0Lm1heFk9dC5tYXhZKzUqby8xMDB9aWYoZS55YXhpcy5mb3JFYWNoKChmdW5jdGlvbihlLGkpe3ZvaWQgMCE9PWUubWF4JiYoXCJudW1iZXJcIj09dHlwZW9mIGUubWF4P3QubWF4WUFycltpXT1lLm1heDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm1heCYmKHQubWF4WUFycltpXT1lLm1heCh0LmlzTXVsdGlwbGVZQXhpcz90Lm1heFlBcnJbaV06dC5tYXhZKSksdC5tYXhZPXQubWF4WUFycltpXSksdm9pZCAwIT09ZS5taW4mJihcIm51bWJlclwiPT10eXBlb2YgZS5taW4/dC5taW5ZQXJyW2ldPWUubWluOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUubWluJiYodC5taW5ZQXJyW2ldPWUubWluKHQuaXNNdWx0aXBsZVlBeGlzP3QubWluWUFycltpXT09PU51bWJlci5NSU5fVkFMVUU/MDp0Lm1pbllBcnJbaV06dC5taW5ZKSksdC5taW5ZPXQubWluWUFycltpXSl9KSksdC5pc0Jhckhvcml6b250YWwpe1tcIm1pblwiLFwibWF4XCJdLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZvaWQgMCE9PWUueGF4aXNbaV0mJlwibnVtYmVyXCI9PXR5cGVvZiBlLnhheGlzW2ldJiYoXCJtaW5cIj09PWk/dC5taW5ZPWUueGF4aXNbaV06dC5tYXhZPWUueGF4aXNbaV0pfSkpfXJldHVybiB0LmlzTXVsdGlwbGVZQXhpcz8odGhpcy5zY2FsZXMuc2V0TXVsdGlwbGVZU2NhbGVzKCksdC5taW5ZPWksdC55QXhpc1NjYWxlLmZvckVhY2goKGZ1bmN0aW9uKGUsaSl7dC5taW5ZQXJyW2ldPWUubmljZU1pbix0Lm1heFlBcnJbaV09ZS5uaWNlTWF4fSkpKToodGhpcy5zY2FsZXMuc2V0WVNjYWxlRm9ySW5kZXgoMCx0Lm1pblksdC5tYXhZKSx0Lm1pblk9dC55QXhpc1NjYWxlWzBdLm5pY2VNaW4sdC5tYXhZPXQueUF4aXNTY2FsZVswXS5uaWNlTWF4LHQubWluWUFyclswXT10LnlBeGlzU2NhbGVbMF0ubmljZU1pbix0Lm1heFlBcnJbMF09dC55QXhpc1NjYWxlWzBdLm5pY2VNYXgpLHttaW5ZOnQubWluWSxtYXhZOnQubWF4WSxtaW5ZQXJyOnQubWluWUFycixtYXhZQXJyOnQubWF4WUFycix5QXhpc1NjYWxlOnQueUF4aXNTY2FsZX19fSx7a2V5Olwic2V0WFJhbmdlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncuZ2xvYmFscyxlPXRoaXMudy5jb25maWcsaT1cIm51bWVyaWNcIj09PWUueGF4aXMudHlwZXx8XCJkYXRldGltZVwiPT09ZS54YXhpcy50eXBlfHxcImNhdGVnb3J5XCI9PT1lLnhheGlzLnR5cGUmJiF0Lm5vTGFiZWxzUHJvdmlkZWR8fHQubm9MYWJlbHNQcm92aWRlZHx8dC5pc1hOdW1lcmljO2lmKHQuaXNYTnVtZXJpYyYmZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHQuc2VyaWVzLmxlbmd0aDtlKyspaWYodC5sYWJlbHNbZV0pZm9yKHZhciBpPTA7aTx0LmxhYmVsc1tlXS5sZW5ndGg7aSsrKW51bGwhPT10LmxhYmVsc1tlXVtpXSYmeC5pc051bWJlcih0LmxhYmVsc1tlXVtpXSkmJih0Lm1heFg9TWF0aC5tYXgodC5tYXhYLHQubGFiZWxzW2VdW2ldKSx0LmluaXRpYWxNYXhYPU1hdGgubWF4KHQubWF4WCx0LmxhYmVsc1tlXVtpXSksdC5taW5YPU1hdGgubWluKHQubWluWCx0LmxhYmVsc1tlXVtpXSksdC5pbml0aWFsTWluWD1NYXRoLm1pbih0Lm1pblgsdC5sYWJlbHNbZV1baV0pKX0oKSx0Lm5vTGFiZWxzUHJvdmlkZWQmJjA9PT1lLnhheGlzLmNhdGVnb3JpZXMubGVuZ3RoJiYodC5tYXhYPXQubGFiZWxzW3QubGFiZWxzLmxlbmd0aC0xXSx0LmluaXRpYWxNYXhYPXQubGFiZWxzW3QubGFiZWxzLmxlbmd0aC0xXSx0Lm1pblg9MSx0LmluaXRpYWxNaW5YPTEpLHQuaXNYTnVtZXJpY3x8dC5ub0xhYmVsc1Byb3ZpZGVkfHx0LmRhdGFGb3JtYXRYTnVtZXJpYyl7dmFyIGE7aWYodm9pZCAwPT09ZS54YXhpcy50aWNrQW1vdW50PyhhPU1hdGgucm91bmQodC5zdmdXaWR0aC8xNTApLFwibnVtZXJpY1wiPT09ZS54YXhpcy50eXBlJiZ0LmRhdGFQb2ludHM8MzAmJihhPXQuZGF0YVBvaW50cy0xKSxhPnQuZGF0YVBvaW50cyYmMCE9PXQuZGF0YVBvaW50cyYmKGE9dC5kYXRhUG9pbnRzLTEpKTpcImRhdGFQb2ludHNcIj09PWUueGF4aXMudGlja0Ftb3VudD8odC5zZXJpZXMubGVuZ3RoPjEmJihhPXQuc2VyaWVzW3QubWF4VmFsc0luQXJyYXlJbmRleF0ubGVuZ3RoLTEpLHQuaXNYTnVtZXJpYyYmKGE9dC5tYXhYLXQubWluWC0xKSk6YT1lLnhheGlzLnRpY2tBbW91bnQsdC54VGlja0Ftb3VudD1hLHZvaWQgMCE9PWUueGF4aXMubWF4JiZcIm51bWJlclwiPT10eXBlb2YgZS54YXhpcy5tYXgmJih0Lm1heFg9ZS54YXhpcy5tYXgpLHZvaWQgMCE9PWUueGF4aXMubWluJiZcIm51bWJlclwiPT10eXBlb2YgZS54YXhpcy5taW4mJih0Lm1pblg9ZS54YXhpcy5taW4pLHZvaWQgMCE9PWUueGF4aXMucmFuZ2UmJih0Lm1pblg9dC5tYXhYLWUueGF4aXMucmFuZ2UpLHQubWluWCE9PU51bWJlci5NQVhfVkFMVUUmJnQubWF4WCE9PS1OdW1iZXIuTUFYX1ZBTFVFKWlmKGUueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljJiYhdC5kYXRhRm9ybWF0WE51bWVyaWMpe2Zvcih2YXIgcz1bXSxyPXQubWluWC0xO3I8dC5tYXhYO3IrKylzLnB1c2gocisxKTt0LnhBeGlzU2NhbGU9e3Jlc3VsdDpzLG5pY2VNaW46c1swXSxuaWNlTWF4OnNbcy5sZW5ndGgtMV19fWVsc2UgdC54QXhpc1NjYWxlPXRoaXMuc2NhbGVzLnNldFhTY2FsZSh0Lm1pblgsdC5tYXhYKTtlbHNlIHQueEF4aXNTY2FsZT10aGlzLnNjYWxlcy5saW5lYXJTY2FsZSgxLGEsYSksdC5ub0xhYmVsc1Byb3ZpZGVkJiZ0LmxhYmVscy5sZW5ndGg+MCYmKHQueEF4aXNTY2FsZT10aGlzLnNjYWxlcy5saW5lYXJTY2FsZSgxLHQubGFiZWxzLmxlbmd0aCxhLTEpLHQuc2VyaWVzWD10LmxhYmVscy5zbGljZSgpKTtpJiYodC5sYWJlbHM9dC54QXhpc1NjYWxlLnJlc3VsdC5zbGljZSgpKX1yZXR1cm4gdC5pc0Jhckhvcml6b250YWwmJnQubGFiZWxzLmxlbmd0aCYmKHQueFRpY2tBbW91bnQ9dC5sYWJlbHMubGVuZ3RoKSx0aGlzLl9oYW5kbGVTaW5nbGVEYXRhUG9pbnQoKSx0aGlzLl9nZXRNaW5YRGlmZigpLHttaW5YOnQubWluWCxtYXhYOnQubWF4WH19fSx7a2V5Olwic2V0WlJhbmdlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncuZ2xvYmFscztpZih0LmlzRGF0YVhZWilmb3IodmFyIGU9MDtlPHQuc2VyaWVzLmxlbmd0aDtlKyspaWYodm9pZCAwIT09dC5zZXJpZXNaW2VdKWZvcih2YXIgaT0wO2k8dC5zZXJpZXNaW2VdLmxlbmd0aDtpKyspbnVsbCE9PXQuc2VyaWVzWltlXVtpXSYmeC5pc051bWJlcih0LnNlcmllc1pbZV1baV0pJiYodC5tYXhaPU1hdGgubWF4KHQubWF4Wix0LnNlcmllc1pbZV1baV0pLHQubWluWj1NYXRoLm1pbih0Lm1pblosdC5zZXJpZXNaW2VdW2ldKSl9fSx7a2V5OlwiX2hhbmRsZVNpbmdsZURhdGFQb2ludFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53Lmdsb2JhbHMsZT10aGlzLncuY29uZmlnO2lmKHQubWluWD09PXQubWF4WCl7dmFyIGk9bmV3IFQodGhpcy5jdHgpO2lmKFwiZGF0ZXRpbWVcIj09PWUueGF4aXMudHlwZSl7dmFyIGE9aS5nZXREYXRlKHQubWluWCk7ZS54YXhpcy5sYWJlbHMuZGF0ZXRpbWVVVEM/YS5zZXRVVENEYXRlKGEuZ2V0VVRDRGF0ZSgpLTIpOmEuc2V0RGF0ZShhLmdldERhdGUoKS0yKSx0Lm1pblg9bmV3IERhdGUoYSkuZ2V0VGltZSgpO3ZhciBzPWkuZ2V0RGF0ZSh0Lm1heFgpO2UueGF4aXMubGFiZWxzLmRhdGV0aW1lVVRDP3Muc2V0VVRDRGF0ZShzLmdldFVUQ0RhdGUoKSsyKTpzLnNldERhdGUocy5nZXREYXRlKCkrMiksdC5tYXhYPW5ldyBEYXRlKHMpLmdldFRpbWUoKX1lbHNlKFwibnVtZXJpY1wiPT09ZS54YXhpcy50eXBlfHxcImNhdGVnb3J5XCI9PT1lLnhheGlzLnR5cGUmJiF0Lm5vTGFiZWxzUHJvdmlkZWQpJiYodC5taW5YPXQubWluWC0yLHQuaW5pdGlhbE1pblg9dC5taW5YLHQubWF4WD10Lm1heFgrMix0LmluaXRpYWxNYXhYPXQubWF4WCl9fX0se2tleTpcIl9nZXRNaW5YRGlmZlwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53Lmdsb2JhbHM7dC5pc1hOdW1lcmljJiZ0LnNlcmllc1guZm9yRWFjaCgoZnVuY3Rpb24oZSxpKXsxPT09ZS5sZW5ndGgmJmUucHVzaCh0LnNlcmllc1hbdC5tYXhWYWxzSW5BcnJheUluZGV4XVt0LnNlcmllc1hbdC5tYXhWYWxzSW5BcnJheUluZGV4XS5sZW5ndGgtMV0pO3ZhciBhPWUuc2xpY2UoKTthLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxhLmZvckVhY2goKGZ1bmN0aW9uKGUsaSl7aWYoaT4wKXt2YXIgcz1lLWFbaS0xXTtzPjAmJih0Lm1pblhEaWZmPU1hdGgubWluKHMsdC5taW5YRGlmZikpfX0pKSwxIT09dC5kYXRhUG9pbnRzJiZ0Lm1pblhEaWZmIT09TnVtYmVyLk1BWF9WQUxVRXx8KHQubWluWERpZmY9LjUpfSkpfX0se2tleTpcIl9zZXRTdGFja2VkTWluTWF4XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncuZ2xvYmFscyxlPVtdLGk9W107aWYodC5zZXJpZXMubGVuZ3RoKWZvcih2YXIgYT0wO2E8dC5zZXJpZXNbdC5tYXhWYWxzSW5BcnJheUluZGV4XS5sZW5ndGg7YSsrKWZvcih2YXIgcz0wLHI9MCxvPTA7bzx0LnNlcmllcy5sZW5ndGg7bysrKW51bGwhPT10LnNlcmllc1tvXVthXSYmeC5pc051bWJlcih0LnNlcmllc1tvXVthXSkmJih0LnNlcmllc1tvXVthXT4wP3M9cytwYXJzZUZsb2F0KHQuc2VyaWVzW29dW2FdKSsxZS00OnIrPXBhcnNlRmxvYXQodC5zZXJpZXNbb11bYV0pKSxvPT09dC5zZXJpZXMubGVuZ3RoLTEmJihlLnB1c2gocyksaS5wdXNoKHIpKTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0Lm1heFk9TWF0aC5tYXgodC5tYXhZLGVbbl0pLHQubWluWT1NYXRoLm1pbih0Lm1pblksaVtuXSl9fV0pLHR9KCkscT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUudzt2YXIgaT10aGlzLnc7dGhpcy54YXhpc0ZvbnRTaXplPWkuY29uZmlnLnhheGlzLmxhYmVscy5zdHlsZS5mb250U2l6ZSx0aGlzLmF4aXNGb250RmFtaWx5PWkuY29uZmlnLnhheGlzLmxhYmVscy5zdHlsZS5mb250RmFtaWx5LHRoaXMueGF4aXNGb3JlQ29sb3JzPWkuY29uZmlnLnhheGlzLmxhYmVscy5zdHlsZS5jb2xvcnMsdGhpcy5pc0NhdGVnb3J5QmFySG9yaXpvbnRhbD1cImJhclwiPT09aS5jb25maWcuY2hhcnQudHlwZSYmaS5jb25maWcucGxvdE9wdGlvbnMuYmFyLmhvcml6b250YWwsdGhpcy54QXhpc29mZlg9MCxcImJvdHRvbVwiPT09aS5jb25maWcueGF4aXMucG9zaXRpb24mJih0aGlzLnhBeGlzb2ZmWD1pLmdsb2JhbHMuZ3JpZEhlaWdodCksdGhpcy5kcmF3bkxhYmVscz1bXSx0aGlzLmF4ZXNVdGlscz1uZXcgQihlKX1yZXR1cm4gcih0LFt7a2V5OlwiZHJhd1lheGlzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMudyxhPW5ldyBtKHRoaXMuY3R4KSxzPWkuY29uZmlnLnlheGlzW3RdLmxhYmVscy5zdHlsZSxyPXMuZm9udFNpemUsbz1zLmZvbnRGYW1pbHksbj1zLmZvbnRXZWlnaHQsbD1hLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMteWF4aXNcIixyZWw6dCx0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIraS5nbG9iYWxzLnRyYW5zbGF0ZVlBeGlzWFt0XStcIiwgMClcIn0pO2lmKHRoaXMuYXhlc1V0aWxzLmlzWUF4aXNIaWRkZW4odCkpcmV0dXJuIGw7dmFyIGg9YS5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLXlheGlzLXRleHRzLWdcIn0pO2wuYWRkKGgpO3ZhciBjPWkuZ2xvYmFscy55QXhpc1NjYWxlW3RdLnJlc3VsdC5sZW5ndGgtMSxkPWkuZ2xvYmFscy5ncmlkSGVpZ2h0L2MsZz1pLmdsb2JhbHMudHJhbnNsYXRlWSx1PWkuZ2xvYmFscy55TGFiZWxGb3JtYXR0ZXJzW3RdLGY9aS5nbG9iYWxzLnlBeGlzU2NhbGVbdF0ucmVzdWx0LnNsaWNlKCk7Zj10aGlzLmF4ZXNVdGlscy5jaGVja0ZvclJldmVyc2VkTGFiZWxzKHQsZik7dmFyIHA9XCJcIjtpZihpLmNvbmZpZy55YXhpc1t0XS5sYWJlbHMuc2hvdylmb3IodmFyIHg9ZnVuY3Rpb24obCl7dmFyIHg9ZltsXTt4PXUoeCxsLGkpO3ZhciBiPWkuY29uZmlnLnlheGlzW3RdLmxhYmVscy5wYWRkaW5nO2kuY29uZmlnLnlheGlzW3RdLm9wcG9zaXRlJiYwIT09aS5jb25maWcueWF4aXMubGVuZ3RoJiYoYio9LTEpO3ZhciB2PWUuYXhlc1V0aWxzLmdldFlBeGlzRm9yZUNvbG9yKHMuY29sb3JzLHQpLG09YS5kcmF3VGV4dCh7eDpiLHk6ZytjLzEwK2kuY29uZmlnLnlheGlzW3RdLmxhYmVscy5vZmZzZXRZKzEsdGV4dDp4LHRleHRBbmNob3I6aS5jb25maWcueWF4aXNbdF0ub3Bwb3NpdGU/XCJzdGFydFwiOlwiZW5kXCIsZm9udFNpemU6cixmb250RmFtaWx5Om8sZm9udFdlaWdodDpuLG1heFdpZHRoOmkuY29uZmlnLnlheGlzW3RdLmxhYmVscy5tYXhXaWR0aCxmb3JlQ29sb3I6QXJyYXkuaXNBcnJheSh2KT92W2xdOnYsaXNQbGFpblRleHQ6ITEsY3NzQ2xhc3M6XCJhcGV4Y2hhcnRzLXlheGlzLWxhYmVsIFwiK3MuY3NzQ2xhc3N9KTtsPT09YyYmKHA9bSksaC5hZGQobSk7dmFyIHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGkuZ2xvYmFscy5TVkdOUyxcInRpdGxlXCIpO2lmKHkudGV4dENvbnRlbnQ9QXJyYXkuaXNBcnJheSh4KT94LmpvaW4oXCIgXCIpOngsbS5ub2RlLmFwcGVuZENoaWxkKHkpLDAhPT1pLmNvbmZpZy55YXhpc1t0XS5sYWJlbHMucm90YXRlKXt2YXIgdz1hLnJvdGF0ZUFyb3VuZENlbnRlcihwLm5vZGUpLGs9YS5yb3RhdGVBcm91bmRDZW50ZXIobS5ub2RlKTttLm5vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsXCJyb3RhdGUoXCIuY29uY2F0KGkuY29uZmlnLnlheGlzW3RdLmxhYmVscy5yb3RhdGUsXCIgXCIpLmNvbmNhdCh3LngsXCIgXCIpLmNvbmNhdChrLnksXCIpXCIpKX1nKz1kfSxiPWM7Yj49MDtiLS0peChiKTtpZih2b2lkIDAhPT1pLmNvbmZpZy55YXhpc1t0XS50aXRsZS50ZXh0KXt2YXIgdj1hLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMteWF4aXMtdGl0bGVcIn0pLHk9MDtpLmNvbmZpZy55YXhpc1t0XS5vcHBvc2l0ZSYmKHk9aS5nbG9iYWxzLnRyYW5zbGF0ZVlBeGlzWFt0XSk7dmFyIHc9YS5kcmF3VGV4dCh7eDp5LHk6aS5nbG9iYWxzLmdyaWRIZWlnaHQvMitpLmdsb2JhbHMudHJhbnNsYXRlWStpLmNvbmZpZy55YXhpc1t0XS50aXRsZS5vZmZzZXRZLHRleHQ6aS5jb25maWcueWF4aXNbdF0udGl0bGUudGV4dCx0ZXh0QW5jaG9yOlwiZW5kXCIsZm9yZUNvbG9yOmkuY29uZmlnLnlheGlzW3RdLnRpdGxlLnN0eWxlLmNvbG9yLGZvbnRTaXplOmkuY29uZmlnLnlheGlzW3RdLnRpdGxlLnN0eWxlLmZvbnRTaXplLGZvbnRXZWlnaHQ6aS5jb25maWcueWF4aXNbdF0udGl0bGUuc3R5bGUuZm9udFdlaWdodCxmb250RmFtaWx5OmkuY29uZmlnLnlheGlzW3RdLnRpdGxlLnN0eWxlLmZvbnRGYW1pbHksY3NzQ2xhc3M6XCJhcGV4Y2hhcnRzLXlheGlzLXRpdGxlLXRleHQgXCIraS5jb25maWcueWF4aXNbdF0udGl0bGUuc3R5bGUuY3NzQ2xhc3N9KTt2LmFkZCh3KSxsLmFkZCh2KX12YXIgaz1pLmNvbmZpZy55YXhpc1t0XS5heGlzQm9yZGVyLEE9MzEray5vZmZzZXRYO2lmKGkuY29uZmlnLnlheGlzW3RdLm9wcG9zaXRlJiYoQT0tMzEtay5vZmZzZXRYKSxrLnNob3cpe3ZhciBTPWEuZHJhd0xpbmUoQSxpLmdsb2JhbHMudHJhbnNsYXRlWStrLm9mZnNldFktMixBLGkuZ2xvYmFscy5ncmlkSGVpZ2h0K2kuZ2xvYmFscy50cmFuc2xhdGVZK2sub2Zmc2V0WSsyLGsuY29sb3IsMCxrLndpZHRoKTtsLmFkZChTKX1yZXR1cm4gaS5jb25maWcueWF4aXNbdF0uYXhpc1RpY2tzLnNob3cmJnRoaXMuYXhlc1V0aWxzLmRyYXdZQXhpc1RpY2tzKEEsYyxrLGkuY29uZmlnLnlheGlzW3RdLmF4aXNUaWNrcyx0LGQsbCksbH19LHtrZXk6XCJkcmF3WWF4aXNJbnZlcnNlZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudyxpPW5ldyBtKHRoaXMuY3R4KSxhPWkuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy14YXhpcyBhcGV4Y2hhcnRzLXlheGlzLWludmVyc2VkXCJ9KSxzPWkuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy14YXhpcy10ZXh0cy1nXCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiLmNvbmNhdChlLmdsb2JhbHMudHJhbnNsYXRlWEF4aXNYLFwiLCBcIikuY29uY2F0KGUuZ2xvYmFscy50cmFuc2xhdGVYQXhpc1ksXCIpXCIpfSk7YS5hZGQocyk7dmFyIHI9ZS5nbG9iYWxzLnlBeGlzU2NhbGVbdF0ucmVzdWx0Lmxlbmd0aC0xLG89ZS5nbG9iYWxzLmdyaWRXaWR0aC9yKy4xLG49bytlLmNvbmZpZy54YXhpcy5sYWJlbHMub2Zmc2V0WCxsPWUuZ2xvYmFscy54TGFiZWxGb3JtYXR0ZXIsaD1lLmdsb2JhbHMueUF4aXNTY2FsZVt0XS5yZXN1bHQuc2xpY2UoKSxjPWUuZ2xvYmFscy50aW1lc2NhbGVMYWJlbHM7Yy5sZW5ndGg+MCYmKHRoaXMueGF4aXNMYWJlbHM9Yy5zbGljZSgpLHI9KGg9Yy5zbGljZSgpKS5sZW5ndGgpLGg9dGhpcy5heGVzVXRpbHMuY2hlY2tGb3JSZXZlcnNlZExhYmVscyh0LGgpO3ZhciBkPWMubGVuZ3RoO2lmKGUuY29uZmlnLnhheGlzLmxhYmVscy5zaG93KWZvcih2YXIgZz1kPzA6cjtkP2c8ZDpnPj0wO2Q/ZysrOmctLSl7dmFyIHU9aFtnXTt1PWwodSxnLGUpO3ZhciBmPWUuZ2xvYmFscy5ncmlkV2lkdGgrZS5nbG9iYWxzLnBhZEhvcml6b250YWwtKG4tbytlLmNvbmZpZy54YXhpcy5sYWJlbHMub2Zmc2V0WCk7aWYoYy5sZW5ndGgpe3ZhciBwPXRoaXMuYXhlc1V0aWxzLmdldExhYmVsKGgsYyxmLGcsdGhpcy5kcmF3bkxhYmVscyx0aGlzLnhheGlzRm9udFNpemUpO2Y9cC54LHU9cC50ZXh0LHRoaXMuZHJhd25MYWJlbHMucHVzaChwLnRleHQpLDA9PT1nJiZlLmdsb2JhbHMuc2tpcEZpcnN0VGltZWxpbmVsYWJlbCYmKHU9XCJcIiksZz09PWgubGVuZ3RoLTEmJmUuZ2xvYmFscy5za2lwTGFzdFRpbWVsaW5lbGFiZWwmJih1PVwiXCIpfXZhciB4PWkuZHJhd1RleHQoe3g6Zix5OnRoaXMueEF4aXNvZmZYK2UuY29uZmlnLnhheGlzLmxhYmVscy5vZmZzZXRZKzMwLShcInRvcFwiPT09ZS5jb25maWcueGF4aXMucG9zaXRpb24/ZS5nbG9iYWxzLnhBeGlzSGVpZ2h0K2UuY29uZmlnLnhheGlzLmF4aXNUaWNrcy5oZWlnaHQtMjowKSx0ZXh0OnUsdGV4dEFuY2hvcjpcIm1pZGRsZVwiLGZvcmVDb2xvcjpBcnJheS5pc0FycmF5KHRoaXMueGF4aXNGb3JlQ29sb3JzKT90aGlzLnhheGlzRm9yZUNvbG9yc1t0XTp0aGlzLnhheGlzRm9yZUNvbG9ycyxmb250U2l6ZTp0aGlzLnhheGlzRm9udFNpemUsZm9udEZhbWlseTp0aGlzLnhheGlzRm9udEZhbWlseSxmb250V2VpZ2h0OmUuY29uZmlnLnhheGlzLmxhYmVscy5zdHlsZS5mb250V2VpZ2h0LGlzUGxhaW5UZXh0OiExLGNzc0NsYXNzOlwiYXBleGNoYXJ0cy14YXhpcy1sYWJlbCBcIitlLmNvbmZpZy54YXhpcy5sYWJlbHMuc3R5bGUuY3NzQ2xhc3N9KTtzLmFkZCh4KSx4LnRzcGFuKHUpO3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLmdsb2JhbHMuU1ZHTlMsXCJ0aXRsZVwiKTtiLnRleHRDb250ZW50PXUseC5ub2RlLmFwcGVuZENoaWxkKGIpLG4rPW99cmV0dXJuIHRoaXMuaW52ZXJzZWRZQXhpc1RpdGxlVGV4dChhKSx0aGlzLmludmVyc2VkWUF4aXNCb3JkZXIoYSksYX19LHtrZXk6XCJpbnZlcnNlZFlBeGlzQm9yZGVyXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53LGk9bmV3IG0odGhpcy5jdHgpLGE9ZS5jb25maWcueGF4aXMuYXhpc0JvcmRlcjtpZihhLnNob3cpe3ZhciBzPTA7XCJiYXJcIj09PWUuY29uZmlnLmNoYXJ0LnR5cGUmJmUuZ2xvYmFscy5pc1hOdW1lcmljJiYocy09MTUpO3ZhciByPWkuZHJhd0xpbmUoZS5nbG9iYWxzLnBhZEhvcml6b250YWwrcythLm9mZnNldFgsdGhpcy54QXhpc29mZlgsZS5nbG9iYWxzLmdyaWRXaWR0aCx0aGlzLnhBeGlzb2ZmWCxhLmNvbG9yLDAsYS5oZWlnaHQpO3QuYWRkKHIpfX19LHtrZXk6XCJpbnZlcnNlZFlBeGlzVGl0bGVUZXh0XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53LGk9bmV3IG0odGhpcy5jdHgpO2lmKHZvaWQgMCE9PWUuY29uZmlnLnhheGlzLnRpdGxlLnRleHQpe3ZhciBhPWkuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy14YXhpcy10aXRsZSBhcGV4Y2hhcnRzLXlheGlzLXRpdGxlLWludmVyc2VkXCJ9KSxzPWkuZHJhd1RleHQoe3g6ZS5nbG9iYWxzLmdyaWRXaWR0aC8yK2UuY29uZmlnLnhheGlzLnRpdGxlLm9mZnNldFgseTp0aGlzLnhBeGlzb2ZmWCtwYXJzZUZsb2F0KHRoaXMueGF4aXNGb250U2l6ZSkrcGFyc2VGbG9hdChlLmNvbmZpZy54YXhpcy50aXRsZS5zdHlsZS5mb250U2l6ZSkrZS5jb25maWcueGF4aXMudGl0bGUub2Zmc2V0WSsyMCx0ZXh0OmUuY29uZmlnLnhheGlzLnRpdGxlLnRleHQsdGV4dEFuY2hvcjpcIm1pZGRsZVwiLGZvbnRTaXplOmUuY29uZmlnLnhheGlzLnRpdGxlLnN0eWxlLmZvbnRTaXplLGZvbnRGYW1pbHk6ZS5jb25maWcueGF4aXMudGl0bGUuc3R5bGUuZm9udEZhbWlseSxmb250V2VpZ2h0OmUuY29uZmlnLnhheGlzLnRpdGxlLnN0eWxlLmZvbnRXZWlnaHQsZm9yZUNvbG9yOmUuY29uZmlnLnhheGlzLnRpdGxlLnN0eWxlLmNvbG9yLGNzc0NsYXNzOlwiYXBleGNoYXJ0cy14YXhpcy10aXRsZS10ZXh0IFwiK2UuY29uZmlnLnhheGlzLnRpdGxlLnN0eWxlLmNzc0NsYXNzfSk7YS5hZGQocyksdC5hZGQoYSl9fX0se2tleTpcInlBeGlzVGl0bGVSb3RhdGVcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudyxhPW5ldyBtKHRoaXMuY3R4KSxzPXt3aWR0aDowLGhlaWdodDowfSxyPXt3aWR0aDowLGhlaWdodDowfSxvPWkuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIgLmFwZXhjaGFydHMteWF4aXNbcmVsPSdcIi5jb25jYXQodCxcIiddIC5hcGV4Y2hhcnRzLXlheGlzLXRleHRzLWdcIikpO251bGwhPT1vJiYocz1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTt2YXIgbj1pLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMteWF4aXNbcmVsPSdcIi5jb25jYXQodCxcIiddIC5hcGV4Y2hhcnRzLXlheGlzLXRpdGxlIHRleHRcIikpO2lmKG51bGwhPT1uJiYocj1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxudWxsIT09bil7dmFyIGw9dGhpcy54UGFkZGluZ0ZvcllBeGlzVGl0bGUodCxzLHIsZSk7bi5zZXRBdHRyaWJ1dGUoXCJ4XCIsbC54UG9zLShlPzEwOjApKX1pZihudWxsIT09bil7dmFyIGg9YS5yb3RhdGVBcm91bmRDZW50ZXIobik7bi5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIixcInJvdGF0ZShcIi5jb25jYXQoZT8tMSppLmNvbmZpZy55YXhpc1t0XS50aXRsZS5yb3RhdGU6aS5jb25maWcueWF4aXNbdF0udGl0bGUucm90YXRlLFwiIFwiKS5jb25jYXQoaC54LFwiIFwiKS5jb25jYXQoaC55LFwiKVwiKSl9fX0se2tleTpcInhQYWRkaW5nRm9yWUF4aXNUaXRsZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBzPXRoaXMudyxyPTAsbz0wLG49MTA7cmV0dXJuIHZvaWQgMD09PXMuY29uZmlnLnlheGlzW3RdLnRpdGxlLnRleHR8fHQ8MD97eFBvczpvLHBhZGQ6MH06KGE/KG89ZS53aWR0aCtzLmNvbmZpZy55YXhpc1t0XS50aXRsZS5vZmZzZXRYK2kud2lkdGgvMituLzIsMD09PShyKz0xKSYmKG8tPW4vMikpOihvPS0xKmUud2lkdGgrcy5jb25maWcueWF4aXNbdF0udGl0bGUub2Zmc2V0WCtuLzIraS53aWR0aC8yLHMuZ2xvYmFscy5pc0Jhckhvcml6b250YWwmJihuPTI1LG89LTEqZS53aWR0aC1zLmNvbmZpZy55YXhpc1t0XS50aXRsZS5vZmZzZXRYLW4pKSx7eFBvczpvLHBhZGQ6bn0pfX0se2tleTpcInNldFlBeGlzWFBvc2l0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLncsYT0wLHM9MCxyPTE4LG89MTtpLmNvbmZpZy55YXhpcy5sZW5ndGg+MSYmKHRoaXMubXVsdGlwbGVZcz0hMCksaS5jb25maWcueWF4aXMubWFwKChmdW5jdGlvbihuLGwpe3ZhciBoPWkuZ2xvYmFscy5pZ25vcmVZQXhpc0luZGV4ZXMuaW5kZXhPZihsKT4tMXx8IW4uc2hvd3x8bi5mbG9hdGluZ3x8MD09PXRbbF0ud2lkdGgsYz10W2xdLndpZHRoK2VbbF0ud2lkdGg7bi5vcHBvc2l0ZT9pLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsPyhzPWkuZ2xvYmFscy5ncmlkV2lkdGgraS5nbG9iYWxzLnRyYW5zbGF0ZVgtMSxpLmdsb2JhbHMudHJhbnNsYXRlWUF4aXNYW2xdPXMtbi5sYWJlbHMub2Zmc2V0WCk6KHM9aS5nbG9iYWxzLmdyaWRXaWR0aCtpLmdsb2JhbHMudHJhbnNsYXRlWCtvLGh8fChvPW8rYysyMCksaS5nbG9iYWxzLnRyYW5zbGF0ZVlBeGlzWFtsXT1zLW4ubGFiZWxzLm9mZnNldFgrMjApOihhPWkuZ2xvYmFscy50cmFuc2xhdGVYLXIsaHx8KHI9citjKzIwKSxpLmdsb2JhbHMudHJhbnNsYXRlWUF4aXNYW2xdPWErbi5sYWJlbHMub2Zmc2V0WCl9KSl9fSx7a2V5Olwic2V0WUF4aXNUZXh0QWxpZ25tZW50c1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9dC5nbG9iYWxzLmRvbS5iYXNlRWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFwZXhjaGFydHMteWF4aXNcIik7KGU9eC5saXN0VG9BcnJheShlKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSxpKXt2YXIgYT10LmNvbmZpZy55YXhpc1tpXTtpZihhJiZ2b2lkIDAhPT1hLmxhYmVscy5hbGlnbil7dmFyIHM9dC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLXlheGlzW3JlbD0nXCIuY29uY2F0KGksXCInXSAuYXBleGNoYXJ0cy15YXhpcy10ZXh0cy1nXCIpKSxyPXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy15YXhpc1tyZWw9J1wiLmNvbmNhdChpLFwiJ10gLmFwZXhjaGFydHMteWF4aXMtbGFiZWxcIikpO3I9eC5saXN0VG9BcnJheShyKTt2YXIgbz1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1wibGVmdFwiPT09YS5sYWJlbHMuYWxpZ24/KHIuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNldEF0dHJpYnV0ZShcInRleHQtYW5jaG9yXCIsXCJzdGFydFwiKX0pKSxhLm9wcG9zaXRlfHxzLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKC1cIi5jb25jYXQoby53aWR0aCxcIiwgMClcIikpKTpcImNlbnRlclwiPT09YS5sYWJlbHMuYWxpZ24/KHIuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNldEF0dHJpYnV0ZShcInRleHQtYW5jaG9yXCIsXCJtaWRkbGVcIil9KSkscy5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZShcIi5jb25jYXQoby53aWR0aC8yKihhLm9wcG9zaXRlPzE6LTEpLFwiLCAwKVwiKSkpOlwicmlnaHRcIj09PWEubGFiZWxzLmFsaWduJiYoci5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Quc2V0QXR0cmlidXRlKFwidGV4dC1hbmNob3JcIixcImVuZFwiKX0pKSxhLm9wcG9zaXRlJiZzLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlKFwiLmNvbmNhdChvLndpZHRoLFwiLCAwKVwiKSkpfX0pKX19XSksdH0oKSxaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53LHRoaXMuZG9jdW1lbnRFdmVudD14LmJpbmQodGhpcy5kb2N1bWVudEV2ZW50LHRoaXMpfXJldHVybiByKHQsW3trZXk6XCJhZGRFdmVudExpc3RlbmVyXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnc7aS5nbG9iYWxzLmV2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0KT9pLmdsb2JhbHMuZXZlbnRzW3RdLnB1c2goZSk6aS5nbG9iYWxzLmV2ZW50c1t0XT1bZV19fSx7a2V5OlwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53O2lmKGkuZ2xvYmFscy5ldmVudHMuaGFzT3duUHJvcGVydHkodCkpe3ZhciBhPWkuZ2xvYmFscy5ldmVudHNbdF0uaW5kZXhPZihlKTstMSE9PWEmJmkuZ2xvYmFscy5ldmVudHNbdF0uc3BsaWNlKGEsMSl9fX0se2tleTpcImZpcmVFdmVudFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53O2lmKGkuZ2xvYmFscy5ldmVudHMuaGFzT3duUHJvcGVydHkodCkpe2UmJmUubGVuZ3RofHwoZT1bXSk7Zm9yKHZhciBhPWkuZ2xvYmFscy5ldmVudHNbdF0scz1hLmxlbmd0aCxyPTA7cjxzO3IrKylhW3JdLmFwcGx5KG51bGwsZSl9fX0se2tleTpcInNldHVwRXZlbnRIYW5kbGVyc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMudyxpPXRoaXMuY3R4LGE9ZS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihlLmdsb2JhbHMuY2hhcnRDbGFzcyk7dGhpcy5jdHguZXZlbnRMaXN0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2EuYWRkRXZlbnRMaXN0ZW5lcih0LChmdW5jdGlvbih0KXt2YXIgYT1PYmplY3QuYXNzaWduKHt9LGUse3Nlcmllc0luZGV4OmUuZ2xvYmFscy5jYXB0dXJlZFNlcmllc0luZGV4LGRhdGFQb2ludEluZGV4OmUuZ2xvYmFscy5jYXB0dXJlZERhdGFQb2ludEluZGV4fSk7XCJtb3VzZW1vdmVcIj09PXQudHlwZXx8XCJ0b3VjaG1vdmVcIj09PXQudHlwZT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbmZpZy5jaGFydC5ldmVudHMubW91c2VNb3ZlJiZlLmNvbmZpZy5jaGFydC5ldmVudHMubW91c2VNb3ZlKHQsaSxhKTpcIm1vdXNlbGVhdmVcIj09PXQudHlwZXx8XCJ0b3VjaGxlYXZlXCI9PT10LnR5cGU/XCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25maWcuY2hhcnQuZXZlbnRzLm1vdXNlTGVhdmUmJmUuY29uZmlnLmNoYXJ0LmV2ZW50cy5tb3VzZUxlYXZlKHQsaSxhKTooXCJtb3VzZXVwXCI9PT10LnR5cGUmJjE9PT10LndoaWNofHxcInRvdWNoZW5kXCI9PT10LnR5cGUpJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25maWcuY2hhcnQuZXZlbnRzLmNsaWNrJiZlLmNvbmZpZy5jaGFydC5ldmVudHMuY2xpY2sodCxpLGEpLGkuY3R4LmV2ZW50cy5maXJlRXZlbnQoXCJjbGlja1wiLFt0LGksYV0pKX0pLHtjYXB0dXJlOiExLHBhc3NpdmU6ITB9KX0pKSx0aGlzLmN0eC5ldmVudExpc3QuZm9yRWFjaCgoZnVuY3Rpb24oaSl7ZS5nbG9iYWxzLmRvbS5iYXNlRWwuYWRkRXZlbnRMaXN0ZW5lcihpLHQuZG9jdW1lbnRFdmVudCx7cGFzc2l2ZTohMH0pfSkpLHRoaXMuY3R4LmNvcmUuc2V0dXBCcnVzaEhhbmRsZXIoKX19LHtrZXk6XCJkb2N1bWVudEV2ZW50XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53LGk9dC50YXJnZXQuY2xhc3NOYW1lO2lmKFwiY2xpY2tcIj09PXQudHlwZSl7dmFyIGE9ZS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLW1lbnVcIik7YSYmYS5jbGFzc0xpc3QuY29udGFpbnMoXCJhcGV4Y2hhcnRzLW1lbnUtb3BlblwiKSYmXCJhcGV4Y2hhcnRzLW1lbnUtaWNvblwiIT09aSYmYS5jbGFzc0xpc3QucmVtb3ZlKFwiYXBleGNoYXJ0cy1tZW51LW9wZW5cIil9ZS5nbG9iYWxzLmNsaWVudFg9XCJ0b3VjaG1vdmVcIj09PXQudHlwZT90LnRvdWNoZXNbMF0uY2xpZW50WDp0LmNsaWVudFgsZS5nbG9iYWxzLmNsaWVudFk9XCJ0b3VjaG1vdmVcIj09PXQudHlwZT90LnRvdWNoZXNbMF0uY2xpZW50WTp0LmNsaWVudFl9fV0pLHR9KCksJD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUud31yZXR1cm4gcih0LFt7a2V5Olwic2V0Q3VycmVudExvY2FsZVZhbHVlc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudy5jb25maWcuY2hhcnQubG9jYWxlczt3aW5kb3cuQXBleC5jaGFydCYmd2luZG93LkFwZXguY2hhcnQubG9jYWxlcyYmd2luZG93LkFwZXguY2hhcnQubG9jYWxlcy5sZW5ndGg+MCYmKGU9dGhpcy53LmNvbmZpZy5jaGFydC5sb2NhbGVzLmNvbmNhdCh3aW5kb3cuQXBleC5jaGFydC5sb2NhbGVzKSk7dmFyIGk9ZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10fSkpWzBdO2lmKCFpKXRocm93IG5ldyBFcnJvcihcIldyb25nIGxvY2FsZSBuYW1lIHByb3ZpZGVkLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBzZXQgdGhlIGNvcnJlY3QgbG9jYWxlIG5hbWUgaW4gb3B0aW9uc1wiKTt2YXIgYT14LmV4dGVuZChDLGkpO3RoaXMudy5nbG9iYWxzLmxvY2FsZT1hLm9wdGlvbnN9fV0pLHR9KCksSj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUud31yZXR1cm4gcih0LFt7a2V5OlwiZHJhd0F4aXNcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpLGEscz10aGlzLncuZ2xvYmFscyxyPXRoaXMudy5jb25maWcsbz1uZXcgRyh0aGlzLmN0eCksbj1uZXcgcSh0aGlzLmN0eCk7cy5heGlzQ2hhcnRzJiZcInJhZGFyXCIhPT10JiYocy5pc0Jhckhvcml6b250YWw/KGE9bi5kcmF3WWF4aXNJbnZlcnNlZCgwKSxpPW8uZHJhd1hheGlzSW52ZXJzZWQoMCkscy5kb20uZWxHcmFwaGljYWwuYWRkKGkpLHMuZG9tLmVsR3JhcGhpY2FsLmFkZChhKSk6KGk9by5kcmF3WGF4aXMoKSxzLmRvbS5lbEdyYXBoaWNhbC5hZGQoaSksci55YXhpcy5tYXAoKGZ1bmN0aW9uKHQsZSl7LTE9PT1zLmlnbm9yZVlBeGlzSW5kZXhlcy5pbmRleE9mKGUpJiYoYT1uLmRyYXdZYXhpcyhlKSxzLmRvbS5QYXBlci5hZGQoYSkpfSkpKSl9fV0pLHR9KCksUT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUud31yZXR1cm4gcih0LFt7a2V5OlwiZHJhd1hDcm9zc2hhaXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT1uZXcgbSh0aGlzLmN0eCksaT1uZXcgdih0aGlzLmN0eCksYT10LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLmZpbGwuZ3JhZGllbnQscz10LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLmRyb3BTaGFkb3cscj10LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLmZpbGwudHlwZSxvPWEuY29sb3JGcm9tLG49YS5jb2xvclRvLGw9YS5vcGFjaXR5RnJvbSxoPWEub3BhY2l0eVRvLGM9YS5zdG9wcyxkPXMuZW5hYmxlZCxnPXMubGVmdCx1PXMudG9wLGY9cy5ibHVyLHA9cy5jb2xvcixiPXMub3BhY2l0eSx5PXQuY29uZmlnLnhheGlzLmNyb3NzaGFpcnMuZmlsbC5jb2xvcjtpZih0LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLnNob3cpe1wiZ3JhZGllbnRcIj09PXImJih5PWUuZHJhd0dyYWRpZW50KFwidmVydGljYWxcIixvLG4sbCxoLG51bGwsYyxudWxsKSk7dmFyIHc9ZS5kcmF3UmVjdCgpOzE9PT10LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLndpZHRoJiYodz1lLmRyYXdMaW5lKCkpO3ZhciBrPXQuZ2xvYmFscy5ncmlkSGVpZ2h0OygheC5pc051bWJlcihrKXx8azwwKSYmKGs9MCk7dmFyIEE9dC5jb25maWcueGF4aXMuY3Jvc3NoYWlycy53aWR0aDsoIXguaXNOdW1iZXIoQSl8fEE8MCkmJihBPTApLHcuYXR0cih7Y2xhc3M6XCJhcGV4Y2hhcnRzLXhjcm9zc2hhaXJzXCIseDowLHk6MCx5MjprLHdpZHRoOkEsaGVpZ2h0OmssZmlsbDp5LGZpbHRlcjpcIm5vbmVcIixcImZpbGwtb3BhY2l0eVwiOnQuY29uZmlnLnhheGlzLmNyb3NzaGFpcnMub3BhY2l0eSxzdHJva2U6dC5jb25maWcueGF4aXMuY3Jvc3NoYWlycy5zdHJva2UuY29sb3IsXCJzdHJva2Utd2lkdGhcIjp0LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLnN0cm9rZS53aWR0aCxcInN0cm9rZS1kYXNoYXJyYXlcIjp0LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLnN0cm9rZS5kYXNoQXJyYXl9KSxkJiYodz1pLmRyb3BTaGFkb3codyx7bGVmdDpnLHRvcDp1LGJsdXI6Zixjb2xvcjpwLG9wYWNpdHk6Yn0pKSx0Lmdsb2JhbHMuZG9tLmVsR3JhcGhpY2FsLmFkZCh3KX19fSx7a2V5OlwiZHJhd1lDcm9zc2hhaXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT1uZXcgbSh0aGlzLmN0eCksaT10LmNvbmZpZy55YXhpc1swXS5jcm9zc2hhaXJzLGE9dC5nbG9iYWxzLmJhclBhZEZvck51bWVyaWNBeGlzO2lmKHQuY29uZmlnLnlheGlzWzBdLmNyb3NzaGFpcnMuc2hvdyl7dmFyIHM9ZS5kcmF3TGluZSgtYSwwLHQuZ2xvYmFscy5ncmlkV2lkdGgrYSwwLGkuc3Ryb2tlLmNvbG9yLGkuc3Ryb2tlLmRhc2hBcnJheSxpLnN0cm9rZS53aWR0aCk7cy5hdHRyKHtjbGFzczpcImFwZXhjaGFydHMteWNyb3NzaGFpcnNcIn0pLHQuZ2xvYmFscy5kb20uZWxHcmFwaGljYWwuYWRkKHMpfXZhciByPWUuZHJhd0xpbmUoLWEsMCx0Lmdsb2JhbHMuZ3JpZFdpZHRoK2EsMCxpLnN0cm9rZS5jb2xvciwwLDApO3IuYXR0cih7Y2xhc3M6XCJhcGV4Y2hhcnRzLXljcm9zc2hhaXJzLWhpZGRlblwifSksdC5nbG9iYWxzLmRvbS5lbEdyYXBoaWNhbC5hZGQocil9fV0pLHR9KCksSz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUud31yZXR1cm4gcih0LFt7a2V5OlwiY2hlY2tSZXNwb25zaXZlQ29uZmlnXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMudyxhPWkuY29uZmlnO2lmKDAhPT1hLnJlc3BvbnNpdmUubGVuZ3RoKXt2YXIgcz1hLnJlc3BvbnNpdmUuc2xpY2UoKTtzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYnJlYWtwb2ludD5lLmJyZWFrcG9pbnQ/MTplLmJyZWFrcG9pbnQ+dC5icmVha3BvaW50Py0xOjB9KSkucmV2ZXJzZSgpO3ZhciByPW5ldyB6KHt9KSxvPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LGE9c1swXS5icmVha3BvaW50LG89d2luZG93LmlubmVyV2lkdGg+MD93aW5kb3cuaW5uZXJXaWR0aDpzY3JlZW4ud2lkdGg7aWYobz5hKXt2YXIgbj15LmV4dGVuZEFycmF5UHJvcHMocixpLmdsb2JhbHMuaW5pdGlhbENvbmZpZyxpKTt0PXguZXh0ZW5kKG4sdCksdD14LmV4dGVuZChpLmNvbmZpZyx0KSxlLm92ZXJyaWRlUmVzcG9uc2l2ZU9wdGlvbnModCl9ZWxzZSBmb3IodmFyIGw9MDtsPHMubGVuZ3RoO2wrKylvPHNbbF0uYnJlYWtwb2ludCYmKHQ9eS5leHRlbmRBcnJheVByb3BzKHIsc1tsXS5vcHRpb25zLGkpLHQ9eC5leHRlbmQoaS5jb25maWcsdCksZS5vdmVycmlkZVJlc3BvbnNpdmVPcHRpb25zKHQpKX07aWYodCl7dmFyIG49eS5leHRlbmRBcnJheVByb3BzKHIsdCxpKTtuPXguZXh0ZW5kKGkuY29uZmlnLG4pLG8obj14LmV4dGVuZChuLHQpKX1lbHNlIG8oe30pfX19LHtrZXk6XCJvdmVycmlkZVJlc3BvbnNpdmVPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHoodCkuaW5pdCh7cmVzcG9uc2l2ZU92ZXJyaWRlOiEwfSk7dGhpcy53LmNvbmZpZz1lfX1dKSx0fSgpLHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLmNvbG9ycz1bXSx0aGlzLnc9ZS53O3ZhciBpPXRoaXMudzt0aGlzLmlzQ29sb3JGbj0hMSx0aGlzLmlzSGVhdG1hcERpc3RyaWJ1dGVkPVwidHJlZW1hcFwiPT09aS5jb25maWcuY2hhcnQudHlwZSYmaS5jb25maWcucGxvdE9wdGlvbnMudHJlZW1hcC5kaXN0cmlidXRlZHx8XCJoZWF0bWFwXCI9PT1pLmNvbmZpZy5jaGFydC50eXBlJiZpLmNvbmZpZy5wbG90T3B0aW9ucy5oZWF0bWFwLmRpc3RyaWJ1dGVkLHRoaXMuaXNCYXJEaXN0cmlidXRlZD1pLmNvbmZpZy5wbG90T3B0aW9ucy5iYXIuZGlzdHJpYnV0ZWQmJihcImJhclwiPT09aS5jb25maWcuY2hhcnQudHlwZXx8XCJyYW5nZUJhclwiPT09aS5jb25maWcuY2hhcnQudHlwZSl9cmV0dXJuIHIodCxbe2tleTpcImluaXRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2V0RGVmYXVsdENvbG9ycygpfX0se2tleTpcInNldERlZmF1bHRDb2xvcnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLncsaT1uZXcgeDtpZihlLmdsb2JhbHMuZG9tLmVsV3JhcC5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy10aGVtZS1cIi5jb25jYXQoZS5jb25maWcudGhlbWUubW9kZSkpLHZvaWQgMD09PWUuY29uZmlnLmNvbG9ycz9lLmdsb2JhbHMuY29sb3JzPXRoaXMucHJlZGVmaW5lZCgpOihlLmdsb2JhbHMuY29sb3JzPWUuY29uZmlnLmNvbG9ycyxBcnJheS5pc0FycmF5KGUuY29uZmlnLmNvbG9ycykmJmUuY29uZmlnLmNvbG9ycy5sZW5ndGg+MCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25maWcuY29sb3JzWzBdJiYoZS5nbG9iYWxzLmNvbG9ycz1lLmNvbmZpZy5zZXJpZXMubWFwKChmdW5jdGlvbihpLGEpe3ZhciBzPWUuY29uZmlnLmNvbG9yc1thXTtyZXR1cm4gc3x8KHM9ZS5jb25maWcuY29sb3JzWzBdKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBzPyh0LmlzQ29sb3JGbj0hMCxzKHt2YWx1ZTplLmdsb2JhbHMuYXhpc0NoYXJ0cz9lLmdsb2JhbHMuc2VyaWVzW2FdWzBdP2UuZ2xvYmFscy5zZXJpZXNbYV1bMF06MDplLmdsb2JhbHMuc2VyaWVzW2FdLHNlcmllc0luZGV4OmEsZGF0YVBvaW50SW5kZXg6YSx3OmV9KSk6c30pKSkpLGUuZ2xvYmFscy5zZXJpZXNDb2xvcnMubWFwKChmdW5jdGlvbih0LGkpe3QmJihlLmdsb2JhbHMuY29sb3JzW2ldPXQpfSkpLGUuY29uZmlnLnRoZW1lLm1vbm9jaHJvbWUuZW5hYmxlZCl7dmFyIGE9W10scz1lLmdsb2JhbHMuc2VyaWVzLmxlbmd0aDsodGhpcy5pc0JhckRpc3RyaWJ1dGVkfHx0aGlzLmlzSGVhdG1hcERpc3RyaWJ1dGVkKSYmKHM9ZS5nbG9iYWxzLnNlcmllc1swXS5sZW5ndGgqZS5nbG9iYWxzLnNlcmllcy5sZW5ndGgpO2Zvcih2YXIgcj1lLmNvbmZpZy50aGVtZS5tb25vY2hyb21lLmNvbG9yLG89MS8ocy9lLmNvbmZpZy50aGVtZS5tb25vY2hyb21lLnNoYWRlSW50ZW5zaXR5KSxuPWUuY29uZmlnLnRoZW1lLm1vbm9jaHJvbWUuc2hhZGVUbyxsPTAsaD0wO2g8cztoKyspe3ZhciBjPXZvaWQgMDtcImRhcmtcIj09PW4/KGM9aS5zaGFkZUNvbG9yKC0xKmwsciksbCs9byk6KGM9aS5zaGFkZUNvbG9yKGwsciksbCs9byksYS5wdXNoKGMpfWUuZ2xvYmFscy5jb2xvcnM9YS5zbGljZSgpfXZhciBkPWUuZ2xvYmFscy5jb2xvcnMuc2xpY2UoKTt0aGlzLnB1c2hFeHRyYUNvbG9ycyhlLmdsb2JhbHMuY29sb3JzKTtbXCJmaWxsXCIsXCJzdHJva2VcIl0uZm9yRWFjaCgoZnVuY3Rpb24oaSl7dm9pZCAwPT09ZS5jb25maWdbaV0uY29sb3JzP2UuZ2xvYmFsc1tpXS5jb2xvcnM9dC5pc0NvbG9yRm4/ZS5jb25maWcuY29sb3JzOmQ6ZS5nbG9iYWxzW2ldLmNvbG9ycz1lLmNvbmZpZ1tpXS5jb2xvcnMuc2xpY2UoKSx0LnB1c2hFeHRyYUNvbG9ycyhlLmdsb2JhbHNbaV0uY29sb3JzKX0pKSx2b2lkIDA9PT1lLmNvbmZpZy5kYXRhTGFiZWxzLnN0eWxlLmNvbG9ycz9lLmdsb2JhbHMuZGF0YUxhYmVscy5zdHlsZS5jb2xvcnM9ZDplLmdsb2JhbHMuZGF0YUxhYmVscy5zdHlsZS5jb2xvcnM9ZS5jb25maWcuZGF0YUxhYmVscy5zdHlsZS5jb2xvcnMuc2xpY2UoKSx0aGlzLnB1c2hFeHRyYUNvbG9ycyhlLmdsb2JhbHMuZGF0YUxhYmVscy5zdHlsZS5jb2xvcnMsNTApLHZvaWQgMD09PWUuY29uZmlnLnBsb3RPcHRpb25zLnJhZGFyLnBvbHlnb25zLmZpbGwuY29sb3JzP2UuZ2xvYmFscy5yYWRhclBvbHlnb25zLmZpbGwuY29sb3JzPVtcImRhcmtcIj09PWUuY29uZmlnLnRoZW1lLm1vZGU/XCIjNDI0MjQyXCI6XCJub25lXCJdOmUuZ2xvYmFscy5yYWRhclBvbHlnb25zLmZpbGwuY29sb3JzPWUuY29uZmlnLnBsb3RPcHRpb25zLnJhZGFyLnBvbHlnb25zLmZpbGwuY29sb3JzLnNsaWNlKCksdGhpcy5wdXNoRXh0cmFDb2xvcnMoZS5nbG9iYWxzLnJhZGFyUG9seWdvbnMuZmlsbC5jb2xvcnMsMjApLHZvaWQgMD09PWUuY29uZmlnLm1hcmtlcnMuY29sb3JzP2UuZ2xvYmFscy5tYXJrZXJzLmNvbG9ycz1kOmUuZ2xvYmFscy5tYXJrZXJzLmNvbG9ycz1lLmNvbmZpZy5tYXJrZXJzLmNvbG9ycy5zbGljZSgpLHRoaXMucHVzaEV4dHJhQ29sb3JzKGUuZ2xvYmFscy5tYXJrZXJzLmNvbG9ycyl9fSx7a2V5OlwicHVzaEV4dHJhQ29sb3JzXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxhPXRoaXMudyxzPWV8fGEuZ2xvYmFscy5zZXJpZXMubGVuZ3RoO2lmKG51bGw9PT1pJiYoaT10aGlzLmlzQmFyRGlzdHJpYnV0ZWR8fHRoaXMuaXNIZWF0bWFwRGlzdHJpYnV0ZWR8fFwiaGVhdG1hcFwiPT09YS5jb25maWcuY2hhcnQudHlwZSYmYS5jb25maWcucGxvdE9wdGlvbnMuaGVhdG1hcC5jb2xvclNjYWxlLmludmVyc2UpLGkmJmEuZ2xvYmFscy5zZXJpZXMubGVuZ3RoJiYocz1hLmdsb2JhbHMuc2VyaWVzW2EuZ2xvYmFscy5tYXhWYWxzSW5BcnJheUluZGV4XS5sZW5ndGgqYS5nbG9iYWxzLnNlcmllcy5sZW5ndGgpLHQubGVuZ3RoPHMpZm9yKHZhciByPXMtdC5sZW5ndGgsbz0wO288cjtvKyspdC5wdXNoKHRbb10pfX0se2tleTpcInVwZGF0ZVRoZW1lT3B0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3QuY2hhcnQ9dC5jaGFydHx8e30sdC50b29sdGlwPXQudG9vbHRpcHx8e307dmFyIGU9dC50aGVtZS5tb2RlfHxcImxpZ2h0XCIsaT10LnRoZW1lLnBhbGV0dGU/dC50aGVtZS5wYWxldHRlOlwiZGFya1wiPT09ZT9cInBhbGV0dGU0XCI6XCJwYWxldHRlMVwiLGE9dC5jaGFydC5mb3JlQ29sb3I/dC5jaGFydC5mb3JlQ29sb3I6XCJkYXJrXCI9PT1lP1wiI2Y2ZjdmOFwiOlwiIzM3M2QzZlwiO3JldHVybiB0LnRvb2x0aXAudGhlbWU9ZSx0LmNoYXJ0LmZvcmVDb2xvcj1hLHQudGhlbWUucGFsZXR0ZT1pLHR9fSx7a2V5OlwicHJlZGVmaW5lZFwiLHZhbHVlOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMudy5jb25maWcudGhlbWUucGFsZXR0ZSl7Y2FzZVwicGFsZXR0ZTFcIjpkZWZhdWx0OnRoaXMuY29sb3JzPVtcIiMwMDhGRkJcIixcIiMwMEUzOTZcIixcIiNGRUIwMTlcIixcIiNGRjQ1NjBcIixcIiM3NzVERDBcIl07YnJlYWs7Y2FzZVwicGFsZXR0ZTJcIjp0aGlzLmNvbG9ycz1bXCIjM2Y1MWI1XCIsXCIjMDNhOWY0XCIsXCIjNGNhZjUwXCIsXCIjZjljZTFkXCIsXCIjRkY5ODAwXCJdO2JyZWFrO2Nhc2VcInBhbGV0dGUzXCI6dGhpcy5jb2xvcnM9W1wiIzMzYjJkZlwiLFwiIzU0NkU3QVwiLFwiI2Q0NTI2ZVwiLFwiIzEzZDhhYVwiLFwiI0E1OTc4QlwiXTticmVhaztjYXNlXCJwYWxldHRlNFwiOnRoaXMuY29sb3JzPVtcIiM0ZWNkYzRcIixcIiNjN2Y0NjRcIixcIiM4MUQ0RkFcIixcIiNmZDZhNmFcIixcIiM1NDZFN0FcIl07YnJlYWs7Y2FzZVwicGFsZXR0ZTVcIjp0aGlzLmNvbG9ycz1bXCIjMmI5MDhmXCIsXCIjZjlhM2E0XCIsXCIjOTBlZTdlXCIsXCIjZmE0NDQzXCIsXCIjNjlkMmU3XCJdO2JyZWFrO2Nhc2VcInBhbGV0dGU2XCI6dGhpcy5jb2xvcnM9W1wiIzQ0OUREMVwiLFwiI0Y4NjYyNFwiLFwiI0VBMzU0NlwiLFwiIzY2MkU5QlwiLFwiI0M1RDg2RFwiXTticmVhaztjYXNlXCJwYWxldHRlN1wiOnRoaXMuY29sb3JzPVtcIiNENzI2M0RcIixcIiMxQjk5OEJcIixcIiMyRTI5NEVcIixcIiNGNDYwMzZcIixcIiNFMkMwNDRcIl07YnJlYWs7Y2FzZVwicGFsZXR0ZThcIjp0aGlzLmNvbG9ycz1bXCIjNjYyRTlCXCIsXCIjRjg2NjI0XCIsXCIjRjlDODBFXCIsXCIjRUEzNTQ2XCIsXCIjNDNCQ0NEXCJdO2JyZWFrO2Nhc2VcInBhbGV0dGU5XCI6dGhpcy5jb2xvcnM9W1wiIzVDNDc0MlwiLFwiI0E1OTc4QlwiLFwiIzhENUI0Q1wiLFwiIzVBMkEyN1wiLFwiI0M0QkJBRlwiXTticmVhaztjYXNlXCJwYWxldHRlMTBcIjp0aGlzLmNvbG9ycz1bXCIjQTMwMEQ2XCIsXCIjN0QwMkVCXCIsXCIjNTY1M0ZFXCIsXCIjMjk4M0ZGXCIsXCIjMDBCMUYyXCJdfXJldHVybiB0aGlzLmNvbG9yc319XSksdH0oKSxldD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUud31yZXR1cm4gcih0LFt7a2V5OlwiZHJhd1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kcmF3VGl0bGVTdWJ0aXRsZShcInRpdGxlXCIpLHRoaXMuZHJhd1RpdGxlU3VidGl0bGUoXCJzdWJ0aXRsZVwiKX19LHtrZXk6XCJkcmF3VGl0bGVTdWJ0aXRsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudyxpPVwidGl0bGVcIj09PXQ/ZS5jb25maWcudGl0bGU6ZS5jb25maWcuc3VidGl0bGUsYT1lLmdsb2JhbHMuc3ZnV2lkdGgvMixzPWkub2Zmc2V0WSxyPVwibWlkZGxlXCI7aWYoXCJsZWZ0XCI9PT1pLmFsaWduPyhhPTEwLHI9XCJzdGFydFwiKTpcInJpZ2h0XCI9PT1pLmFsaWduJiYoYT1lLmdsb2JhbHMuc3ZnV2lkdGgtMTAscj1cImVuZFwiKSxhKz1pLm9mZnNldFgscz1zK3BhcnNlSW50KGkuc3R5bGUuZm9udFNpemUsMTApK2kubWFyZ2luLzIsdm9pZCAwIT09aS50ZXh0KXt2YXIgbz1uZXcgbSh0aGlzLmN0eCkuZHJhd1RleHQoe3g6YSx5OnMsdGV4dDppLnRleHQsdGV4dEFuY2hvcjpyLGZvbnRTaXplOmkuc3R5bGUuZm9udFNpemUsZm9udEZhbWlseTppLnN0eWxlLmZvbnRGYW1pbHksZm9udFdlaWdodDppLnN0eWxlLmZvbnRXZWlnaHQsZm9yZUNvbG9yOmkuc3R5bGUuY29sb3Isb3BhY2l0eToxfSk7by5ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsXCJhcGV4Y2hhcnRzLVwiLmNvbmNhdCh0LFwiLXRleHRcIikpLGUuZ2xvYmFscy5kb20uUGFwZXIuYWRkKG8pfX19XSksdH0oKSxpdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMudz1lLncsdGhpcy5kQ3R4PWV9cmV0dXJuIHIodCxbe2tleTpcImdldFRpdGxlU3VidGl0bGVDb29yZHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT0wLGE9MCxzPVwidGl0bGVcIj09PXQ/ZS5jb25maWcudGl0bGUuZmxvYXRpbmc6ZS5jb25maWcuc3VidGl0bGUuZmxvYXRpbmcscj1lLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtXCIuY29uY2F0KHQsXCItdGV4dFwiKSk7aWYobnVsbCE9PXImJiFzKXt2YXIgbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2k9by53aWR0aCxhPWUuZ2xvYmFscy5heGlzQ2hhcnRzP28uaGVpZ2h0KzU6by5oZWlnaHR9cmV0dXJue3dpZHRoOmksaGVpZ2h0OmF9fX0se2tleTpcImdldExlZ2VuZHNSZWN0XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtbGVnZW5kXCIpO3QuY29uZmlnLmxlZ2VuZC5oZWlnaHR8fFwidG9wXCIhPT10LmNvbmZpZy5sZWdlbmQucG9zaXRpb24mJlwiYm90dG9tXCIhPT10LmNvbmZpZy5sZWdlbmQucG9zaXRpb258fChlLnN0eWxlLm1heEhlaWdodD10Lmdsb2JhbHMuc3ZnSGVpZ2h0LzIrXCJweFwiKTt2YXIgaT1PYmplY3QuYXNzaWduKHt9LHguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGUpKTtyZXR1cm4gbnVsbCE9PWUmJiF0LmNvbmZpZy5sZWdlbmQuZmxvYXRpbmcmJnQuY29uZmlnLmxlZ2VuZC5zaG93P3RoaXMuZEN0eC5sZ1JlY3Q9e3g6aS54LHk6aS55LGhlaWdodDppLmhlaWdodCx3aWR0aDowPT09aS5oZWlnaHQ/MDppLndpZHRofTp0aGlzLmRDdHgubGdSZWN0PXt4OjAseTowLGhlaWdodDowLHdpZHRoOjB9LFwibGVmdFwiIT09dC5jb25maWcubGVnZW5kLnBvc2l0aW9uJiZcInJpZ2h0XCIhPT10LmNvbmZpZy5sZWdlbmQucG9zaXRpb258fDEuNSp0aGlzLmRDdHgubGdSZWN0LndpZHRoPnQuZ2xvYmFscy5zdmdXaWR0aCYmKHRoaXMuZEN0eC5sZ1JlY3Qud2lkdGg9dC5nbG9iYWxzLnN2Z1dpZHRoLzEuNSksdGhpcy5kQ3R4LmxnUmVjdH19LHtrZXk6XCJnZXRMYXJnZXN0U3RyaW5nRnJvbU11bHRpQXJyXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10O2lmKHRoaXMudy5nbG9iYWxzLmlzTXVsdGlMaW5lWCl7dmFyIGE9ZS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5sZW5ndGg6MX0pKSxzPU1hdGgubWF4LmFwcGx5KE1hdGgsdShhKSk7aT1lW2EuaW5kZXhPZihzKV19cmV0dXJuIGl9fV0pLHR9KCksYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLnc9ZS53LHRoaXMuZEN0eD1lfXJldHVybiByKHQsW3trZXk6XCJnZXR4QXhpc0xhYmVsc0Nvb3Jkc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLncsaT1lLmdsb2JhbHMubGFiZWxzLnNsaWNlKCk7aWYoZS5jb25maWcueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljJiYwPT09aS5sZW5ndGgmJihpPWUuZ2xvYmFscy5jYXRlZ29yeUxhYmVscyksZS5nbG9iYWxzLnRpbWVzY2FsZUxhYmVscy5sZW5ndGg+MCl7dmFyIGE9dGhpcy5nZXR4QXhpc1RpbWVTY2FsZUxhYmVsc0Nvb3JkcygpO3Q9e3dpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0fSxlLmdsb2JhbHMucm90YXRlWExhYmVscz0hMX1lbHNle3RoaXMuZEN0eC5sZ1dpZHRoRm9yU2lkZUxlZ2VuZHM9XCJsZWZ0XCIhPT1lLmNvbmZpZy5sZWdlbmQucG9zaXRpb24mJlwicmlnaHRcIiE9PWUuY29uZmlnLmxlZ2VuZC5wb3NpdGlvbnx8ZS5jb25maWcubGVnZW5kLmZsb2F0aW5nPzA6dGhpcy5kQ3R4LmxnUmVjdC53aWR0aDt2YXIgcz1lLmdsb2JhbHMueExhYmVsRm9ybWF0dGVyLHI9eC5nZXRMYXJnZXN0U3RyaW5nRnJvbUFycihpKSxvPXRoaXMuZEN0eC5kaW1IZWxwZXJzLmdldExhcmdlc3RTdHJpbmdGcm9tTXVsdGlBcnIocixpKTtlLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsJiYobz1yPWUuZ2xvYmFscy55QXhpc1NjYWxlWzBdLnJlc3VsdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPmUubGVuZ3RoP3Q6ZX0pLDApKTt2YXIgbj1uZXcgVyh0aGlzLmRDdHguY3R4KSxsPXI7cj1uLnhMYWJlbEZvcm1hdChzLHIsbCx7aTp2b2lkIDAsZGF0ZUZvcm1hdHRlcjpuZXcgVCh0aGlzLmRDdHguY3R4KS5mb3JtYXREYXRlLHc6ZX0pLG89bi54TGFiZWxGb3JtYXQocyxvLGwse2k6dm9pZCAwLGRhdGVGb3JtYXR0ZXI6bmV3IFQodGhpcy5kQ3R4LmN0eCkuZm9ybWF0RGF0ZSx3OmV9KSwoZS5jb25maWcueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljJiZ2b2lkIDA9PT1yfHxcIlwiPT09U3RyaW5nKHIpLnRyaW0oKSkmJihvPXI9XCIxXCIpO3ZhciBoPW5ldyBtKHRoaXMuZEN0eC5jdHgpLGM9aC5nZXRUZXh0UmVjdHMocixlLmNvbmZpZy54YXhpcy5sYWJlbHMuc3R5bGUuZm9udFNpemUpLGQ9YztpZihyIT09byYmKGQ9aC5nZXRUZXh0UmVjdHMobyxlLmNvbmZpZy54YXhpcy5sYWJlbHMuc3R5bGUuZm9udFNpemUpKSwodD17d2lkdGg6Yy53aWR0aD49ZC53aWR0aD9jLndpZHRoOmQud2lkdGgsaGVpZ2h0OmMuaGVpZ2h0Pj1kLmhlaWdodD9jLmhlaWdodDpkLmhlaWdodH0pLndpZHRoKmkubGVuZ3RoPmUuZ2xvYmFscy5zdmdXaWR0aC10aGlzLmRDdHgubGdXaWR0aEZvclNpZGVMZWdlbmRzLXRoaXMuZEN0eC55QXhpc1dpZHRoLXRoaXMuZEN0eC5ncmlkUGFkLmxlZnQtdGhpcy5kQ3R4LmdyaWRQYWQucmlnaHQmJjAhPT1lLmNvbmZpZy54YXhpcy5sYWJlbHMucm90YXRlfHxlLmNvbmZpZy54YXhpcy5sYWJlbHMucm90YXRlQWx3YXlzKXtpZighZS5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCl7ZS5nbG9iYWxzLnJvdGF0ZVhMYWJlbHM9ITA7dmFyIGc9ZnVuY3Rpb24odCl7cmV0dXJuIGguZ2V0VGV4dFJlY3RzKHQsZS5jb25maWcueGF4aXMubGFiZWxzLnN0eWxlLmZvbnRTaXplLGUuY29uZmlnLnhheGlzLmxhYmVscy5zdHlsZS5mb250RmFtaWx5LFwicm90YXRlKFwiLmNvbmNhdChlLmNvbmZpZy54YXhpcy5sYWJlbHMucm90YXRlLFwiIDAgMClcIiksITEpfTtjPWcociksciE9PW8mJihkPWcobykpLHQuaGVpZ2h0PShjLmhlaWdodD5kLmhlaWdodD9jLmhlaWdodDpkLmhlaWdodCkvMS41LHQud2lkdGg9Yy53aWR0aD5kLndpZHRoP2Mud2lkdGg6ZC53aWR0aH19ZWxzZSBlLmdsb2JhbHMucm90YXRlWExhYmVscz0hMX1yZXR1cm4gZS5jb25maWcueGF4aXMubGFiZWxzLnNob3d8fCh0PXt3aWR0aDowLGhlaWdodDowfSkse3dpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX19LHtrZXk6XCJnZXR4QXhpc0dyb3VwTGFiZWxzQ29vcmRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMudztpZighZS5nbG9iYWxzLmhhc0dyb3VwcylyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07dmFyIGksYT0obnVsbD09PSh0PWUuY29uZmlnLnhheGlzLmdyb3VwLnN0eWxlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5mb250U2l6ZSl8fGUuY29uZmlnLnhheGlzLmxhYmVscy5zdHlsZS5mb250U2l6ZSxzPWUuZ2xvYmFscy5ncm91cHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50aXRsZX0pKSxyPXguZ2V0TGFyZ2VzdFN0cmluZ0Zyb21BcnIocyksbz10aGlzLmRDdHguZGltSGVscGVycy5nZXRMYXJnZXN0U3RyaW5nRnJvbU11bHRpQXJyKHIscyksbj1uZXcgbSh0aGlzLmRDdHguY3R4KSxsPW4uZ2V0VGV4dFJlY3RzKHIsYSksaD1sO3JldHVybiByIT09byYmKGg9bi5nZXRUZXh0UmVjdHMobyxhKSksaT17d2lkdGg6bC53aWR0aD49aC53aWR0aD9sLndpZHRoOmgud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0Pj1oLmhlaWdodD9sLmhlaWdodDpoLmhlaWdodH0sZS5jb25maWcueGF4aXMubGFiZWxzLnNob3d8fChpPXt3aWR0aDowLGhlaWdodDowfSkse3dpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0fX19LHtrZXk6XCJnZXR4QXhpc1RpdGxlQ29vcmRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT0wLGk9MDtpZih2b2lkIDAhPT10LmNvbmZpZy54YXhpcy50aXRsZS50ZXh0KXt2YXIgYT1uZXcgbSh0aGlzLmRDdHguY3R4KS5nZXRUZXh0UmVjdHModC5jb25maWcueGF4aXMudGl0bGUudGV4dCx0LmNvbmZpZy54YXhpcy50aXRsZS5zdHlsZS5mb250U2l6ZSk7ZT1hLndpZHRoLGk9YS5oZWlnaHR9cmV0dXJue3dpZHRoOmUsaGVpZ2h0Oml9fX0se2tleTpcImdldHhBeGlzVGltZVNjYWxlTGFiZWxzQ29vcmRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMudzt0aGlzLmRDdHgudGltZXNjYWxlTGFiZWxzPWUuZ2xvYmFscy50aW1lc2NhbGVMYWJlbHMuc2xpY2UoKTt2YXIgaT10aGlzLmRDdHgudGltZXNjYWxlTGFiZWxzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KSksYT1pLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dD8oY29uc29sZS5lcnJvcihcIllvdSBoYXZlIHBvc3NpYmx5IHN1cHBsaWVkIGludmFsaWQgRGF0ZSBmb3JtYXQuIFBsZWFzZSBzdXBwbHkgYSB2YWxpZCBKYXZhU2NyaXB0IERhdGVcIiksMCk6dC5sZW5ndGg+ZS5sZW5ndGg/dDplfSksMCk7cmV0dXJuIDEuMDUqKHQ9bmV3IG0odGhpcy5kQ3R4LmN0eCkuZ2V0VGV4dFJlY3RzKGEsZS5jb25maWcueGF4aXMubGFiZWxzLnN0eWxlLmZvbnRTaXplKSkud2lkdGgqaS5sZW5ndGg+ZS5nbG9iYWxzLmdyaWRXaWR0aCYmMCE9PWUuY29uZmlnLnhheGlzLmxhYmVscy5yb3RhdGUmJihlLmdsb2JhbHMub3ZlcmxhcHBpbmdYTGFiZWxzPSEwKSx0fX0se2tleTpcImFkZGl0aW9uYWxQYWRkaW5nWExhYmVsc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLncsYT1pLmdsb2JhbHMscz1pLmNvbmZpZyxyPXMueGF4aXMudHlwZSxvPXQud2lkdGg7YS5za2lwTGFzdFRpbWVsaW5lbGFiZWw9ITEsYS5za2lwRmlyc3RUaW1lbGluZWxhYmVsPSExO3ZhciBuPWkuY29uZmlnLnlheGlzWzBdLm9wcG9zaXRlJiZpLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsLGw9ZnVuY3Rpb24odCxuKXsoZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1hLmNvbGxhcHNlZFNlcmllc0luZGljZXMuaW5kZXhPZih0KX0pKG4pfHxmdW5jdGlvbih0KXtpZihlLmRDdHgudGltZXNjYWxlTGFiZWxzJiZlLmRDdHgudGltZXNjYWxlTGFiZWxzLmxlbmd0aCl7dmFyIG49ZS5kQ3R4LnRpbWVzY2FsZUxhYmVsc1swXSxsPWUuZEN0eC50aW1lc2NhbGVMYWJlbHNbZS5kQ3R4LnRpbWVzY2FsZUxhYmVscy5sZW5ndGgtMV0ucG9zaXRpb24rby8xLjc1LWUuZEN0eC55QXhpc1dpZHRoUmlnaHQsaD1uLnBvc2l0aW9uLW8vMS43NStlLmRDdHgueUF4aXNXaWR0aExlZnQsYz1cInJpZ2h0XCI9PT1pLmNvbmZpZy5sZWdlbmQucG9zaXRpb24mJmUuZEN0eC5sZ1JlY3Qud2lkdGg+MD9lLmRDdHgubGdSZWN0LndpZHRoOjA7bD5hLnN2Z1dpZHRoLWEudHJhbnNsYXRlWC1jJiYoYS5za2lwTGFzdFRpbWVsaW5lbGFiZWw9ITApLGg8LSh0LnNob3cmJiF0LmZsb2F0aW5nfHxcImJhclwiIT09cy5jaGFydC50eXBlJiZcImNhbmRsZXN0aWNrXCIhPT1zLmNoYXJ0LnR5cGUmJlwicmFuZ2VCYXJcIiE9PXMuY2hhcnQudHlwZSYmXCJib3hQbG90XCIhPT1zLmNoYXJ0LnR5cGU/MTA6by8xLjc1KSYmKGEuc2tpcEZpcnN0VGltZWxpbmVsYWJlbD0hMCl9ZWxzZVwiZGF0ZXRpbWVcIj09PXI/ZS5kQ3R4LmdyaWRQYWQucmlnaHQ8byYmIWEucm90YXRlWExhYmVscyYmKGEuc2tpcExhc3RUaW1lbGluZWxhYmVsPSEwKTpcImRhdGV0aW1lXCIhPT1yJiZlLmRDdHguZ3JpZFBhZC5yaWdodDxvLzItZS5kQ3R4LnlBeGlzV2lkdGhSaWdodCYmIWEucm90YXRlWExhYmVscyYmIWkuY29uZmlnLnhheGlzLmxhYmVscy50cmltJiYoXCJiZXR3ZWVuXCIhPT1pLmNvbmZpZy54YXhpcy50aWNrUGxhY2VtZW50fHxpLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsKSYmKGUuZEN0eC54UGFkUmlnaHQ9by8yKzEpfSh0KX07cy55YXhpcy5mb3JFYWNoKChmdW5jdGlvbih0LGkpe24/KGUuZEN0eC5ncmlkUGFkLmxlZnQ8byYmKGUuZEN0eC54UGFkTGVmdD1vLzIrMSksZS5kQ3R4LnhQYWRSaWdodD1vLzIrMSk6bCh0LGkpfSkpfX1dKSx0fSgpLHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy53PWUudyx0aGlzLmRDdHg9ZX1yZXR1cm4gcih0LFt7a2V5OlwiZ2V0eUF4aXNMYWJlbHNDb29yZHNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLncsaT1bXSxhPTEwLHM9bmV3IEIodGhpcy5kQ3R4LmN0eCk7cmV0dXJuIGUuY29uZmlnLnlheGlzLm1hcCgoZnVuY3Rpb24ocixvKXt2YXIgbj1lLmdsb2JhbHMueUF4aXNTY2FsZVtvXSxsPTA7aWYoIXMuaXNZQXhpc0hpZGRlbihvKSYmci5sYWJlbHMuc2hvdyYmdm9pZCAwIT09ci5sYWJlbHMubWluV2lkdGgmJihsPXIubGFiZWxzLm1pbldpZHRoKSwhcy5pc1lBeGlzSGlkZGVuKG8pJiZyLmxhYmVscy5zaG93JiZuLnJlc3VsdC5sZW5ndGgpe3ZhciBoPWUuZ2xvYmFscy55TGFiZWxGb3JtYXR0ZXJzW29dLGM9bi5uaWNlTWluPT09TnVtYmVyLk1JTl9WQUxVRT8wOm4ubmljZU1pbixkPVN0cmluZyhjKS5sZW5ndGg+U3RyaW5nKG4ubmljZU1heCkubGVuZ3RoP2M6bi5uaWNlTWF4LGc9aChkLHtzZXJpZXNJbmRleDpvLGRhdGFQb2ludEluZGV4Oi0xLHc6ZX0pLHU9ZztpZih2b2lkIDAhPT1nJiYwIT09Zy5sZW5ndGh8fChnPWQpLGUuZ2xvYmFscy5pc0Jhckhvcml6b250YWwpe2E9MDt2YXIgZj1lLmdsb2JhbHMubGFiZWxzLnNsaWNlKCk7Zz1oKGc9eC5nZXRMYXJnZXN0U3RyaW5nRnJvbUFycihmKSx7c2VyaWVzSW5kZXg6byxkYXRhUG9pbnRJbmRleDotMSx3OmV9KSx1PXQuZEN0eC5kaW1IZWxwZXJzLmdldExhcmdlc3RTdHJpbmdGcm9tTXVsdGlBcnIoZyxmKX12YXIgcD1uZXcgbSh0LmRDdHguY3R4KSxiPVwicm90YXRlKFwiLmNvbmNhdChyLmxhYmVscy5yb3RhdGUsXCIgMCAwKVwiKSx2PXAuZ2V0VGV4dFJlY3RzKGcsci5sYWJlbHMuc3R5bGUuZm9udFNpemUsci5sYWJlbHMuc3R5bGUuZm9udEZhbWlseSxiLCExKSx5PXY7ZyE9PXUmJih5PXAuZ2V0VGV4dFJlY3RzKHUsci5sYWJlbHMuc3R5bGUuZm9udFNpemUsci5sYWJlbHMuc3R5bGUuZm9udEZhbWlseSxiLCExKSksaS5wdXNoKHt3aWR0aDoobD55LndpZHRofHxsPnYud2lkdGg/bDp5LndpZHRoPnYud2lkdGg/eS53aWR0aDp2LndpZHRoKSthLGhlaWdodDp5LmhlaWdodD52LmhlaWdodD95LmhlaWdodDp2LmhlaWdodH0pfWVsc2UgaS5wdXNoKHt3aWR0aDowLGhlaWdodDowfSl9KSksaX19LHtrZXk6XCJnZXR5QXhpc1RpdGxlQ29vcmRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy53LGk9W107cmV0dXJuIGUuY29uZmlnLnlheGlzLm1hcCgoZnVuY3Rpb24oZSxhKXtpZihlLnNob3cmJnZvaWQgMCE9PWUudGl0bGUudGV4dCl7dmFyIHM9bmV3IG0odC5kQ3R4LmN0eCkscj1cInJvdGF0ZShcIi5jb25jYXQoZS50aXRsZS5yb3RhdGUsXCIgMCAwKVwiKSxvPXMuZ2V0VGV4dFJlY3RzKGUudGl0bGUudGV4dCxlLnRpdGxlLnN0eWxlLmZvbnRTaXplLGUudGl0bGUuc3R5bGUuZm9udEZhbWlseSxyLCExKTtpLnB1c2goe3dpZHRoOm8ud2lkdGgsaGVpZ2h0Om8uaGVpZ2h0fSl9ZWxzZSBpLnB1c2goe3dpZHRoOjAsaGVpZ2h0OjB9KX0pKSxpfX0se2tleTpcImdldFRvdGFsWUF4aXNXaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9MCxpPTAsYT0wLHM9dC5nbG9iYWxzLnlBeGlzU2NhbGUubGVuZ3RoPjE/MTA6MCxyPW5ldyBCKHRoaXMuZEN0eC5jdHgpLG89ZnVuY3Rpb24obyxuKXt2YXIgbD10LmNvbmZpZy55YXhpc1tuXS5mbG9hdGluZyxoPTA7by53aWR0aD4wJiYhbD8oaD1vLndpZHRoK3MsZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2xvYmFscy5pZ25vcmVZQXhpc0luZGV4ZXMuaW5kZXhPZihlKT4tMX0obikmJihoPWgtby53aWR0aC1zKSk6aD1sfHxyLmlzWUF4aXNIaWRkZW4obik/MDo1LHQuY29uZmlnLnlheGlzW25dLm9wcG9zaXRlP2ErPWg6aSs9aCxlKz1ofTtyZXR1cm4gdC5nbG9iYWxzLnlMYWJlbHNDb29yZHMubWFwKChmdW5jdGlvbih0LGUpe28odCxlKX0pKSx0Lmdsb2JhbHMueVRpdGxlQ29vcmRzLm1hcCgoZnVuY3Rpb24odCxlKXtvKHQsZSl9KSksdC5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCYmIXQuY29uZmlnLnlheGlzWzBdLmZsb2F0aW5nJiYoZT10Lmdsb2JhbHMueUxhYmVsc0Nvb3Jkc1swXS53aWR0aCt0Lmdsb2JhbHMueVRpdGxlQ29vcmRzWzBdLndpZHRoKzE1KSx0aGlzLmRDdHgueUF4aXNXaWR0aExlZnQ9aSx0aGlzLmRDdHgueUF4aXNXaWR0aFJpZ2h0PWEsZX19XSksdH0oKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMudz1lLncsdGhpcy5kQ3R4PWV9cmV0dXJuIHIodCxbe2tleTpcImdyaWRQYWRGb3JDb2x1bW5zSW5OdW1lcmljQXhpc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudztpZihlLmdsb2JhbHMubm9EYXRhfHxlLmdsb2JhbHMuYWxsU2VyaWVzQ29sbGFwc2VkKXJldHVybiAwO3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVyblwiYmFyXCI9PT10fHxcInJhbmdlQmFyXCI9PT10fHxcImNhbmRsZXN0aWNrXCI9PT10fHxcImJveFBsb3RcIj09PXR9LGE9ZS5jb25maWcuY2hhcnQudHlwZSxzPTAscj1pKGEpP2UuY29uZmlnLnNlcmllcy5sZW5ndGg6MTtpZihlLmdsb2JhbHMuY29tYm9CYXJDb3VudD4wJiYocj1lLmdsb2JhbHMuY29tYm9CYXJDb3VudCksZS5nbG9iYWxzLmNvbGxhcHNlZFNlcmllcy5mb3JFYWNoKChmdW5jdGlvbih0KXtpKHQudHlwZSkmJihyLT0xKX0pKSxlLmNvbmZpZy5jaGFydC5zdGFja2VkJiYocj0xKSwoaShhKXx8ZS5nbG9iYWxzLmNvbWJvQmFyQ291bnQ+MCkmJmUuZ2xvYmFscy5pc1hOdW1lcmljJiYhZS5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCYmcj4wKXt2YXIgbyxuLGw9TWF0aC5hYnMoZS5nbG9iYWxzLmluaXRpYWxNYXhYLWUuZ2xvYmFscy5pbml0aWFsTWluWCk7bDw9MyYmKGw9ZS5nbG9iYWxzLmRhdGFQb2ludHMpLG89bC90LGUuZ2xvYmFscy5taW5YRGlmZiYmZS5nbG9iYWxzLm1pblhEaWZmL28+MCYmKG49ZS5nbG9iYWxzLm1pblhEaWZmL28pLG4+dC8yJiYobi89MiksKHM9bi9yKnBhcnNlSW50KGUuY29uZmlnLnBsb3RPcHRpb25zLmJhci5jb2x1bW5XaWR0aCwxMCkvMTAwKTwxJiYocz0xKSxzPXMvKHI+MT8xOjEuNSkrNSxlLmdsb2JhbHMuYmFyUGFkRm9yTnVtZXJpY0F4aXM9c31yZXR1cm4gc319LHtrZXk6XCJncmlkUGFkRm9ydGl0bGVTdWJ0aXRsZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMudyxpPWUuZ2xvYmFscyxhPXRoaXMuZEN0eC5pc1NwYXJrbGluZXx8IWUuZ2xvYmFscy5heGlzQ2hhcnRzPzA6MTA7W1widGl0bGVcIixcInN1YnRpdGxlXCJdLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZvaWQgMCE9PWUuY29uZmlnW2ldLnRleHQ/YSs9ZS5jb25maWdbaV0ubWFyZ2luOmErPXQuZEN0eC5pc1NwYXJrbGluZXx8IWUuZ2xvYmFscy5heGlzQ2hhcnRzPzA6NX0pKSwhZS5jb25maWcubGVnZW5kLnNob3d8fFwiYm90dG9tXCIhPT1lLmNvbmZpZy5sZWdlbmQucG9zaXRpb258fGUuY29uZmlnLmxlZ2VuZC5mbG9hdGluZ3x8ZS5nbG9iYWxzLmF4aXNDaGFydHN8fChhKz0xMCk7dmFyIHM9dGhpcy5kQ3R4LmRpbUhlbHBlcnMuZ2V0VGl0bGVTdWJ0aXRsZUNvb3JkcyhcInRpdGxlXCIpLHI9dGhpcy5kQ3R4LmRpbUhlbHBlcnMuZ2V0VGl0bGVTdWJ0aXRsZUNvb3JkcyhcInN1YnRpdGxlXCIpO2kuZ3JpZEhlaWdodD1pLmdyaWRIZWlnaHQtcy5oZWlnaHQtci5oZWlnaHQtYSxpLnRyYW5zbGF0ZVk9aS50cmFuc2xhdGVZK3MuaGVpZ2h0K3IuaGVpZ2h0K2F9fSx7a2V5Olwic2V0R3JpZFhQb3NGb3JEdWFsWUF4aXNcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudyxhPW5ldyBCKHRoaXMuZEN0eC5jdHgpO2kuY29uZmlnLnlheGlzLm1hcCgoZnVuY3Rpb24ocyxyKXstMSE9PWkuZ2xvYmFscy5pZ25vcmVZQXhpc0luZGV4ZXMuaW5kZXhPZihyKXx8cy5mbG9hdGluZ3x8YS5pc1lBeGlzSGlkZGVuKHIpfHwocy5vcHBvc2l0ZSYmKGkuZ2xvYmFscy50cmFuc2xhdGVYPWkuZ2xvYmFscy50cmFuc2xhdGVYLShlW3JdLndpZHRoK3Rbcl0ud2lkdGgpLXBhcnNlSW50KGkuY29uZmlnLnlheGlzW3JdLmxhYmVscy5zdHlsZS5mb250U2l6ZSwxMCkvMS4yLTEyKSxpLmdsb2JhbHMudHJhbnNsYXRlWDwyJiYoaS5nbG9iYWxzLnRyYW5zbGF0ZVg9MikpfSkpfX1dKSx0fSgpLG90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53LHRoaXMubGdSZWN0PXt9LHRoaXMueUF4aXNXaWR0aD0wLHRoaXMueUF4aXNXaWR0aExlZnQ9MCx0aGlzLnlBeGlzV2lkdGhSaWdodD0wLHRoaXMueEF4aXNIZWlnaHQ9MCx0aGlzLmlzU3BhcmtsaW5lPXRoaXMudy5jb25maWcuY2hhcnQuc3BhcmtsaW5lLmVuYWJsZWQsdGhpcy5kaW1IZWxwZXJzPW5ldyBpdCh0aGlzKSx0aGlzLmRpbVlBeGlzPW5ldyBzdCh0aGlzKSx0aGlzLmRpbVhBeGlzPW5ldyBhdCh0aGlzKSx0aGlzLmRpbUdyaWQ9bmV3IHJ0KHRoaXMpLHRoaXMubGdXaWR0aEZvclNpZGVMZWdlbmRzPTAsdGhpcy5ncmlkUGFkPXRoaXMudy5jb25maWcuZ3JpZC5wYWRkaW5nLHRoaXMueFBhZFJpZ2h0PTAsdGhpcy54UGFkTGVmdD0wfXJldHVybiByKHQsW3trZXk6XCJwbG90Q29vcmRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy53LGk9ZS5nbG9iYWxzO3RoaXMubGdSZWN0PXRoaXMuZGltSGVscGVycy5nZXRMZWdlbmRzUmVjdCgpLHRoaXMuaXNTcGFya2xpbmUmJihlLmNvbmZpZy5tYXJrZXJzLmRpc2NyZXRlLmxlbmd0aD4wfHxlLmNvbmZpZy5tYXJrZXJzLnNpemU+MCkmJk9iamVjdC5lbnRyaWVzKHRoaXMuZ3JpZFBhZCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9ZyhlLDIpLGE9aVswXSxzPWlbMV07dC5ncmlkUGFkW2FdPU1hdGgubWF4KHMsdC53Lmdsb2JhbHMubWFya2Vycy5sYXJnZXN0U2l6ZS8xLjUpfSkpLGkuYXhpc0NoYXJ0cz90aGlzLnNldERpbWVuc2lvbnNGb3JBeGlzQ2hhcnRzKCk6dGhpcy5zZXREaW1lbnNpb25zRm9yTm9uQXhpc0NoYXJ0cygpLHRoaXMuZGltR3JpZC5ncmlkUGFkRm9ydGl0bGVTdWJ0aXRsZSgpLGkuZ3JpZEhlaWdodD1pLmdyaWRIZWlnaHQtdGhpcy5ncmlkUGFkLnRvcC10aGlzLmdyaWRQYWQuYm90dG9tLGkuZ3JpZFdpZHRoPWkuZ3JpZFdpZHRoLXRoaXMuZ3JpZFBhZC5sZWZ0LXRoaXMuZ3JpZFBhZC5yaWdodC10aGlzLnhQYWRSaWdodC10aGlzLnhQYWRMZWZ0O3ZhciBhPXRoaXMuZGltR3JpZC5ncmlkUGFkRm9yQ29sdW1uc0luTnVtZXJpY0F4aXMoaS5ncmlkV2lkdGgpO2kuZ3JpZFdpZHRoPWkuZ3JpZFdpZHRoLTIqYSxpLnRyYW5zbGF0ZVg9aS50cmFuc2xhdGVYK3RoaXMuZ3JpZFBhZC5sZWZ0K3RoaXMueFBhZExlZnQrKGE+MD9hKzQ6MCksaS50cmFuc2xhdGVZPWkudHJhbnNsYXRlWSt0aGlzLmdyaWRQYWQudG9wfX0se2tleTpcInNldERpbWVuc2lvbnNGb3JBeGlzQ2hhcnRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy53LGk9ZS5nbG9iYWxzLGE9dGhpcy5kaW1ZQXhpcy5nZXR5QXhpc0xhYmVsc0Nvb3JkcygpLHM9dGhpcy5kaW1ZQXhpcy5nZXR5QXhpc1RpdGxlQ29vcmRzKCk7ZS5nbG9iYWxzLnlMYWJlbHNDb29yZHM9W10sZS5nbG9iYWxzLnlUaXRsZUNvb3Jkcz1bXSxlLmNvbmZpZy55YXhpcy5tYXAoKGZ1bmN0aW9uKHQsaSl7ZS5nbG9iYWxzLnlMYWJlbHNDb29yZHMucHVzaCh7d2lkdGg6YVtpXS53aWR0aCxpbmRleDppfSksZS5nbG9iYWxzLnlUaXRsZUNvb3Jkcy5wdXNoKHt3aWR0aDpzW2ldLndpZHRoLGluZGV4Oml9KX0pKSx0aGlzLnlBeGlzV2lkdGg9dGhpcy5kaW1ZQXhpcy5nZXRUb3RhbFlBeGlzV2lkdGgoKTt2YXIgcj10aGlzLmRpbVhBeGlzLmdldHhBeGlzTGFiZWxzQ29vcmRzKCksbz10aGlzLmRpbVhBeGlzLmdldHhBeGlzR3JvdXBMYWJlbHNDb29yZHMoKSxuPXRoaXMuZGltWEF4aXMuZ2V0eEF4aXNUaXRsZUNvb3JkcygpO3RoaXMuY29uZGl0aW9uYWxDaGVja3NGb3JBeGlzQ29vcmRzKHIsbixvKSxpLnRyYW5zbGF0ZVhBeGlzWT1lLmdsb2JhbHMucm90YXRlWExhYmVscz90aGlzLnhBeGlzSGVpZ2h0Lzg6LTQsaS50cmFuc2xhdGVYQXhpc1g9ZS5nbG9iYWxzLnJvdGF0ZVhMYWJlbHMmJmUuZ2xvYmFscy5pc1hOdW1lcmljJiZlLmNvbmZpZy54YXhpcy5sYWJlbHMucm90YXRlPD0tNDU/LXRoaXMueEF4aXNXaWR0aC80OjAsZS5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCYmKGkucm90YXRlWExhYmVscz0hMSxpLnRyYW5zbGF0ZVhBeGlzWT1wYXJzZUludChlLmNvbmZpZy54YXhpcy5sYWJlbHMuc3R5bGUuZm9udFNpemUsMTApLzEuNSotMSksaS50cmFuc2xhdGVYQXhpc1k9aS50cmFuc2xhdGVYQXhpc1krZS5jb25maWcueGF4aXMubGFiZWxzLm9mZnNldFksaS50cmFuc2xhdGVYQXhpc1g9aS50cmFuc2xhdGVYQXhpc1grZS5jb25maWcueGF4aXMubGFiZWxzLm9mZnNldFg7dmFyIGw9dGhpcy55QXhpc1dpZHRoLGg9dGhpcy54QXhpc0hlaWdodDtpLnhBeGlzTGFiZWxzSGVpZ2h0PXRoaXMueEF4aXNIZWlnaHQtbi5oZWlnaHQsaS54QXhpc0dyb3VwTGFiZWxzSGVpZ2h0PWkueEF4aXNMYWJlbHNIZWlnaHQtci5oZWlnaHQsaS54QXhpc0xhYmVsc1dpZHRoPXRoaXMueEF4aXNXaWR0aCxpLnhBeGlzSGVpZ2h0PXRoaXMueEF4aXNIZWlnaHQ7dmFyIGM9MTA7KFwicmFkYXJcIj09PWUuY29uZmlnLmNoYXJ0LnR5cGV8fHRoaXMuaXNTcGFya2xpbmUpJiYobD0wLGg9aS5nb2xkZW5QYWRkaW5nKSx0aGlzLmlzU3BhcmtsaW5lJiYodGhpcy5sZ1JlY3Q9e2hlaWdodDowLHdpZHRoOjB9KSwodGhpcy5pc1NwYXJrbGluZXx8XCJ0cmVlbWFwXCI9PT1lLmNvbmZpZy5jaGFydC50eXBlKSYmKGw9MCxoPTAsYz0wKSx0aGlzLmlzU3BhcmtsaW5lfHx0aGlzLmRpbVhBeGlzLmFkZGl0aW9uYWxQYWRkaW5nWExhYmVscyhyKTt2YXIgZD1mdW5jdGlvbigpe2kudHJhbnNsYXRlWD1sLGkuZ3JpZEhlaWdodD1pLnN2Z0hlaWdodC10LmxnUmVjdC5oZWlnaHQtaC0odC5pc1NwYXJrbGluZXx8XCJ0cmVlbWFwXCI9PT1lLmNvbmZpZy5jaGFydC50eXBlPzA6ZS5nbG9iYWxzLnJvdGF0ZVhMYWJlbHM/MTA6MTUpLGkuZ3JpZFdpZHRoPWkuc3ZnV2lkdGgtbH07c3dpdGNoKFwidG9wXCI9PT1lLmNvbmZpZy54YXhpcy5wb3NpdGlvbiYmKGM9aS54QXhpc0hlaWdodC1lLmNvbmZpZy54YXhpcy5heGlzVGlja3MuaGVpZ2h0LTUpLGUuY29uZmlnLmxlZ2VuZC5wb3NpdGlvbil7Y2FzZVwiYm90dG9tXCI6aS50cmFuc2xhdGVZPWMsZCgpO2JyZWFrO2Nhc2VcInRvcFwiOmkudHJhbnNsYXRlWT10aGlzLmxnUmVjdC5oZWlnaHQrYyxkKCk7YnJlYWs7Y2FzZVwibGVmdFwiOmkudHJhbnNsYXRlWT1jLGkudHJhbnNsYXRlWD10aGlzLmxnUmVjdC53aWR0aCtsLGkuZ3JpZEhlaWdodD1pLnN2Z0hlaWdodC1oLTEyLGkuZ3JpZFdpZHRoPWkuc3ZnV2lkdGgtdGhpcy5sZ1JlY3Qud2lkdGgtbDticmVhaztjYXNlXCJyaWdodFwiOmkudHJhbnNsYXRlWT1jLGkudHJhbnNsYXRlWD1sLGkuZ3JpZEhlaWdodD1pLnN2Z0hlaWdodC1oLTEyLGkuZ3JpZFdpZHRoPWkuc3ZnV2lkdGgtdGhpcy5sZ1JlY3Qud2lkdGgtbC01O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiTGVnZW5kIHBvc2l0aW9uIG5vdCBzdXBwb3J0ZWRcIil9dGhpcy5kaW1HcmlkLnNldEdyaWRYUG9zRm9yRHVhbFlBeGlzKHMsYSksbmV3IHEodGhpcy5jdHgpLnNldFlBeGlzWFBvc2l0aW9uKGEscyl9fSx7a2V5Olwic2V0RGltZW5zaW9uc0Zvck5vbkF4aXNDaGFydHNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMudyxlPXQuZ2xvYmFscyxpPXQuY29uZmlnLGE9MDt0LmNvbmZpZy5sZWdlbmQuc2hvdyYmIXQuY29uZmlnLmxlZ2VuZC5mbG9hdGluZyYmKGE9MjApO3ZhciBzPVwicGllXCI9PT1pLmNoYXJ0LnR5cGV8fFwicG9sYXJBcmVhXCI9PT1pLmNoYXJ0LnR5cGV8fFwiZG9udXRcIj09PWkuY2hhcnQudHlwZT9cInBpZVwiOlwicmFkaWFsQmFyXCIscj1pLnBsb3RPcHRpb25zW3NdLm9mZnNldFksbz1pLnBsb3RPcHRpb25zW3NdLm9mZnNldFg7aWYoIWkubGVnZW5kLnNob3d8fGkubGVnZW5kLmZsb2F0aW5nKXJldHVybiBlLmdyaWRIZWlnaHQ9ZS5zdmdIZWlnaHQtaS5ncmlkLnBhZGRpbmcubGVmdCtpLmdyaWQucGFkZGluZy5yaWdodCxlLmdyaWRXaWR0aD1lLmdyaWRIZWlnaHQsZS50cmFuc2xhdGVZPXIsdm9pZChlLnRyYW5zbGF0ZVg9bysoZS5zdmdXaWR0aC1lLmdyaWRXaWR0aCkvMik7c3dpdGNoKGkubGVnZW5kLnBvc2l0aW9uKXtjYXNlXCJib3R0b21cIjplLmdyaWRIZWlnaHQ9ZS5zdmdIZWlnaHQtdGhpcy5sZ1JlY3QuaGVpZ2h0LWUuZ29sZGVuUGFkZGluZyxlLmdyaWRXaWR0aD1lLnN2Z1dpZHRoLGUudHJhbnNsYXRlWT1yLTEwLGUudHJhbnNsYXRlWD1vKyhlLnN2Z1dpZHRoLWUuZ3JpZFdpZHRoKS8yO2JyZWFrO2Nhc2VcInRvcFwiOmUuZ3JpZEhlaWdodD1lLnN2Z0hlaWdodC10aGlzLmxnUmVjdC5oZWlnaHQtZS5nb2xkZW5QYWRkaW5nLGUuZ3JpZFdpZHRoPWUuc3ZnV2lkdGgsZS50cmFuc2xhdGVZPXRoaXMubGdSZWN0LmhlaWdodCtyKzEwLGUudHJhbnNsYXRlWD1vKyhlLnN2Z1dpZHRoLWUuZ3JpZFdpZHRoKS8yO2JyZWFrO2Nhc2VcImxlZnRcIjplLmdyaWRXaWR0aD1lLnN2Z1dpZHRoLXRoaXMubGdSZWN0LndpZHRoLWEsZS5ncmlkSGVpZ2h0PVwiYXV0b1wiIT09aS5jaGFydC5oZWlnaHQ/ZS5zdmdIZWlnaHQ6ZS5ncmlkV2lkdGgsZS50cmFuc2xhdGVZPXIsZS50cmFuc2xhdGVYPW8rdGhpcy5sZ1JlY3Qud2lkdGgrYTticmVhaztjYXNlXCJyaWdodFwiOmUuZ3JpZFdpZHRoPWUuc3ZnV2lkdGgtdGhpcy5sZ1JlY3Qud2lkdGgtYS01LGUuZ3JpZEhlaWdodD1cImF1dG9cIiE9PWkuY2hhcnQuaGVpZ2h0P2Uuc3ZnSGVpZ2h0OmUuZ3JpZFdpZHRoLGUudHJhbnNsYXRlWT1yLGUudHJhbnNsYXRlWD1vKzEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiTGVnZW5kIHBvc2l0aW9uIG5vdCBzdXBwb3J0ZWRcIil9fX0se2tleTpcImNvbmRpdGlvbmFsQ2hlY2tzRm9yQXhpc0Nvb3Jkc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10aGlzLncscz1hLmdsb2JhbHMuaGFzR3JvdXBzPzI6MSxyPWkuaGVpZ2h0K3QuaGVpZ2h0K2UuaGVpZ2h0LG89YS5nbG9iYWxzLmlzTXVsdGlMaW5lWD8xLjI6YS5nbG9iYWxzLkxJTkVfSEVJR0hUX1JBVElPLG49YS5nbG9iYWxzLnJvdGF0ZVhMYWJlbHM/MjI6MTAsbD1hLmdsb2JhbHMucm90YXRlWExhYmVscyYmXCJib3R0b21cIj09PWEuY29uZmlnLmxlZ2VuZC5wb3NpdGlvbj8xMDowO3RoaXMueEF4aXNIZWlnaHQ9cipvK3MqbitsLHRoaXMueEF4aXNXaWR0aD10LndpZHRoLHRoaXMueEF4aXNIZWlnaHQtZS5oZWlnaHQ+YS5jb25maWcueGF4aXMubGFiZWxzLm1heEhlaWdodCYmKHRoaXMueEF4aXNIZWlnaHQ9YS5jb25maWcueGF4aXMubGFiZWxzLm1heEhlaWdodCksYS5jb25maWcueGF4aXMubGFiZWxzLm1pbkhlaWdodCYmdGhpcy54QXhpc0hlaWdodDxhLmNvbmZpZy54YXhpcy5sYWJlbHMubWluSGVpZ2h0JiYodGhpcy54QXhpc0hlaWdodD1hLmNvbmZpZy54YXhpcy5sYWJlbHMubWluSGVpZ2h0KSxhLmNvbmZpZy54YXhpcy5mbG9hdGluZyYmKHRoaXMueEF4aXNIZWlnaHQ9MCk7dmFyIGg9MCxjPTA7YS5jb25maWcueWF4aXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7aCs9dC5sYWJlbHMubWluV2lkdGgsYys9dC5sYWJlbHMubWF4V2lkdGh9KSksdGhpcy55QXhpc1dpZHRoPGgmJih0aGlzLnlBeGlzV2lkdGg9aCksdGhpcy55QXhpc1dpZHRoPmMmJih0aGlzLnlBeGlzV2lkdGg9Yyl9fV0pLHR9KCksbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLnc9ZS53LHRoaXMubGdDdHg9ZX1yZXR1cm4gcih0LFt7a2V5OlwiZ2V0TGVnZW5kU3R5bGVzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJ0ZXh0L2Nzc1wiKTt2YXIgZT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlxcdFxcbiAgICBcXHRcXG4gICAgICAuYXBleGNoYXJ0cy1sZWdlbmQge1xcdFxcbiAgICAgICAgZGlzcGxheTogZmxleDtcXHRcXG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xcdFxcbiAgICAgICAgcGFkZGluZzogMCAxMHB4O1xcdFxcbiAgICAgIH1cXHRcXG4gICAgICAuYXBleGNoYXJ0cy1sZWdlbmQuYXB4LWxlZ2VuZC1wb3NpdGlvbi1ib3R0b20sIC5hcGV4Y2hhcnRzLWxlZ2VuZC5hcHgtbGVnZW5kLXBvc2l0aW9uLXRvcCB7XFx0XFxuICAgICAgICBmbGV4LXdyYXA6IHdyYXBcXHRcXG4gICAgICB9XFx0XFxuICAgICAgLmFwZXhjaGFydHMtbGVnZW5kLmFweC1sZWdlbmQtcG9zaXRpb24tcmlnaHQsIC5hcGV4Y2hhcnRzLWxlZ2VuZC5hcHgtbGVnZW5kLXBvc2l0aW9uLWxlZnQge1xcdFxcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXHRcXG4gICAgICAgIGJvdHRvbTogMDtcXHRcXG4gICAgICB9XFx0XFxuICAgICAgLmFwZXhjaGFydHMtbGVnZW5kLmFweC1sZWdlbmQtcG9zaXRpb24tYm90dG9tLmFwZXhjaGFydHMtYWxpZ24tbGVmdCwgLmFwZXhjaGFydHMtbGVnZW5kLmFweC1sZWdlbmQtcG9zaXRpb24tdG9wLmFwZXhjaGFydHMtYWxpZ24tbGVmdCwgLmFwZXhjaGFydHMtbGVnZW5kLmFweC1sZWdlbmQtcG9zaXRpb24tcmlnaHQsIC5hcGV4Y2hhcnRzLWxlZ2VuZC5hcHgtbGVnZW5kLXBvc2l0aW9uLWxlZnQge1xcdFxcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcdFxcbiAgICAgIH1cXHRcXG4gICAgICAuYXBleGNoYXJ0cy1sZWdlbmQuYXB4LWxlZ2VuZC1wb3NpdGlvbi1ib3R0b20uYXBleGNoYXJ0cy1hbGlnbi1jZW50ZXIsIC5hcGV4Y2hhcnRzLWxlZ2VuZC5hcHgtbGVnZW5kLXBvc2l0aW9uLXRvcC5hcGV4Y2hhcnRzLWFsaWduLWNlbnRlciB7XFx0XFxuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgIFxcdFxcbiAgICAgIH1cXHRcXG4gICAgICAuYXBleGNoYXJ0cy1sZWdlbmQuYXB4LWxlZ2VuZC1wb3NpdGlvbi1ib3R0b20uYXBleGNoYXJ0cy1hbGlnbi1yaWdodCwgLmFwZXhjaGFydHMtbGVnZW5kLmFweC1sZWdlbmQtcG9zaXRpb24tdG9wLmFwZXhjaGFydHMtYWxpZ24tcmlnaHQge1xcdFxcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXHRcXG4gICAgICB9XFx0XFxuICAgICAgLmFwZXhjaGFydHMtbGVnZW5kLXNlcmllcyB7XFx0XFxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFx0XFxuICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xcdFxcbiAgICAgIH1cXHRcXG4gICAgICAuYXBleGNoYXJ0cy1sZWdlbmQuYXB4LWxlZ2VuZC1wb3NpdGlvbi1ib3R0b20gLmFwZXhjaGFydHMtbGVnZW5kLXNlcmllcywgLmFwZXhjaGFydHMtbGVnZW5kLmFweC1sZWdlbmQtcG9zaXRpb24tdG9wIC5hcGV4Y2hhcnRzLWxlZ2VuZC1zZXJpZXN7XFx0XFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcdFxcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXHRcXG4gICAgICB9XFx0XFxuICAgICAgLmFwZXhjaGFydHMtbGVnZW5kLXRleHQge1xcdFxcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcdFxcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xcdFxcbiAgICAgIH1cXHRcXG4gICAgICAuYXBleGNoYXJ0cy1sZWdlbmQtdGV4dCAqLCAuYXBleGNoYXJ0cy1sZWdlbmQtbWFya2VyICoge1xcdFxcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFx0XFxuICAgICAgfVxcdFxcbiAgICAgIC5hcGV4Y2hhcnRzLWxlZ2VuZC1tYXJrZXIge1xcdFxcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcdFxcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcdFxcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcdFxcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcHg7XFx0XFxuICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgICAgIH1cXHRcXG4gICAgICBcXHRcXG4gICAgICAuYXBleGNoYXJ0cy1sZWdlbmQuYXBleGNoYXJ0cy1hbGlnbi1yaWdodCAuYXBleGNoYXJ0cy1sZWdlbmQtc2VyaWVzLCAuYXBleGNoYXJ0cy1sZWdlbmQuYXBleGNoYXJ0cy1hbGlnbi1sZWZ0IC5hcGV4Y2hhcnRzLWxlZ2VuZC1zZXJpZXN7XFx0XFxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFx0XFxuICAgICAgfVxcdFxcbiAgICAgIC5hcGV4Y2hhcnRzLWxlZ2VuZC1zZXJpZXMuYXBleGNoYXJ0cy1uby1jbGljayB7XFx0XFxuICAgICAgICBjdXJzb3I6IGF1dG87XFx0XFxuICAgICAgfVxcdFxcbiAgICAgIC5hcGV4Y2hhcnRzLWxlZ2VuZCAuYXBleGNoYXJ0cy1oaWRkZW4temVyby1zZXJpZXMsIC5hcGV4Y2hhcnRzLWxlZ2VuZCAuYXBleGNoYXJ0cy1oaWRkZW4tbnVsbC1zZXJpZXMge1xcdFxcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcdFxcbiAgICAgIH1cXHRcXG4gICAgICAuYXBleGNoYXJ0cy1pbmFjdGl2ZS1sZWdlbmQge1xcdFxcbiAgICAgICAgb3BhY2l0eTogMC40NTtcXHRcXG4gICAgICB9XCIpO3JldHVybiB0LmFwcGVuZENoaWxkKGUpLHR9fSx7a2V5OlwiZ2V0TGVnZW5kQkJveFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtbGVnZW5kXCIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGU9dC53aWR0aDtyZXR1cm57Y2x3aDp0LmhlaWdodCxjbHd3OmV9fX0se2tleTpcImFwcGVuZFRvRm9yZWlnbk9iamVjdFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53Lmdsb2JhbHM7dC5kb20uZWxMZWdlbmRGb3JlaWduPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LlNWR05TLFwiZm9yZWlnbk9iamVjdFwiKTt2YXIgZT10LmRvbS5lbExlZ2VuZEZvcmVpZ247ZS5zZXRBdHRyaWJ1dGUoXCJ4XCIsMCksZS5zZXRBdHRyaWJ1dGUoXCJ5XCIsMCksZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLHQuc3ZnV2lkdGgpLGUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsdC5zdmdIZWlnaHQpLHQuZG9tLmVsTGVnZW5kV3JhcC5zZXRBdHRyaWJ1dGUoXCJ4bWxuc1wiLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSxlLmFwcGVuZENoaWxkKHQuZG9tLmVsTGVnZW5kV3JhcCksZS5hcHBlbmRDaGlsZCh0aGlzLmdldExlZ2VuZFN0eWxlcygpKSx0LmRvbS5QYXBlci5ub2RlLmluc2VydEJlZm9yZShlLHQuZG9tLmVsR3JhcGhpY2FsLm5vZGUpfX0se2tleTpcInRvZ2dsZURhdGFTZXJpZXNcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMsYT10aGlzLnc7aWYoYS5nbG9iYWxzLmF4aXNDaGFydHN8fFwicmFkaWFsQmFyXCI9PT1hLmNvbmZpZy5jaGFydC50eXBlKXthLmdsb2JhbHMucmVzaXplZD0hMDt2YXIgcz1udWxsLHI9bnVsbDtpZihhLmdsb2JhbHMucmlzaW5nU2VyaWVzPVtdLGEuZ2xvYmFscy5heGlzQ2hhcnRzPyhzPWEuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1zZXJpZXNbZGF0YVxcXFw6cmVhbEluZGV4PSdcIi5jb25jYXQodCxcIiddXCIpKSxyPXBhcnNlSW50KHMuZ2V0QXR0cmlidXRlKFwiZGF0YTpyZWFsSW5kZXhcIiksMTApKToocz1hLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtc2VyaWVzW3JlbD0nXCIuY29uY2F0KHQrMSxcIiddXCIpKSxyPXBhcnNlSW50KHMuZ2V0QXR0cmlidXRlKFwicmVsXCIpLDEwKS0xKSxlKVt7Y3M6YS5nbG9iYWxzLmNvbGxhcHNlZFNlcmllcyxjc2k6YS5nbG9iYWxzLmNvbGxhcHNlZFNlcmllc0luZGljZXN9LHtjczphLmdsb2JhbHMuYW5jaWxsYXJ5Q29sbGFwc2VkU2VyaWVzLGNzaTphLmdsb2JhbHMuYW5jaWxsYXJ5Q29sbGFwc2VkU2VyaWVzSW5kaWNlc31dLmZvckVhY2goKGZ1bmN0aW9uKHQpe2kucmlzZUNvbGxhcHNlZFNlcmllcyh0LmNzLHQuY3NpLHIpfSkpO2Vsc2UgdGhpcy5oaWRlU2VyaWVzKHtzZXJpZXNFbDpzLHJlYWxJbmRleDpyfSl9ZWxzZXt2YXIgbz1hLmdsb2JhbHMuZG9tLlBhcGVyLnNlbGVjdChcIiAuYXBleGNoYXJ0cy1zZXJpZXNbcmVsPSdcIi5jb25jYXQodCsxLFwiJ10gcGF0aFwiKSksbj1hLmNvbmZpZy5jaGFydC50eXBlO2lmKFwicGllXCI9PT1ufHxcInBvbGFyQXJlYVwiPT09bnx8XCJkb251dFwiPT09bil7dmFyIGw9YS5jb25maWcucGxvdE9wdGlvbnMucGllLmRvbnV0LmxhYmVscztuZXcgbSh0aGlzLmxnQ3R4LmN0eCkucGF0aE1vdXNlRG93bihvLm1lbWJlcnNbMF0sbnVsbCksdGhpcy5sZ0N0eC5jdHgucGllLnByaW50RGF0YUxhYmVsc0lubmVyKG8ubWVtYmVyc1swXS5ub2RlLGwpfW8uZmlyZShcImNsaWNrXCIpfX19LHtrZXk6XCJoaWRlU2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zZXJpZXNFbCxpPXQucmVhbEluZGV4LGE9dGhpcy53LHM9eC5jbG9uZShhLmNvbmZpZy5zZXJpZXMpO2lmKGEuZ2xvYmFscy5heGlzQ2hhcnRzKXt2YXIgcj0hMTtpZihhLmNvbmZpZy55YXhpc1tpXSYmYS5jb25maWcueWF4aXNbaV0uc2hvdyYmYS5jb25maWcueWF4aXNbaV0uc2hvd0Fsd2F5cyYmKHI9ITAsYS5nbG9iYWxzLmFuY2lsbGFyeUNvbGxhcHNlZFNlcmllc0luZGljZXMuaW5kZXhPZihpKTwwJiYoYS5nbG9iYWxzLmFuY2lsbGFyeUNvbGxhcHNlZFNlcmllcy5wdXNoKHtpbmRleDppLGRhdGE6c1tpXS5kYXRhLnNsaWNlKCksdHlwZTplLnBhcmVudE5vZGUuY2xhc3NOYW1lLmJhc2VWYWwuc3BsaXQoXCItXCIpWzFdfSksYS5nbG9iYWxzLmFuY2lsbGFyeUNvbGxhcHNlZFNlcmllc0luZGljZXMucHVzaChpKSkpLCFyKXthLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzLnB1c2goe2luZGV4OmksZGF0YTpzW2ldLmRhdGEuc2xpY2UoKSx0eXBlOmUucGFyZW50Tm9kZS5jbGFzc05hbWUuYmFzZVZhbC5zcGxpdChcIi1cIilbMV19KSxhLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzSW5kaWNlcy5wdXNoKGkpO3ZhciBvPWEuZ2xvYmFscy5yaXNpbmdTZXJpZXMuaW5kZXhPZihpKTthLmdsb2JhbHMucmlzaW5nU2VyaWVzLnNwbGljZShvLDEpfX1lbHNlIGEuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXMucHVzaCh7aW5kZXg6aSxkYXRhOnNbaV19KSxhLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzSW5kaWNlcy5wdXNoKGkpO2Zvcih2YXIgbj1lLmNoaWxkTm9kZXMsbD0wO2w8bi5sZW5ndGg7bCsrKW5bbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXBleGNoYXJ0cy1zZXJpZXMtbWFya2Vycy13cmFwXCIpJiYobltsXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhcGV4Y2hhcnRzLWhpZGVcIik/bltsXS5jbGFzc0xpc3QucmVtb3ZlKFwiYXBleGNoYXJ0cy1oaWRlXCIpOm5bbF0uY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtaGlkZVwiKSk7YS5nbG9iYWxzLmFsbFNlcmllc0NvbGxhcHNlZD1hLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzLmxlbmd0aD09PWEuY29uZmlnLnNlcmllcy5sZW5ndGgscz10aGlzLl9nZXRTZXJpZXNCYXNlZE9uQ29sbGFwc2VkU3RhdGUocyksdGhpcy5sZ0N0eC5jdHgudXBkYXRlSGVscGVycy5fdXBkYXRlU2VyaWVzKHMsYS5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5keW5hbWljQW5pbWF0aW9uLmVuYWJsZWQpfX0se2tleTpcInJpc2VDb2xsYXBzZWRTZXJpZXNcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dmFyIGE9dGhpcy53LHM9eC5jbG9uZShhLmNvbmZpZy5zZXJpZXMpO2lmKHQubGVuZ3RoPjApe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaW5kZXg9PT1pJiYoYS5nbG9iYWxzLmF4aXNDaGFydHM/KHNbaV0uZGF0YT10W3JdLmRhdGEuc2xpY2UoKSx0LnNwbGljZShyLDEpLGUuc3BsaWNlKHIsMSksYS5nbG9iYWxzLnJpc2luZ1Nlcmllcy5wdXNoKGkpKTooc1tpXT10W3JdLmRhdGEsdC5zcGxpY2UociwxKSxlLnNwbGljZShyLDEpLGEuZ2xvYmFscy5yaXNpbmdTZXJpZXMucHVzaChpKSkpO3M9dGhpcy5fZ2V0U2VyaWVzQmFzZWRPbkNvbGxhcHNlZFN0YXRlKHMpLHRoaXMubGdDdHguY3R4LnVwZGF0ZUhlbHBlcnMuX3VwZGF0ZVNlcmllcyhzLGEuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuZHluYW1pY0FuaW1hdGlvbi5lbmFibGVkKX19fSx7a2V5OlwiX2dldFNlcmllc0Jhc2VkT25Db2xsYXBzZWRTdGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudztyZXR1cm4gZS5nbG9iYWxzLmF4aXNDaGFydHM/dC5mb3JFYWNoKChmdW5jdGlvbihpLGEpe2UuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXNJbmRpY2VzLmluZGV4T2YoYSk+LTEmJih0W2FdLmRhdGE9W10pfSkpOnQuZm9yRWFjaCgoZnVuY3Rpb24oaSxhKXtlLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzSW5kaWNlcy5pbmRleE9mKGEpPi0xJiYodFthXT0wKX0pKSx0fX1dKSx0fSgpLGx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLGkpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLncsdGhpcy5vbkxlZ2VuZENsaWNrPXRoaXMub25MZWdlbmRDbGljay5iaW5kKHRoaXMpLHRoaXMub25MZWdlbmRIb3ZlcmVkPXRoaXMub25MZWdlbmRIb3ZlcmVkLmJpbmQodGhpcyksdGhpcy5pc0JhcnNEaXN0cmlidXRlZD1cImJhclwiPT09dGhpcy53LmNvbmZpZy5jaGFydC50eXBlJiZ0aGlzLncuY29uZmlnLnBsb3RPcHRpb25zLmJhci5kaXN0cmlidXRlZCYmMT09PXRoaXMudy5jb25maWcuc2VyaWVzLmxlbmd0aCx0aGlzLmxlZ2VuZEhlbHBlcnM9bmV3IG50KHRoaXMpfXJldHVybiByKHQsW3trZXk6XCJpbml0XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT10Lmdsb2JhbHMsaT10LmNvbmZpZztpZigoaS5sZWdlbmQuc2hvd0ZvclNpbmdsZVNlcmllcyYmMT09PWUuc2VyaWVzLmxlbmd0aHx8dGhpcy5pc0JhcnNEaXN0cmlidXRlZHx8ZS5zZXJpZXMubGVuZ3RoPjF8fCFlLmF4aXNDaGFydHMpJiZpLmxlZ2VuZC5zaG93KXtmb3IoO2UuZG9tLmVsTGVnZW5kV3JhcC5maXJzdENoaWxkOyllLmRvbS5lbExlZ2VuZFdyYXAucmVtb3ZlQ2hpbGQoZS5kb20uZWxMZWdlbmRXcmFwLmZpcnN0Q2hpbGQpO3RoaXMuZHJhd0xlZ2VuZHMoKSx4LmlzSUUxMSgpP2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZCh0aGlzLmxlZ2VuZEhlbHBlcnMuZ2V0TGVnZW5kU3R5bGVzKCkpOnRoaXMubGVnZW5kSGVscGVycy5hcHBlbmRUb0ZvcmVpZ25PYmplY3QoKSxcImJvdHRvbVwiPT09aS5sZWdlbmQucG9zaXRpb258fFwidG9wXCI9PT1pLmxlZ2VuZC5wb3NpdGlvbj90aGlzLmxlZ2VuZEFsaWduSG9yaXpvbnRhbCgpOlwicmlnaHRcIiE9PWkubGVnZW5kLnBvc2l0aW9uJiZcImxlZnRcIiE9PWkubGVnZW5kLnBvc2l0aW9ufHx0aGlzLmxlZ2VuZEFsaWduVmVydGljYWwoKX19fSx7a2V5OlwiZHJhd0xlZ2VuZHNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLncsaT1lLmNvbmZpZy5sZWdlbmQuZm9udEZhbWlseSxhPWUuZ2xvYmFscy5zZXJpZXNOYW1lcyxzPWUuZ2xvYmFscy5jb2xvcnMuc2xpY2UoKTtpZihcImhlYXRtYXBcIj09PWUuY29uZmlnLmNoYXJ0LnR5cGUpe3ZhciByPWUuY29uZmlnLnBsb3RPcHRpb25zLmhlYXRtYXAuY29sb3JTY2FsZS5yYW5nZXM7YT1yLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZT90Lm5hbWU6dC5mcm9tK1wiIC0gXCIrdC50b30pKSxzPXIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKX1lbHNlIHRoaXMuaXNCYXJzRGlzdHJpYnV0ZWQmJihhPWUuZ2xvYmFscy5sYWJlbHMuc2xpY2UoKSk7ZS5jb25maWcubGVnZW5kLmN1c3RvbUxlZ2VuZEl0ZW1zLmxlbmd0aCYmKGE9ZS5jb25maWcubGVnZW5kLmN1c3RvbUxlZ2VuZEl0ZW1zKTtmb3IodmFyIG89ZS5nbG9iYWxzLmxlZ2VuZEZvcm1hdHRlcixuPWUuY29uZmlnLmxlZ2VuZC5pbnZlcnNlT3JkZXIsbD1uP2EubGVuZ3RoLTE6MDtuP2w+PTA6bDw9YS5sZW5ndGgtMTtuP2wtLTpsKyspe3ZhciBoPW8oYVtsXSx7c2VyaWVzSW5kZXg6bCx3OmV9KSxjPSExLGQ9ITE7aWYoZS5nbG9iYWxzLmNvbGxhcHNlZFNlcmllcy5sZW5ndGg+MClmb3IodmFyIGc9MDtnPGUuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXMubGVuZ3RoO2crKyllLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzW2ddLmluZGV4PT09bCYmKGM9ITApO2lmKGUuZ2xvYmFscy5hbmNpbGxhcnlDb2xsYXBzZWRTZXJpZXNJbmRpY2VzLmxlbmd0aD4wKWZvcih2YXIgdT0wO3U8ZS5nbG9iYWxzLmFuY2lsbGFyeUNvbGxhcHNlZFNlcmllc0luZGljZXMubGVuZ3RoO3UrKyllLmdsb2JhbHMuYW5jaWxsYXJ5Q29sbGFwc2VkU2VyaWVzSW5kaWNlc1t1XT09PWwmJihkPSEwKTt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtmLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLWxlZ2VuZC1tYXJrZXJcIik7dmFyIHA9ZS5jb25maWcubGVnZW5kLm1hcmtlcnMub2Zmc2V0WCxiPWUuY29uZmlnLmxlZ2VuZC5tYXJrZXJzLm9mZnNldFksdj1lLmNvbmZpZy5sZWdlbmQubWFya2Vycy5oZWlnaHQsdz1lLmNvbmZpZy5sZWdlbmQubWFya2Vycy53aWR0aCxrPWUuY29uZmlnLmxlZ2VuZC5tYXJrZXJzLnN0cm9rZVdpZHRoLEE9ZS5jb25maWcubGVnZW5kLm1hcmtlcnMuc3Ryb2tlQ29sb3IsUz1lLmNvbmZpZy5sZWdlbmQubWFya2Vycy5yYWRpdXMsQz1mLnN0eWxlO0MuYmFja2dyb3VuZD1zW2xdLEMuY29sb3I9c1tsXSxDLnNldFByb3BlcnR5KFwiYmFja2dyb3VuZFwiLHNbbF0sXCJpbXBvcnRhbnRcIiksZS5jb25maWcubGVnZW5kLm1hcmtlcnMuZmlsbENvbG9ycyYmZS5jb25maWcubGVnZW5kLm1hcmtlcnMuZmlsbENvbG9yc1tsXSYmKEMuYmFja2dyb3VuZD1lLmNvbmZpZy5sZWdlbmQubWFya2Vycy5maWxsQ29sb3JzW2xdKSx2b2lkIDAhPT1lLmdsb2JhbHMuc2VyaWVzQ29sb3JzW2xdJiYoQy5iYWNrZ3JvdW5kPWUuZ2xvYmFscy5zZXJpZXNDb2xvcnNbbF0sQy5jb2xvcj1lLmdsb2JhbHMuc2VyaWVzQ29sb3JzW2xdKSxDLmhlaWdodD1BcnJheS5pc0FycmF5KHYpP3BhcnNlRmxvYXQodltsXSkrXCJweFwiOnBhcnNlRmxvYXQodikrXCJweFwiLEMud2lkdGg9QXJyYXkuaXNBcnJheSh3KT9wYXJzZUZsb2F0KHdbbF0pK1wicHhcIjpwYXJzZUZsb2F0KHcpK1wicHhcIixDLmxlZnQ9KEFycmF5LmlzQXJyYXkocCk/cGFyc2VGbG9hdChwW2xdKTpwYXJzZUZsb2F0KHApKStcInB4XCIsQy50b3A9KEFycmF5LmlzQXJyYXkoYik/cGFyc2VGbG9hdChiW2xdKTpwYXJzZUZsb2F0KGIpKStcInB4XCIsQy5ib3JkZXJXaWR0aD1BcnJheS5pc0FycmF5KGspP2tbbF06ayxDLmJvcmRlckNvbG9yPUFycmF5LmlzQXJyYXkoQSk/QVtsXTpBLEMuYm9yZGVyUmFkaXVzPUFycmF5LmlzQXJyYXkoUyk/cGFyc2VGbG9hdChTW2xdKStcInB4XCI6cGFyc2VGbG9hdChTKStcInB4XCIsZS5jb25maWcubGVnZW5kLm1hcmtlcnMuY3VzdG9tSFRNTCYmKEFycmF5LmlzQXJyYXkoZS5jb25maWcubGVnZW5kLm1hcmtlcnMuY3VzdG9tSFRNTCk/ZS5jb25maWcubGVnZW5kLm1hcmtlcnMuY3VzdG9tSFRNTFtsXSYmKGYuaW5uZXJIVE1MPWUuY29uZmlnLmxlZ2VuZC5tYXJrZXJzLmN1c3RvbUhUTUxbbF0oKSk6Zi5pbm5lckhUTUw9ZS5jb25maWcubGVnZW5kLm1hcmtlcnMuY3VzdG9tSFRNTCgpKSxtLnNldEF0dHJzKGYse3JlbDpsKzEsXCJkYXRhOmNvbGxhcHNlZFwiOmN8fGR9KSwoY3x8ZCkmJmYuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtaW5hY3RpdmUtbGVnZW5kXCIpO3ZhciBMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtQLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLWxlZ2VuZC10ZXh0XCIpLFAuaW5uZXJIVE1MPUFycmF5LmlzQXJyYXkoaCk/aC5qb2luKFwiIFwiKTpoO3ZhciBUPWUuY29uZmlnLmxlZ2VuZC5sYWJlbHMudXNlU2VyaWVzQ29sb3JzP2UuZ2xvYmFscy5jb2xvcnNbbF06ZS5jb25maWcubGVnZW5kLmxhYmVscy5jb2xvcnM7VHx8KFQ9ZS5jb25maWcuY2hhcnQuZm9yZUNvbG9yKSxQLnN0eWxlLmNvbG9yPVQsUC5zdHlsZS5mb250U2l6ZT1wYXJzZUZsb2F0KGUuY29uZmlnLmxlZ2VuZC5mb250U2l6ZSkrXCJweFwiLFAuc3R5bGUuZm9udFdlaWdodD1lLmNvbmZpZy5sZWdlbmQuZm9udFdlaWdodCxQLnN0eWxlLmZvbnRGYW1pbHk9aXx8ZS5jb25maWcuY2hhcnQuZm9udEZhbWlseSxtLnNldEF0dHJzKFAse3JlbDpsKzEsaTpsLFwiZGF0YTpkZWZhdWx0LXRleHRcIjplbmNvZGVVUklDb21wb25lbnQoaCksXCJkYXRhOmNvbGxhcHNlZFwiOmN8fGR9KSxMLmFwcGVuZENoaWxkKGYpLEwuYXBwZW5kQ2hpbGQoUCk7dmFyIE09bmV3IHkodGhpcy5jdHgpO2lmKCFlLmNvbmZpZy5sZWdlbmQuc2hvd0Zvclplcm9TZXJpZXMpMD09PU0uZ2V0U2VyaWVzVG90YWxCeUluZGV4KGwpJiZNLnNlcmllc0hhdmVTYW1lVmFsdWVzKGwpJiYhTS5pc1Nlcmllc051bGwobCkmJi0xPT09ZS5nbG9iYWxzLmNvbGxhcHNlZFNlcmllc0luZGljZXMuaW5kZXhPZihsKSYmLTE9PT1lLmdsb2JhbHMuYW5jaWxsYXJ5Q29sbGFwc2VkU2VyaWVzSW5kaWNlcy5pbmRleE9mKGwpJiZMLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLWhpZGRlbi16ZXJvLXNlcmllc1wiKTtlLmNvbmZpZy5sZWdlbmQuc2hvd0Zvck51bGxTZXJpZXN8fE0uaXNTZXJpZXNOdWxsKGwpJiYtMT09PWUuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXNJbmRpY2VzLmluZGV4T2YobCkmJi0xPT09ZS5nbG9iYWxzLmFuY2lsbGFyeUNvbGxhcHNlZFNlcmllc0luZGljZXMuaW5kZXhPZihsKSYmTC5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1oaWRkZW4tbnVsbC1zZXJpZXNcIiksZS5nbG9iYWxzLmRvbS5lbExlZ2VuZFdyYXAuYXBwZW5kQ2hpbGQoTCksZS5nbG9iYWxzLmRvbS5lbExlZ2VuZFdyYXAuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtYWxpZ24tXCIuY29uY2F0KGUuY29uZmlnLmxlZ2VuZC5ob3Jpem9udGFsQWxpZ24pKSxlLmdsb2JhbHMuZG9tLmVsTGVnZW5kV3JhcC5jbGFzc0xpc3QuYWRkKFwiYXB4LWxlZ2VuZC1wb3NpdGlvbi1cIitlLmNvbmZpZy5sZWdlbmQucG9zaXRpb24pLEwuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtbGVnZW5kLXNlcmllc1wiKSxMLnN0eWxlLm1hcmdpbj1cIlwiLmNvbmNhdChlLmNvbmZpZy5sZWdlbmQuaXRlbU1hcmdpbi52ZXJ0aWNhbCxcInB4IFwiKS5jb25jYXQoZS5jb25maWcubGVnZW5kLml0ZW1NYXJnaW4uaG9yaXpvbnRhbCxcInB4XCIpLGUuZ2xvYmFscy5kb20uZWxMZWdlbmRXcmFwLnN0eWxlLndpZHRoPWUuY29uZmlnLmxlZ2VuZC53aWR0aD9lLmNvbmZpZy5sZWdlbmQud2lkdGgrXCJweFwiOlwiXCIsZS5nbG9iYWxzLmRvbS5lbExlZ2VuZFdyYXAuc3R5bGUuaGVpZ2h0PWUuY29uZmlnLmxlZ2VuZC5oZWlnaHQ/ZS5jb25maWcubGVnZW5kLmhlaWdodCtcInB4XCI6XCJcIixtLnNldEF0dHJzKEwse3JlbDpsKzEsc2VyaWVzTmFtZTp4LmVzY2FwZVN0cmluZyhhW2xdKSxcImRhdGE6Y29sbGFwc2VkXCI6Y3x8ZH0pLChjfHxkKSYmTC5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1pbmFjdGl2ZS1sZWdlbmRcIiksZS5jb25maWcubGVnZW5kLm9uSXRlbUNsaWNrLnRvZ2dsZURhdGFTZXJpZXN8fEwuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtbm8tY2xpY2tcIil9ZS5nbG9iYWxzLmRvbS5lbFdyYXAuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdC5vbkxlZ2VuZENsaWNrLCEwKSxlLmNvbmZpZy5sZWdlbmQub25JdGVtSG92ZXIuaGlnaGxpZ2h0RGF0YVNlcmllcyYmMD09PWUuY29uZmlnLmxlZ2VuZC5jdXN0b21MZWdlbmRJdGVtcy5sZW5ndGgmJihlLmdsb2JhbHMuZG9tLmVsV3JhcC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdC5vbkxlZ2VuZEhvdmVyZWQsITApLGUuZ2xvYmFscy5kb20uZWxXcmFwLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLHQub25MZWdlbmRIb3ZlcmVkLCEwKSl9fSx7a2V5Olwic2V0TGVnZW5kV3JhcFhZXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLncsYT1pLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtbGVnZW5kXCIpLHM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPTAsbz0wO2lmKFwiYm90dG9tXCI9PT1pLmNvbmZpZy5sZWdlbmQucG9zaXRpb24pbys9aS5nbG9iYWxzLnN2Z0hlaWdodC1zLmhlaWdodC8yO2Vsc2UgaWYoXCJ0b3BcIj09PWkuY29uZmlnLmxlZ2VuZC5wb3NpdGlvbil7dmFyIG49bmV3IG90KHRoaXMuY3R4KSxsPW4uZGltSGVscGVycy5nZXRUaXRsZVN1YnRpdGxlQ29vcmRzKFwidGl0bGVcIikuaGVpZ2h0LGg9bi5kaW1IZWxwZXJzLmdldFRpdGxlU3VidGl0bGVDb29yZHMoXCJzdWJ0aXRsZVwiKS5oZWlnaHQ7bz1vKyhsPjA/bC0xMDowKSsoaD4wP2gtMTA6MCl9YS5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIscj1yK3QraS5jb25maWcubGVnZW5kLm9mZnNldFgsbz1vK2UraS5jb25maWcubGVnZW5kLm9mZnNldFksYS5zdHlsZS5sZWZ0PXIrXCJweFwiLGEuc3R5bGUudG9wPW8rXCJweFwiLFwiYm90dG9tXCI9PT1pLmNvbmZpZy5sZWdlbmQucG9zaXRpb24/KGEuc3R5bGUudG9wPVwiYXV0b1wiLGEuc3R5bGUuYm90dG9tPTUtaS5jb25maWcubGVnZW5kLm9mZnNldFkrXCJweFwiKTpcInJpZ2h0XCI9PT1pLmNvbmZpZy5sZWdlbmQucG9zaXRpb24mJihhLnN0eWxlLmxlZnQ9XCJhdXRvXCIsYS5zdHlsZS5yaWdodD0yNStpLmNvbmZpZy5sZWdlbmQub2Zmc2V0WCtcInB4XCIpO1tcIndpZHRoXCIsXCJoZWlnaHRcIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7YS5zdHlsZVt0XSYmKGEuc3R5bGVbdF09cGFyc2VJbnQoaS5jb25maWcubGVnZW5kW3RdLDEwKStcInB4XCIpfSkpfX0se2tleTpcImxlZ2VuZEFsaWduSG9yaXpvbnRhbFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53O3QuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1sZWdlbmRcIikuc3R5bGUucmlnaHQ9MDt2YXIgZT10aGlzLmxlZ2VuZEhlbHBlcnMuZ2V0TGVnZW5kQkJveCgpLGk9bmV3IG90KHRoaXMuY3R4KSxhPWkuZGltSGVscGVycy5nZXRUaXRsZVN1YnRpdGxlQ29vcmRzKFwidGl0bGVcIikscz1pLmRpbUhlbHBlcnMuZ2V0VGl0bGVTdWJ0aXRsZUNvb3JkcyhcInN1YnRpdGxlXCIpLHI9MDtcImJvdHRvbVwiPT09dC5jb25maWcubGVnZW5kLnBvc2l0aW9uP3I9LWUuY2x3aC8xLjg6XCJ0b3BcIj09PXQuY29uZmlnLmxlZ2VuZC5wb3NpdGlvbiYmKHI9YS5oZWlnaHQrcy5oZWlnaHQrdC5jb25maWcudGl0bGUubWFyZ2luK3QuY29uZmlnLnN1YnRpdGxlLm1hcmdpbi0xMCksdGhpcy5zZXRMZWdlbmRXcmFwWFkoMjAscil9fSx7a2V5OlwibGVnZW5kQWxpZ25WZXJ0aWNhbFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9dGhpcy5sZWdlbmRIZWxwZXJzLmdldExlZ2VuZEJCb3goKSxpPTA7XCJsZWZ0XCI9PT10LmNvbmZpZy5sZWdlbmQucG9zaXRpb24mJihpPTIwKSxcInJpZ2h0XCI9PT10LmNvbmZpZy5sZWdlbmQucG9zaXRpb24mJihpPXQuZ2xvYmFscy5zdmdXaWR0aC1lLmNsd3ctMTApLHRoaXMuc2V0TGVnZW5kV3JhcFhZKGksMjApfX0se2tleTpcIm9uTGVnZW5kSG92ZXJlZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudyxpPXQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFwZXhjaGFydHMtbGVnZW5kLXRleHRcIil8fHQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFwZXhjaGFydHMtbGVnZW5kLW1hcmtlclwiKTtpZihcImhlYXRtYXBcIj09PWUuY29uZmlnLmNoYXJ0LnR5cGV8fHRoaXMuaXNCYXJzRGlzdHJpYnV0ZWQpe2lmKGkpe3ZhciBhPXBhcnNlSW50KHQudGFyZ2V0LmdldEF0dHJpYnV0ZShcInJlbFwiKSwxMCktMTt0aGlzLmN0eC5ldmVudHMuZmlyZUV2ZW50KFwibGVnZW5kSG92ZXJcIixbdGhpcy5jdHgsYSx0aGlzLnddKSxuZXcgTih0aGlzLmN0eCkuaGlnaGxpZ2h0UmFuZ2VJblNlcmllcyh0LHQudGFyZ2V0KX19ZWxzZSF0LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhcGV4Y2hhcnRzLWluYWN0aXZlLWxlZ2VuZFwiKSYmaSYmbmV3IE4odGhpcy5jdHgpLnRvZ2dsZVNlcmllc09uSG92ZXIodCx0LnRhcmdldCl9fSx7a2V5Olwib25MZWdlbmRDbGlja1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudztpZighZS5jb25maWcubGVnZW5kLmN1c3RvbUxlZ2VuZEl0ZW1zLmxlbmd0aCYmKHQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFwZXhjaGFydHMtbGVnZW5kLXRleHRcIil8fHQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFwZXhjaGFydHMtbGVnZW5kLW1hcmtlclwiKSkpe3ZhciBpPXBhcnNlSW50KHQudGFyZ2V0LmdldEF0dHJpYnV0ZShcInJlbFwiKSwxMCktMSxhPVwidHJ1ZVwiPT09dC50YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YTpjb2xsYXBzZWRcIikscz10aGlzLncuY29uZmlnLmNoYXJ0LmV2ZW50cy5sZWdlbmRDbGljaztcImZ1bmN0aW9uXCI9PXR5cGVvZiBzJiZzKHRoaXMuY3R4LGksdGhpcy53KSx0aGlzLmN0eC5ldmVudHMuZmlyZUV2ZW50KFwibGVnZW5kQ2xpY2tcIixbdGhpcy5jdHgsaSx0aGlzLnddKTt2YXIgcj10aGlzLncuY29uZmlnLmxlZ2VuZC5tYXJrZXJzLm9uQ2xpY2s7XCJmdW5jdGlvblwiPT10eXBlb2YgciYmdC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXBleGNoYXJ0cy1sZWdlbmQtbWFya2VyXCIpJiYocih0aGlzLmN0eCxpLHRoaXMudyksdGhpcy5jdHguZXZlbnRzLmZpcmVFdmVudChcImxlZ2VuZE1hcmtlckNsaWNrXCIsW3RoaXMuY3R4LGksdGhpcy53XSkpLFwidHJlZW1hcFwiIT09ZS5jb25maWcuY2hhcnQudHlwZSYmXCJoZWF0bWFwXCIhPT1lLmNvbmZpZy5jaGFydC50eXBlJiYhdGhpcy5pc0JhcnNEaXN0cmlidXRlZCYmZS5jb25maWcubGVnZW5kLm9uSXRlbUNsaWNrLnRvZ2dsZURhdGFTZXJpZXMmJnRoaXMubGVnZW5kSGVscGVycy50b2dnbGVEYXRhU2VyaWVzKGksYSl9fX1dKSx0fSgpLGh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53O3ZhciBpPXRoaXMudzt0aGlzLmV2PXRoaXMudy5jb25maWcuY2hhcnQuZXZlbnRzLHRoaXMuc2VsZWN0ZWRDbGFzcz1cImFwZXhjaGFydHMtc2VsZWN0ZWRcIix0aGlzLmxvY2FsZVZhbHVlcz10aGlzLncuZ2xvYmFscy5sb2NhbGUudG9vbGJhcix0aGlzLm1pblg9aS5nbG9iYWxzLm1pblgsdGhpcy5tYXhYPWkuZ2xvYmFscy5tYXhYfXJldHVybiByKHQsW3trZXk6XCJjcmVhdGVUb29sYmFyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy53LGk9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKX0sYT1pKCk7aWYoYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLFwiYXBleGNoYXJ0cy10b29sYmFyXCIpLGEuc3R5bGUudG9wPWUuY29uZmlnLmNoYXJ0LnRvb2xiYXIub2Zmc2V0WStcInB4XCIsYS5zdHlsZS5yaWdodD0zLWUuY29uZmlnLmNoYXJ0LnRvb2xiYXIub2Zmc2V0WCtcInB4XCIsZS5nbG9iYWxzLmRvbS5lbFdyYXAuYXBwZW5kQ2hpbGQoYSksdGhpcy5lbFpvb209aSgpLHRoaXMuZWxab29tSW49aSgpLHRoaXMuZWxab29tT3V0PWkoKSx0aGlzLmVsUGFuPWkoKSx0aGlzLmVsU2VsZWN0aW9uPWkoKSx0aGlzLmVsWm9vbVJlc2V0PWkoKSx0aGlzLmVsTWVudUljb249aSgpLHRoaXMuZWxNZW51PWkoKSx0aGlzLmVsQ3VzdG9tSWNvbnM9W10sdGhpcy50PWUuY29uZmlnLmNoYXJ0LnRvb2xiYXIudG9vbHMsQXJyYXkuaXNBcnJheSh0aGlzLnQuY3VzdG9tSWNvbnMpKWZvcih2YXIgcz0wO3M8dGhpcy50LmN1c3RvbUljb25zLmxlbmd0aDtzKyspdGhpcy5lbEN1c3RvbUljb25zLnB1c2goaSgpKTt2YXIgcj1bXSxvPWZ1bmN0aW9uKGksYSxzKXt2YXIgbz1pLnRvTG93ZXJDYXNlKCk7dC50W29dJiZlLmNvbmZpZy5jaGFydC56b29tLmVuYWJsZWQmJnIucHVzaCh7ZWw6YSxpY29uOlwic3RyaW5nXCI9PXR5cGVvZiB0LnRbb10/dC50W29dOnMsdGl0bGU6dC5sb2NhbGVWYWx1ZXNbaV0sY2xhc3M6XCJhcGV4Y2hhcnRzLVwiLmNvbmNhdChvLFwiLWljb25cIil9KX07byhcInpvb21JblwiLHRoaXMuZWxab29tSW4sJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cXG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cXG4gICAgPHBhdGggZD1cIk0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6XCIvPlxcbjwvc3ZnPlxcbicpLG8oXCJ6b29tT3V0XCIsdGhpcy5lbFpvb21PdXQsJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cXG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cXG4gICAgPHBhdGggZD1cIk03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpcIi8+XFxuPC9zdmc+XFxuJyk7dmFyIG49ZnVuY3Rpb24oaSl7dC50W2ldJiZlLmNvbmZpZy5jaGFydFtpXS5lbmFibGVkJiZyLnB1c2goe2VsOlwiem9vbVwiPT09aT90LmVsWm9vbTp0LmVsU2VsZWN0aW9uLGljb246XCJzdHJpbmdcIj09dHlwZW9mIHQudFtpXT90LnRbaV06XCJ6b29tXCI9PT1pPyc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwiIzAwMDAwMFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIj5cXG4gICAgPHBhdGggZD1cIk0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0elwiLz5cXG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMFYwelwiIGZpbGw9XCJub25lXCIvPlxcbiAgICA8cGF0aCBkPVwiTTEyIDEwaC0ydjJIOXYtMkg3VjloMlY3aDF2MmgydjF6XCIvPlxcbjwvc3ZnPic6JzxzdmcgZmlsbD1cIiM2RTgxOTJcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxcbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxcbiAgICA8cGF0aCBkPVwiTTMgNWgyVjNjLTEuMSAwLTIgLjktMiAyem0wIDhoMnYtMkgzdjJ6bTQgOGgydi0ySDd2MnpNMyA5aDJWN0gzdjJ6bTEwLTZoLTJ2MmgyVjN6bTYgMHYyaDJjMC0xLjEtLjktMi0yLTJ6TTUgMjF2LTJIM2MwIDEuMS45IDIgMiAyem0tMi00aDJ2LTJIM3Yyek05IDNIN3YyaDJWM3ptMiAxOGgydi0yaC0ydjJ6bTgtOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyem0wLTEyaDJWN2gtMnYyem0wIDhoMnYtMmgtMnYyem0tNCA0aDJ2LTJoLTJ2MnptMC0xNmgyVjNoLTJ2MnpcIi8+XFxuPC9zdmc+Jyx0aXRsZTp0LmxvY2FsZVZhbHVlc1tcInpvb21cIj09PWk/XCJzZWxlY3Rpb25ab29tXCI6XCJzZWxlY3Rpb25cIl0sY2xhc3M6ZS5nbG9iYWxzLmlzVG91Y2hEZXZpY2U/XCJhcGV4Y2hhcnRzLWVsZW1lbnQtaGlkZGVuXCI6XCJhcGV4Y2hhcnRzLVwiLmNvbmNhdChpLFwiLWljb25cIil9KX07bihcInpvb21cIiksbihcInNlbGVjdGlvblwiKSx0aGlzLnQucGFuJiZlLmNvbmZpZy5jaGFydC56b29tLmVuYWJsZWQmJnIucHVzaCh7ZWw6dGhpcy5lbFBhbixpY29uOlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnQucGFuP3RoaXMudC5wYW46JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIGZpbGw9XCIjMDAwMDAwXCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiPlxcbiAgICA8ZGVmcz5cXG4gICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgaWQ9XCJhXCIvPlxcbiAgICA8L2RlZnM+XFxuICAgIDxjbGlwUGF0aCBpZD1cImJcIj5cXG4gICAgICAgIDx1c2Ugb3ZlcmZsb3c9XCJ2aXNpYmxlXCIgeGxpbms6aHJlZj1cIiNhXCIvPlxcbiAgICA8L2NsaXBQYXRoPlxcbiAgICA8cGF0aCBjbGlwLXBhdGg9XCJ1cmwoI2IpXCIgZD1cIk0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXpcIi8+XFxuPC9zdmc+Jyx0aXRsZTp0aGlzLmxvY2FsZVZhbHVlcy5wYW4sY2xhc3M6ZS5nbG9iYWxzLmlzVG91Y2hEZXZpY2U/XCJhcGV4Y2hhcnRzLWVsZW1lbnQtaGlkZGVuXCI6XCJhcGV4Y2hhcnRzLXBhbi1pY29uXCJ9KSxvKFwicmVzZXRcIix0aGlzLmVsWm9vbVJlc2V0LCc8c3ZnIGZpbGw9XCIjMDAwMDAwXCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cXG4gICAgPHBhdGggZD1cIk0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6XCIvPlxcbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxcbjwvc3ZnPicpLHRoaXMudC5kb3dubG9hZCYmci5wdXNoKHtlbDp0aGlzLmVsTWVudUljb24saWNvbjpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy50LmRvd25sb2FkP3RoaXMudC5kb3dubG9hZDonPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiLz48cGF0aCBkPVwiTTMgMThoMTh2LTJIM3Yyem0wLTVoMTh2LTJIM3Yyem0wLTd2MmgxOFY2SDN6XCIvPjwvc3ZnPicsdGl0bGU6dGhpcy5sb2NhbGVWYWx1ZXMubWVudSxjbGFzczpcImFwZXhjaGFydHMtbWVudS1pY29uXCJ9KTtmb3IodmFyIGw9MDtsPHRoaXMuZWxDdXN0b21JY29ucy5sZW5ndGg7bCsrKXIucHVzaCh7ZWw6dGhpcy5lbEN1c3RvbUljb25zW2xdLGljb246dGhpcy50LmN1c3RvbUljb25zW2xdLmljb24sdGl0bGU6dGhpcy50LmN1c3RvbUljb25zW2xdLnRpdGxlLGluZGV4OnRoaXMudC5jdXN0b21JY29uc1tsXS5pbmRleCxjbGFzczpcImFwZXhjaGFydHMtdG9vbGJhci1jdXN0b20taWNvbiBcIit0aGlzLnQuY3VzdG9tSWNvbnNbbF0uY2xhc3N9KTtyLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5pbmRleCYmeC5tb3ZlSW5kZXhJbkFycmF5KHIsZSx0LmluZGV4KX0pKTtmb3IodmFyIGg9MDtoPHIubGVuZ3RoO2grKyltLnNldEF0dHJzKHJbaF0uZWwse2NsYXNzOnJbaF0uY2xhc3MsdGl0bGU6cltoXS50aXRsZX0pLHJbaF0uZWwuaW5uZXJIVE1MPXJbaF0uaWNvbixhLmFwcGVuZENoaWxkKHJbaF0uZWwpO3RoaXMuX2NyZWF0ZUhhbWJ1cmdlck1lbnUoYSksZS5nbG9iYWxzLnpvb21FbmFibGVkP3RoaXMuZWxab29tLmNsYXNzTGlzdC5hZGQodGhpcy5zZWxlY3RlZENsYXNzKTplLmdsb2JhbHMucGFuRW5hYmxlZD90aGlzLmVsUGFuLmNsYXNzTGlzdC5hZGQodGhpcy5zZWxlY3RlZENsYXNzKTplLmdsb2JhbHMuc2VsZWN0aW9uRW5hYmxlZCYmdGhpcy5lbFNlbGVjdGlvbi5jbGFzc0xpc3QuYWRkKHRoaXMuc2VsZWN0ZWRDbGFzcyksdGhpcy5hZGRUb29sYmFyRXZlbnRMaXN0ZW5lcnMoKX19LHtrZXk6XCJfY3JlYXRlSGFtYnVyZ2VyTWVudVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZWxNZW51SXRlbXM9W10sdC5hcHBlbmRDaGlsZCh0aGlzLmVsTWVudSksbS5zZXRBdHRycyh0aGlzLmVsTWVudSx7Y2xhc3M6XCJhcGV4Y2hhcnRzLW1lbnVcIn0pO3ZhciBlPVt7bmFtZTpcImV4cG9ydFNWR1wiLHRpdGxlOnRoaXMubG9jYWxlVmFsdWVzLmV4cG9ydFRvU1ZHfSx7bmFtZTpcImV4cG9ydFBOR1wiLHRpdGxlOnRoaXMubG9jYWxlVmFsdWVzLmV4cG9ydFRvUE5HfSx7bmFtZTpcImV4cG9ydENTVlwiLHRpdGxlOnRoaXMubG9jYWxlVmFsdWVzLmV4cG9ydFRvQ1NWfV07dGhpcy53Lmdsb2JhbHMuYWxsU2VyaWVzSGFzRXF1YWxYfHxlLnNwbGljZSgyLDEpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZWxNZW51SXRlbXMucHVzaChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSx0aGlzLmVsTWVudUl0ZW1zW2ldLmlubmVySFRNTD1lW2ldLnRpdGxlLG0uc2V0QXR0cnModGhpcy5lbE1lbnVJdGVtc1tpXSx7Y2xhc3M6XCJhcGV4Y2hhcnRzLW1lbnUtaXRlbSBcIi5jb25jYXQoZVtpXS5uYW1lKSx0aXRsZTplW2ldLnRpdGxlfSksdGhpcy5lbE1lbnUuYXBwZW5kQ2hpbGQodGhpcy5lbE1lbnVJdGVtc1tpXSl9fSx7a2V5OlwiYWRkVG9vbGJhckV2ZW50TGlzdGVuZXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZWxab29tUmVzZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5oYW5kbGVab29tUmVzZXQuYmluZCh0aGlzKSksdGhpcy5lbFNlbGVjdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLnRvZ2dsZVpvb21TZWxlY3Rpb24uYmluZCh0aGlzLFwic2VsZWN0aW9uXCIpKSx0aGlzLmVsWm9vbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLnRvZ2dsZVpvb21TZWxlY3Rpb24uYmluZCh0aGlzLFwiem9vbVwiKSksdGhpcy5lbFpvb21Jbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLmhhbmRsZVpvb21Jbi5iaW5kKHRoaXMpKSx0aGlzLmVsWm9vbU91dC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLmhhbmRsZVpvb21PdXQuYmluZCh0aGlzKSksdGhpcy5lbFBhbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLnRvZ2dsZVBhbm5pbmcuYmluZCh0aGlzKSksdGhpcy5lbE1lbnVJY29uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMudG9nZ2xlTWVudS5iaW5kKHRoaXMpKSx0aGlzLmVsTWVudUl0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZXhwb3J0U1ZHXCIpP2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdC5oYW5kbGVEb3dubG9hZC5iaW5kKHQsXCJzdmdcIikpOmUuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZXhwb3J0UE5HXCIpP2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdC5oYW5kbGVEb3dubG9hZC5iaW5kKHQsXCJwbmdcIikpOmUuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZXhwb3J0Q1NWXCIpJiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHQuaGFuZGxlRG93bmxvYWQuYmluZCh0LFwiY3N2XCIpKX0pKTtmb3IodmFyIGU9MDtlPHRoaXMudC5jdXN0b21JY29ucy5sZW5ndGg7ZSsrKXRoaXMuZWxDdXN0b21JY29uc1tlXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLnQuY3VzdG9tSWNvbnNbZV0uY2xpY2suYmluZCh0aGlzLHRoaXMuY3R4LHRoaXMuY3R4LncpKX19LHtrZXk6XCJ0b2dnbGVab29tU2VsZWN0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdHguZ2V0U3luY2VkQ2hhcnRzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jdHgudG9vbGJhci50b2dnbGVPdGhlckNvbnRyb2xzKCk7dmFyIGk9XCJzZWxlY3Rpb25cIj09PXQ/ZS5jdHgudG9vbGJhci5lbFNlbGVjdGlvbjplLmN0eC50b29sYmFyLmVsWm9vbSxhPVwic2VsZWN0aW9uXCI9PT10P1wic2VsZWN0aW9uRW5hYmxlZFwiOlwiem9vbUVuYWJsZWRcIjtlLncuZ2xvYmFsc1thXT0hZS53Lmdsb2JhbHNbYV0saS5jbGFzc0xpc3QuY29udGFpbnMoZS5jdHgudG9vbGJhci5zZWxlY3RlZENsYXNzKT9pLmNsYXNzTGlzdC5yZW1vdmUoZS5jdHgudG9vbGJhci5zZWxlY3RlZENsYXNzKTppLmNsYXNzTGlzdC5hZGQoZS5jdHgudG9vbGJhci5zZWxlY3RlZENsYXNzKX0pKX19LHtrZXk6XCJnZXRUb29sYmFySWNvbnNSZWZlcmVuY2VcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMudzt0aGlzLmVsWm9vbXx8KHRoaXMuZWxab29tPXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy16b29tLWljb25cIikpLHRoaXMuZWxQYW58fCh0aGlzLmVsUGFuPXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1wYW4taWNvblwiKSksdGhpcy5lbFNlbGVjdGlvbnx8KHRoaXMuZWxTZWxlY3Rpb249dC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLXNlbGVjdGlvbi1pY29uXCIpKX19LHtrZXk6XCJlbmFibGVab29tUGFuRnJvbVRvb2xiYXJcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnRvZ2dsZU90aGVyQ29udHJvbHMoKSxcInBhblwiPT09dD90aGlzLncuZ2xvYmFscy5wYW5FbmFibGVkPSEwOnRoaXMudy5nbG9iYWxzLnpvb21FbmFibGVkPSEwO3ZhciBlPVwicGFuXCI9PT10P3RoaXMuZWxQYW46dGhpcy5lbFpvb20saT1cInBhblwiPT09dD90aGlzLmVsWm9vbTp0aGlzLmVsUGFuO2UmJmUuY2xhc3NMaXN0LmFkZCh0aGlzLnNlbGVjdGVkQ2xhc3MpLGkmJmkuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLnNlbGVjdGVkQ2xhc3MpfX0se2tleTpcInRvZ2dsZVBhbm5pbmdcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY3R4LmdldFN5bmNlZENoYXJ0cygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY3R4LnRvb2xiYXIudG9nZ2xlT3RoZXJDb250cm9scygpLHQudy5nbG9iYWxzLnBhbkVuYWJsZWQ9IXQudy5nbG9iYWxzLnBhbkVuYWJsZWQsdC5jdHgudG9vbGJhci5lbFBhbi5jbGFzc0xpc3QuY29udGFpbnModC5jdHgudG9vbGJhci5zZWxlY3RlZENsYXNzKT90LmN0eC50b29sYmFyLmVsUGFuLmNsYXNzTGlzdC5yZW1vdmUodC5jdHgudG9vbGJhci5zZWxlY3RlZENsYXNzKTp0LmN0eC50b29sYmFyLmVsUGFuLmNsYXNzTGlzdC5hZGQodC5jdHgudG9vbGJhci5zZWxlY3RlZENsYXNzKX0pKX19LHtrZXk6XCJ0b2dnbGVPdGhlckNvbnRyb2xzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy53O2UuZ2xvYmFscy5wYW5FbmFibGVkPSExLGUuZ2xvYmFscy56b29tRW5hYmxlZD0hMSxlLmdsb2JhbHMuc2VsZWN0aW9uRW5hYmxlZD0hMSx0aGlzLmdldFRvb2xiYXJJY29uc1JlZmVyZW5jZSgpLFt0aGlzLmVsUGFuLHRoaXMuZWxTZWxlY3Rpb24sdGhpcy5lbFpvb21dLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UmJmUuY2xhc3NMaXN0LnJlbW92ZSh0LnNlbGVjdGVkQ2xhc3MpfSkpfX0se2tleTpcImhhbmRsZVpvb21JblwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53O3QuZ2xvYmFscy5pc1JhbmdlQmFyJiYodGhpcy5taW5YPXQuZ2xvYmFscy5taW5ZLHRoaXMubWF4WD10Lmdsb2JhbHMubWF4WSk7dmFyIGU9KHRoaXMubWluWCt0aGlzLm1heFgpLzIsaT0odGhpcy5taW5YK2UpLzIsYT0odGhpcy5tYXhYK2UpLzIscz10aGlzLl9nZXROZXdNaW5YTWF4WChpLGEpO3QuZ2xvYmFscy5kaXNhYmxlWm9vbUlufHx0aGlzLnpvb21VcGRhdGVPcHRpb25zKHMubWluWCxzLm1heFgpfX0se2tleTpcImhhbmRsZVpvb21PdXRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMudztpZih0Lmdsb2JhbHMuaXNSYW5nZUJhciYmKHRoaXMubWluWD10Lmdsb2JhbHMubWluWSx0aGlzLm1heFg9dC5nbG9iYWxzLm1heFkpLCEoXCJkYXRldGltZVwiPT09dC5jb25maWcueGF4aXMudHlwZSYmbmV3IERhdGUodGhpcy5taW5YKS5nZXRVVENGdWxsWWVhcigpPDFlMykpe3ZhciBlPSh0aGlzLm1pblgrdGhpcy5tYXhYKS8yLGk9dGhpcy5taW5YLShlLXRoaXMubWluWCksYT10aGlzLm1heFgtKGUtdGhpcy5tYXhYKSxzPXRoaXMuX2dldE5ld01pblhNYXhYKGksYSk7dC5nbG9iYWxzLmRpc2FibGVab29tT3V0fHx0aGlzLnpvb21VcGRhdGVPcHRpb25zKHMubWluWCxzLm1heFgpfX19LHtrZXk6XCJfZ2V0TmV3TWluWE1heFhcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudy5jb25maWcueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljO3JldHVybnttaW5YOmk/TWF0aC5mbG9vcih0KTp0LG1heFg6aT9NYXRoLmZsb29yKGUpOmV9fX0se2tleTpcInpvb21VcGRhdGVPcHRpb25zXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnc7aWYodm9pZCAwIT09dHx8dm9pZCAwIT09ZSl7aWYoIShpLmNvbmZpZy54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWMmJih0PDEmJih0PTEsZT1pLmdsb2JhbHMuZGF0YVBvaW50cyksZS10PDIpKSl7dmFyIGE9e21pbjp0LG1heDplfSxzPXRoaXMuZ2V0QmVmb3JlWm9vbVJhbmdlKGEpO3MmJihhPXMueGF4aXMpO3ZhciByPXt4YXhpczphfSxvPXguY2xvbmUoaS5nbG9iYWxzLmluaXRpYWxDb25maWcueWF4aXMpO2lmKGkuY29uZmlnLmNoYXJ0Lnpvb20uYXV0b1NjYWxlWWF4aXMpbz1uZXcgXyh0aGlzLmN0eCkuYXV0b1NjYWxlWSh0aGlzLmN0eCxvLHt4YXhpczphfSk7aS5jb25maWcuY2hhcnQuZ3JvdXB8fChyLnlheGlzPW8pLHRoaXMudy5nbG9iYWxzLnpvb21lZD0hMCx0aGlzLmN0eC51cGRhdGVIZWxwZXJzLl91cGRhdGVPcHRpb25zKHIsITEsdGhpcy53LmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmR5bmFtaWNBbmltYXRpb24uZW5hYmxlZCksdGhpcy56b29tQ2FsbGJhY2soYSxvKX19ZWxzZSB0aGlzLmhhbmRsZVpvb21SZXNldCgpfX0se2tleTpcInpvb21DYWxsYmFja1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5ldi56b29tZWQmJnRoaXMuZXYuem9vbWVkKHRoaXMuY3R4LHt4YXhpczp0LHlheGlzOmV9KX19LHtrZXk6XCJnZXRCZWZvcmVab29tUmFuZ2VcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPW51bGw7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5ldi5iZWZvcmVab29tJiYoaT10aGlzLmV2LmJlZm9yZVpvb20odGhpcyx7eGF4aXM6dCx5YXhpczplfSkpLGl9fSx7a2V5OlwidG9nZ2xlTWVudVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt3aW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LmVsTWVudS5jbGFzc0xpc3QuY29udGFpbnMoXCJhcGV4Y2hhcnRzLW1lbnUtb3BlblwiKT90LmVsTWVudS5jbGFzc0xpc3QucmVtb3ZlKFwiYXBleGNoYXJ0cy1tZW51LW9wZW5cIik6dC5lbE1lbnUuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtbWVudS1vcGVuXCIpfSksMCl9fSx7a2V5OlwiaGFuZGxlRG93bmxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT1uZXcgVih0aGlzLmN0eCk7c3dpdGNoKHQpe2Nhc2VcInN2Z1wiOmkuZXhwb3J0VG9TVkcodGhpcy5jdHgpO2JyZWFrO2Nhc2VcInBuZ1wiOmkuZXhwb3J0VG9QbmcodGhpcy5jdHgpO2JyZWFrO2Nhc2VcImNzdlwiOmkuZXhwb3J0VG9DU1Yoe3NlcmllczplLmNvbmZpZy5zZXJpZXMsY29sdW1uRGVsaW1pdGVyOmUuY29uZmlnLmNoYXJ0LnRvb2xiYXIuZXhwb3J0LmNzdi5jb2x1bW5EZWxpbWl0ZXJ9KX19fSx7a2V5OlwiaGFuZGxlWm9vbVJlc2V0XCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jdHguZ2V0U3luY2VkQ2hhcnRzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC53O2lmKGUuZ2xvYmFscy5sYXN0WEF4aXMubWluPXZvaWQgMCxlLmdsb2JhbHMubGFzdFhBeGlzLm1heD12b2lkIDAsdC51cGRhdGVIZWxwZXJzLnJldmVydERlZmF1bHRBeGlzTWluTWF4KCksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb25maWcuY2hhcnQuZXZlbnRzLmJlZm9yZVJlc2V0Wm9vbSl7dmFyIGk9ZS5jb25maWcuY2hhcnQuZXZlbnRzLmJlZm9yZVJlc2V0Wm9vbSh0LGUpO2kmJnQudXBkYXRlSGVscGVycy5yZXZlcnREZWZhdWx0QXhpc01pbk1heChpKX1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbmZpZy5jaGFydC5ldmVudHMuem9vbWVkJiZ0LmN0eC50b29sYmFyLnpvb21DYWxsYmFjayh7bWluOmUuY29uZmlnLnhheGlzLm1pbixtYXg6ZS5jb25maWcueGF4aXMubWF4fSksZS5nbG9iYWxzLnpvb21lZD0hMTt2YXIgYT10LmN0eC5zZXJpZXMuZW1wdHlDb2xsYXBzZWRTZXJpZXMoeC5jbG9uZShlLmdsb2JhbHMuaW5pdGlhbFNlcmllcykpO3QudXBkYXRlSGVscGVycy5fdXBkYXRlU2VyaWVzKGEsZS5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5keW5hbWljQW5pbWF0aW9uLmVuYWJsZWQpfSkpfX0se2tleTpcImRlc3Ryb3lcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZWxab29tPW51bGwsdGhpcy5lbFpvb21Jbj1udWxsLHRoaXMuZWxab29tT3V0PW51bGwsdGhpcy5lbFBhbj1udWxsLHRoaXMuZWxTZWxlY3Rpb249bnVsbCx0aGlzLmVsWm9vbVJlc2V0PW51bGwsdGhpcy5lbE1lbnVJY29uPW51bGx9fV0pLHR9KCksY3Q9ZnVuY3Rpb24odCl7bihpLHQpO3ZhciBlPWQoaSk7ZnVuY3Rpb24gaSh0KXt2YXIgcztyZXR1cm4gYSh0aGlzLGkpLChzPWUuY2FsbCh0aGlzLHQpKS5jdHg9dCxzLnc9dC53LHMuZHJhZ2dlZD0hMSxzLmdyYXBoaWNzPW5ldyBtKHMuY3R4KSxzLmV2ZW50TGlzdD1bXCJtb3VzZWRvd25cIixcIm1vdXNlbGVhdmVcIixcIm1vdXNlbW92ZVwiLFwidG91Y2hzdGFydFwiLFwidG91Y2htb3ZlXCIsXCJtb3VzZXVwXCIsXCJ0b3VjaGVuZFwiXSxzLmNsaWVudFg9MCxzLmNsaWVudFk9MCxzLnN0YXJ0WD0wLHMuZW5kWD0wLHMuZHJhZ1g9MCxzLnN0YXJ0WT0wLHMuZW5kWT0wLHMuZHJhZ1k9MCxzLm1vdmVEaXJlY3Rpb249XCJub25lXCIsc31yZXR1cm4gcihpLFt7a2V5OlwiaW5pdFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10Lnh5UmF0aW9zLGE9dGhpcy53LHM9dGhpczt0aGlzLnh5UmF0aW9zPWksdGhpcy56b29tUmVjdD10aGlzLmdyYXBoaWNzLmRyYXdSZWN0KDAsMCwwLDApLHRoaXMuc2VsZWN0aW9uUmVjdD10aGlzLmdyYXBoaWNzLmRyYXdSZWN0KDAsMCwwLDApLHRoaXMuZ3JpZFJlY3Q9YS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLWdyaWRcIiksdGhpcy56b29tUmVjdC5ub2RlLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLXpvb20tcmVjdFwiKSx0aGlzLnNlbGVjdGlvblJlY3Qubm9kZS5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1zZWxlY3Rpb24tcmVjdFwiKSxhLmdsb2JhbHMuZG9tLmVsR3JhcGhpY2FsLmFkZCh0aGlzLnpvb21SZWN0KSxhLmdsb2JhbHMuZG9tLmVsR3JhcGhpY2FsLmFkZCh0aGlzLnNlbGVjdGlvblJlY3QpLFwieFwiPT09YS5jb25maWcuY2hhcnQuc2VsZWN0aW9uLnR5cGU/dGhpcy5zbERyYWdnYWJsZVJlY3Q9dGhpcy5zZWxlY3Rpb25SZWN0LmRyYWdnYWJsZSh7bWluWDowLG1pblk6MCxtYXhYOmEuZ2xvYmFscy5ncmlkV2lkdGgsbWF4WTphLmdsb2JhbHMuZ3JpZEhlaWdodH0pLm9uKFwiZHJhZ21vdmVcIix0aGlzLnNlbGVjdGlvbkRyYWdnaW5nLmJpbmQodGhpcyxcImRyYWdnaW5nXCIpKTpcInlcIj09PWEuY29uZmlnLmNoYXJ0LnNlbGVjdGlvbi50eXBlP3RoaXMuc2xEcmFnZ2FibGVSZWN0PXRoaXMuc2VsZWN0aW9uUmVjdC5kcmFnZ2FibGUoe21pblg6MCxtYXhYOmEuZ2xvYmFscy5ncmlkV2lkdGh9KS5vbihcImRyYWdtb3ZlXCIsdGhpcy5zZWxlY3Rpb25EcmFnZ2luZy5iaW5kKHRoaXMsXCJkcmFnZ2luZ1wiKSk6dGhpcy5zbERyYWdnYWJsZVJlY3Q9dGhpcy5zZWxlY3Rpb25SZWN0LmRyYWdnYWJsZSgpLm9uKFwiZHJhZ21vdmVcIix0aGlzLnNlbGVjdGlvbkRyYWdnaW5nLmJpbmQodGhpcyxcImRyYWdnaW5nXCIpKSx0aGlzLnByZXNlbGVjdGVkU2VsZWN0aW9uKCksdGhpcy5ob3ZlckFyZWE9YS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIlwiLmNvbmNhdChhLmdsb2JhbHMuY2hhcnRDbGFzcyxcIiAuYXBleGNoYXJ0cy1zdmdcIikpLHRoaXMuaG92ZXJBcmVhLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLXpvb21hYmxlXCIpLHRoaXMuZXZlbnRMaXN0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2UuaG92ZXJBcmVhLmFkZEV2ZW50TGlzdGVuZXIodCxzLnN2Z01vdXNlRXZlbnRzLmJpbmQocyxpKSx7Y2FwdHVyZTohMSxwYXNzaXZlOiEwfSl9KSl9fSx7a2V5OlwiZGVzdHJveVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zbERyYWdnYWJsZVJlY3QmJih0aGlzLnNsRHJhZ2dhYmxlUmVjdC5kcmFnZ2FibGUoITEpLHRoaXMuc2xEcmFnZ2FibGVSZWN0Lm9mZigpLHRoaXMuc2VsZWN0aW9uUmVjdC5vZmYoKSksdGhpcy5zZWxlY3Rpb25SZWN0PW51bGwsdGhpcy56b29tUmVjdD1udWxsLHRoaXMuZ3JpZFJlY3Q9bnVsbH19LHtrZXk6XCJzdmdNb3VzZUV2ZW50c1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53LGE9dGhpcyxzPXRoaXMuY3R4LnRvb2xiYXIscj1pLmdsb2JhbHMuem9vbUVuYWJsZWQ/aS5jb25maWcuY2hhcnQuem9vbS50eXBlOmkuY29uZmlnLmNoYXJ0LnNlbGVjdGlvbi50eXBlLG89aS5jb25maWcuY2hhcnQudG9vbGJhci5hdXRvU2VsZWN0ZWQ7aWYoZS5zaGlmdEtleT8odGhpcy5zaGlmdFdhc1ByZXNzZWQ9ITAscy5lbmFibGVab29tUGFuRnJvbVRvb2xiYXIoXCJwYW5cIj09PW8/XCJ6b29tXCI6XCJwYW5cIikpOnRoaXMuc2hpZnRXYXNQcmVzc2VkJiYocy5lbmFibGVab29tUGFuRnJvbVRvb2xiYXIobyksdGhpcy5zaGlmdFdhc1ByZXNzZWQ9ITEpLGUudGFyZ2V0KXt2YXIgbixsPWUudGFyZ2V0LmNsYXNzTGlzdDtpZihlLnRhcmdldC5wYXJlbnROb2RlJiZudWxsIT09ZS50YXJnZXQucGFyZW50Tm9kZSYmKG49ZS50YXJnZXQucGFyZW50Tm9kZS5jbGFzc0xpc3QpLCEobC5jb250YWlucyhcImFwZXhjaGFydHMtc2VsZWN0aW9uLXJlY3RcIil8fGwuY29udGFpbnMoXCJhcGV4Y2hhcnRzLWxlZ2VuZC1tYXJrZXJcIil8fGwuY29udGFpbnMoXCJhcGV4Y2hhcnRzLWxlZ2VuZC10ZXh0XCIpfHxuJiZuLmNvbnRhaW5zKFwiYXBleGNoYXJ0cy10b29sYmFyXCIpKSl7aWYoYS5jbGllbnRYPVwidG91Y2htb3ZlXCI9PT1lLnR5cGV8fFwidG91Y2hzdGFydFwiPT09ZS50eXBlP2UudG91Y2hlc1swXS5jbGllbnRYOlwidG91Y2hlbmRcIj09PWUudHlwZT9lLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg6ZS5jbGllbnRYLGEuY2xpZW50WT1cInRvdWNobW92ZVwiPT09ZS50eXBlfHxcInRvdWNoc3RhcnRcIj09PWUudHlwZT9lLnRvdWNoZXNbMF0uY2xpZW50WTpcInRvdWNoZW5kXCI9PT1lLnR5cGU/ZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZOmUuY2xpZW50WSxcIm1vdXNlZG93blwiPT09ZS50eXBlJiYxPT09ZS53aGljaCl7dmFyIGg9YS5ncmlkUmVjdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnN0YXJ0WD1hLmNsaWVudFgtaC5sZWZ0LGEuc3RhcnRZPWEuY2xpZW50WS1oLnRvcCxhLmRyYWdnZWQ9ITEsYS53Lmdsb2JhbHMubW91c2Vkb3duPSEwfWlmKChcIm1vdXNlbW92ZVwiPT09ZS50eXBlJiYxPT09ZS53aGljaHx8XCJ0b3VjaG1vdmVcIj09PWUudHlwZSkmJihhLmRyYWdnZWQ9ITAsaS5nbG9iYWxzLnBhbkVuYWJsZWQ/KGkuZ2xvYmFscy5zZWxlY3Rpb249bnVsbCxhLncuZ2xvYmFscy5tb3VzZWRvd24mJmEucGFuRHJhZ2dpbmcoe2NvbnRleHQ6YSx6b29tdHlwZTpyLHh5UmF0aW9zOnR9KSk6KGEudy5nbG9iYWxzLm1vdXNlZG93biYmaS5nbG9iYWxzLnpvb21FbmFibGVkfHxhLncuZ2xvYmFscy5tb3VzZWRvd24mJmkuZ2xvYmFscy5zZWxlY3Rpb25FbmFibGVkKSYmKGEuc2VsZWN0aW9uPWEuc2VsZWN0aW9uRHJhd2luZyh7Y29udGV4dDphLHpvb210eXBlOnJ9KSkpLFwibW91c2V1cFwiPT09ZS50eXBlfHxcInRvdWNoZW5kXCI9PT1lLnR5cGV8fFwibW91c2VsZWF2ZVwiPT09ZS50eXBlKXt2YXIgYz1hLmdyaWRSZWN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Eudy5nbG9iYWxzLm1vdXNlZG93biYmKGEuZW5kWD1hLmNsaWVudFgtYy5sZWZ0LGEuZW5kWT1hLmNsaWVudFktYy50b3AsYS5kcmFnWD1NYXRoLmFicyhhLmVuZFgtYS5zdGFydFgpLGEuZHJhZ1k9TWF0aC5hYnMoYS5lbmRZLWEuc3RhcnRZKSwoaS5nbG9iYWxzLnpvb21FbmFibGVkfHxpLmdsb2JhbHMuc2VsZWN0aW9uRW5hYmxlZCkmJmEuc2VsZWN0aW9uRHJhd24oe2NvbnRleHQ6YSx6b29tdHlwZTpyfSksaS5nbG9iYWxzLnBhbkVuYWJsZWQmJmkuY29uZmlnLnhheGlzLmNvbnZlcnRlZENhdFRvTnVtZXJpYyYmYS5kZWxheWVkUGFuU2Nyb2xsZWQoKSksaS5nbG9iYWxzLnpvb21FbmFibGVkJiZhLmhpZGVTZWxlY3Rpb25SZWN0KHRoaXMuc2VsZWN0aW9uUmVjdCksYS5kcmFnZ2VkPSExLGEudy5nbG9iYWxzLm1vdXNlZG93bj0hMX10aGlzLm1ha2VTZWxlY3Rpb25SZWN0RHJhZ2dhYmxlKCl9fX19LHtrZXk6XCJtYWtlU2VsZWN0aW9uUmVjdERyYWdnYWJsZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53O2lmKHRoaXMuc2VsZWN0aW9uUmVjdCl7dmFyIGU9dGhpcy5zZWxlY3Rpb25SZWN0Lm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS53aWR0aD4wJiZlLmhlaWdodD4wJiZ0aGlzLnNsRHJhZ2dhYmxlUmVjdC5zZWxlY3RpemUoe3BvaW50czpcImwsIHJcIixwb2ludFNpemU6OCxwb2ludFR5cGU6XCJyZWN0XCJ9KS5yZXNpemUoe2NvbnN0cmFpbnQ6e21pblg6MCxtaW5ZOjAsbWF4WDp0Lmdsb2JhbHMuZ3JpZFdpZHRoLG1heFk6dC5nbG9iYWxzLmdyaWRIZWlnaHR9fSkub24oXCJyZXNpemluZ1wiLHRoaXMuc2VsZWN0aW9uRHJhZ2dpbmcuYmluZCh0aGlzLFwicmVzaXppbmdcIikpfX19LHtrZXk6XCJwcmVzZWxlY3RlZFNlbGVjdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9dGhpcy54eVJhdGlvcztpZighdC5nbG9iYWxzLnpvb21FbmFibGVkKWlmKHZvaWQgMCE9PXQuZ2xvYmFscy5zZWxlY3Rpb24mJm51bGwhPT10Lmdsb2JhbHMuc2VsZWN0aW9uKXRoaXMuZHJhd1NlbGVjdGlvblJlY3QodC5nbG9iYWxzLnNlbGVjdGlvbik7ZWxzZSBpZih2b2lkIDAhPT10LmNvbmZpZy5jaGFydC5zZWxlY3Rpb24ueGF4aXMubWluJiZ2b2lkIDAhPT10LmNvbmZpZy5jaGFydC5zZWxlY3Rpb24ueGF4aXMubWF4KXt2YXIgaT0odC5jb25maWcuY2hhcnQuc2VsZWN0aW9uLnhheGlzLm1pbi10Lmdsb2JhbHMubWluWCkvZS54UmF0aW8sYT17eDppLHk6MCx3aWR0aDp0Lmdsb2JhbHMuZ3JpZFdpZHRoLSh0Lmdsb2JhbHMubWF4WC10LmNvbmZpZy5jaGFydC5zZWxlY3Rpb24ueGF4aXMubWF4KS9lLnhSYXRpby1pLGhlaWdodDp0Lmdsb2JhbHMuZ3JpZEhlaWdodCx0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHNlbGVjdGlvbkVuYWJsZWQ6ITB9O3RoaXMuZHJhd1NlbGVjdGlvblJlY3QoYSksdGhpcy5tYWtlU2VsZWN0aW9uUmVjdERyYWdnYWJsZSgpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29uZmlnLmNoYXJ0LmV2ZW50cy5zZWxlY3Rpb24mJnQuY29uZmlnLmNoYXJ0LmV2ZW50cy5zZWxlY3Rpb24odGhpcy5jdHgse3hheGlzOnttaW46dC5jb25maWcuY2hhcnQuc2VsZWN0aW9uLnhheGlzLm1pbixtYXg6dC5jb25maWcuY2hhcnQuc2VsZWN0aW9uLnhheGlzLm1heH0seWF4aXM6e319KX19fSx7a2V5OlwiZHJhd1NlbGVjdGlvblJlY3RcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LngsaT10LnksYT10LndpZHRoLHM9dC5oZWlnaHQscj10LnRyYW5zbGF0ZVgsbz12b2lkIDA9PT1yPzA6cixuPXQudHJhbnNsYXRlWSxsPXZvaWQgMD09PW4/MDpuLGg9dGhpcy53LGM9dGhpcy56b29tUmVjdCxkPXRoaXMuc2VsZWN0aW9uUmVjdDtpZih0aGlzLmRyYWdnZWR8fG51bGwhPT1oLmdsb2JhbHMuc2VsZWN0aW9uKXt2YXIgZz17dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiK28rXCIsIFwiK2wrXCIpXCJ9O2guZ2xvYmFscy56b29tRW5hYmxlZCYmdGhpcy5kcmFnZ2VkJiYoYTwwJiYoYT0xKSxjLmF0dHIoe3g6ZSx5Omksd2lkdGg6YSxoZWlnaHQ6cyxmaWxsOmguY29uZmlnLmNoYXJ0Lnpvb20uem9vbWVkQXJlYS5maWxsLmNvbG9yLFwiZmlsbC1vcGFjaXR5XCI6aC5jb25maWcuY2hhcnQuem9vbS56b29tZWRBcmVhLmZpbGwub3BhY2l0eSxzdHJva2U6aC5jb25maWcuY2hhcnQuem9vbS56b29tZWRBcmVhLnN0cm9rZS5jb2xvcixcInN0cm9rZS13aWR0aFwiOmguY29uZmlnLmNoYXJ0Lnpvb20uem9vbWVkQXJlYS5zdHJva2Uud2lkdGgsXCJzdHJva2Utb3BhY2l0eVwiOmguY29uZmlnLmNoYXJ0Lnpvb20uem9vbWVkQXJlYS5zdHJva2Uub3BhY2l0eX0pLG0uc2V0QXR0cnMoYy5ub2RlLGcpKSxoLmdsb2JhbHMuc2VsZWN0aW9uRW5hYmxlZCYmKGQuYXR0cih7eDplLHk6aSx3aWR0aDphPjA/YTowLGhlaWdodDpzPjA/czowLGZpbGw6aC5jb25maWcuY2hhcnQuc2VsZWN0aW9uLmZpbGwuY29sb3IsXCJmaWxsLW9wYWNpdHlcIjpoLmNvbmZpZy5jaGFydC5zZWxlY3Rpb24uZmlsbC5vcGFjaXR5LHN0cm9rZTpoLmNvbmZpZy5jaGFydC5zZWxlY3Rpb24uc3Ryb2tlLmNvbG9yLFwic3Ryb2tlLXdpZHRoXCI6aC5jb25maWcuY2hhcnQuc2VsZWN0aW9uLnN0cm9rZS53aWR0aCxcInN0cm9rZS1kYXNoYXJyYXlcIjpoLmNvbmZpZy5jaGFydC5zZWxlY3Rpb24uc3Ryb2tlLmRhc2hBcnJheSxcInN0cm9rZS1vcGFjaXR5XCI6aC5jb25maWcuY2hhcnQuc2VsZWN0aW9uLnN0cm9rZS5vcGFjaXR5fSksbS5zZXRBdHRycyhkLm5vZGUsZykpfX19LHtrZXk6XCJoaWRlU2VsZWN0aW9uUmVjdFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3QmJnQuYXR0cih7eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSl9fSx7a2V5Olwic2VsZWN0aW9uRHJhd2luZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udGV4dCxpPXQuem9vbXR5cGUsYT10aGlzLncscz1lLHI9dGhpcy5ncmlkUmVjdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXMuc3RhcnRYLTEsbj1zLnN0YXJ0WSxsPSExLGg9ITEsYz1zLmNsaWVudFgtci5sZWZ0LW8sZD1zLmNsaWVudFktci50b3AtbixnPXt9O3JldHVybiBNYXRoLmFicyhjK28pPmEuZ2xvYmFscy5ncmlkV2lkdGg/Yz1hLmdsb2JhbHMuZ3JpZFdpZHRoLW86cy5jbGllbnRYLXIubGVmdDwwJiYoYz1vKSxvPnMuY2xpZW50WC1yLmxlZnQmJihsPSEwLGM9TWF0aC5hYnMoYykpLG4+cy5jbGllbnRZLXIudG9wJiYoaD0hMCxkPU1hdGguYWJzKGQpKSxnPVwieFwiPT09aT97eDpsP28tYzpvLHk6MCx3aWR0aDpjLGhlaWdodDphLmdsb2JhbHMuZ3JpZEhlaWdodH06XCJ5XCI9PT1pP3t4OjAseTpoP24tZDpuLHdpZHRoOmEuZ2xvYmFscy5ncmlkV2lkdGgsaGVpZ2h0OmR9Ont4Omw/by1jOm8seTpoP24tZDpuLHdpZHRoOmMsaGVpZ2h0OmR9LHMuZHJhd1NlbGVjdGlvblJlY3QoZykscy5zZWxlY3Rpb25EcmFnZ2luZyhcInJlc2l6aW5nXCIpLGd9fSx7a2V5Olwic2VsZWN0aW9uRHJhZ2dpbmdcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMsYT10aGlzLncscz10aGlzLnh5UmF0aW9zLHI9dGhpcy5zZWxlY3Rpb25SZWN0LG89MDtcInJlc2l6aW5nXCI9PT10JiYobz0zMCk7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQoci5ub2RlLmdldEF0dHJpYnV0ZSh0KSl9LGw9e3g6bihcInhcIikseTpuKFwieVwiKSx3aWR0aDpuKFwid2lkdGhcIiksaGVpZ2h0Om4oXCJoZWlnaHRcIil9O2EuZ2xvYmFscy5zZWxlY3Rpb249bCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbmZpZy5jaGFydC5ldmVudHMuc2VsZWN0aW9uJiZhLmdsb2JhbHMuc2VsZWN0aW9uRW5hYmxlZCYmKGNsZWFyVGltZW91dCh0aGlzLncuZ2xvYmFscy5zZWxlY3Rpb25SZXNpemVUaW1lciksdGhpcy53Lmdsb2JhbHMuc2VsZWN0aW9uUmVzaXplVGltZXI9d2luZG93LnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIHQ9aS5ncmlkUmVjdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXIubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXt4YXhpczp7bWluOmEuZ2xvYmFscy54QXhpc1NjYWxlLm5pY2VNaW4rKGUubGVmdC10LmxlZnQpKnMueFJhdGlvLG1heDphLmdsb2JhbHMueEF4aXNTY2FsZS5uaWNlTWluKyhlLnJpZ2h0LXQubGVmdCkqcy54UmF0aW99LHlheGlzOnttaW46YS5nbG9iYWxzLnlBeGlzU2NhbGVbMF0ubmljZU1pbisodC5ib3R0b20tZS5ib3R0b20pKnMueVJhdGlvWzBdLG1heDphLmdsb2JhbHMueUF4aXNTY2FsZVswXS5uaWNlTWF4LShlLnRvcC10LnRvcCkqcy55UmF0aW9bMF19fTthLmNvbmZpZy5jaGFydC5ldmVudHMuc2VsZWN0aW9uKGkuY3R4LG8pLGEuY29uZmlnLmNoYXJ0LmJydXNoLmVuYWJsZWQmJnZvaWQgMCE9PWEuY29uZmlnLmNoYXJ0LmV2ZW50cy5icnVzaFNjcm9sbGVkJiZhLmNvbmZpZy5jaGFydC5ldmVudHMuYnJ1c2hTY3JvbGxlZChpLmN0eCxvKX0pLG8pKX19LHtrZXk6XCJzZWxlY3Rpb25EcmF3blwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udGV4dCxpPXQuem9vbXR5cGUsYT10aGlzLncscz1lLHI9dGhpcy54eVJhdGlvcyxvPXRoaXMuY3R4LnRvb2xiYXI7aWYocy5zdGFydFg+cy5lbmRYKXt2YXIgbj1zLnN0YXJ0WDtzLnN0YXJ0WD1zLmVuZFgscy5lbmRYPW59aWYocy5zdGFydFk+cy5lbmRZKXt2YXIgbD1zLnN0YXJ0WTtzLnN0YXJ0WT1zLmVuZFkscy5lbmRZPWx9dmFyIGg9dm9pZCAwLGM9dm9pZCAwO2EuZ2xvYmFscy5pc1JhbmdlQmFyPyhoPWEuZ2xvYmFscy55QXhpc1NjYWxlWzBdLm5pY2VNaW4rcy5zdGFydFgqci5pbnZlcnRlZFlSYXRpbyxjPWEuZ2xvYmFscy55QXhpc1NjYWxlWzBdLm5pY2VNaW4rcy5lbmRYKnIuaW52ZXJ0ZWRZUmF0aW8pOihoPWEuZ2xvYmFscy54QXhpc1NjYWxlLm5pY2VNaW4rcy5zdGFydFgqci54UmF0aW8sYz1hLmdsb2JhbHMueEF4aXNTY2FsZS5uaWNlTWluK3MuZW5kWCpyLnhSYXRpbyk7dmFyIGQ9W10sZz1bXTtpZihhLmNvbmZpZy55YXhpcy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2QucHVzaChhLmdsb2JhbHMueUF4aXNTY2FsZVtlXS5uaWNlTWF4LXIueVJhdGlvW2VdKnMuc3RhcnRZKSxnLnB1c2goYS5nbG9iYWxzLnlBeGlzU2NhbGVbZV0ubmljZU1heC1yLnlSYXRpb1tlXSpzLmVuZFkpfSkpLHMuZHJhZ2dlZCYmKHMuZHJhZ1g+MTB8fHMuZHJhZ1k+MTApJiZoIT09YylpZihhLmdsb2JhbHMuem9vbUVuYWJsZWQpe3ZhciB1PXguY2xvbmUoYS5nbG9iYWxzLmluaXRpYWxDb25maWcueWF4aXMpLGY9eC5jbG9uZShhLmdsb2JhbHMuaW5pdGlhbENvbmZpZy54YXhpcyk7aWYoYS5nbG9iYWxzLnpvb21lZD0hMCxhLmNvbmZpZy54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWMmJihoPU1hdGguZmxvb3IoaCksYz1NYXRoLmZsb29yKGMpLGg8MSYmKGg9MSxjPWEuZ2xvYmFscy5kYXRhUG9pbnRzKSxjLWg8MiYmKGM9aCsxKSksXCJ4eVwiIT09aSYmXCJ4XCIhPT1pfHwoZj17bWluOmgsbWF4OmN9KSxcInh5XCIhPT1pJiZcInlcIiE9PWl8fHUuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt1W2VdLm1pbj1nW2VdLHVbZV0ubWF4PWRbZV19KSksYS5jb25maWcuY2hhcnQuem9vbS5hdXRvU2NhbGVZYXhpcyl7dmFyIHA9bmV3IF8ocy5jdHgpO3U9cC5hdXRvU2NhbGVZKHMuY3R4LHUse3hheGlzOmZ9KX1pZihvKXt2YXIgYj1vLmdldEJlZm9yZVpvb21SYW5nZShmLHUpO2ImJihmPWIueGF4aXM/Yi54YXhpczpmLHU9Yi55YXhpcz9iLnlheGlzOnUpfXZhciB2PXt4YXhpczpmfTthLmNvbmZpZy5jaGFydC5ncm91cHx8KHYueWF4aXM9dSkscy5jdHgudXBkYXRlSGVscGVycy5fdXBkYXRlT3B0aW9ucyh2LCExLHMudy5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5keW5hbWljQW5pbWF0aW9uLmVuYWJsZWQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuY29uZmlnLmNoYXJ0LmV2ZW50cy56b29tZWQmJm8uem9vbUNhbGxiYWNrKGYsdSl9ZWxzZSBpZihhLmdsb2JhbHMuc2VsZWN0aW9uRW5hYmxlZCl7dmFyIG0seT1udWxsO209e21pbjpoLG1heDpjfSxcInh5XCIhPT1pJiZcInlcIiE9PWl8fCh5PXguY2xvbmUoYS5jb25maWcueWF4aXMpKS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3lbZV0ubWluPWdbZV0seVtlXS5tYXg9ZFtlXX0pKSxhLmdsb2JhbHMuc2VsZWN0aW9uPXMuc2VsZWN0aW9uLFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuY29uZmlnLmNoYXJ0LmV2ZW50cy5zZWxlY3Rpb24mJmEuY29uZmlnLmNoYXJ0LmV2ZW50cy5zZWxlY3Rpb24ocy5jdHgse3hheGlzOm0seWF4aXM6eX0pfX19LHtrZXk6XCJwYW5EcmFnZ2luZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udGV4dCxpPXRoaXMudyxhPWU7aWYodm9pZCAwIT09aS5nbG9iYWxzLmxhc3RDbGllbnRQb3NpdGlvbi54KXt2YXIgcz1pLmdsb2JhbHMubGFzdENsaWVudFBvc2l0aW9uLngtYS5jbGllbnRYLHI9aS5nbG9iYWxzLmxhc3RDbGllbnRQb3NpdGlvbi55LWEuY2xpZW50WTtNYXRoLmFicyhzKT5NYXRoLmFicyhyKSYmcz4wP3RoaXMubW92ZURpcmVjdGlvbj1cImxlZnRcIjpNYXRoLmFicyhzKT5NYXRoLmFicyhyKSYmczwwP3RoaXMubW92ZURpcmVjdGlvbj1cInJpZ2h0XCI6TWF0aC5hYnMocik+TWF0aC5hYnMocykmJnI+MD90aGlzLm1vdmVEaXJlY3Rpb249XCJ1cFwiOk1hdGguYWJzKHIpPk1hdGguYWJzKHMpJiZyPDAmJih0aGlzLm1vdmVEaXJlY3Rpb249XCJkb3duXCIpfWkuZ2xvYmFscy5sYXN0Q2xpZW50UG9zaXRpb249e3g6YS5jbGllbnRYLHk6YS5jbGllbnRZfTt2YXIgbz1pLmdsb2JhbHMuaXNSYW5nZUJhcj9pLmdsb2JhbHMubWluWTppLmdsb2JhbHMubWluWCxuPWkuZ2xvYmFscy5pc1JhbmdlQmFyP2kuZ2xvYmFscy5tYXhZOmkuZ2xvYmFscy5tYXhYO2kuY29uZmlnLnhheGlzLmNvbnZlcnRlZENhdFRvTnVtZXJpY3x8YS5wYW5TY3JvbGxlZChvLG4pfX0se2tleTpcImRlbGF5ZWRQYW5TY3JvbGxlZFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9dC5nbG9iYWxzLm1pblgsaT10Lmdsb2JhbHMubWF4WCxhPSh0Lmdsb2JhbHMubWF4WC10Lmdsb2JhbHMubWluWCkvMjtcImxlZnRcIj09PXRoaXMubW92ZURpcmVjdGlvbj8oZT10Lmdsb2JhbHMubWluWCthLGk9dC5nbG9iYWxzLm1heFgrYSk6XCJyaWdodFwiPT09dGhpcy5tb3ZlRGlyZWN0aW9uJiYoZT10Lmdsb2JhbHMubWluWC1hLGk9dC5nbG9iYWxzLm1heFgtYSksZT1NYXRoLmZsb29yKGUpLGk9TWF0aC5mbG9vcihpKSx0aGlzLnVwZGF0ZVNjcm9sbGVkQ2hhcnQoe3hheGlzOnttaW46ZSxtYXg6aX19LGUsaSl9fSx7a2V5OlwicGFuU2Nyb2xsZWRcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudyxhPXRoaXMueHlSYXRpb3Mscz14LmNsb25lKGkuZ2xvYmFscy5pbml0aWFsQ29uZmlnLnlheGlzKSxyPWEueFJhdGlvLG89aS5nbG9iYWxzLm1pblgsbj1pLmdsb2JhbHMubWF4WDtpLmdsb2JhbHMuaXNSYW5nZUJhciYmKHI9YS5pbnZlcnRlZFlSYXRpbyxvPWkuZ2xvYmFscy5taW5ZLG49aS5nbG9iYWxzLm1heFkpLFwibGVmdFwiPT09dGhpcy5tb3ZlRGlyZWN0aW9uPyh0PW8raS5nbG9iYWxzLmdyaWRXaWR0aC8xNSpyLGU9bitpLmdsb2JhbHMuZ3JpZFdpZHRoLzE1KnIpOlwicmlnaHRcIj09PXRoaXMubW92ZURpcmVjdGlvbiYmKHQ9by1pLmdsb2JhbHMuZ3JpZFdpZHRoLzE1KnIsZT1uLWkuZ2xvYmFscy5ncmlkV2lkdGgvMTUqciksaS5nbG9iYWxzLmlzUmFuZ2VCYXJ8fCh0PGkuZ2xvYmFscy5pbml0aWFsTWluWHx8ZT5pLmdsb2JhbHMuaW5pdGlhbE1heFgpJiYodD1vLGU9bik7dmFyIGw9e21pbjp0LG1heDplfTtpLmNvbmZpZy5jaGFydC56b29tLmF1dG9TY2FsZVlheGlzJiYocz1uZXcgXyh0aGlzLmN0eCkuYXV0b1NjYWxlWSh0aGlzLmN0eCxzLHt4YXhpczpsfSkpO3ZhciBoPXt4YXhpczp7bWluOnQsbWF4OmV9fTtpLmNvbmZpZy5jaGFydC5ncm91cHx8KGgueWF4aXM9cyksdGhpcy51cGRhdGVTY3JvbGxlZENoYXJ0KGgsdCxlKX19LHtrZXk6XCJ1cGRhdGVTY3JvbGxlZENoYXJ0XCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMudzt0aGlzLmN0eC51cGRhdGVIZWxwZXJzLl91cGRhdGVPcHRpb25zKHQsITEsITEpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuY29uZmlnLmNoYXJ0LmV2ZW50cy5zY3JvbGxlZCYmYS5jb25maWcuY2hhcnQuZXZlbnRzLnNjcm9sbGVkKHRoaXMuY3R4LHt4YXhpczp7bWluOmUsbWF4Oml9fSl9fV0pLGl9KGh0KSxkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMudz1lLncsdGhpcy50dEN0eD1lLHRoaXMuY3R4PWUuY3R4fXJldHVybiByKHQsW3trZXk6XCJnZXROZWFyZXN0VmFsdWVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5ob3ZlckFyZWEsaT10LmVsR3JpZCxhPXQuY2xpZW50WCxzPXQuY2xpZW50WSxyPXRoaXMudyxvPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1vLndpZHRoLGw9by5oZWlnaHQsaD1uLyhyLmdsb2JhbHMuZGF0YVBvaW50cy0xKSxjPWwvci5nbG9iYWxzLmRhdGFQb2ludHMsZD10aGlzLmhhc0JhcnMoKTshci5nbG9iYWxzLmNvbWJvQ2hhcnRzJiYhZHx8ci5jb25maWcueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljfHwoaD1uL3IuZ2xvYmFscy5kYXRhUG9pbnRzKTt2YXIgZz1hLW8ubGVmdC1yLmdsb2JhbHMuYmFyUGFkRm9yTnVtZXJpY0F4aXMsdT1zLW8udG9wO2c8MHx8dTwwfHxnPm58fHU+bD8oZS5jbGFzc0xpc3QucmVtb3ZlKFwiaG92ZXJpbmctem9vbVwiKSxlLmNsYXNzTGlzdC5yZW1vdmUoXCJob3ZlcmluZy1wYW5cIikpOnIuZ2xvYmFscy56b29tRW5hYmxlZD8oZS5jbGFzc0xpc3QucmVtb3ZlKFwiaG92ZXJpbmctcGFuXCIpLGUuY2xhc3NMaXN0LmFkZChcImhvdmVyaW5nLXpvb21cIikpOnIuZ2xvYmFscy5wYW5FbmFibGVkJiYoZS5jbGFzc0xpc3QucmVtb3ZlKFwiaG92ZXJpbmctem9vbVwiKSxlLmNsYXNzTGlzdC5hZGQoXCJob3ZlcmluZy1wYW5cIikpO3ZhciBmPU1hdGgucm91bmQoZy9oKSxwPU1hdGguZmxvb3IodS9jKTtkJiYhci5jb25maWcueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljJiYoZj1NYXRoLmNlaWwoZy9oKSxmLT0xKTt2YXIgYj1udWxsLHY9bnVsbCxtPVtdLHk9W107aWYoci5nbG9iYWxzLnNlcmllc1h2YWx1ZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bS5wdXNoKFt0WzBdKzFlLTZdLmNvbmNhdCh0KSl9KSksci5nbG9iYWxzLnNlcmllc1l2YWx1ZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7eS5wdXNoKFt0WzBdKzFlLTZdLmNvbmNhdCh0KSl9KSksbT1tLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4geC5pc051bWJlcih0KX0pKX0pKSx5PXkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB4LmlzTnVtYmVyKHQpfSkpfSkpLHIuZ2xvYmFscy5pc1hOdW1lcmljKXt2YXIgdz10aGlzLnR0Q3R4LmdldEVsR3JpZCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGs9Zyoody53aWR0aC9uKSxBPXUqKHcuaGVpZ2h0L2wpO2I9KHY9dGhpcy5jbG9zZXN0SW5NdWx0aUFycmF5KGssQSxtLHkpKS5pbmRleCxmPXYuaixudWxsIT09YiYmKG09ci5nbG9iYWxzLnNlcmllc1h2YWx1ZXNbYl0sZj0odj10aGlzLmNsb3Nlc3RJbkFycmF5KGssbSkpLmluZGV4KX1yZXR1cm4gci5nbG9iYWxzLmNhcHR1cmVkU2VyaWVzSW5kZXg9bnVsbD09PWI/LTE6YiwoIWZ8fGY8MSkmJihmPTApLHIuZ2xvYmFscy5pc0Jhckhvcml6b250YWw/ci5nbG9iYWxzLmNhcHR1cmVkRGF0YVBvaW50SW5kZXg9cDpyLmdsb2JhbHMuY2FwdHVyZWREYXRhUG9pbnRJbmRleD1mLHtjYXB0dXJlZFNlcmllczpiLGo6ci5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbD9wOmYsaG92ZXJYOmcsaG92ZXJZOnV9fX0se2tleTpcImNsb3Nlc3RJbk11bHRpQXJyYXlcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhKXt2YXIgcz10aGlzLncscj0wLG89bnVsbCxuPS0xO3MuZ2xvYmFscy5zZXJpZXMubGVuZ3RoPjE/cj10aGlzLmdldEZpcnN0QWN0aXZlWEFycmF5KGkpOm89MDt2YXIgbD1pW3JdWzBdLGg9TWF0aC5hYnModC1sKTtpZihpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSxpKXt2YXIgYT1NYXRoLmFicyh0LWUpO2E8aCYmKGg9YSxuPWkpfSkpfSkpLC0xIT09bil7dmFyIGM9YVtyXVtuXSxkPU1hdGguYWJzKGUtYyk7bz1yLGEuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXt2YXIgYT1NYXRoLmFicyhlLXRbbl0pO2E8ZCYmKGQ9YSxvPWkpfSkpfXJldHVybntpbmRleDpvLGo6bn19fSx7a2V5OlwiZ2V0Rmlyc3RBY3RpdmVYQXJyYXlcIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy53LGk9MCxhPXQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aD4wP2U6LTF9KSkscz0wO3M8YS5sZW5ndGg7cysrKWlmKC0xIT09YVtzXSYmLTE9PT1lLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzSW5kaWNlcy5pbmRleE9mKHMpJiYtMT09PWUuZ2xvYmFscy5hbmNpbGxhcnlDb2xsYXBzZWRTZXJpZXNJbmRpY2VzLmluZGV4T2Yocykpe2k9YVtzXTticmVha31yZXR1cm4gaX19LHtrZXk6XCJjbG9zZXN0SW5BcnJheVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPWVbMF0sYT1udWxsLHM9TWF0aC5hYnModC1pKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvPU1hdGguYWJzKHQtZVtyXSk7bzxzJiYocz1vLGE9cil9cmV0dXJue2luZGV4OmF9fX0se2tleTpcImlzWG92ZXJsYXBcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1bXSxpPXRoaXMudy5nbG9iYWxzLnNlcmllc1guZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dFswXX0pKTtpZihpLmxlbmd0aD4wKWZvcih2YXIgYT0wO2E8aS5sZW5ndGgtMTthKyspdm9pZCAwIT09aVthXVt0XSYmdm9pZCAwIT09aVthKzFdW3RdJiZpW2FdW3RdIT09aVthKzFdW3RdJiZlLnB1c2goXCJ1bkVxdWFsXCIpO3JldHVybiAwPT09ZS5sZW5ndGh9fSx7a2V5OlwiaXNJbml0aWFsU2VyaWVzU2FtZUxlblwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PSEwLGU9dGhpcy53Lmdsb2JhbHMuaW5pdGlhbFNlcmllcyxpPTA7aTxlLmxlbmd0aC0xO2krKylpZihlW2ldLmRhdGEubGVuZ3RoIT09ZVtpKzFdLmRhdGEubGVuZ3RoKXt0PSExO2JyZWFrfXJldHVybiB0fX0se2tleTpcImdldEJhcnNIZWlnaHRcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdSh0KS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS5nZXRCQm94KCkuaGVpZ2h0fSksMCl9fSx7a2V5OlwiZ2V0RWxNYXJrZXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiIC5hcGV4Y2hhcnRzLXNlcmllcy1tYXJrZXJzXCIpfX0se2tleTpcImdldEFsbE1hcmtlcnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMudy5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLXNlcmllcy1tYXJrZXJzLXdyYXBcIik7KHQ9dSh0KSkuc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgaT1OdW1iZXIodC5nZXRBdHRyaWJ1dGUoXCJkYXRhOnJlYWxJbmRleFwiKSksYT1OdW1iZXIoZS5nZXRBdHRyaWJ1dGUoXCJkYXRhOnJlYWxJbmRleFwiKSk7cmV0dXJuIGE8aT8xOmE+aT8tMTowfSkpO3ZhciBlPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHVzaCh0LnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1tYXJrZXJcIikpfSkpLGV9fSx7a2V5OlwiaGFzTWFya2Vyc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RWxNYXJrZXJzKCkubGVuZ3RoPjB9fSx7a2V5OlwiZ2V0RWxCYXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFwZXhjaGFydHMtYmFyLXNlcmllcywgIC5hcGV4Y2hhcnRzLWNhbmRsZXN0aWNrLXNlcmllcywgLmFwZXhjaGFydHMtYm94UGxvdC1zZXJpZXMsIC5hcGV4Y2hhcnRzLXJhbmdlYmFyLXNlcmllc1wiKX19LHtrZXk6XCJoYXNCYXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRFbEJhcnMoKS5sZW5ndGg+MH19LHtrZXk6XCJnZXRIb3Zlck1hcmtlclNpemVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT1lLmNvbmZpZy5tYXJrZXJzLmhvdmVyLnNpemU7cmV0dXJuIHZvaWQgMD09PWkmJihpPWUuZ2xvYmFscy5tYXJrZXJzLnNpemVbdF0rZS5jb25maWcubWFya2Vycy5ob3Zlci5zaXplT2Zmc2V0KSxpfX0se2tleTpcInRvZ2dsZUFsbFRvb2x0aXBTZXJpZXNHcm91cHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT10aGlzLnR0Q3R4OzA9PT1pLmFsbFRvb2x0aXBTZXJpZXNHcm91cHMubGVuZ3RoJiYoaS5hbGxUb29sdGlwU2VyaWVzR3JvdXBzPWUuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy10b29sdGlwLXNlcmllcy1ncm91cFwiKSk7Zm9yKHZhciBhPWkuYWxsVG9vbHRpcFNlcmllc0dyb3VwcyxzPTA7czxhLmxlbmd0aDtzKyspXCJlbmFibGVcIj09PXQ/KGFbc10uY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtYWN0aXZlXCIpLGFbc10uc3R5bGUuZGlzcGxheT1lLmNvbmZpZy50b29sdGlwLml0ZW1zLmRpc3BsYXkpOihhW3NdLmNsYXNzTGlzdC5yZW1vdmUoXCJhcGV4Y2hhcnRzLWFjdGl2ZVwiKSxhW3NdLnN0eWxlLmRpc3BsYXk9XCJub25lXCIpfX1dKSx0fSgpLGd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy53PWUudyx0aGlzLmN0eD1lLmN0eCx0aGlzLnR0Q3R4PWUsdGhpcy50b29sdGlwVXRpbD1uZXcgZHQoZSl9cmV0dXJuIHIodCxbe2tleTpcImRyYXdTZXJpZXNUZXh0c1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2hhcmVkLGk9dm9pZCAwPT09ZXx8ZSxhPXQudHRJdGVtcyxzPXQuaSxyPXZvaWQgMD09PXM/MDpzLG89dC5qLG49dm9pZCAwPT09bz9udWxsOm8sbD10LnkxLGg9dC55MixjPXQuZSxkPXRoaXMudzt2b2lkIDAhPT1kLmNvbmZpZy50b29sdGlwLmN1c3RvbT90aGlzLmhhbmRsZUN1c3RvbVRvb2x0aXAoe2k6cixqOm4seTE6bCx5MjpoLHc6ZH0pOnRoaXMudG9nZ2xlQWN0aXZlSW5hY3RpdmVTZXJpZXMoaSk7dmFyIGc9dGhpcy5nZXRWYWx1ZXNUb1ByaW50KHtpOnIsajpufSk7dGhpcy5wcmludExhYmVscyh7aTpyLGo6bix2YWx1ZXM6Zyx0dEl0ZW1zOmEsc2hhcmVkOmksZTpjfSk7dmFyIHU9dGhpcy50dEN0eC5nZXRFbFRvb2x0aXAoKTt0aGlzLnR0Q3R4LnRvb2x0aXBSZWN0LnR0V2lkdGg9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCx0aGlzLnR0Q3R4LnRvb2x0aXBSZWN0LnR0SGVpZ2h0PXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fX0se2tleTpcInByaW50TGFiZWxzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGksYT10aGlzLHM9dC5pLHI9dC5qLG89dC52YWx1ZXMsbj10LnR0SXRlbXMsbD10LnNoYXJlZCxoPXQuZSxjPXRoaXMudyxkPVtdLGc9ZnVuY3Rpb24odCl7cmV0dXJuIGMuZ2xvYmFscy5zZXJpZXNHb2Fsc1t0XSYmYy5nbG9iYWxzLnNlcmllc0dvYWxzW3RdW3JdJiZBcnJheS5pc0FycmF5KGMuZ2xvYmFscy5zZXJpZXNHb2Fsc1t0XVtyXSl9LHU9by54VmFsLGY9by56VmFsLHA9by54QXhpc1RUVmFsLHg9XCJcIixiPWMuZ2xvYmFscy5jb2xvcnNbc107bnVsbCE9PXImJmMuY29uZmlnLnBsb3RPcHRpb25zLmJhci5kaXN0cmlidXRlZCYmKGI9Yy5nbG9iYWxzLmNvbG9yc1tyXSk7Zm9yKHZhciB2PWZ1bmN0aW9uKHQsbyl7dmFyIHY9YS5nZXRGb3JtYXR0ZXJzKHMpO3g9YS5nZXRTZXJpZXNOYW1lKHtmbjp2LnlMYlRpdGxlRm9ybWF0dGVyLGluZGV4OnMsc2VyaWVzSW5kZXg6cyxqOnJ9KSxcInRyZWVtYXBcIj09PWMuY29uZmlnLmNoYXJ0LnR5cGUmJih4PXYueUxiVGl0bGVGb3JtYXR0ZXIoU3RyaW5nKGMuY29uZmlnLnNlcmllc1tzXS5kYXRhW3JdLngpLHtzZXJpZXM6Yy5nbG9iYWxzLnNlcmllcyxzZXJpZXNJbmRleDpzLGRhdGFQb2ludEluZGV4OnIsdzpjfSkpO3ZhciBtPWMuY29uZmlnLnRvb2x0aXAuaW52ZXJzZU9yZGVyP286dDtpZihjLmdsb2JhbHMuYXhpc0NoYXJ0cyl7dmFyIHk9ZnVuY3Rpb24odCl7cmV0dXJuIHYueUxiRm9ybWF0dGVyKGMuZ2xvYmFscy5zZXJpZXNbdF1bcl0se3NlcmllczpjLmdsb2JhbHMuc2VyaWVzLHNlcmllc0luZGV4OnQsZGF0YVBvaW50SW5kZXg6cix3OmN9KX07aWYobCl2PWEuZ2V0Rm9ybWF0dGVycyhtKSx4PWEuZ2V0U2VyaWVzTmFtZSh7Zm46di55TGJUaXRsZUZvcm1hdHRlcixpbmRleDptLHNlcmllc0luZGV4OnMsajpyfSksYj1jLmdsb2JhbHMuY29sb3JzW21dLGk9eShtKSxnKG0pJiYoZD1jLmdsb2JhbHMuc2VyaWVzR29hbHNbbV1bcl0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm57YXR0cnM6dCx2YWw6di55TGJGb3JtYXR0ZXIodC52YWx1ZSx7c2VyaWVzSW5kZXg6bSxkYXRhUG9pbnRJbmRleDpyLHc6Y30pfX0pKSk7ZWxzZXt2YXIgdyxrPW51bGw9PWh8fG51bGw9PT0odz1oLnRhcmdldCl8fHZvaWQgMD09PXc/dm9pZCAwOncuZ2V0QXR0cmlidXRlKFwiZmlsbFwiKTtrJiYoYj0tMSE9PWsuaW5kZXhPZihcInVybFwiKT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGsuc3Vic3RyKDQpLnNsaWNlKDAsLTEpKS5jaGlsZE5vZGVzWzBdLmdldEF0dHJpYnV0ZShcInN0cm9rZVwiKTprKSxpPXkocyksZyhzKSYmQXJyYXkuaXNBcnJheShjLmdsb2JhbHMuc2VyaWVzR29hbHNbc11bcl0pJiYoZD1jLmdsb2JhbHMuc2VyaWVzR29hbHNbc11bcl0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm57YXR0cnM6dCx2YWw6di55TGJGb3JtYXR0ZXIodC52YWx1ZSx7c2VyaWVzSW5kZXg6cyxkYXRhUG9pbnRJbmRleDpyLHc6Y30pfX0pKSl9fW51bGw9PT1yJiYoaT12LnlMYkZvcm1hdHRlcihjLmdsb2JhbHMuc2VyaWVzW3NdLGUoZSh7fSxjKSx7fSx7c2VyaWVzSW5kZXg6cyxkYXRhUG9pbnRJbmRleDpzfSkpKSxhLkRPTUhhbmRsaW5nKHtpOnMsdDptLGo6cix0dEl0ZW1zOm4sdmFsdWVzOnt2YWw6aSxnb2FsVmFsczpkLHhWYWw6dSx4QXhpc1RUVmFsOnAselZhbDpmfSxzZXJpZXNOYW1lOngsc2hhcmVkOmwscENvbG9yOmJ9KX0sbT0wLHk9Yy5nbG9iYWxzLnNlcmllcy5sZW5ndGgtMTttPGMuZ2xvYmFscy5zZXJpZXMubGVuZ3RoO20rKyx5LS0pdihtLHkpfX0se2tleTpcImdldEZvcm1hdHRlcnNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMudyxhPWkuZ2xvYmFscy55TGFiZWxGb3JtYXR0ZXJzW3RdO3JldHVybiB2b2lkIDAhPT1pLmdsb2JhbHMudHRWYWw/QXJyYXkuaXNBcnJheShpLmdsb2JhbHMudHRWYWwpPyhhPWkuZ2xvYmFscy50dFZhbFt0XSYmaS5nbG9iYWxzLnR0VmFsW3RdLmZvcm1hdHRlcixlPWkuZ2xvYmFscy50dFZhbFt0XSYmaS5nbG9iYWxzLnR0VmFsW3RdLnRpdGxlJiZpLmdsb2JhbHMudHRWYWxbdF0udGl0bGUuZm9ybWF0dGVyKTooYT1pLmdsb2JhbHMudHRWYWwuZm9ybWF0dGVyLFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuZ2xvYmFscy50dFZhbC50aXRsZS5mb3JtYXR0ZXImJihlPWkuZ2xvYmFscy50dFZhbC50aXRsZS5mb3JtYXR0ZXIpKTplPWkuY29uZmlnLnRvb2x0aXAueS50aXRsZS5mb3JtYXR0ZXIsXCJmdW5jdGlvblwiIT10eXBlb2YgYSYmKGE9aS5nbG9iYWxzLnlMYWJlbEZvcm1hdHRlcnNbMF0/aS5nbG9iYWxzLnlMYWJlbEZvcm1hdHRlcnNbMF06ZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiYoZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pLHt5TGJGb3JtYXR0ZXI6YSx5TGJUaXRsZUZvcm1hdHRlcjplfX19LHtrZXk6XCJnZXRTZXJpZXNOYW1lXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5mbixpPXQuaW5kZXgsYT10LnNlcmllc0luZGV4LHM9dC5qLHI9dGhpcy53O3JldHVybiBlKFN0cmluZyhyLmdsb2JhbHMuc2VyaWVzTmFtZXNbaV0pLHtzZXJpZXM6ci5nbG9iYWxzLnNlcmllcyxzZXJpZXNJbmRleDphLGRhdGFQb2ludEluZGV4OnMsdzpyfSl9fSx7a2V5OlwiRE9NSGFuZGxpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXt0Lmk7dmFyIGU9dC50LGk9dC5qLGE9dC50dEl0ZW1zLHM9dC52YWx1ZXMscj10LnNlcmllc05hbWUsbz10LnNoYXJlZCxuPXQucENvbG9yLGw9dGhpcy53LGg9dGhpcy50dEN0eCxjPXMudmFsLGQ9cy5nb2FsVmFscyxnPXMueFZhbCx1PXMueEF4aXNUVFZhbCxmPXMuelZhbCxwPW51bGw7cD1hW2VdLmNoaWxkcmVuLGwuY29uZmlnLnRvb2x0aXAuZmlsbFNlcmllc0NvbG9yJiYoYVtlXS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9bixwWzBdLnN0eWxlLmRpc3BsYXk9XCJub25lXCIpLGguc2hvd1Rvb2x0aXBUaXRsZSYmKG51bGw9PT1oLnRvb2x0aXBUaXRsZSYmKGgudG9vbHRpcFRpdGxlPWwuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy10b29sdGlwLXRpdGxlXCIpKSxoLnRvb2x0aXBUaXRsZS5pbm5lckhUTUw9ZyksaC5pc1hBeGlzVG9vbHRpcEVuYWJsZWQmJihoLnhheGlzVG9vbHRpcFRleHQuaW5uZXJIVE1MPVwiXCIhPT11P3U6Zyk7dmFyIHg9YVtlXS5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtdG9vbHRpcC10ZXh0LXktbGFiZWxcIik7eCYmKHguaW5uZXJIVE1MPXJ8fFwiXCIpO3ZhciBiPWFbZV0ucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLXRvb2x0aXAtdGV4dC15LXZhbHVlXCIpO2ImJihiLmlubmVySFRNTD12b2lkIDAhPT1jP2M6XCJcIikscFswXSYmcFswXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhcGV4Y2hhcnRzLXRvb2x0aXAtbWFya2VyXCIpJiYobC5jb25maWcudG9vbHRpcC5tYXJrZXIuZmlsbENvbG9ycyYmQXJyYXkuaXNBcnJheShsLmNvbmZpZy50b29sdGlwLm1hcmtlci5maWxsQ29sb3JzKSYmKG49bC5jb25maWcudG9vbHRpcC5tYXJrZXIuZmlsbENvbG9yc1tlXSkscFswXS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9biksbC5jb25maWcudG9vbHRpcC5tYXJrZXIuc2hvd3x8KHBbMF0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIik7dmFyIHY9YVtlXS5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtdG9vbHRpcC10ZXh0LWdvYWxzLWxhYmVsXCIpLG09YVtlXS5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtdG9vbHRpcC10ZXh0LWdvYWxzLXZhbHVlXCIpO2lmKGQubGVuZ3RoJiZsLmdsb2JhbHMuc2VyaWVzR29hbHNbZV0pe3ZhciB5PWZ1bmN0aW9uKCl7dmFyIHQ9XCI8ZGl2ID5cIixlPVwiPGRpdj5cIjtkLmZvckVhY2goKGZ1bmN0aW9uKGksYSl7dCs9JyA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleFwiPjxzcGFuIGNsYXNzPVwiYXBleGNoYXJ0cy10b29sdGlwLW1hcmtlclwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogJy5jb25jYXQoaS5hdHRycy5zdHJva2VDb2xvciwnOyBoZWlnaHQ6IDNweDsgYm9yZGVyLXJhZGl1czogMDsgdG9wOiA1cHg7XCI+PC9zcGFuPiAnKS5jb25jYXQoaS5hdHRycy5uYW1lLFwiPC9kaXY+XCIpLGUrPVwiPGRpdj5cIi5jb25jYXQoaS52YWwsXCI8L2Rpdj5cIil9KSksdi5pbm5lckhUTUw9dCtcIjwvZGl2PlwiLG0uaW5uZXJIVE1MPWUrXCI8L2Rpdj5cIn07bz9sLmdsb2JhbHMuc2VyaWVzR29hbHNbZV1baV0mJkFycmF5LmlzQXJyYXkobC5nbG9iYWxzLnNlcmllc0dvYWxzW2VdW2ldKT95KCk6KHYuaW5uZXJIVE1MPVwiXCIsbS5pbm5lckhUTUw9XCJcIik6eSgpfWVsc2Ugdi5pbm5lckhUTUw9XCJcIixtLmlubmVySFRNTD1cIlwiO251bGwhPT1mJiYoYVtlXS5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtdG9vbHRpcC10ZXh0LXotbGFiZWxcIikuaW5uZXJIVE1MPWwuY29uZmlnLnRvb2x0aXAuei50aXRsZSxhW2VdLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy10b29sdGlwLXRleHQtei12YWx1ZVwiKS5pbm5lckhUTUw9dm9pZCAwIT09Zj9mOlwiXCIpO28mJnBbMF0mJihudWxsPT1jfHxsLmdsb2JhbHMuYW5jaWxsYXJ5Q29sbGFwc2VkU2VyaWVzSW5kaWNlcy5pbmRleE9mKGUpPi0xfHxsLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzSW5kaWNlcy5pbmRleE9mKGUpPi0xP3BbMF0ucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiOnBbMF0ucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PWwuY29uZmlnLnRvb2x0aXAuaXRlbXMuZGlzcGxheSl9fSx7a2V5OlwidG9nZ2xlQWN0aXZlSW5hY3RpdmVTZXJpZXNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnc7aWYodCl0aGlzLnRvb2x0aXBVdGlsLnRvZ2dsZUFsbFRvb2x0aXBTZXJpZXNHcm91cHMoXCJlbmFibGVcIik7ZWxzZXt0aGlzLnRvb2x0aXBVdGlsLnRvZ2dsZUFsbFRvb2x0aXBTZXJpZXNHcm91cHMoXCJkaXNhYmxlXCIpO3ZhciBpPWUuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy10b29sdGlwLXNlcmllcy1ncm91cFwiKTtpJiYoaS5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1hY3RpdmVcIiksaS5zdHlsZS5kaXNwbGF5PWUuY29uZmlnLnRvb2x0aXAuaXRlbXMuZGlzcGxheSl9fX0se2tleTpcImdldFZhbHVlc1RvUHJpbnRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmksaT10LmosYT10aGlzLncscz10aGlzLmN0eC5zZXJpZXMuZmlsdGVyZWRTZXJpZXNYKCkscj1cIlwiLG89XCJcIixuPW51bGwsbD1udWxsLGg9e3NlcmllczphLmdsb2JhbHMuc2VyaWVzLHNlcmllc0luZGV4OmUsZGF0YVBvaW50SW5kZXg6aSx3OmF9LGM9YS5nbG9iYWxzLnR0WkZvcm1hdHRlcjtudWxsPT09aT9sPWEuZ2xvYmFscy5zZXJpZXNbZV06YS5nbG9iYWxzLmlzWE51bWVyaWMmJlwidHJlZW1hcFwiIT09YS5jb25maWcuY2hhcnQudHlwZT8ocj1zW2VdW2ldLDA9PT1zW2VdLmxlbmd0aCYmKHI9c1t0aGlzLnRvb2x0aXBVdGlsLmdldEZpcnN0QWN0aXZlWEFycmF5KHMpXVtpXSkpOnI9dm9pZCAwIT09YS5nbG9iYWxzLmxhYmVsc1tpXT9hLmdsb2JhbHMubGFiZWxzW2ldOlwiXCI7dmFyIGQ9cjthLmdsb2JhbHMuaXNYTnVtZXJpYyYmXCJkYXRldGltZVwiPT09YS5jb25maWcueGF4aXMudHlwZT9yPW5ldyBXKHRoaXMuY3R4KS54TGFiZWxGb3JtYXQoYS5nbG9iYWxzLnR0S2V5Rm9ybWF0dGVyLGQsZCx7aTp2b2lkIDAsZGF0ZUZvcm1hdHRlcjpuZXcgVCh0aGlzLmN0eCkuZm9ybWF0RGF0ZSx3OnRoaXMud30pOnI9YS5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbD9hLmdsb2JhbHMueUxhYmVsRm9ybWF0dGVyc1swXShkLGgpOmEuZ2xvYmFscy54TGFiZWxGb3JtYXR0ZXIoZCxoKTtyZXR1cm4gdm9pZCAwIT09YS5jb25maWcudG9vbHRpcC54LmZvcm1hdHRlciYmKHI9YS5nbG9iYWxzLnR0S2V5Rm9ybWF0dGVyKGQsaCkpLGEuZ2xvYmFscy5zZXJpZXNaLmxlbmd0aD4wJiZhLmdsb2JhbHMuc2VyaWVzWltlXS5sZW5ndGg+MCYmKG49YyhhLmdsb2JhbHMuc2VyaWVzWltlXVtpXSxhKSksbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbmZpZy54YXhpcy50b29sdGlwLmZvcm1hdHRlcj9hLmdsb2JhbHMueGF4aXNUb29sdGlwRm9ybWF0dGVyKGQsaCk6cix7dmFsOkFycmF5LmlzQXJyYXkobCk/bC5qb2luKFwiIFwiKTpsLHhWYWw6QXJyYXkuaXNBcnJheShyKT9yLmpvaW4oXCIgXCIpOnIseEF4aXNUVFZhbDpBcnJheS5pc0FycmF5KG8pP28uam9pbihcIiBcIik6byx6VmFsOm59fX0se2tleTpcImhhbmRsZUN1c3RvbVRvb2x0aXBcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmksaT10LmosYT10LnkxLHM9dC55MixyPXQudyxvPXRoaXMudHRDdHguZ2V0RWxUb29sdGlwKCksbj1yLmNvbmZpZy50b29sdGlwLmN1c3RvbTtBcnJheS5pc0FycmF5KG4pJiZuW2VdJiYobj1uW2VdKSxvLmlubmVySFRNTD1uKHtjdHg6dGhpcy5jdHgsc2VyaWVzOnIuZ2xvYmFscy5zZXJpZXMsc2VyaWVzSW5kZXg6ZSxkYXRhUG9pbnRJbmRleDppLHkxOmEseTI6cyx3OnJ9KX19XSksdH0oKSx1dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMudHRDdHg9ZSx0aGlzLmN0eD1lLmN0eCx0aGlzLnc9ZS53fXJldHVybiByKHQsW3trZXk6XCJtb3ZlWENyb3NzaGFpcnNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxpPXRoaXMudHRDdHgsYT10aGlzLncscz1pLmdldEVsWENyb3NzaGFpcnMoKSxyPXQtaS54Y3Jvc3NoYWlyc1dpZHRoLzIsbz1hLmdsb2JhbHMubGFiZWxzLnNsaWNlKCkubGVuZ3RoO2lmKG51bGwhPT1lJiYocj1hLmdsb2JhbHMuZ3JpZFdpZHRoL28qZSksbnVsbD09PXN8fGEuZ2xvYmFscy5pc0Jhckhvcml6b250YWx8fChzLnNldEF0dHJpYnV0ZShcInhcIixyKSxzLnNldEF0dHJpYnV0ZShcIngxXCIscikscy5zZXRBdHRyaWJ1dGUoXCJ4MlwiLHIpLHMuc2V0QXR0cmlidXRlKFwieTJcIixhLmdsb2JhbHMuZ3JpZEhlaWdodCkscy5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1hY3RpdmVcIikpLHI8MCYmKHI9MCkscj5hLmdsb2JhbHMuZ3JpZFdpZHRoJiYocj1hLmdsb2JhbHMuZ3JpZFdpZHRoKSxpLmlzWEF4aXNUb29sdGlwRW5hYmxlZCl7dmFyIG49cjtcInRpY2tXaWR0aFwiIT09YS5jb25maWcueGF4aXMuY3Jvc3NoYWlycy53aWR0aCYmXCJiYXJXaWR0aFwiIT09YS5jb25maWcueGF4aXMuY3Jvc3NoYWlycy53aWR0aHx8KG49citpLnhjcm9zc2hhaXJzV2lkdGgvMiksdGhpcy5tb3ZlWEF4aXNUb29sdGlwKG4pfX19LHtrZXk6XCJtb3ZlWUNyb3NzaGFpcnNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnR0Q3R4O251bGwhPT1lLnljcm9zc2hhaXJzJiZtLnNldEF0dHJzKGUueWNyb3NzaGFpcnMse3kxOnQseTI6dH0pLG51bGwhPT1lLnljcm9zc2hhaXJzSGlkZGVuJiZtLnNldEF0dHJzKGUueWNyb3NzaGFpcnNIaWRkZW4se3kxOnQseTI6dH0pfX0se2tleTpcIm1vdmVYQXhpc1Rvb2x0aXBcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT10aGlzLnR0Q3R4O2lmKG51bGwhPT1pLnhheGlzVG9vbHRpcCYmMCE9PWkueGNyb3NzaGFpcnNXaWR0aCl7aS54YXhpc1Rvb2x0aXAuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtYWN0aXZlXCIpO3ZhciBhPWkueGF4aXNPZmZZK2UuY29uZmlnLnhheGlzLnRvb2x0aXAub2Zmc2V0WStlLmdsb2JhbHMudHJhbnNsYXRlWSsxK2UuY29uZmlnLnhheGlzLm9mZnNldFk7aWYodC09aS54YXhpc1Rvb2x0aXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgvMiwhaXNOYU4odCkpe3QrPWUuZ2xvYmFscy50cmFuc2xhdGVYO3ZhciBzO3M9bmV3IG0odGhpcy5jdHgpLmdldFRleHRSZWN0cyhpLnhheGlzVG9vbHRpcFRleHQuaW5uZXJIVE1MKSxpLnhheGlzVG9vbHRpcFRleHQuc3R5bGUubWluV2lkdGg9cy53aWR0aCtcInB4XCIsaS54YXhpc1Rvb2x0aXAuc3R5bGUubGVmdD10K1wicHhcIixpLnhheGlzVG9vbHRpcC5zdHlsZS50b3A9YStcInB4XCJ9fX19LHtrZXk6XCJtb3ZlWUF4aXNUb29sdGlwXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53LGk9dGhpcy50dEN0eDtudWxsPT09aS55YXhpc1RURWxzJiYoaS55YXhpc1RURWxzPWUuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXBcIikpO3ZhciBhPXBhcnNlSW50KGkueWNyb3NzaGFpcnNIaWRkZW4uZ2V0QXR0cmlidXRlKFwieTFcIiksMTApLHM9ZS5nbG9iYWxzLnRyYW5zbGF0ZVkrYSxyPWkueWF4aXNUVEVsc1t0XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsbz1lLmdsb2JhbHMudHJhbnNsYXRlWUF4aXNYW3RdLTI7ZS5jb25maWcueWF4aXNbdF0ub3Bwb3NpdGUmJihvLT0yNikscy09ci8yLC0xPT09ZS5nbG9iYWxzLmlnbm9yZVlBeGlzSW5kZXhlcy5pbmRleE9mKHQpPyhpLnlheGlzVFRFbHNbdF0uY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtYWN0aXZlXCIpLGkueWF4aXNUVEVsc1t0XS5zdHlsZS50b3A9cytcInB4XCIsaS55YXhpc1RURWxzW3RdLnN0eWxlLmxlZnQ9bytlLmNvbmZpZy55YXhpc1t0XS50b29sdGlwLm9mZnNldFgrXCJweFwiKTppLnlheGlzVFRFbHNbdF0uY2xhc3NMaXN0LnJlbW92ZShcImFwZXhjaGFydHMtYWN0aXZlXCIpfX0se2tleTpcIm1vdmVUb29sdGlwXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxhPXRoaXMudyxzPXRoaXMudHRDdHgscj1zLmdldEVsVG9vbHRpcCgpLG89cy50b29sdGlwUmVjdCxuPW51bGwhPT1pP3BhcnNlRmxvYXQoaSk6MSxsPXBhcnNlRmxvYXQodCkrbis1LGg9cGFyc2VGbG9hdChlKStuLzI7aWYobD5hLmdsb2JhbHMuZ3JpZFdpZHRoLzImJihsPWwtby50dFdpZHRoLW4tMTApLGw+YS5nbG9iYWxzLmdyaWRXaWR0aC1vLnR0V2lkdGgtMTAmJihsPWEuZ2xvYmFscy5ncmlkV2lkdGgtby50dFdpZHRoKSxsPC0yMCYmKGw9LTIwKSxhLmNvbmZpZy50b29sdGlwLmZvbGxvd0N1cnNvcil7dmFyIGM9cy5nZXRFbEdyaWQoKSxkPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aD1zLmUuY2xpZW50WSthLmdsb2JhbHMudHJhbnNsYXRlWS1kLnRvcC1vLnR0SGVpZ2h0LzJ9ZWxzZSBhLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsfHwoby50dEhlaWdodC8yK2g+YS5nbG9iYWxzLmdyaWRIZWlnaHQmJihoPWEuZ2xvYmFscy5ncmlkSGVpZ2h0LW8udHRIZWlnaHQrYS5nbG9iYWxzLnRyYW5zbGF0ZVkpLGg8MCYmKGg9MCkpO2lzTmFOKGwpfHwobCs9YS5nbG9iYWxzLnRyYW5zbGF0ZVgsci5zdHlsZS5sZWZ0PWwrXCJweFwiLHIuc3R5bGUudG9wPWgrXCJweFwiKX19LHtrZXk6XCJtb3ZlTWFya2Vyc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53LGE9dGhpcy50dEN0eDtpZihpLmdsb2JhbHMubWFya2Vycy5zaXplW3RdPjApZm9yKHZhciBzPWkuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIgLmFwZXhjaGFydHMtc2VyaWVzW2RhdGFcXFxcOnJlYWxJbmRleD0nXCIuY29uY2F0KHQsXCInXSAuYXBleGNoYXJ0cy1tYXJrZXJcIikpLHI9MDtyPHMubGVuZ3RoO3IrKylwYXJzZUludChzW3JdLmdldEF0dHJpYnV0ZShcInJlbFwiKSwxMCk9PT1lJiYoYS5tYXJrZXIucmVzZXRQb2ludHNTaXplKCksYS5tYXJrZXIuZW5sYXJnZUN1cnJlbnRQb2ludChlLHNbcl0pKTtlbHNlIGEubWFya2VyLnJlc2V0UG9pbnRzU2l6ZSgpLHRoaXMubW92ZUR5bmFtaWNQb2ludE9uSG92ZXIoZSx0KX19LHtrZXk6XCJtb3ZlRHluYW1pY1BvaW50T25Ib3ZlclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGksYSxzPXRoaXMudyxyPXRoaXMudHRDdHgsbz1zLmdsb2JhbHMucG9pbnRzQXJyYXksbj1yLnRvb2x0aXBVdGlsLmdldEhvdmVyTWFya2VyU2l6ZShlKSxsPXMuY29uZmlnLnNlcmllc1tlXS50eXBlO2lmKCFsfHxcImNvbHVtblwiIT09bCYmXCJjYW5kbGVzdGlja1wiIT09bCYmXCJib3hQbG90XCIhPT1sKXtpPW9bZV1bdF1bMF0sYT1vW2VdW3RdWzFdP29bZV1bdF1bMV06MDt2YXIgaD1zLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtc2VyaWVzW2RhdGFcXFxcOnJlYWxJbmRleD0nXCIuY29uY2F0KGUsXCInXSAuYXBleGNoYXJ0cy1zZXJpZXMtbWFya2VycyBjaXJjbGVcIikpO2gmJmE8cy5nbG9iYWxzLmdyaWRIZWlnaHQmJmE+MCYmKGguc2V0QXR0cmlidXRlKFwiclwiLG4pLGguc2V0QXR0cmlidXRlKFwiY3hcIixpKSxoLnNldEF0dHJpYnV0ZShcImN5XCIsYSkpLHRoaXMubW92ZVhDcm9zc2hhaXJzKGkpLHIuZml4ZWRUb29sdGlwfHx0aGlzLm1vdmVUb29sdGlwKGksYSxuKX19fSx7a2V5OlwibW92ZUR5bmFtaWNQb2ludHNPbkhvdmVyXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLnR0Q3R4LGE9aS53LHM9MCxyPTAsbz1hLmdsb2JhbHMucG9pbnRzQXJyYXk7ZT1uZXcgTih0aGlzLmN0eCkuZ2V0QWN0aXZlQ29uZmlnU2VyaWVzSW5kZXgoXCJhc2NcIixbXCJsaW5lXCIsXCJhcmVhXCIsXCJzY2F0dGVyXCIsXCJidWJibGVcIl0pO3ZhciBuPWkudG9vbHRpcFV0aWwuZ2V0SG92ZXJNYXJrZXJTaXplKGUpO29bZV0mJihzPW9bZV1bdF1bMF0scj1vW2VdW3RdWzFdKTt2YXIgbD1pLnRvb2x0aXBVdGlsLmdldEFsbE1hcmtlcnMoKTtpZihudWxsIT09bClmb3IodmFyIGg9MDtoPGEuZ2xvYmFscy5zZXJpZXMubGVuZ3RoO2grKyl7dmFyIGM9b1toXTtpZihhLmdsb2JhbHMuY29tYm9DaGFydHMmJnZvaWQgMD09PWMmJmwuc3BsaWNlKGgsMCxudWxsKSxjJiZjLmxlbmd0aCl7dmFyIGQ9b1toXVt0XVsxXSxnPXZvaWQgMDtpZihsW2hdLnNldEF0dHJpYnV0ZShcImN4XCIscyksXCJyYW5nZUFyZWFcIj09PWEuY29uZmlnLmNoYXJ0LnR5cGUmJiFhLmdsb2JhbHMuY29tYm9DaGFydHMpe3ZhciB1PXQrYS5nbG9iYWxzLnNlcmllc1toXS5sZW5ndGg7Zz1vW2hdW3VdWzFdLGQtPU1hdGguYWJzKGQtZykvMn1udWxsIT09ZCYmIWlzTmFOKGQpJiZkPGEuZ2xvYmFscy5ncmlkSGVpZ2h0K24mJmQrbj4wPyhsW2hdJiZsW2hdLnNldEF0dHJpYnV0ZShcInJcIixuKSxsW2hdJiZsW2hdLnNldEF0dHJpYnV0ZShcImN5XCIsZCkpOmxbaF0mJmxbaF0uc2V0QXR0cmlidXRlKFwiclwiLDApfX1pZih0aGlzLm1vdmVYQ3Jvc3NoYWlycyhzKSwhaS5maXhlZFRvb2x0aXApe3ZhciBmPXJ8fGEuZ2xvYmFscy5ncmlkSGVpZ2h0O3RoaXMubW92ZVRvb2x0aXAocyxmLG4pfX19LHtrZXk6XCJtb3ZlU3RpY2t5VG9vbHRpcE92ZXJCYXJzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53LGk9dGhpcy50dEN0eCxhPWUuZ2xvYmFscy5jb2x1bW5TZXJpZXM/ZS5nbG9iYWxzLmNvbHVtblNlcmllcy5sZW5ndGg6ZS5nbG9iYWxzLnNlcmllcy5sZW5ndGgscz1hPj0yJiZhJTI9PTA/TWF0aC5mbG9vcihhLzIpOk1hdGguZmxvb3IoYS8yKSsxO2UuZ2xvYmFscy5pc0Jhckhvcml6b250YWwmJihzPW5ldyBOKHRoaXMuY3R4KS5nZXRBY3RpdmVDb25maWdTZXJpZXNJbmRleChcImRlc2NcIikrMSk7dmFyIHI9ZS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLWJhci1zZXJpZXMgLmFwZXhjaGFydHMtc2VyaWVzW3JlbD0nXCIuY29uY2F0KHMsXCInXSBwYXRoW2o9J1wiKS5jb25jYXQodCxcIiddLCAuYXBleGNoYXJ0cy1jYW5kbGVzdGljay1zZXJpZXMgLmFwZXhjaGFydHMtc2VyaWVzW3JlbD0nXCIpLmNvbmNhdChzLFwiJ10gcGF0aFtqPSdcIikuY29uY2F0KHQsXCInXSwgLmFwZXhjaGFydHMtYm94UGxvdC1zZXJpZXMgLmFwZXhjaGFydHMtc2VyaWVzW3JlbD0nXCIpLmNvbmNhdChzLFwiJ10gcGF0aFtqPSdcIikuY29uY2F0KHQsXCInXSwgLmFwZXhjaGFydHMtcmFuZ2ViYXItc2VyaWVzIC5hcGV4Y2hhcnRzLXNlcmllc1tyZWw9J1wiKS5jb25jYXQocyxcIiddIHBhdGhbaj0nXCIpLmNvbmNhdCh0LFwiJ11cIikpLG89cj9wYXJzZUZsb2F0KHIuZ2V0QXR0cmlidXRlKFwiY3hcIikpOjAsbj1yP3BhcnNlRmxvYXQoci5nZXRBdHRyaWJ1dGUoXCJjeVwiKSk6MCxsPXI/cGFyc2VGbG9hdChyLmdldEF0dHJpYnV0ZShcImJhcldpZHRoXCIpKTowLGg9cj9wYXJzZUZsb2F0KHIuZ2V0QXR0cmlidXRlKFwiYmFySGVpZ2h0XCIpKTowLGM9aS5nZXRFbEdyaWQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXIuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXBleGNoYXJ0cy1jYW5kbGVzdGljay1hcmVhXCIpfHxyLmNsYXNzTGlzdC5jb250YWlucyhcImFwZXhjaGFydHMtYm94UGxvdC1hcmVhXCIpO2lmKGUuZ2xvYmFscy5pc1hOdW1lcmljPyhyJiYhZCYmKG8tPWElMiE9MD9sLzI6MCksciYmZCYmZS5nbG9iYWxzLmNvbWJvQ2hhcnRzJiYoby09bC8yKSk6ZS5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbHx8KG89aS54QXhpc1RpY2tzUG9zaXRpb25zW3QtMV0raS5kYXRhUG9pbnRzRGl2aWRlZFdpZHRoLzIsaXNOYU4obykmJihvPWkueEF4aXNUaWNrc1Bvc2l0aW9uc1t0XS1pLmRhdGFQb2ludHNEaXZpZGVkV2lkdGgvMikpLGUuZ2xvYmFscy5pc0Jhckhvcml6b250YWw/KG4+ZS5nbG9iYWxzLmdyaWRIZWlnaHQvMiYmKG4tPWkudG9vbHRpcFJlY3QudHRIZWlnaHQpLChuPW4rZS5jb25maWcuZ3JpZC5wYWRkaW5nLnRvcCtoLzMpK2g+ZS5nbG9iYWxzLmdyaWRIZWlnaHQmJihuPWUuZ2xvYmFscy5ncmlkSGVpZ2h0LWgpKTplLmNvbmZpZy50b29sdGlwLmZvbGxvd0N1cnNvcj9uPWkuZS5jbGllbnRZLWMudG9wLWkudG9vbHRpcFJlY3QudHRIZWlnaHQvMjpuK2kudG9vbHRpcFJlY3QudHRIZWlnaHQrMTU+ZS5nbG9iYWxzLmdyaWRIZWlnaHQmJihuPWUuZ2xvYmFscy5ncmlkSGVpZ2h0KSxuPC0xMCYmKG49LTEwKSxlLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsfHx0aGlzLm1vdmVYQ3Jvc3NoYWlycyhvKSwhaS5maXhlZFRvb2x0aXApe3ZhciBnPW58fGUuZ2xvYmFscy5ncmlkSGVpZ2h0O3RoaXMubW92ZVRvb2x0aXAobyxnKX19fV0pLHR9KCksZnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLnc9ZS53LHRoaXMudHRDdHg9ZSx0aGlzLmN0eD1lLmN0eCx0aGlzLnRvb2x0aXBQb3NpdGlvbj1uZXcgdXQoZSl9cmV0dXJuIHIodCxbe2tleTpcImRyYXdEeW5hbWljUG9pbnRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT1uZXcgbSh0aGlzLmN0eCksaT1uZXcgUih0aGlzLmN0eCksYT10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFwZXhjaGFydHMtc2VyaWVzXCIpO2E9dShhKSx0LmNvbmZpZy5jaGFydC5zdGFja2VkJiZhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQodC5nZXRBdHRyaWJ1dGUoXCJkYXRhOnJlYWxJbmRleFwiKSktcGFyc2VGbG9hdChlLmdldEF0dHJpYnV0ZShcImRhdGE6cmVhbEluZGV4XCIpKX0pKTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIHI9YVtzXS5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtc2VyaWVzLW1hcmtlcnMtd3JhcFwiKTtpZihudWxsIT09cil7dmFyIG89dm9pZCAwLG49XCJhcGV4Y2hhcnRzLW1hcmtlciB3XCIuY29uY2F0KChNYXRoLnJhbmRvbSgpKzEpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNCkpO1wibGluZVwiIT09dC5jb25maWcuY2hhcnQudHlwZSYmXCJhcmVhXCIhPT10LmNvbmZpZy5jaGFydC50eXBlfHx0Lmdsb2JhbHMuY29tYm9DaGFydHN8fHQuY29uZmlnLnRvb2x0aXAuaW50ZXJzZWN0fHwobis9XCIgbm8tcG9pbnRlci1ldmVudHNcIik7dmFyIGw9aS5nZXRNYXJrZXJDb25maWcoe2Nzc0NsYXNzOm4sc2VyaWVzSW5kZXg6TnVtYmVyKHIuZ2V0QXR0cmlidXRlKFwiZGF0YTpyZWFsSW5kZXhcIikpfSk7KG89ZS5kcmF3TWFya2VyKDAsMCxsKSkubm9kZS5zZXRBdHRyaWJ1dGUoXCJkZWZhdWx0LW1hcmtlci1zaXplXCIsMCk7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuZ2xvYmFscy5TVkdOUyxcImdcIik7aC5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1zZXJpZXMtbWFya2Vyc1wiKSxoLmFwcGVuZENoaWxkKG8ubm9kZSksci5hcHBlbmRDaGlsZChoKX19fX0se2tleTpcImVubGFyZ2VDdXJyZW50UG9pbnRcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGE9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGwscz10aGlzLnc7XCJidWJibGVcIiE9PXMuY29uZmlnLmNoYXJ0LnR5cGUmJnRoaXMubmV3UG9pbnRTaXplKHQsZSk7dmFyIHI9ZS5nZXRBdHRyaWJ1dGUoXCJjeFwiKSxvPWUuZ2V0QXR0cmlidXRlKFwiY3lcIik7aWYobnVsbCE9PWkmJm51bGwhPT1hJiYocj1pLG89YSksdGhpcy50b29sdGlwUG9zaXRpb24ubW92ZVhDcm9zc2hhaXJzKHIpLCF0aGlzLmZpeGVkVG9vbHRpcCl7aWYoXCJyYWRhclwiPT09cy5jb25maWcuY2hhcnQudHlwZSl7dmFyIG49dGhpcy50dEN0eC5nZXRFbEdyaWQoKSxsPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cj10aGlzLnR0Q3R4LmUuY2xpZW50WC1sLmxlZnR9dGhpcy50b29sdGlwUG9zaXRpb24ubW92ZVRvb2x0aXAocixvLHMuY29uZmlnLm1hcmtlcnMuaG92ZXIuc2l6ZSl9fX0se2tleTpcImVubGFyZ2VQb2ludHNcIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy53LGk9dGhpcyxhPXRoaXMudHRDdHgscz10LHI9ZS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLXNlcmllczpub3QoLmFwZXhjaGFydHMtc2VyaWVzLWNvbGxhcHNlZCkgLmFwZXhjaGFydHMtbWFya2VyXCIpLG89ZS5jb25maWcubWFya2Vycy5ob3Zlci5zaXplLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGw9cltuXS5nZXRBdHRyaWJ1dGUoXCJyZWxcIiksaD1yW25dLmdldEF0dHJpYnV0ZShcImluZGV4XCIpO2lmKHZvaWQgMD09PW8mJihvPWUuZ2xvYmFscy5tYXJrZXJzLnNpemVbaF0rZS5jb25maWcubWFya2Vycy5ob3Zlci5zaXplT2Zmc2V0KSxzPT09cGFyc2VJbnQobCwxMCkpe2kubmV3UG9pbnRTaXplKHMscltuXSk7dmFyIGM9cltuXS5nZXRBdHRyaWJ1dGUoXCJjeFwiKSxkPXJbbl0uZ2V0QXR0cmlidXRlKFwiY3lcIik7aS50b29sdGlwUG9zaXRpb24ubW92ZVhDcm9zc2hhaXJzKGMpLGEuZml4ZWRUb29sdGlwfHxpLnRvb2x0aXBQb3NpdGlvbi5tb3ZlVG9vbHRpcChjLGQsbyl9ZWxzZSBpLm9sZFBvaW50U2l6ZShyW25dKX19fSx7a2V5OlwibmV3UG9pbnRTaXplXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLncsYT1pLmNvbmZpZy5tYXJrZXJzLmhvdmVyLnNpemUscz0wPT09dD9lLnBhcmVudE5vZGUuZmlyc3RDaGlsZDplLnBhcmVudE5vZGUubGFzdENoaWxkO2lmKFwiMFwiIT09cy5nZXRBdHRyaWJ1dGUoXCJkZWZhdWx0LW1hcmtlci1zaXplXCIpKXt2YXIgcj1wYXJzZUludChzLmdldEF0dHJpYnV0ZShcImluZGV4XCIpLDEwKTt2b2lkIDA9PT1hJiYoYT1pLmdsb2JhbHMubWFya2Vycy5zaXplW3JdK2kuY29uZmlnLm1hcmtlcnMuaG92ZXIuc2l6ZU9mZnNldCksYTwwJiYoYT0wKSxzLnNldEF0dHJpYnV0ZShcInJcIixhKX19fSx7a2V5Olwib2xkUG9pbnRTaXplXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VGbG9hdCh0LmdldEF0dHJpYnV0ZShcImRlZmF1bHQtbWFya2VyLXNpemVcIikpO3Quc2V0QXR0cmlidXRlKFwiclwiLGUpfX0se2tleTpcInJlc2V0UG9pbnRzU2l6ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMudy5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLXNlcmllczpub3QoLmFwZXhjaGFydHMtc2VyaWVzLWNvbGxhcHNlZCkgLmFwZXhjaGFydHMtbWFya2VyXCIpLGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGk9cGFyc2VGbG9hdCh0W2VdLmdldEF0dHJpYnV0ZShcImRlZmF1bHQtbWFya2VyLXNpemVcIikpO3guaXNOdW1iZXIoaSkmJmk+PTA/dFtlXS5zZXRBdHRyaWJ1dGUoXCJyXCIsaSk6dFtlXS5zZXRBdHRyaWJ1dGUoXCJyXCIsMCl9fX1dKSx0fSgpLHB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy53PWUudyx0aGlzLnR0Q3R4PWV9cmV0dXJuIHIodCxbe2tleTpcImdldEF0dHJcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KHQudGFyZ2V0LmdldEF0dHJpYnV0ZShlKSl9fSx7a2V5OlwiaGFuZGxlSGVhdFRyZWVUb29sdGlwXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5lLGk9dC5vcHQsYT10Lngscz10Lnkscj10LnR5cGUsbz10aGlzLnR0Q3R4LG49dGhpcy53O2lmKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFwZXhjaGFydHMtXCIuY29uY2F0KHIsXCItcmVjdFwiKSkpe3ZhciBsPXRoaXMuZ2V0QXR0cihlLFwiaVwiKSxoPXRoaXMuZ2V0QXR0cihlLFwialwiKSxjPXRoaXMuZ2V0QXR0cihlLFwiY3hcIiksZD10aGlzLmdldEF0dHIoZSxcImN5XCIpLGc9dGhpcy5nZXRBdHRyKGUsXCJ3aWR0aFwiKSx1PXRoaXMuZ2V0QXR0cihlLFwiaGVpZ2h0XCIpO2lmKG8udG9vbHRpcExhYmVscy5kcmF3U2VyaWVzVGV4dHMoe3R0SXRlbXM6aS50dEl0ZW1zLGk6bCxqOmgsc2hhcmVkOiExLGU6ZX0pLG4uZ2xvYmFscy5jYXB0dXJlZFNlcmllc0luZGV4PWwsbi5nbG9iYWxzLmNhcHR1cmVkRGF0YVBvaW50SW5kZXg9aCxhPWMrby50b29sdGlwUmVjdC50dFdpZHRoLzIrZyxzPWQrby50b29sdGlwUmVjdC50dEhlaWdodC8yLXUvMixvLnRvb2x0aXBQb3NpdGlvbi5tb3ZlWENyb3NzaGFpcnMoYytnLzIpLGE+bi5nbG9iYWxzLmdyaWRXaWR0aC8yJiYoYT1jLW8udG9vbHRpcFJlY3QudHRXaWR0aC8yK2cpLG8udy5jb25maWcudG9vbHRpcC5mb2xsb3dDdXJzb3Ipe3ZhciBmPW4uZ2xvYmFscy5kb20uZWxXcmFwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2E9bi5nbG9iYWxzLmNsaWVudFgtZi5sZWZ0LShhPm4uZ2xvYmFscy5ncmlkV2lkdGgvMj9vLnRvb2x0aXBSZWN0LnR0V2lkdGg6MCkscz1uLmdsb2JhbHMuY2xpZW50WS1mLnRvcC0ocz5uLmdsb2JhbHMuZ3JpZEhlaWdodC8yP28udG9vbHRpcFJlY3QudHRIZWlnaHQ6MCl9fXJldHVybnt4OmEseTpzfX19LHtrZXk6XCJoYW5kbGVNYXJrZXJUb29sdGlwXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaSxhPXQuZSxzPXQub3B0LHI9dC54LG89dC55LG49dGhpcy53LGw9dGhpcy50dEN0eDtpZihhLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhcGV4Y2hhcnRzLW1hcmtlclwiKSl7dmFyIGg9cGFyc2VJbnQocy5wYXRocy5nZXRBdHRyaWJ1dGUoXCJjeFwiKSwxMCksYz1wYXJzZUludChzLnBhdGhzLmdldEF0dHJpYnV0ZShcImN5XCIpLDEwKSxkPXBhcnNlRmxvYXQocy5wYXRocy5nZXRBdHRyaWJ1dGUoXCJ2YWxcIikpO2lmKGk9cGFyc2VJbnQocy5wYXRocy5nZXRBdHRyaWJ1dGUoXCJyZWxcIiksMTApLGU9cGFyc2VJbnQocy5wYXRocy5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJyZWxcIiksMTApLTEsbC5pbnRlcnNlY3Qpe3ZhciBnPXguZmluZEFuY2VzdG9yKHMucGF0aHMsXCJhcGV4Y2hhcnRzLXNlcmllc1wiKTtnJiYoZT1wYXJzZUludChnLmdldEF0dHJpYnV0ZShcImRhdGE6cmVhbEluZGV4XCIpLDEwKSl9aWYobC50b29sdGlwTGFiZWxzLmRyYXdTZXJpZXNUZXh0cyh7dHRJdGVtczpzLnR0SXRlbXMsaTplLGo6aSxzaGFyZWQ6IWwuc2hvd09uSW50ZXJzZWN0JiZuLmNvbmZpZy50b29sdGlwLnNoYXJlZCxlOmF9KSxcIm1vdXNldXBcIj09PWEudHlwZSYmbC5tYXJrZXJDbGljayhhLGUsaSksbi5nbG9iYWxzLmNhcHR1cmVkU2VyaWVzSW5kZXg9ZSxuLmdsb2JhbHMuY2FwdHVyZWREYXRhUG9pbnRJbmRleD1pLHI9aCxvPWMrbi5nbG9iYWxzLnRyYW5zbGF0ZVktMS40KmwudG9vbHRpcFJlY3QudHRIZWlnaHQsbC53LmNvbmZpZy50b29sdGlwLmZvbGxvd0N1cnNvcil7dmFyIHU9bC5nZXRFbEdyaWQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtvPWwuZS5jbGllbnRZK24uZ2xvYmFscy50cmFuc2xhdGVZLXUudG9wfWQ8MCYmKG89YyksbC5tYXJrZXIuZW5sYXJnZUN1cnJlbnRQb2ludChpLHMucGF0aHMscixvKX1yZXR1cm57eDpyLHk6b319fSx7a2V5OlwiaGFuZGxlQmFyVG9vbHRpcFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLGksYT10LmUscz10Lm9wdCxyPXRoaXMudyxvPXRoaXMudHRDdHgsbj1vLmdldEVsVG9vbHRpcCgpLGw9MCxoPTAsYz0wLGQ9dGhpcy5nZXRCYXJUb29sdGlwWFkoe2U6YSxvcHQ6c30pO2U9ZC5pO3ZhciBnPWQuYmFySGVpZ2h0LHU9ZC5qO3IuZ2xvYmFscy5jYXB0dXJlZFNlcmllc0luZGV4PWUsci5nbG9iYWxzLmNhcHR1cmVkRGF0YVBvaW50SW5kZXg9dSxyLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsJiZvLnRvb2x0aXBVdGlsLmhhc0JhcnMoKXx8IXIuY29uZmlnLnRvb2x0aXAuc2hhcmVkPyhoPWQueCxjPWQueSxpPUFycmF5LmlzQXJyYXkoci5jb25maWcuc3Ryb2tlLndpZHRoKT9yLmNvbmZpZy5zdHJva2Uud2lkdGhbZV06ci5jb25maWcuc3Ryb2tlLndpZHRoLGw9aCk6ci5nbG9iYWxzLmNvbWJvQ2hhcnRzfHxyLmNvbmZpZy50b29sdGlwLnNoYXJlZHx8KGwvPTIpLGlzTmFOKGMpP2M9ci5nbG9iYWxzLnN2Z0hlaWdodC1vLnRvb2x0aXBSZWN0LnR0SGVpZ2h0OmM8MCYmKGM9MCk7dmFyIGY9cGFyc2VJbnQocy5wYXRocy5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImRhdGE6cmVhbEluZGV4XCIpLDEwKSxwPXIuZ2xvYmFscy5pc011bHRpcGxlWUF4aXM/ci5jb25maWcueWF4aXNbZl0mJnIuY29uZmlnLnlheGlzW2ZdLnJldmVyc2VkOnIuY29uZmlnLnlheGlzWzBdLnJldmVyc2VkO2lmKGgrby50b29sdGlwUmVjdC50dFdpZHRoPnIuZ2xvYmFscy5ncmlkV2lkdGgmJiFwP2gtPW8udG9vbHRpcFJlY3QudHRXaWR0aDpoPDAmJihoPTApLG8udy5jb25maWcudG9vbHRpcC5mb2xsb3dDdXJzb3Ipe3ZhciB4PW8uZ2V0RWxHcmlkKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Yz1vLmUuY2xpZW50WS14LnRvcH1udWxsPT09by50b29sdGlwJiYoby50b29sdGlwPXIuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy10b29sdGlwXCIpKSxyLmNvbmZpZy50b29sdGlwLnNoYXJlZHx8KHIuZ2xvYmFscy5jb21ib0JhckNvdW50PjA/by50b29sdGlwUG9zaXRpb24ubW92ZVhDcm9zc2hhaXJzKGwraS8yKTpvLnRvb2x0aXBQb3NpdGlvbi5tb3ZlWENyb3NzaGFpcnMobCkpLCFvLmZpeGVkVG9vbHRpcCYmKCFyLmNvbmZpZy50b29sdGlwLnNoYXJlZHx8ci5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCYmby50b29sdGlwVXRpbC5oYXNCYXJzKCkpJiYocCYmKGgtPW8udG9vbHRpcFJlY3QudHRXaWR0aCk8MCYmKGg9MCksIXB8fHIuZ2xvYmFscy5pc0Jhckhvcml6b250YWwmJm8udG9vbHRpcFV0aWwuaGFzQmFycygpfHwoYz1jK2ctMiooci5nbG9iYWxzLnNlcmllc1tlXVt1XTwwP2c6MCkpLG8udG9vbHRpcFJlY3QudHRIZWlnaHQrYz5yLmdsb2JhbHMuZ3JpZEhlaWdodD9jPXIuZ2xvYmFscy5ncmlkSGVpZ2h0LW8udG9vbHRpcFJlY3QudHRIZWlnaHQrci5nbG9iYWxzLnRyYW5zbGF0ZVk6KGM9YytyLmdsb2JhbHMudHJhbnNsYXRlWS1vLnRvb2x0aXBSZWN0LnR0SGVpZ2h0LzIpPDAmJihjPTApLG4uc3R5bGUubGVmdD1oK3IuZ2xvYmFscy50cmFuc2xhdGVYK1wicHhcIixuLnN0eWxlLnRvcD1jK1wicHhcIil9fSx7a2V5OlwiZ2V0QmFyVG9vbHRpcFhZXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5lLGk9dC5vcHQsYT10aGlzLncscz1udWxsLHI9dGhpcy50dEN0eCxvPTAsbj0wLGw9MCxoPTAsYz0wLGQ9ZS50YXJnZXQuY2xhc3NMaXN0O2lmKGQuY29udGFpbnMoXCJhcGV4Y2hhcnRzLWJhci1hcmVhXCIpfHxkLmNvbnRhaW5zKFwiYXBleGNoYXJ0cy1jYW5kbGVzdGljay1hcmVhXCIpfHxkLmNvbnRhaW5zKFwiYXBleGNoYXJ0cy1ib3hQbG90LWFyZWFcIil8fGQuY29udGFpbnMoXCJhcGV4Y2hhcnRzLXJhbmdlYmFyLWFyZWFcIikpe3ZhciBnPWUudGFyZ2V0LHU9Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWkuZWxHcmlkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHA9dS5oZWlnaHQ7Yz11LmhlaWdodDt2YXIgeD11LndpZHRoLGI9cGFyc2VJbnQoZy5nZXRBdHRyaWJ1dGUoXCJjeFwiKSwxMCksdj1wYXJzZUludChnLmdldEF0dHJpYnV0ZShcImN5XCIpLDEwKTtoPXBhcnNlRmxvYXQoZy5nZXRBdHRyaWJ1dGUoXCJiYXJXaWR0aFwiKSk7dmFyIG09XCJ0b3VjaG1vdmVcIj09PWUudHlwZT9lLnRvdWNoZXNbMF0uY2xpZW50WDplLmNsaWVudFg7cz1wYXJzZUludChnLmdldEF0dHJpYnV0ZShcImpcIiksMTApLG89cGFyc2VJbnQoZy5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcInJlbFwiKSwxMCktMTt2YXIgeT1nLmdldEF0dHJpYnV0ZShcImRhdGEtcmFuZ2UteTFcIiksdz1nLmdldEF0dHJpYnV0ZShcImRhdGEtcmFuZ2UteTJcIik7YS5nbG9iYWxzLmNvbWJvQ2hhcnRzJiYobz1wYXJzZUludChnLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YTpyZWFsSW5kZXhcIiksMTApKSxyLnRvb2x0aXBMYWJlbHMuZHJhd1Nlcmllc1RleHRzKHt0dEl0ZW1zOmkudHRJdGVtcyxpOm8sajpzLHkxOnk/cGFyc2VJbnQoeSwxMCk6bnVsbCx5Mjp3P3BhcnNlSW50KHcsMTApOm51bGwsc2hhcmVkOiFyLnNob3dPbkludGVyc2VjdCYmYS5jb25maWcudG9vbHRpcC5zaGFyZWQsZTplfSksYS5jb25maWcudG9vbHRpcC5mb2xsb3dDdXJzb3I/YS5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbD8obj1tLWYubGVmdCsxNSxsPXYtci5kYXRhUG9pbnRzRGl2aWRlZEhlaWdodCtwLzItci50b29sdGlwUmVjdC50dEhlaWdodC8yKToobj1hLmdsb2JhbHMuaXNYTnVtZXJpYz9iLXgvMjpiLXIuZGF0YVBvaW50c0RpdmlkZWRXaWR0aCt4LzIsbD1lLmNsaWVudFktZi50b3Atci50b29sdGlwUmVjdC50dEhlaWdodC8yLTE1KTphLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsPygobj1iKTxyLnh5UmF0aW9zLmJhc2VMaW5lSW52ZXJ0ZWRZJiYobj1iLXIudG9vbHRpcFJlY3QudHRXaWR0aCksbD12LXIuZGF0YVBvaW50c0RpdmlkZWRIZWlnaHQrcC8yLXIudG9vbHRpcFJlY3QudHRIZWlnaHQvMik6KG49YS5nbG9iYWxzLmlzWE51bWVyaWM/Yi14LzI6Yi1yLmRhdGFQb2ludHNEaXZpZGVkV2lkdGgreC8yLGw9dil9cmV0dXJue3g6bix5OmwsYmFySGVpZ2h0OmMsYmFyV2lkdGg6aCxpOm8sajpzfX19XSksdH0oKSx4dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMudz1lLncsdGhpcy50dEN0eD1lfXJldHVybiByKHQsW3trZXk6XCJkcmF3WGF4aXNUb29sdGlwXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT10aGlzLnR0Q3R4LGk9XCJib3R0b21cIj09PXQuY29uZmlnLnhheGlzLnBvc2l0aW9uO2UueGF4aXNPZmZZPWk/dC5nbG9iYWxzLmdyaWRIZWlnaHQrMTotdC5nbG9iYWxzLnhBeGlzSGVpZ2h0LXQuY29uZmlnLnhheGlzLmF4aXNUaWNrcy5oZWlnaHQrMzt2YXIgYT1pP1wiYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXAgYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXAtYm90dG9tXCI6XCJhcGV4Y2hhcnRzLXhheGlzdG9vbHRpcCBhcGV4Y2hhcnRzLXhheGlzdG9vbHRpcC10b3BcIixzPXQuZ2xvYmFscy5kb20uZWxXcmFwO2UuaXNYQXhpc1Rvb2x0aXBFbmFibGVkJiYobnVsbD09PXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXBcIikmJihlLnhheGlzVG9vbHRpcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGUueGF4aXNUb29sdGlwLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsYStcIiBhcGV4Y2hhcnRzLXRoZW1lLVwiK3QuY29uZmlnLnRvb2x0aXAudGhlbWUpLHMuYXBwZW5kQ2hpbGQoZS54YXhpc1Rvb2x0aXApLGUueGF4aXNUb29sdGlwVGV4dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGUueGF4aXNUb29sdGlwVGV4dC5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXAtdGV4dFwiKSxlLnhheGlzVG9vbHRpcFRleHQuc3R5bGUuZm9udEZhbWlseT10LmNvbmZpZy54YXhpcy50b29sdGlwLnN0eWxlLmZvbnRGYW1pbHl8fHQuY29uZmlnLmNoYXJ0LmZvbnRGYW1pbHksZS54YXhpc1Rvb2x0aXBUZXh0LnN0eWxlLmZvbnRTaXplPXQuY29uZmlnLnhheGlzLnRvb2x0aXAuc3R5bGUuZm9udFNpemUsZS54YXhpc1Rvb2x0aXAuYXBwZW5kQ2hpbGQoZS54YXhpc1Rvb2x0aXBUZXh0KSkpfX0se2tleTpcImRyYXdZYXhpc1Rvb2x0aXBcIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLncsZT10aGlzLnR0Q3R4LGk9ZnVuY3Rpb24oaSl7dmFyIGE9dC5jb25maWcueWF4aXNbaV0ub3Bwb3NpdGV8fHQuY29uZmlnLnlheGlzW2ldLmNyb3NzaGFpcnMub3Bwb3NpdGU7ZS55YXhpc09mZlg9YT90Lmdsb2JhbHMuZ3JpZFdpZHRoKzE6MTt2YXIgcz1cImFwZXhjaGFydHMteWF4aXN0b29sdGlwIGFwZXhjaGFydHMteWF4aXN0b29sdGlwLVwiLmNvbmNhdChpLGE/XCIgYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXAtcmlnaHRcIjpcIiBhcGV4Y2hhcnRzLXlheGlzdG9vbHRpcC1sZWZ0XCIpO3QuZ2xvYmFscy55QXhpc1NhbWVTY2FsZUluZGljZXMubWFwKChmdW5jdGlvbihlLGEpe2UubWFwKChmdW5jdGlvbihlLGEpe2E9PT1pJiYocys9dC5jb25maWcueWF4aXNbYV0uc2hvdz9cIiBcIjpcIiBhcGV4Y2hhcnRzLXlheGlzdG9vbHRpcC1oaWRkZW5cIil9KSl9KSk7dmFyIHI9dC5nbG9iYWxzLmRvbS5lbFdyYXA7bnVsbD09PXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXAgYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXAtXCIuY29uY2F0KGkpKSYmKGUueWF4aXNUb29sdGlwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksZS55YXhpc1Rvb2x0aXAuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixzK1wiIGFwZXhjaGFydHMtdGhlbWUtXCIrdC5jb25maWcudG9vbHRpcC50aGVtZSksci5hcHBlbmRDaGlsZChlLnlheGlzVG9vbHRpcCksMD09PWkmJihlLnlheGlzVG9vbHRpcFRleHQ9W10pLGUueWF4aXNUb29sdGlwVGV4dFtpXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGUueWF4aXNUb29sdGlwVGV4dFtpXS5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXAtdGV4dFwiKSxlLnlheGlzVG9vbHRpcC5hcHBlbmRDaGlsZChlLnlheGlzVG9vbHRpcFRleHRbaV0pKX0sYT0wO2E8dC5jb25maWcueWF4aXMubGVuZ3RoO2ErKylpKGEpfX0se2tleTpcInNldFhDcm9zc2hhaXJXaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9dGhpcy50dEN0eCxpPWUuZ2V0RWxYQ3Jvc3NoYWlycygpO2lmKGUueGNyb3NzaGFpcnNXaWR0aD1wYXJzZUludCh0LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLndpZHRoLDEwKSx0Lmdsb2JhbHMuY29tYm9DaGFydHMpe3ZhciBhPXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1iYXItYXJlYVwiKTtpZihudWxsIT09YSYmXCJiYXJXaWR0aFwiPT09dC5jb25maWcueGF4aXMuY3Jvc3NoYWlycy53aWR0aCl7dmFyIHM9cGFyc2VGbG9hdChhLmdldEF0dHJpYnV0ZShcImJhcldpZHRoXCIpKTtlLnhjcm9zc2hhaXJzV2lkdGg9c31lbHNlIGlmKFwidGlja1dpZHRoXCI9PT10LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLndpZHRoKXt2YXIgcj10Lmdsb2JhbHMubGFiZWxzLmxlbmd0aDtlLnhjcm9zc2hhaXJzV2lkdGg9dC5nbG9iYWxzLmdyaWRXaWR0aC9yfX1lbHNlIGlmKFwidGlja1dpZHRoXCI9PT10LmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLndpZHRoKXt2YXIgbz10Lmdsb2JhbHMubGFiZWxzLmxlbmd0aDtlLnhjcm9zc2hhaXJzV2lkdGg9dC5nbG9iYWxzLmdyaWRXaWR0aC9vfWVsc2UgaWYoXCJiYXJXaWR0aFwiPT09dC5jb25maWcueGF4aXMuY3Jvc3NoYWlycy53aWR0aCl7dmFyIG49dC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLWJhci1hcmVhXCIpO2lmKG51bGwhPT1uKXt2YXIgbD1wYXJzZUZsb2F0KG4uZ2V0QXR0cmlidXRlKFwiYmFyV2lkdGhcIikpO2UueGNyb3NzaGFpcnNXaWR0aD1sfWVsc2UgZS54Y3Jvc3NoYWlyc1dpZHRoPTF9dC5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCYmKGUueGNyb3NzaGFpcnNXaWR0aD0wKSxudWxsIT09aSYmZS54Y3Jvc3NoYWlyc1dpZHRoPjAmJmkuc2V0QXR0cmlidXRlKFwid2lkdGhcIixlLnhjcm9zc2hhaXJzV2lkdGgpfX0se2tleTpcImhhbmRsZVlDcm9zc2hhaXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMudyxlPXRoaXMudHRDdHg7ZS55Y3Jvc3NoYWlycz10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMteWNyb3NzaGFpcnNcIiksZS55Y3Jvc3NoYWlyc0hpZGRlbj10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMteWNyb3NzaGFpcnMtaGlkZGVuXCIpfX0se2tleTpcImRyYXdZYXhpc1Rvb2x0aXBUZXh0XCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMudHRDdHgscz10aGlzLncscj1zLmdsb2JhbHMueUxhYmVsRm9ybWF0dGVyc1t0XTtpZihhLnlheGlzVG9vbHRpcHNbdF0pe3ZhciBvPWEuZ2V0RWxHcmlkKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj0oZS1vLnRvcCkqaS55UmF0aW9bdF0sbD1zLmdsb2JhbHMubWF4WUFyclt0XS1zLmdsb2JhbHMubWluWUFyclt0XSxoPXMuZ2xvYmFscy5taW5ZQXJyW3RdKyhsLW4pO2EudG9vbHRpcFBvc2l0aW9uLm1vdmVZQ3Jvc3NoYWlycyhlLW8udG9wKSxhLnlheGlzVG9vbHRpcFRleHRbdF0uaW5uZXJIVE1MPXIoaCksYS50b29sdGlwUG9zaXRpb24ubW92ZVlBeGlzVG9vbHRpcCh0KX19fV0pLHR9KCksYnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLnc7dmFyIGk9dGhpcy53O3RoaXMudENvbmZpZz1pLmNvbmZpZy50b29sdGlwLHRoaXMudG9vbHRpcFV0aWw9bmV3IGR0KHRoaXMpLHRoaXMudG9vbHRpcExhYmVscz1uZXcgZ3QodGhpcyksdGhpcy50b29sdGlwUG9zaXRpb249bmV3IHV0KHRoaXMpLHRoaXMubWFya2VyPW5ldyBmdCh0aGlzKSx0aGlzLmludGVyc2VjdD1uZXcgcHQodGhpcyksdGhpcy5heGVzVG9vbHRpcD1uZXcgeHQodGhpcyksdGhpcy5zaG93T25JbnRlcnNlY3Q9dGhpcy50Q29uZmlnLmludGVyc2VjdCx0aGlzLnNob3dUb29sdGlwVGl0bGU9dGhpcy50Q29uZmlnLnguc2hvdyx0aGlzLmZpeGVkVG9vbHRpcD10aGlzLnRDb25maWcuZml4ZWQuZW5hYmxlZCx0aGlzLnhheGlzVG9vbHRpcD1udWxsLHRoaXMueWF4aXNUVEVscz1udWxsLHRoaXMuaXNCYXJTaGFyZWQ9IWkuZ2xvYmFscy5pc0Jhckhvcml6b250YWwmJnRoaXMudENvbmZpZy5zaGFyZWQsdGhpcy5sYXN0SG92ZXJUaW1lPURhdGUubm93KCl9cmV0dXJuIHIodCxbe2tleTpcImdldEVsVG9vbHRpcFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0fHwodD10aGlzKSx0LncuZ2xvYmFscy5kb20uYmFzZUVsP3Qudy5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLXRvb2x0aXBcIik6bnVsbH19LHtrZXk6XCJnZXRFbFhDcm9zc2hhaXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMteGNyb3NzaGFpcnNcIil9fSx7a2V5OlwiZ2V0RWxHcmlkXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtZ3JpZFwiKX19LHtrZXk6XCJkcmF3VG9vbHRpcFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudzt0aGlzLnh5UmF0aW9zPXQsdGhpcy5pc1hBeGlzVG9vbHRpcEVuYWJsZWQ9ZS5jb25maWcueGF4aXMudG9vbHRpcC5lbmFibGVkJiZlLmdsb2JhbHMuYXhpc0NoYXJ0cyx0aGlzLnlheGlzVG9vbHRpcHM9ZS5jb25maWcueWF4aXMubWFwKChmdW5jdGlvbih0LGkpe3JldHVybiEhKHQuc2hvdyYmdC50b29sdGlwLmVuYWJsZWQmJmUuZ2xvYmFscy5heGlzQ2hhcnRzKX0pKSx0aGlzLmFsbFRvb2x0aXBTZXJpZXNHcm91cHM9W10sZS5nbG9iYWxzLmF4aXNDaGFydHN8fCh0aGlzLnNob3dUb29sdGlwVGl0bGU9ITEpO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7aWYoaS5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy10b29sdGlwXCIpLGUuY29uZmlnLnRvb2x0aXAuY3NzQ2xhc3MmJmkuY2xhc3NMaXN0LmFkZChlLmNvbmZpZy50b29sdGlwLmNzc0NsYXNzKSxpLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLXRoZW1lLVwiLmNvbmNhdCh0aGlzLnRDb25maWcudGhlbWUpKSxlLmdsb2JhbHMuZG9tLmVsV3JhcC5hcHBlbmRDaGlsZChpKSxlLmdsb2JhbHMuYXhpc0NoYXJ0cyl7dGhpcy5heGVzVG9vbHRpcC5kcmF3WGF4aXNUb29sdGlwKCksdGhpcy5heGVzVG9vbHRpcC5kcmF3WWF4aXNUb29sdGlwKCksdGhpcy5heGVzVG9vbHRpcC5zZXRYQ3Jvc3NoYWlyV2lkdGgoKSx0aGlzLmF4ZXNUb29sdGlwLmhhbmRsZVlDcm9zc2hhaXIoKTt2YXIgYT1uZXcgRyh0aGlzLmN0eCk7dGhpcy54QXhpc1RpY2tzUG9zaXRpb25zPWEuZ2V0WEF4aXNUaWNrc1Bvc2l0aW9ucygpfWlmKCFlLmdsb2JhbHMuY29tYm9DaGFydHMmJiF0aGlzLnRDb25maWcuaW50ZXJzZWN0JiZcInJhbmdlQmFyXCIhPT1lLmNvbmZpZy5jaGFydC50eXBlfHx0aGlzLnRDb25maWcuc2hhcmVkfHwodGhpcy5zaG93T25JbnRlcnNlY3Q9ITApLDAhPT1lLmNvbmZpZy5tYXJrZXJzLnNpemUmJjAhPT1lLmdsb2JhbHMubWFya2Vycy5sYXJnZXN0U2l6ZXx8dGhpcy5tYXJrZXIuZHJhd0R5bmFtaWNQb2ludHModGhpcyksZS5nbG9iYWxzLmNvbGxhcHNlZFNlcmllcy5sZW5ndGghPT1lLmdsb2JhbHMuc2VyaWVzLmxlbmd0aCl7dGhpcy5kYXRhUG9pbnRzRGl2aWRlZEhlaWdodD1lLmdsb2JhbHMuZ3JpZEhlaWdodC9lLmdsb2JhbHMuZGF0YVBvaW50cyx0aGlzLmRhdGFQb2ludHNEaXZpZGVkV2lkdGg9ZS5nbG9iYWxzLmdyaWRXaWR0aC9lLmdsb2JhbHMuZGF0YVBvaW50cyx0aGlzLnNob3dUb29sdGlwVGl0bGUmJih0aGlzLnRvb2x0aXBUaXRsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMudG9vbHRpcFRpdGxlLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLXRvb2x0aXAtdGl0bGVcIiksdGhpcy50b29sdGlwVGl0bGUuc3R5bGUuZm9udEZhbWlseT10aGlzLnRDb25maWcuc3R5bGUuZm9udEZhbWlseXx8ZS5jb25maWcuY2hhcnQuZm9udEZhbWlseSx0aGlzLnRvb2x0aXBUaXRsZS5zdHlsZS5mb250U2l6ZT10aGlzLnRDb25maWcuc3R5bGUuZm9udFNpemUsaS5hcHBlbmRDaGlsZCh0aGlzLnRvb2x0aXBUaXRsZSkpO3ZhciBzPWUuZ2xvYmFscy5zZXJpZXMubGVuZ3RoOyhlLmdsb2JhbHMueHlDaGFydHN8fGUuZ2xvYmFscy5jb21ib0NoYXJ0cykmJnRoaXMudENvbmZpZy5zaGFyZWQmJihzPXRoaXMuc2hvd09uSW50ZXJzZWN0PzE6ZS5nbG9iYWxzLnNlcmllcy5sZW5ndGgpLHRoaXMubGVnZW5kTGFiZWxzPWUuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy1sZWdlbmQtdGV4dFwiKSx0aGlzLnR0SXRlbXM9dGhpcy5jcmVhdGVUVEVsZW1lbnRzKHMpLHRoaXMuYWRkU1ZHRXZlbnRzKCl9fX0se2tleTpcImNyZWF0ZVRURWxlbWVudHNcIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxpPXRoaXMudyxhPVtdLHM9dGhpcy5nZXRFbFRvb2x0aXAoKSxyPWZ1bmN0aW9uKHIpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7by5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy10b29sdGlwLXNlcmllcy1ncm91cFwiKSxvLnN0eWxlLm9yZGVyPWkuY29uZmlnLnRvb2x0aXAuaW52ZXJzZU9yZGVyP3QtcjpyKzEsZS50Q29uZmlnLnNoYXJlZCYmZS50Q29uZmlnLmVuYWJsZWRPblNlcmllcyYmQXJyYXkuaXNBcnJheShlLnRDb25maWcuZW5hYmxlZE9uU2VyaWVzKSYmZS50Q29uZmlnLmVuYWJsZWRPblNlcmllcy5pbmRleE9mKHIpPDAmJm8uY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtdG9vbHRpcC1zZXJpZXMtZ3JvdXAtaGlkZGVuXCIpO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO24uY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtdG9vbHRpcC1tYXJrZXJcIiksbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9aS5nbG9iYWxzLmNvbG9yc1tyXSxvLmFwcGVuZENoaWxkKG4pO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bC5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy10b29sdGlwLXRleHRcIiksbC5zdHlsZS5mb250RmFtaWx5PWUudENvbmZpZy5zdHlsZS5mb250RmFtaWx5fHxpLmNvbmZpZy5jaGFydC5mb250RmFtaWx5LGwuc3R5bGUuZm9udFNpemU9ZS50Q29uZmlnLnN0eWxlLmZvbnRTaXplLFtcInlcIixcImdvYWxzXCIsXCJ6XCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZS5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy10b29sdGlwLVwiLmNvbmNhdCh0LFwiLWdyb3VwXCIpKTt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtpLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLXRvb2x0aXAtdGV4dC1cIi5jb25jYXQodCxcIi1sYWJlbFwiKSksZS5hcHBlbmRDaGlsZChpKTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTthLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLXRvb2x0aXAtdGV4dC1cIi5jb25jYXQodCxcIi12YWx1ZVwiKSksZS5hcHBlbmRDaGlsZChhKSxsLmFwcGVuZENoaWxkKGUpfSkpLG8uYXBwZW5kQ2hpbGQobCkscy5hcHBlbmRDaGlsZChvKSxhLnB1c2gobyl9LG89MDtvPHQ7bysrKXIobyk7cmV0dXJuIGF9fSx7a2V5OlwiYWRkU1ZHRXZlbnRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT10LmNvbmZpZy5jaGFydC50eXBlLGk9dGhpcy5nZXRFbFRvb2x0aXAoKSxhPSEoXCJiYXJcIiE9PWUmJlwiY2FuZGxlc3RpY2tcIiE9PWUmJlwiYm94UGxvdFwiIT09ZSYmXCJyYW5nZUJhclwiIT09ZSkscz1cImFyZWFcIj09PWV8fFwibGluZVwiPT09ZXx8XCJzY2F0dGVyXCI9PT1lfHxcImJ1YmJsZVwiPT09ZXx8XCJyYWRhclwiPT09ZSxyPXQuZ2xvYmFscy5kb20uUGFwZXIubm9kZSxvPXRoaXMuZ2V0RWxHcmlkKCk7byYmKHRoaXMuc2VyaWVzQm91bmQ9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7dmFyIG4sbD1bXSxoPVtdLGM9e2hvdmVyQXJlYTpyLGVsR3JpZDpvLHRvb2x0aXBFbDppLHRvb2x0aXBZOmwsdG9vbHRpcFg6aCx0dEl0ZW1zOnRoaXMudHRJdGVtc307aWYodC5nbG9iYWxzLmF4aXNDaGFydHMmJihzP249dC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLXNlcmllc1tkYXRhXFxcXDpsb25nZXN0U2VyaWVzPSd0cnVlJ10gLmFwZXhjaGFydHMtbWFya2VyXCIpOmE/bj10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFwZXhjaGFydHMtc2VyaWVzIC5hcGV4Y2hhcnRzLWJhci1hcmVhLCAuYXBleGNoYXJ0cy1zZXJpZXMgLmFwZXhjaGFydHMtY2FuZGxlc3RpY2stYXJlYSwgLmFwZXhjaGFydHMtc2VyaWVzIC5hcGV4Y2hhcnRzLWJveFBsb3QtYXJlYSwgLmFwZXhjaGFydHMtc2VyaWVzIC5hcGV4Y2hhcnRzLXJhbmdlYmFyLWFyZWFcIik6XCJoZWF0bWFwXCIhPT1lJiZcInRyZWVtYXBcIiE9PWV8fChuPXQuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYXBleGNoYXJ0cy1zZXJpZXMgLmFwZXhjaGFydHMtaGVhdG1hcCwgLmFwZXhjaGFydHMtc2VyaWVzIC5hcGV4Y2hhcnRzLXRyZWVtYXBcIikpLG4mJm4ubGVuZ3RoKSlmb3IodmFyIGQ9MDtkPG4ubGVuZ3RoO2QrKylsLnB1c2gobltkXS5nZXRBdHRyaWJ1dGUoXCJjeVwiKSksaC5wdXNoKG5bZF0uZ2V0QXR0cmlidXRlKFwiY3hcIikpO2lmKHQuZ2xvYmFscy54eUNoYXJ0cyYmIXRoaXMuc2hvd09uSW50ZXJzZWN0fHx0Lmdsb2JhbHMuY29tYm9DaGFydHMmJiF0aGlzLnNob3dPbkludGVyc2VjdHx8YSYmdGhpcy50b29sdGlwVXRpbC5oYXNCYXJzKCkmJnRoaXMudENvbmZpZy5zaGFyZWQpdGhpcy5hZGRQYXRoc0V2ZW50TGlzdGVuZXJzKFtyXSxjKTtlbHNlIGlmKGEmJiF0Lmdsb2JhbHMuY29tYm9DaGFydHN8fHMmJnRoaXMuc2hvd09uSW50ZXJzZWN0KXRoaXMuYWRkRGF0YXBvaW50RXZlbnRzTGlzdGVuZXJzKGMpO2Vsc2UgaWYoIXQuZ2xvYmFscy5heGlzQ2hhcnRzfHxcImhlYXRtYXBcIj09PWV8fFwidHJlZW1hcFwiPT09ZSl7dmFyIGc9dC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLXNlcmllc1wiKTt0aGlzLmFkZFBhdGhzRXZlbnRMaXN0ZW5lcnMoZyxjKX1pZih0aGlzLnNob3dPbkludGVyc2VjdCl7dmFyIHU9dC5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLWxpbmUtc2VyaWVzIC5hcGV4Y2hhcnRzLW1hcmtlciwgLmFwZXhjaGFydHMtYXJlYS1zZXJpZXMgLmFwZXhjaGFydHMtbWFya2VyXCIpO3UubGVuZ3RoPjAmJnRoaXMuYWRkUGF0aHNFdmVudExpc3RlbmVycyh1LGMpLHRoaXMudG9vbHRpcFV0aWwuaGFzQmFycygpJiYhdGhpcy50Q29uZmlnLnNoYXJlZCYmdGhpcy5hZGREYXRhcG9pbnRFdmVudHNMaXN0ZW5lcnMoYyl9fX0se2tleTpcImRyYXdGaXhlZFRvb2x0aXBSZWN0XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncsZT10aGlzLmdldEVsVG9vbHRpcCgpLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkud2lkdGgrMTAscz1pLmhlaWdodCsxMCxyPXRoaXMudENvbmZpZy5maXhlZC5vZmZzZXRYLG89dGhpcy50Q29uZmlnLmZpeGVkLm9mZnNldFksbj10aGlzLnRDb25maWcuZml4ZWQucG9zaXRpb24udG9Mb3dlckNhc2UoKTtyZXR1cm4gbi5pbmRleE9mKFwicmlnaHRcIik+LTEmJihyPXIrdC5nbG9iYWxzLnN2Z1dpZHRoLWErMTApLG4uaW5kZXhPZihcImJvdHRvbVwiKT4tMSYmKG89byt0Lmdsb2JhbHMuc3ZnSGVpZ2h0LXMtMTApLGUuc3R5bGUubGVmdD1yK1wicHhcIixlLnN0eWxlLnRvcD1vK1wicHhcIix7eDpyLHk6byx0dFdpZHRoOmEsdHRIZWlnaHQ6c319fSx7a2V5OlwiYWRkRGF0YXBvaW50RXZlbnRzTGlzdGVuZXJzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy53Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFwZXhjaGFydHMtc2VyaWVzLW1hcmtlcnMgLmFwZXhjaGFydHMtbWFya2VyLCAuYXBleGNoYXJ0cy1iYXItYXJlYSwgLmFwZXhjaGFydHMtY2FuZGxlc3RpY2stYXJlYSwgLmFwZXhjaGFydHMtYm94UGxvdC1hcmVhLCAuYXBleGNoYXJ0cy1yYW5nZWJhci1hcmVhXCIpO3RoaXMuYWRkUGF0aHNFdmVudExpc3RlbmVycyhlLHQpfX0se2tleTpcImFkZFBhdGhzRXZlbnRMaXN0ZW5lcnNcIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10aGlzLGE9ZnVuY3Rpb24oYSl7dmFyIHM9e3BhdGhzOnRbYV0sdG9vbHRpcEVsOmUudG9vbHRpcEVsLHRvb2x0aXBZOmUudG9vbHRpcFksdG9vbHRpcFg6ZS50b29sdGlwWCxlbEdyaWQ6ZS5lbEdyaWQsaG92ZXJBcmVhOmUuaG92ZXJBcmVhLHR0SXRlbXM6ZS50dEl0ZW1zfTtbXCJtb3VzZW1vdmVcIixcIm1vdXNldXBcIixcInRvdWNobW92ZVwiLFwibW91c2VvdXRcIixcInRvdWNoZW5kXCJdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbYV0uYWRkRXZlbnRMaXN0ZW5lcihlLGkub25TZXJpZXNIb3Zlci5iaW5kKGkscykse2NhcHR1cmU6ITEscGFzc2l2ZTohMH0pfSkpfSxzPTA7czx0Lmxlbmd0aDtzKyspYShzKX19LHtrZXk6XCJvblNlcmllc0hvdmVyXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLGE9RGF0ZS5ub3coKS10aGlzLmxhc3RIb3ZlclRpbWU7YT49MTAwP3RoaXMuc2VyaWVzSG92ZXIodCxlKTooY2xlYXJUaW1lb3V0KHRoaXMuc2VyaWVzSG92ZXJUaW1lb3V0KSx0aGlzLnNlcmllc0hvdmVyVGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2kuc2VyaWVzSG92ZXIodCxlKX0pLDEwMC1hKSl9fSx7a2V5Olwic2VyaWVzSG92ZXJcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7dGhpcy5sYXN0SG92ZXJUaW1lPURhdGUubm93KCk7dmFyIGE9W10scz10aGlzLnc7cy5jb25maWcuY2hhcnQuZ3JvdXAmJihhPXRoaXMuY3R4LmdldEdyb3VwZWRDaGFydHMoKSkscy5nbG9iYWxzLmF4aXNDaGFydHMmJihzLmdsb2JhbHMubWluWD09PS0xLzAmJnMuZ2xvYmFscy5tYXhYPT09MS8wfHwwPT09cy5nbG9iYWxzLmRhdGFQb2ludHMpfHwoYS5sZW5ndGg/YS5mb3JFYWNoKChmdW5jdGlvbihhKXt2YXIgcz1pLmdldEVsVG9vbHRpcChhKSxyPXtwYXRoczp0LnBhdGhzLHRvb2x0aXBFbDpzLHRvb2x0aXBZOnQudG9vbHRpcFksdG9vbHRpcFg6dC50b29sdGlwWCxlbEdyaWQ6dC5lbEdyaWQsaG92ZXJBcmVhOnQuaG92ZXJBcmVhLHR0SXRlbXM6YS53Lmdsb2JhbHMudG9vbHRpcC50dEl0ZW1zfTthLncuZ2xvYmFscy5taW5YPT09aS53Lmdsb2JhbHMubWluWCYmYS53Lmdsb2JhbHMubWF4WD09PWkudy5nbG9iYWxzLm1heFgmJmEudy5nbG9iYWxzLnRvb2x0aXAuc2VyaWVzSG92ZXJCeUNvbnRleHQoe2NoYXJ0Q3R4OmEsdHRDdHg6YS53Lmdsb2JhbHMudG9vbHRpcCxvcHQ6cixlOmV9KX0pKTp0aGlzLnNlcmllc0hvdmVyQnlDb250ZXh0KHtjaGFydEN0eDp0aGlzLmN0eCx0dEN0eDp0aGlzLncuZ2xvYmFscy50b29sdGlwLG9wdDp0LGU6ZX0pKX19LHtrZXk6XCJzZXJpZXNIb3ZlckJ5Q29udGV4dFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhcnRDdHgsaT10LnR0Q3R4LGE9dC5vcHQscz10LmUscj1lLncsbz10aGlzLmdldEVsVG9vbHRpcCgpO2lmKG8pe2lmKGkudG9vbHRpcFJlY3Q9e3g6MCx5OjAsdHRXaWR0aDpvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHR0SGVpZ2h0Om8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fSxpLmU9cyxpLnRvb2x0aXBVdGlsLmhhc0JhcnMoKSYmIXIuZ2xvYmFscy5jb21ib0NoYXJ0cyYmIWkuaXNCYXJTaGFyZWQpaWYodGhpcy50Q29uZmlnLm9uRGF0YXNldEhvdmVyLmhpZ2hsaWdodERhdGFTZXJpZXMpbmV3IE4oZSkudG9nZ2xlU2VyaWVzT25Ib3ZlcihzLHMudGFyZ2V0LnBhcmVudE5vZGUpO2kuZml4ZWRUb29sdGlwJiZpLmRyYXdGaXhlZFRvb2x0aXBSZWN0KCksci5nbG9iYWxzLmF4aXNDaGFydHM/aS5heGlzQ2hhcnRzVG9vbHRpcHMoe2U6cyxvcHQ6YSx0b29sdGlwUmVjdDppLnRvb2x0aXBSZWN0fSk6aS5ub25BeGlzQ2hhcnRzVG9vbHRpcHMoe2U6cyxvcHQ6YSx0b29sdGlwUmVjdDppLnRvb2x0aXBSZWN0fSl9fX0se2tleTpcImF4aXNDaGFydHNUb29sdGlwc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLGksYT10LmUscz10Lm9wdCxyPXRoaXMudyxvPXMuZWxHcmlkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49XCJ0b3VjaG1vdmVcIj09PWEudHlwZT9hLnRvdWNoZXNbMF0uY2xpZW50WDphLmNsaWVudFgsbD1cInRvdWNobW92ZVwiPT09YS50eXBlP2EudG91Y2hlc1swXS5jbGllbnRZOmEuY2xpZW50WTtpZih0aGlzLmNsaWVudFk9bCx0aGlzLmNsaWVudFg9bixyLmdsb2JhbHMuY2FwdHVyZWRTZXJpZXNJbmRleD0tMSxyLmdsb2JhbHMuY2FwdHVyZWREYXRhUG9pbnRJbmRleD0tMSxsPG8udG9wfHxsPm8udG9wK28uaGVpZ2h0KXRoaXMuaGFuZGxlTW91c2VPdXQocyk7ZWxzZXtpZihBcnJheS5pc0FycmF5KHRoaXMudENvbmZpZy5lbmFibGVkT25TZXJpZXMpJiYhci5jb25maWcudG9vbHRpcC5zaGFyZWQpe3ZhciBoPXBhcnNlSW50KHMucGF0aHMuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIiksMTApO2lmKHRoaXMudENvbmZpZy5lbmFibGVkT25TZXJpZXMuaW5kZXhPZihoKTwwKXJldHVybiB2b2lkIHRoaXMuaGFuZGxlTW91c2VPdXQocyl9dmFyIGM9dGhpcy5nZXRFbFRvb2x0aXAoKSxkPXRoaXMuZ2V0RWxYQ3Jvc3NoYWlycygpLGc9ci5nbG9iYWxzLnh5Q2hhcnRzfHxcImJhclwiPT09ci5jb25maWcuY2hhcnQudHlwZSYmIXIuZ2xvYmFscy5pc0Jhckhvcml6b250YWwmJnRoaXMudG9vbHRpcFV0aWwuaGFzQmFycygpJiZ0aGlzLnRDb25maWcuc2hhcmVkfHxyLmdsb2JhbHMuY29tYm9DaGFydHMmJnRoaXMudG9vbHRpcFV0aWwuaGFzQmFycygpO2lmKFwibW91c2Vtb3ZlXCI9PT1hLnR5cGV8fFwidG91Y2htb3ZlXCI9PT1hLnR5cGV8fFwibW91c2V1cFwiPT09YS50eXBlKXtpZihyLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzLmxlbmd0aCtyLmdsb2JhbHMuYW5jaWxsYXJ5Q29sbGFwc2VkU2VyaWVzLmxlbmd0aD09PXIuZ2xvYmFscy5zZXJpZXMubGVuZ3RoKXJldHVybjtudWxsIT09ZCYmZC5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1hY3RpdmVcIik7dmFyIHU9dGhpcy55YXhpc1Rvb2x0aXBzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpO2lmKG51bGwhPT10aGlzLnljcm9zc2hhaXJzJiZ1Lmxlbmd0aCYmdGhpcy55Y3Jvc3NoYWlycy5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1hY3RpdmVcIiksZyYmIXRoaXMuc2hvd09uSW50ZXJzZWN0KXRoaXMuaGFuZGxlU3RpY2t5VG9vbHRpcChhLG4sbCxzKTtlbHNlIGlmKFwiaGVhdG1hcFwiPT09ci5jb25maWcuY2hhcnQudHlwZXx8XCJ0cmVlbWFwXCI9PT1yLmNvbmZpZy5jaGFydC50eXBlKXt2YXIgZj10aGlzLmludGVyc2VjdC5oYW5kbGVIZWF0VHJlZVRvb2x0aXAoe2U6YSxvcHQ6cyx4OmUseTppLHR5cGU6ci5jb25maWcuY2hhcnQudHlwZX0pO2U9Zi54LGk9Zi55LGMuc3R5bGUubGVmdD1lK1wicHhcIixjLnN0eWxlLnRvcD1pK1wicHhcIn1lbHNlIHRoaXMudG9vbHRpcFV0aWwuaGFzQmFycygpJiZ0aGlzLmludGVyc2VjdC5oYW5kbGVCYXJUb29sdGlwKHtlOmEsb3B0OnN9KSx0aGlzLnRvb2x0aXBVdGlsLmhhc01hcmtlcnMoKSYmdGhpcy5pbnRlcnNlY3QuaGFuZGxlTWFya2VyVG9vbHRpcCh7ZTphLG9wdDpzLHg6ZSx5Oml9KTtpZih0aGlzLnlheGlzVG9vbHRpcHMubGVuZ3RoKWZvcih2YXIgcD0wO3A8ci5jb25maWcueWF4aXMubGVuZ3RoO3ArKyl0aGlzLmF4ZXNUb29sdGlwLmRyYXdZYXhpc1Rvb2x0aXBUZXh0KHAsbCx0aGlzLnh5UmF0aW9zKTtzLnRvb2x0aXBFbC5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1hY3RpdmVcIil9ZWxzZVwibW91c2VvdXRcIiE9PWEudHlwZSYmXCJ0b3VjaGVuZFwiIT09YS50eXBlfHx0aGlzLmhhbmRsZU1vdXNlT3V0KHMpfX19LHtrZXk6XCJub25BeGlzQ2hhcnRzVG9vbHRpcHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmUsaT10Lm9wdCxhPXQudG9vbHRpcFJlY3Qscz10aGlzLncscj1pLnBhdGhzLmdldEF0dHJpYnV0ZShcInJlbFwiKSxvPXRoaXMuZ2V0RWxUb29sdGlwKCksbj1zLmdsb2JhbHMuZG9tLmVsV3JhcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihcIm1vdXNlbW92ZVwiPT09ZS50eXBlfHxcInRvdWNobW92ZVwiPT09ZS50eXBlKXtvLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLWFjdGl2ZVwiKSx0aGlzLnRvb2x0aXBMYWJlbHMuZHJhd1Nlcmllc1RleHRzKHt0dEl0ZW1zOmkudHRJdGVtcyxpOnBhcnNlSW50KHIsMTApLTEsc2hhcmVkOiExfSk7dmFyIGw9cy5nbG9iYWxzLmNsaWVudFgtbi5sZWZ0LWEudHRXaWR0aC8yLGg9cy5nbG9iYWxzLmNsaWVudFktbi50b3AtYS50dEhlaWdodC0xMDtpZihvLnN0eWxlLmxlZnQ9bCtcInB4XCIsby5zdHlsZS50b3A9aCtcInB4XCIscy5jb25maWcubGVnZW5kLnRvb2x0aXBIb3ZlckZvcm1hdHRlcil7dmFyIGM9ci0xLGQ9KDAscy5jb25maWcubGVnZW5kLnRvb2x0aXBIb3ZlckZvcm1hdHRlcikodGhpcy5sZWdlbmRMYWJlbHNbY10uZ2V0QXR0cmlidXRlKFwiZGF0YTpkZWZhdWx0LXRleHRcIikse3Nlcmllc0luZGV4OmMsZGF0YVBvaW50SW5kZXg6Yyx3OnN9KTt0aGlzLmxlZ2VuZExhYmVsc1tjXS5pbm5lckhUTUw9ZH19ZWxzZVwibW91c2VvdXRcIiE9PWUudHlwZSYmXCJ0b3VjaGVuZFwiIT09ZS50eXBlfHwoby5jbGFzc0xpc3QucmVtb3ZlKFwiYXBleGNoYXJ0cy1hY3RpdmVcIikscy5jb25maWcubGVnZW5kLnRvb2x0aXBIb3ZlckZvcm1hdHRlciYmdGhpcy5sZWdlbmRMYWJlbHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhOmRlZmF1bHQtdGV4dFwiKTt0LmlubmVySFRNTD1kZWNvZGVVUklDb21wb25lbnQoZSl9KSkpfX0se2tleTpcImhhbmRsZVN0aWNreVRvb2x0aXBcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhKXt2YXIgcz10aGlzLncscj10aGlzLnRvb2x0aXBVdGlsLmdldE5lYXJlc3RWYWx1ZXMoe2NvbnRleHQ6dGhpcyxob3ZlckFyZWE6YS5ob3ZlckFyZWEsZWxHcmlkOmEuZWxHcmlkLGNsaWVudFg6ZSxjbGllbnRZOml9KSxvPXIuaixuPXIuY2FwdHVyZWRTZXJpZXMsbD1hLmVsR3JpZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyLmhvdmVyWDwwfHxyLmhvdmVyWD5sLndpZHRoP3RoaXMuaGFuZGxlTW91c2VPdXQoYSk6bnVsbCE9PW4/dGhpcy5oYW5kbGVTdGlja3lDYXB0dXJlZFNlcmllcyh0LG4sYSxvKToodGhpcy50b29sdGlwVXRpbC5pc1hvdmVybGFwKG8pfHxzLmdsb2JhbHMuaXNCYXJIb3Jpem9udGFsKSYmdGhpcy5jcmVhdGUodCx0aGlzLDAsbyxhLnR0SXRlbXMpfX0se2tleTpcImhhbmRsZVN0aWNreUNhcHR1cmVkU2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM9dGhpcy53O2lmKCF0aGlzLnRDb25maWcuc2hhcmVkJiZudWxsPT09cy5nbG9iYWxzLnNlcmllc1tlXVthXSlyZXR1cm4gdm9pZCB0aGlzLmhhbmRsZU1vdXNlT3V0KGkpO3ZvaWQgMCE9PXMuZ2xvYmFscy5zZXJpZXNbZV1bYV0/dGhpcy50Q29uZmlnLnNoYXJlZCYmdGhpcy50b29sdGlwVXRpbC5pc1hvdmVybGFwKGEpJiZ0aGlzLnRvb2x0aXBVdGlsLmlzSW5pdGlhbFNlcmllc1NhbWVMZW4oKT90aGlzLmNyZWF0ZSh0LHRoaXMsZSxhLGkudHRJdGVtcyk6dGhpcy5jcmVhdGUodCx0aGlzLGUsYSxpLnR0SXRlbXMsITEpOnRoaXMudG9vbHRpcFV0aWwuaXNYb3ZlcmxhcChhKSYmdGhpcy5jcmVhdGUodCx0aGlzLDAsYSxpLnR0SXRlbXMpfX0se2tleTpcImRlYWN0aXZhdGVIb3ZlckZpbHRlclwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMudyxlPW5ldyBtKHRoaXMuY3R4KSxpPXQuZ2xvYmFscy5kb20uUGFwZXIuc2VsZWN0KFwiLmFwZXhjaGFydHMtYmFyLWFyZWFcIiksYT0wO2E8aS5sZW5ndGg7YSsrKWUucGF0aE1vdXNlTGVhdmUoaVthXSl9fSx7a2V5OlwiaGFuZGxlTW91c2VPdXRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT10aGlzLmdldEVsWENyb3NzaGFpcnMoKTtpZih0LnRvb2x0aXBFbC5jbGFzc0xpc3QucmVtb3ZlKFwiYXBleGNoYXJ0cy1hY3RpdmVcIiksdGhpcy5kZWFjdGl2YXRlSG92ZXJGaWx0ZXIoKSxcImJ1YmJsZVwiIT09ZS5jb25maWcuY2hhcnQudHlwZSYmdGhpcy5tYXJrZXIucmVzZXRQb2ludHNTaXplKCksbnVsbCE9PWkmJmkuY2xhc3NMaXN0LnJlbW92ZShcImFwZXhjaGFydHMtYWN0aXZlXCIpLG51bGwhPT10aGlzLnljcm9zc2hhaXJzJiZ0aGlzLnljcm9zc2hhaXJzLmNsYXNzTGlzdC5yZW1vdmUoXCJhcGV4Y2hhcnRzLWFjdGl2ZVwiKSx0aGlzLmlzWEF4aXNUb29sdGlwRW5hYmxlZCYmdGhpcy54YXhpc1Rvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZShcImFwZXhjaGFydHMtYWN0aXZlXCIpLHRoaXMueWF4aXNUb29sdGlwcy5sZW5ndGgpe251bGw9PT10aGlzLnlheGlzVFRFbHMmJih0aGlzLnlheGlzVFRFbHM9ZS5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvckFsbChcIi5hcGV4Y2hhcnRzLXlheGlzdG9vbHRpcFwiKSk7Zm9yKHZhciBhPTA7YTx0aGlzLnlheGlzVFRFbHMubGVuZ3RoO2ErKyl0aGlzLnlheGlzVFRFbHNbYV0uY2xhc3NMaXN0LnJlbW92ZShcImFwZXhjaGFydHMtYWN0aXZlXCIpfWUuY29uZmlnLmxlZ2VuZC50b29sdGlwSG92ZXJGb3JtYXR0ZXImJnRoaXMubGVnZW5kTGFiZWxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0QXR0cmlidXRlKFwiZGF0YTpkZWZhdWx0LXRleHRcIik7dC5pbm5lckhUTUw9ZGVjb2RlVVJJQ29tcG9uZW50KGUpfSkpfX0se2tleTpcIm1hcmtlckNsaWNrXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMudztcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbmZpZy5jaGFydC5ldmVudHMubWFya2VyQ2xpY2smJmEuY29uZmlnLmNoYXJ0LmV2ZW50cy5tYXJrZXJDbGljayh0LHRoaXMuY3R4LHtzZXJpZXNJbmRleDplLGRhdGFQb2ludEluZGV4OmksdzphfSksdGhpcy5jdHguZXZlbnRzLmZpcmVFdmVudChcIm1hcmtlckNsaWNrXCIsW3QsdGhpcy5jdHgse3Nlcmllc0luZGV4OmUsZGF0YVBvaW50SW5kZXg6aSx3OmF9XSl9fSx7a2V5OlwiY3JlYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSxzKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XT9hcmd1bWVudHNbNV06bnVsbCxvPXRoaXMudyxuPWU7XCJtb3VzZXVwXCI9PT10LnR5cGUmJnRoaXMubWFya2VyQ2xpY2sodCxpLGEpLG51bGw9PT1yJiYocj10aGlzLnRDb25maWcuc2hhcmVkKTt2YXIgbD10aGlzLnRvb2x0aXBVdGlsLmhhc01hcmtlcnMoKSxoPXRoaXMudG9vbHRpcFV0aWwuZ2V0RWxCYXJzKCk7aWYoby5jb25maWcubGVnZW5kLnRvb2x0aXBIb3ZlckZvcm1hdHRlcil7dmFyIGM9by5jb25maWcubGVnZW5kLnRvb2x0aXBIb3ZlckZvcm1hdHRlcixkPUFycmF5LmZyb20odGhpcy5sZWdlbmRMYWJlbHMpO2QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhOmRlZmF1bHQtdGV4dFwiKTt0LmlubmVySFRNTD1kZWNvZGVVUklDb21wb25lbnQoZSl9KSk7Zm9yKHZhciBnPTA7ZzxkLmxlbmd0aDtnKyspe3ZhciB1PWRbZ10sZj1wYXJzZUludCh1LmdldEF0dHJpYnV0ZShcImlcIiksMTApLHA9ZGVjb2RlVVJJQ29tcG9uZW50KHUuZ2V0QXR0cmlidXRlKFwiZGF0YTpkZWZhdWx0LXRleHRcIikpLHg9YyhwLHtzZXJpZXNJbmRleDpyP2Y6aSxkYXRhUG9pbnRJbmRleDphLHc6b30pO2lmKHIpdS5pbm5lckhUTUw9by5nbG9iYWxzLmNvbGxhcHNlZFNlcmllc0luZGljZXMuaW5kZXhPZihmKTwwP3g6cDtlbHNlIGlmKHUuaW5uZXJIVE1MPWY9PT1pP3g6cCxpPT09ZilicmVha319aWYocil7aWYobi50b29sdGlwTGFiZWxzLmRyYXdTZXJpZXNUZXh0cyh7dHRJdGVtczpzLGk6aSxqOmEsc2hhcmVkOiF0aGlzLnNob3dPbkludGVyc2VjdCYmdGhpcy50Q29uZmlnLnNoYXJlZH0pLGwmJihvLmdsb2JhbHMubWFya2Vycy5sYXJnZXN0U2l6ZT4wP24ubWFya2VyLmVubGFyZ2VQb2ludHMoYSk6bi50b29sdGlwUG9zaXRpb24ubW92ZUR5bmFtaWNQb2ludHNPbkhvdmVyKGEpKSx0aGlzLnRvb2x0aXBVdGlsLmhhc0JhcnMoKSYmKHRoaXMuYmFyU2VyaWVzSGVpZ2h0PXRoaXMudG9vbHRpcFV0aWwuZ2V0QmFyc0hlaWdodChoKSx0aGlzLmJhclNlcmllc0hlaWdodD4wKSl7dmFyIGI9bmV3IG0odGhpcy5jdHgpLHY9by5nbG9iYWxzLmRvbS5QYXBlci5zZWxlY3QoXCIuYXBleGNoYXJ0cy1iYXItYXJlYVtqPSdcIi5jb25jYXQoYSxcIiddXCIpKTt0aGlzLmRlYWN0aXZhdGVIb3ZlckZpbHRlcigpLHRoaXMudG9vbHRpcFBvc2l0aW9uLm1vdmVTdGlja3lUb29sdGlwT3ZlckJhcnMoYSk7Zm9yKHZhciB5PTA7eTx2Lmxlbmd0aDt5KyspYi5wYXRoTW91c2VFbnRlcih2W3ldKX19ZWxzZSBuLnRvb2x0aXBMYWJlbHMuZHJhd1Nlcmllc1RleHRzKHtzaGFyZWQ6ITEsdHRJdGVtczpzLGk6aSxqOmF9KSx0aGlzLnRvb2x0aXBVdGlsLmhhc0JhcnMoKSYmbi50b29sdGlwUG9zaXRpb24ubW92ZVN0aWNreVRvb2x0aXBPdmVyQmFycyhhKSxsJiZuLnRvb2x0aXBQb3NpdGlvbi5tb3ZlTWFya2VycyhpLGEpfX1dKSx0fSgpLHZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy53PWUudyx0aGlzLmJhckN0eD1lLHRoaXMudG90YWxGb3JtYXR0ZXI9dGhpcy53LmNvbmZpZy5wbG90T3B0aW9ucy5iYXIuZGF0YUxhYmVscy50b3RhbC5mb3JtYXR0ZXIsdGhpcy50b3RhbEZvcm1hdHRlcnx8KHRoaXMudG90YWxGb3JtYXR0ZXI9dGhpcy53LmNvbmZpZy5kYXRhTGFiZWxzLmZvcm1hdHRlcil9cmV0dXJuIHIodCxbe2tleTpcImhhbmRsZUJhckRhdGFMYWJlbHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LngsaT10LnksYT10LnkxLHM9dC55MixyPXQuaSxvPXQuaixuPXQucmVhbEluZGV4LGw9dC5zZXJpZXMsaD10LmJhckhlaWdodCxjPXQuYmFyV2lkdGgsZD10LmJhcllQb3NpdGlvbixnPXQudmlzaWJsZVNlcmllcyx1PXQucmVuZGVyZWRQYXRoLGY9dGhpcy53LHA9bmV3IG0odGhpcy5iYXJDdHguY3R4KSx4PUFycmF5LmlzQXJyYXkodGhpcy5iYXJDdHguc3Ryb2tlV2lkdGgpP3RoaXMuYmFyQ3R4LnN0cm9rZVdpZHRoW25dOnRoaXMuYmFyQ3R4LnN0cm9rZVdpZHRoLGI9ZStwYXJzZUZsb2F0KGMqZyksdj1pK3BhcnNlRmxvYXQoaCpnKTtmLmdsb2JhbHMuaXNYTnVtZXJpYyYmIWYuZ2xvYmFscy5pc0Jhckhvcml6b250YWwmJihiPWUrcGFyc2VGbG9hdChjKihnKzEpKSx2PWkrcGFyc2VGbG9hdChoKihnKzEpKS14KTt2YXIgeSx3PW51bGwsaz1lLEE9aSxTPXt9LEM9Zi5jb25maWcuZGF0YUxhYmVscyxMPXRoaXMuYmFyQ3R4LmJhck9wdGlvbnMuZGF0YUxhYmVscyxQPXRoaXMuYmFyQ3R4LmJhck9wdGlvbnMuZGF0YUxhYmVscy50b3RhbDt2b2lkIDAhPT1kJiZ0aGlzLmJhckN0eC5pc1JhbmdlQmFyJiYodj1kLEE9ZCk7dmFyIFQ9Qy5vZmZzZXRYLE09Qy5vZmZzZXRZLEk9e3dpZHRoOjAsaGVpZ2h0OjB9O2lmKGYuY29uZmlnLmRhdGFMYWJlbHMuZW5hYmxlZCl7dmFyIFg9dGhpcy5iYXJDdHguc2VyaWVzW3JdW29dO0k9cC5nZXRUZXh0UmVjdHMoZi5nbG9iYWxzLnlMYWJlbEZvcm1hdHRlcnNbMF0oWCkscGFyc2VGbG9hdChDLnN0eWxlLmZvbnRTaXplKSl9dmFyIHo9e3g6ZSx5OmksaTpyLGo6byxyZWFsSW5kZXg6bixyZW5kZXJlZFBhdGg6dSxiY3g6YixiY3k6dixiYXJIZWlnaHQ6aCxiYXJXaWR0aDpjLHRleHRSZWN0czpJLHN0cm9rZVdpZHRoOngsZGF0YUxhYmVsc1g6ayxkYXRhTGFiZWxzWTpBLGRhdGFMYWJlbHNDb25maWc6QyxiYXJEYXRhTGFiZWxzQ29uZmlnOkwsYmFyVG90YWxEYXRhTGFiZWxzQ29uZmlnOlAsb2ZmWDpULG9mZlk6TX07cmV0dXJuIFM9dGhpcy5iYXJDdHguaXNIb3Jpem9udGFsP3RoaXMuY2FsY3VsYXRlQmFyc0RhdGFMYWJlbHNQb3NpdGlvbih6KTp0aGlzLmNhbGN1bGF0ZUNvbHVtbnNEYXRhTGFiZWxzUG9zaXRpb24oeiksdS5hdHRyKHtjeTpTLmJjeSxjeDpTLmJjeCxqOm8sdmFsOmxbcl1bb10sYmFySGVpZ2h0OmgsYmFyV2lkdGg6Y30pLHk9dGhpcy5kcmF3Q2FsY3VsYXRlZERhdGFMYWJlbHMoe3g6Uy5kYXRhTGFiZWxzWCx5OlMuZGF0YUxhYmVsc1ksdmFsOnRoaXMuYmFyQ3R4LmlzUmFuZ2VCYXI/W2Esc106bFtyXVtvXSxpOm4sajpvLGJhcldpZHRoOmMsYmFySGVpZ2h0OmgsdGV4dFJlY3RzOkksZGF0YUxhYmVsc0NvbmZpZzpDfSksZi5jb25maWcuY2hhcnQuc3RhY2tlZCYmUC5lbmFibGVkJiYodz10aGlzLmRyYXdUb3RhbERhdGFMYWJlbHMoe3g6Uy50b3RhbERhdGFMYWJlbHNYLHk6Uy50b3RhbERhdGFMYWJlbHNZLHJlYWxJbmRleDpuLHRleHRBbmNob3I6Uy50b3RhbERhdGFMYWJlbHNBbmNob3IsdmFsOnRoaXMuZ2V0U3RhY2tlZFRvdGFsRGF0YUxhYmVsKHtyZWFsSW5kZXg6bixqOm99KSxkYXRhTGFiZWxzQ29uZmlnOkMsYmFyVG90YWxEYXRhTGFiZWxzQ29uZmlnOlB9KSkse2RhdGFMYWJlbHM6eSx0b3RhbERhdGFMYWJlbHM6d319fSx7a2V5OlwiZ2V0U3RhY2tlZFRvdGFsRGF0YUxhYmVsXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGk9dC5yZWFsSW5kZXgsYT10Lmoscz10aGlzLncscj10aGlzLmJhckN0eC5zdGFja2VkU2VyaWVzVG90YWxzW2FdO3JldHVybiB0aGlzLnRvdGFsRm9ybWF0dGVyJiYocj10aGlzLnRvdGFsRm9ybWF0dGVyKHIsZShlKHt9LHMpLHt9LHtzZXJpZXNJbmRleDppLGRhdGFQb2ludEluZGV4OmEsdzpzfSkpKSxyfX0se2tleTpcImNhbGN1bGF0ZUNvbHVtbnNEYXRhTGFiZWxzUG9zaXRpb25cIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxpLGEscz10aGlzLncscj10Lmksbz10Lmosbj10LnJlYWxJbmRleCxsPXQueSxoPXQuYmN4LGM9dC5iYXJXaWR0aCxkPXQuYmFySGVpZ2h0LGc9dC50ZXh0UmVjdHMsdT10LmRhdGFMYWJlbHNZLGY9dC5kYXRhTGFiZWxzQ29uZmlnLHA9dC5iYXJEYXRhTGFiZWxzQ29uZmlnLHg9dC5iYXJUb3RhbERhdGFMYWJlbHNDb25maWcsYj10LnN0cm9rZVdpZHRoLHY9dC5vZmZYLHk9dC5vZmZZO2Q9TWF0aC5hYnMoZCk7dmFyIHc9XCJ2ZXJ0aWNhbFwiPT09cy5jb25maWcucGxvdE9wdGlvbnMuYmFyLmRhdGFMYWJlbHMub3JpZW50YXRpb247aC09Yi8yO3ZhciBrPXMuZ2xvYmFscy5ncmlkV2lkdGgvcy5nbG9iYWxzLmRhdGFQb2ludHM7aWYoZT1zLmdsb2JhbHMuaXNYTnVtZXJpYz9oLWMvMit2OmgtaytjLzIrdix3KXtlPWUrZy5oZWlnaHQvMi1iLzItMn12YXIgQT10aGlzLmJhckN0eC5zZXJpZXNbcl1bb108MCxTPWw7c3dpdGNoKHRoaXMuYmFyQ3R4LmlzUmV2ZXJzZWQmJihTPWwtZCsoQT8yKmQ6MCksbC09ZCkscC5wb3NpdGlvbil7Y2FzZVwiY2VudGVyXCI6dT13P0E/UytkLzIreTpTK2QvMi15OkE/Uy1kLzIrZy5oZWlnaHQvMit5OlMrZC8yK2cuaGVpZ2h0LzIteTticmVhaztjYXNlXCJib3R0b21cIjp1PXc/QT9TK2QreTpTK2QteTpBP1MtZCtnLmhlaWdodCtiK3k6UytkLWcuaGVpZ2h0LzIrYi15O2JyZWFrO2Nhc2VcInRvcFwiOnU9dz9BP1MreTpTLXk6QT9TLWcuaGVpZ2h0LzIteTpTK2cuaGVpZ2h0K3l9aWYodGhpcy5iYXJDdHgubGFzdEFjdGl2ZUJhclNlcmllSW5kZXg9PT1uJiZ4LmVuYWJsZWQpe3ZhciBDPW5ldyBtKHRoaXMuYmFyQ3R4LmN0eCkuZ2V0VGV4dFJlY3RzKHRoaXMuZ2V0U3RhY2tlZFRvdGFsRGF0YUxhYmVsKHtyZWFsSW5kZXg6bixqOm99KSxmLmZvbnRTaXplKTtpPUE/Uy1DLmhlaWdodC8yLXkteC5vZmZzZXRZKzE4OlMrQy5oZWlnaHQreSt4Lm9mZnNldFktMTgsYT1lK3gub2Zmc2V0WH1yZXR1cm4gcy5jb25maWcuY2hhcnQuc3RhY2tlZHx8KHU8MD91PTArYjp1K2cuaGVpZ2h0LzM+cy5nbG9iYWxzLmdyaWRIZWlnaHQmJih1PXMuZ2xvYmFscy5ncmlkSGVpZ2h0LWIpKSx7YmN4OmgsYmN5OmwsZGF0YUxhYmVsc1g6ZSxkYXRhTGFiZWxzWTp1LHRvdGFsRGF0YUxhYmVsc1g6YSx0b3RhbERhdGFMYWJlbHNZOmksdG90YWxEYXRhTGFiZWxzQW5jaG9yOlwibWlkZGxlXCJ9fX0se2tleTpcImNhbGN1bGF0ZUJhcnNEYXRhTGFiZWxzUG9zaXRpb25cIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT10LngsYT10Lmkscz10Lmoscj10LnJlYWxJbmRleCxvPXQuYmN5LG49dC5iYXJIZWlnaHQsbD10LmJhcldpZHRoLGg9dC50ZXh0UmVjdHMsYz10LmRhdGFMYWJlbHNYLGQ9dC5zdHJva2VXaWR0aCxnPXQuZGF0YUxhYmVsc0NvbmZpZyx1PXQuYmFyRGF0YUxhYmVsc0NvbmZpZyxmPXQuYmFyVG90YWxEYXRhTGFiZWxzQ29uZmlnLHA9dC5vZmZYLHg9dC5vZmZZLGI9ZS5nbG9iYWxzLmdyaWRIZWlnaHQvZS5nbG9iYWxzLmRhdGFQb2ludHM7bD1NYXRoLmFicyhsKTt2YXIgdix5LHc9by0odGhpcy5iYXJDdHguaXNSYW5nZUJhcj8wOmIpK24vMitoLmhlaWdodC8yK3gtMyxrPVwic3RhcnRcIixBPXRoaXMuYmFyQ3R4LnNlcmllc1thXVtzXTwwLFM9aTtzd2l0Y2godGhpcy5iYXJDdHguaXNSZXZlcnNlZCYmKFM9aStsLShBPzIqbDowKSxpPWUuZ2xvYmFscy5ncmlkV2lkdGgtbCksdS5wb3NpdGlvbil7Y2FzZVwiY2VudGVyXCI6Yz1BP1MrbC8yLXA6TWF0aC5tYXgoaC53aWR0aC8yLFMtbC8yKStwO2JyZWFrO2Nhc2VcImJvdHRvbVwiOmM9QT9TK2wtZC1NYXRoLnJvdW5kKGgud2lkdGgvMiktcDpTLWwrZCtNYXRoLnJvdW5kKGgud2lkdGgvMikrcDticmVhaztjYXNlXCJ0b3BcIjpjPUE/Uy1kK01hdGgucm91bmQoaC53aWR0aC8yKS1wOlMtZC1NYXRoLnJvdW5kKGgud2lkdGgvMikrcH1pZih0aGlzLmJhckN0eC5sYXN0QWN0aXZlQmFyU2VyaWVJbmRleD09PXImJmYuZW5hYmxlZCl7dmFyIEM9bmV3IG0odGhpcy5iYXJDdHguY3R4KS5nZXRUZXh0UmVjdHModGhpcy5nZXRTdGFja2VkVG90YWxEYXRhTGFiZWwoe3JlYWxJbmRleDpyLGo6c30pLGcuZm9udFNpemUpO0E/KHY9Uy1kK01hdGgucm91bmQoQy53aWR0aC8yKS1wLWYub2Zmc2V0WC0xNSxrPVwiZW5kXCIpOnY9Uy1kLU1hdGgucm91bmQoQy53aWR0aC8yKStwK2Yub2Zmc2V0WCsxNSx5PXcrZi5vZmZzZXRZfXJldHVybiBlLmNvbmZpZy5jaGFydC5zdGFja2VkfHwoYzwwP2M9YytoLndpZHRoK2Q6YytoLndpZHRoLzI+ZS5nbG9iYWxzLmdyaWRXaWR0aCYmKGM9ZS5nbG9iYWxzLmdyaWRXaWR0aC1oLndpZHRoLWQpKSx7YmN4OmksYmN5Om8sZGF0YUxhYmVsc1g6YyxkYXRhTGFiZWxzWTp3LHRvdGFsRGF0YUxhYmVsc1g6dix0b3RhbERhdGFMYWJlbHNZOnksdG90YWxEYXRhTGFiZWxzQW5jaG9yOmt9fX0se2tleTpcImRyYXdDYWxjdWxhdGVkRGF0YUxhYmVsc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBpPXQueCxhPXQueSxzPXQudmFsLHI9dC5pLG89dC5qLG49dC50ZXh0UmVjdHMsbD10LmJhckhlaWdodCxoPXQuYmFyV2lkdGgsYz10LmRhdGFMYWJlbHNDb25maWcsZD10aGlzLncsZz1cInJvdGF0ZSgwKVwiO1widmVydGljYWxcIj09PWQuY29uZmlnLnBsb3RPcHRpb25zLmJhci5kYXRhTGFiZWxzLm9yaWVudGF0aW9uJiYoZz1cInJvdGF0ZSgtOTAsIFwiLmNvbmNhdChpLFwiLCBcIikuY29uY2F0KGEsXCIpXCIpKTt2YXIgdT1uZXcgSCh0aGlzLmJhckN0eC5jdHgpLGY9bmV3IG0odGhpcy5iYXJDdHguY3R4KSxwPWMuZm9ybWF0dGVyLHg9bnVsbCxiPWQuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXNJbmRpY2VzLmluZGV4T2Yocik+LTE7aWYoYy5lbmFibGVkJiYhYil7eD1mLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtZGF0YS1sYWJlbHNcIix0cmFuc2Zvcm06Z30pO3ZhciB2PVwiXCI7dm9pZCAwIT09cyYmKHY9cChzLGUoZSh7fSxkKSx7fSx7c2VyaWVzSW5kZXg6cixkYXRhUG9pbnRJbmRleDpvLHc6ZH0pKSk7dmFyIHk9ZC5nbG9iYWxzLnNlcmllc1tyXVtvXTwwLHc9ZC5jb25maWcucGxvdE9wdGlvbnMuYmFyLmRhdGFMYWJlbHMucG9zaXRpb247aWYoXCJ2ZXJ0aWNhbFwiPT09ZC5jb25maWcucGxvdE9wdGlvbnMuYmFyLmRhdGFMYWJlbHMub3JpZW50YXRpb24mJihcInRvcFwiPT09dyYmKGMudGV4dEFuY2hvcj15P1wiZW5kXCI6XCJzdGFydFwiKSxcImNlbnRlclwiPT09dyYmKGMudGV4dEFuY2hvcj1cIm1pZGRsZVwiKSxcImJvdHRvbVwiPT09dyYmKGMudGV4dEFuY2hvcj15P1wiZW5kXCI6XCJzdGFydFwiKSksdGhpcy5iYXJDdHguaXNSYW5nZUJhciYmdGhpcy5iYXJDdHguYmFyT3B0aW9ucy5kYXRhTGFiZWxzLmhpZGVPdmVyZmxvd2luZ0xhYmVscyloPGYuZ2V0VGV4dFJlY3RzKHYscGFyc2VGbG9hdChjLnN0eWxlLmZvbnRTaXplKSkud2lkdGgmJih2PVwiXCIpO2QuY29uZmlnLmNoYXJ0LnN0YWNrZWQmJnRoaXMuYmFyQ3R4LmJhck9wdGlvbnMuZGF0YUxhYmVscy5oaWRlT3ZlcmZsb3dpbmdMYWJlbHMmJih0aGlzLmJhckN0eC5pc0hvcml6b250YWw/bi53aWR0aC8xLjY+TWF0aC5hYnMoaCkmJih2PVwiXCIpOm4uaGVpZ2h0LzEuNj5NYXRoLmFicyhsKSYmKHY9XCJcIikpO3ZhciBrPWUoe30sYyk7dGhpcy5iYXJDdHguaXNIb3Jpem9udGFsJiZzPDAmJihcInN0YXJ0XCI9PT1jLnRleHRBbmNob3I/ay50ZXh0QW5jaG9yPVwiZW5kXCI6XCJlbmRcIj09PWMudGV4dEFuY2hvciYmKGsudGV4dEFuY2hvcj1cInN0YXJ0XCIpKSx1LnBsb3REYXRhTGFiZWxzVGV4dCh7eDppLHk6YSx0ZXh0OnYsaTpyLGo6byxwYXJlbnQ6eCxkYXRhTGFiZWxzQ29uZmlnOmssYWx3YXlzRHJhd0RhdGFMYWJlbDohMCxvZmZzZXRDb3JyZWN0aW9uOiEwfSl9cmV0dXJuIHh9fSx7a2V5OlwiZHJhd1RvdGFsRGF0YUxhYmVsc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dC54LGE9dC55LHM9dC52YWwscj10LnJlYWxJbmRleCxvPXQudGV4dEFuY2hvcixuPXQuYmFyVG90YWxEYXRhTGFiZWxzQ29uZmlnLGw9bmV3IG0odGhpcy5iYXJDdHguY3R4KTtyZXR1cm4gbi5lbmFibGVkJiZ2b2lkIDAhPT1pJiZ2b2lkIDAhPT1hJiZ0aGlzLmJhckN0eC5sYXN0QWN0aXZlQmFyU2VyaWVJbmRleD09PXImJihlPWwuZHJhd1RleHQoe3g6aSx5OmEsZm9yZUNvbG9yOm4uc3R5bGUuY29sb3IsdGV4dDpzLHRleHRBbmNob3I6byxmb250RmFtaWx5Om4uc3R5bGUuZm9udEZhbWlseSxmb250U2l6ZTpuLnN0eWxlLmZvbnRTaXplLGZvbnRXZWlnaHQ6bi5zdHlsZS5mb250V2VpZ2h0fSkpLGV9fV0pLHR9KCksbXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLnc9ZS53LHRoaXMuYmFyQ3R4PWV9cmV0dXJuIHIodCxbe2tleTpcImluaXRWYXJpYWJsZXNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnc7dGhpcy5iYXJDdHguc2VyaWVzPXQsdGhpcy5iYXJDdHgudG90YWxJdGVtcz0wLHRoaXMuYmFyQ3R4LnNlcmllc0xlbj0wLHRoaXMuYmFyQ3R4LnZpc2libGVJPS0xLHRoaXMuYmFyQ3R4LnZpc2libGVJdGVtcz0xO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHRbaV0ubGVuZ3RoPjAmJih0aGlzLmJhckN0eC5zZXJpZXNMZW49dGhpcy5iYXJDdHguc2VyaWVzTGVuKzEsdGhpcy5iYXJDdHgudG90YWxJdGVtcys9dFtpXS5sZW5ndGgpLGUuZ2xvYmFscy5pc1hOdW1lcmljKWZvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWUuZ2xvYmFscy5zZXJpZXNYW2ldW2FdPmUuZ2xvYmFscy5taW5YJiZlLmdsb2JhbHMuc2VyaWVzWFtpXVthXTxlLmdsb2JhbHMubWF4WCYmdGhpcy5iYXJDdHgudmlzaWJsZUl0ZW1zKys7ZWxzZSB0aGlzLmJhckN0eC52aXNpYmxlSXRlbXM9ZS5nbG9iYWxzLmRhdGFQb2ludHM7MD09PXRoaXMuYmFyQ3R4LnNlcmllc0xlbiYmKHRoaXMuYmFyQ3R4LnNlcmllc0xlbj0xKSx0aGlzLmJhckN0eC56ZXJvU2VyaWVzZXM9W10sdGhpcy5iYXJDdHgucmFkaXVzT25TZXJpZXNOdW1iZXI9dC5sZW5ndGgtMSxlLmdsb2JhbHMuY29tYm9DaGFydHN8fHRoaXMuY2hlY2taZXJvU2VyaWVzKHtzZXJpZXM6dH0pfX0se2tleTpcImluaXRpYWxQb3NpdGlvbnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0LGUsaSxhLHMscixvLG4sbD10aGlzLncsaD1sLmdsb2JhbHMuZGF0YVBvaW50czt0aGlzLmJhckN0eC5pc1JhbmdlQmFyJiYoaD1sLmdsb2JhbHMubGFiZWxzLmxlbmd0aCk7dmFyIGM9dGhpcy5iYXJDdHguc2VyaWVzTGVuO2lmKGwuY29uZmlnLnBsb3RPcHRpb25zLmJhci5yYW5nZUJhckdyb3VwUm93cyYmKGM9MSksdGhpcy5iYXJDdHguaXNIb3Jpem9udGFsKXM9KGk9bC5nbG9iYWxzLmdyaWRIZWlnaHQvaCkvYyxsLmdsb2JhbHMuaXNYTnVtZXJpYyYmKHM9KGk9bC5nbG9iYWxzLmdyaWRIZWlnaHQvdGhpcy5iYXJDdHgudG90YWxJdGVtcykvdGhpcy5iYXJDdHguc2VyaWVzTGVuKSxzPXMqcGFyc2VJbnQodGhpcy5iYXJDdHguYmFyT3B0aW9ucy5iYXJIZWlnaHQsMTApLzEwMCxuPXRoaXMuYmFyQ3R4LmJhc2VMaW5lSW52ZXJ0ZWRZK2wuZ2xvYmFscy5wYWRIb3Jpem9udGFsKyh0aGlzLmJhckN0eC5pc1JldmVyc2VkP2wuZ2xvYmFscy5ncmlkV2lkdGg6MCktKHRoaXMuYmFyQ3R4LmlzUmV2ZXJzZWQ/Mip0aGlzLmJhckN0eC5iYXNlTGluZUludmVydGVkWTowKSxlPShpLXMqdGhpcy5iYXJDdHguc2VyaWVzTGVuKS8yO2Vsc2V7aWYoYT1sLmdsb2JhbHMuZ3JpZFdpZHRoL3RoaXMuYmFyQ3R4LnZpc2libGVJdGVtcyxsLmNvbmZpZy54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWMmJihhPWwuZ2xvYmFscy5ncmlkV2lkdGgvbC5nbG9iYWxzLmRhdGFQb2ludHMpLHI9YS90aGlzLmJhckN0eC5zZXJpZXNMZW4qcGFyc2VJbnQodGhpcy5iYXJDdHguYmFyT3B0aW9ucy5jb2x1bW5XaWR0aCwxMCkvMTAwLGwuZ2xvYmFscy5pc1hOdW1lcmljKXt2YXIgZD10aGlzLmJhckN0eC54UmF0aW87bC5jb25maWcueGF4aXMuY29udmVydGVkQ2F0VG9OdW1lcmljJiYoZD10aGlzLmJhckN0eC5pbml0aWFsWFJhdGlvKSxsLmdsb2JhbHMubWluWERpZmYmJi41IT09bC5nbG9iYWxzLm1pblhEaWZmJiZsLmdsb2JhbHMubWluWERpZmYvZD4wJiYoYT1sLmdsb2JhbHMubWluWERpZmYvZCksKHI9YS90aGlzLmJhckN0eC5zZXJpZXNMZW4qcGFyc2VJbnQodGhpcy5iYXJDdHguYmFyT3B0aW9ucy5jb2x1bW5XaWR0aCwxMCkvMTAwKTwxJiYocj0xKX1vPWwuZ2xvYmFscy5ncmlkSGVpZ2h0LXRoaXMuYmFyQ3R4LmJhc2VMaW5lWVt0aGlzLmJhckN0eC55YXhpc0luZGV4XS0odGhpcy5iYXJDdHguaXNSZXZlcnNlZD9sLmdsb2JhbHMuZ3JpZEhlaWdodDowKSsodGhpcy5iYXJDdHguaXNSZXZlcnNlZD8yKnRoaXMuYmFyQ3R4LmJhc2VMaW5lWVt0aGlzLmJhckN0eC55YXhpc0luZGV4XTowKSx0PWwuZ2xvYmFscy5wYWRIb3Jpem9udGFsKyhhLXIqdGhpcy5iYXJDdHguc2VyaWVzTGVuKS8yfXJldHVybnt4OnQseTplLHlEaXZpc2lvbjppLHhEaXZpc2lvbjphLGJhckhlaWdodDpzLGJhcldpZHRoOnIsemVyb0g6byx6ZXJvVzpufX19LHtrZXk6XCJnZXRQYXRoRmlsbENvbG9yXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dmFyIHMscixvLG4sbD10aGlzLncsaD1uZXcgRih0aGlzLmJhckN0eC5jdHgpLGM9bnVsbCxkPXRoaXMuYmFyQ3R4LmJhck9wdGlvbnMuZGlzdHJpYnV0ZWQ/aTplO3RoaXMuYmFyQ3R4LmJhck9wdGlvbnMuY29sb3JzLnJhbmdlcy5sZW5ndGg+MCYmdGhpcy5iYXJDdHguYmFyT3B0aW9ucy5jb2xvcnMucmFuZ2VzLm1hcCgoZnVuY3Rpb24oYSl7dFtlXVtpXT49YS5mcm9tJiZ0W2VdW2ldPD1hLnRvJiYoYz1hLmNvbG9yKX0pKTtyZXR1cm4gbC5jb25maWcuc2VyaWVzW2VdLmRhdGFbaV0mJmwuY29uZmlnLnNlcmllc1tlXS5kYXRhW2ldLmZpbGxDb2xvciYmKGM9bC5jb25maWcuc2VyaWVzW2VdLmRhdGFbaV0uZmlsbENvbG9yKSxoLmZpbGxQYXRoKHtzZXJpZXNOdW1iZXI6dGhpcy5iYXJDdHguYmFyT3B0aW9ucy5kaXN0cmlidXRlZD9kOmEsZGF0YVBvaW50SW5kZXg6aSxjb2xvcjpjLHZhbHVlOnRbZV1baV0sZmlsbENvbmZpZzpudWxsPT09KHM9bC5jb25maWcuc2VyaWVzW2VdLmRhdGFbaV0pfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmZpbGwsZmlsbFR5cGU6bnVsbCE9PShyPWwuY29uZmlnLnNlcmllc1tlXS5kYXRhW2ldKSYmdm9pZCAwIT09ciYmbnVsbCE9PShvPXIuZmlsbCkmJnZvaWQgMCE9PW8mJm8udHlwZT9udWxsPT09KG49bC5jb25maWcuc2VyaWVzW2VdLmRhdGFbaV0pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmZpbGwudHlwZTpsLmNvbmZpZy5maWxsLnR5cGV9KX19LHtrZXk6XCJnZXRTdHJva2VXaWR0aFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT0wLHM9dGhpcy53O3JldHVybiB2b2lkIDA9PT10aGlzLmJhckN0eC5zZXJpZXNbdF1bZV18fG51bGw9PT10aGlzLmJhckN0eC5zZXJpZXNbdF1bZV0/dGhpcy5iYXJDdHguaXNOdWxsVmFsdWU9ITA6dGhpcy5iYXJDdHguaXNOdWxsVmFsdWU9ITEscy5jb25maWcuc3Ryb2tlLnNob3cmJih0aGlzLmJhckN0eC5pc051bGxWYWx1ZXx8KGE9QXJyYXkuaXNBcnJheSh0aGlzLmJhckN0eC5zdHJva2VXaWR0aCk/dGhpcy5iYXJDdHguc3Ryb2tlV2lkdGhbaV06dGhpcy5iYXJDdHguc3Ryb2tlV2lkdGgpKSxhfX0se2tleTpcImJhckJhY2tncm91bmRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmosaT10LmksYT10LngxLHM9dC54MixyPXQueTEsbz10LnkyLG49dC5lbFNlcmllcyxsPXRoaXMudyxoPW5ldyBtKHRoaXMuYmFyQ3R4LmN0eCksYz1uZXcgTih0aGlzLmJhckN0eC5jdHgpLmdldEFjdGl2ZUNvbmZpZ1Nlcmllc0luZGV4KCk7aWYodGhpcy5iYXJDdHguYmFyT3B0aW9ucy5jb2xvcnMuYmFja2dyb3VuZEJhckNvbG9ycy5sZW5ndGg+MCYmYz09PWkpe2U+PXRoaXMuYmFyQ3R4LmJhck9wdGlvbnMuY29sb3JzLmJhY2tncm91bmRCYXJDb2xvcnMubGVuZ3RoJiYoZSU9dGhpcy5iYXJDdHguYmFyT3B0aW9ucy5jb2xvcnMuYmFja2dyb3VuZEJhckNvbG9ycy5sZW5ndGgpO3ZhciBkPXRoaXMuYmFyQ3R4LmJhck9wdGlvbnMuY29sb3JzLmJhY2tncm91bmRCYXJDb2xvcnNbZV0sZz1oLmRyYXdSZWN0KHZvaWQgMCE9PWE/YTowLHZvaWQgMCE9PXI/cjowLHZvaWQgMCE9PXM/czpsLmdsb2JhbHMuZ3JpZFdpZHRoLHZvaWQgMCE9PW8/bzpsLmdsb2JhbHMuZ3JpZEhlaWdodCx0aGlzLmJhckN0eC5iYXJPcHRpb25zLmNvbG9ycy5iYWNrZ3JvdW5kQmFyUmFkaXVzLGQsdGhpcy5iYXJDdHguYmFyT3B0aW9ucy5jb2xvcnMuYmFja2dyb3VuZEJhck9wYWNpdHkpO24uYWRkKGcpLGcubm9kZS5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1iYWNrZ3JvdW5kQmFyXCIpfX19LHtrZXk6XCJnZXRDb2x1bW5QYXRoc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuYmFyV2lkdGgsaT10LmJhclhQb3NpdGlvbixhPXQueVJhdGlvLHM9dC55MSxyPXQueTIsbz10LnN0cm9rZVdpZHRoLG49dC5zZXJpZXMsbD10LnJlYWxJbmRleCxoPXQuaSxjPXQuaixkPXQudyxnPW5ldyBtKHRoaXMuYmFyQ3R4LmN0eCk7KG89QXJyYXkuaXNBcnJheShvKT9vW2xdOm8pfHwobz0wKTt2YXIgdT17YmFyV2lkdGg6ZSxzdHJva2VXaWR0aDpvLHlSYXRpbzphLGJhclhQb3NpdGlvbjppLHkxOnMseTI6cn0sZj10aGlzLmdldFJvdW5kZWRCYXJzKGQsdSxuLGgsYykscD1pLHg9aStlLGI9Zy5tb3ZlKHAscyksdj1nLm1vdmUocCxzKSx5PWcubGluZSh4LW8scyk7cmV0dXJuIGQuZ2xvYmFscy5wcmV2aW91c1BhdGhzLmxlbmd0aD4wJiYodj10aGlzLmJhckN0eC5nZXRQcmV2aW91c1BhdGgobCxjLCExKSksYj1iK2cubGluZShwLGYueTIpK2YucGF0aFdpdGhSYWRpdXMrZy5saW5lKHgtbyxmLnkyKSt5K3krXCJ6XCIsdj12K2cubGluZShwLHMpK3kreSt5K3kreStnLmxpbmUocCxzKSxkLmNvbmZpZy5jaGFydC5zdGFja2VkJiYodGhpcy5iYXJDdHgueUFycmoucHVzaChmLnkyV2l0aFJhZGl1cyksdGhpcy5iYXJDdHgueUFycmpGLnB1c2goTWF0aC5hYnMocy1mLnkyV2l0aFJhZGl1cykpLHRoaXMuYmFyQ3R4LnlBcnJqVmFsLnB1c2godGhpcy5iYXJDdHguc2VyaWVzW2hdW2NdKSkse3BhdGhUbzpiLHBhdGhGcm9tOnZ9fX0se2tleTpcImdldEJhcnBhdGhzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5iYXJZUG9zaXRpb24saT10LmJhckhlaWdodCxhPXQueDEscz10LngyLHI9dC5zdHJva2VXaWR0aCxvPXQuc2VyaWVzLG49dC5yZWFsSW5kZXgsbD10LmksaD10LmosYz10LncsZD1uZXcgbSh0aGlzLmJhckN0eC5jdHgpOyhyPUFycmF5LmlzQXJyYXkocik/cltuXTpyKXx8KHI9MCk7dmFyIGc9e2JhckhlaWdodDppLHN0cm9rZVdpZHRoOnIsYmFyWVBvc2l0aW9uOmUseDI6cyx4MTphfSx1PXRoaXMuZ2V0Um91bmRlZEJhcnMoYyxnLG8sbCxoKSxmPWQubW92ZShhLGUpLHA9ZC5tb3ZlKGEsZSk7Yy5nbG9iYWxzLnByZXZpb3VzUGF0aHMubGVuZ3RoPjAmJihwPXRoaXMuYmFyQ3R4LmdldFByZXZpb3VzUGF0aChuLGgsITEpKTt2YXIgeD1lLGI9ZStpLHY9ZC5saW5lKGEsYi1yKTtyZXR1cm4gZj1mK2QubGluZSh1LngyLHgpK3UucGF0aFdpdGhSYWRpdXMrZC5saW5lKHUueDIsYi1yKSt2K3YrXCJ6XCIscD1wK2QubGluZShhLHgpK3Yrdit2K3YrditkLmxpbmUoYSx4KSxjLmNvbmZpZy5jaGFydC5zdGFja2VkJiYodGhpcy5iYXJDdHgueEFycmoucHVzaCh1LngyV2l0aFJhZGl1cyksdGhpcy5iYXJDdHgueEFycmpGLnB1c2goTWF0aC5hYnMoYS11LngyV2l0aFJhZGl1cykpLHRoaXMuYmFyQ3R4LnhBcnJqVmFsLnB1c2godGhpcy5iYXJDdHguc2VyaWVzW2xdW2hdKSkse3BhdGhUbzpmLHBhdGhGcm9tOnB9fX0se2tleTpcImdldFJvdW5kZWRCYXJzXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSxzKXt2YXIgcj1uZXcgbSh0aGlzLmJhckN0eC5jdHgpLG89MCxuPXQuY29uZmlnLnBsb3RPcHRpb25zLmJhci5ib3JkZXJSYWRpdXMsbD1BcnJheS5pc0FycmF5KG4pO2w/bz1uW2E+bi5sZW5ndGgtMT9uLmxlbmd0aC0xOmFdOm89bjtpZih0LmNvbmZpZy5jaGFydC5zdGFja2VkJiZpLmxlbmd0aD4xJiZhIT09dGhpcy5iYXJDdHgucmFkaXVzT25TZXJpZXNOdW1iZXImJiFsJiYobz0wKSx0aGlzLmJhckN0eC5pc0hvcml6b250YWwpe3ZhciBoPVwiXCIsYz1lLngyO2lmKE1hdGguYWJzKGUueDEtZS54Mik8byYmKG89TWF0aC5hYnMoZS54MS1lLngyKSksdm9pZCAwIT09aVthXVtzXXx8bnVsbCE9PWlbYV1bc10pe3ZhciBkPXRoaXMuYmFyQ3R4LmlzUmV2ZXJzZWQ/aVthXVtzXT4wOmlbYV1bc108MDtkJiYobyo9LTEpLGMtPW8saD1yLnF1YWRyYXRpY0N1cnZlKGMrbyxlLmJhcllQb3NpdGlvbixjK28sZS5iYXJZUG9zaXRpb24rKGQ/LTEqbzpvKSkrci5saW5lKGMrbyxlLmJhcllQb3NpdGlvbitlLmJhckhlaWdodC1lLnN0cm9rZVdpZHRoLShkPy0xKm86bykpK3IucXVhZHJhdGljQ3VydmUoYytvLGUuYmFyWVBvc2l0aW9uK2UuYmFySGVpZ2h0LWUuc3Ryb2tlV2lkdGgsYyxlLmJhcllQb3NpdGlvbitlLmJhckhlaWdodC1lLnN0cm9rZVdpZHRoKX1yZXR1cm57cGF0aFdpdGhSYWRpdXM6aCx4MldpdGhSYWRpdXM6YytvLHgyOmN9fXZhciBnPVwiXCIsdT1lLnkyO2lmKE1hdGguYWJzKGUueTEtZS55Mik8byYmKG89TWF0aC5hYnMoZS55MS1lLnkyKSksdm9pZCAwIT09aVthXVtzXXx8bnVsbCE9PWlbYV1bc10pe3ZhciBmPWlbYV1bc108MDtmJiYobyo9LTEpLHUrPW8sZz1yLnF1YWRyYXRpY0N1cnZlKGUuYmFyWFBvc2l0aW9uLHUtbyxlLmJhclhQb3NpdGlvbisoZj8tMSpvOm8pLHUtbykrci5saW5lKGUuYmFyWFBvc2l0aW9uK2UuYmFyV2lkdGgtZS5zdHJva2VXaWR0aC0oZj8tMSpvOm8pLHUtbykrci5xdWFkcmF0aWNDdXJ2ZShlLmJhclhQb3NpdGlvbitlLmJhcldpZHRoLWUuc3Ryb2tlV2lkdGgsdS1vLGUuYmFyWFBvc2l0aW9uK2UuYmFyV2lkdGgtZS5zdHJva2VXaWR0aCx1KX1yZXR1cm57cGF0aFdpdGhSYWRpdXM6Zyx5MldpdGhSYWRpdXM6dS1vLHkyOnV9fX0se2tleTpcImNoZWNrWmVyb1Nlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnNlcmllcyxpPXRoaXMudyxhPTA7YTxlLmxlbmd0aDthKyspe2Zvcih2YXIgcz0wLHI9MDtyPGVbaS5nbG9iYWxzLm1heFZhbHNJbkFycmF5SW5kZXhdLmxlbmd0aDtyKyspcys9ZVthXVtyXTswPT09cyYmdGhpcy5iYXJDdHguemVyb1Nlcmllc2VzLnB1c2goYSl9Zm9yKHZhciBvPWUubGVuZ3RoLTE7bz49MDtvLS0pdGhpcy5iYXJDdHguemVyb1Nlcmllc2VzLmluZGV4T2Yobyk+LTEmJm89PT10aGlzLnJhZGl1c09uU2VyaWVzTnVtYmVyJiYodGhpcy5iYXJDdHgucmFkaXVzT25TZXJpZXNOdW1iZXItPTEpO2Zvcih2YXIgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWkuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXNJbmRpY2VzLmluZGV4T2YodGhpcy5iYXJDdHgucmFkaXVzT25TZXJpZXNOdW1iZXIpPi0xJiYodGhpcy5iYXJDdHgucmFkaXVzT25TZXJpZXNOdW1iZXItPTEpfX0se2tleTpcImdldFhGb3JWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxhPWk/ZTpudWxsO3JldHVybiBudWxsIT10JiYoYT1lK3QvdGhpcy5iYXJDdHguaW52ZXJ0ZWRZUmF0aW8tMioodGhpcy5iYXJDdHguaXNSZXZlcnNlZD90L3RoaXMuYmFyQ3R4LmludmVydGVkWVJhdGlvOjApKSxhfX0se2tleTpcImdldFlGb3JWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxhPWk/ZTpudWxsO3JldHVybiBudWxsIT10JiYoYT1lLXQvdGhpcy5iYXJDdHgueVJhdGlvW3RoaXMuYmFyQ3R4LnlheGlzSW5kZXhdKzIqKHRoaXMuYmFyQ3R4LmlzUmV2ZXJzZWQ/dC90aGlzLmJhckN0eC55UmF0aW9bdGhpcy5iYXJDdHgueWF4aXNJbmRleF06MCkpLGF9fSx7a2V5OlwiZ2V0R29hbFZhbHVlc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEscyl7dmFyIHI9dGhpcyxuPXRoaXMudyxsPVtdO3JldHVybiBuLmdsb2JhbHMuc2VyaWVzR29hbHNbYV0mJm4uZ2xvYmFscy5zZXJpZXNHb2Fsc1thXVtzXSYmQXJyYXkuaXNBcnJheShuLmdsb2JhbHMuc2VyaWVzR29hbHNbYV1bc10pJiZuLmdsb2JhbHMuc2VyaWVzR29hbHNbYV1bc10uZm9yRWFjaCgoZnVuY3Rpb24oYSl7dmFyIHM7bC5wdXNoKChvKHM9e30sdCxcInhcIj09PXQ/ci5nZXRYRm9yVmFsdWUoYS52YWx1ZSxlLCExKTpyLmdldFlGb3JWYWx1ZShhLnZhbHVlLGksITEpKSxvKHMsXCJhdHRyc1wiLGEpLHMpKX0pKSxsfX0se2tleTpcImRyYXdHb2FsTGluZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuYmFyWFBvc2l0aW9uLGk9dC5iYXJZUG9zaXRpb24sYT10LmdvYWxYLHM9dC5nb2FsWSxyPXQuYmFyV2lkdGgsbz10LmJhckhlaWdodCxuPW5ldyBtKHRoaXMuYmFyQ3R4LmN0eCksbD1uLmdyb3VwKHtjbGFzc05hbWU6XCJhcGV4Y2hhcnRzLWJhci1nb2Fscy1ncm91cHNcIn0pLGg9bnVsbDtyZXR1cm4gdGhpcy5iYXJDdHguaXNIb3Jpem9udGFsP0FycmF5LmlzQXJyYXkoYSkmJmEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwIT09dC5hdHRycy5zdHJva2VIZWlnaHQ/dC5hdHRycy5zdHJva2VIZWlnaHQ6by8yLGE9aStlK28vMjtoPW4uZHJhd0xpbmUodC54LGEtMiplLHQueCxhLHQuYXR0cnMuc3Ryb2tlQ29sb3I/dC5hdHRycy5zdHJva2VDb2xvcjp2b2lkIDAsdC5hdHRycy5zdHJva2VEYXNoQXJyYXksdC5hdHRycy5zdHJva2VXaWR0aD90LmF0dHJzLnN0cm9rZVdpZHRoOjIsdC5hdHRycy5zdHJva2VMaW5lQ2FwKSxsLmFkZChoKX0pKTpBcnJheS5pc0FycmF5KHMpJiZzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXZvaWQgMCE9PXQuYXR0cnMuc3Ryb2tlV2lkdGg/dC5hdHRycy5zdHJva2VXaWR0aDpyLzIsYT1lK2krci8yO2g9bi5kcmF3TGluZShhLTIqaSx0LnksYSx0LnksdC5hdHRycy5zdHJva2VDb2xvcj90LmF0dHJzLnN0cm9rZUNvbG9yOnZvaWQgMCx0LmF0dHJzLnN0cm9rZURhc2hBcnJheSx0LmF0dHJzLnN0cm9rZUhlaWdodD90LmF0dHJzLnN0cm9rZUhlaWdodDoyLHQuYXR0cnMuc3Ryb2tlTGluZUNhcCksbC5hZGQoaCl9KSksbH19XSksdH0oKSx5dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53O3ZhciBzPXRoaXMudzt0aGlzLmJhck9wdGlvbnM9cy5jb25maWcucGxvdE9wdGlvbnMuYmFyLHRoaXMuaXNIb3Jpem9udGFsPXRoaXMuYmFyT3B0aW9ucy5ob3Jpem9udGFsLHRoaXMuc3Ryb2tlV2lkdGg9cy5jb25maWcuc3Ryb2tlLndpZHRoLHRoaXMuaXNOdWxsVmFsdWU9ITEsdGhpcy5pc1JhbmdlQmFyPXMuZ2xvYmFscy5zZXJpZXNSYW5nZS5sZW5ndGgmJnRoaXMuaXNIb3Jpem9udGFsLHRoaXMueHlSYXRpb3M9aSxudWxsIT09dGhpcy54eVJhdGlvcyYmKHRoaXMueFJhdGlvPWkueFJhdGlvLHRoaXMuaW5pdGlhbFhSYXRpbz1pLmluaXRpYWxYUmF0aW8sdGhpcy55UmF0aW89aS55UmF0aW8sdGhpcy5pbnZlcnRlZFhSYXRpbz1pLmludmVydGVkWFJhdGlvLHRoaXMuaW52ZXJ0ZWRZUmF0aW89aS5pbnZlcnRlZFlSYXRpbyx0aGlzLmJhc2VMaW5lWT1pLmJhc2VMaW5lWSx0aGlzLmJhc2VMaW5lSW52ZXJ0ZWRZPWkuYmFzZUxpbmVJbnZlcnRlZFkpLHRoaXMueWF4aXNJbmRleD0wLHRoaXMuc2VyaWVzTGVuPTA7dmFyIHI9bmV3IE4odGhpcy5jdHgpO3RoaXMubGFzdEFjdGl2ZUJhclNlcmllSW5kZXg9ci5nZXRBY3RpdmVDb25maWdTZXJpZXNJbmRleChcImRlc2NcIixbXCJiYXJcIixcImNvbHVtblwiXSk7dmFyIG89ci5nZXRCYXJTZXJpZXNJbmRpY2VzKCksbj1uZXcgeSh0aGlzLmN0eCk7dGhpcy5zdGFja2VkU2VyaWVzVG90YWxzPW4uZ2V0U3RhY2tlZFNlcmllc1RvdGFscyh0aGlzLncuY29uZmlnLnNlcmllcy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuLTE9PT1vLmluZGV4T2YoZSk/ZTotMX0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybi0xIT09dH0pKSksdGhpcy5iYXJIZWxwZXJzPW5ldyBtdCh0aGlzKX1yZXR1cm4gcih0LFt7a2V5OlwiZHJhd1wiLHZhbHVlOmZ1bmN0aW9uKHQsaSl7dmFyIGE9dGhpcy53LHM9bmV3IG0odGhpcy5jdHgpLHI9bmV3IHkodGhpcy5jdHgsYSk7dD1yLmdldExvZ1Nlcmllcyh0KSx0aGlzLnNlcmllcz10LHRoaXMueVJhdGlvPXIuZ2V0TG9nWVJhdGlvcyh0aGlzLnlSYXRpbyksdGhpcy5iYXJIZWxwZXJzLmluaXRWYXJpYWJsZXModCk7dmFyIG89cy5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWJhci1zZXJpZXMgYXBleGNoYXJ0cy1wbG90LXNlcmllc1wifSk7YS5jb25maWcuZGF0YUxhYmVscy5lbmFibGVkJiZ0aGlzLnRvdGFsSXRlbXM+dGhpcy5iYXJPcHRpb25zLmRhdGFMYWJlbHMubWF4SXRlbXMmJmNvbnNvbGUud2FybihcIldBUk5JTkc6IERhdGFMYWJlbHMgYXJlIGVuYWJsZWQgYnV0IHRoZXJlIGFyZSB0b28gbWFueSB0byBkaXNwbGF5LiBUaGlzIG1heSBjYXVzZSBwZXJmb3JtYW5jZSBpc3N1ZSB3aGVuIHJlbmRlcmluZy5cIik7Zm9yKHZhciBuPTAsbD0wO248dC5sZW5ndGg7bisrLGwrKyl7dmFyIGgsYyxkLGcsdT12b2lkIDAsZj12b2lkIDAscD1bXSxiPVtdLHY9YS5nbG9iYWxzLmNvbWJvQ2hhcnRzP2lbbl06bix3PXMuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1zZXJpZXNcIixyZWw6bisxLHNlcmllc05hbWU6eC5lc2NhcGVTdHJpbmcoYS5nbG9iYWxzLnNlcmllc05hbWVzW3ZdKSxcImRhdGE6cmVhbEluZGV4XCI6dn0pO3RoaXMuY3R4LnNlcmllcy5hZGRDb2xsYXBzZWRDbGFzc1RvU2VyaWVzKHcsdiksdFtuXS5sZW5ndGg+MCYmKHRoaXMudmlzaWJsZUk9dGhpcy52aXNpYmxlSSsxKTt2YXIgaz0wLEE9MDt0aGlzLnlSYXRpby5sZW5ndGg+MSYmKHRoaXMueWF4aXNJbmRleD12KSx0aGlzLmlzUmV2ZXJzZWQ9YS5jb25maWcueWF4aXNbdGhpcy55YXhpc0luZGV4XSYmYS5jb25maWcueWF4aXNbdGhpcy55YXhpc0luZGV4XS5yZXZlcnNlZDt2YXIgUz10aGlzLmJhckhlbHBlcnMuaW5pdGlhbFBvc2l0aW9ucygpO2Y9Uy55LGs9Uy5iYXJIZWlnaHQsYz1TLnlEaXZpc2lvbixnPVMuemVyb1csdT1TLngsQT1TLmJhcldpZHRoLGg9Uy54RGl2aXNpb24sZD1TLnplcm9ILHRoaXMuaG9yaXpvbnRhbHx8Yi5wdXNoKHUrQS8yKTtmb3IodmFyIEM9cy5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWRhdGFsYWJlbHNcIixcImRhdGE6cmVhbEluZGV4XCI6dn0pLEw9cy5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWJhci1nb2Fscy1tYXJrZXJzXCIsc3R5bGU6XCJwb2ludGVyLWV2ZW50czogbm9uZVwifSksUD0wO1A8YS5nbG9iYWxzLmRhdGFQb2ludHM7UCsrKXt2YXIgVD10aGlzLmJhckhlbHBlcnMuZ2V0U3Ryb2tlV2lkdGgobixQLHYpLE09bnVsbCxJPXtpbmRleGVzOntpOm4sajpQLHJlYWxJbmRleDp2LGJjOmx9LHg6dSx5OmYsc3Ryb2tlV2lkdGg6VCxlbFNlcmllczp3fTt0aGlzLmlzSG9yaXpvbnRhbD8oTT10aGlzLmRyYXdCYXJQYXRocyhlKGUoe30sSSkse30se2JhckhlaWdodDprLHplcm9XOmcseURpdmlzaW9uOmN9KSksQT10aGlzLnNlcmllc1tuXVtQXS90aGlzLmludmVydGVkWVJhdGlvKTooTT10aGlzLmRyYXdDb2x1bW5QYXRocyhlKGUoe30sSSkse30se3hEaXZpc2lvbjpoLGJhcldpZHRoOkEsemVyb0g6ZH0pKSxrPXRoaXMuc2VyaWVzW25dW1BdL3RoaXMueVJhdGlvW3RoaXMueWF4aXNJbmRleF0pO3ZhciBYPXRoaXMuYmFySGVscGVycy5kcmF3R29hbExpbmUoe2JhclhQb3NpdGlvbjpNLmJhclhQb3NpdGlvbixiYXJZUG9zaXRpb246TS5iYXJZUG9zaXRpb24sZ29hbFg6TS5nb2FsWCxnb2FsWTpNLmdvYWxZLGJhckhlaWdodDprLGJhcldpZHRoOkF9KTtYJiZMLmFkZChYKSxmPU0ueSx1PU0ueCxQPjAmJmIucHVzaCh1K0EvMikscC5wdXNoKGYpO3ZhciB6PXRoaXMuYmFySGVscGVycy5nZXRQYXRoRmlsbENvbG9yKHQsbixQLHYpO3RoaXMucmVuZGVyU2VyaWVzKHtyZWFsSW5kZXg6dixwYXRoRmlsbDp6LGo6UCxpOm4scGF0aEZyb206TS5wYXRoRnJvbSxwYXRoVG86TS5wYXRoVG8sc3Ryb2tlV2lkdGg6VCxlbFNlcmllczp3LHg6dSx5OmYsc2VyaWVzOnQsYmFySGVpZ2h0OmssYmFyV2lkdGg6QSxlbERhdGFMYWJlbHNXcmFwOkMsZWxHb2Fsc01hcmtlcnM6TCx2aXNpYmxlU2VyaWVzOnRoaXMudmlzaWJsZUksdHlwZTpcImJhclwifSl9YS5nbG9iYWxzLnNlcmllc1h2YWx1ZXNbdl09YixhLmdsb2JhbHMuc2VyaWVzWXZhbHVlc1t2XT1wLG8uYWRkKHcpfXJldHVybiBvfX0se2tleTpcInJlbmRlclNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQucmVhbEluZGV4LGk9dC5wYXRoRmlsbCxhPXQubGluZUZpbGwscz10Lmoscj10Lmksbz10LnBhdGhGcm9tLG49dC5wYXRoVG8sbD10LnN0cm9rZVdpZHRoLGg9dC5lbFNlcmllcyxjPXQueCxkPXQueSxnPXQueTEsdT10LnkyLGY9dC5zZXJpZXMscD10LmJhckhlaWdodCx4PXQuYmFyV2lkdGgsYj10LmJhcllQb3NpdGlvbix5PXQuZWxEYXRhTGFiZWxzV3JhcCx3PXQuZWxHb2Fsc01hcmtlcnMsaz10LnZpc2libGVTZXJpZXMsQT10LnR5cGUsUz10aGlzLncsQz1uZXcgbSh0aGlzLmN0eCk7YXx8KGE9dGhpcy5iYXJPcHRpb25zLmRpc3RyaWJ1dGVkP1MuZ2xvYmFscy5zdHJva2UuY29sb3JzW3NdOlMuZ2xvYmFscy5zdHJva2UuY29sb3JzW2VdKSxTLmNvbmZpZy5zZXJpZXNbcl0uZGF0YVtzXSYmUy5jb25maWcuc2VyaWVzW3JdLmRhdGFbc10uc3Ryb2tlQ29sb3ImJihhPVMuY29uZmlnLnNlcmllc1tyXS5kYXRhW3NdLnN0cm9rZUNvbG9yKSx0aGlzLmlzTnVsbFZhbHVlJiYoaT1cIm5vbmVcIik7dmFyIEw9cy9TLmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmFuaW1hdGVHcmFkdWFsbHkuZGVsYXkqKFMuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuc3BlZWQvUy5nbG9iYWxzLmRhdGFQb2ludHMpLzIuNCxQPUMucmVuZGVyUGF0aHMoe2k6cixqOnMscmVhbEluZGV4OmUscGF0aEZyb206byxwYXRoVG86bixzdHJva2U6YSxzdHJva2VXaWR0aDpsLHN0cm9rZUxpbmVDYXA6Uy5jb25maWcuc3Ryb2tlLmxpbmVDYXAsZmlsbDppLGFuaW1hdGlvbkRlbGF5OkwsaW5pdGlhbFNwZWVkOlMuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuc3BlZWQsZGF0YUNoYW5nZVNwZWVkOlMuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuZHluYW1pY0FuaW1hdGlvbi5zcGVlZCxjbGFzc05hbWU6XCJhcGV4Y2hhcnRzLVwiLmNvbmNhdChBLFwiLWFyZWFcIil9KTtQLmF0dHIoXCJjbGlwLXBhdGhcIixcInVybCgjZ3JpZFJlY3RNYXNrXCIuY29uY2F0KFMuZ2xvYmFscy5jdWlkLFwiKVwiKSk7dmFyIFQ9Uy5jb25maWcuZm9yZWNhc3REYXRhUG9pbnRzO1QuY291bnQ+MCYmcz49Uy5nbG9iYWxzLmRhdGFQb2ludHMtVC5jb3VudCYmKFAubm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIsVC5kYXNoQXJyYXkpLFAubm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIixULnN0cm9rZVdpZHRoKSxQLm5vZGUuc2V0QXR0cmlidXRlKFwiZmlsbC1vcGFjaXR5XCIsVC5maWxsT3BhY2l0eSkpLHZvaWQgMCE9PWcmJnZvaWQgMCE9PXUmJihQLmF0dHIoXCJkYXRhLXJhbmdlLXkxXCIsZyksUC5hdHRyKFwiZGF0YS1yYW5nZS15MlwiLHUpKSxuZXcgdih0aGlzLmN0eCkuc2V0U2VsZWN0aW9uRmlsdGVyKFAsZSxzKSxoLmFkZChQKTt2YXIgTT1uZXcgdnQodGhpcykuaGFuZGxlQmFyRGF0YUxhYmVscyh7eDpjLHk6ZCx5MTpnLHkyOnUsaTpyLGo6cyxzZXJpZXM6ZixyZWFsSW5kZXg6ZSxiYXJIZWlnaHQ6cCxiYXJXaWR0aDp4LGJhcllQb3NpdGlvbjpiLHJlbmRlcmVkUGF0aDpQLHZpc2libGVTZXJpZXM6a30pO3JldHVybiBudWxsIT09TS5kYXRhTGFiZWxzJiZ5LmFkZChNLmRhdGFMYWJlbHMpLE0udG90YWxEYXRhTGFiZWxzJiZ5LmFkZChNLnRvdGFsRGF0YUxhYmVscyksaC5hZGQoeSksdyYmaC5hZGQodyksaH19LHtrZXk6XCJkcmF3QmFyUGF0aHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4ZXMsaT10LmJhckhlaWdodCxhPXQuc3Ryb2tlV2lkdGgscz10Lnplcm9XLHI9dC54LG89dC55LG49dC55RGl2aXNpb24sbD10LmVsU2VyaWVzLGg9dGhpcy53LGM9ZS5pLGQ9ZS5qO2guZ2xvYmFscy5pc1hOdW1lcmljJiYobz0oaC5nbG9iYWxzLnNlcmllc1hbY11bZF0taC5nbG9iYWxzLm1pblgpL3RoaXMuaW52ZXJ0ZWRYUmF0aW8taSk7dmFyIGc9bytpKnRoaXMudmlzaWJsZUk7cj10aGlzLmJhckhlbHBlcnMuZ2V0WEZvclZhbHVlKHRoaXMuc2VyaWVzW2NdW2RdLHMpO3ZhciB1PXRoaXMuYmFySGVscGVycy5nZXRCYXJwYXRocyh7YmFyWVBvc2l0aW9uOmcsYmFySGVpZ2h0OmkseDE6cyx4MjpyLHN0cm9rZVdpZHRoOmEsc2VyaWVzOnRoaXMuc2VyaWVzLHJlYWxJbmRleDplLnJlYWxJbmRleCxpOmMsajpkLHc6aH0pO3JldHVybiBoLmdsb2JhbHMuaXNYTnVtZXJpY3x8KG8rPW4pLHRoaXMuYmFySGVscGVycy5iYXJCYWNrZ3JvdW5kKHtqOmQsaTpjLHkxOmctaSp0aGlzLnZpc2libGVJLHkyOmkqdGhpcy5zZXJpZXNMZW4sZWxTZXJpZXM6bH0pLHtwYXRoVG86dS5wYXRoVG8scGF0aEZyb206dS5wYXRoRnJvbSx4OnIseTpvLGdvYWxYOnRoaXMuYmFySGVscGVycy5nZXRHb2FsVmFsdWVzKFwieFwiLHMsbnVsbCxjLGQpLGJhcllQb3NpdGlvbjpnfX19LHtrZXk6XCJkcmF3Q29sdW1uUGF0aHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4ZXMsaT10LngsYT10Lnkscz10LnhEaXZpc2lvbixyPXQuYmFyV2lkdGgsbz10Lnplcm9ILG49dC5zdHJva2VXaWR0aCxsPXQuZWxTZXJpZXMsaD10aGlzLncsYz1lLnJlYWxJbmRleCxkPWUuaSxnPWUuaix1PWUuYmM7aWYoaC5nbG9iYWxzLmlzWE51bWVyaWMpe3ZhciBmPWM7aC5nbG9iYWxzLnNlcmllc1hbY10ubGVuZ3RofHwoZj1oLmdsb2JhbHMubWF4VmFsc0luQXJyYXlJbmRleCksaT0oaC5nbG9iYWxzLnNlcmllc1hbZl1bZ10taC5nbG9iYWxzLm1pblgpL3RoaXMueFJhdGlvLXIqdGhpcy5zZXJpZXNMZW4vMn12YXIgcD1pK3IqdGhpcy52aXNpYmxlSTthPXRoaXMuYmFySGVscGVycy5nZXRZRm9yVmFsdWUodGhpcy5zZXJpZXNbZF1bZ10sbyk7dmFyIHg9dGhpcy5iYXJIZWxwZXJzLmdldENvbHVtblBhdGhzKHtiYXJYUG9zaXRpb246cCxiYXJXaWR0aDpyLHkxOm8seTI6YSxzdHJva2VXaWR0aDpuLHNlcmllczp0aGlzLnNlcmllcyxyZWFsSW5kZXg6ZS5yZWFsSW5kZXgsaTpkLGo6Zyx3Omh9KTtyZXR1cm4gaC5nbG9iYWxzLmlzWE51bWVyaWN8fChpKz1zKSx0aGlzLmJhckhlbHBlcnMuYmFyQmFja2dyb3VuZCh7YmM6dSxqOmcsaTpkLHgxOnAtbi8yLXIqdGhpcy52aXNpYmxlSSx4MjpyKnRoaXMuc2VyaWVzTGVuK24vMixlbFNlcmllczpsfSkse3BhdGhUbzp4LnBhdGhUbyxwYXRoRnJvbTp4LnBhdGhGcm9tLHg6aSx5OmEsZ29hbFk6dGhpcy5iYXJIZWxwZXJzLmdldEdvYWxWYWx1ZXMoXCJ5XCIsbnVsbCxvLGQsZyksYmFyWFBvc2l0aW9uOnB9fX0se2tleTpcImdldFByZXZpb3VzUGF0aFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpLGE9dGhpcy53LHM9MDtzPGEuZ2xvYmFscy5wcmV2aW91c1BhdGhzLmxlbmd0aDtzKyspe3ZhciByPWEuZ2xvYmFscy5wcmV2aW91c1BhdGhzW3NdO3IucGF0aHMmJnIucGF0aHMubGVuZ3RoPjAmJnBhcnNlSW50KHIucmVhbEluZGV4LDEwKT09PXBhcnNlSW50KHQsMTApJiZ2b2lkIDAhPT1hLmdsb2JhbHMucHJldmlvdXNQYXRoc1tzXS5wYXRoc1tlXSYmKGk9YS5nbG9iYWxzLnByZXZpb3VzUGF0aHNbc10ucGF0aHNbZV0uZCl9cmV0dXJuIGl9fV0pLHR9KCksd3Q9ZnVuY3Rpb24odCl7bihzLHQpO3ZhciBpPWQocyk7ZnVuY3Rpb24gcygpe3JldHVybiBhKHRoaXMscyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHIocyxbe2tleTpcImRyYXdcIix2YWx1ZTpmdW5jdGlvbih0LGkpe3ZhciBhPXRoaXMscz10aGlzLnc7dGhpcy5ncmFwaGljcz1uZXcgbSh0aGlzLmN0eCksdGhpcy5iYXI9bmV3IHl0KHRoaXMuY3R4LHRoaXMueHlSYXRpb3MpO3ZhciByPW5ldyB5KHRoaXMuY3R4LHMpO3Q9ci5nZXRMb2dTZXJpZXModCksdGhpcy55UmF0aW89ci5nZXRMb2dZUmF0aW9zKHRoaXMueVJhdGlvKSx0aGlzLmJhckhlbHBlcnMuaW5pdFZhcmlhYmxlcyh0KSxcIjEwMCVcIj09PXMuY29uZmlnLmNoYXJ0LnN0YWNrVHlwZSYmKHQ9cy5nbG9iYWxzLnNlcmllc1BlcmNlbnQuc2xpY2UoKSksdGhpcy5zZXJpZXM9dCx0aGlzLnRvdGFsSXRlbXM9MCx0aGlzLnByZXZZPVtdLHRoaXMucHJldlg9W10sdGhpcy5wcmV2WUY9W10sdGhpcy5wcmV2WEY9W10sdGhpcy5wcmV2WVZhbD1bXSx0aGlzLnByZXZYVmFsPVtdLHRoaXMueEFycmo9W10sdGhpcy54QXJyakY9W10sdGhpcy54QXJyalZhbD1bXSx0aGlzLnlBcnJqPVtdLHRoaXMueUFycmpGPVtdLHRoaXMueUFycmpWYWw9W107Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdFtvXS5sZW5ndGg+MCYmKHRoaXMudG90YWxJdGVtcys9dFtvXS5sZW5ndGgpO2Zvcih2YXIgbj10aGlzLmdyYXBoaWNzLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtYmFyLXNlcmllcyBhcGV4Y2hhcnRzLXBsb3Qtc2VyaWVzXCJ9KSxsPTAsaD0wLGM9ZnVuY3Rpb24ocixvKXt2YXIgYz12b2lkIDAsZD12b2lkIDAsZz12b2lkIDAsdT12b2lkIDAsZj1bXSxwPVtdLGI9cy5nbG9iYWxzLmNvbWJvQ2hhcnRzP2lbcl06cjthLnlSYXRpby5sZW5ndGg+MSYmKGEueWF4aXNJbmRleD1iKSxhLmlzUmV2ZXJzZWQ9cy5jb25maWcueWF4aXNbYS55YXhpc0luZGV4XSYmcy5jb25maWcueWF4aXNbYS55YXhpc0luZGV4XS5yZXZlcnNlZDt2YXIgdj1hLmdyYXBoaWNzLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtc2VyaWVzXCIsc2VyaWVzTmFtZTp4LmVzY2FwZVN0cmluZyhzLmdsb2JhbHMuc2VyaWVzTmFtZXNbYl0pLHJlbDpyKzEsXCJkYXRhOnJlYWxJbmRleFwiOmJ9KTthLmN0eC5zZXJpZXMuYWRkQ29sbGFwc2VkQ2xhc3NUb1Nlcmllcyh2LGIpO3ZhciBtPWEuZ3JhcGhpY3MuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1kYXRhbGFiZWxzXCIsXCJkYXRhOnJlYWxJbmRleFwiOmJ9KSx5PWEuZ3JhcGhpY3MuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1iYXItZ29hbHMtbWFya2Vyc1wiLHN0eWxlOlwicG9pbnRlci1ldmVudHM6IG5vbmVcIn0pLHc9MCxrPTAsQT1hLmluaXRpYWxQb3NpdGlvbnMobCxoLGMsZCxnLHUpO2g9QS55LHc9QS5iYXJIZWlnaHQsZD1BLnlEaXZpc2lvbix1PUEuemVyb1csbD1BLngsaz1BLmJhcldpZHRoLGM9QS54RGl2aXNpb24sZz1BLnplcm9ILGEueUFycmo9W10sYS55QXJyakY9W10sYS55QXJyalZhbD1bXSxhLnhBcnJqPVtdLGEueEFycmpGPVtdLGEueEFycmpWYWw9W10sMT09PWEucHJldlkubGVuZ3RoJiZhLnByZXZZWzBdLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odCl9KSkmJihhLnByZXZZWzBdPWEucHJldllbMF0ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZ30pKSxhLnByZXZZRlswXT1hLnByZXZZRlswXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiAwfSkpKTtmb3IodmFyIFM9MDtTPHMuZ2xvYmFscy5kYXRhUG9pbnRzO1MrKyl7dmFyIEM9YS5iYXJIZWxwZXJzLmdldFN0cm9rZVdpZHRoKHIsUyxiKSxMPXtpbmRleGVzOntpOnIsajpTLHJlYWxJbmRleDpiLGJjOm99LHN0cm9rZVdpZHRoOkMseDpsLHk6aCxlbFNlcmllczp2fSxQPW51bGw7YS5pc0hvcml6b250YWw/KFA9YS5kcmF3U3RhY2tlZEJhclBhdGhzKGUoZSh7fSxMKSx7fSx7emVyb1c6dSxiYXJIZWlnaHQ6dyx5RGl2aXNpb246ZH0pKSxrPWEuc2VyaWVzW3JdW1NdL2EuaW52ZXJ0ZWRZUmF0aW8pOihQPWEuZHJhd1N0YWNrZWRDb2x1bW5QYXRocyhlKGUoe30sTCkse30se3hEaXZpc2lvbjpjLGJhcldpZHRoOmssemVyb0g6Z30pKSx3PWEuc2VyaWVzW3JdW1NdL2EueVJhdGlvW2EueWF4aXNJbmRleF0pO3ZhciBUPWEuYmFySGVscGVycy5kcmF3R29hbExpbmUoe2JhclhQb3NpdGlvbjpQLmJhclhQb3NpdGlvbixiYXJZUG9zaXRpb246UC5iYXJZUG9zaXRpb24sZ29hbFg6UC5nb2FsWCxnb2FsWTpQLmdvYWxZLGJhckhlaWdodDp3LGJhcldpZHRoOmt9KTtUJiZ5LmFkZChUKSxoPVAueSxsPVAueCxmLnB1c2gobCkscC5wdXNoKGgpO3ZhciBNPWEuYmFySGVscGVycy5nZXRQYXRoRmlsbENvbG9yKHQscixTLGIpO3Y9YS5yZW5kZXJTZXJpZXMoe3JlYWxJbmRleDpiLHBhdGhGaWxsOk0sajpTLGk6cixwYXRoRnJvbTpQLnBhdGhGcm9tLHBhdGhUbzpQLnBhdGhUbyxzdHJva2VXaWR0aDpDLGVsU2VyaWVzOnYseDpsLHk6aCxzZXJpZXM6dCxiYXJIZWlnaHQ6dyxiYXJXaWR0aDprLGVsRGF0YUxhYmVsc1dyYXA6bSxlbEdvYWxzTWFya2Vyczp5LHR5cGU6XCJiYXJcIix2aXNpYmxlU2VyaWVzOjB9KX1zLmdsb2JhbHMuc2VyaWVzWHZhbHVlc1tiXT1mLHMuZ2xvYmFscy5zZXJpZXNZdmFsdWVzW2JdPXAsYS5wcmV2WS5wdXNoKGEueUFycmopLGEucHJldllGLnB1c2goYS55QXJyakYpLGEucHJldllWYWwucHVzaChhLnlBcnJqVmFsKSxhLnByZXZYLnB1c2goYS54QXJyaiksYS5wcmV2WEYucHVzaChhLnhBcnJqRiksYS5wcmV2WFZhbC5wdXNoKGEueEFycmpWYWwpLG4uYWRkKHYpfSxkPTAsZz0wO2Q8dC5sZW5ndGg7ZCsrLGcrKyljKGQsZyk7cmV0dXJuIG59fSx7a2V5OlwiaW5pdGlhbFBvc2l0aW9uc1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEscyxyKXt2YXIgbyxuLGw9dGhpcy53O3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbD8obz0obz1hPWwuZ2xvYmFscy5ncmlkSGVpZ2h0L2wuZ2xvYmFscy5kYXRhUG9pbnRzKSpwYXJzZUludChsLmNvbmZpZy5wbG90T3B0aW9ucy5iYXIuYmFySGVpZ2h0LDEwKS8xMDAscj10aGlzLmJhc2VMaW5lSW52ZXJ0ZWRZK2wuZ2xvYmFscy5wYWRIb3Jpem9udGFsKyh0aGlzLmlzUmV2ZXJzZWQ/bC5nbG9iYWxzLmdyaWRXaWR0aDowKS0odGhpcy5pc1JldmVyc2VkPzIqdGhpcy5iYXNlTGluZUludmVydGVkWTowKSxlPShhLW8pLzIpOihuPWk9bC5nbG9iYWxzLmdyaWRXaWR0aC9sLmdsb2JhbHMuZGF0YVBvaW50cyxuPWwuZ2xvYmFscy5pc1hOdW1lcmljJiZsLmdsb2JhbHMuZGF0YVBvaW50cz4xPyhpPWwuZ2xvYmFscy5taW5YRGlmZi90aGlzLnhSYXRpbykqcGFyc2VJbnQodGhpcy5iYXJPcHRpb25zLmNvbHVtbldpZHRoLDEwKS8xMDA6bipwYXJzZUludChsLmNvbmZpZy5wbG90T3B0aW9ucy5iYXIuY29sdW1uV2lkdGgsMTApLzEwMCxzPWwuZ2xvYmFscy5ncmlkSGVpZ2h0LXRoaXMuYmFzZUxpbmVZW3RoaXMueWF4aXNJbmRleF0rKHRoaXMuaXNSZXZlcnNlZD9sLmdsb2JhbHMuZ3JpZEhlaWdodDowKS0odGhpcy5pc1JldmVyc2VkPzIqdGhpcy5iYXNlTGluZVlbdGhpcy55YXhpc0luZGV4XTowKSx0PWwuZ2xvYmFscy5wYWRIb3Jpem9udGFsKyhpLW4pLzIpLHt4OnQseTplLHlEaXZpc2lvbjphLHhEaXZpc2lvbjppLGJhckhlaWdodDpvLGJhcldpZHRoOm4semVyb0g6cyx6ZXJvVzpyfX19LHtrZXk6XCJkcmF3U3RhY2tlZEJhclBhdGhzXCIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9dC5pbmRleGVzLGE9dC5iYXJIZWlnaHQscz10LnN0cm9rZVdpZHRoLHI9dC56ZXJvVyxvPXQueCxuPXQueSxsPXQueURpdmlzaW9uLGg9dC5lbFNlcmllcyxjPXRoaXMudyxkPW4sZz1pLmksdT1pLmosZj0wLHA9MDtwPHRoaXMucHJldlhGLmxlbmd0aDtwKyspZis9dGhpcy5wcmV2WEZbcF1bdV07aWYoZz4wKXt2YXIgeD1yO3RoaXMucHJldlhWYWxbZy0xXVt1XTwwP3g9dGhpcy5zZXJpZXNbZ11bdV0+PTA/dGhpcy5wcmV2WFtnLTFdW3VdK2YtMioodGhpcy5pc1JldmVyc2VkP2Y6MCk6dGhpcy5wcmV2WFtnLTFdW3VdOnRoaXMucHJldlhWYWxbZy0xXVt1XT49MCYmKHg9dGhpcy5zZXJpZXNbZ11bdV0+PTA/dGhpcy5wcmV2WFtnLTFdW3VdOnRoaXMucHJldlhbZy0xXVt1XS1mKzIqKHRoaXMuaXNSZXZlcnNlZD9mOjApKSxlPXh9ZWxzZSBlPXI7bz1udWxsPT09dGhpcy5zZXJpZXNbZ11bdV0/ZTplK3RoaXMuc2VyaWVzW2ddW3VdL3RoaXMuaW52ZXJ0ZWRZUmF0aW8tMioodGhpcy5pc1JldmVyc2VkP3RoaXMuc2VyaWVzW2ddW3VdL3RoaXMuaW52ZXJ0ZWRZUmF0aW86MCk7dmFyIGI9dGhpcy5iYXJIZWxwZXJzLmdldEJhcnBhdGhzKHtiYXJZUG9zaXRpb246ZCxiYXJIZWlnaHQ6YSx4MTplLHgyOm8sc3Ryb2tlV2lkdGg6cyxzZXJpZXM6dGhpcy5zZXJpZXMscmVhbEluZGV4OmkucmVhbEluZGV4LGk6ZyxqOnUsdzpjfSk7cmV0dXJuIHRoaXMuYmFySGVscGVycy5iYXJCYWNrZ3JvdW5kKHtqOnUsaTpnLHkxOmQseTI6YSxlbFNlcmllczpofSksbis9bCx7cGF0aFRvOmIucGF0aFRvLHBhdGhGcm9tOmIucGF0aEZyb20sZ29hbFg6dGhpcy5iYXJIZWxwZXJzLmdldEdvYWxWYWx1ZXMoXCJ4XCIscixudWxsLGcsdSksYmFyWVBvc2l0aW9uOmQseDpvLHk6bn19fSx7a2V5OlwiZHJhd1N0YWNrZWRDb2x1bW5QYXRoc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhlcyxpPXQueCxhPXQueSxzPXQueERpdmlzaW9uLHI9dC5iYXJXaWR0aCxvPXQuemVyb0g7dC5zdHJva2VXaWR0aDt2YXIgbj10LmVsU2VyaWVzLGw9dGhpcy53LGg9ZS5pLGM9ZS5qLGQ9ZS5iYztpZihsLmdsb2JhbHMuaXNYTnVtZXJpYyl7dmFyIGc9bC5nbG9iYWxzLnNlcmllc1hbaF1bY107Z3x8KGc9MCksaT0oZy1sLmdsb2JhbHMubWluWCkvdGhpcy54UmF0aW8tci8yfWZvcih2YXIgdSxmPWkscD0wLHg9MDt4PHRoaXMucHJldllGLmxlbmd0aDt4KyspcCs9aXNOYU4odGhpcy5wcmV2WUZbeF1bY10pPzA6dGhpcy5wcmV2WUZbeF1bY107aWYoaD4wJiYhbC5nbG9iYWxzLmlzWE51bWVyaWN8fGg+MCYmbC5nbG9iYWxzLmlzWE51bWVyaWMmJmwuZ2xvYmFscy5zZXJpZXNYW2gtMV1bY109PT1sLmdsb2JhbHMuc2VyaWVzWFtoXVtjXSl7dmFyIGIsdixtPU1hdGgubWluKHRoaXMueVJhdGlvLmxlbmd0aCsxLGgrMSk7aWYodm9pZCAwIT09dGhpcy5wcmV2WVtoLTFdKWZvcih2YXIgeT0xO3k8bTt5KyspaWYoIWlzTmFOKHRoaXMucHJldllbaC15XVtjXSkpe3Y9dGhpcy5wcmV2WVtoLXldW2NdO2JyZWFrfWZvcih2YXIgdz0xO3c8bTt3Kyspe2lmKHRoaXMucHJldllWYWxbaC13XVtjXTwwKXtiPXRoaXMuc2VyaWVzW2hdW2NdPj0wP3YtcCsyKih0aGlzLmlzUmV2ZXJzZWQ/cDowKTp2O2JyZWFrfWlmKHRoaXMucHJldllWYWxbaC13XVtjXT49MCl7Yj10aGlzLnNlcmllc1toXVtjXT49MD92OnYrcC0yKih0aGlzLmlzUmV2ZXJzZWQ/cDowKTticmVha319dm9pZCAwPT09YiYmKGI9bC5nbG9iYWxzLmdyaWRIZWlnaHQpLHU9dGhpcy5wcmV2WUZbMF0uZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiAwPT09dH0pKSYmdGhpcy5wcmV2WUYuc2xpY2UoMSxoKS5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0KX0pKX0pKT9vOmJ9ZWxzZSB1PW87YT11LXRoaXMuc2VyaWVzW2hdW2NdL3RoaXMueVJhdGlvW3RoaXMueWF4aXNJbmRleF0rMioodGhpcy5pc1JldmVyc2VkP3RoaXMuc2VyaWVzW2hdW2NdL3RoaXMueVJhdGlvW3RoaXMueWF4aXNJbmRleF06MCk7dmFyIGs9dGhpcy5iYXJIZWxwZXJzLmdldENvbHVtblBhdGhzKHtiYXJYUG9zaXRpb246ZixiYXJXaWR0aDpyLHkxOnUseTI6YSx5UmF0aW86dGhpcy55UmF0aW9bdGhpcy55YXhpc0luZGV4XSxzdHJva2VXaWR0aDp0aGlzLnN0cm9rZVdpZHRoLHNlcmllczp0aGlzLnNlcmllcyxyZWFsSW5kZXg6ZS5yZWFsSW5kZXgsaTpoLGo6Yyx3Omx9KTtyZXR1cm4gdGhpcy5iYXJIZWxwZXJzLmJhckJhY2tncm91bmQoe2JjOmQsajpjLGk6aCx4MTpmLHgyOnIsZWxTZXJpZXM6bn0pLGkrPXMse3BhdGhUbzprLnBhdGhUbyxwYXRoRnJvbTprLnBhdGhGcm9tLGdvYWxZOnRoaXMuYmFySGVscGVycy5nZXRHb2FsVmFsdWVzKFwieVwiLG51bGwsbyxoLGMpLGJhclhQb3NpdGlvbjpmLHg6bC5nbG9iYWxzLmlzWE51bWVyaWM/aS1zOmkseTphfX19XSksc30oeXQpLGt0PWZ1bmN0aW9uKHQpe24ocyx0KTt2YXIgaT1kKHMpO2Z1bmN0aW9uIHMoKXtyZXR1cm4gYSh0aGlzLHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiByKHMsW3trZXk6XCJkcmF3XCIsdmFsdWU6ZnVuY3Rpb24odCxpKXt2YXIgYT10aGlzLHM9dGhpcy53LHI9bmV3IG0odGhpcy5jdHgpLG89bmV3IEYodGhpcy5jdHgpO3RoaXMuY2FuZGxlc3RpY2tPcHRpb25zPXRoaXMudy5jb25maWcucGxvdE9wdGlvbnMuY2FuZGxlc3RpY2ssdGhpcy5ib3hPcHRpb25zPXRoaXMudy5jb25maWcucGxvdE9wdGlvbnMuYm94UGxvdCx0aGlzLmlzSG9yaXpvbnRhbD1zLmNvbmZpZy5wbG90T3B0aW9ucy5iYXIuaG9yaXpvbnRhbDt2YXIgbj1uZXcgeSh0aGlzLmN0eCxzKTt0PW4uZ2V0TG9nU2VyaWVzKHQpLHRoaXMuc2VyaWVzPXQsdGhpcy55UmF0aW89bi5nZXRMb2dZUmF0aW9zKHRoaXMueVJhdGlvKSx0aGlzLmJhckhlbHBlcnMuaW5pdFZhcmlhYmxlcyh0KTtmb3IodmFyIGw9ci5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLVwiLmNvbmNhdChzLmNvbmZpZy5jaGFydC50eXBlLFwiLXNlcmllcyBhcGV4Y2hhcnRzLXBsb3Qtc2VyaWVzXCIpfSksaD1mdW5jdGlvbihuKXthLmlzQm94UGxvdD1cImJveFBsb3RcIj09PXMuY29uZmlnLmNoYXJ0LnR5cGV8fFwiYm94UGxvdFwiPT09cy5jb25maWcuc2VyaWVzW25dLnR5cGU7dmFyIGgsYyxkLGcsdT12b2lkIDAsZj12b2lkIDAscD1bXSxiPVtdLHY9cy5nbG9iYWxzLmNvbWJvQ2hhcnRzP2lbbl06bixtPXIuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1zZXJpZXNcIixzZXJpZXNOYW1lOnguZXNjYXBlU3RyaW5nKHMuZ2xvYmFscy5zZXJpZXNOYW1lc1t2XSkscmVsOm4rMSxcImRhdGE6cmVhbEluZGV4XCI6dn0pO2EuY3R4LnNlcmllcy5hZGRDb2xsYXBzZWRDbGFzc1RvU2VyaWVzKG0sdiksdFtuXS5sZW5ndGg+MCYmKGEudmlzaWJsZUk9YS52aXNpYmxlSSsxKTt2YXIgeSx3O2EueVJhdGlvLmxlbmd0aD4xJiYoYS55YXhpc0luZGV4PXYpO3ZhciBrPWEuYmFySGVscGVycy5pbml0aWFsUG9zaXRpb25zKCk7Zj1rLnkseT1rLmJhckhlaWdodCxjPWsueURpdmlzaW9uLGc9ay56ZXJvVyx1PWsueCx3PWsuYmFyV2lkdGgsaD1rLnhEaXZpc2lvbixkPWsuemVyb0gsYi5wdXNoKHUrdy8yKTtmb3IodmFyIEE9ci5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWRhdGFsYWJlbHNcIixcImRhdGE6cmVhbEluZGV4XCI6dn0pLFM9ZnVuY3Rpb24oaSl7dmFyIHI9YS5iYXJIZWxwZXJzLmdldFN0cm9rZVdpZHRoKG4saSx2KSxsPW51bGwseD17aW5kZXhlczp7aTpuLGo6aSxyZWFsSW5kZXg6dn0seDp1LHk6ZixzdHJva2VXaWR0aDpyLGVsU2VyaWVzOm19O2w9YS5pc0hvcml6b250YWw/YS5kcmF3SG9yaXpvbnRhbEJveFBhdGhzKGUoZSh7fSx4KSx7fSx7eURpdmlzaW9uOmMsYmFySGVpZ2h0OnksemVyb1c6Z30pKTphLmRyYXdWZXJ0aWNhbEJveFBhdGhzKGUoZSh7fSx4KSx7fSx7eERpdmlzaW9uOmgsYmFyV2lkdGg6dyx6ZXJvSDpkfSkpLGY9bC55LHU9bC54LGk+MCYmYi5wdXNoKHUrdy8yKSxwLnB1c2goZiksbC5wYXRoVG8uZm9yRWFjaCgoZnVuY3Rpb24oZSxoKXt2YXIgYz0hYS5pc0JveFBsb3QmJmEuY2FuZGxlc3RpY2tPcHRpb25zLndpY2sudXNlRmlsbENvbG9yP2wuY29sb3JbaF06cy5nbG9iYWxzLnN0cm9rZS5jb2xvcnNbbl0sZD1vLmZpbGxQYXRoKHtzZXJpZXNOdW1iZXI6dixkYXRhUG9pbnRJbmRleDppLGNvbG9yOmwuY29sb3JbaF0sdmFsdWU6dFtuXVtpXX0pO2EucmVuZGVyU2VyaWVzKHtyZWFsSW5kZXg6dixwYXRoRmlsbDpkLGxpbmVGaWxsOmMsajppLGk6bixwYXRoRnJvbTpsLnBhdGhGcm9tLHBhdGhUbzplLHN0cm9rZVdpZHRoOnIsZWxTZXJpZXM6bSx4OnUseTpmLHNlcmllczp0LGJhckhlaWdodDp5LGJhcldpZHRoOncsZWxEYXRhTGFiZWxzV3JhcDpBLHZpc2libGVTZXJpZXM6YS52aXNpYmxlSSx0eXBlOnMuY29uZmlnLmNoYXJ0LnR5cGV9KX0pKX0sQz0wO0M8cy5nbG9iYWxzLmRhdGFQb2ludHM7QysrKVMoQyk7cy5nbG9iYWxzLnNlcmllc1h2YWx1ZXNbdl09YixzLmdsb2JhbHMuc2VyaWVzWXZhbHVlc1t2XT1wLGwuYWRkKG0pfSxjPTA7Yzx0Lmxlbmd0aDtjKyspaChjKTtyZXR1cm4gbH19LHtrZXk6XCJkcmF3VmVydGljYWxCb3hQYXRoc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhlcyxpPXQueDt0Lnk7dmFyIGE9dC54RGl2aXNpb24scz10LmJhcldpZHRoLHI9dC56ZXJvSCxvPXQuc3Ryb2tlV2lkdGgsbj10aGlzLncsbD1uZXcgbSh0aGlzLmN0eCksaD1lLmksYz1lLmosZD0hMCxnPW4uY29uZmlnLnBsb3RPcHRpb25zLmNhbmRsZXN0aWNrLmNvbG9ycy51cHdhcmQsdT1uLmNvbmZpZy5wbG90T3B0aW9ucy5jYW5kbGVzdGljay5jb2xvcnMuZG93bndhcmQsZj1cIlwiO3RoaXMuaXNCb3hQbG90JiYoZj1bdGhpcy5ib3hPcHRpb25zLmNvbG9ycy5sb3dlcix0aGlzLmJveE9wdGlvbnMuY29sb3JzLnVwcGVyXSk7dmFyIHA9dGhpcy55UmF0aW9bdGhpcy55YXhpc0luZGV4XSx4PWUucmVhbEluZGV4LGI9dGhpcy5nZXRPSExDVmFsdWUoeCxjKSx2PXIseT1yO2Iubz5iLmMmJihkPSExKTt2YXIgdz1NYXRoLm1pbihiLm8sYi5jKSxrPU1hdGgubWF4KGIubyxiLmMpLEE9Yi5tO24uZ2xvYmFscy5pc1hOdW1lcmljJiYoaT0obi5nbG9iYWxzLnNlcmllc1hbeF1bY10tbi5nbG9iYWxzLm1pblgpL3RoaXMueFJhdGlvLXMvMik7dmFyIFM9aStzKnRoaXMudmlzaWJsZUk7dm9pZCAwPT09dGhpcy5zZXJpZXNbaF1bY118fG51bGw9PT10aGlzLnNlcmllc1toXVtjXT8odz1yLGs9cik6KHc9ci13L3Asaz1yLWsvcCx2PXItYi5oL3AseT1yLWIubC9wLEE9ci1iLm0vcCk7dmFyIEM9bC5tb3ZlKFMsciksTD1sLm1vdmUoUytzLzIsdyk7cmV0dXJuIG4uZ2xvYmFscy5wcmV2aW91c1BhdGhzLmxlbmd0aD4wJiYoTD10aGlzLmdldFByZXZpb3VzUGF0aCh4LGMsITApKSxDPXRoaXMuaXNCb3hQbG90P1tsLm1vdmUoUyx3KStsLmxpbmUoUytzLzIsdykrbC5saW5lKFMrcy8yLHYpK2wubGluZShTK3MvNCx2KStsLmxpbmUoUytzLXMvNCx2KStsLmxpbmUoUytzLzIsdikrbC5saW5lKFMrcy8yLHcpK2wubGluZShTK3MsdykrbC5saW5lKFMrcyxBKStsLmxpbmUoUyxBKStsLmxpbmUoUyx3K28vMiksbC5tb3ZlKFMsQSkrbC5saW5lKFMrcyxBKStsLmxpbmUoUytzLGspK2wubGluZShTK3MvMixrKStsLmxpbmUoUytzLzIseSkrbC5saW5lKFMrcy1zLzQseSkrbC5saW5lKFMrcy80LHkpK2wubGluZShTK3MvMix5KStsLmxpbmUoUytzLzIsaykrbC5saW5lKFMsaykrbC5saW5lKFMsQSkrXCJ6XCJdOltsLm1vdmUoUyxrKStsLmxpbmUoUytzLzIsaykrbC5saW5lKFMrcy8yLHYpK2wubGluZShTK3MvMixrKStsLmxpbmUoUytzLGspK2wubGluZShTK3MsdykrbC5saW5lKFMrcy8yLHcpK2wubGluZShTK3MvMix5KStsLmxpbmUoUytzLzIsdykrbC5saW5lKFMsdykrbC5saW5lKFMsay1vLzIpXSxMKz1sLm1vdmUoUyx3KSxuLmdsb2JhbHMuaXNYTnVtZXJpY3x8KGkrPWEpLHtwYXRoVG86QyxwYXRoRnJvbTpMLHg6aSx5OmssYmFyWFBvc2l0aW9uOlMsY29sb3I6dGhpcy5pc0JveFBsb3Q/ZjpkP1tnXTpbdV19fX0se2tleTpcImRyYXdIb3Jpem9udGFsQm94UGF0aHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4ZXM7dC54O3ZhciBpPXQueSxhPXQueURpdmlzaW9uLHM9dC5iYXJIZWlnaHQscj10Lnplcm9XLG89dC5zdHJva2VXaWR0aCxuPXRoaXMudyxsPW5ldyBtKHRoaXMuY3R4KSxoPWUuaSxjPWUuaixkPXRoaXMuYm94T3B0aW9ucy5jb2xvcnMubG93ZXI7dGhpcy5pc0JveFBsb3QmJihkPVt0aGlzLmJveE9wdGlvbnMuY29sb3JzLmxvd2VyLHRoaXMuYm94T3B0aW9ucy5jb2xvcnMudXBwZXJdKTt2YXIgZz10aGlzLmludmVydGVkWVJhdGlvLHU9ZS5yZWFsSW5kZXgsZj10aGlzLmdldE9ITENWYWx1ZSh1LGMpLHA9cix4PXIsYj1NYXRoLm1pbihmLm8sZi5jKSx2PU1hdGgubWF4KGYubyxmLmMpLHk9Zi5tO24uZ2xvYmFscy5pc1hOdW1lcmljJiYoaT0obi5nbG9iYWxzLnNlcmllc1hbdV1bY10tbi5nbG9iYWxzLm1pblgpL3RoaXMuaW52ZXJ0ZWRYUmF0aW8tcy8yKTt2YXIgdz1pK3MqdGhpcy52aXNpYmxlSTt2b2lkIDA9PT10aGlzLnNlcmllc1toXVtjXXx8bnVsbD09PXRoaXMuc2VyaWVzW2hdW2NdPyhiPXIsdj1yKTooYj1yK2IvZyx2PXIrdi9nLHA9citmLmgvZyx4PXIrZi5sL2cseT1yK2YubS9nKTt2YXIgaz1sLm1vdmUocix3KSxBPWwubW92ZShiLHcrcy8yKTtyZXR1cm4gbi5nbG9iYWxzLnByZXZpb3VzUGF0aHMubGVuZ3RoPjAmJihBPXRoaXMuZ2V0UHJldmlvdXNQYXRoKHUsYywhMCkpLGs9W2wubW92ZShiLHcpK2wubGluZShiLHcrcy8yKStsLmxpbmUocCx3K3MvMikrbC5saW5lKHAsdytzLzItcy80KStsLmxpbmUocCx3K3MvMitzLzQpK2wubGluZShwLHcrcy8yKStsLmxpbmUoYix3K3MvMikrbC5saW5lKGIsdytzKStsLmxpbmUoeSx3K3MpK2wubGluZSh5LHcpK2wubGluZShiK28vMix3KSxsLm1vdmUoeSx3KStsLmxpbmUoeSx3K3MpK2wubGluZSh2LHcrcykrbC5saW5lKHYsdytzLzIpK2wubGluZSh4LHcrcy8yKStsLmxpbmUoeCx3K3Mtcy80KStsLmxpbmUoeCx3K3MvNCkrbC5saW5lKHgsdytzLzIpK2wubGluZSh2LHcrcy8yKStsLmxpbmUodix3KStsLmxpbmUoeSx3KStcInpcIl0sQSs9bC5tb3ZlKGIsdyksbi5nbG9iYWxzLmlzWE51bWVyaWN8fChpKz1hKSx7cGF0aFRvOmsscGF0aEZyb206QSx4OnYseTppLGJhcllQb3NpdGlvbjp3LGNvbG9yOmR9fX0se2tleTpcImdldE9ITENWYWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53O3JldHVybntvOnRoaXMuaXNCb3hQbG90P2kuZ2xvYmFscy5zZXJpZXNDYW5kbGVIW3RdW2VdOmkuZ2xvYmFscy5zZXJpZXNDYW5kbGVPW3RdW2VdLGg6dGhpcy5pc0JveFBsb3Q/aS5nbG9iYWxzLnNlcmllc0NhbmRsZU9bdF1bZV06aS5nbG9iYWxzLnNlcmllc0NhbmRsZUhbdF1bZV0sbTppLmdsb2JhbHMuc2VyaWVzQ2FuZGxlTVt0XVtlXSxsOnRoaXMuaXNCb3hQbG90P2kuZ2xvYmFscy5zZXJpZXNDYW5kbGVDW3RdW2VdOmkuZ2xvYmFscy5zZXJpZXNDYW5kbGVMW3RdW2VdLGM6dGhpcy5pc0JveFBsb3Q/aS5nbG9iYWxzLnNlcmllc0NhbmRsZUxbdF1bZV06aS5nbG9iYWxzLnNlcmllc0NhbmRsZUNbdF1bZV19fX1dKSxzfSh5dCksQXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLnd9cmV0dXJuIHIodCxbe2tleTpcImNoZWNrQ29sb3JSYW5nZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9ITEsaT10LmNvbmZpZy5wbG90T3B0aW9uc1t0LmNvbmZpZy5jaGFydC50eXBlXTtyZXR1cm4gaS5jb2xvclNjYWxlLnJhbmdlcy5sZW5ndGg+MCYmaS5jb2xvclNjYWxlLnJhbmdlcy5tYXAoKGZ1bmN0aW9uKHQsaSl7dC5mcm9tPD0wJiYoZT0hMCl9KSksZX19LHtrZXk6XCJnZXRTaGFkZUNvbG9yXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM9dGhpcy53LHI9MSxvPXMuY29uZmlnLnBsb3RPcHRpb25zW3RdLnNoYWRlSW50ZW5zaXR5LG49dGhpcy5kZXRlcm1pbmVDb2xvcih0LGUsaSk7cy5nbG9iYWxzLmhhc05lZ3N8fGE/cj1zLmNvbmZpZy5wbG90T3B0aW9uc1t0XS5yZXZlcnNlTmVnYXRpdmVTaGFkZT9uLnBlcmNlbnQ8MD9uLnBlcmNlbnQvMTAwKigxLjI1Km8pOigxLW4ucGVyY2VudC8xMDApKigxLjI1Km8pOm4ucGVyY2VudDw9MD8xLSgxK24ucGVyY2VudC8xMDApKm86KDEtbi5wZXJjZW50LzEwMCkqbzoocj0xLW4ucGVyY2VudC8xMDAsXCJ0cmVlbWFwXCI9PT10JiYocj0oMS1uLnBlcmNlbnQvMTAwKSooMS4yNSpvKSkpO3ZhciBsPW4uY29sb3IsaD1uZXcgeDtyZXR1cm4gcy5jb25maWcucGxvdE9wdGlvbnNbdF0uZW5hYmxlU2hhZGVzJiYobD1cImRhcmtcIj09PXRoaXMudy5jb25maWcudGhlbWUubW9kZT94LmhleFRvUmdiYShoLnNoYWRlQ29sb3IoLTEqcixuLmNvbG9yKSxzLmNvbmZpZy5maWxsLm9wYWNpdHkpOnguaGV4VG9SZ2JhKGguc2hhZGVDb2xvcihyLG4uY29sb3IpLHMuY29uZmlnLmZpbGwub3BhY2l0eSkpLHtjb2xvcjpsLGNvbG9yUHJvcHM6bn19fSx7a2V5OlwiZGV0ZXJtaW5lQ29sb3JcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dmFyIGE9dGhpcy53LHM9YS5nbG9iYWxzLnNlcmllc1tlXVtpXSxyPWEuY29uZmlnLnBsb3RPcHRpb25zW3RdLG89ci5jb2xvclNjYWxlLmludmVyc2U/aTplO3IuZGlzdHJpYnV0ZWQmJlwidHJlZW1hcFwiPT09YS5jb25maWcuY2hhcnQudHlwZSYmKG89aSk7dmFyIG49YS5nbG9iYWxzLmNvbG9yc1tvXSxsPW51bGwsaD1NYXRoLm1pbi5hcHBseShNYXRoLHUoYS5nbG9iYWxzLnNlcmllc1tlXSkpLGM9TWF0aC5tYXguYXBwbHkoTWF0aCx1KGEuZ2xvYmFscy5zZXJpZXNbZV0pKTtyLmRpc3RyaWJ1dGVkfHxcImhlYXRtYXBcIiE9PXR8fChoPWEuZ2xvYmFscy5taW5ZLGM9YS5nbG9iYWxzLm1heFkpLHZvaWQgMCE9PXIuY29sb3JTY2FsZS5taW4mJihoPXIuY29sb3JTY2FsZS5taW48YS5nbG9iYWxzLm1pblk/ci5jb2xvclNjYWxlLm1pbjphLmdsb2JhbHMubWluWSxjPXIuY29sb3JTY2FsZS5tYXg+YS5nbG9iYWxzLm1heFk/ci5jb2xvclNjYWxlLm1heDphLmdsb2JhbHMubWF4WSk7dmFyIGQ9TWF0aC5hYnMoYykrTWF0aC5hYnMoaCksZz0xMDAqcy8oMD09PWQ/ZC0xZS02OmQpO3IuY29sb3JTY2FsZS5yYW5nZXMubGVuZ3RoPjAmJnIuY29sb3JTY2FsZS5yYW5nZXMubWFwKChmdW5jdGlvbih0LGUpe2lmKHM+PXQuZnJvbSYmczw9dC50byl7bj10LmNvbG9yLGw9dC5mb3JlQ29sb3I/dC5mb3JlQ29sb3I6bnVsbCxoPXQuZnJvbSxjPXQudG87dmFyIGk9TWF0aC5hYnMoYykrTWF0aC5hYnMoaCk7Zz0xMDAqcy8oMD09PWk/aS0xZS02OmkpfX0pKTtyZXR1cm57Y29sb3I6bixmb3JlQ29sb3I6bCxwZXJjZW50Omd9fX0se2tleTpcImNhbGN1bGF0ZURhdGFMYWJlbHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnRleHQsaT10LngsYT10Lnkscz10Lmkscj10Lmosbz10LmNvbG9yUHJvcHMsbj10LmZvbnRTaXplLGw9dGhpcy53LmNvbmZpZy5kYXRhTGFiZWxzLGg9bmV3IG0odGhpcy5jdHgpLGM9bmV3IEgodGhpcy5jdHgpLGQ9bnVsbDtpZihsLmVuYWJsZWQpe2Q9aC5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWRhdGEtbGFiZWxzXCJ9KTt2YXIgZz1sLm9mZnNldFgsdT1sLm9mZnNldFksZj1pK2cscD1hK3BhcnNlRmxvYXQobC5zdHlsZS5mb250U2l6ZSkvMyt1O2MucGxvdERhdGFMYWJlbHNUZXh0KHt4OmYseTpwLHRleHQ6ZSxpOnMsajpyLGNvbG9yOm8uZm9yZUNvbG9yLHBhcmVudDpkLGZvbnRTaXplOm4sZGF0YUxhYmVsc0NvbmZpZzpsfSl9cmV0dXJuIGR9fSx7a2V5OlwiYWRkTGlzdGVuZXJzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG0odGhpcy5jdHgpO3Qubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLGUucGF0aE1vdXNlRW50ZXIuYmluZCh0aGlzLHQpKSx0Lm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixlLnBhdGhNb3VzZUxlYXZlLmJpbmQodGhpcyx0KSksdC5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixlLnBhdGhNb3VzZURvd24uYmluZCh0aGlzLHQpKX19XSksdH0oKSxTdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53LHRoaXMueFJhdGlvPWkueFJhdGlvLHRoaXMueVJhdGlvPWkueVJhdGlvLHRoaXMuZHluYW1pY0FuaW09dGhpcy53LmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmR5bmFtaWNBbmltYXRpb24sdGhpcy5oZWxwZXJzPW5ldyBBdChlKSx0aGlzLnJlY3RSYWRpdXM9dGhpcy53LmNvbmZpZy5wbG90T3B0aW9ucy5oZWF0bWFwLnJhZGl1cyx0aGlzLnN0cm9rZVdpZHRoPXRoaXMudy5jb25maWcuc3Ryb2tlLnNob3c/dGhpcy53LmNvbmZpZy5zdHJva2Uud2lkdGg6MH1yZXR1cm4gcih0LFt7a2V5OlwiZHJhd1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudyxpPW5ldyBtKHRoaXMuY3R4KSxhPWkuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1oZWF0bWFwXCJ9KTthLmF0dHIoXCJjbGlwLXBhdGhcIixcInVybCgjZ3JpZFJlY3RNYXNrXCIuY29uY2F0KGUuZ2xvYmFscy5jdWlkLFwiKVwiKSk7dmFyIHM9ZS5nbG9iYWxzLmdyaWRXaWR0aC9lLmdsb2JhbHMuZGF0YVBvaW50cyxyPWUuZ2xvYmFscy5ncmlkSGVpZ2h0L2UuZ2xvYmFscy5zZXJpZXMubGVuZ3RoLG89MCxuPSExO3RoaXMubmVnUmFuZ2U9dGhpcy5oZWxwZXJzLmNoZWNrQ29sb3JSYW5nZSgpO3ZhciBsPXQuc2xpY2UoKTtlLmNvbmZpZy55YXhpc1swXS5yZXZlcnNlZCYmKG49ITAsbC5yZXZlcnNlKCkpO2Zvcih2YXIgaD1uPzA6bC5sZW5ndGgtMTtuP2g8bC5sZW5ndGg6aD49MDtuP2grKzpoLS0pe3ZhciBjPWkuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1zZXJpZXMgYXBleGNoYXJ0cy1oZWF0bWFwLXNlcmllc1wiLHNlcmllc05hbWU6eC5lc2NhcGVTdHJpbmcoZS5nbG9iYWxzLnNlcmllc05hbWVzW2hdKSxyZWw6aCsxLFwiZGF0YTpyZWFsSW5kZXhcIjpofSk7aWYodGhpcy5jdHguc2VyaWVzLmFkZENvbGxhcHNlZENsYXNzVG9TZXJpZXMoYyxoKSxlLmNvbmZpZy5jaGFydC5kcm9wU2hhZG93LmVuYWJsZWQpe3ZhciBkPWUuY29uZmlnLmNoYXJ0LmRyb3BTaGFkb3c7bmV3IHYodGhpcy5jdHgpLmRyb3BTaGFkb3coYyxkLGgpfWZvcih2YXIgZz0wLHU9ZS5jb25maWcucGxvdE9wdGlvbnMuaGVhdG1hcC5zaGFkZUludGVuc2l0eSxmPTA7ZjxsW2hdLmxlbmd0aDtmKyspe3ZhciBwPXRoaXMuaGVscGVycy5nZXRTaGFkZUNvbG9yKGUuY29uZmlnLmNoYXJ0LnR5cGUsaCxmLHRoaXMubmVnUmFuZ2UpLGI9cC5jb2xvcix5PXAuY29sb3JQcm9wcztpZihcImltYWdlXCI9PT1lLmNvbmZpZy5maWxsLnR5cGUpYj1uZXcgRih0aGlzLmN0eCkuZmlsbFBhdGgoe3Nlcmllc051bWJlcjpoLGRhdGFQb2ludEluZGV4OmYsb3BhY2l0eTplLmdsb2JhbHMuaGFzTmVncz95LnBlcmNlbnQ8MD8xLSgxK3kucGVyY2VudC8xMDApOnUreS5wZXJjZW50LzEwMDp5LnBlcmNlbnQvMTAwLHBhdHRlcm5JRDp4LnJhbmRvbUlkKCksd2lkdGg6ZS5jb25maWcuZmlsbC5pbWFnZS53aWR0aD9lLmNvbmZpZy5maWxsLmltYWdlLndpZHRoOnMsaGVpZ2h0OmUuY29uZmlnLmZpbGwuaW1hZ2UuaGVpZ2h0P2UuY29uZmlnLmZpbGwuaW1hZ2UuaGVpZ2h0OnJ9KTt2YXIgdz10aGlzLnJlY3RSYWRpdXMsaz1pLmRyYXdSZWN0KGcsbyxzLHIsdyk7aWYoay5hdHRyKHtjeDpnLGN5Om99KSxrLm5vZGUuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtaGVhdG1hcC1yZWN0XCIpLGMuYWRkKGspLGsuYXR0cih7ZmlsbDpiLGk6aCxpbmRleDpoLGo6Zix2YWw6bFtoXVtmXSxcInN0cm9rZS13aWR0aFwiOnRoaXMuc3Ryb2tlV2lkdGgsc3Ryb2tlOmUuY29uZmlnLnBsb3RPcHRpb25zLmhlYXRtYXAudXNlRmlsbENvbG9yQXNTdHJva2U/YjplLmdsb2JhbHMuc3Ryb2tlLmNvbG9yc1swXSxjb2xvcjpifSksdGhpcy5oZWxwZXJzLmFkZExpc3RlbmVycyhrKSxlLmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmVuYWJsZWQmJiFlLmdsb2JhbHMuZGF0YUNoYW5nZWQpe3ZhciBBPTE7ZS5nbG9iYWxzLnJlc2l6ZWR8fChBPWUuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuc3BlZWQpLHRoaXMuYW5pbWF0ZUhlYXRNYXAoayxnLG8scyxyLEEpfWlmKGUuZ2xvYmFscy5kYXRhQ2hhbmdlZCl7dmFyIFM9MTtpZih0aGlzLmR5bmFtaWNBbmltLmVuYWJsZWQmJmUuZ2xvYmFscy5zaG91bGRBbmltYXRlKXtTPXRoaXMuZHluYW1pY0FuaW0uc3BlZWQ7dmFyIEM9ZS5nbG9iYWxzLnByZXZpb3VzUGF0aHNbaF0mJmUuZ2xvYmFscy5wcmV2aW91c1BhdGhzW2hdW2ZdJiZlLmdsb2JhbHMucHJldmlvdXNQYXRoc1toXVtmXS5jb2xvcjtDfHwoQz1cInJnYmEoMjU1LCAyNTUsIDI1NSwgMClcIiksdGhpcy5hbmltYXRlSGVhdENvbG9yKGsseC5pc0NvbG9ySGV4KEMpP0M6eC5yZ2IyaGV4KEMpLHguaXNDb2xvckhleChiKT9iOngucmdiMmhleChiKSxTKX19dmFyIEw9KDAsZS5jb25maWcuZGF0YUxhYmVscy5mb3JtYXR0ZXIpKGUuZ2xvYmFscy5zZXJpZXNbaF1bZl0se3ZhbHVlOmUuZ2xvYmFscy5zZXJpZXNbaF1bZl0sc2VyaWVzSW5kZXg6aCxkYXRhUG9pbnRJbmRleDpmLHc6ZX0pLFA9dGhpcy5oZWxwZXJzLmNhbGN1bGF0ZURhdGFMYWJlbHMoe3RleHQ6TCx4Omcrcy8yLHk6bytyLzIsaTpoLGo6Zixjb2xvclByb3BzOnksc2VyaWVzOmx9KTtudWxsIT09UCYmYy5hZGQoUCksZys9c31vKz1yLGEuYWRkKGMpfXZhciBUPWUuZ2xvYmFscy55QXhpc1NjYWxlWzBdLnJlc3VsdC5zbGljZSgpO2UuY29uZmlnLnlheGlzWzBdLnJldmVyc2VkP1QudW5zaGlmdChcIlwiKTpULnB1c2goXCJcIiksZS5nbG9iYWxzLnlBeGlzU2NhbGVbMF0ucmVzdWx0PVQ7dmFyIE09ZS5nbG9iYWxzLmdyaWRIZWlnaHQvZS5nbG9iYWxzLnNlcmllcy5sZW5ndGg7cmV0dXJuIGUuY29uZmlnLnlheGlzWzBdLmxhYmVscy5vZmZzZXRZPS1NLzIsYX19LHtrZXk6XCJhbmltYXRlSGVhdE1hcFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEscyxyKXt2YXIgbz1uZXcgYih0aGlzLmN0eCk7by5hbmltYXRlUmVjdCh0LHt4OmUrYS8yLHk6aStzLzIsd2lkdGg6MCxoZWlnaHQ6MH0se3g6ZSx5Omksd2lkdGg6YSxoZWlnaHQ6c30sciwoZnVuY3Rpb24oKXtvLmFuaW1hdGlvbkNvbXBsZXRlZCh0KX0pKX19LHtrZXk6XCJhbmltYXRlSGVhdENvbG9yXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dC5hdHRyKHtmaWxsOmV9KS5hbmltYXRlKGEpLmF0dHIoe2ZpbGw6aX0pfX1dKSx0fSgpLEN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53fXJldHVybiByKHQsW3trZXk6XCJkcmF3WUF4aXNUZXh0c1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBzPXRoaXMudyxyPXMuY29uZmlnLnlheGlzWzBdLG89cy5nbG9iYWxzLnlMYWJlbEZvcm1hdHRlcnNbMF07cmV0dXJuIG5ldyBtKHRoaXMuY3R4KS5kcmF3VGV4dCh7eDp0K3IubGFiZWxzLm9mZnNldFgseTplK3IubGFiZWxzLm9mZnNldFksdGV4dDpvKGEsaSksdGV4dEFuY2hvcjpcIm1pZGRsZVwiLGZvbnRTaXplOnIubGFiZWxzLnN0eWxlLmZvbnRTaXplLGZvbnRGYW1pbHk6ci5sYWJlbHMuc3R5bGUuZm9udEZhbWlseSxmb3JlQ29sb3I6QXJyYXkuaXNBcnJheShyLmxhYmVscy5zdHlsZS5jb2xvcnMpP3IubGFiZWxzLnN0eWxlLmNvbG9yc1tpXTpyLmxhYmVscy5zdHlsZS5jb2xvcnN9KX19XSksdH0oKSxMdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUudzt2YXIgaT10aGlzLnc7dGhpcy5jaGFydFR5cGU9dGhpcy53LmNvbmZpZy5jaGFydC50eXBlLHRoaXMuaW5pdGlhbEFuaW09dGhpcy53LmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmVuYWJsZWQsdGhpcy5keW5hbWljQW5pbT10aGlzLmluaXRpYWxBbmltJiZ0aGlzLncuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuZHluYW1pY0FuaW1hdGlvbi5lbmFibGVkLHRoaXMuYW5pbUJlZ2luQXJyPVswXSx0aGlzLmFuaW1EdXI9MCx0aGlzLmRvbnV0RGF0YUxhYmVscz10aGlzLncuY29uZmlnLnBsb3RPcHRpb25zLnBpZS5kb251dC5sYWJlbHMsdGhpcy5saW5lQ29sb3JBcnI9dm9pZCAwIT09aS5nbG9iYWxzLnN0cm9rZS5jb2xvcnM/aS5nbG9iYWxzLnN0cm9rZS5jb2xvcnM6aS5nbG9iYWxzLmNvbG9ycyx0aGlzLmRlZmF1bHRTaXplPU1hdGgubWluKGkuZ2xvYmFscy5ncmlkV2lkdGgsaS5nbG9iYWxzLmdyaWRIZWlnaHQpLHRoaXMuY2VudGVyWT10aGlzLmRlZmF1bHRTaXplLzIsdGhpcy5jZW50ZXJYPWkuZ2xvYmFscy5ncmlkV2lkdGgvMixcInJhZGlhbEJhclwiPT09aS5jb25maWcuY2hhcnQudHlwZT90aGlzLmZ1bGxBbmdsZT0zNjA6dGhpcy5mdWxsQW5nbGU9TWF0aC5hYnMoaS5jb25maWcucGxvdE9wdGlvbnMucGllLmVuZEFuZ2xlLWkuY29uZmlnLnBsb3RPcHRpb25zLnBpZS5zdGFydEFuZ2xlKSx0aGlzLmluaXRpYWxBbmdsZT1pLmNvbmZpZy5wbG90T3B0aW9ucy5waWUuc3RhcnRBbmdsZSV0aGlzLmZ1bGxBbmdsZSxpLmdsb2JhbHMucmFkaWFsU2l6ZT10aGlzLmRlZmF1bHRTaXplLzIuMDUtaS5jb25maWcuc3Ryb2tlLndpZHRoLShpLmNvbmZpZy5jaGFydC5zcGFya2xpbmUuZW5hYmxlZD8wOmkuY29uZmlnLmNoYXJ0LmRyb3BTaGFkb3cuYmx1ciksdGhpcy5kb251dFNpemU9aS5nbG9iYWxzLnJhZGlhbFNpemUqcGFyc2VJbnQoaS5jb25maWcucGxvdE9wdGlvbnMucGllLmRvbnV0LnNpemUsMTApLzEwMCx0aGlzLm1heFk9MCx0aGlzLnNsaWNlTGFiZWxzPVtdLHRoaXMuc2xpY2VTaXplcz1bXSx0aGlzLnByZXZTZWN0b3JBbmdsZUFycj1bXX1yZXR1cm4gcih0LFt7a2V5OlwiZHJhd1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLncsYT1uZXcgbSh0aGlzLmN0eCk7aWYodGhpcy5yZXQ9YS5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLXBpZVwifSksaS5nbG9iYWxzLm5vRGF0YSlyZXR1cm4gdGhpcy5yZXQ7Zm9yKHZhciBzPTAscj0wO3I8dC5sZW5ndGg7cisrKXMrPXgubmVnVG9aZXJvKHRbcl0pO3ZhciBvPVtdLG49YS5ncm91cCgpOzA9PT1zJiYocz0xZS01KSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2UubWF4WT1NYXRoLm1heChlLm1heFksdCl9KSksaS5jb25maWcueWF4aXNbMF0ubWF4JiYodGhpcy5tYXhZPWkuY29uZmlnLnlheGlzWzBdLm1heCksXCJiYWNrXCI9PT1pLmNvbmZpZy5ncmlkLnBvc2l0aW9uJiZcInBvbGFyQXJlYVwiPT09dGhpcy5jaGFydFR5cGUmJnRoaXMuZHJhd1BvbGFyRWxlbWVudHModGhpcy5yZXQpO2Zvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgaD10aGlzLmZ1bGxBbmdsZSp4Lm5lZ1RvWmVybyh0W2xdKS9zO28ucHVzaChoKSxcInBvbGFyQXJlYVwiPT09dGhpcy5jaGFydFR5cGU/KG9bbF09dGhpcy5mdWxsQW5nbGUvdC5sZW5ndGgsdGhpcy5zbGljZVNpemVzLnB1c2goaS5nbG9iYWxzLnJhZGlhbFNpemUqdFtsXS90aGlzLm1heFkpKTp0aGlzLnNsaWNlU2l6ZXMucHVzaChpLmdsb2JhbHMucmFkaWFsU2l6ZSl9aWYoaS5nbG9iYWxzLmRhdGFDaGFuZ2VkKXtmb3IodmFyIGMsZD0wLGc9MDtnPGkuZ2xvYmFscy5wcmV2aW91c1BhdGhzLmxlbmd0aDtnKyspZCs9eC5uZWdUb1plcm8oaS5nbG9iYWxzLnByZXZpb3VzUGF0aHNbZ10pO2Zvcih2YXIgdT0wO3U8aS5nbG9iYWxzLnByZXZpb3VzUGF0aHMubGVuZ3RoO3UrKyljPXRoaXMuZnVsbEFuZ2xlKngubmVnVG9aZXJvKGkuZ2xvYmFscy5wcmV2aW91c1BhdGhzW3VdKS9kLHRoaXMucHJldlNlY3RvckFuZ2xlQXJyLnB1c2goYyl9dGhpcy5kb251dFNpemU8MCYmKHRoaXMuZG9udXRTaXplPTApO3ZhciBmPWkuY29uZmlnLnBsb3RPcHRpb25zLnBpZS5jdXN0b21TY2FsZSxwPWkuZ2xvYmFscy5ncmlkV2lkdGgvMixiPWkuZ2xvYmFscy5ncmlkSGVpZ2h0LzIsdj1wLWkuZ2xvYmFscy5ncmlkV2lkdGgvMipmLHk9Yi1pLmdsb2JhbHMuZ3JpZEhlaWdodC8yKmY7aWYoXCJkb251dFwiPT09dGhpcy5jaGFydFR5cGUpe3ZhciB3PWEuZHJhd0NpcmNsZSh0aGlzLmRvbnV0U2l6ZSk7dy5hdHRyKHtjeDp0aGlzLmNlbnRlclgsY3k6dGhpcy5jZW50ZXJZLGZpbGw6aS5jb25maWcucGxvdE9wdGlvbnMucGllLmRvbnV0LmJhY2tncm91bmQ/aS5jb25maWcucGxvdE9wdGlvbnMucGllLmRvbnV0LmJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwifSksbi5hZGQodyl9dmFyIGs9dGhpcy5kcmF3QXJjcyhvLHQpO2lmKHRoaXMuc2xpY2VMYWJlbHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ay5hZGQodCl9KSksbi5hdHRyKHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIuY29uY2F0KHYsXCIsIFwiKS5jb25jYXQoeSxcIikgc2NhbGUoXCIpLmNvbmNhdChmLFwiKVwiKX0pLG4uYWRkKGspLHRoaXMucmV0LmFkZChuKSx0aGlzLmRvbnV0RGF0YUxhYmVscy5zaG93KXt2YXIgQT10aGlzLnJlbmRlcklubmVyRGF0YUxhYmVscyh0aGlzLmRvbnV0RGF0YUxhYmVscyx7aG9sbG93U2l6ZTp0aGlzLmRvbnV0U2l6ZSxjZW50ZXJYOnRoaXMuY2VudGVyWCxjZW50ZXJZOnRoaXMuY2VudGVyWSxvcGFjaXR5OnRoaXMuZG9udXREYXRhTGFiZWxzLnNob3csdHJhbnNsYXRlWDp2LHRyYW5zbGF0ZVk6eX0pO3RoaXMucmV0LmFkZChBKX1yZXR1cm5cImZyb250XCI9PT1pLmNvbmZpZy5ncmlkLnBvc2l0aW9uJiZcInBvbGFyQXJlYVwiPT09dGhpcy5jaGFydFR5cGUmJnRoaXMuZHJhd1BvbGFyRWxlbWVudHModGhpcy5yZXQpLHRoaXMucmV0fX0se2tleTpcImRyYXdBcmNzXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLncsYT1uZXcgdih0aGlzLmN0eCkscz1uZXcgbSh0aGlzLmN0eCkscj1uZXcgRih0aGlzLmN0eCksbz1zLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtc2xpY2VzXCJ9KSxuPXRoaXMuaW5pdGlhbEFuZ2xlLGw9dGhpcy5pbml0aWFsQW5nbGUsaD10aGlzLmluaXRpYWxBbmdsZSxjPXRoaXMuaW5pdGlhbEFuZ2xlO3RoaXMuc3Ryb2tlV2lkdGg9aS5jb25maWcuc3Ryb2tlLnNob3c/aS5jb25maWcuc3Ryb2tlLndpZHRoOjA7Zm9yKHZhciBkPTA7ZDx0Lmxlbmd0aDtkKyspe3ZhciBnPXMuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1zZXJpZXMgYXBleGNoYXJ0cy1waWUtc2VyaWVzXCIsc2VyaWVzTmFtZTp4LmVzY2FwZVN0cmluZyhpLmdsb2JhbHMuc2VyaWVzTmFtZXNbZF0pLHJlbDpkKzEsXCJkYXRhOnJlYWxJbmRleFwiOmR9KTtvLmFkZChnKSxsPWMsaD0obj1oKSt0W2RdLGM9bCt0aGlzLnByZXZTZWN0b3JBbmdsZUFycltkXTt2YXIgdT1oPG4/dGhpcy5mdWxsQW5nbGUraC1uOmgtbixmPXIuZmlsbFBhdGgoe3Nlcmllc051bWJlcjpkLHNpemU6dGhpcy5zbGljZVNpemVzW2RdLHZhbHVlOmVbZF19KSxwPXRoaXMuZ2V0Q2hhbmdlZFBhdGgobCxjKSxiPXMuZHJhd1BhdGgoe2Q6cCxzdHJva2U6QXJyYXkuaXNBcnJheSh0aGlzLmxpbmVDb2xvckFycik/dGhpcy5saW5lQ29sb3JBcnJbZF06dGhpcy5saW5lQ29sb3JBcnIsc3Ryb2tlV2lkdGg6MCxmaWxsOmYsZmlsbE9wYWNpdHk6aS5jb25maWcuZmlsbC5vcGFjaXR5LGNsYXNzZXM6XCJhcGV4Y2hhcnRzLXBpZS1hcmVhIGFwZXhjaGFydHMtXCIuY29uY2F0KHRoaXMuY2hhcnRUeXBlLnRvTG93ZXJDYXNlKCksXCItc2xpY2UtXCIpLmNvbmNhdChkKX0pO2lmKGIuYXR0cih7aW5kZXg6MCxqOmR9KSxhLnNldFNlbGVjdGlvbkZpbHRlcihiLDAsZCksaS5jb25maWcuY2hhcnQuZHJvcFNoYWRvdy5lbmFibGVkKXt2YXIgeT1pLmNvbmZpZy5jaGFydC5kcm9wU2hhZG93O2EuZHJvcFNoYWRvdyhiLHksZCl9dGhpcy5hZGRMaXN0ZW5lcnMoYix0aGlzLmRvbnV0RGF0YUxhYmVscyksbS5zZXRBdHRycyhiLm5vZGUse1wiZGF0YTphbmdsZVwiOnUsXCJkYXRhOnN0YXJ0QW5nbGVcIjpuLFwiZGF0YTpzdHJva2VXaWR0aFwiOnRoaXMuc3Ryb2tlV2lkdGgsXCJkYXRhOnZhbHVlXCI6ZVtkXX0pO3ZhciB3PXt4OjAseTowfTtcInBpZVwiPT09dGhpcy5jaGFydFR5cGV8fFwicG9sYXJBcmVhXCI9PT10aGlzLmNoYXJ0VHlwZT93PXgucG9sYXJUb0NhcnRlc2lhbih0aGlzLmNlbnRlclgsdGhpcy5jZW50ZXJZLGkuZ2xvYmFscy5yYWRpYWxTaXplLzEuMjUraS5jb25maWcucGxvdE9wdGlvbnMucGllLmRhdGFMYWJlbHMub2Zmc2V0LChuK3UvMikldGhpcy5mdWxsQW5nbGUpOlwiZG9udXRcIj09PXRoaXMuY2hhcnRUeXBlJiYodz14LnBvbGFyVG9DYXJ0ZXNpYW4odGhpcy5jZW50ZXJYLHRoaXMuY2VudGVyWSwoaS5nbG9iYWxzLnJhZGlhbFNpemUrdGhpcy5kb251dFNpemUpLzIraS5jb25maWcucGxvdE9wdGlvbnMucGllLmRhdGFMYWJlbHMub2Zmc2V0LChuK3UvMikldGhpcy5mdWxsQW5nbGUpKSxnLmFkZChiKTt2YXIgaz0wO2lmKCF0aGlzLmluaXRpYWxBbmltfHxpLmdsb2JhbHMucmVzaXplZHx8aS5nbG9iYWxzLmRhdGFDaGFuZ2VkP3RoaXMuYW5pbUJlZ2luQXJyLnB1c2goMCk6KDA9PT0oaz11L3RoaXMuZnVsbEFuZ2xlKmkuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuc3BlZWQpJiYoaz0xKSx0aGlzLmFuaW1EdXI9ayt0aGlzLmFuaW1EdXIsdGhpcy5hbmltQmVnaW5BcnIucHVzaCh0aGlzLmFuaW1EdXIpKSx0aGlzLmR5bmFtaWNBbmltJiZpLmdsb2JhbHMuZGF0YUNoYW5nZWQ/dGhpcy5hbmltYXRlUGF0aHMoYix7c2l6ZTp0aGlzLnNsaWNlU2l6ZXNbZF0sZW5kQW5nbGU6aCxzdGFydEFuZ2xlOm4scHJldlN0YXJ0QW5nbGU6bCxwcmV2RW5kQW5nbGU6YyxhbmltYXRlU3RhcnRpbmdQb3M6ITAsaTpkLGFuaW1CZWdpbkFycjp0aGlzLmFuaW1CZWdpbkFycixzaG91bGRTZXRQcmV2UGF0aHM6ITAsZHVyOmkuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuZHluYW1pY0FuaW1hdGlvbi5zcGVlZH0pOnRoaXMuYW5pbWF0ZVBhdGhzKGIse3NpemU6dGhpcy5zbGljZVNpemVzW2RdLGVuZEFuZ2xlOmgsc3RhcnRBbmdsZTpuLGk6ZCx0b3RhbEl0ZW1zOnQubGVuZ3RoLTEsYW5pbUJlZ2luQXJyOnRoaXMuYW5pbUJlZ2luQXJyLGR1cjprfSksaS5jb25maWcucGxvdE9wdGlvbnMucGllLmV4cGFuZE9uQ2xpY2smJlwicG9sYXJBcmVhXCIhPT10aGlzLmNoYXJ0VHlwZSYmYi5jbGljayh0aGlzLnBpZUNsaWNrZWQuYmluZCh0aGlzLGQpKSx2b2lkIDAhPT1pLmdsb2JhbHMuc2VsZWN0ZWREYXRhUG9pbnRzWzBdJiZpLmdsb2JhbHMuc2VsZWN0ZWREYXRhUG9pbnRzWzBdLmluZGV4T2YoZCk+LTEmJnRoaXMucGllQ2xpY2tlZChkKSxpLmNvbmZpZy5kYXRhTGFiZWxzLmVuYWJsZWQpe3ZhciBBPXcueCxTPXcueSxDPTEwMCp1L3RoaXMuZnVsbEFuZ2xlK1wiJVwiO2lmKDAhPT11JiZpLmNvbmZpZy5wbG90T3B0aW9ucy5waWUuZGF0YUxhYmVscy5taW5BbmdsZVRvU2hvd0xhYmVsPHRbZF0pe3ZhciBMPWkuY29uZmlnLmRhdGFMYWJlbHMuZm9ybWF0dGVyO3ZvaWQgMCE9PUwmJihDPUwoaS5nbG9iYWxzLnNlcmllc1BlcmNlbnRbZF1bMF0se3Nlcmllc0luZGV4OmQsdzppfSkpO3ZhciBQPWkuZ2xvYmFscy5kYXRhTGFiZWxzLnN0eWxlLmNvbG9yc1tkXSxUPXMuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1kYXRhbGFiZWxzXCJ9KSxNPXMuZHJhd1RleHQoe3g6QSx5OlMsdGV4dDpDLHRleHRBbmNob3I6XCJtaWRkbGVcIixmb250U2l6ZTppLmNvbmZpZy5kYXRhTGFiZWxzLnN0eWxlLmZvbnRTaXplLGZvbnRGYW1pbHk6aS5jb25maWcuZGF0YUxhYmVscy5zdHlsZS5mb250RmFtaWx5LGZvbnRXZWlnaHQ6aS5jb25maWcuZGF0YUxhYmVscy5zdHlsZS5mb250V2VpZ2h0LGZvcmVDb2xvcjpQfSk7aWYoVC5hZGQoTSksaS5jb25maWcuZGF0YUxhYmVscy5kcm9wU2hhZG93LmVuYWJsZWQpe3ZhciBJPWkuY29uZmlnLmRhdGFMYWJlbHMuZHJvcFNoYWRvdzthLmRyb3BTaGFkb3coTSxJKX1NLm5vZGUuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtcGllLWxhYmVsXCIpLGkuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuYW5pbWF0ZSYmITE9PT1pLmdsb2JhbHMucmVzaXplZCYmKE0ubm9kZS5jbGFzc0xpc3QuYWRkKFwiYXBleGNoYXJ0cy1waWUtbGFiZWwtZGVsYXlcIiksTS5ub2RlLnN0eWxlLmFuaW1hdGlvbkRlbGF5PWkuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuc3BlZWQvOTQwK1wic1wiKSx0aGlzLnNsaWNlTGFiZWxzLnB1c2goVCl9fX1yZXR1cm4gb319LHtrZXk6XCJhZGRMaXN0ZW5lcnNcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPW5ldyBtKHRoaXMuY3R4KTt0Lm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIixpLnBhdGhNb3VzZUVudGVyLmJpbmQodGhpcyx0KSksdC5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsaS5wYXRoTW91c2VMZWF2ZS5iaW5kKHRoaXMsdCkpLHQubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLHRoaXMucmV2ZXJ0RGF0YUxhYmVsc0lubmVyLmJpbmQodGhpcyx0Lm5vZGUsZSkpLHQubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaS5wYXRoTW91c2VEb3duLmJpbmQodGhpcyx0KSksdGhpcy5kb251dERhdGFMYWJlbHMudG90YWwuc2hvd0Fsd2F5c3x8KHQubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLHRoaXMucHJpbnREYXRhTGFiZWxzSW5uZXIuYmluZCh0aGlzLHQubm9kZSxlKSksdC5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIix0aGlzLnByaW50RGF0YUxhYmVsc0lubmVyLmJpbmQodGhpcyx0Lm5vZGUsZSkpKX19LHtrZXk6XCJhbmltYXRlUGF0aHNcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudyxhPWUuZW5kQW5nbGU8ZS5zdGFydEFuZ2xlP3RoaXMuZnVsbEFuZ2xlK2UuZW5kQW5nbGUtZS5zdGFydEFuZ2xlOmUuZW5kQW5nbGUtZS5zdGFydEFuZ2xlLHM9YSxyPWUuc3RhcnRBbmdsZSxvPWUuc3RhcnRBbmdsZTt2b2lkIDAhPT1lLnByZXZTdGFydEFuZ2xlJiZ2b2lkIDAhPT1lLnByZXZFbmRBbmdsZSYmKHI9ZS5wcmV2RW5kQW5nbGUscz1lLnByZXZFbmRBbmdsZTxlLnByZXZTdGFydEFuZ2xlP3RoaXMuZnVsbEFuZ2xlK2UucHJldkVuZEFuZ2xlLWUucHJldlN0YXJ0QW5nbGU6ZS5wcmV2RW5kQW5nbGUtZS5wcmV2U3RhcnRBbmdsZSksZS5pPT09aS5jb25maWcuc2VyaWVzLmxlbmd0aC0xJiYoYStvPnRoaXMuZnVsbEFuZ2xlP2UuZW5kQW5nbGU9ZS5lbmRBbmdsZS0oYStvKTphK288dGhpcy5mdWxsQW5nbGUmJihlLmVuZEFuZ2xlPWUuZW5kQW5nbGUrKHRoaXMuZnVsbEFuZ2xlLShhK28pKSkpLGE9PT10aGlzLmZ1bGxBbmdsZSYmKGE9dGhpcy5mdWxsQW5nbGUtLjAxKSx0aGlzLmFuaW1hdGVBcmModCxyLG8sYSxzLGUpfX0se2tleTpcImFuaW1hdGVBcmNcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhLHMscil7dmFyIG8sbj10aGlzLGw9dGhpcy53LGg9bmV3IGIodGhpcy5jdHgpLGM9ci5zaXplOyhpc05hTihlKXx8aXNOYU4ocykpJiYoZT1pLHM9YSxyLmR1cj0wKTt2YXIgZD1hLGc9aSx1PWU8aT90aGlzLmZ1bGxBbmdsZStlLWk6ZS1pO2wuZ2xvYmFscy5kYXRhQ2hhbmdlZCYmci5zaG91bGRTZXRQcmV2UGF0aHMmJnIucHJldkVuZEFuZ2xlJiYobz1uLmdldFBpZVBhdGgoe21lOm4sc3RhcnRBbmdsZTpyLnByZXZTdGFydEFuZ2xlLGFuZ2xlOnIucHJldkVuZEFuZ2xlPHIucHJldlN0YXJ0QW5nbGU/dGhpcy5mdWxsQW5nbGUrci5wcmV2RW5kQW5nbGUtci5wcmV2U3RhcnRBbmdsZTpyLnByZXZFbmRBbmdsZS1yLnByZXZTdGFydEFuZ2xlLHNpemU6Y30pLHQuYXR0cih7ZDpvfSkpLDAhPT1yLmR1cj90LmFuaW1hdGUoci5kdXIsbC5nbG9iYWxzLmVhc2luZyxyLmFuaW1CZWdpbkFycltyLmldKS5hZnRlckFsbCgoZnVuY3Rpb24oKXtcInBpZVwiIT09bi5jaGFydFR5cGUmJlwiZG9udXRcIiE9PW4uY2hhcnRUeXBlJiZcInBvbGFyQXJlYVwiIT09bi5jaGFydFR5cGV8fHRoaXMuYW5pbWF0ZShsLmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmR5bmFtaWNBbmltYXRpb24uc3BlZWQpLmF0dHIoe1wic3Ryb2tlLXdpZHRoXCI6bi5zdHJva2VXaWR0aH0pLHIuaT09PWwuY29uZmlnLnNlcmllcy5sZW5ndGgtMSYmaC5hbmltYXRpb25Db21wbGV0ZWQodCl9KSkuZHVyaW5nKChmdW5jdGlvbihsKXtkPXUrKGEtdSkqbCxyLmFuaW1hdGVTdGFydGluZ1BvcyYmKGQ9cysoYS1zKSpsLGc9ZS1zKyhpLShlLXMpKSpsKSxvPW4uZ2V0UGllUGF0aCh7bWU6bixzdGFydEFuZ2xlOmcsYW5nbGU6ZCxzaXplOmN9KSx0Lm5vZGUuc2V0QXR0cmlidXRlKFwiZGF0YTpwYXRoT3JpZ1wiLG8pLHQuYXR0cih7ZDpvfSl9KSk6KG89bi5nZXRQaWVQYXRoKHttZTpuLHN0YXJ0QW5nbGU6ZyxhbmdsZTphLHNpemU6Y30pLHIuaXNUcmFja3x8KGwuZ2xvYmFscy5hbmltYXRpb25FbmRlZD0hMCksdC5ub2RlLnNldEF0dHJpYnV0ZShcImRhdGE6cGF0aE9yaWdcIixvKSx0LmF0dHIoe2Q6byxcInN0cm9rZS13aWR0aFwiOm4uc3Ryb2tlV2lkdGh9KSl9fSx7a2V5OlwicGllQ2xpY2tlZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcy53LGE9dGhpcyxzPWEuc2xpY2VTaXplc1t0XSsoaS5jb25maWcucGxvdE9wdGlvbnMucGllLmV4cGFuZE9uQ2xpY2s/NDowKSxyPWkuZ2xvYmFscy5kb20uUGFwZXIuc2VsZWN0KFwiLmFwZXhjaGFydHMtXCIuY29uY2F0KGEuY2hhcnRUeXBlLnRvTG93ZXJDYXNlKCksXCItc2xpY2UtXCIpLmNvbmNhdCh0KSkubWVtYmVyc1swXTtpZihcInRydWVcIiE9PXIuYXR0cihcImRhdGE6cGllQ2xpY2tlZFwiKSl7dmFyIG89aS5nbG9iYWxzLmRvbS5iYXNlRWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFwZXhjaGFydHMtcGllLWFyZWFcIik7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChvLChmdW5jdGlvbih0KXt0LnNldEF0dHJpYnV0ZShcImRhdGE6cGllQ2xpY2tlZFwiLFwiZmFsc2VcIik7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhOnBhdGhPcmlnXCIpO3Quc2V0QXR0cmlidXRlKFwiZFwiLGUpfSkpLHIuYXR0cihcImRhdGE6cGllQ2xpY2tlZFwiLFwidHJ1ZVwiKTt2YXIgbj1wYXJzZUludChyLmF0dHIoXCJkYXRhOnN0YXJ0QW5nbGVcIiksMTApLGw9cGFyc2VJbnQoci5hdHRyKFwiZGF0YTphbmdsZVwiKSwxMCk7ZT1hLmdldFBpZVBhdGgoe21lOmEsc3RhcnRBbmdsZTpuLGFuZ2xlOmwsc2l6ZTpzfSksMzYwIT09bCYmci5wbG90KGUpfWVsc2V7ci5hdHRyKHtcImRhdGE6cGllQ2xpY2tlZFwiOlwiZmFsc2VcIn0pLHRoaXMucmV2ZXJ0RGF0YUxhYmVsc0lubmVyKHIubm9kZSx0aGlzLmRvbnV0RGF0YUxhYmVscyk7dmFyIGg9ci5hdHRyKFwiZGF0YTpwYXRoT3JpZ1wiKTtyLmF0dHIoe2Q6aH0pfX19LHtrZXk6XCJnZXRDaGFuZ2VkUGF0aFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9XCJcIjtyZXR1cm4gdGhpcy5keW5hbWljQW5pbSYmdGhpcy53Lmdsb2JhbHMuZGF0YUNoYW5nZWQmJihpPXRoaXMuZ2V0UGllUGF0aCh7bWU6dGhpcyxzdGFydEFuZ2xlOnQsYW5nbGU6ZS10LHNpemU6dGhpcy5zaXplfSkpLGl9fSx7a2V5OlwiZ2V0UGllUGF0aFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQubWUsaT10LnN0YXJ0QW5nbGUsYT10LmFuZ2xlLHM9dC5zaXplLHI9aSxvPU1hdGguUEkqKHItOTApLzE4MCxuPWEraTtNYXRoLmNlaWwobik+PXRoaXMuZnVsbEFuZ2xlK3RoaXMudy5jb25maWcucGxvdE9wdGlvbnMucGllLnN0YXJ0QW5nbGUldGhpcy5mdWxsQW5nbGUmJihuPXRoaXMuZnVsbEFuZ2xlK3RoaXMudy5jb25maWcucGxvdE9wdGlvbnMucGllLnN0YXJ0QW5nbGUldGhpcy5mdWxsQW5nbGUtLjAxKSxNYXRoLmNlaWwobik+dGhpcy5mdWxsQW5nbGUmJihuLT10aGlzLmZ1bGxBbmdsZSk7dmFyIGw9TWF0aC5QSSoobi05MCkvMTgwLGg9ZS5jZW50ZXJYK3MqTWF0aC5jb3MobyksYz1lLmNlbnRlclkrcypNYXRoLnNpbihvKSxkPWUuY2VudGVyWCtzKk1hdGguY29zKGwpLGc9ZS5jZW50ZXJZK3MqTWF0aC5zaW4obCksdT14LnBvbGFyVG9DYXJ0ZXNpYW4oZS5jZW50ZXJYLGUuY2VudGVyWSxlLmRvbnV0U2l6ZSxuKSxmPXgucG9sYXJUb0NhcnRlc2lhbihlLmNlbnRlclgsZS5jZW50ZXJZLGUuZG9udXRTaXplLHIpLHA9YT4xODA/MTowLGI9W1wiTVwiLGgsYyxcIkFcIixzLHMsMCxwLDEsZCxnXTtyZXR1cm5cImRvbnV0XCI9PT1lLmNoYXJ0VHlwZT9bXS5jb25jYXQoYixbXCJMXCIsdS54LHUueSxcIkFcIixlLmRvbnV0U2l6ZSxlLmRvbnV0U2l6ZSwwLHAsMCxmLngsZi55LFwiTFwiLGgsYyxcInpcIl0pLmpvaW4oXCIgXCIpOlwicGllXCI9PT1lLmNoYXJ0VHlwZXx8XCJwb2xhckFyZWFcIj09PWUuY2hhcnRUeXBlP1tdLmNvbmNhdChiLFtcIkxcIixlLmNlbnRlclgsZS5jZW50ZXJZLFwiTFwiLGgsY10pLmpvaW4oXCIgXCIpOltdLmNvbmNhdChiKS5qb2luKFwiIFwiKX19LHtrZXk6XCJkcmF3UG9sYXJFbGVtZW50c1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudyxpPW5ldyBfKHRoaXMuY3R4KSxhPW5ldyBtKHRoaXMuY3R4KSxzPW5ldyBDdCh0aGlzLmN0eCkscj1hLmdyb3VwKCksbz1hLmdyb3VwKCksbj1pLm5pY2VTY2FsZSgwLE1hdGguY2VpbCh0aGlzLm1heFkpLGUuY29uZmlnLnlheGlzWzBdLnRpY2tBbW91bnQsMCwhMCksbD1uLnJlc3VsdC5yZXZlcnNlKCksaD1uLnJlc3VsdC5sZW5ndGg7dGhpcy5tYXhZPW4ubmljZU1heDtmb3IodmFyIGM9ZS5nbG9iYWxzLnJhZGlhbFNpemUsZD1jLyhoLTEpLGc9MDtnPGgtMTtnKyspe3ZhciB1PWEuZHJhd0NpcmNsZShjKTtpZih1LmF0dHIoe2N4OnRoaXMuY2VudGVyWCxjeTp0aGlzLmNlbnRlclksZmlsbDpcIm5vbmVcIixcInN0cm9rZS13aWR0aFwiOmUuY29uZmlnLnBsb3RPcHRpb25zLnBvbGFyQXJlYS5yaW5ncy5zdHJva2VXaWR0aCxzdHJva2U6ZS5jb25maWcucGxvdE9wdGlvbnMucG9sYXJBcmVhLnJpbmdzLnN0cm9rZUNvbG9yfSksZS5jb25maWcueWF4aXNbMF0uc2hvdyl7dmFyIGY9cy5kcmF3WUF4aXNUZXh0cyh0aGlzLmNlbnRlclgsdGhpcy5jZW50ZXJZLWMrcGFyc2VJbnQoZS5jb25maWcueWF4aXNbMF0ubGFiZWxzLnN0eWxlLmZvbnRTaXplLDEwKS8yLGcsbFtnXSk7by5hZGQoZil9ci5hZGQodSksYy09ZH10aGlzLmRyYXdTcG9rZXModCksdC5hZGQociksdC5hZGQobyl9fSx7a2V5OlwicmVuZGVySW5uZXJEYXRhTGFiZWxzXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLncsYT1uZXcgbSh0aGlzLmN0eCkscz1hLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtZGF0YWxhYmVscy1ncm91cFwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZShcIi5jb25jYXQoZS50cmFuc2xhdGVYP2UudHJhbnNsYXRlWDowLFwiLCBcIikuY29uY2F0KGUudHJhbnNsYXRlWT9lLnRyYW5zbGF0ZVk6MCxcIikgc2NhbGUoXCIpLmNvbmNhdChpLmNvbmZpZy5wbG90T3B0aW9ucy5waWUuY3VzdG9tU2NhbGUsXCIpXCIpfSkscj10LnRvdGFsLnNob3c7cy5ub2RlLnN0eWxlLm9wYWNpdHk9ZS5vcGFjaXR5O3ZhciBvLG4sbD1lLmNlbnRlclgsaD1lLmNlbnRlclk7bz12b2lkIDA9PT10Lm5hbWUuY29sb3I/aS5nbG9iYWxzLmNvbG9yc1swXTp0Lm5hbWUuY29sb3I7dmFyIGM9dC5uYW1lLmZvbnRTaXplLGQ9dC5uYW1lLmZvbnRGYW1pbHksZz10Lm5hbWUuZm9udFdlaWdodDtuPXZvaWQgMD09PXQudmFsdWUuY29sb3I/aS5jb25maWcuY2hhcnQuZm9yZUNvbG9yOnQudmFsdWUuY29sb3I7dmFyIHU9dC52YWx1ZS5mb3JtYXR0ZXIsZj1cIlwiLHA9XCJcIjtpZihyPyhvPXQudG90YWwuY29sb3IsYz10LnRvdGFsLmZvbnRTaXplLGQ9dC50b3RhbC5mb250RmFtaWx5LGc9dC50b3RhbC5mb250V2VpZ2h0LHA9dC50b3RhbC5sYWJlbCxmPXQudG90YWwuZm9ybWF0dGVyKGkpKToxPT09aS5nbG9iYWxzLnNlcmllcy5sZW5ndGgmJihmPXUoaS5nbG9iYWxzLnNlcmllc1swXSxpKSxwPWkuZ2xvYmFscy5zZXJpZXNOYW1lc1swXSkscCYmKHA9dC5uYW1lLmZvcm1hdHRlcihwLHQudG90YWwuc2hvdyxpKSksdC5uYW1lLnNob3cpe3ZhciB4PWEuZHJhd1RleHQoe3g6bCx5OmgrcGFyc2VGbG9hdCh0Lm5hbWUub2Zmc2V0WSksdGV4dDpwLHRleHRBbmNob3I6XCJtaWRkbGVcIixmb3JlQ29sb3I6byxmb250U2l6ZTpjLGZvbnRXZWlnaHQ6Zyxmb250RmFtaWx5OmR9KTt4Lm5vZGUuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtZGF0YWxhYmVsLWxhYmVsXCIpLHMuYWRkKHgpfWlmKHQudmFsdWUuc2hvdyl7dmFyIGI9dC5uYW1lLnNob3c/cGFyc2VGbG9hdCh0LnZhbHVlLm9mZnNldFkpKzE2OnQudmFsdWUub2Zmc2V0WSx2PWEuZHJhd1RleHQoe3g6bCx5OmgrYix0ZXh0OmYsdGV4dEFuY2hvcjpcIm1pZGRsZVwiLGZvcmVDb2xvcjpuLGZvbnRXZWlnaHQ6dC52YWx1ZS5mb250V2VpZ2h0LGZvbnRTaXplOnQudmFsdWUuZm9udFNpemUsZm9udEZhbWlseTp0LnZhbHVlLmZvbnRGYW1pbHl9KTt2Lm5vZGUuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtZGF0YWxhYmVsLXZhbHVlXCIpLHMuYWRkKHYpfXJldHVybiBzfX0se2tleTpcInByaW50SW5uZXJMYWJlbHNcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhKXt2YXIgcyxyPXRoaXMudzthP3M9dm9pZCAwPT09dC5uYW1lLmNvbG9yP3IuZ2xvYmFscy5jb2xvcnNbcGFyc2VJbnQoYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcInJlbFwiKSwxMCktMV06dC5uYW1lLmNvbG9yOnIuZ2xvYmFscy5zZXJpZXMubGVuZ3RoPjEmJnQudG90YWwuc2hvdyYmKHM9dC50b3RhbC5jb2xvcik7dmFyIG89ci5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLWRhdGFsYWJlbC1sYWJlbFwiKSxuPXIuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1kYXRhbGFiZWwtdmFsdWVcIik7aT0oMCx0LnZhbHVlLmZvcm1hdHRlcikoaSxyKSxhfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnRvdGFsLmZvcm1hdHRlcnx8KGk9dC50b3RhbC5mb3JtYXR0ZXIocikpO3ZhciBsPWU9PT10LnRvdGFsLmxhYmVsO2U9dC5uYW1lLmZvcm1hdHRlcihlLGwsciksbnVsbCE9PW8mJihvLnRleHRDb250ZW50PWUpLG51bGwhPT1uJiYobi50ZXh0Q29udGVudD1pKSxudWxsIT09byYmKG8uc3R5bGUuZmlsbD1zKX19LHtrZXk6XCJwcmludERhdGFMYWJlbHNJbm5lclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53LGE9dC5nZXRBdHRyaWJ1dGUoXCJkYXRhOnZhbHVlXCIpLHM9aS5nbG9iYWxzLnNlcmllc05hbWVzW3BhcnNlSW50KHQucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJyZWxcIiksMTApLTFdO2kuZ2xvYmFscy5zZXJpZXMubGVuZ3RoPjEmJnRoaXMucHJpbnRJbm5lckxhYmVscyhlLHMsYSx0KTt2YXIgcj1pLmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtZGF0YWxhYmVscy1ncm91cFwiKTtudWxsIT09ciYmKHIuc3R5bGUub3BhY2l0eT0xKX19LHtrZXk6XCJkcmF3U3Bva2VzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMudyxhPW5ldyBtKHRoaXMuY3R4KSxzPWkuY29uZmlnLnBsb3RPcHRpb25zLnBvbGFyQXJlYS5zcG9rZXM7aWYoMCE9PXMuc3Ryb2tlV2lkdGgpe2Zvcih2YXIgcj1bXSxvPTM2MC9pLmdsb2JhbHMuc2VyaWVzLmxlbmd0aCxuPTA7bjxpLmdsb2JhbHMuc2VyaWVzLmxlbmd0aDtuKyspci5wdXNoKHgucG9sYXJUb0NhcnRlc2lhbih0aGlzLmNlbnRlclgsdGhpcy5jZW50ZXJZLGkuZ2xvYmFscy5yYWRpYWxTaXplLGkuY29uZmlnLnBsb3RPcHRpb25zLnBpZS5zdGFydEFuZ2xlK28qbikpO3IuZm9yRWFjaCgoZnVuY3Rpb24oaSxyKXt2YXIgbz1hLmRyYXdMaW5lKGkueCxpLnksZS5jZW50ZXJYLGUuY2VudGVyWSxBcnJheS5pc0FycmF5KHMuY29ubmVjdG9yQ29sb3JzKT9zLmNvbm5lY3RvckNvbG9yc1tyXTpzLmNvbm5lY3RvckNvbG9ycyk7dC5hZGQobyl9KSl9fX0se2tleTpcInJldmVydERhdGFMYWJlbHNJbm5lclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgYT10aGlzLHM9dGhpcy53LHI9cy5nbG9iYWxzLmRvbS5iYXNlRWwucXVlcnlTZWxlY3RvcihcIi5hcGV4Y2hhcnRzLWRhdGFsYWJlbHMtZ3JvdXBcIiksbz0hMSxuPXMuZ2xvYmFscy5kb20uYmFzZUVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJhcGV4Y2hhcnRzLXBpZS1hcmVhXCIpLGw9ZnVuY3Rpb24odCl7dmFyIGk9dC5tYWtlU2xpY2VPdXQscz10LnByaW50TGFiZWw7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChuLChmdW5jdGlvbih0KXtcInRydWVcIj09PXQuZ2V0QXR0cmlidXRlKFwiZGF0YTpwaWVDbGlja2VkXCIpJiYoaSYmKG89ITApLHMmJmEucHJpbnREYXRhTGFiZWxzSW5uZXIodCxlKSl9KSl9O2lmKGwoe21ha2VTbGljZU91dDohMCxwcmludExhYmVsOiExfSksZS50b3RhbC5zaG93JiZzLmdsb2JhbHMuc2VyaWVzLmxlbmd0aD4xKW8mJiFlLnRvdGFsLnNob3dBbHdheXM/bCh7bWFrZVNsaWNlT3V0OiExLHByaW50TGFiZWw6ITB9KTp0aGlzLnByaW50SW5uZXJMYWJlbHMoZSxlLnRvdGFsLmxhYmVsLGUudG90YWwuZm9ybWF0dGVyKHMpKTtlbHNlIGlmKGwoe21ha2VTbGljZU91dDohMSxwcmludExhYmVsOiEwfSksIW8paWYocy5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50cy5sZW5ndGgmJnMuZ2xvYmFscy5zZXJpZXMubGVuZ3RoPjEpaWYocy5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50c1swXS5sZW5ndGg+MCl7dmFyIGg9cy5nbG9iYWxzLnNlbGVjdGVkRGF0YVBvaW50c1swXSxjPXMuZ2xvYmFscy5kb20uYmFzZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuYXBleGNoYXJ0cy1cIi5jb25jYXQodGhpcy5jaGFydFR5cGUudG9Mb3dlckNhc2UoKSxcIi1zbGljZS1cIikuY29uY2F0KGgpKTt0aGlzLnByaW50RGF0YUxhYmVsc0lubmVyKGMsZSl9ZWxzZSByJiZzLmdsb2JhbHMuc2VsZWN0ZWREYXRhUG9pbnRzLmxlbmd0aCYmMD09PXMuZ2xvYmFscy5zZWxlY3RlZERhdGFQb2ludHNbMF0ubGVuZ3RoJiYoci5zdHlsZS5vcGFjaXR5PTApO2Vsc2UgciYmcy5nbG9iYWxzLnNlcmllcy5sZW5ndGg+MSYmKHIuc3R5bGUub3BhY2l0eT0wKX19XSksdH0oKSxQdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUudyx0aGlzLmNoYXJ0VHlwZT10aGlzLncuY29uZmlnLmNoYXJ0LnR5cGUsdGhpcy5pbml0aWFsQW5pbT10aGlzLncuY29uZmlnLmNoYXJ0LmFuaW1hdGlvbnMuZW5hYmxlZCx0aGlzLmR5bmFtaWNBbmltPXRoaXMuaW5pdGlhbEFuaW0mJnRoaXMudy5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5keW5hbWljQW5pbWF0aW9uLmVuYWJsZWQsdGhpcy5hbmltRHVyPTA7dmFyIGk9dGhpcy53O3RoaXMuZ3JhcGhpY3M9bmV3IG0odGhpcy5jdHgpLHRoaXMubGluZUNvbG9yQXJyPXZvaWQgMCE9PWkuZ2xvYmFscy5zdHJva2UuY29sb3JzP2kuZ2xvYmFscy5zdHJva2UuY29sb3JzOmkuZ2xvYmFscy5jb2xvcnMsdGhpcy5kZWZhdWx0U2l6ZT1pLmdsb2JhbHMuc3ZnSGVpZ2h0PGkuZ2xvYmFscy5zdmdXaWR0aD9pLmdsb2JhbHMuZ3JpZEhlaWdodCsxLjUqaS5nbG9iYWxzLmdvbGRlblBhZGRpbmc6aS5nbG9iYWxzLmdyaWRXaWR0aCx0aGlzLmlzTG9nPWkuY29uZmlnLnlheGlzWzBdLmxvZ2FyaXRobWljLHRoaXMuY29yZVV0aWxzPW5ldyB5KHRoaXMuY3R4KSx0aGlzLm1heFZhbHVlPXRoaXMuaXNMb2c/dGhpcy5jb3JlVXRpbHMuZ2V0TG9nVmFsKGkuZ2xvYmFscy5tYXhZLDApOmkuZ2xvYmFscy5tYXhZLHRoaXMubWluVmFsdWU9dGhpcy5pc0xvZz90aGlzLmNvcmVVdGlscy5nZXRMb2dWYWwodGhpcy53Lmdsb2JhbHMubWluWSwwKTppLmdsb2JhbHMubWluWSx0aGlzLnBvbHlnb25zPWkuY29uZmlnLnBsb3RPcHRpb25zLnJhZGFyLnBvbHlnb25zLHRoaXMuc3Ryb2tlV2lkdGg9aS5jb25maWcuc3Ryb2tlLnNob3c/aS5jb25maWcuc3Ryb2tlLndpZHRoOjAsdGhpcy5zaXplPXRoaXMuZGVmYXVsdFNpemUvMi4xLXRoaXMuc3Ryb2tlV2lkdGgtaS5jb25maWcuY2hhcnQuZHJvcFNoYWRvdy5ibHVyLGkuY29uZmlnLnhheGlzLmxhYmVscy5zaG93JiYodGhpcy5zaXplPXRoaXMuc2l6ZS1pLmdsb2JhbHMueEF4aXNMYWJlbHNXaWR0aC8xLjc1KSx2b2lkIDAhPT1pLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRhci5zaXplJiYodGhpcy5zaXplPWkuY29uZmlnLnBsb3RPcHRpb25zLnJhZGFyLnNpemUpLHRoaXMuZGF0YVJhZGl1c09mUGVyY2VudD1bXSx0aGlzLmRhdGFSYWRpdXM9W10sdGhpcy5hbmdsZUFycj1bXSx0aGlzLnlheGlzTGFiZWxzVGV4dHNQb3M9W119cmV0dXJuIHIodCxbe2tleTpcImRyYXdcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLGE9dGhpcy53LHM9bmV3IEYodGhpcy5jdHgpLHI9W10sbz1uZXcgSCh0aGlzLmN0eCk7dC5sZW5ndGgmJih0aGlzLmRhdGFQb2ludHNMZW49dFthLmdsb2JhbHMubWF4VmFsc0luQXJyYXlJbmRleF0ubGVuZ3RoKSx0aGlzLmRpc0FuZ2xlPTIqTWF0aC5QSS90aGlzLmRhdGFQb2ludHNMZW47dmFyIG49YS5nbG9iYWxzLmdyaWRXaWR0aC8yLGw9YS5nbG9iYWxzLmdyaWRIZWlnaHQvMixoPW4rYS5jb25maWcucGxvdE9wdGlvbnMucmFkYXIub2Zmc2V0WCxjPWwrYS5jb25maWcucGxvdE9wdGlvbnMucmFkYXIub2Zmc2V0WSxkPXRoaXMuZ3JhcGhpY3MuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1yYWRhci1zZXJpZXMgYXBleGNoYXJ0cy1wbG90LXNlcmllc1wiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZShcIi5jb25jYXQoaHx8MCxcIiwgXCIpLmNvbmNhdChjfHwwLFwiKVwiKX0pLGc9W10sdT1udWxsLGY9bnVsbDtpZih0aGlzLnlheGlzTGFiZWxzPXRoaXMuZ3JhcGhpY3MuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy15YXhpc1wifSksdC5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3ZhciBsPXQubGVuZ3RoPT09YS5nbG9iYWxzLmRhdGFQb2ludHMsaD1pLmdyYXBoaWNzLmdyb3VwKCkuYXR0cih7Y2xhc3M6XCJhcGV4Y2hhcnRzLXNlcmllc1wiLFwiZGF0YTpsb25nZXN0U2VyaWVzXCI6bCxzZXJpZXNOYW1lOnguZXNjYXBlU3RyaW5nKGEuZ2xvYmFscy5zZXJpZXNOYW1lc1tuXSkscmVsOm4rMSxcImRhdGE6cmVhbEluZGV4XCI6bn0pO2kuZGF0YVJhZGl1c09mUGVyY2VudFtuXT1bXSxpLmRhdGFSYWRpdXNbbl09W10saS5hbmdsZUFycltuXT1bXSx0LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIGE9TWF0aC5hYnMoaS5tYXhWYWx1ZS1pLm1pblZhbHVlKTt0Kz1NYXRoLmFicyhpLm1pblZhbHVlKSxpLmlzTG9nJiYodD1pLmNvcmVVdGlscy5nZXRMb2dWYWwodCwwKSksaS5kYXRhUmFkaXVzT2ZQZXJjZW50W25dW2VdPXQvYSxpLmRhdGFSYWRpdXNbbl1bZV09aS5kYXRhUmFkaXVzT2ZQZXJjZW50W25dW2VdKmkuc2l6ZSxpLmFuZ2xlQXJyW25dW2VdPWUqaS5kaXNBbmdsZX0pKSxnPWkuZ2V0RGF0YVBvaW50c1BvcyhpLmRhdGFSYWRpdXNbbl0saS5hbmdsZUFycltuXSk7dmFyIGM9aS5jcmVhdGVQYXRocyhnLHt4OjAseTowfSk7dT1pLmdyYXBoaWNzLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtc2VyaWVzLW1hcmtlcnMtd3JhcCBhcGV4Y2hhcnRzLWVsZW1lbnQtaGlkZGVuXCJ9KSxmPWkuZ3JhcGhpY3MuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1kYXRhbGFiZWxzXCIsXCJkYXRhOnJlYWxJbmRleFwiOm59KSxhLmdsb2JhbHMuZGVsYXllZEVsZW1lbnRzLnB1c2goe2VsOnUubm9kZSxpbmRleDpufSk7dmFyIGQ9e2k6bixyZWFsSW5kZXg6bixhbmltYXRpb25EZWxheTpuLGluaXRpYWxTcGVlZDphLmNvbmZpZy5jaGFydC5hbmltYXRpb25zLnNwZWVkLGRhdGFDaGFuZ2VTcGVlZDphLmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmR5bmFtaWNBbmltYXRpb24uc3BlZWQsY2xhc3NOYW1lOlwiYXBleGNoYXJ0cy1yYWRhclwiLHNob3VsZENsaXBUb0dyaWQ6ITEsYmluZEV2ZW50c09uUGF0aHM6ITEsc3Ryb2tlOmEuZ2xvYmFscy5zdHJva2UuY29sb3JzW25dLHN0cm9rZUxpbmVDYXA6YS5jb25maWcuc3Ryb2tlLmxpbmVDYXB9LHA9bnVsbDthLmdsb2JhbHMucHJldmlvdXNQYXRocy5sZW5ndGg+MCYmKHA9aS5nZXRQcmV2aW91c1BhdGgobikpO2Zvcih2YXIgYj0wO2I8Yy5saW5lUGF0aHNUby5sZW5ndGg7YisrKXt2YXIgbT1pLmdyYXBoaWNzLnJlbmRlclBhdGhzKGUoZSh7fSxkKSx7fSx7cGF0aEZyb206bnVsbD09PXA/Yy5saW5lUGF0aHNGcm9tW2JdOnAscGF0aFRvOmMubGluZVBhdGhzVG9bYl0sc3Ryb2tlV2lkdGg6QXJyYXkuaXNBcnJheShpLnN0cm9rZVdpZHRoKT9pLnN0cm9rZVdpZHRoW25dOmkuc3Ryb2tlV2lkdGgsZmlsbDpcIm5vbmVcIixkcmF3U2hhZG93OiExfSkpO2guYWRkKG0pO3ZhciB5PXMuZmlsbFBhdGgoe3Nlcmllc051bWJlcjpufSksdz1pLmdyYXBoaWNzLnJlbmRlclBhdGhzKGUoZSh7fSxkKSx7fSx7cGF0aEZyb206bnVsbD09PXA/Yy5hcmVhUGF0aHNGcm9tW2JdOnAscGF0aFRvOmMuYXJlYVBhdGhzVG9bYl0sc3Ryb2tlV2lkdGg6MCxmaWxsOnksZHJhd1NoYWRvdzohMX0pKTtpZihhLmNvbmZpZy5jaGFydC5kcm9wU2hhZG93LmVuYWJsZWQpe3ZhciBrPW5ldyB2KGkuY3R4KSxBPWEuY29uZmlnLmNoYXJ0LmRyb3BTaGFkb3c7ay5kcm9wU2hhZG93KHcsT2JqZWN0LmFzc2lnbih7fSxBLHtub1VzZXJTcGFjZU9uVXNlOiEwfSksbil9aC5hZGQodyl9dC5mb3JFYWNoKChmdW5jdGlvbih0LHMpe3ZhciByPW5ldyBSKGkuY3R4KS5nZXRNYXJrZXJDb25maWcoe2Nzc0NsYXNzOlwiYXBleGNoYXJ0cy1tYXJrZXJcIixzZXJpZXNJbmRleDpuLGRhdGFQb2ludEluZGV4OnN9KSxsPWkuZ3JhcGhpY3MuZHJhd01hcmtlcihnW3NdLngsZ1tzXS55LHIpO2wuYXR0cihcInJlbFwiLHMpLGwuYXR0cihcImpcIixzKSxsLmF0dHIoXCJpbmRleFwiLG4pLGwubm9kZS5zZXRBdHRyaWJ1dGUoXCJkZWZhdWx0LW1hcmtlci1zaXplXCIsci5wU2l6ZSk7dmFyIGM9aS5ncmFwaGljcy5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLXNlcmllcy1tYXJrZXJzXCJ9KTtjJiZjLmFkZChsKSx1LmFkZChjKSxoLmFkZCh1KTt2YXIgZD1hLmNvbmZpZy5kYXRhTGFiZWxzO2lmKGQuZW5hYmxlZCl7dmFyIHA9ZC5mb3JtYXR0ZXIoYS5nbG9iYWxzLnNlcmllc1tuXVtzXSx7c2VyaWVzSW5kZXg6bixkYXRhUG9pbnRJbmRleDpzLHc6YX0pO28ucGxvdERhdGFMYWJlbHNUZXh0KHt4Omdbc10ueCx5Omdbc10ueSx0ZXh0OnAsdGV4dEFuY2hvcjpcIm1pZGRsZVwiLGk6bixqOm4scGFyZW50OmYsb2Zmc2V0Q29ycmVjdGlvbjohMSxkYXRhTGFiZWxzQ29uZmlnOmUoe30sZCl9KX1oLmFkZChmKX0pKSxyLnB1c2goaCl9KSksdGhpcy5kcmF3UG9seWdvbnMoe3BhcmVudDpkfSksYS5jb25maWcueGF4aXMubGFiZWxzLnNob3cpe3ZhciBwPXRoaXMuZHJhd1hBeGlzVGV4dHMoKTtkLmFkZChwKX1yZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbih0KXtkLmFkZCh0KX0pKSxkLmFkZCh0aGlzLnlheGlzTGFiZWxzKSxkfX0se2tleTpcImRyYXdQb2x5Z29uc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLGk9dGhpcy53LGE9dC5wYXJlbnQscz1uZXcgQ3QodGhpcy5jdHgpLHI9aS5nbG9iYWxzLnlBeGlzU2NhbGVbMF0ucmVzdWx0LnJldmVyc2UoKSxvPXIubGVuZ3RoLG49W10sbD10aGlzLnNpemUvKG8tMSksaD0wO2g8bztoKyspbltoXT1sKmg7bi5yZXZlcnNlKCk7dmFyIGM9W10sZD1bXTtuLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7dmFyIGE9eC5nZXRQb2x5Z29uUG9zKHQsZS5kYXRhUG9pbnRzTGVuKSxzPVwiXCI7YS5mb3JFYWNoKChmdW5jdGlvbih0LGEpe2lmKDA9PT1pKXt2YXIgcj1lLmdyYXBoaWNzLmRyYXdMaW5lKHQueCx0LnksMCwwLEFycmF5LmlzQXJyYXkoZS5wb2x5Z29ucy5jb25uZWN0b3JDb2xvcnMpP2UucG9seWdvbnMuY29ubmVjdG9yQ29sb3JzW2FdOmUucG9seWdvbnMuY29ubmVjdG9yQ29sb3JzKTtkLnB1c2gocil9MD09PWEmJmUueWF4aXNMYWJlbHNUZXh0c1Bvcy5wdXNoKHt4OnQueCx5OnQueX0pLHMrPXQueCtcIixcIit0LnkrXCIgXCJ9KSksYy5wdXNoKHMpfSkpLGMuZm9yRWFjaCgoZnVuY3Rpb24odCxzKXt2YXIgcj1lLnBvbHlnb25zLnN0cm9rZUNvbG9ycyxvPWUucG9seWdvbnMuc3Ryb2tlV2lkdGgsbj1lLmdyYXBoaWNzLmRyYXdQb2x5Z29uKHQsQXJyYXkuaXNBcnJheShyKT9yW3NdOnIsQXJyYXkuaXNBcnJheShvKT9vW3NdOm8saS5nbG9iYWxzLnJhZGFyUG9seWdvbnMuZmlsbC5jb2xvcnNbc10pO2EuYWRkKG4pfSkpLGQuZm9yRWFjaCgoZnVuY3Rpb24odCl7YS5hZGQodCl9KSksaS5jb25maWcueWF4aXNbMF0uc2hvdyYmdGhpcy55YXhpc0xhYmVsc1RleHRzUG9zLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7dmFyIGE9cy5kcmF3WUF4aXNUZXh0cyh0LngsdC55LGkscltpXSk7ZS55YXhpc0xhYmVscy5hZGQoYSl9KSl9fSx7a2V5OlwiZHJhd1hBeGlzVGV4dHNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT10aGlzLncsYT1pLmNvbmZpZy54YXhpcy5sYWJlbHMscz10aGlzLmdyYXBoaWNzLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMteGF4aXNcIn0pLHI9eC5nZXRQb2x5Z29uUG9zKHRoaXMuc2l6ZSx0aGlzLmRhdGFQb2ludHNMZW4pO3JldHVybiBpLmdsb2JhbHMubGFiZWxzLmZvckVhY2goKGZ1bmN0aW9uKG8sbil7dmFyIGw9aS5jb25maWcueGF4aXMubGFiZWxzLmZvcm1hdHRlcixoPW5ldyBIKHQuY3R4KTtpZihyW25dKXt2YXIgYz10LmdldFRleHRQb3MocltuXSx0LnNpemUpLGQ9bChvLHtzZXJpZXNJbmRleDotMSxkYXRhUG9pbnRJbmRleDpuLHc6aX0pO2gucGxvdERhdGFMYWJlbHNUZXh0KHt4OmMubmV3WCx5OmMubmV3WSx0ZXh0OmQsdGV4dEFuY2hvcjpjLnRleHRBbmNob3IsaTpuLGo6bixwYXJlbnQ6cyxjb2xvcjpBcnJheS5pc0FycmF5KGEuc3R5bGUuY29sb3JzKSYmYS5zdHlsZS5jb2xvcnNbbl0/YS5zdHlsZS5jb2xvcnNbbl06XCIjYThhOGE4XCIsZGF0YUxhYmVsc0NvbmZpZzplKHt0ZXh0QW5jaG9yOmMudGV4dEFuY2hvcixkcm9wU2hhZG93OntlbmFibGVkOiExfX0sYSksb2Zmc2V0Q29ycmVjdGlvbjohMX0pfX0pKSxzfX0se2tleTpcImNyZWF0ZVBhdGhzXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLGE9W10scz1bXSxyPVtdLG89W107aWYodC5sZW5ndGgpe3M9W3RoaXMuZ3JhcGhpY3MubW92ZShlLngsZS55KV0sbz1bdGhpcy5ncmFwaGljcy5tb3ZlKGUueCxlLnkpXTt2YXIgbj10aGlzLmdyYXBoaWNzLm1vdmUodFswXS54LHRbMF0ueSksbD10aGlzLmdyYXBoaWNzLm1vdmUodFswXS54LHRbMF0ueSk7dC5mb3JFYWNoKChmdW5jdGlvbihlLGEpe24rPWkuZ3JhcGhpY3MubGluZShlLngsZS55KSxsKz1pLmdyYXBoaWNzLmxpbmUoZS54LGUueSksYT09PXQubGVuZ3RoLTEmJihuKz1cIlpcIixsKz1cIlpcIil9KSksYS5wdXNoKG4pLHIucHVzaChsKX1yZXR1cm57bGluZVBhdGhzRnJvbTpzLGxpbmVQYXRoc1RvOmEsYXJlYVBhdGhzRnJvbTpvLGFyZWFQYXRoc1RvOnJ9fX0se2tleTpcImdldFRleHRQb3NcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPVwibWlkZGxlXCIsYT10Lngscz10Lnk7cmV0dXJuIE1hdGguYWJzKHQueCk+PTEwP3QueD4wPyhpPVwic3RhcnRcIixhKz0xMCk6dC54PDAmJihpPVwiZW5kXCIsYS09MTApOmk9XCJtaWRkbGVcIixNYXRoLmFicyh0LnkpPj1lLTEwJiYodC55PDA/cy09MTA6dC55PjAmJihzKz0xMCkpLHt0ZXh0QW5jaG9yOmksbmV3WDphLG5ld1k6c319fSx7a2V5OlwiZ2V0UHJldmlvdXNQYXRoXCIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudyxpPW51bGwsYT0wO2E8ZS5nbG9iYWxzLnByZXZpb3VzUGF0aHMubGVuZ3RoO2ErKyl7dmFyIHM9ZS5nbG9iYWxzLnByZXZpb3VzUGF0aHNbYV07cy5wYXRocy5sZW5ndGg+MCYmcGFyc2VJbnQocy5yZWFsSW5kZXgsMTApPT09cGFyc2VJbnQodCwxMCkmJnZvaWQgMCE9PWUuZ2xvYmFscy5wcmV2aW91c1BhdGhzW2FdLnBhdGhzWzBdJiYoaT1lLmdsb2JhbHMucHJldmlvdXNQYXRoc1thXS5wYXRoc1swXS5kKX1yZXR1cm4gaX19LHtrZXk6XCJnZXREYXRhUG9pbnRzUG9zXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5kYXRhUG9pbnRzTGVuO3Q9dHx8W10sZT1lfHxbXTtmb3IodmFyIGE9W10scz0wO3M8aTtzKyspe3ZhciByPXt9O3IueD10W3NdKk1hdGguc2luKGVbc10pLHIueT0tdFtzXSpNYXRoLmNvcyhlW3NdKSxhLnB1c2gocil9cmV0dXJuIGF9fV0pLHR9KCksVHQ9ZnVuY3Rpb24odCl7bihpLHQpO3ZhciBlPWQoaSk7ZnVuY3Rpb24gaSh0KXt2YXIgczthKHRoaXMsaSksKHM9ZS5jYWxsKHRoaXMsdCkpLmN0eD10LHMudz10Lncscy5hbmltQmVnaW5BcnI9WzBdLHMuYW5pbUR1cj0wO3ZhciByPXMudztyZXR1cm4gcy5zdGFydEFuZ2xlPXIuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5zdGFydEFuZ2xlLHMuZW5kQW5nbGU9ci5jb25maWcucGxvdE9wdGlvbnMucmFkaWFsQmFyLmVuZEFuZ2xlLHMudG90YWxBbmdsZT1NYXRoLmFicyhyLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIuZW5kQW5nbGUtci5jb25maWcucGxvdE9wdGlvbnMucmFkaWFsQmFyLnN0YXJ0QW5nbGUpLHMudHJhY2tTdGFydEFuZ2xlPXIuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci50cmFjay5zdGFydEFuZ2xlLHMudHJhY2tFbmRBbmdsZT1yLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIudHJhY2suZW5kQW5nbGUscy5kb251dERhdGFMYWJlbHM9cy53LmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIuZGF0YUxhYmVscyxzLnJhZGlhbERhdGFMYWJlbHM9cy5kb251dERhdGFMYWJlbHMscy50cmFja1N0YXJ0QW5nbGV8fChzLnRyYWNrU3RhcnRBbmdsZT1zLnN0YXJ0QW5nbGUpLHMudHJhY2tFbmRBbmdsZXx8KHMudHJhY2tFbmRBbmdsZT1zLmVuZEFuZ2xlKSwzNjA9PT1zLmVuZEFuZ2xlJiYocy5lbmRBbmdsZT0zNTkuOTkpLHMubWFyZ2luPXBhcnNlSW50KHIuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci50cmFjay5tYXJnaW4sMTApLHN9cmV0dXJuIHIoaSxbe2tleTpcImRyYXdcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT1uZXcgbSh0aGlzLmN0eCksYT1pLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtcmFkaWFsYmFyXCJ9KTtpZihlLmdsb2JhbHMubm9EYXRhKXJldHVybiBhO3ZhciBzPWkuZ3JvdXAoKSxyPXRoaXMuZGVmYXVsdFNpemUvMixvPWUuZ2xvYmFscy5ncmlkV2lkdGgvMixuPXRoaXMuZGVmYXVsdFNpemUvMi4wNTtlLmNvbmZpZy5jaGFydC5zcGFya2xpbmUuZW5hYmxlZHx8KG49bi1lLmNvbmZpZy5zdHJva2Uud2lkdGgtZS5jb25maWcuY2hhcnQuZHJvcFNoYWRvdy5ibHVyKTt2YXIgbD1lLmdsb2JhbHMuZmlsbC5jb2xvcnM7aWYoZS5jb25maWcucGxvdE9wdGlvbnMucmFkaWFsQmFyLnRyYWNrLnNob3cpe3ZhciBoPXRoaXMuZHJhd1RyYWNrcyh7c2l6ZTpuLGNlbnRlclg6byxjZW50ZXJZOnIsY29sb3JBcnI6bCxzZXJpZXM6dH0pO3MuYWRkKGgpfXZhciBjPXRoaXMuZHJhd0FyY3Moe3NpemU6bixjZW50ZXJYOm8sY2VudGVyWTpyLGNvbG9yQXJyOmwsc2VyaWVzOnR9KSxkPTM2MDtlLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIuc3RhcnRBbmdsZTwwJiYoZD10aGlzLnRvdGFsQW5nbGUpO3ZhciBnPSgzNjAtZCkvMzYwO2lmKGUuZ2xvYmFscy5yYWRpYWxTaXplPW4tbipnLHRoaXMucmFkaWFsRGF0YUxhYmVscy52YWx1ZS5zaG93KXt2YXIgdT1NYXRoLm1heCh0aGlzLnJhZGlhbERhdGFMYWJlbHMudmFsdWUub2Zmc2V0WSx0aGlzLnJhZGlhbERhdGFMYWJlbHMubmFtZS5vZmZzZXRZKTtlLmdsb2JhbHMucmFkaWFsU2l6ZSs9dSpnfXJldHVybiBzLmFkZChjLmcpLFwiZnJvbnRcIj09PWUuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5ob2xsb3cucG9zaXRpb24mJihjLmcuYWRkKGMuZWxIb2xsb3cpLGMuZGF0YUxhYmVscyYmYy5nLmFkZChjLmRhdGFMYWJlbHMpKSxhLmFkZChzKSxhfX0se2tleTpcImRyYXdUcmFja3NcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT1uZXcgbSh0aGlzLmN0eCksYT1pLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtdHJhY2tzXCJ9KSxzPW5ldyB2KHRoaXMuY3R4KSxyPW5ldyBGKHRoaXMuY3R4KSxvPXRoaXMuZ2V0U3Ryb2tlV2lkdGgodCk7dC5zaXplPXQuc2l6ZS1vLzI7Zm9yKHZhciBuPTA7bjx0LnNlcmllcy5sZW5ndGg7bisrKXt2YXIgbD1pLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtcmFkaWFsYmFyLXRyYWNrIGFwZXhjaGFydHMtdHJhY2tcIn0pO2EuYWRkKGwpLGwuYXR0cih7cmVsOm4rMX0pLHQuc2l6ZT10LnNpemUtby10aGlzLm1hcmdpbjt2YXIgaD1lLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIudHJhY2ssYz1yLmZpbGxQYXRoKHtzZXJpZXNOdW1iZXI6MCxzaXplOnQuc2l6ZSxmaWxsQ29sb3JzOkFycmF5LmlzQXJyYXkoaC5iYWNrZ3JvdW5kKT9oLmJhY2tncm91bmRbbl06aC5iYWNrZ3JvdW5kLHNvbGlkOiEwfSksZD10aGlzLnRyYWNrU3RhcnRBbmdsZSxnPXRoaXMudHJhY2tFbmRBbmdsZTtNYXRoLmFicyhnKStNYXRoLmFicyhkKT49MzYwJiYoZz0zNjAtTWF0aC5hYnModGhpcy5zdGFydEFuZ2xlKS0uMSk7dmFyIHU9aS5kcmF3UGF0aCh7ZDpcIlwiLHN0cm9rZTpjLHN0cm9rZVdpZHRoOm8qcGFyc2VJbnQoaC5zdHJva2VXaWR0aCwxMCkvMTAwLGZpbGw6XCJub25lXCIsc3Ryb2tlT3BhY2l0eTpoLm9wYWNpdHksY2xhc3NlczpcImFwZXhjaGFydHMtcmFkaWFsYmFyLWFyZWFcIn0pO2lmKGguZHJvcFNoYWRvdy5lbmFibGVkKXt2YXIgZj1oLmRyb3BTaGFkb3c7cy5kcm9wU2hhZG93KHUsZil9bC5hZGQodSksdS5hdHRyKFwiaWRcIixcImFwZXhjaGFydHMtcmFkaWFsYmFyVHJhY2stXCIrbiksdGhpcy5hbmltYXRlUGF0aHModSx7Y2VudGVyWDp0LmNlbnRlclgsY2VudGVyWTp0LmNlbnRlclksZW5kQW5nbGU6ZyxzdGFydEFuZ2xlOmQsc2l6ZTp0LnNpemUsaTpuLHRvdGFsSXRlbXM6MixhbmltQmVnaW5BcnI6MCxkdXI6MCxpc1RyYWNrOiEwLGVhc2luZzplLmdsb2JhbHMuZWFzaW5nfSl9cmV0dXJuIGF9fSx7a2V5OlwiZHJhd0FyY3NcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLncsaT1uZXcgbSh0aGlzLmN0eCksYT1uZXcgRih0aGlzLmN0eCkscz1uZXcgdih0aGlzLmN0eCkscj1pLmdyb3VwKCksbz10aGlzLmdldFN0cm9rZVdpZHRoKHQpO3Quc2l6ZT10LnNpemUtby8yO3ZhciBuPWUuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5ob2xsb3cuYmFja2dyb3VuZCxsPXQuc2l6ZS1vKnQuc2VyaWVzLmxlbmd0aC10aGlzLm1hcmdpbip0LnNlcmllcy5sZW5ndGgtbypwYXJzZUludChlLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIudHJhY2suc3Ryb2tlV2lkdGgsMTApLzEwMC8yLGg9bC1lLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIuaG9sbG93Lm1hcmdpbjt2b2lkIDAhPT1lLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIuaG9sbG93LmltYWdlJiYobj10aGlzLmRyYXdIb2xsb3dJbWFnZSh0LHIsbCxuKSk7dmFyIGM9dGhpcy5kcmF3SG9sbG93KHtzaXplOmgsY2VudGVyWDp0LmNlbnRlclgsY2VudGVyWTp0LmNlbnRlclksZmlsbDpufHxcInRyYW5zcGFyZW50XCJ9KTtpZihlLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIuaG9sbG93LmRyb3BTaGFkb3cuZW5hYmxlZCl7dmFyIGQ9ZS5jb25maWcucGxvdE9wdGlvbnMucmFkaWFsQmFyLmhvbGxvdy5kcm9wU2hhZG93O3MuZHJvcFNoYWRvdyhjLGQpfXZhciBnPTE7IXRoaXMucmFkaWFsRGF0YUxhYmVscy50b3RhbC5zaG93JiZlLmdsb2JhbHMuc2VyaWVzLmxlbmd0aD4xJiYoZz0wKTt2YXIgdT1udWxsO3RoaXMucmFkaWFsRGF0YUxhYmVscy5zaG93JiYodT10aGlzLnJlbmRlcklubmVyRGF0YUxhYmVscyh0aGlzLnJhZGlhbERhdGFMYWJlbHMse2hvbGxvd1NpemU6bCxjZW50ZXJYOnQuY2VudGVyWCxjZW50ZXJZOnQuY2VudGVyWSxvcGFjaXR5Omd9KSksXCJiYWNrXCI9PT1lLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIuaG9sbG93LnBvc2l0aW9uJiYoci5hZGQoYyksdSYmci5hZGQodSkpO3ZhciBmPSExO2UuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5pbnZlcnNlT3JkZXImJihmPSEwKTtmb3IodmFyIHA9Zj90LnNlcmllcy5sZW5ndGgtMTowO2Y/cD49MDpwPHQuc2VyaWVzLmxlbmd0aDtmP3AtLTpwKyspe3ZhciBiPWkuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1zZXJpZXMgYXBleGNoYXJ0cy1yYWRpYWwtc2VyaWVzXCIsc2VyaWVzTmFtZTp4LmVzY2FwZVN0cmluZyhlLmdsb2JhbHMuc2VyaWVzTmFtZXNbcF0pfSk7ci5hZGQoYiksYi5hdHRyKHtyZWw6cCsxLFwiZGF0YTpyZWFsSW5kZXhcIjpwfSksdGhpcy5jdHguc2VyaWVzLmFkZENvbGxhcHNlZENsYXNzVG9TZXJpZXMoYixwKSx0LnNpemU9dC5zaXplLW8tdGhpcy5tYXJnaW47dmFyIHk9YS5maWxsUGF0aCh7c2VyaWVzTnVtYmVyOnAsc2l6ZTp0LnNpemUsdmFsdWU6dC5zZXJpZXNbcF19KSx3PXRoaXMuc3RhcnRBbmdsZSxrPXZvaWQgMCxBPXgubmVnVG9aZXJvKHQuc2VyaWVzW3BdPjEwMD8xMDA6dC5zZXJpZXNbcF0pLzEwMCxTPU1hdGgucm91bmQodGhpcy50b3RhbEFuZ2xlKkEpK3RoaXMuc3RhcnRBbmdsZSxDPXZvaWQgMDtlLmdsb2JhbHMuZGF0YUNoYW5nZWQmJihrPXRoaXMuc3RhcnRBbmdsZSxDPU1hdGgucm91bmQodGhpcy50b3RhbEFuZ2xlKngubmVnVG9aZXJvKGUuZ2xvYmFscy5wcmV2aW91c1BhdGhzW3BdKS8xMDApK2spLE1hdGguYWJzKFMpK01hdGguYWJzKHcpPj0zNjAmJihTLT0uMDEpLE1hdGguYWJzKEMpK01hdGguYWJzKGspPj0zNjAmJihDLT0uMDEpO3ZhciBMPVMtdyxQPUFycmF5LmlzQXJyYXkoZS5jb25maWcuc3Ryb2tlLmRhc2hBcnJheSk/ZS5jb25maWcuc3Ryb2tlLmRhc2hBcnJheVtwXTplLmNvbmZpZy5zdHJva2UuZGFzaEFycmF5LFQ9aS5kcmF3UGF0aCh7ZDpcIlwiLHN0cm9rZTp5LHN0cm9rZVdpZHRoOm8sZmlsbDpcIm5vbmVcIixmaWxsT3BhY2l0eTplLmNvbmZpZy5maWxsLm9wYWNpdHksY2xhc3NlczpcImFwZXhjaGFydHMtcmFkaWFsYmFyLWFyZWEgYXBleGNoYXJ0cy1yYWRpYWxiYXItc2xpY2UtXCIrcCxzdHJva2VEYXNoQXJyYXk6UH0pO2lmKG0uc2V0QXR0cnMoVC5ub2RlLHtcImRhdGE6YW5nbGVcIjpMLFwiZGF0YTp2YWx1ZVwiOnQuc2VyaWVzW3BdfSksZS5jb25maWcuY2hhcnQuZHJvcFNoYWRvdy5lbmFibGVkKXt2YXIgTT1lLmNvbmZpZy5jaGFydC5kcm9wU2hhZG93O3MuZHJvcFNoYWRvdyhULE0scCl9cy5zZXRTZWxlY3Rpb25GaWx0ZXIoVCwwLHApLHRoaXMuYWRkTGlzdGVuZXJzKFQsdGhpcy5yYWRpYWxEYXRhTGFiZWxzKSxiLmFkZChUKSxULmF0dHIoe2luZGV4OjAsajpwfSk7dmFyIEk9MDshdGhpcy5pbml0aWFsQW5pbXx8ZS5nbG9iYWxzLnJlc2l6ZWR8fGUuZ2xvYmFscy5kYXRhQ2hhbmdlZHx8KEk9ZS5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5zcGVlZCksZS5nbG9iYWxzLmRhdGFDaGFuZ2VkJiYoST1lLmNvbmZpZy5jaGFydC5hbmltYXRpb25zLmR5bmFtaWNBbmltYXRpb24uc3BlZWQpLHRoaXMuYW5pbUR1cj1JLygxLjIqdC5zZXJpZXMubGVuZ3RoKSt0aGlzLmFuaW1EdXIsdGhpcy5hbmltQmVnaW5BcnIucHVzaCh0aGlzLmFuaW1EdXIpLHRoaXMuYW5pbWF0ZVBhdGhzKFQse2NlbnRlclg6dC5jZW50ZXJYLGNlbnRlclk6dC5jZW50ZXJZLGVuZEFuZ2xlOlMsc3RhcnRBbmdsZTp3LHByZXZFbmRBbmdsZTpDLHByZXZTdGFydEFuZ2xlOmssc2l6ZTp0LnNpemUsaTpwLHRvdGFsSXRlbXM6MixhbmltQmVnaW5BcnI6dGhpcy5hbmltQmVnaW5BcnIsZHVyOkksc2hvdWxkU2V0UHJldlBhdGhzOiEwLGVhc2luZzplLmdsb2JhbHMuZWFzaW5nfSl9cmV0dXJue2c6cixlbEhvbGxvdzpjLGRhdGFMYWJlbHM6dX19fSx7a2V5OlwiZHJhd0hvbGxvd1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBtKHRoaXMuY3R4KS5kcmF3Q2lyY2xlKDIqdC5zaXplKTtyZXR1cm4gZS5hdHRyKHtjbGFzczpcImFwZXhjaGFydHMtcmFkaWFsYmFyLWhvbGxvd1wiLGN4OnQuY2VudGVyWCxjeTp0LmNlbnRlclkscjp0LnNpemUsZmlsbDp0LmZpbGx9KSxlfX0se2tleTpcImRyYXdIb2xsb3dJbWFnZVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBzPXRoaXMudyxyPW5ldyBGKHRoaXMuY3R4KSxvPXgucmFuZG9tSWQoKSxuPXMuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5ob2xsb3cuaW1hZ2U7aWYocy5jb25maWcucGxvdE9wdGlvbnMucmFkaWFsQmFyLmhvbGxvdy5pbWFnZUNsaXBwZWQpci5jbGlwcGVkSW1nQXJlYSh7d2lkdGg6aSxoZWlnaHQ6aSxpbWFnZTpuLHBhdHRlcm5JRDpcInBhdHRlcm5cIi5jb25jYXQocy5nbG9iYWxzLmN1aWQpLmNvbmNhdChvKX0pLGE9XCJ1cmwoI3BhdHRlcm5cIi5jb25jYXQocy5nbG9iYWxzLmN1aWQpLmNvbmNhdChvLFwiKVwiKTtlbHNle3ZhciBsPXMuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5ob2xsb3cuaW1hZ2VXaWR0aCxoPXMuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5ob2xsb3cuaW1hZ2VIZWlnaHQ7aWYodm9pZCAwPT09bCYmdm9pZCAwPT09aCl7dmFyIGM9cy5nbG9iYWxzLmRvbS5QYXBlci5pbWFnZShuKS5sb2FkZWQoKGZ1bmN0aW9uKGUpe3RoaXMubW92ZSh0LmNlbnRlclgtZS53aWR0aC8yK3MuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5ob2xsb3cuaW1hZ2VPZmZzZXRYLHQuY2VudGVyWS1lLmhlaWdodC8yK3MuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5ob2xsb3cuaW1hZ2VPZmZzZXRZKX0pKTtlLmFkZChjKX1lbHNle3ZhciBkPXMuZ2xvYmFscy5kb20uUGFwZXIuaW1hZ2UobikubG9hZGVkKChmdW5jdGlvbihlKXt0aGlzLm1vdmUodC5jZW50ZXJYLWwvMitzLmNvbmZpZy5wbG90T3B0aW9ucy5yYWRpYWxCYXIuaG9sbG93LmltYWdlT2Zmc2V0WCx0LmNlbnRlclktaC8yK3MuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5ob2xsb3cuaW1hZ2VPZmZzZXRZKSx0aGlzLnNpemUobCxoKX0pKTtlLmFkZChkKX19cmV0dXJuIGF9fSx7a2V5OlwiZ2V0U3Ryb2tlV2lkdGhcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnc7cmV0dXJuIHQuc2l6ZSooMTAwLXBhcnNlSW50KGUuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5ob2xsb3cuc2l6ZSwxMCkpLzEwMC8odC5zZXJpZXMubGVuZ3RoKzEpLXRoaXMubWFyZ2lufX1dKSxpfShMdCksTXQ9ZnVuY3Rpb24odCl7bihzLHQpO3ZhciBpPWQocyk7ZnVuY3Rpb24gcygpe3JldHVybiBhKHRoaXMscyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHIocyxbe2tleTpcImRyYXdcIix2YWx1ZTpmdW5jdGlvbih0LGkpe3ZhciBhPXRoaXMudyxzPW5ldyBtKHRoaXMuY3R4KTt0aGlzLnJhbmdlQmFyT3B0aW9ucz10aGlzLncuY29uZmlnLnBsb3RPcHRpb25zLnJhbmdlQmFyLHRoaXMuc2VyaWVzPXQsdGhpcy5zZXJpZXNSYW5nZVN0YXJ0PWEuZ2xvYmFscy5zZXJpZXNSYW5nZVN0YXJ0LHRoaXMuc2VyaWVzUmFuZ2VFbmQ9YS5nbG9iYWxzLnNlcmllc1JhbmdlRW5kLHRoaXMuYmFySGVscGVycy5pbml0VmFyaWFibGVzKHQpO2Zvcih2YXIgcj1zLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtcmFuZ2ViYXItc2VyaWVzIGFwZXhjaGFydHMtcGxvdC1zZXJpZXNcIn0pLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIG4sbCxoLGM9dm9pZCAwLGQ9dm9pZCAwLGc9dm9pZCAwLHU9YS5nbG9iYWxzLmNvbWJvQ2hhcnRzP2lbb106byxmPXMuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1zZXJpZXNcIixzZXJpZXNOYW1lOnguZXNjYXBlU3RyaW5nKGEuZ2xvYmFscy5zZXJpZXNOYW1lc1t1XSkscmVsOm8rMSxcImRhdGE6cmVhbEluZGV4XCI6dX0pO3RoaXMuY3R4LnNlcmllcy5hZGRDb2xsYXBzZWRDbGFzc1RvU2VyaWVzKGYsdSksdFtvXS5sZW5ndGg+MCYmKHRoaXMudmlzaWJsZUk9dGhpcy52aXNpYmxlSSsxKTt2YXIgcD0wLGI9MDt0aGlzLnlSYXRpby5sZW5ndGg+MSYmKHRoaXMueWF4aXNJbmRleD11KTt2YXIgdj10aGlzLmJhckhlbHBlcnMuaW5pdGlhbFBvc2l0aW9ucygpO2Q9di55LGg9di56ZXJvVyxjPXYueCxiPXYuYmFyV2lkdGgsbj12LnhEaXZpc2lvbixsPXYuemVyb0g7Zm9yKHZhciB5PXMuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1kYXRhbGFiZWxzXCIsXCJkYXRhOnJlYWxJbmRleFwiOnV9KSx3PXMuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1yYW5nZWJhci1nb2Fscy1tYXJrZXJzXCIsc3R5bGU6XCJwb2ludGVyLWV2ZW50czogbm9uZVwifSksaz0wO2s8YS5nbG9iYWxzLmRhdGFQb2ludHM7aysrKXt2YXIgQT10aGlzLmJhckhlbHBlcnMuZ2V0U3Ryb2tlV2lkdGgobyxrLHUpLFM9dGhpcy5zZXJpZXNSYW5nZVN0YXJ0W29dW2tdLEM9dGhpcy5zZXJpZXNSYW5nZUVuZFtvXVtrXSxMPW51bGwsUD1udWxsLFQ9e3g6Yyx5OmQsc3Ryb2tlV2lkdGg6QSxlbFNlcmllczpmfTtpZihnPXYueURpdmlzaW9uLHA9di5iYXJIZWlnaHQsdGhpcy5pc0hvcml6b250YWwpe1A9ZCtwKnRoaXMudmlzaWJsZUk7dmFyIE09dGhpcy5zZXJpZXNMZW47YS5jb25maWcucGxvdE9wdGlvbnMuYmFyLnJhbmdlQmFyR3JvdXBSb3dzJiYoTT0xKTt2YXIgST0oZy1wKk0pLzI7aWYodm9pZCAwPT09YS5jb25maWcuc2VyaWVzW29dLmRhdGFba10pYnJlYWs7aWYoYS5jb25maWcuc2VyaWVzW29dLmRhdGFba10ueCl7dmFyIFg9dGhpcy5kZXRlY3RPdmVybGFwcGluZ0JhcnMoe2k6byxqOmssYmFyWVBvc2l0aW9uOlAsc3J0eTpJLGJhckhlaWdodDpwLHlEaXZpc2lvbjpnLGluaXRQb3NpdGlvbnM6dn0pO3A9WC5iYXJIZWlnaHQsUD1YLmJhcllQb3NpdGlvbn1iPShMPXRoaXMuZHJhd1JhbmdlQmFyUGF0aHMoZSh7aW5kZXhlczp7aTpvLGo6ayxyZWFsSW5kZXg6dX0sYmFySGVpZ2h0OnAsYmFyWVBvc2l0aW9uOlAsemVyb1c6aCx5RGl2aXNpb246Zyx5MTpTLHkyOkN9LFQpKSkuYmFyV2lkdGh9ZWxzZSBwPShMPXRoaXMuZHJhd1JhbmdlQ29sdW1uUGF0aHMoZSh7aW5kZXhlczp7aTpvLGo6ayxyZWFsSW5kZXg6dX0semVyb0g6bCxiYXJXaWR0aDpiLHhEaXZpc2lvbjpufSxUKSkpLmJhckhlaWdodDt2YXIgej10aGlzLmJhckhlbHBlcnMuZHJhd0dvYWxMaW5lKHtiYXJYUG9zaXRpb246TC5iYXJYUG9zaXRpb24sYmFyWVBvc2l0aW9uOlAsZ29hbFg6TC5nb2FsWCxnb2FsWTpMLmdvYWxZLGJhckhlaWdodDpwLGJhcldpZHRoOmJ9KTt6JiZ3LmFkZCh6KSxkPUwueSxjPUwueDt2YXIgRT10aGlzLmJhckhlbHBlcnMuZ2V0UGF0aEZpbGxDb2xvcih0LG8sayx1KSxZPWEuZ2xvYmFscy5zdHJva2UuY29sb3JzW3VdO3RoaXMucmVuZGVyU2VyaWVzKHtyZWFsSW5kZXg6dSxwYXRoRmlsbDpFLGxpbmVGaWxsOlksajprLGk6byx4OmMseTpkLHkxOlMseTI6QyxwYXRoRnJvbTpMLnBhdGhGcm9tLHBhdGhUbzpMLnBhdGhUbyxzdHJva2VXaWR0aDpBLGVsU2VyaWVzOmYsc2VyaWVzOnQsYmFySGVpZ2h0OnAsYmFyWVBvc2l0aW9uOlAsYmFyV2lkdGg6YixlbERhdGFMYWJlbHNXcmFwOnksZWxHb2Fsc01hcmtlcnM6dyx2aXNpYmxlU2VyaWVzOnRoaXMudmlzaWJsZUksdHlwZTpcInJhbmdlYmFyXCJ9KX1yLmFkZChmKX1yZXR1cm4gcn19LHtrZXk6XCJkZXRlY3RPdmVybGFwcGluZ0JhcnNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmksaT10LmosYT10LmJhcllQb3NpdGlvbixzPXQuc3J0eSxyPXQuYmFySGVpZ2h0LG89dC55RGl2aXNpb24sbj10LmluaXRQb3NpdGlvbnMsbD10aGlzLncsaD1bXSxjPWwuY29uZmlnLnNlcmllc1tlXS5kYXRhW2ldLnJhbmdlTmFtZSxkPWwuY29uZmlnLnNlcmllc1tlXS5kYXRhW2ldLngsZz1sLmdsb2JhbHMubGFiZWxzLmluZGV4T2YoZCksdT1sLmdsb2JhbHMuc2VyaWVzUmFuZ2VbZV0uZmluZEluZGV4KChmdW5jdGlvbih0KXtyZXR1cm4gdC54PT09ZCYmdC5vdmVybGFwcy5sZW5ndGg+MH0pKTtyZXR1cm4gYT1sLmNvbmZpZy5wbG90T3B0aW9ucy5iYXIucmFuZ2VCYXJHcm91cFJvd3M/cytvKmc6cytyKnRoaXMudmlzaWJsZUkrbypnLHU+LTEmJiFsLmNvbmZpZy5wbG90T3B0aW9ucy5iYXIucmFuZ2VCYXJPdmVybGFwJiYoaD1sLmdsb2JhbHMuc2VyaWVzUmFuZ2VbZV1bdV0ub3ZlcmxhcHMpLmluZGV4T2YoYyk+LTEmJihhPShyPW4uYmFySGVpZ2h0L2gubGVuZ3RoKSp0aGlzLnZpc2libGVJK28qKDEwMC1wYXJzZUludCh0aGlzLmJhck9wdGlvbnMuYmFySGVpZ2h0LDEwKSkvMTAwLzIrcioodGhpcy52aXNpYmxlSStoLmluZGV4T2YoYykpK28qZykse2JhcllQb3NpdGlvbjphLGJhckhlaWdodDpyfX19LHtrZXk6XCJkcmF3UmFuZ2VDb2x1bW5QYXRoc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhlcyxpPXQueDt0LnN0cm9rZVdpZHRoO3ZhciBhPXQueERpdmlzaW9uLHM9dC5iYXJXaWR0aCxyPXQuemVyb0gsbz10aGlzLncsbj1lLmksbD1lLmosaD10aGlzLnlSYXRpb1t0aGlzLnlheGlzSW5kZXhdLGM9ZS5yZWFsSW5kZXgsZD10aGlzLmdldFJhbmdlVmFsdWUoYyxsKSxnPU1hdGgubWluKGQuc3RhcnQsZC5lbmQpLHU9TWF0aC5tYXgoZC5zdGFydCxkLmVuZCk7by5nbG9iYWxzLmlzWE51bWVyaWMmJihpPShvLmdsb2JhbHMuc2VyaWVzWFtuXVtsXS1vLmdsb2JhbHMubWluWCkvdGhpcy54UmF0aW8tcy8yKTt2YXIgZj1pK3MqdGhpcy52aXNpYmxlSTt2b2lkIDA9PT10aGlzLnNlcmllc1tuXVtsXXx8bnVsbD09PXRoaXMuc2VyaWVzW25dW2xdP2c9cjooZz1yLWcvaCx1PXItdS9oKTt2YXIgcD1NYXRoLmFicyh1LWcpLHg9dGhpcy5iYXJIZWxwZXJzLmdldENvbHVtblBhdGhzKHtiYXJYUG9zaXRpb246ZixiYXJXaWR0aDpzLHkxOmcseTI6dSxzdHJva2VXaWR0aDp0aGlzLnN0cm9rZVdpZHRoLHNlcmllczp0aGlzLnNlcmllc1JhbmdlRW5kLHJlYWxJbmRleDplLnJlYWxJbmRleCxpOmMsajpsLHc6b30pO3JldHVybiBvLmdsb2JhbHMuaXNYTnVtZXJpY3x8KGkrPWEpLHtwYXRoVG86eC5wYXRoVG8scGF0aEZyb206eC5wYXRoRnJvbSxiYXJIZWlnaHQ6cCx4OmkseTp1LGdvYWxZOnRoaXMuYmFySGVscGVycy5nZXRHb2FsVmFsdWVzKFwieVwiLG51bGwscixuLGwpLGJhclhQb3NpdGlvbjpmfX19LHtrZXk6XCJkcmF3UmFuZ2VCYXJQYXRoc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhlcyxpPXQueSxhPXQueTEscz10LnkyLHI9dC55RGl2aXNpb24sbz10LmJhckhlaWdodCxuPXQuYmFyWVBvc2l0aW9uLGw9dC56ZXJvVyxoPXRoaXMudyxjPWwrYS90aGlzLmludmVydGVkWVJhdGlvLGQ9bCtzL3RoaXMuaW52ZXJ0ZWRZUmF0aW8sZz1NYXRoLmFicyhkLWMpLHU9dGhpcy5iYXJIZWxwZXJzLmdldEJhcnBhdGhzKHtiYXJZUG9zaXRpb246bixiYXJIZWlnaHQ6byx4MTpjLHgyOmQsc3Ryb2tlV2lkdGg6dGhpcy5zdHJva2VXaWR0aCxzZXJpZXM6dGhpcy5zZXJpZXNSYW5nZUVuZCxpOmUucmVhbEluZGV4LHJlYWxJbmRleDplLnJlYWxJbmRleCxqOmUuaix3Omh9KTtyZXR1cm4gaC5nbG9iYWxzLmlzWE51bWVyaWN8fChpKz1yKSx7cGF0aFRvOnUucGF0aFRvLHBhdGhGcm9tOnUucGF0aEZyb20sYmFyV2lkdGg6Zyx4OmQsZ29hbFg6dGhpcy5iYXJIZWxwZXJzLmdldEdvYWxWYWx1ZXMoXCJ4XCIsbCxudWxsLGUucmVhbEluZGV4LGUuaikseTppfX19LHtrZXk6XCJnZXRSYW5nZVZhbHVlXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnc7cmV0dXJue3N0YXJ0OmkuZ2xvYmFscy5zZXJpZXNSYW5nZVN0YXJ0W3RdW2VdLGVuZDppLmdsb2JhbHMuc2VyaWVzUmFuZ2VFbmRbdF1bZV19fX1dKSxzfSh5dCksSXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLnc9ZS53LHRoaXMubGluZUN0eD1lfXJldHVybiByKHQsW3trZXk6XCJzYW1lVmFsdWVTZXJpZXNGaXhcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudztpZigoXCJncmFkaWVudFwiPT09aS5jb25maWcuZmlsbC50eXBlfHxcImdyYWRpZW50XCI9PT1pLmNvbmZpZy5maWxsLnR5cGVbdF0pJiZuZXcgeSh0aGlzLmxpbmVDdHguY3R4LGkpLnNlcmllc0hhdmVTYW1lVmFsdWVzKHQpKXt2YXIgYT1lW3RdLnNsaWNlKCk7YVthLmxlbmd0aC0xXT1hW2EubGVuZ3RoLTFdKzFlLTYsZVt0XT1hfXJldHVybiBlfX0se2tleTpcImNhbGN1bGF0ZVBvaW50c1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VyaWVzLGk9dC5yZWFsSW5kZXgsYT10Lngscz10Lnkscj10Lmksbz10Lmosbj10LnByZXZZLGw9dGhpcy53LGg9W10sYz1bXTtpZigwPT09byl7dmFyIGQ9dGhpcy5saW5lQ3R4LmNhdGVnb3J5QXhpc0NvcnJlY3Rpb24rbC5jb25maWcubWFya2Vycy5vZmZzZXRYO2wuZ2xvYmFscy5pc1hOdW1lcmljJiYoZD0obC5nbG9iYWxzLnNlcmllc1hbaV1bMF0tbC5nbG9iYWxzLm1pblgpL3RoaXMubGluZUN0eC54UmF0aW8rbC5jb25maWcubWFya2Vycy5vZmZzZXRYKSxoLnB1c2goZCksYy5wdXNoKHguaXNOdW1iZXIoZVtyXVswXSk/bitsLmNvbmZpZy5tYXJrZXJzLm9mZnNldFk6bnVsbCksaC5wdXNoKGErbC5jb25maWcubWFya2Vycy5vZmZzZXRYKSxjLnB1c2goeC5pc051bWJlcihlW3JdW28rMV0pP3MrbC5jb25maWcubWFya2Vycy5vZmZzZXRZOm51bGwpfWVsc2UgaC5wdXNoKGErbC5jb25maWcubWFya2Vycy5vZmZzZXRYKSxjLnB1c2goeC5pc051bWJlcihlW3JdW28rMV0pP3MrbC5jb25maWcubWFya2Vycy5vZmZzZXRZOm51bGwpO3JldHVybnt4OmgseTpjfX19LHtrZXk6XCJjaGVja1ByZXZpb3VzUGF0aHNcIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5wYXRoRnJvbUxpbmUsaT10LnBhdGhGcm9tQXJlYSxhPXQucmVhbEluZGV4LHM9dGhpcy53LHI9MDtyPHMuZ2xvYmFscy5wcmV2aW91c1BhdGhzLmxlbmd0aDtyKyspe3ZhciBvPXMuZ2xvYmFscy5wcmV2aW91c1BhdGhzW3JdOyhcImxpbmVcIj09PW8udHlwZXx8XCJhcmVhXCI9PT1vLnR5cGUpJiZvLnBhdGhzLmxlbmd0aD4wJiZwYXJzZUludChvLnJlYWxJbmRleCwxMCk9PT1wYXJzZUludChhLDEwKSYmKFwibGluZVwiPT09by50eXBlPyh0aGlzLmxpbmVDdHguYXBwZW5kUGF0aEZyb209ITEsZT1zLmdsb2JhbHMucHJldmlvdXNQYXRoc1tyXS5wYXRoc1swXS5kKTpcImFyZWFcIj09PW8udHlwZSYmKHRoaXMubGluZUN0eC5hcHBlbmRQYXRoRnJvbT0hMSxpPXMuZ2xvYmFscy5wcmV2aW91c1BhdGhzW3JdLnBhdGhzWzBdLmQscy5jb25maWcuc3Ryb2tlLnNob3cmJnMuZ2xvYmFscy5wcmV2aW91c1BhdGhzW3JdLnBhdGhzWzFdJiYoZT1zLmdsb2JhbHMucHJldmlvdXNQYXRoc1tyXS5wYXRoc1sxXS5kKSkpfXJldHVybntwYXRoRnJvbUxpbmU6ZSxwYXRoRnJvbUFyZWE6aX19fSx7a2V5OlwiZGV0ZXJtaW5lRmlyc3RQcmV2WVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dC5pLGE9dC5zZXJpZXMscz10LnByZXZZLHI9dC5saW5lWVBvc2l0aW9uLG89dGhpcy53O2lmKHZvaWQgMCE9PShudWxsPT09KGU9YVtpXSl8fHZvaWQgMD09PWU/dm9pZCAwOmVbMF0pKXM9KHI9by5jb25maWcuY2hhcnQuc3RhY2tlZCYmaT4wP3RoaXMubGluZUN0eC5wcmV2U2VyaWVzWVtpLTFdWzBdOnRoaXMubGluZUN0eC56ZXJvWSktYVtpXVswXS90aGlzLmxpbmVDdHgueVJhdGlvW3RoaXMubGluZUN0eC55YXhpc0luZGV4XSsyKih0aGlzLmxpbmVDdHguaXNSZXZlcnNlZD9hW2ldWzBdL3RoaXMubGluZUN0eC55UmF0aW9bdGhpcy5saW5lQ3R4LnlheGlzSW5kZXhdOjApO2Vsc2UgaWYoby5jb25maWcuY2hhcnQuc3RhY2tlZCYmaT4wJiZ2b2lkIDA9PT1hW2ldWzBdKWZvcih2YXIgbj1pLTE7bj49MDtuLS0paWYobnVsbCE9PWFbbl1bMF0mJnZvaWQgMCE9PWFbbl1bMF0pe3M9cj10aGlzLmxpbmVDdHgucHJldlNlcmllc1lbbl1bMF07YnJlYWt9cmV0dXJue3ByZXZZOnMsbGluZVlQb3NpdGlvbjpyfX19XSksdH0oKSxYdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpLHMpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLncsdGhpcy54eVJhdGlvcz1pLHRoaXMucG9pbnRzQ2hhcnQ9IShcImJ1YmJsZVwiIT09dGhpcy53LmNvbmZpZy5jaGFydC50eXBlJiZcInNjYXR0ZXJcIiE9PXRoaXMudy5jb25maWcuY2hhcnQudHlwZSl8fHMsdGhpcy5zY2F0dGVyPW5ldyBEKHRoaXMuY3R4KSx0aGlzLm5vTmVnYXRpdmVzPXRoaXMudy5nbG9iYWxzLm1pblg9PT1OdW1iZXIuTUFYX1ZBTFVFLHRoaXMubGluZUhlbHBlcnM9bmV3IEl0KHRoaXMpLHRoaXMubWFya2Vycz1uZXcgUih0aGlzLmN0eCksdGhpcy5wcmV2U2VyaWVzWT1bXSx0aGlzLmNhdGVnb3J5QXhpc0NvcnJlY3Rpb249MCx0aGlzLnlheGlzSW5kZXg9MH1yZXR1cm4gcih0LFt7a2V5OlwiZHJhd1wiLHZhbHVlOmZ1bmN0aW9uKHQsaSxhLHMpe3ZhciByPXRoaXMudyxvPW5ldyBtKHRoaXMuY3R4KSxuPXIuZ2xvYmFscy5jb21ib0NoYXJ0cz9pOnIuY29uZmlnLmNoYXJ0LnR5cGUsbD1vLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtXCIuY29uY2F0KG4sXCItc2VyaWVzIGFwZXhjaGFydHMtcGxvdC1zZXJpZXNcIil9KSxoPW5ldyB5KHRoaXMuY3R4LHIpO3RoaXMueVJhdGlvPXRoaXMueHlSYXRpb3MueVJhdGlvLHRoaXMuelJhdGlvPXRoaXMueHlSYXRpb3MuelJhdGlvLHRoaXMueFJhdGlvPXRoaXMueHlSYXRpb3MueFJhdGlvLHRoaXMuYmFzZUxpbmVZPXRoaXMueHlSYXRpb3MuYmFzZUxpbmVZLHQ9aC5nZXRMb2dTZXJpZXModCksdGhpcy55UmF0aW89aC5nZXRMb2dZUmF0aW9zKHRoaXMueVJhdGlvKTtmb3IodmFyIGM9W10sZD0wO2Q8dC5sZW5ndGg7ZCsrKXt0PXRoaXMubGluZUhlbHBlcnMuc2FtZVZhbHVlU2VyaWVzRml4KGQsdCk7dmFyIGc9ci5nbG9iYWxzLmNvbWJvQ2hhcnRzP2FbZF06ZDt0aGlzLl9pbml0U2VyaWVWYXJpYWJsZXModCxkLGcpO3ZhciB1PVtdLGY9W10scD1yLmdsb2JhbHMucGFkSG9yaXpvbnRhbCt0aGlzLmNhdGVnb3J5QXhpc0NvcnJlY3Rpb247dGhpcy5jdHguc2VyaWVzLmFkZENvbGxhcHNlZENsYXNzVG9TZXJpZXModGhpcy5lbFNlcmllcyxnKSxyLmdsb2JhbHMuaXNYTnVtZXJpYyYmci5nbG9iYWxzLnNlcmllc1gubGVuZ3RoPjAmJihwPShyLmdsb2JhbHMuc2VyaWVzWFtnXVswXS1yLmdsb2JhbHMubWluWCkvdGhpcy54UmF0aW8pLGYucHVzaChwKTt2YXIgeCxiPXAsdj12b2lkIDAsdz1iLGs9dGhpcy56ZXJvWSxBPXRoaXMuemVyb1k7az10aGlzLmxpbmVIZWxwZXJzLmRldGVybWluZUZpcnN0UHJldlkoe2k6ZCxzZXJpZXM6dCxwcmV2WTprLGxpbmVZUG9zaXRpb246MH0pLnByZXZZLHUucHVzaChrKSx4PWs7XCJyYW5nZUFyZWFcIj09PW4mJih2PUE9dGhpcy5saW5lSGVscGVycy5kZXRlcm1pbmVGaXJzdFByZXZZKHtpOmQsc2VyaWVzOnMscHJldlk6QSxsaW5lWVBvc2l0aW9uOjB9KS5wcmV2WSk7dmFyIFM9e3R5cGU6bixzZXJpZXM6dCxyZWFsSW5kZXg6ZyxpOmQseDpwLHk6MSxwWDpiLHBZOngscGF0aHNGcm9tOnRoaXMuX2NhbGN1bGF0ZVBhdGhzRnJvbSh7dHlwZTpuLHNlcmllczp0LGk6ZCxyZWFsSW5kZXg6ZyxwcmV2WDp3LHByZXZZOmsscHJldlkyOkF9KSxsaW5lUGF0aHM6W10sYXJlYVBhdGhzOltdLHNlcmllc0luZGV4OmEsbGluZVlQb3NpdGlvbjowLHhBcnJqOmYseUFycmo6dSxzZXJpZXNSYW5nZUVuZDpzfSxDPXRoaXMuX2l0ZXJhdGVPdmVyRGF0YVBvaW50cyhlKGUoe30sUykse30se2l0ZXJhdGlvbnM6XCJyYW5nZUFyZWFcIj09PW4/dFtkXS5sZW5ndGgtMTp2b2lkIDAsaXNSYW5nZVN0YXJ0OiEwfSkpO2lmKFwicmFuZ2VBcmVhXCI9PT1uKXt2YXIgTD10aGlzLl9jYWxjdWxhdGVQYXRoc0Zyb20oe3NlcmllczpzLGk6ZCxyZWFsSW5kZXg6ZyxwcmV2WDp3LHByZXZZOkF9KSxQPXRoaXMuX2l0ZXJhdGVPdmVyRGF0YVBvaW50cyhlKGUoe30sUykse30se3NlcmllczpzLHBZOnYscGF0aHNGcm9tOkwsaXRlcmF0aW9uczpzW2RdLmxlbmd0aC0xLGlzUmFuZ2VTdGFydDohMX0pKTtDLmxpbmVQYXRoc1swXT1QLmxpbmVQYXRoK0MubGluZVBhdGgsQy5wYXRoRnJvbUxpbmU9UC5wYXRoRnJvbUxpbmUrQy5wYXRoRnJvbUxpbmV9dGhpcy5faGFuZGxlUGF0aHMoe3R5cGU6bixyZWFsSW5kZXg6ZyxpOmQscGF0aHM6Q30pLHRoaXMuZWxTZXJpZXMuYWRkKHRoaXMuZWxQb2ludHNNYWluKSx0aGlzLmVsU2VyaWVzLmFkZCh0aGlzLmVsRGF0YUxhYmVsc1dyYXApLGMucHVzaCh0aGlzLmVsU2VyaWVzKX1pZihyLmNvbmZpZy5jaGFydC5zdGFja2VkKWZvcih2YXIgVD1jLmxlbmd0aDtUPjA7VC0tKWwuYWRkKGNbVC0xXSk7ZWxzZSBmb3IodmFyIE09MDtNPGMubGVuZ3RoO00rKylsLmFkZChjW01dKTtyZXR1cm4gbH19LHtrZXk6XCJfaW5pdFNlcmllVmFyaWFibGVzXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMudyxzPW5ldyBtKHRoaXMuY3R4KTt0aGlzLnhEaXZpc2lvbj1hLmdsb2JhbHMuZ3JpZFdpZHRoLyhhLmdsb2JhbHMuZGF0YVBvaW50cy0oXCJvblwiPT09YS5jb25maWcueGF4aXMudGlja1BsYWNlbWVudD8xOjApKSx0aGlzLnN0cm9rZVdpZHRoPUFycmF5LmlzQXJyYXkoYS5jb25maWcuc3Ryb2tlLndpZHRoKT9hLmNvbmZpZy5zdHJva2Uud2lkdGhbaV06YS5jb25maWcuc3Ryb2tlLndpZHRoLHRoaXMueVJhdGlvLmxlbmd0aD4xJiYodGhpcy55YXhpc0luZGV4PWkpLHRoaXMuaXNSZXZlcnNlZD1hLmNvbmZpZy55YXhpc1t0aGlzLnlheGlzSW5kZXhdJiZhLmNvbmZpZy55YXhpc1t0aGlzLnlheGlzSW5kZXhdLnJldmVyc2VkLHRoaXMuemVyb1k9YS5nbG9iYWxzLmdyaWRIZWlnaHQtdGhpcy5iYXNlTGluZVlbdGhpcy55YXhpc0luZGV4XS0odGhpcy5pc1JldmVyc2VkP2EuZ2xvYmFscy5ncmlkSGVpZ2h0OjApKyh0aGlzLmlzUmV2ZXJzZWQ/Mip0aGlzLmJhc2VMaW5lWVt0aGlzLnlheGlzSW5kZXhdOjApLHRoaXMuYXJlYUJvdHRvbVk9dGhpcy56ZXJvWSwodGhpcy56ZXJvWT5hLmdsb2JhbHMuZ3JpZEhlaWdodHx8XCJlbmRcIj09PWEuY29uZmlnLnBsb3RPcHRpb25zLmFyZWEuZmlsbFRvKSYmKHRoaXMuYXJlYUJvdHRvbVk9YS5nbG9iYWxzLmdyaWRIZWlnaHQpLHRoaXMuY2F0ZWdvcnlBeGlzQ29ycmVjdGlvbj10aGlzLnhEaXZpc2lvbi8yLHRoaXMuZWxTZXJpZXM9cy5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLXNlcmllc1wiLHNlcmllc05hbWU6eC5lc2NhcGVTdHJpbmcoYS5nbG9iYWxzLnNlcmllc05hbWVzW2ldKX0pLHRoaXMuZWxQb2ludHNNYWluPXMuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy1zZXJpZXMtbWFya2Vycy13cmFwXCIsXCJkYXRhOnJlYWxJbmRleFwiOml9KSx0aGlzLmVsRGF0YUxhYmVsc1dyYXA9cy5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWRhdGFsYWJlbHNcIixcImRhdGE6cmVhbEluZGV4XCI6aX0pO3ZhciByPXRbZV0ubGVuZ3RoPT09YS5nbG9iYWxzLmRhdGFQb2ludHM7dGhpcy5lbFNlcmllcy5hdHRyKHtcImRhdGE6bG9uZ2VzdFNlcmllc1wiOnIscmVsOmUrMSxcImRhdGE6cmVhbEluZGV4XCI6aX0pLHRoaXMuYXBwZW5kUGF0aEZyb209ITB9fSx7a2V5OlwiX2NhbGN1bGF0ZVBhdGhzRnJvbVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLGksYSxzLHI9dC50eXBlLG89dC5zZXJpZXMsbj10LmksbD10LnJlYWxJbmRleCxoPXQucHJldlgsYz10LnByZXZZLGQ9dC5wcmV2WTIsZz10aGlzLncsdT1uZXcgbSh0aGlzLmN0eCk7aWYobnVsbD09PW9bbl1bMF0pe2Zvcih2YXIgZj0wO2Y8b1tuXS5sZW5ndGg7ZisrKWlmKG51bGwhPT1vW25dW2ZdKXtoPXRoaXMueERpdmlzaW9uKmYsYz10aGlzLnplcm9ZLW9bbl1bZl0vdGhpcy55UmF0aW9bdGhpcy55YXhpc0luZGV4XSxlPXUubW92ZShoLGMpLGk9dS5tb3ZlKGgsdGhpcy5hcmVhQm90dG9tWSk7YnJlYWt9fWVsc2UgZT11Lm1vdmUoaCxjKSxcInJhbmdlQXJlYVwiPT09ciYmKGU9dS5tb3ZlKGgsZCkrdS5saW5lKGgsYykpLGk9dS5tb3ZlKGgsdGhpcy5hcmVhQm90dG9tWSkrdS5saW5lKGgsYyk7aWYoYT11Lm1vdmUoLTEsdGhpcy56ZXJvWSkrdS5saW5lKC0xLHRoaXMuemVyb1kpLHM9dS5tb3ZlKC0xLHRoaXMuemVyb1kpK3UubGluZSgtMSx0aGlzLnplcm9ZKSxnLmdsb2JhbHMucHJldmlvdXNQYXRocy5sZW5ndGg+MCl7dmFyIHA9dGhpcy5saW5lSGVscGVycy5jaGVja1ByZXZpb3VzUGF0aHMoe3BhdGhGcm9tTGluZTphLHBhdGhGcm9tQXJlYTpzLHJlYWxJbmRleDpsfSk7YT1wLnBhdGhGcm9tTGluZSxzPXAucGF0aEZyb21BcmVhfXJldHVybntwcmV2WDpoLHByZXZZOmMsbGluZVBhdGg6ZSxhcmVhUGF0aDppLHBhdGhGcm9tTGluZTphLHBhdGhGcm9tQXJlYTpzfX19LHtrZXk6XCJfaGFuZGxlUGF0aHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgaT10LnR5cGUsYT10LnJlYWxJbmRleCxzPXQuaSxyPXQucGF0aHMsbz10aGlzLncsbj1uZXcgbSh0aGlzLmN0eCksbD1uZXcgRih0aGlzLmN0eCk7dGhpcy5wcmV2U2VyaWVzWS5wdXNoKHIueUFycmopLG8uZ2xvYmFscy5zZXJpZXNYdmFsdWVzW2FdPXIueEFycmosby5nbG9iYWxzLnNlcmllc1l2YWx1ZXNbYV09ci55QXJyajt2YXIgaD1vLmNvbmZpZy5mb3JlY2FzdERhdGFQb2ludHM7aWYoaC5jb3VudD4wJiZcInJhbmdlQXJlYVwiIT09aSl7dmFyIGM9by5nbG9iYWxzLnNlcmllc1h2YWx1ZXNbYV1bby5nbG9iYWxzLnNlcmllc1h2YWx1ZXNbYV0ubGVuZ3RoLWguY291bnQtMV0sZD1uLmRyYXdSZWN0KGMsMCxvLmdsb2JhbHMuZ3JpZFdpZHRoLG8uZ2xvYmFscy5ncmlkSGVpZ2h0LDApO28uZ2xvYmFscy5kb20uZWxGb3JlY2FzdE1hc2suYXBwZW5kQ2hpbGQoZC5ub2RlKTt2YXIgZz1uLmRyYXdSZWN0KDAsMCxjLG8uZ2xvYmFscy5ncmlkSGVpZ2h0LDApO28uZ2xvYmFscy5kb20uZWxOb25Gb3JlY2FzdE1hc2suYXBwZW5kQ2hpbGQoZy5ub2RlKX10aGlzLnBvaW50c0NoYXJ0fHxvLmdsb2JhbHMuZGVsYXllZEVsZW1lbnRzLnB1c2goe2VsOnRoaXMuZWxQb2ludHNNYWluLm5vZGUsaW5kZXg6YX0pO3ZhciB1PXtpOnMscmVhbEluZGV4OmEsYW5pbWF0aW9uRGVsYXk6cyxpbml0aWFsU3BlZWQ6by5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5zcGVlZCxkYXRhQ2hhbmdlU3BlZWQ6by5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5keW5hbWljQW5pbWF0aW9uLnNwZWVkLGNsYXNzTmFtZTpcImFwZXhjaGFydHMtXCIuY29uY2F0KGkpfTtpZihcImFyZWFcIj09PWkpZm9yKHZhciBmPWwuZmlsbFBhdGgoe3Nlcmllc051bWJlcjphfSkscD0wO3A8ci5hcmVhUGF0aHMubGVuZ3RoO3ArKyl7dmFyIHg9bi5yZW5kZXJQYXRocyhlKGUoe30sdSkse30se3BhdGhGcm9tOnIucGF0aEZyb21BcmVhLHBhdGhUbzpyLmFyZWFQYXRoc1twXSxzdHJva2U6XCJub25lXCIsc3Ryb2tlV2lkdGg6MCxzdHJva2VMaW5lQ2FwOm51bGwsZmlsbDpmfSkpO3RoaXMuZWxTZXJpZXMuYWRkKHgpfWlmKG8uY29uZmlnLnN0cm9rZS5zaG93JiYhdGhpcy5wb2ludHNDaGFydCl7dmFyIGI9bnVsbDtpZihcImxpbmVcIj09PWkpYj1sLmZpbGxQYXRoKHtzZXJpZXNOdW1iZXI6YSxpOnN9KTtlbHNlIGlmKFwic29saWRcIj09PW8uY29uZmlnLnN0cm9rZS5maWxsLnR5cGUpYj1vLmdsb2JhbHMuc3Ryb2tlLmNvbG9yc1thXTtlbHNle3ZhciB2PW8uY29uZmlnLmZpbGw7by5jb25maWcuZmlsbD1vLmNvbmZpZy5zdHJva2UuZmlsbCxiPWwuZmlsbFBhdGgoe3Nlcmllc051bWJlcjphLGk6c30pLG8uY29uZmlnLmZpbGw9dn1mb3IodmFyIHk9MDt5PHIubGluZVBhdGhzLmxlbmd0aDt5Kyspe3ZhciB3PWI7XCJyYW5nZUFyZWFcIj09PWkmJih3PWwuZmlsbFBhdGgoe3Nlcmllc051bWJlcjphfSkpO3ZhciBrPWUoZSh7fSx1KSx7fSx7cGF0aEZyb206ci5wYXRoRnJvbUxpbmUscGF0aFRvOnIubGluZVBhdGhzW3ldLHN0cm9rZTpiLHN0cm9rZVdpZHRoOnRoaXMuc3Ryb2tlV2lkdGgsc3Ryb2tlTGluZUNhcDpvLmNvbmZpZy5zdHJva2UubGluZUNhcCxmaWxsOlwicmFuZ2VBcmVhXCI9PT1pP3c6XCJub25lXCJ9KSxBPW4ucmVuZGVyUGF0aHMoayk7aWYodGhpcy5lbFNlcmllcy5hZGQoQSksQS5hdHRyKFwiZmlsbC1ydWxlXCIsXCJldmVub2RkXCIpLGguY291bnQ+MCYmXCJyYW5nZUFyZWFcIiE9PWkpe3ZhciBTPW4ucmVuZGVyUGF0aHMoayk7Uy5ub2RlLnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNoYXJyYXlcIixoLmRhc2hBcnJheSksaC5zdHJva2VXaWR0aCYmUy5ub2RlLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLGguc3Ryb2tlV2lkdGgpLHRoaXMuZWxTZXJpZXMuYWRkKFMpLFMuYXR0cihcImNsaXAtcGF0aFwiLFwidXJsKCNmb3JlY2FzdE1hc2tcIi5jb25jYXQoby5nbG9iYWxzLmN1aWQsXCIpXCIpKSxBLmF0dHIoXCJjbGlwLXBhdGhcIixcInVybCgjbm9uRm9yZWNhc3RNYXNrXCIuY29uY2F0KG8uZ2xvYmFscy5jdWlkLFwiKVwiKSl9fX19fSx7a2V5OlwiX2l0ZXJhdGVPdmVyRGF0YVBvaW50c1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZSxpPXQuc2VyaWVzLGE9dC5pdGVyYXRpb25zLHM9dC5yZWFsSW5kZXgscj10Lmksbz10Lngsbj10LnksbD10LnBYLGg9dC5wWSxjPXQucGF0aHNGcm9tLGQ9dC5saW5lUGF0aHMsZz10LmFyZWFQYXRocyx1PXQuc2VyaWVzSW5kZXgsZj10LmxpbmVZUG9zaXRpb24scD10LnhBcnJqLGI9dC55QXJyaix2PXQuaXNSYW5nZVN0YXJ0LHk9dC5zZXJpZXNSYW5nZUVuZCx3PXRoaXMudyxrPW5ldyBtKHRoaXMuY3R4KSxBPXRoaXMueVJhdGlvLFM9Yy5wcmV2WSxDPWMubGluZVBhdGgsTD1jLmFyZWFQYXRoLFA9Yy5wYXRoRnJvbUxpbmUsVD1jLnBhdGhGcm9tQXJlYSxNPXguaXNOdW1iZXIody5nbG9iYWxzLm1pbllBcnJbc10pP3cuZ2xvYmFscy5taW5ZQXJyW3NdOncuZ2xvYmFscy5taW5ZO2F8fChhPXcuZ2xvYmFscy5kYXRhUG9pbnRzPjE/dy5nbG9iYWxzLmRhdGFQb2ludHMtMTp3Lmdsb2JhbHMuZGF0YVBvaW50cyk7Zm9yKHZhciBJPW4sWD0wO1g8YTtYKyspe3ZhciB6PXZvaWQgMD09PWlbcl1bWCsxXXx8bnVsbD09PWlbcl1bWCsxXTtpZih3Lmdsb2JhbHMuaXNYTnVtZXJpYyl7dmFyIEU9dy5nbG9iYWxzLnNlcmllc1hbc11bWCsxXTt2b2lkIDA9PT13Lmdsb2JhbHMuc2VyaWVzWFtzXVtYKzFdJiYoRT13Lmdsb2JhbHMuc2VyaWVzWFtzXVthLTFdKSxvPShFLXcuZ2xvYmFscy5taW5YKS90aGlzLnhSYXRpb31lbHNlIG8rPXRoaXMueERpdmlzaW9uO2lmKHcuY29uZmlnLmNoYXJ0LnN0YWNrZWQpaWYocj4wJiZ3Lmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzLmxlbmd0aDx3LmNvbmZpZy5zZXJpZXMubGVuZ3RoLTEpe2Y9dGhpcy5wcmV2U2VyaWVzWVtmdW5jdGlvbih0KXtmb3IodmFyIGU9dCxpPTA7aTx3Lmdsb2JhbHMuc2VyaWVzLmxlbmd0aDtpKyspaWYody5nbG9iYWxzLmNvbGxhcHNlZFNlcmllc0luZGljZXMuaW5kZXhPZih0KT4tMSl7ZS0tO2JyZWFrfXJldHVybiBlPj0wP2U6MH0oci0xKV1bWCsxXX1lbHNlIGY9dGhpcy56ZXJvWTtlbHNlIGY9dGhpcy56ZXJvWTt6P249Zi1NL0FbdGhpcy55YXhpc0luZGV4XSsyKih0aGlzLmlzUmV2ZXJzZWQ/TS9BW3RoaXMueWF4aXNJbmRleF06MCk6KG49Zi1pW3JdW1grMV0vQVt0aGlzLnlheGlzSW5kZXhdKzIqKHRoaXMuaXNSZXZlcnNlZD9pW3JdW1grMV0vQVt0aGlzLnlheGlzSW5kZXhdOjApLFwicmFuZ2VBcmVhXCI9PT1lJiYoST1mLXlbcl1bWCsxXS9BW3RoaXMueWF4aXNJbmRleF0rMioodGhpcy5pc1JldmVyc2VkP3lbcl1bWCsxXS9BW3RoaXMueWF4aXNJbmRleF06MCkpKSxwLnB1c2gobyksYi5wdXNoKG4pO3ZhciBZPXRoaXMubGluZUhlbHBlcnMuY2FsY3VsYXRlUG9pbnRzKHtzZXJpZXM6aSx4Om8seTpuLHJlYWxJbmRleDpzLGk6cixqOlgscHJldlk6U30pLEY9dGhpcy5fY3JlYXRlUGF0aHMoe3R5cGU6ZSxzZXJpZXM6aSxpOnIscmVhbEluZGV4OnMsajpYLHg6byx5Om4seTI6SSxwWDpsLHBZOmgsbGluZVBhdGg6QyxhcmVhUGF0aDpMLGxpbmVQYXRoczpkLGFyZWFQYXRoczpnLHNlcmllc0luZGV4OnUsaXNSYW5nZVN0YXJ0OnZ9KTtnPUYuYXJlYVBhdGhzLGQ9Ri5saW5lUGF0aHMsbD1GLnBYLGg9Ri5wWSxMPUYuYXJlYVBhdGgsQz1GLmxpbmVQYXRoLHRoaXMuYXBwZW5kUGF0aEZyb20mJihQKz1rLmxpbmUobyx0aGlzLnplcm9ZKSxUKz1rLmxpbmUobyx0aGlzLnplcm9ZKSksdGhpcy5oYW5kbGVOdWxsRGF0YVBvaW50cyhpLFkscixYLHMpLHRoaXMuX2hhbmRsZU1hcmtlcnNBbmRMYWJlbHMoe3R5cGU6ZSxwb2ludHNQb3M6WSxpOnIsajpYLHJlYWxJbmRleDpzLGlzUmFuZ2VTdGFydDp2fSl9cmV0dXJue3lBcnJqOmIseEFycmo6cCxwYXRoRnJvbUFyZWE6VCxhcmVhUGF0aHM6ZyxwYXRoRnJvbUxpbmU6UCxsaW5lUGF0aHM6ZCxsaW5lUGF0aDpDLGFyZWFQYXRoOkx9fX0se2tleTpcIl9oYW5kbGVNYXJrZXJzQW5kTGFiZWxzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlLGk9dC5wb2ludHNQb3MsYT10LmlzUmFuZ2VTdGFydCxzPXQuaSxyPXQuaixvPXQucmVhbEluZGV4LG49dGhpcy53LGw9bmV3IEgodGhpcy5jdHgpO2lmKHRoaXMucG9pbnRzQ2hhcnQpdGhpcy5zY2F0dGVyLmRyYXcodGhpcy5lbFNlcmllcyxyLHtyZWFsSW5kZXg6byxwb2ludHNQb3M6aSx6UmF0aW86dGhpcy56UmF0aW8sZWxQYXJlbnQ6dGhpcy5lbFBvaW50c01haW59KTtlbHNle24uZ2xvYmFscy5zZXJpZXNbc10ubGVuZ3RoPjEmJnRoaXMuZWxQb2ludHNNYWluLm5vZGUuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtZWxlbWVudC1oaWRkZW5cIik7dmFyIGg9dGhpcy5tYXJrZXJzLnBsb3RDaGFydE1hcmtlcnMoaSxvLHIrMSk7bnVsbCE9PWgmJnRoaXMuZWxQb2ludHNNYWluLmFkZChoKX12YXIgYz1sLmRyYXdEYXRhTGFiZWwoe3R5cGU6ZSxpc1JhbmdlU3RhcnQ6YSxwb3M6aSxpOm8sajpyKzF9KTtudWxsIT09YyYmdGhpcy5lbERhdGFMYWJlbHNXcmFwLmFkZChjKX19LHtrZXk6XCJfY3JlYXRlUGF0aHNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LnR5cGUsaT10LnNlcmllcyxhPXQuaSxzPXQucmVhbEluZGV4LHI9dC5qLG89dC54LG49dC55LGw9dC55MixoPXQucFgsYz10LnBZLGQ9dC5saW5lUGF0aCxnPXQuYXJlYVBhdGgsdT10LmxpbmVQYXRocyxmPXQuYXJlYVBhdGhzLHA9dC5zZXJpZXNJbmRleCx4PXQuaXNSYW5nZVN0YXJ0LGI9dGhpcy53LHY9bmV3IG0odGhpcy5jdHgpLHk9Yi5jb25maWcuc3Ryb2tlLmN1cnZlLHc9dGhpcy5hcmVhQm90dG9tWTtpZihBcnJheS5pc0FycmF5KGIuY29uZmlnLnN0cm9rZS5jdXJ2ZSkmJih5PUFycmF5LmlzQXJyYXkocCk/Yi5jb25maWcuc3Ryb2tlLmN1cnZlW3BbYV1dOmIuY29uZmlnLnN0cm9rZS5jdXJ2ZVthXSksXCJzbW9vdGhcIj09PXkpe3ZhciBrPS4zNSooby1oKTtiLmdsb2JhbHMuaGFzTnVsbFZhbHVlcz8obnVsbCE9PWlbYV1bcl0mJihudWxsIT09aVthXVtyKzFdPyhkPXYubW92ZShoLGMpK3YuY3VydmUoaCtrLGMsby1rLG4sbysxLG4pLGc9di5tb3ZlKGgrMSxjKSt2LmN1cnZlKGgrayxjLG8tayxuLG8rMSxuKSt2LmxpbmUobyx3KSt2LmxpbmUoaCx3KStcInpcIik6KGQ9di5tb3ZlKGgsYyksZz12Lm1vdmUoaCxjKStcInpcIikpLHUucHVzaChkKSxmLnB1c2goZykpOihkKz12LmN1cnZlKGgrayxjLG8tayxuLG8sbiksZys9di5jdXJ2ZShoK2ssYyxvLWssbixvLG4pKSxoPW8sYz1uLHI9PT1pW2FdLmxlbmd0aC0yJiYoZz1nK3YuY3VydmUoaCxjLG8sbixvLHcpK3YubW92ZShvLG4pK1wielwiLFwicmFuZ2VBcmVhXCI9PT1lJiZ4P2Q9ZCt2LmN1cnZlKGgsYyxvLG4sbyxsKSt2Lm1vdmUobyxsKStcInpcIjpiLmdsb2JhbHMuaGFzTnVsbFZhbHVlc3x8KHUucHVzaChkKSxmLnB1c2goZykpKX1lbHNle2lmKG51bGw9PT1pW2FdW3IrMV0pe2QrPXYubW92ZShvLG4pO3ZhciBBPWIuZ2xvYmFscy5pc1hOdW1lcmljPyhiLmdsb2JhbHMuc2VyaWVzWFtzXVtyXS1iLmdsb2JhbHMubWluWCkvdGhpcy54UmF0aW86by10aGlzLnhEaXZpc2lvbjtnPWcrdi5saW5lKEEsdykrdi5tb3ZlKG8sbikrXCJ6XCJ9bnVsbD09PWlbYV1bcl0mJihkKz12Lm1vdmUobyxuKSxnKz12Lm1vdmUobyx3KSksXCJzdGVwbGluZVwiPT09eT8oZD1kK3YubGluZShvLG51bGwsXCJIXCIpK3YubGluZShudWxsLG4sXCJWXCIpLGc9Zyt2LmxpbmUobyxudWxsLFwiSFwiKSt2LmxpbmUobnVsbCxuLFwiVlwiKSk6XCJzdHJhaWdodFwiPT09eSYmKGQrPXYubGluZShvLG4pLGcrPXYubGluZShvLG4pKSxyPT09aVthXS5sZW5ndGgtMiYmKGc9Zyt2LmxpbmUobyx3KSt2Lm1vdmUobyxuKStcInpcIixcInJhbmdlQXJlYVwiPT09ZSYmeD9kPWQrdi5saW5lKG8sbCkrdi5tb3ZlKG8sbCkrXCJ6XCI6KHUucHVzaChkKSxmLnB1c2goZykpKX1yZXR1cm57bGluZVBhdGhzOnUsYXJlYVBhdGhzOmYscFg6aCxwWTpjLGxpbmVQYXRoOmQsYXJlYVBhdGg6Z319fSx7a2V5OlwiaGFuZGxlTnVsbERhdGFQb2ludHNcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxhLHMpe3ZhciByPXRoaXMudztpZihudWxsPT09dFtpXVthXSYmci5jb25maWcubWFya2Vycy5zaG93TnVsbERhdGFQb2ludHN8fDE9PT10W2ldLmxlbmd0aCl7dmFyIG89dGhpcy5tYXJrZXJzLnBsb3RDaGFydE1hcmtlcnMoZSxzLGErMSx0aGlzLnN0cm9rZVdpZHRoLXIuY29uZmlnLm1hcmtlcnMuc3Ryb2tlV2lkdGgvMiwhMCk7bnVsbCE9PW8mJnRoaXMuZWxQb2ludHNNYWluLmFkZChvKX19fV0pLHR9KCk7d2luZG93LlRyZWVtYXBTcXVhcmVkPXt9LHdpbmRvdy5UcmVlbWFwU3F1YXJlZC5nZW5lcmF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpLGEscyl7dGhpcy54b2Zmc2V0PWUsdGhpcy55b2Zmc2V0PWksdGhpcy5oZWlnaHQ9cyx0aGlzLndpZHRoPWEsdGhpcy5zaG9ydGVzdEVkZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5oZWlnaHQsdGhpcy53aWR0aCl9LHRoaXMuZ2V0Q29vcmRpbmF0ZXM9ZnVuY3Rpb24odCl7dmFyIGUsaT1bXSxhPXRoaXMueG9mZnNldCxzPXRoaXMueW9mZnNldCxvPXIodCkvdGhpcy5oZWlnaHQsbj1yKHQpL3RoaXMud2lkdGg7aWYodGhpcy53aWR0aD49dGhpcy5oZWlnaHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKylpLnB1c2goW2EscyxhK28scyt0W2VdL29dKSxzKz10W2VdL287ZWxzZSBmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKWkucHVzaChbYSxzLGErdFtlXS9uLHMrbl0pLGErPXRbZV0vbjtyZXR1cm4gaX0sdGhpcy5jdXRBcmVhPWZ1bmN0aW9uKGUpe3ZhciBpO2lmKHRoaXMud2lkdGg+PXRoaXMuaGVpZ2h0KXt2YXIgYT1lL3RoaXMuaGVpZ2h0LHM9dGhpcy53aWR0aC1hO2k9bmV3IHQodGhpcy54b2Zmc2V0K2EsdGhpcy55b2Zmc2V0LHMsdGhpcy5oZWlnaHQpfWVsc2V7dmFyIHI9ZS90aGlzLndpZHRoLG89dGhpcy5oZWlnaHQtcjtpPW5ldyB0KHRoaXMueG9mZnNldCx0aGlzLnlvZmZzZXQrcix0aGlzLndpZHRoLG8pfXJldHVybiBpfX1mdW5jdGlvbiBlKGUsYSxzLG8sbil7bz12b2lkIDA9PT1vPzA6byxuPXZvaWQgMD09PW4/MDpuO3ZhciBsPWkoZnVuY3Rpb24odCxlKXt2YXIgaSxhPVtdLHM9ZS9yKHQpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspYVtpXT10W2ldKnM7cmV0dXJuIGF9KGUsYSpzKSxbXSxuZXcgdChvLG4sYSxzKSxbXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLGksYT1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcihpPTA7aTx0W2VdLmxlbmd0aDtpKyspYS5wdXNoKHRbZV1baV0pO3JldHVybiBhfShsKX1mdW5jdGlvbiBpKHQsZSxzLG8pe3ZhciBuLGwsaDtpZigwIT09dC5sZW5ndGgpcmV0dXJuIG49cy5zaG9ydGVzdEVkZ2UoKSxmdW5jdGlvbih0LGUsaSl7dmFyIHM7aWYoMD09PXQubGVuZ3RoKXJldHVybiEwOyhzPXQuc2xpY2UoKSkucHVzaChlKTt2YXIgcj1hKHQsaSksbz1hKHMsaSk7cmV0dXJuIHI+PW99KGUsbD10WzBdLG4pPyhlLnB1c2gobCksaSh0LnNsaWNlKDEpLGUscyxvKSk6KGg9cy5jdXRBcmVhKHIoZSksbyksby5wdXNoKHMuZ2V0Q29vcmRpbmF0ZXMoZSkpLGkodCxbXSxoLG8pKSxvO28ucHVzaChzLmdldENvb3JkaW5hdGVzKGUpKX1mdW5jdGlvbiBhKHQsZSl7dmFyIGk9TWF0aC5taW4uYXBwbHkoTWF0aCx0KSxhPU1hdGgubWF4LmFwcGx5KE1hdGgsdCkscz1yKHQpO3JldHVybiBNYXRoLm1heChNYXRoLnBvdyhlLDIpKmEvTWF0aC5wb3cocywyKSxNYXRoLnBvdyhzLDIpLyhNYXRoLnBvdyhlLDIpKmkpKX1mdW5jdGlvbiBzKHQpe3JldHVybiB0JiZ0LmNvbnN0cnVjdG9yPT09QXJyYXl9ZnVuY3Rpb24gcih0KXt2YXIgZSxpPTA7Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKylpKz10W2VdO3JldHVybiBpfWZ1bmN0aW9uIG8odCl7dmFyIGUsaT0wO2lmKHModFswXSkpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKylpKz1vKHRbZV0pO2Vsc2UgaT1yKHQpO3JldHVybiBpfXJldHVybiBmdW5jdGlvbiB0KGksYSxyLG4sbCl7bj12b2lkIDA9PT1uPzA6bixsPXZvaWQgMD09PWw/MDpsO3ZhciBoLGMsZD1bXSxnPVtdO2lmKHMoaVswXSkpe2ZvcihjPTA7YzxpLmxlbmd0aDtjKyspZFtjXT1vKGlbY10pO2ZvcihoPWUoZCxhLHIsbixsKSxjPTA7YzxpLmxlbmd0aDtjKyspZy5wdXNoKHQoaVtjXSxoW2NdWzJdLWhbY11bMF0saFtjXVszXS1oW2NdWzFdLGhbY11bMF0saFtjXVsxXSkpfWVsc2UgZz1lKGksYSxyLG4sbCk7cmV0dXJuIGd9fSgpO3ZhciB6dCxFdCxZdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53LHRoaXMuc3Ryb2tlV2lkdGg9dGhpcy53LmNvbmZpZy5zdHJva2Uud2lkdGgsdGhpcy5oZWxwZXJzPW5ldyBBdChlKSx0aGlzLmR5bmFtaWNBbmltPXRoaXMudy5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5keW5hbWljQW5pbWF0aW9uLHRoaXMubGFiZWxzPVtdfXJldHVybiByKHQsW3trZXk6XCJkcmF3XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMudyxhPW5ldyBtKHRoaXMuY3R4KSxzPW5ldyBGKHRoaXMuY3R4KSxyPWEuZ3JvdXAoe2NsYXNzOlwiYXBleGNoYXJ0cy10cmVlbWFwXCJ9KTtpZihpLmdsb2JhbHMubm9EYXRhKXJldHVybiByO3ZhciBvPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModCl9KSk7by5wdXNoKGUpfSkpLHRoaXMubmVnUmFuZ2U9dGhpcy5oZWxwZXJzLmNoZWNrQ29sb3JSYW5nZSgpLGkuY29uZmlnLnNlcmllcy5mb3JFYWNoKChmdW5jdGlvbih0LGkpe3QuZGF0YS5mb3JFYWNoKChmdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KGUubGFiZWxzW2ldKXx8KGUubGFiZWxzW2ldPVtdKSxlLmxhYmVsc1tpXS5wdXNoKHQueCl9KSl9KSksd2luZG93LlRyZWVtYXBTcXVhcmVkLmdlbmVyYXRlKG8saS5nbG9iYWxzLmdyaWRXaWR0aCxpLmdsb2JhbHMuZ3JpZEhlaWdodCkuZm9yRWFjaCgoZnVuY3Rpb24obyxuKXt2YXIgbD1hLmdyb3VwKHtjbGFzczpcImFwZXhjaGFydHMtc2VyaWVzIGFwZXhjaGFydHMtdHJlZW1hcC1zZXJpZXNcIixzZXJpZXNOYW1lOnguZXNjYXBlU3RyaW5nKGkuZ2xvYmFscy5zZXJpZXNOYW1lc1tuXSkscmVsOm4rMSxcImRhdGE6cmVhbEluZGV4XCI6bn0pO2lmKGkuY29uZmlnLmNoYXJ0LmRyb3BTaGFkb3cuZW5hYmxlZCl7dmFyIGg9aS5jb25maWcuY2hhcnQuZHJvcFNoYWRvdztuZXcgdihlLmN0eCkuZHJvcFNoYWRvdyhyLGgsbil9dmFyIGM9YS5ncm91cCh7Y2xhc3M6XCJhcGV4Y2hhcnRzLWRhdGEtbGFiZWxzXCJ9KTtvLmZvckVhY2goKGZ1bmN0aW9uKHIsbyl7dmFyIGg9clswXSxjPXJbMV0sZD1yWzJdLGc9clszXSx1PWEuZHJhd1JlY3QoaCxjLGQtaCxnLWMsMCxcIiNmZmZcIiwxLGUuc3Ryb2tlV2lkdGgsaS5jb25maWcucGxvdE9wdGlvbnMudHJlZW1hcC51c2VGaWxsQ29sb3JBc1N0cm9rZT9wOmkuZ2xvYmFscy5zdHJva2UuY29sb3JzW25dKTt1LmF0dHIoe2N4OmgsY3k6YyxpbmRleDpuLGk6bixqOm8sd2lkdGg6ZC1oLGhlaWdodDpnLWN9KTt2YXIgZj1lLmhlbHBlcnMuZ2V0U2hhZGVDb2xvcihpLmNvbmZpZy5jaGFydC50eXBlLG4sbyxlLm5lZ1JhbmdlKSxwPWYuY29sb3I7dm9pZCAwIT09aS5jb25maWcuc2VyaWVzW25dLmRhdGFbb10mJmkuY29uZmlnLnNlcmllc1tuXS5kYXRhW29dLmZpbGxDb2xvciYmKHA9aS5jb25maWcuc2VyaWVzW25dLmRhdGFbb10uZmlsbENvbG9yKTt2YXIgeD1zLmZpbGxQYXRoKHtjb2xvcjpwLHNlcmllc051bWJlcjpuLGRhdGFQb2ludEluZGV4Om99KTt1Lm5vZGUuY2xhc3NMaXN0LmFkZChcImFwZXhjaGFydHMtdHJlZW1hcC1yZWN0XCIpLHUuYXR0cih7ZmlsbDp4fSksZS5oZWxwZXJzLmFkZExpc3RlbmVycyh1KTt2YXIgYj17eDpoKyhkLWgpLzIseTpjKyhnLWMpLzIsd2lkdGg6MCxoZWlnaHQ6MH0sdj17eDpoLHk6Yyx3aWR0aDpkLWgsaGVpZ2h0OmctY307aWYoaS5jb25maWcuY2hhcnQuYW5pbWF0aW9ucy5lbmFibGVkJiYhaS5nbG9iYWxzLmRhdGFDaGFuZ2VkKXt2YXIgbT0xO2kuZ2xvYmFscy5yZXNpemVkfHwobT1pLmNvbmZpZy5jaGFydC5hbmltYXRpb25zLnNwZWVkKSxlLmFuaW1hdGVUcmVlbWFwKHUsYix2LG0pfWlmKGkuZ2xvYmFscy5kYXRhQ2hhbmdlZCl7dmFyIHk9MTtlLmR5bmFtaWNBbmltLmVuYWJsZWQmJmkuZ2xvYmFscy5zaG91bGRBbmltYXRlJiYoeT1lLmR5bmFtaWNBbmltLnNwZWVkLGkuZ2xvYmFscy5wcmV2aW91c1BhdGhzW25dJiZpLmdsb2JhbHMucHJldmlvdXNQYXRoc1tuXVtvXSYmaS5nbG9iYWxzLnByZXZpb3VzUGF0aHNbbl1bb10ucmVjdCYmKGI9aS5nbG9iYWxzLnByZXZpb3VzUGF0aHNbbl1bb10ucmVjdCksZS5hbmltYXRlVHJlZW1hcCh1LGIsdix5KSl9dmFyIHc9ZS5nZXRGb250U2l6ZShyKSxrPWkuY29uZmlnLmRhdGFMYWJlbHMuZm9ybWF0dGVyKGUubGFiZWxzW25dW29dLHt2YWx1ZTppLmdsb2JhbHMuc2VyaWVzW25dW29dLHNlcmllc0luZGV4Om4sZGF0YVBvaW50SW5kZXg6byx3Oml9KSxBPWUuaGVscGVycy5jYWxjdWxhdGVEYXRhTGFiZWxzKHt0ZXh0OmsseDooaCtkKS8yLHk6KGMrZykvMitlLnN0cm9rZVdpZHRoLzIrdy8zLGk6bixqOm8sY29sb3JQcm9wczpmLGZvbnRTaXplOncsc2VyaWVzOnR9KTtpLmNvbmZpZy5kYXRhTGFiZWxzLmVuYWJsZWQmJkEmJmUucm90YXRlVG9GaXRMYWJlbChBLHcsayxoLGMsZCxnKSxsLmFkZCh1KSxudWxsIT09QSYmbC5hZGQoQSl9KSksbC5hZGQoYyksci5hZGQobCl9KSkscn19LHtrZXk6XCJnZXRGb250U2l6ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudzt2YXIgaSxhLHMscixvPWZ1bmN0aW9uIHQoZSl7dmFyIGksYT0wO2lmKEFycmF5LmlzQXJyYXkoZVswXSkpZm9yKGk9MDtpPGUubGVuZ3RoO2krKylhKz10KGVbaV0pO2Vsc2UgZm9yKGk9MDtpPGUubGVuZ3RoO2krKylhKz1lW2ldLmxlbmd0aDtyZXR1cm4gYX0odGhpcy5sYWJlbHMpL2Z1bmN0aW9uIHQoZSl7dmFyIGksYT0wO2lmKEFycmF5LmlzQXJyYXkoZVswXSkpZm9yKGk9MDtpPGUubGVuZ3RoO2krKylhKz10KGVbaV0pO2Vsc2UgZm9yKGk9MDtpPGUubGVuZ3RoO2krKylhKz0xO3JldHVybiBhfSh0aGlzLmxhYmVscyk7cmV0dXJuIGk9dFsyXS10WzBdLGE9dFszXS10WzFdLHM9aSphLHI9TWF0aC5wb3cocywuNSksTWF0aC5taW4oci9vLHBhcnNlSW50KGUuY29uZmlnLmRhdGFMYWJlbHMuc3R5bGUuZm9udFNpemUsMTApKX19LHtrZXk6XCJyb3RhdGVUb0ZpdExhYmVsXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSxzLHIsbyl7dmFyIG49bmV3IG0odGhpcy5jdHgpLGw9bi5nZXRUZXh0UmVjdHMoaSxlKTtpZihsLndpZHRoK3RoaXMudy5jb25maWcuc3Ryb2tlLndpZHRoKzU+ci1hJiZsLndpZHRoPD1vLXMpe3ZhciBoPW4ucm90YXRlQXJvdW5kQ2VudGVyKHQubm9kZSk7dC5ub2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLFwicm90YXRlKC05MCBcIi5jb25jYXQoaC54LFwiIFwiKS5jb25jYXQoaC55LFwiKVwiKSl9fX0se2tleTpcImFuaW1hdGVUcmVlbWFwXCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM9bmV3IGIodGhpcy5jdHgpO3MuYW5pbWF0ZVJlY3QodCx7eDplLngseTplLnksd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9LHt4OmkueCx5OmkueSx3aWR0aDppLndpZHRoLGhlaWdodDppLmhlaWdodH0sYSwoZnVuY3Rpb24oKXtzLmFuaW1hdGlvbkNvbXBsZXRlZCh0KX0pKX19XSksdH0oKSxGdD04NjQwMCxSdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUudyx0aGlzLnRpbWVTY2FsZUFycmF5PVtdLHRoaXMudXRjPXRoaXMudy5jb25maWcueGF4aXMubGFiZWxzLmRhdGV0aW1lVVRDfXJldHVybiByKHQsW3trZXk6XCJjYWxjdWxhdGVUaW1lU2NhbGVUaWNrc1wiLHZhbHVlOmZ1bmN0aW9uKHQsaSl7dmFyIGE9dGhpcyxzPXRoaXMudztpZihzLmdsb2JhbHMuYWxsU2VyaWVzQ29sbGFwc2VkKXJldHVybiBzLmdsb2JhbHMubGFiZWxzPVtdLHMuZ2xvYmFscy50aW1lc2NhbGVMYWJlbHM9W10sW107dmFyIHI9bmV3IFQodGhpcy5jdHgpLG89KGktdCkvODY0ZTU7dGhpcy5kZXRlcm1pbmVJbnRlcnZhbChvKSxzLmdsb2JhbHMuZGlzYWJsZVpvb21Jbj0hMSxzLmdsb2JhbHMuZGlzYWJsZVpvb21PdXQ9ITEsbzwuMDAwMTE1NzQwNzQwNzQwNzQwNzU/cy5nbG9iYWxzLmRpc2FibGVab29tSW49ITA6bz41ZTQmJihzLmdsb2JhbHMuZGlzYWJsZVpvb21PdXQ9ITApO3ZhciBuPXIuZ2V0VGltZVVuaXRzZnJvbVRpbWVzdGFtcCh0LGksdGhpcy51dGMpLGw9cy5nbG9iYWxzLmdyaWRXaWR0aC9vLGg9bC8yNCxjPWgvNjAsZD1jLzYwLGc9TWF0aC5mbG9vcigyNCpvKSx1PU1hdGguZmxvb3IoMTQ0MCpvKSxmPU1hdGguZmxvb3IobypGdCkscD1NYXRoLmZsb29yKG8pLHg9TWF0aC5mbG9vcihvLzMwKSxiPU1hdGguZmxvb3Ioby8zNjUpLHY9e21pbk1pbGxpc2Vjb25kOm4ubWluTWlsbGlzZWNvbmQsbWluU2Vjb25kOm4ubWluU2Vjb25kLG1pbk1pbnV0ZTpuLm1pbk1pbnV0ZSxtaW5Ib3VyOm4ubWluSG91cixtaW5EYXRlOm4ubWluRGF0ZSxtaW5Nb250aDpuLm1pbk1vbnRoLG1pblllYXI6bi5taW5ZZWFyfSxtPXtmaXJzdFZhbDp2LGN1cnJlbnRNaWxsaXNlY29uZDp2Lm1pbk1pbGxpc2Vjb25kLGN1cnJlbnRTZWNvbmQ6di5taW5TZWNvbmQsY3VycmVudE1pbnV0ZTp2Lm1pbk1pbnV0ZSxjdXJyZW50SG91cjp2Lm1pbkhvdXIsY3VycmVudE1vbnRoRGF0ZTp2Lm1pbkRhdGUsY3VycmVudERhdGU6di5taW5EYXRlLGN1cnJlbnRNb250aDp2Lm1pbk1vbnRoLGN1cnJlbnRZZWFyOnYubWluWWVhcixkYXlzV2lkdGhPblhBeGlzOmwsaG91cnNXaWR0aE9uWEF4aXM6aCxtaW51dGVzV2lkdGhPblhBeGlzOmMsc2Vjb25kc1dpZHRoT25YQXhpczpkLG51bWJlck9mU2Vjb25kczpmLG51bWJlck9mTWludXRlczp1LG51bWJlck9mSG91cnM6ZyxudW1iZXJPZkRheXM6cCxudW1iZXJPZk1vbnRoczp4LG51bWJlck9mWWVhcnM6Yn07c3dpdGNoKHRoaXMudGlja0ludGVydmFsKXtjYXNlXCJ5ZWFyc1wiOnRoaXMuZ2VuZXJhdGVZZWFyU2NhbGUobSk7YnJlYWs7Y2FzZVwibW9udGhzXCI6Y2FzZVwiaGFsZl95ZWFyXCI6dGhpcy5nZW5lcmF0ZU1vbnRoU2NhbGUobSk7YnJlYWs7Y2FzZVwibW9udGhzX2RheXNcIjpjYXNlXCJtb250aHNfZm9ydG5pZ2h0XCI6Y2FzZVwiZGF5c1wiOmNhc2VcIndlZWtfZGF5c1wiOnRoaXMuZ2VuZXJhdGVEYXlTY2FsZShtKTticmVhaztjYXNlXCJob3Vyc1wiOnRoaXMuZ2VuZXJhdGVIb3VyU2NhbGUobSk7YnJlYWs7Y2FzZVwibWludXRlc19maXZlc1wiOmNhc2VcIm1pbnV0ZXNcIjp0aGlzLmdlbmVyYXRlTWludXRlU2NhbGUobSk7YnJlYWs7Y2FzZVwic2Vjb25kc190ZW5zXCI6Y2FzZVwic2Vjb25kc19maXZlc1wiOmNhc2VcInNlY29uZHNcIjp0aGlzLmdlbmVyYXRlU2Vjb25kU2NhbGUobSl9dmFyIHk9dGhpcy50aW1lU2NhbGVBcnJheS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBpPXtwb3NpdGlvbjp0LnBvc2l0aW9uLHVuaXQ6dC51bml0LHllYXI6dC55ZWFyLGRheTp0LmRheT90LmRheToxLGhvdXI6dC5ob3VyP3QuaG91cjowLG1vbnRoOnQubW9udGgrMX07cmV0dXJuXCJtb250aFwiPT09dC51bml0P2UoZSh7fSxpKSx7fSx7ZGF5OjEsdmFsdWU6dC52YWx1ZSsxfSk6XCJkYXlcIj09PXQudW5pdHx8XCJob3VyXCI9PT10LnVuaXQ/ZShlKHt9LGkpLHt9LHt2YWx1ZTp0LnZhbHVlfSk6XCJtaW51dGVcIj09PXQudW5pdD9lKGUoe30saSkse30se3ZhbHVlOnQudmFsdWUsbWludXRlOnQudmFsdWV9KTpcInNlY29uZFwiPT09dC51bml0P2UoZSh7fSxpKSx7fSx7dmFsdWU6dC52YWx1ZSxtaW51dGU6dC5taW51dGUsc2Vjb25kOnQuc2Vjb25kfSk6dH0pKTtyZXR1cm4geS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3ZhciBlPTEsaT1NYXRoLmNlaWwocy5nbG9iYWxzLmdyaWRXaWR0aC8xMjApLHI9dC52YWx1ZTt2b2lkIDAhPT1zLmNvbmZpZy54YXhpcy50aWNrQW1vdW50JiYoaT1zLmNvbmZpZy54YXhpcy50aWNrQW1vdW50KSx5Lmxlbmd0aD5pJiYoZT1NYXRoLmZsb29yKHkubGVuZ3RoL2kpKTt2YXIgbz0hMSxuPSExO3N3aXRjaChhLnRpY2tJbnRlcnZhbCl7Y2FzZVwieWVhcnNcIjpcInllYXJcIj09PXQudW5pdCYmKG89ITApO2JyZWFrO2Nhc2VcImhhbGZfeWVhclwiOmU9NyxcInllYXJcIj09PXQudW5pdCYmKG89ITApO2JyZWFrO2Nhc2VcIm1vbnRoc1wiOmU9MSxcInllYXJcIj09PXQudW5pdCYmKG89ITApO2JyZWFrO2Nhc2VcIm1vbnRoc19mb3J0bmlnaHRcIjplPTE1LFwieWVhclwiIT09dC51bml0JiZcIm1vbnRoXCIhPT10LnVuaXR8fChvPSEwKSwzMD09PXImJihuPSEwKTticmVhaztjYXNlXCJtb250aHNfZGF5c1wiOmU9MTAsXCJtb250aFwiPT09dC51bml0JiYobz0hMCksMzA9PT1yJiYobj0hMCk7YnJlYWs7Y2FzZVwid2Vla19kYXlzXCI6ZT04LFwibW9udGhcIj09PXQudW5pdCYmKG89ITApO2JyZWFrO2Nhc2VcImRheXNcIjplPTEsXCJtb250aFwiPT09dC51bml0JiYobz0hMCk7YnJlYWs7Y2FzZVwiaG91cnNcIjpcImRheVwiPT09dC51bml0JiYobz0hMCk7YnJlYWs7Y2FzZVwibWludXRlc19maXZlc1wiOmNhc2VcInNlY29uZHNfZml2ZXNcIjpyJTUhPTAmJihuPSEwKTticmVhaztjYXNlXCJzZWNvbmRzX3RlbnNcIjpyJTEwIT0wJiYobj0hMCl9aWYoXCJob3Vyc1wiPT09YS50aWNrSW50ZXJ2YWx8fFwibWludXRlc19maXZlc1wiPT09YS50aWNrSW50ZXJ2YWx8fFwic2Vjb25kc190ZW5zXCI9PT1hLnRpY2tJbnRlcnZhbHx8XCJzZWNvbmRzX2ZpdmVzXCI9PT1hLnRpY2tJbnRlcnZhbCl7aWYoIW4pcmV0dXJuITB9ZWxzZSBpZigociVlPT0wfHxvKSYmIW4pcmV0dXJuITB9KSl9fSx7a2V5OlwicmVjYWxjRGltZW5zaW9uc0Jhc2VkT25Gb3JtYXRcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudyxhPXRoaXMuZm9ybWF0RGF0ZXModCkscz10aGlzLnJlbW92ZU92ZXJsYXBwaW5nVFMoYSk7aS5nbG9iYWxzLnRpbWVzY2FsZUxhYmVscz1zLnNsaWNlKCksbmV3IG90KHRoaXMuY3R4KS5wbG90Q29vcmRzKCl9fSx7a2V5OlwiZGV0ZXJtaW5lSW50ZXJ2YWxcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0yNCp0LGk9NjAqZTtzd2l0Y2goITApe2Nhc2UgdC8zNjU+NTp0aGlzLnRpY2tJbnRlcnZhbD1cInllYXJzXCI7YnJlYWs7Y2FzZSB0PjgwMDp0aGlzLnRpY2tJbnRlcnZhbD1cImhhbGZfeWVhclwiO2JyZWFrO2Nhc2UgdD4xODA6dGhpcy50aWNrSW50ZXJ2YWw9XCJtb250aHNcIjticmVhaztjYXNlIHQ+OTA6dGhpcy50aWNrSW50ZXJ2YWw9XCJtb250aHNfZm9ydG5pZ2h0XCI7YnJlYWs7Y2FzZSB0PjYwOnRoaXMudGlja0ludGVydmFsPVwibW9udGhzX2RheXNcIjticmVhaztjYXNlIHQ+MzA6dGhpcy50aWNrSW50ZXJ2YWw9XCJ3ZWVrX2RheXNcIjticmVhaztjYXNlIHQ+Mjp0aGlzLnRpY2tJbnRlcnZhbD1cImRheXNcIjticmVhaztjYXNlIGU+Mi40OnRoaXMudGlja0ludGVydmFsPVwiaG91cnNcIjticmVhaztjYXNlIGk+MTU6dGhpcy50aWNrSW50ZXJ2YWw9XCJtaW51dGVzX2ZpdmVzXCI7YnJlYWs7Y2FzZSBpPjU6dGhpcy50aWNrSW50ZXJ2YWw9XCJtaW51dGVzXCI7YnJlYWs7Y2FzZSBpPjE6dGhpcy50aWNrSW50ZXJ2YWw9XCJzZWNvbmRzX3RlbnNcIjticmVhaztjYXNlIDYwKmk+MjA6dGhpcy50aWNrSW50ZXJ2YWw9XCJzZWNvbmRzX2ZpdmVzXCI7YnJlYWs7ZGVmYXVsdDp0aGlzLnRpY2tJbnRlcnZhbD1cInNlY29uZHNcIn19fSx7a2V5OlwiZ2VuZXJhdGVZZWFyU2NhbGVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmZpcnN0VmFsLGk9dC5jdXJyZW50TW9udGgsYT10LmN1cnJlbnRZZWFyLHM9dC5kYXlzV2lkdGhPblhBeGlzLHI9dC5udW1iZXJPZlllYXJzLG89ZS5taW5ZZWFyLG49MCxsPW5ldyBUKHRoaXMuY3R4KSxoPVwieWVhclwiO2lmKGUubWluRGF0ZT4xfHxlLm1pbk1vbnRoPjApe3ZhciBjPWwuZGV0ZXJtaW5lUmVtYWluaW5nRGF5c09mWWVhcihlLm1pblllYXIsZS5taW5Nb250aCxlLm1pbkRhdGUpO249KGwuZGV0ZXJtaW5lRGF5c09mWWVhcihlLm1pblllYXIpLWMrMSkqcyxvPWUubWluWWVhcisxLHRoaXMudGltZVNjYWxlQXJyYXkucHVzaCh7cG9zaXRpb246bix2YWx1ZTpvLHVuaXQ6aCx5ZWFyOm8sbW9udGg6eC5tb250aE1vZChpKzEpfSl9ZWxzZSAxPT09ZS5taW5EYXRlJiYwPT09ZS5taW5Nb250aCYmdGhpcy50aW1lU2NhbGVBcnJheS5wdXNoKHtwb3NpdGlvbjpuLHZhbHVlOm8sdW5pdDpoLHllYXI6YSxtb250aDp4Lm1vbnRoTW9kKGkrMSl9KTtmb3IodmFyIGQ9byxnPW4sdT0wO3U8cjt1KyspZCsrLGc9bC5kZXRlcm1pbmVEYXlzT2ZZZWFyKGQtMSkqcytnLHRoaXMudGltZVNjYWxlQXJyYXkucHVzaCh7cG9zaXRpb246Zyx2YWx1ZTpkLHVuaXQ6aCx5ZWFyOmQsbW9udGg6MX0pfX0se2tleTpcImdlbmVyYXRlTW9udGhTY2FsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZmlyc3RWYWwsaT10LmN1cnJlbnRNb250aERhdGUsYT10LmN1cnJlbnRNb250aCxzPXQuY3VycmVudFllYXIscj10LmRheXNXaWR0aE9uWEF4aXMsbz10Lm51bWJlck9mTW9udGhzLG49YSxsPTAsaD1uZXcgVCh0aGlzLmN0eCksYz1cIm1vbnRoXCIsZD0wO2lmKGUubWluRGF0ZT4xKXtsPShoLmRldGVybWluZURheXNPZk1vbnRocyhhKzEsZS5taW5ZZWFyKS1pKzEpKnIsbj14Lm1vbnRoTW9kKGErMSk7dmFyIGc9cytkLHU9eC5tb250aE1vZChuKSxmPW47MD09PW4mJihjPVwieWVhclwiLGY9Zyx1PTEsZys9ZCs9MSksdGhpcy50aW1lU2NhbGVBcnJheS5wdXNoKHtwb3NpdGlvbjpsLHZhbHVlOmYsdW5pdDpjLHllYXI6Zyxtb250aDp1fSl9ZWxzZSB0aGlzLnRpbWVTY2FsZUFycmF5LnB1c2goe3Bvc2l0aW9uOmwsdmFsdWU6bix1bml0OmMseWVhcjpzLG1vbnRoOngubW9udGhNb2QoYSl9KTtmb3IodmFyIHA9bisxLGI9bCx2PTAsbT0xO3Y8bzt2KyssbSsrKXswPT09KHA9eC5tb250aE1vZChwKSk/KGM9XCJ5ZWFyXCIsZCs9MSk6Yz1cIm1vbnRoXCI7dmFyIHk9dGhpcy5fZ2V0WWVhcihzLHAsZCk7Yj1oLmRldGVybWluZURheXNPZk1vbnRocyhwLHkpKnIrYjt2YXIgdz0wPT09cD95OnA7dGhpcy50aW1lU2NhbGVBcnJheS5wdXNoKHtwb3NpdGlvbjpiLHZhbHVlOncsdW5pdDpjLHllYXI6eSxtb250aDowPT09cD8xOnB9KSxwKyt9fX0se2tleTpcImdlbmVyYXRlRGF5U2NhbGVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10LmZpcnN0VmFsLGk9dC5jdXJyZW50TW9udGgsYT10LmN1cnJlbnRZZWFyLHM9dC5ob3Vyc1dpZHRoT25YQXhpcyxyPXQubnVtYmVyT2ZEYXlzLG89bmV3IFQodGhpcy5jdHgpLG49XCJkYXlcIixsPWUubWluRGF0ZSsxLGg9bCxjPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdD5vLmRldGVybWluZURheXNPZk1vbnRocyhlKzEsaSk/KGg9MSxuPVwibW9udGhcIixnPWUrPTEsZSk6ZX0sZD0oMjQtZS5taW5Ib3VyKSpzLGc9bCx1PWMoaCxpLGEpOzA9PT1lLm1pbkhvdXImJjE9PT1lLm1pbkRhdGU/KGQ9MCxnPXgubW9udGhNb2QoZS5taW5Nb250aCksbj1cIm1vbnRoXCIsaD1lLm1pbkRhdGUscisrKToxIT09ZS5taW5EYXRlJiYwPT09ZS5taW5Ib3VyJiYwPT09ZS5taW5NaW51dGUmJihkPTAsbD1lLm1pbkRhdGUsZz1sLHU9YyhoPWwsaSxhKSksdGhpcy50aW1lU2NhbGVBcnJheS5wdXNoKHtwb3NpdGlvbjpkLHZhbHVlOmcsdW5pdDpuLHllYXI6dGhpcy5fZ2V0WWVhcihhLHUsMCksbW9udGg6eC5tb250aE1vZCh1KSxkYXk6aH0pO2Zvcih2YXIgZj1kLHA9MDtwPHI7cCsrKXtuPVwiZGF5XCIsdT1jKGgrPTEsdSx0aGlzLl9nZXRZZWFyKGEsdSwwKSk7dmFyIGI9dGhpcy5fZ2V0WWVhcihhLHUsMCk7Zj0yNCpzK2Y7dmFyIHY9MT09PWg/eC5tb250aE1vZCh1KTpoO3RoaXMudGltZVNjYWxlQXJyYXkucHVzaCh7cG9zaXRpb246Zix2YWx1ZTp2LHVuaXQ6bix5ZWFyOmIsbW9udGg6eC5tb250aE1vZCh1KSxkYXk6dn0pfX19LHtrZXk6XCJnZW5lcmF0ZUhvdXJTY2FsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZmlyc3RWYWwsaT10LmN1cnJlbnREYXRlLGE9dC5jdXJyZW50TW9udGgscz10LmN1cnJlbnRZZWFyLHI9dC5taW51dGVzV2lkdGhPblhBeGlzLG89dC5udW1iZXJPZkhvdXJzLG49bmV3IFQodGhpcy5jdHgpLGw9XCJob3VyXCIsaD1mdW5jdGlvbih0LGUpe3JldHVybiB0Pm4uZGV0ZXJtaW5lRGF5c09mTW9udGhzKGUrMSxzKSYmKHA9MSxlKz0xKSx7bW9udGg6ZSxkYXRlOnB9fSxjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+bi5kZXRlcm1pbmVEYXlzT2ZNb250aHMoZSsxLHMpP2UrPTE6ZX0sZD02MC0oZS5taW5NaW51dGUrZS5taW5TZWNvbmQvNjApLGc9ZCpyLHU9ZS5taW5Ib3VyKzEsZj11KzE7NjA9PT1kJiYoZz0wLGY9KHU9ZS5taW5Ib3VyKSsxKTt2YXIgcD1pLGI9YyhwLGEpO3RoaXMudGltZVNjYWxlQXJyYXkucHVzaCh7cG9zaXRpb246Zyx2YWx1ZTp1LHVuaXQ6bCxkYXk6cCxob3VyOmYseWVhcjpzLG1vbnRoOngubW9udGhNb2QoYil9KTtmb3IodmFyIHY9ZyxtPTA7bTxvO20rKyl7aWYobD1cImhvdXJcIixmPj0yNClmPTAsbD1cImRheVwiLGI9aChwKz0xLGIpLm1vbnRoLGI9YyhwLGIpO3ZhciB5PXRoaXMuX2dldFllYXIocyxiLDApO3Y9MD09PWYmJjA9PT1tP2Qqcjo2MCpyK3Y7dmFyIHc9MD09PWY/cDpmO3RoaXMudGltZVNjYWxlQXJyYXkucHVzaCh7cG9zaXRpb246dix2YWx1ZTp3LHVuaXQ6bCxob3VyOmYsZGF5OnAseWVhcjp5LG1vbnRoOngubW9udGhNb2QoYil9KSxmKyt9fX0se2tleTpcImdlbmVyYXRlTWludXRlU2NhbGVcIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jdXJyZW50TWlsbGlzZWNvbmQsaT10LmN1cnJlbnRTZWNvbmQsYT10LmN1cnJlbnRNaW51dGUscz10LmN1cnJlbnRIb3VyLHI9dC5jdXJyZW50RGF0ZSxvPXQuY3VycmVudE1vbnRoLG49dC5jdXJyZW50WWVhcixsPXQubWludXRlc1dpZHRoT25YQXhpcyxoPXQuc2Vjb25kc1dpZHRoT25YQXhpcyxjPXQubnVtYmVyT2ZNaW51dGVzLGQ9YSsxLGc9cix1PW8sZj1uLHA9cyxiPSg2MC1pLWUvMWUzKSpoLHY9MDt2PGM7disrKWQ+PTYwJiYoZD0wLDI0PT09KHArPTEpJiYocD0wKSksdGhpcy50aW1lU2NhbGVBcnJheS5wdXNoKHtwb3NpdGlvbjpiLHZhbHVlOmQsdW5pdDpcIm1pbnV0ZVwiLGhvdXI6cCxtaW51dGU6ZCxkYXk6Zyx5ZWFyOnRoaXMuX2dldFllYXIoZix1LDApLG1vbnRoOngubW9udGhNb2QodSl9KSxiKz1sLGQrK319LHtrZXk6XCJnZW5lcmF0ZVNlY29uZFNjYWxlXCIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY3VycmVudE1pbGxpc2Vjb25kLGk9dC5jdXJyZW50U2Vjb25kLGE9dC5jdXJyZW50TWludXRlLHM9dC5jdXJyZW50SG91cixyPXQuY3VycmVudERhdGUsbz10LmN1cnJlbnRNb250aCxuPXQuY3VycmVudFllYXIsbD10LnNlY29uZHNXaWR0aE9uWEF4aXMsaD10Lm51bWJlck9mU2Vjb25kcyxjPWkrMSxkPWEsZz1yLHU9byxmPW4scD1zLGI9KDFlMy1lKS8xZTMqbCx2PTA7djxoO3YrKyljPj02MCYmKGM9MCwrK2Q+PTYwJiYoZD0wLDI0PT09KytwJiYocD0wKSkpLHRoaXMudGltZVNjYWxlQXJyYXkucHVzaCh7cG9zaXRpb246Yix2YWx1ZTpjLHVuaXQ6XCJzZWNvbmRcIixob3VyOnAsbWludXRlOmQsc2Vjb25kOmMsZGF5OmcseWVhcjp0aGlzLl9nZXRZZWFyKGYsdSwwKSxtb250aDp4Lm1vbnRoTW9kKHUpfSksYis9bCxjKyt9fSx7a2V5OlwiY3JlYXRlUmF3RGF0ZVN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC55ZWFyO3JldHVybiAwPT09dC5tb250aCYmKHQubW9udGg9MSksaSs9XCItXCIrKFwiMFwiK3QubW9udGgudG9TdHJpbmcoKSkuc2xpY2UoLTIpLFwiZGF5XCI9PT10LnVuaXQ/aSs9XCJkYXlcIj09PXQudW5pdD9cIi1cIisoXCIwXCIrZSkuc2xpY2UoLTIpOlwiLTAxXCI6aSs9XCItXCIrKFwiMFwiKyh0LmRheT90LmRheTpcIjFcIikpLnNsaWNlKC0yKSxcImhvdXJcIj09PXQudW5pdD9pKz1cImhvdXJcIj09PXQudW5pdD9cIlRcIisoXCIwXCIrZSkuc2xpY2UoLTIpOlwiVDAwXCI6aSs9XCJUXCIrKFwiMFwiKyh0LmhvdXI/dC5ob3VyOlwiMFwiKSkuc2xpY2UoLTIpLFwibWludXRlXCI9PT10LnVuaXQ/aSs9XCI6XCIrKFwiMFwiK2UpLnNsaWNlKC0yKTppKz1cIjpcIisodC5taW51dGU/KFwiMFwiK3QubWludXRlKS5zbGljZSgtMik6XCIwMFwiKSxcInNlY29uZFwiPT09dC51bml0P2krPVwiOlwiKyhcIjBcIitlKS5zbGljZSgtMik6aSs9XCI6MDBcIix0aGlzLnV0YyYmKGkrPVwiLjAwMFpcIiksaX19LHtrZXk6XCJmb3JtYXREYXRlc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLnc7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXt2YXIgYT10LnZhbHVlLnRvU3RyaW5nKCkscz1uZXcgVChlLmN0eCkscj1lLmNyZWF0ZVJhd0RhdGVTdHJpbmcodCxhKSxvPXMuZ2V0RGF0ZShzLnBhcnNlRGF0ZShyKSk7aWYoZS51dGN8fChvPXMuZ2V0RGF0ZShzLnBhcnNlRGF0ZVdpdGhUaW1lem9uZShyKSkpLHZvaWQgMD09PWkuY29uZmlnLnhheGlzLmxhYmVscy5mb3JtYXQpe3ZhciBuPVwiZGQgTU1NXCIsbD1pLmNvbmZpZy54YXhpcy5sYWJlbHMuZGF0ZXRpbWVGb3JtYXR0ZXI7XCJ5ZWFyXCI9PT10LnVuaXQmJihuPWwueWVhciksXCJtb250aFwiPT09dC51bml0JiYobj1sLm1vbnRoKSxcImRheVwiPT09dC51bml0JiYobj1sLmRheSksXCJob3VyXCI9PT10LnVuaXQmJihuPWwuaG91ciksXCJtaW51dGVcIj09PXQudW5pdCYmKG49bC5taW51dGUpLFwic2Vjb25kXCI9PT10LnVuaXQmJihuPWwuc2Vjb25kKSxhPXMuZm9ybWF0RGF0ZShvLG4pfWVsc2UgYT1zLmZvcm1hdERhdGUobyxpLmNvbmZpZy54YXhpcy5sYWJlbHMuZm9ybWF0KTtyZXR1cm57ZGF0ZVN0cmluZzpyLHBvc2l0aW9uOnQucG9zaXRpb24sdmFsdWU6YSx1bml0OnQudW5pdCx5ZWFyOnQueWVhcixtb250aDp0Lm1vbnRofX0pKX19LHtrZXk6XCJyZW1vdmVPdmVybGFwcGluZ1RTXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLGE9bmV3IG0odGhpcy5jdHgpLHM9ITE7dC5sZW5ndGg+MCYmdFswXS52YWx1ZSYmdC5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWUubGVuZ3RoPT09dFswXS52YWx1ZS5sZW5ndGh9KSkmJihzPSEwLGU9YS5nZXRUZXh0UmVjdHModFswXS52YWx1ZSkud2lkdGgpO3ZhciByPTAsbz10Lm1hcCgoZnVuY3Rpb24obyxuKXtpZihuPjAmJmkudy5jb25maWcueGF4aXMubGFiZWxzLmhpZGVPdmVybGFwcGluZ0xhYmVscyl7dmFyIGw9cz9lOmEuZ2V0VGV4dFJlY3RzKHRbcl0udmFsdWUpLndpZHRoLGg9dFtyXS5wb3NpdGlvbjtyZXR1cm4gby5wb3NpdGlvbj5oK2wrMTA/KHI9bixvKTpudWxsfXJldHVybiBvfSkpO3JldHVybiBvPW8uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXR9KSl9fSx7a2V5OlwiX2dldFllYXJcIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQrTWF0aC5mbG9vcihlLzEyKStpfX1dKSx0fSgpLER0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLGkpe2EodGhpcyx0KSx0aGlzLmN0eD1pLHRoaXMudz1pLncsdGhpcy5lbD1lfXJldHVybiByKHQsW3trZXk6XCJzZXR1cEVsZW1lbnRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncuZ2xvYmFscyxlPXRoaXMudy5jb25maWcsaT1lLmNoYXJ0LnR5cGU7dC5heGlzQ2hhcnRzPVtcImxpbmVcIixcImFyZWFcIixcImJhclwiLFwicmFuZ2VCYXJcIixcInJhbmdlQXJlYVwiLFwiY2FuZGxlc3RpY2tcIixcImJveFBsb3RcIixcInNjYXR0ZXJcIixcImJ1YmJsZVwiLFwicmFkYXJcIixcImhlYXRtYXBcIixcInRyZWVtYXBcIl0uaW5kZXhPZihpKT4tMSx0Lnh5Q2hhcnRzPVtcImxpbmVcIixcImFyZWFcIixcImJhclwiLFwicmFuZ2VCYXJcIixcInJhbmdlQXJlYVwiLFwiY2FuZGxlc3RpY2tcIixcImJveFBsb3RcIixcInNjYXR0ZXJcIixcImJ1YmJsZVwiXS5pbmRleE9mKGkpPi0xLHQuaXNCYXJIb3Jpem9udGFsPShcImJhclwiPT09ZS5jaGFydC50eXBlfHxcInJhbmdlQmFyXCI9PT1lLmNoYXJ0LnR5cGV8fFwiYm94UGxvdFwiPT09ZS5jaGFydC50eXBlKSYmZS5wbG90T3B0aW9ucy5iYXIuaG9yaXpvbnRhbCx0LmNoYXJ0Q2xhc3M9XCIuYXBleGNoYXJ0c1wiK3QuY2hhcnRJRCx0LmRvbS5iYXNlRWw9dGhpcy5lbCx0LmRvbS5lbFdyYXA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxtLnNldEF0dHJzKHQuZG9tLmVsV3JhcCx7aWQ6dC5jaGFydENsYXNzLnN1YnN0cmluZygxKSxjbGFzczpcImFwZXhjaGFydHMtY2FudmFzIFwiK3QuY2hhcnRDbGFzcy5zdWJzdHJpbmcoMSl9KSx0aGlzLmVsLmFwcGVuZENoaWxkKHQuZG9tLmVsV3JhcCksdC5kb20uUGFwZXI9bmV3IHdpbmRvdy5TVkcuRG9jKHQuZG9tLmVsV3JhcCksdC5kb20uUGFwZXIuYXR0cih7Y2xhc3M6XCJhcGV4Y2hhcnRzLXN2Z1wiLFwieG1sbnM6ZGF0YVwiOlwiQXBleENoYXJ0c05TXCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiLmNvbmNhdChlLmNoYXJ0Lm9mZnNldFgsXCIsIFwiKS5jb25jYXQoZS5jaGFydC5vZmZzZXRZLFwiKVwiKX0pLHQuZG9tLlBhcGVyLm5vZGUuc3R5bGUuYmFja2dyb3VuZD1lLmNoYXJ0LmJhY2tncm91bmQsdGhpcy5zZXRTVkdEaW1lbnNpb25zKCksdC5kb20uZWxHcmFwaGljYWw9dC5kb20uUGFwZXIuZ3JvdXAoKS5hdHRyKHtjbGFzczpcImFwZXhjaGFydHMtaW5uZXIgYXBleGNoYXJ0cy1ncmFwaGljYWxcIn0pLHQuZG9tLmVsQW5ub3RhdGlvbnM9dC5kb20uUGFwZXIuZ3JvdXAoKS5hdHRyKHtjbGFzczpcImFwZXhjaGFydHMtYW5ub3RhdGlvbnNcIn0pLHQuZG9tLmVsRGVmcz10LmRvbS5QYXBlci5kZWZzKCksdC5kb20uZWxMZWdlbmRXcmFwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdC5kb20uZWxMZWdlbmRXcmFwLmNsYXNzTGlzdC5hZGQoXCJhcGV4Y2hhcnRzLWxlZ2VuZFwiKSx0LmRvbS5lbFdyYXAuYXBwZW5kQ2hpbGQodC5kb20uZWxMZWdlbmRXcmFwKSx0LmRvbS5QYXBlci5hZGQodC5kb20uZWxHcmFwaGljYWwpLHQuZG9tLmVsR3JhcGhpY2FsLmFkZCh0LmRvbS5lbERlZnMpfX0se2tleTpcInBsb3RDaGFydFR5cGVcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudyxhPWkuY29uZmlnLHM9aS5nbG9iYWxzLHI9e3NlcmllczpbXSxpOltdfSxvPXtzZXJpZXM6W10saTpbXX0sbj17c2VyaWVzOltdLGk6W119LGw9e3NlcmllczpbXSxpOltdfSxoPXtzZXJpZXM6W10saTpbXX0sYz17c2VyaWVzOltdLGk6W119LGQ9e3NlcmllczpbXSxpOltdfSxnPXtzZXJpZXM6W10saTpbXX0sdT17c2VyaWVzOltdLHNlcmllc1JhbmdlRW5kOltdLGk6W119O3Muc2VyaWVzLm1hcCgoZnVuY3Rpb24oZSxmKXt2YXIgcD0wO3ZvaWQgMCE9PXRbZl0udHlwZT8oXCJjb2x1bW5cIj09PXRbZl0udHlwZXx8XCJiYXJcIj09PXRbZl0udHlwZT8ocy5zZXJpZXMubGVuZ3RoPjEmJmEucGxvdE9wdGlvbnMuYmFyLmhvcml6b250YWwmJmNvbnNvbGUud2FybihcIkhvcml6b250YWwgYmFycyBhcmUgbm90IHN1cHBvcnRlZCBpbiBhIG1peGVkL2NvbWJvIGNoYXJ0LiBQbGVhc2UgdHVybiBvZmYgYHBsb3RPcHRpb25zLmJhci5ob3Jpem9udGFsYFwiKSxoLnNlcmllcy5wdXNoKGUpLGguaS5wdXNoKGYpLHArKyxpLmdsb2JhbHMuY29sdW1uU2VyaWVzPWguc2VyaWVzKTpcImFyZWFcIj09PXRbZl0udHlwZT8oby5zZXJpZXMucHVzaChlKSxvLmkucHVzaChmKSxwKyspOlwibGluZVwiPT09dFtmXS50eXBlPyhyLnNlcmllcy5wdXNoKGUpLHIuaS5wdXNoKGYpLHArKyk6XCJzY2F0dGVyXCI9PT10W2ZdLnR5cGU/KG4uc2VyaWVzLnB1c2goZSksbi5pLnB1c2goZikpOlwiYnViYmxlXCI9PT10W2ZdLnR5cGU/KGwuc2VyaWVzLnB1c2goZSksbC5pLnB1c2goZikscCsrKTpcImNhbmRsZXN0aWNrXCI9PT10W2ZdLnR5cGU/KGMuc2VyaWVzLnB1c2goZSksYy5pLnB1c2goZikscCsrKTpcImJveFBsb3RcIj09PXRbZl0udHlwZT8oZC5zZXJpZXMucHVzaChlKSxkLmkucHVzaChmKSxwKyspOlwicmFuZ2VCYXJcIj09PXRbZl0udHlwZT8oZy5zZXJpZXMucHVzaChlKSxnLmkucHVzaChmKSxwKyspOlwicmFuZ2VBcmVhXCI9PT10W2ZdLnR5cGU/KHUuc2VyaWVzLnB1c2gocy5zZXJpZXNSYW5nZVN0YXJ0W2ZdKSx1LnNlcmllc1JhbmdlRW5kLnB1c2gocy5zZXJpZXNSYW5nZUVuZFtmXSksdS5pLnB1c2goZikscCsrKTpjb25zb2xlLndhcm4oXCJZb3UgaGF2ZSBzcGVjaWZpZWQgYW4gdW5yZWNvZ25pemVkIGNoYXJ0IHR5cGUuIEF2YWlsYWJsZSB0eXBlcyBmb3IgdGhpcyBwcm9wZXJ0eSBhcmUgbGluZS9hcmVhL2NvbHVtbi9iYXIvc2NhdHRlci9idWJibGVcIikscD4xJiYocy5jb21ib0NoYXJ0cz0hMCkpOihyLnNlcmllcy5wdXNoKGUpLHIuaS5wdXNoKGYpKX0pKTt2YXIgZj1uZXcgWHQodGhpcy5jdHgsZSkscD1uZXcga3QodGhpcy5jdHgsZSk7dGhpcy5jdHgucGllPW5ldyBMdCh0aGlzLmN0eCk7dmFyIHg9bmV3IFR0KHRoaXMuY3R4KTt0aGlzLmN0eC5yYW5nZUJhcj1uZXcgTXQodGhpcy5jdHgsZSk7dmFyIGI9bmV3IFB0KHRoaXMuY3R4KSx2PVtdO2lmKHMuY29tYm9DaGFydHMpe2lmKG8uc2VyaWVzLmxlbmd0aD4wJiZ2LnB1c2goZi5kcmF3KG8uc2VyaWVzLFwiYXJlYVwiLG8uaSkpLGguc2VyaWVzLmxlbmd0aD4wKWlmKGkuY29uZmlnLmNoYXJ0LnN0YWNrZWQpe3ZhciBtPW5ldyB3dCh0aGlzLmN0eCxlKTt2LnB1c2gobS5kcmF3KGguc2VyaWVzLGguaSkpfWVsc2UgdGhpcy5jdHguYmFyPW5ldyB5dCh0aGlzLmN0eCxlKSx2LnB1c2godGhpcy5jdHguYmFyLmRyYXcoaC5zZXJpZXMsaC5pKSk7aWYodS5zZXJpZXMubGVuZ3RoPjAmJnYucHVzaChmLmRyYXcodS5zZXJpZXMsXCJyYW5nZUFyZWFcIix1LmksdS5zZXJpZXNSYW5nZUVuZCkpLHIuc2VyaWVzLmxlbmd0aD4wJiZ2LnB1c2goZi5kcmF3KHIuc2VyaWVzLFwibGluZVwiLHIuaSkpLGMuc2VyaWVzLmxlbmd0aD4wJiZ2LnB1c2gocC5kcmF3KGMuc2VyaWVzLGMuaSkpLGQuc2VyaWVzLmxlbmd0aD4wJiZ2LnB1c2gocC5kcmF3KGQuc2VyaWVzLGQuaSkpLGcuc2VyaWVzLmxlbmd0aD4wJiZ2LnB1c2godGhpcy5jdHgucmFuZ2VCYXIuZHJhdyhnLnNlcmllcyxnLmkpKSxuLnNlcmllcy5sZW5ndGg+MCl7dmFyIHk9bmV3IFh0KHRoaXMuY3R4LGUsITApO3YucHVzaCh5LmRyYXcobi5zZXJpZXMsXCJzY2F0dGVyXCIsbi5pKSl9aWYobC5zZXJpZXMubGVuZ3RoPjApe3ZhciB3PW5ldyBYdCh0aGlzLmN0eCxlLCEwKTt2LnB1c2gody5kcmF3KGwuc2VyaWVzLFwiYnViYmxlXCIsbC5pKSl9fWVsc2Ugc3dpdGNoKGEuY2hhcnQudHlwZSl7Y2FzZVwibGluZVwiOnY9Zi5kcmF3KHMuc2VyaWVzLFwibGluZVwiKTticmVhaztjYXNlXCJhcmVhXCI6dj1mLmRyYXcocy5zZXJpZXMsXCJhcmVhXCIpO2JyZWFrO2Nhc2VcImJhclwiOmlmKGEuY2hhcnQuc3RhY2tlZCl2PW5ldyB3dCh0aGlzLmN0eCxlKS5kcmF3KHMuc2VyaWVzKTtlbHNlIHRoaXMuY3R4LmJhcj1uZXcgeXQodGhpcy5jdHgsZSksdj10aGlzLmN0eC5iYXIuZHJhdyhzLnNlcmllcyk7YnJlYWs7Y2FzZVwiY2FuZGxlc3RpY2tcIjp2PW5ldyBrdCh0aGlzLmN0eCxlKS5kcmF3KHMuc2VyaWVzKTticmVhaztjYXNlXCJib3hQbG90XCI6dj1uZXcga3QodGhpcy5jdHgsZSkuZHJhdyhzLnNlcmllcyk7YnJlYWs7Y2FzZVwicmFuZ2VCYXJcIjp2PXRoaXMuY3R4LnJhbmdlQmFyLmRyYXcocy5zZXJpZXMpO2JyZWFrO2Nhc2VcInJhbmdlQXJlYVwiOnY9Zi5kcmF3KHMuc2VyaWVzUmFuZ2VTdGFydCxcInJhbmdlQXJlYVwiLHZvaWQgMCxzLnNlcmllc1JhbmdlRW5kKTticmVhaztjYXNlXCJoZWF0bWFwXCI6dj1uZXcgU3QodGhpcy5jdHgsZSkuZHJhdyhzLnNlcmllcyk7YnJlYWs7Y2FzZVwidHJlZW1hcFwiOnY9bmV3IFl0KHRoaXMuY3R4LGUpLmRyYXcocy5zZXJpZXMpO2JyZWFrO2Nhc2VcInBpZVwiOmNhc2VcImRvbnV0XCI6Y2FzZVwicG9sYXJBcmVhXCI6dj10aGlzLmN0eC5waWUuZHJhdyhzLnNlcmllcyk7YnJlYWs7Y2FzZVwicmFkaWFsQmFyXCI6dj14LmRyYXcocy5zZXJpZXMpO2JyZWFrO2Nhc2VcInJhZGFyXCI6dj1iLmRyYXcocy5zZXJpZXMpO2JyZWFrO2RlZmF1bHQ6dj1mLmRyYXcocy5zZXJpZXMpfXJldHVybiB2fX0se2tleTpcInNldFNWR0RpbWVuc2lvbnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMudy5nbG9iYWxzLGU9dGhpcy53LmNvbmZpZzt0LnN2Z1dpZHRoPWUuY2hhcnQud2lkdGgsdC5zdmdIZWlnaHQ9ZS5jaGFydC5oZWlnaHQ7dmFyIGk9eC5nZXREaW1lbnNpb25zKHRoaXMuZWwpLGE9ZS5jaGFydC53aWR0aC50b1N0cmluZygpLnNwbGl0KC9bMC05XSsvZykucG9wKCk7XCIlXCI9PT1hP3guaXNOdW1iZXIoaVswXSkmJigwPT09aVswXS53aWR0aCYmKGk9eC5nZXREaW1lbnNpb25zKHRoaXMuZWwucGFyZW50Tm9kZSkpLHQuc3ZnV2lkdGg9aVswXSpwYXJzZUludChlLmNoYXJ0LndpZHRoLDEwKS8xMDApOlwicHhcIiE9PWEmJlwiXCIhPT1hfHwodC5zdmdXaWR0aD1wYXJzZUludChlLmNoYXJ0LndpZHRoLDEwKSk7dmFyIHM9ZS5jaGFydC5oZWlnaHQudG9TdHJpbmcoKS5zcGxpdCgvWzAtOV0rL2cpLnBvcCgpO2lmKFwiYXV0b1wiIT09dC5zdmdIZWlnaHQmJlwiXCIhPT10LnN2Z0hlaWdodClpZihcIiVcIj09PXMpe3ZhciByPXguZ2V0RGltZW5zaW9ucyh0aGlzLmVsLnBhcmVudE5vZGUpO3Quc3ZnSGVpZ2h0PXJbMV0qcGFyc2VJbnQoZS5jaGFydC5oZWlnaHQsMTApLzEwMH1lbHNlIHQuc3ZnSGVpZ2h0PXBhcnNlSW50KGUuY2hhcnQuaGVpZ2h0LDEwKTtlbHNlIHQuYXhpc0NoYXJ0cz90LnN2Z0hlaWdodD10LnN2Z1dpZHRoLzEuNjE6dC5zdmdIZWlnaHQ9dC5zdmdXaWR0aC8xLjI7aWYodC5zdmdXaWR0aDwwJiYodC5zdmdXaWR0aD0wKSx0LnN2Z0hlaWdodDwwJiYodC5zdmdIZWlnaHQ9MCksbS5zZXRBdHRycyh0LmRvbS5QYXBlci5ub2RlLHt3aWR0aDp0LnN2Z1dpZHRoLGhlaWdodDp0LnN2Z0hlaWdodH0pLFwiJVwiIT09cyl7dmFyIG89ZS5jaGFydC5zcGFya2xpbmUuZW5hYmxlZD8wOnQuYXhpc0NoYXJ0cz9lLmNoYXJ0LnBhcmVudEhlaWdodE9mZnNldDowO3QuZG9tLlBhcGVyLm5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnN0eWxlLm1pbkhlaWdodD10LnN2Z0hlaWdodCtvK1wicHhcIn10LmRvbS5lbFdyYXAuc3R5bGUud2lkdGg9dC5zdmdXaWR0aCtcInB4XCIsdC5kb20uZWxXcmFwLnN0eWxlLmhlaWdodD10LnN2Z0hlaWdodCtcInB4XCJ9fSx7a2V5Olwic2hpZnRHcmFwaFBvc2l0aW9uXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLncuZ2xvYmFscyxlPXQudHJhbnNsYXRlWSxpPXt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrdC50cmFuc2xhdGVYK1wiLCBcIitlK1wiKVwifTttLnNldEF0dHJzKHQuZG9tLmVsR3JhcGhpY2FsLm5vZGUsaSl9fSx7a2V5OlwicmVzaXplTm9uQXhpc0NoYXJ0c1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53LGU9dC5nbG9iYWxzLGk9MCxhPXQuY29uZmlnLmNoYXJ0LnNwYXJrbGluZS5lbmFibGVkPzE6MTU7YSs9dC5jb25maWcuZ3JpZC5wYWRkaW5nLmJvdHRvbSxcInRvcFwiIT09dC5jb25maWcubGVnZW5kLnBvc2l0aW9uJiZcImJvdHRvbVwiIT09dC5jb25maWcubGVnZW5kLnBvc2l0aW9ufHwhdC5jb25maWcubGVnZW5kLnNob3d8fHQuY29uZmlnLmxlZ2VuZC5mbG9hdGluZ3x8KGk9bmV3IGx0KHRoaXMuY3R4KS5sZWdlbmRIZWxwZXJzLmdldExlZ2VuZEJCb3goKS5jbHdoKzEwKTt2YXIgcz10Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtcmFkaWFsYmFyLCAuYXBleGNoYXJ0cy1waWVcIikscj0yLjA1KnQuZ2xvYmFscy5yYWRpYWxTaXplO2lmKHMmJiF0LmNvbmZpZy5jaGFydC5zcGFya2xpbmUuZW5hYmxlZCYmMCE9PXQuY29uZmlnLnBsb3RPcHRpb25zLnJhZGlhbEJhci5zdGFydEFuZ2xlKXt2YXIgbz14LmdldEJvdW5kaW5nQ2xpZW50UmVjdChzKTtyPW8uYm90dG9tO3ZhciBuPW8uYm90dG9tLW8udG9wO3I9TWF0aC5tYXgoMi4wNSp0Lmdsb2JhbHMucmFkaWFsU2l6ZSxuKX12YXIgbD1yK2UudHJhbnNsYXRlWStpK2E7ZS5kb20uZWxMZWdlbmRGb3JlaWduJiZlLmRvbS5lbExlZ2VuZEZvcmVpZ24uc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsbCksdC5jb25maWcuY2hhcnQuaGVpZ2h0JiZTdHJpbmcodC5jb25maWcuY2hhcnQuaGVpZ2h0KS5pbmRleE9mKFwiJVwiKT4wfHwoZS5kb20uZWxXcmFwLnN0eWxlLmhlaWdodD1sK1wicHhcIixtLnNldEF0dHJzKGUuZG9tLlBhcGVyLm5vZGUse2hlaWdodDpsfSksZS5kb20uUGFwZXIubm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuc3R5bGUubWluSGVpZ2h0PWwrXCJweFwiKX19LHtrZXk6XCJjb3JlQ2FsY3VsYXRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oKXtuZXcgVSh0aGlzLmN0eCkuaW5pdCgpfX0se2tleTpcInJlc2V0R2xvYmFsc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPWZ1bmN0aW9uKCl7cmV0dXJuIHQudy5jb25maWcuc2VyaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW119KSl9LGk9bmV3IEUsYT10aGlzLncuZ2xvYmFscztpLmluaXRHbG9iYWxWYXJzKGEpLGEuc2VyaWVzWHZhbHVlcz1lKCksYS5zZXJpZXNZdmFsdWVzPWUoKX19LHtrZXk6XCJpc011bHRpcGxlWVwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy53LmNvbmZpZy55YXhpcy5jb25zdHJ1Y3Rvcj09PUFycmF5JiZ0aGlzLncuY29uZmlnLnlheGlzLmxlbmd0aD4xKXJldHVybiB0aGlzLncuZ2xvYmFscy5pc011bHRpcGxlWUF4aXM9ITAsITB9fSx7a2V5OlwieHlTZXR0aW5nc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPXRoaXMudztpZihlLmdsb2JhbHMuYXhpc0NoYXJ0cyl7aWYoXCJiYWNrXCI9PT1lLmNvbmZpZy54YXhpcy5jcm9zc2hhaXJzLnBvc2l0aW9uKW5ldyBRKHRoaXMuY3R4KS5kcmF3WENyb3NzaGFpcnMoKTtpZihcImJhY2tcIj09PWUuY29uZmlnLnlheGlzWzBdLmNyb3NzaGFpcnMucG9zaXRpb24pbmV3IFEodGhpcy5jdHgpLmRyYXdZQ3Jvc3NoYWlycygpO2lmKFwiZGF0ZXRpbWVcIj09PWUuY29uZmlnLnhheGlzLnR5cGUmJnZvaWQgMD09PWUuY29uZmlnLnhheGlzLmxhYmVscy5mb3JtYXR0ZXIpe3RoaXMuY3R4LnRpbWVTY2FsZT1uZXcgUnQodGhpcy5jdHgpO3ZhciBpPVtdO2lzRmluaXRlKGUuZ2xvYmFscy5taW5YKSYmaXNGaW5pdGUoZS5nbG9iYWxzLm1heFgpJiYhZS5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbD9pPXRoaXMuY3R4LnRpbWVTY2FsZS5jYWxjdWxhdGVUaW1lU2NhbGVUaWNrcyhlLmdsb2JhbHMubWluWCxlLmdsb2JhbHMubWF4WCk6ZS5nbG9iYWxzLmlzQmFySG9yaXpvbnRhbCYmKGk9dGhpcy5jdHgudGltZVNjYWxlLmNhbGN1bGF0ZVRpbWVTY2FsZVRpY2tzKGUuZ2xvYmFscy5taW5ZLGUuZ2xvYmFscy5tYXhZKSksdGhpcy5jdHgudGltZVNjYWxlLnJlY2FsY0RpbWVuc2lvbnNCYXNlZE9uRm9ybWF0KGkpfXQ9bmV3IHkodGhpcy5jdHgpLmdldENhbGN1bGF0ZWRSYXRpb3MoKX1yZXR1cm4gdH19LHtrZXk6XCJ1cGRhdGVTb3VyY2VDaGFydFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY3R4LncuZ2xvYmFscy5zZWxlY3Rpb249dm9pZCAwLHRoaXMuY3R4LnVwZGF0ZUhlbHBlcnMuX3VwZGF0ZU9wdGlvbnMoe2NoYXJ0OntzZWxlY3Rpb246e3hheGlzOnttaW46dC53Lmdsb2JhbHMubWluWCxtYXg6dC53Lmdsb2JhbHMubWF4WH19fX0sITEsITEpfX0se2tleTpcInNldHVwQnJ1c2hIYW5kbGVyXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dGhpcy53O2lmKGkuY29uZmlnLmNoYXJ0LmJydXNoLmVuYWJsZWQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGkuY29uZmlnLmNoYXJ0LmV2ZW50cy5zZWxlY3Rpb24pe3ZhciBhPWkuY29uZmlnLmNoYXJ0LmJydXNoLnRhcmdldHN8fFtpLmNvbmZpZy5jaGFydC5icnVzaC50YXJnZXRdO2EuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9QXBleENoYXJ0cy5nZXRDaGFydEJ5SUQoZSk7aS53Lmdsb2JhbHMuYnJ1c2hTb3VyY2U9dC5jdHgsXCJmdW5jdGlvblwiIT10eXBlb2YgaS53LmNvbmZpZy5jaGFydC5ldmVudHMuem9vbWVkJiYoaS53LmNvbmZpZy5jaGFydC5ldmVudHMuem9vbWVkPWZ1bmN0aW9uKCl7dC51cGRhdGVTb3VyY2VDaGFydChpKX0pLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkudy5jb25maWcuY2hhcnQuZXZlbnRzLnNjcm9sbGVkJiYoaS53LmNvbmZpZy5jaGFydC5ldmVudHMuc2Nyb2xsZWQ9ZnVuY3Rpb24oKXt0LnVwZGF0ZVNvdXJjZUNoYXJ0KGkpfSl9KSksaS5jb25maWcuY2hhcnQuZXZlbnRzLnNlbGVjdGlvbj1mdW5jdGlvbih0LHMpe2EuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGE9QXBleENoYXJ0cy5nZXRDaGFydEJ5SUQodCkscj14LmNsb25lKGkuY29uZmlnLnlheGlzKTtpZihpLmNvbmZpZy5jaGFydC5icnVzaC5hdXRvU2NhbGVZYXhpcyYmMT09PWEudy5nbG9iYWxzLnNlcmllcy5sZW5ndGgpe3ZhciBvPW5ldyBfKGEpO3I9by5hdXRvU2NhbGVZKGEscixzKX12YXIgbj1hLncuY29uZmlnLnlheGlzLnJlZHVjZSgoZnVuY3Rpb24odCxpLHMpe3JldHVybltdLmNvbmNhdCh1KHQpLFtlKGUoe30sYS53LmNvbmZpZy55YXhpc1tzXSkse30se21pbjpyWzBdLm1pbixtYXg6clswXS5tYXh9KV0pfSksW10pO2EuY3R4LnVwZGF0ZUhlbHBlcnMuX3VwZGF0ZU9wdGlvbnMoe3hheGlzOnttaW46cy54YXhpcy5taW4sbWF4OnMueGF4aXMubWF4fSx5YXhpczpufSwhMSwhMSwhMSwhMSl9KSl9fX19XSksdH0oKSxIdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7YSh0aGlzLHQpLHRoaXMuY3R4PWUsdGhpcy53PWUud31yZXR1cm4gcih0LFt7a2V5OlwiX3VwZGF0ZU9wdGlvbnNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxzPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0scj0hKGFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdLG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0mJmFyZ3VtZW50c1s0XTtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4pe3ZhciBsPVtlLmN0eF07ciYmKGw9ZS5jdHguZ2V0U3luY2VkQ2hhcnRzKCkpLGUuY3R4LncuZ2xvYmFscy5pc0V4ZWNDYWxsZWQmJihsPVtlLmN0eF0sZS5jdHgudy5nbG9iYWxzLmlzRXhlY0NhbGxlZD0hMSksbC5mb3JFYWNoKChmdW5jdGlvbihyLGgpe3ZhciBjPXIudztpZihjLmdsb2JhbHMuc2hvdWxkQW5pbWF0ZT1zLGF8fChjLmdsb2JhbHMucmVzaXplZD0hMCxjLmdsb2JhbHMuZGF0YUNoYW5nZWQ9ITAscyYmci5zZXJpZXMuZ2V0UHJldmlvdXNQYXRocygpKSx0JiZcIm9iamVjdFwiPT09aSh0KSYmKHIuY29uZmlnPW5ldyB6KHQpLHQ9eS5leHRlbmRBcnJheVByb3BzKHIuY29uZmlnLHQsYyksci53Lmdsb2JhbHMuY2hhcnRJRCE9PWUuY3R4LncuZ2xvYmFscy5jaGFydElEJiZkZWxldGUgdC5zZXJpZXMsYy5jb25maWc9eC5leHRlbmQoYy5jb25maWcsdCksbyYmKGMuZ2xvYmFscy5sYXN0WEF4aXM9dC54YXhpcz94LmNsb25lKHQueGF4aXMpOltdLGMuZ2xvYmFscy5sYXN0WUF4aXM9dC55YXhpcz94LmNsb25lKHQueWF4aXMpOltdLGMuZ2xvYmFscy5pbml0aWFsQ29uZmlnPXguZXh0ZW5kKHt9LGMuY29uZmlnKSxjLmdsb2JhbHMuaW5pdGlhbFNlcmllcz14LmNsb25lKGMuY29uZmlnLnNlcmllcyksdC5zZXJpZXMpKSl7Zm9yKHZhciBkPTA7ZDxjLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzSW5kaWNlcy5sZW5ndGg7ZCsrKXt2YXIgZz1jLmNvbmZpZy5zZXJpZXNbYy5nbG9iYWxzLmNvbGxhcHNlZFNlcmllc0luZGljZXNbZF1dO2MuZ2xvYmFscy5jb2xsYXBzZWRTZXJpZXNbZF0uZGF0YT1jLmdsb2JhbHMuYXhpc0NoYXJ0cz9nLmRhdGEuc2xpY2UoKTpnfWZvcih2YXIgdT0wO3U8Yy5nbG9iYWxzLmFuY2lsbGFyeUNvbGxhcHNlZFNlcmllc0luZGljZXMubGVuZ3RoO3UrKyl7dmFyIGY9Yy5jb25maWcuc2VyaWVzW2MuZ2xvYmFscy5hbmNpbGxhcnlDb2xsYXBzZWRTZXJpZXNJbmRpY2VzW3VdXTtjLmdsb2JhbHMuYW5jaWxsYXJ5Q29sbGFwc2VkU2VyaWVzW3VdLmRhdGE9Yy5nbG9iYWxzLmF4aXNDaGFydHM/Zi5kYXRhLnNsaWNlKCk6Zn1yLnNlcmllcy5lbXB0eUNvbGxhcHNlZFNlcmllcyhjLmNvbmZpZy5zZXJpZXMpfXJldHVybiByLnVwZGF0ZSh0KS50aGVuKChmdW5jdGlvbigpe2g9PT1sLmxlbmd0aC0xJiZuKHIpfSkpfSkpfSkpfX0se2tleTpcIl91cGRhdGVTZXJpZXNcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMsYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocyl7dmFyIHIsbz1pLnc7cmV0dXJuIG8uZ2xvYmFscy5zaG91bGRBbmltYXRlPWUsby5nbG9iYWxzLmRhdGFDaGFuZ2VkPSEwLGUmJmkuY3R4LnNlcmllcy5nZXRQcmV2aW91c1BhdGhzKCksby5nbG9iYWxzLmF4aXNDaGFydHM/KDA9PT0ocj10Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5fZXh0ZW5kU2VyaWVzKHQsZSl9KSkpLmxlbmd0aCYmKHI9W3tkYXRhOltdfV0pLG8uY29uZmlnLnNlcmllcz1yKTpvLmNvbmZpZy5zZXJpZXM9dC5zbGljZSgpLGEmJihvLmdsb2JhbHMuaW5pdGlhbENvbmZpZy5zZXJpZXM9eC5jbG9uZShvLmNvbmZpZy5zZXJpZXMpLG8uZ2xvYmFscy5pbml0aWFsU2VyaWVzPXguY2xvbmUoby5jb25maWcuc2VyaWVzKSksaS5jdHgudXBkYXRlKCkudGhlbigoZnVuY3Rpb24oKXtzKGkuY3R4KX0pKX0pKX19LHtrZXk6XCJfZXh0ZW5kU2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24odCxpKXt2YXIgYT10aGlzLncscz1hLmNvbmZpZy5zZXJpZXNbaV07cmV0dXJuIGUoZSh7fSxhLmNvbmZpZy5zZXJpZXNbaV0pLHt9LHtuYW1lOnQubmFtZT90Lm5hbWU6cyYmcy5uYW1lLGNvbG9yOnQuY29sb3I/dC5jb2xvcjpzJiZzLmNvbG9yLHR5cGU6dC50eXBlP3QudHlwZTpzJiZzLnR5cGUsZGF0YTp0LmRhdGE/dC5kYXRhOnMmJnMuZGF0YX0pfX0se2tleTpcInRvZ2dsZURhdGFQb2ludFNlbGVjdGlvblwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy53LGE9bnVsbCxzPVwiLmFwZXhjaGFydHMtc2VyaWVzW2RhdGFcXFxcOnJlYWxJbmRleD0nXCIuY29uY2F0KHQsXCInXVwiKTtyZXR1cm4gaS5nbG9iYWxzLmF4aXNDaGFydHM/YT1pLmdsb2JhbHMuZG9tLlBhcGVyLnNlbGVjdChcIlwiLmNvbmNhdChzLFwiIHBhdGhbaj0nXCIpLmNvbmNhdChlLFwiJ10sIFwiKS5jb25jYXQocyxcIiBjaXJjbGVbaj0nXCIpLmNvbmNhdChlLFwiJ10sIFwiKS5jb25jYXQocyxcIiByZWN0W2o9J1wiKS5jb25jYXQoZSxcIiddXCIpKS5tZW1iZXJzWzBdOnZvaWQgMD09PWUmJihhPWkuZ2xvYmFscy5kb20uUGFwZXIuc2VsZWN0KFwiXCIuY29uY2F0KHMsXCIgcGF0aFtqPSdcIikuY29uY2F0KHQsXCInXVwiKSkubWVtYmVyc1swXSxcInBpZVwiIT09aS5jb25maWcuY2hhcnQudHlwZSYmXCJwb2xhckFyZWFcIiE9PWkuY29uZmlnLmNoYXJ0LnR5cGUmJlwiZG9udXRcIiE9PWkuY29uZmlnLmNoYXJ0LnR5cGV8fHRoaXMuY3R4LnBpZS5waWVDbGlja2VkKHQpKSxhPyhuZXcgbSh0aGlzLmN0eCkucGF0aE1vdXNlRG93bihhLG51bGwpLGEubm9kZT9hLm5vZGU6bnVsbCk6KGNvbnNvbGUud2FybihcInRvZ2dsZURhdGFQb2ludFNlbGVjdGlvbjogRWxlbWVudCBub3QgZm91bmRcIiksbnVsbCl9fSx7a2V5OlwiZm9yY2VYQXhpc1VwZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudztpZihbXCJtaW5cIixcIm1heFwiXS5mb3JFYWNoKChmdW5jdGlvbihpKXt2b2lkIDAhPT10LnhheGlzW2ldJiYoZS5jb25maWcueGF4aXNbaV09dC54YXhpc1tpXSxlLmdsb2JhbHMubGFzdFhBeGlzW2ldPXQueGF4aXNbaV0pfSkpLHQueGF4aXMuY2F0ZWdvcmllcyYmdC54YXhpcy5jYXRlZ29yaWVzLmxlbmd0aCYmKGUuY29uZmlnLnhheGlzLmNhdGVnb3JpZXM9dC54YXhpcy5jYXRlZ29yaWVzKSxlLmNvbmZpZy54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWMpe3ZhciBpPW5ldyBYKHQpO3Q9aS5jb252ZXJ0Q2F0VG9OdW1lcmljWGF4aXModCx0aGlzLmN0eCl9cmV0dXJuIHR9fSx7a2V5OlwiZm9yY2VZQXhpc1VwZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJ0JiZ0LmNoYXJ0LnN0YWNrZWQmJlwiMTAwJVwiPT09dC5jaGFydC5zdGFja1R5cGUmJihBcnJheS5pc0FycmF5KHQueWF4aXMpP3QueWF4aXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxpKXt0LnlheGlzW2ldLm1pbj0wLHQueWF4aXNbaV0ubWF4PTEwMH0pKToodC55YXhpcy5taW49MCx0LnlheGlzLm1heD0xMDApKSx0fX0se2tleTpcInJldmVydERlZmF1bHRBeGlzTWluTWF4XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMudyxhPWkuZ2xvYmFscy5sYXN0WEF4aXMscz1pLmdsb2JhbHMubGFzdFlBeGlzO3QmJnQueGF4aXMmJihhPXQueGF4aXMpLHQmJnQueWF4aXMmJihzPXQueWF4aXMpLGkuY29uZmlnLnhheGlzLm1pbj1hLm1pbixpLmNvbmZpZy54YXhpcy5tYXg9YS5tYXg7dmFyIHI9ZnVuY3Rpb24odCl7dm9pZCAwIT09c1t0XSYmKGkuY29uZmlnLnlheGlzW3RdLm1pbj1zW3RdLm1pbixpLmNvbmZpZy55YXhpc1t0XS5tYXg9c1t0XS5tYXgpfTtpLmNvbmZpZy55YXhpcy5tYXAoKGZ1bmN0aW9uKHQsYSl7aS5nbG9iYWxzLnpvb21lZHx8dm9pZCAwIT09c1thXT9yKGEpOnZvaWQgMCE9PWUuY3R4Lm9wdHMueWF4aXNbYV0mJih0Lm1pbj1lLmN0eC5vcHRzLnlheGlzW2FdLm1pbix0Lm1heD1lLmN0eC5vcHRzLnlheGlzW2FdLm1heCl9KSl9fV0pLHR9KCk7enQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwLEV0PWZ1bmN0aW9uKHQsZSl7dmFyIGE9KHZvaWQgMCE9PXRoaXM/dGhpczp0KS5TVkc9ZnVuY3Rpb24odCl7aWYoYS5zdXBwb3J0ZWQpcmV0dXJuIHQ9bmV3IGEuRG9jKHQpLGEucGFyc2VyLmRyYXd8fGEucHJlcGFyZSgpLHR9O2lmKGEubnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGEueG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiLGEueGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsYS5zdmdqcz1cImh0dHA6Ly9zdmdqcy5kZXZcIixhLnN1cHBvcnRlZD0hMCwhYS5zdXBwb3J0ZWQpcmV0dXJuITE7YS5kaWQ9MWUzLGEuZWlkPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ZnanNcIitkKHQpK2EuZGlkKyt9LGEuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciBpPWUuY3JlYXRlRWxlbWVudE5TKHRoaXMubnMsdCk7cmV0dXJuIGkuc2V0QXR0cmlidXRlKFwiaWRcIix0aGlzLmVpZCh0KSksaX0sYS5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgdCxlO2U9KHQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpKS5wb3AoKTtmb3IodmFyIGk9dC5sZW5ndGgtMTtpPj0wO2ktLSlpZih0W2ldKWZvcih2YXIgcyBpbiBlKXRbaV0ucHJvdG90eXBlW3NdPWVbc107YS5TZXQmJmEuU2V0LmluaGVyaXQmJmEuU2V0LmluaGVyaXQoKX0sYS5pbnZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdC5jcmVhdGU/dC5jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhLmNyZWF0ZSh0LmNyZWF0ZSkpfTtyZXR1cm4gdC5pbmhlcml0JiYoZS5wcm90b3R5cGU9bmV3IHQuaW5oZXJpdCksdC5leHRlbmQmJmEuZXh0ZW5kKGUsdC5leHRlbmQpLHQuY29uc3RydWN0JiZhLmV4dGVuZCh0LnBhcmVudHx8YS5Db250YWluZXIsdC5jb25zdHJ1Y3QpLGV9LGEuYWRvcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZS5pbnN0YW5jZT9lLmluc3RhbmNlOigoaT1cInN2Z1wiPT1lLm5vZGVOYW1lP2UucGFyZW50Tm9kZSBpbnN0YW5jZW9mIHQuU1ZHRWxlbWVudD9uZXcgYS5OZXN0ZWQ6bmV3IGEuRG9jOlwibGluZWFyR3JhZGllbnRcIj09ZS5ub2RlTmFtZT9uZXcgYS5HcmFkaWVudChcImxpbmVhclwiKTpcInJhZGlhbEdyYWRpZW50XCI9PWUubm9kZU5hbWU/bmV3IGEuR3JhZGllbnQoXCJyYWRpYWxcIik6YVtkKGUubm9kZU5hbWUpXT9uZXcoYVtkKGUubm9kZU5hbWUpXSk6bmV3IGEuRWxlbWVudChlKSkudHlwZT1lLm5vZGVOYW1lLGkubm9kZT1lLGUuaW5zdGFuY2U9aSxpIGluc3RhbmNlb2YgYS5Eb2MmJmkubmFtZXNwYWNlKCkuZGVmcygpLGkuc2V0RGF0YShKU09OLnBhcnNlKGUuZ2V0QXR0cmlidXRlKFwic3ZnanM6ZGF0YVwiKSl8fHt9KSxpKTpudWxsO3ZhciBpfSxhLnByZXBhcmU9ZnVuY3Rpb24oKXt2YXIgdD1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKVswXSxpPSh0P25ldyBhLkRvYyh0KTphLmFkb3B0KGUuZG9jdW1lbnRFbGVtZW50KS5uZXN0ZWQoKSkuc2l6ZSgyLDApO2EucGFyc2VyPXtib2R5OnR8fGUuZG9jdW1lbnRFbGVtZW50LGRyYXc6aS5zdHlsZShcIm9wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMDAlO3RvcDotMTAwJTtvdmVyZmxvdzpoaWRkZW5cIikubm9kZSxwb2x5OmkucG9seWxpbmUoKS5ub2RlLHBhdGg6aS5wYXRoKCkubm9kZSxuYXRpdmU6YS5jcmVhdGUoXCJzdmdcIil9fSxhLnBhcnNlcj17bmF0aXZlOmEuY3JlYXRlKFwic3ZnXCIpfSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsKGZ1bmN0aW9uKCl7YS5wYXJzZXIuZHJhd3x8YS5wcmVwYXJlKCl9KSwhMSksYS5yZWdleD17bnVtYmVyQW5kVW5pdDovXihbKy1dPyhcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShlWystXT9cXGQrKT8pKFthLXolXSopJC9pLGhleDovXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLHJnYjovcmdiXFwoKFxcZCspLChcXGQrKSwoXFxkKylcXCkvLHJlZmVyZW5jZTovIyhbYS16MC05XFwtX10rKS9pLHRyYW5zZm9ybXM6L1xcKVxccyosP1xccyovLHdoaXRlc3BhY2U6L1xccy9nLGlzSGV4Oi9eI1thLWYwLTldezMsNn0kL2ksaXNSZ2I6L15yZ2JcXCgvLGlzQ3NzOi9bXjpdKzpbXjtdKzs/Lyxpc0JsYW5rOi9eKFxccyspPyQvLGlzTnVtYmVyOi9eWystXT8oXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoZVsrLV0/XFxkKyk/JC9pLGlzUGVyY2VudDovXi0/W1xcZFxcLl0rJSQvLGlzSW1hZ2U6L1xcLihqcGd8anBlZ3xwbmd8Z2lmfHN2ZykoXFw/W149XSsuKik/L2ksZGVsaW1pdGVyOi9bXFxzLF0rLyxoeXBoZW46LyhbXmVdKVxcLS9naSxwYXRoTGV0dGVyczovW01MSFZDU1FUQVpdL2dpLGlzUGF0aExldHRlcjovW01MSFZDU1FUQVpdL2ksbnVtYmVyc1dpdGhEb3RzOi8oKFxcZD9cXC5cXGQrKD86ZVsrLV0/XFxkKyk/KSgoPzpcXC5cXGQrKD86ZVsrLV0/XFxkKyk/KSspKSsvZ2ksZG90czovXFwuL2d9LGEudXRpbHM9e21hcDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPVtdLHM9MDtzPGk7cysrKWEucHVzaChlKHRbc10pKTtyZXR1cm4gYX0sZmlsdGVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPXQubGVuZ3RoLGE9W10scz0wO3M8aTtzKyspZSh0W3NdKSYmYS5wdXNoKHRbc10pO3JldHVybiBhfSxmaWx0ZXJTVkdFbGVtZW50czpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0LlNWR0VsZW1lbnR9KSl9fSxhLmRlZmF1bHRzPXthdHRyczp7XCJmaWxsLW9wYWNpdHlcIjoxLFwic3Ryb2tlLW9wYWNpdHlcIjoxLFwic3Ryb2tlLXdpZHRoXCI6MCxcInN0cm9rZS1saW5lam9pblwiOlwibWl0ZXJcIixcInN0cm9rZS1saW5lY2FwXCI6XCJidXR0XCIsZmlsbDpcIiMwMDAwMDBcIixzdHJva2U6XCIjMDAwMDAwXCIsb3BhY2l0eToxLHg6MCx5OjAsY3g6MCxjeTowLHdpZHRoOjAsaGVpZ2h0OjAscjowLHJ4OjAscnk6MCxvZmZzZXQ6MCxcInN0b3Atb3BhY2l0eVwiOjEsXCJzdG9wLWNvbG9yXCI6XCIjMDAwMDAwXCIsXCJmb250LXNpemVcIjoxNixcImZvbnQtZmFtaWx5XCI6XCJIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXCJ0ZXh0LWFuY2hvclwiOlwic3RhcnRcIn19LGEuQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGUsczt0aGlzLnI9MCx0aGlzLmc9MCx0aGlzLmI9MCx0JiYoXCJzdHJpbmdcIj09dHlwZW9mIHQ/YS5yZWdleC5pc1JnYi50ZXN0KHQpPyhlPWEucmVnZXgucmdiLmV4ZWModC5yZXBsYWNlKGEucmVnZXgud2hpdGVzcGFjZSxcIlwiKSksdGhpcy5yPXBhcnNlSW50KGVbMV0pLHRoaXMuZz1wYXJzZUludChlWzJdKSx0aGlzLmI9cGFyc2VJbnQoZVszXSkpOmEucmVnZXguaXNIZXgudGVzdCh0KSYmKGU9YS5yZWdleC5oZXguZXhlYyg0PT0ocz10KS5sZW5ndGg/W1wiI1wiLHMuc3Vic3RyaW5nKDEsMikscy5zdWJzdHJpbmcoMSwyKSxzLnN1YnN0cmluZygyLDMpLHMuc3Vic3RyaW5nKDIsMykscy5zdWJzdHJpbmcoMyw0KSxzLnN1YnN0cmluZygzLDQpXS5qb2luKFwiXCIpOnMpLHRoaXMucj1wYXJzZUludChlWzFdLDE2KSx0aGlzLmc9cGFyc2VJbnQoZVsyXSwxNiksdGhpcy5iPXBhcnNlSW50KGVbM10sMTYpKTpcIm9iamVjdFwiPT09aSh0KSYmKHRoaXMucj10LnIsdGhpcy5nPXQuZyx0aGlzLmI9dC5iKSl9LGEuZXh0ZW5kKGEuQ29sb3Ise3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9IZXgoKX0sdG9IZXg6ZnVuY3Rpb24oKXtyZXR1cm5cIiNcIitnKHRoaXMucikrZyh0aGlzLmcpK2codGhpcy5iKX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm5cInJnYihcIitbdGhpcy5yLHRoaXMuZyx0aGlzLmJdLmpvaW4oKStcIilcIn0sYnJpZ2h0bmVzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnIvMjU1Ki4zK3RoaXMuZy8yNTUqLjU5K3RoaXMuYi8yNTUqLjExfSxtb3JwaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXN0aW5hdGlvbj1uZXcgYS5Db2xvcih0KSx0aGlzfSxhdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXN0aW5hdGlvbj8odD10PDA/MDp0PjE/MTp0LG5ldyBhLkNvbG9yKHtyOn5+KHRoaXMucisodGhpcy5kZXN0aW5hdGlvbi5yLXRoaXMucikqdCksZzp+fih0aGlzLmcrKHRoaXMuZGVzdGluYXRpb24uZy10aGlzLmcpKnQpLGI6fn4odGhpcy5iKyh0aGlzLmRlc3RpbmF0aW9uLmItdGhpcy5iKSp0KX0pKTp0aGlzfX0pLGEuQ29sb3IudGVzdD1mdW5jdGlvbih0KXtyZXR1cm4gdCs9XCJcIixhLnJlZ2V4LmlzSGV4LnRlc3QodCl8fGEucmVnZXguaXNSZ2IudGVzdCh0KX0sYS5Db2xvci5pc1JnYj1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJudW1iZXJcIj09dHlwZW9mIHQuciYmXCJudW1iZXJcIj09dHlwZW9mIHQuZyYmXCJudW1iZXJcIj09dHlwZW9mIHQuYn0sYS5Db2xvci5pc0NvbG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhLkNvbG9yLmlzUmdiKHQpfHxhLkNvbG9yLnRlc3QodCl9LGEuQXJyYXk9ZnVuY3Rpb24odCxlKXswPT0odD0odHx8W10pLnZhbHVlT2YoKSkubGVuZ3RoJiZlJiYodD1lLnZhbHVlT2YoKSksdGhpcy52YWx1ZT10aGlzLnBhcnNlKHQpfSxhLmV4dGVuZChhLkFycmF5LHt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlLmpvaW4oXCIgXCIpfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9LHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiB0PXQudmFsdWVPZigpLEFycmF5LmlzQXJyYXkodCk/dDp0aGlzLnNwbGl0KHQpfX0pLGEuUG9pbnRBcnJheT1mdW5jdGlvbih0LGUpe2EuQXJyYXkuY2FsbCh0aGlzLHQsZXx8W1swLDBdXSl9LGEuUG9pbnRBcnJheS5wcm90b3R5cGU9bmV3IGEuQXJyYXksYS5Qb2ludEFycmF5LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hLlBvaW50QXJyYXk7Zm9yKHZhciBzPXtNOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZS54PWkueD10WzBdLGUueT1pLnk9dFsxXSxbXCJNXCIsZS54LGUueV19LEw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54PXRbMF0sZS55PXRbMV0sW1wiTFwiLHRbMF0sdFsxXV19LEg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS54PXRbMF0sW1wiSFwiLHRbMF1dfSxWOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueT10WzBdLFtcIlZcIix0WzBdXX0sQzpmdW5jdGlvbih0LGUpe3JldHVybiBlLng9dFs0XSxlLnk9dFs1XSxbXCJDXCIsdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV1dfSxROmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueD10WzJdLGUueT10WzNdLFtcIlFcIix0WzBdLHRbMV0sdFsyXSx0WzNdXX0sWjpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIGUueD1pLngsZS55PWkueSxbXCJaXCJdfX0scj1cIm1saHZxdGNzYXpcIi5zcGxpdChcIlwiKSxvPTAsbj1yLmxlbmd0aDtvPG47KytvKXNbcltvXV09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSxhKXtpZihcIkhcIj09dCllWzBdPWVbMF0raS54O2Vsc2UgaWYoXCJWXCI9PXQpZVswXT1lWzBdK2kueTtlbHNlIGlmKFwiQVwiPT10KWVbNV09ZVs1XStpLngsZVs2XT1lWzZdK2kueTtlbHNlIGZvcih2YXIgcj0wLG89ZS5sZW5ndGg7cjxvOysrcillW3JdPWVbcl0rKHIlMj9pLnk6aS54KTtpZihzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBzW3RdKXJldHVybiBzW3RdKGUsaSxhKX19KHJbb10udG9VcHBlckNhc2UoKSk7YS5QYXRoQXJyYXk9ZnVuY3Rpb24odCxlKXthLkFycmF5LmNhbGwodGhpcyx0LGV8fFtbXCJNXCIsMCwwXV0pfSxhLlBhdGhBcnJheS5wcm90b3R5cGU9bmV3IGEuQXJyYXksYS5QYXRoQXJyYXkucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEuUGF0aEFycmF5LGEuZXh0ZW5kKGEuUGF0aEFycmF5LHt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxpPXQubGVuZ3RoLGE9XCJcIjtlPGk7ZSsrKWErPXRbZV1bMF0sbnVsbCE9dFtlXVsxXSYmKGErPXRbZV1bMV0sbnVsbCE9dFtlXVsyXSYmKGErPVwiIFwiLGErPXRbZV1bMl0sbnVsbCE9dFtlXVszXSYmKGErPVwiIFwiLGErPXRbZV1bM10sYSs9XCIgXCIsYSs9dFtlXVs0XSxudWxsIT10W2VdWzVdJiYoYSs9XCIgXCIsYSs9dFtlXVs1XSxhKz1cIiBcIixhKz10W2VdWzZdLG51bGwhPXRbZV1bN10mJihhKz1cIiBcIixhKz10W2VdWzddKSkpKSk7cmV0dXJuIGErXCIgXCJ9KHRoaXMudmFsdWUpfSxtb3ZlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5iYm94KCk7cmV0dXJuIGkueCxpLnksdGhpc30sYXQ6ZnVuY3Rpb24odCl7aWYoIXRoaXMuZGVzdGluYXRpb24pcmV0dXJuIHRoaXM7Zm9yKHZhciBlPXRoaXMudmFsdWUsaT10aGlzLmRlc3RpbmF0aW9uLnZhbHVlLHM9W10scj1uZXcgYS5QYXRoQXJyYXksbz0wLG49ZS5sZW5ndGg7bzxuO28rKyl7c1tvXT1bZVtvXVswXV07Zm9yKHZhciBsPTEsaD1lW29dLmxlbmd0aDtsPGg7bCsrKXNbb11bbF09ZVtvXVtsXSsoaVtvXVtsXS1lW29dW2xdKSp0O1wiQVwiPT09c1tvXVswXSYmKHNbb11bNF09KygwIT1zW29dWzRdKSxzW29dWzVdPSsoMCE9c1tvXVs1XSkpfXJldHVybiByLnZhbHVlPXMscn0scGFyc2U6ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIGEuUGF0aEFycmF5KXJldHVybiB0LnZhbHVlT2YoKTt2YXIgZSxpPXtNOjIsTDoyLEg6MSxWOjEsQzo2LFM6NCxROjQsVDoyLEE6NyxaOjB9O3Q9XCJzdHJpbmdcIj09dHlwZW9mIHQ/dC5yZXBsYWNlKGEucmVnZXgubnVtYmVyc1dpdGhEb3RzLGgpLnJlcGxhY2UoYS5yZWdleC5wYXRoTGV0dGVycyxcIiAkJiBcIikucmVwbGFjZShhLnJlZ2V4Lmh5cGhlbixcIiQxIC1cIikudHJpbSgpLnNwbGl0KGEucmVnZXguZGVsaW1pdGVyKTp0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm5bXS5jb25jYXQuY2FsbCh0LGUpfSksW10pO3ZhciByPVtdLG89bmV3IGEuUG9pbnQsbj1uZXcgYS5Qb2ludCxsPTAsYz10Lmxlbmd0aDtkb3thLnJlZ2V4LmlzUGF0aExldHRlci50ZXN0KHRbbF0pPyhlPXRbbF0sKytsKTpcIk1cIj09ZT9lPVwiTFwiOlwibVwiPT1lJiYoZT1cImxcIiksci5wdXNoKHNbZV0uY2FsbChudWxsLHQuc2xpY2UobCxsKz1pW2UudG9VcHBlckNhc2UoKV0pLm1hcChwYXJzZUZsb2F0KSxvLG4pKX13aGlsZShjPmwpO3JldHVybiByfSxiYm94OmZ1bmN0aW9uKCl7cmV0dXJuIGEucGFyc2VyLmRyYXd8fGEucHJlcGFyZSgpLGEucGFyc2VyLnBhdGguc2V0QXR0cmlidXRlKFwiZFwiLHRoaXMudG9TdHJpbmcoKSksYS5wYXJzZXIucGF0aC5nZXRCQm94KCl9fSksYS5OdW1iZXI9YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0LGUpe3RoaXMudmFsdWU9MCx0aGlzLnVuaXQ9ZXx8XCJcIixcIm51bWJlclwiPT10eXBlb2YgdD90aGlzLnZhbHVlPWlzTmFOKHQpPzA6aXNGaW5pdGUodCk/dDp0PDA/LTM0ZTM3OjM0ZTM3Olwic3RyaW5nXCI9PXR5cGVvZiB0PyhlPXQubWF0Y2goYS5yZWdleC5udW1iZXJBbmRVbml0KSkmJih0aGlzLnZhbHVlPXBhcnNlRmxvYXQoZVsxXSksXCIlXCI9PWVbNV0/dGhpcy52YWx1ZS89MTAwOlwic1wiPT1lWzVdJiYodGhpcy52YWx1ZSo9MWUzKSx0aGlzLnVuaXQ9ZVs1XSk6dCBpbnN0YW5jZW9mIGEuTnVtYmVyJiYodGhpcy52YWx1ZT10LnZhbHVlT2YoKSx0aGlzLnVuaXQ9dC51bml0KX0sZXh0ZW5kOnt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybihcIiVcIj09dGhpcy51bml0P35+KDFlOCp0aGlzLnZhbHVlKS8xZTY6XCJzXCI9PXRoaXMudW5pdD90aGlzLnZhbHVlLzFlMzp0aGlzLnZhbHVlKSt0aGlzLnVuaXR9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKCl9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0scGx1czpmdW5jdGlvbih0KXtyZXR1cm4gdD1uZXcgYS5OdW1iZXIodCksbmV3IGEuTnVtYmVyKHRoaXMrdCx0aGlzLnVuaXR8fHQudW5pdCl9LG1pbnVzOmZ1bmN0aW9uKHQpe3JldHVybiB0PW5ldyBhLk51bWJlcih0KSxuZXcgYS5OdW1iZXIodGhpcy10LHRoaXMudW5pdHx8dC51bml0KX0sdGltZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bmV3IGEuTnVtYmVyKHQpLG5ldyBhLk51bWJlcih0aGlzKnQsdGhpcy51bml0fHx0LnVuaXQpfSxkaXZpZGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bmV3IGEuTnVtYmVyKHQpLG5ldyBhLk51bWJlcih0aGlzL3QsdGhpcy51bml0fHx0LnVuaXQpfSx0bzpmdW5jdGlvbih0KXt2YXIgZT1uZXcgYS5OdW1iZXIodGhpcyk7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJihlLnVuaXQ9dCksZX0sbW9ycGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb249bmV3IGEuTnVtYmVyKHQpLHQucmVsYXRpdmUmJih0aGlzLmRlc3RpbmF0aW9uLnZhbHVlKz10aGlzLnZhbHVlKSx0aGlzfSxhdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXN0aW5hdGlvbj9uZXcgYS5OdW1iZXIodGhpcy5kZXN0aW5hdGlvbikubWludXModGhpcykudGltZXModCkucGx1cyh0aGlzKTp0aGlzfX19KSxhLkVsZW1lbnQ9YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0KXt0aGlzLl9zdHJva2U9YS5kZWZhdWx0cy5hdHRycy5zdHJva2UsdGhpcy5fZXZlbnQ9bnVsbCx0aGlzLmRvbT17fSwodGhpcy5ub2RlPXQpJiYodGhpcy50eXBlPXQubm9kZU5hbWUsdGhpcy5ub2RlLmluc3RhbmNlPXRoaXMsdGhpcy5fc3Ryb2tlPXQuZ2V0QXR0cmlidXRlKFwic3Ryb2tlXCIpfHx0aGlzLl9zdHJva2UpfSxleHRlbmQ6e3g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXR0cihcInhcIix0KX0seTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hdHRyKFwieVwiLHQpfSxjeDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLngoKSt0aGlzLndpZHRoKCkvMjp0aGlzLngodC10aGlzLndpZHRoKCkvMil9LGN5OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMueSgpK3RoaXMuaGVpZ2h0KCkvMjp0aGlzLnkodC10aGlzLmhlaWdodCgpLzIpfSxtb3ZlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueCh0KS55KGUpfSxjZW50ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jeCh0KS5jeShlKX0sd2lkdGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXR0cihcIndpZHRoXCIsdCl9LGhlaWdodDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hdHRyKFwiaGVpZ2h0XCIsdCl9LHNpemU6ZnVuY3Rpb24odCxlKXt2YXIgaT11KHRoaXMsdCxlKTtyZXR1cm4gdGhpcy53aWR0aChuZXcgYS5OdW1iZXIoaS53aWR0aCkpLmhlaWdodChuZXcgYS5OdW1iZXIoaS5oZWlnaHQpKX0sY2xvbmU6ZnVuY3Rpb24odCl7dGhpcy53cml0ZURhdGFUb0RvbSgpO3ZhciBlPXgodGhpcy5ub2RlLmNsb25lTm9kZSghMCkpO3JldHVybiB0P3QuYWRkKGUpOnRoaXMuYWZ0ZXIoZSksZX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkucmVtb3ZlRWxlbWVudCh0aGlzKSx0aGlzfSxyZXBsYWNlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFmdGVyKHQpLnJlbW92ZSgpLHR9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LnB1dCh0aGlzKX0scHV0SW46ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkKHRoaXMpfSxpZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hdHRyKFwiaWRcIix0KX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlKFwiZGlzcGxheVwiLFwiXCIpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUoXCJkaXNwbGF5XCIsXCJub25lXCIpfSx2aXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuXCJub25lXCIhPXRoaXMuc3R5bGUoXCJkaXNwbGF5XCIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHIoXCJpZFwiKX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYXR0cihcImNsYXNzXCIpO3JldHVybiBudWxsPT10P1tdOnQudHJpbSgpLnNwbGl0KGEucmVnZXguZGVsaW1pdGVyKX0saGFzQ2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuLTEhPXRoaXMuY2xhc3NlcygpLmluZGV4T2YodCl9LGFkZENsYXNzOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLmhhc0NsYXNzKHQpKXt2YXIgZT10aGlzLmNsYXNzZXMoKTtlLnB1c2godCksdGhpcy5hdHRyKFwiY2xhc3NcIixlLmpvaW4oXCIgXCIpKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzQ2xhc3ModCkmJnRoaXMuYXR0cihcImNsYXNzXCIsdGhpcy5jbGFzc2VzKCkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZSE9dH0pKS5qb2luKFwiIFwiKSksdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzQ2xhc3ModCk/dGhpcy5yZW1vdmVDbGFzcyh0KTp0aGlzLmFkZENsYXNzKHQpfSxyZWZlcmVuY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGEuZ2V0KHRoaXMuYXR0cih0KSl9LHBhcmVudDpmdW5jdGlvbihlKXt2YXIgaT10aGlzO2lmKCFpLm5vZGUucGFyZW50Tm9kZSlyZXR1cm4gbnVsbDtpZihpPWEuYWRvcHQoaS5ub2RlLnBhcmVudE5vZGUpLCFlKXJldHVybiBpO2Zvcig7aSYmaS5ub2RlIGluc3RhbmNlb2YgdC5TVkdFbGVtZW50Oyl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGU/aS5tYXRjaGVzKGUpOmkgaW5zdGFuY2VvZiBlKXJldHVybiBpO2lmKCFpLm5vZGUucGFyZW50Tm9kZXx8XCIjZG9jdW1lbnRcIj09aS5ub2RlLnBhcmVudE5vZGUubm9kZU5hbWUpcmV0dXJuIG51bGw7aT1hLmFkb3B0KGkubm9kZS5wYXJlbnROb2RlKX19LGRvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYS5Eb2M/dGhpczp0aGlzLnBhcmVudChhLkRvYyl9LHBhcmVudHM6ZnVuY3Rpb24odCl7dmFyIGU9W10saT10aGlzO2Rve2lmKCEoaT1pLnBhcmVudCh0KSl8fCFpLm5vZGUpYnJlYWs7ZS5wdXNoKGkpfXdoaWxlKGkucGFyZW50KTtyZXR1cm4gZX0sbWF0Y2hlczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4odC5tYXRjaGVzfHx0Lm1hdGNoZXNTZWxlY3Rvcnx8dC5tc01hdGNoZXNTZWxlY3Rvcnx8dC5tb3pNYXRjaGVzU2VsZWN0b3J8fHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHx0Lm9NYXRjaGVzU2VsZWN0b3IpLmNhbGwodCxlKX0odGhpcy5ub2RlLHQpfSxuYXRpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlfSxzdmc6ZnVuY3Rpb24odCl7dmFyIGk9ZS5jcmVhdGVFbGVtZW50KFwic3ZnXCIpO2lmKCEodCYmdGhpcyBpbnN0YW5jZW9mIGEuUGFyZW50KSlyZXR1cm4gaS5hcHBlbmRDaGlsZCh0PWUuY3JlYXRlRWxlbWVudChcInN2Z1wiKSksdGhpcy53cml0ZURhdGFUb0RvbSgpLHQuYXBwZW5kQ2hpbGQodGhpcy5ub2RlLmNsb25lTm9kZSghMCkpLGkuaW5uZXJIVE1MLnJlcGxhY2UoL148c3ZnPi8sXCJcIikucmVwbGFjZSgvPFxcL3N2Zz4kLyxcIlwiKTtpLmlubmVySFRNTD1cIjxzdmc+XCIrdC5yZXBsYWNlKC9cXG4vLFwiXCIpLnJlcGxhY2UoLzwoW1xcdzotXSspKFtePF0rPylcXC8+L2csXCI8JDEkMj48LyQxPlwiKStcIjwvc3ZnPlwiO2Zvcih2YXIgcz0wLHI9aS5maXJzdENoaWxkLmNoaWxkTm9kZXMubGVuZ3RoO3M8cjtzKyspdGhpcy5ub2RlLmFwcGVuZENoaWxkKGkuZmlyc3RDaGlsZC5maXJzdENoaWxkKTtyZXR1cm4gdGhpc30sd3JpdGVEYXRhVG9Eb206ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5lYWNofHx0aGlzLmxpbmVzKSYmKHRoaXMuZWFjaD90aGlzOnRoaXMubGluZXMoKSkuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLndyaXRlRGF0YVRvRG9tKCl9KSksdGhpcy5ub2RlLnJlbW92ZUF0dHJpYnV0ZShcInN2Z2pzOmRhdGFcIiksT2JqZWN0LmtleXModGhpcy5kb20pLmxlbmd0aCYmdGhpcy5ub2RlLnNldEF0dHJpYnV0ZShcInN2Z2pzOmRhdGFcIixKU09OLnN0cmluZ2lmeSh0aGlzLmRvbSkpLHRoaXN9LHNldERhdGE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZG9tPXQsdGhpc30saXM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfSh0aGlzLHQpfX19KSxhLmVhc2luZz17XCItXCI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LFwiPD5cIjpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5jb3ModCpNYXRoLlBJKS8yKy41fSxcIj5cIjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zaW4odCpNYXRoLlBJLzIpfSxcIjxcIjpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLmNvcyh0Kk1hdGguUEkvMil9fSxhLm1vcnBoPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLGkpe3JldHVybiBuZXcgYS5Nb3JwaE9iaihlLGkpLmF0KHQpfX0sYS5TaXR1YXRpb249YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0KXt0aGlzLmluaXQ9ITEsdGhpcy5yZXZlcnNlZD0hMSx0aGlzLnJldmVyc2luZz0hMSx0aGlzLmR1cmF0aW9uPW5ldyBhLk51bWJlcih0LmR1cmF0aW9uKS52YWx1ZU9mKCksdGhpcy5kZWxheT1uZXcgYS5OdW1iZXIodC5kZWxheSkudmFsdWVPZigpLHRoaXMuc3RhcnQ9K25ldyBEYXRlK3RoaXMuZGVsYXksdGhpcy5maW5pc2g9dGhpcy5zdGFydCt0aGlzLmR1cmF0aW9uLHRoaXMuZWFzZT10LmVhc2UsdGhpcy5sb29wPTAsdGhpcy5sb29wcz0hMSx0aGlzLmFuaW1hdGlvbnM9e30sdGhpcy5hdHRycz17fSx0aGlzLnN0eWxlcz17fSx0aGlzLnRyYW5zZm9ybXM9W10sdGhpcy5vbmNlPXt9fX0pLGEuRlg9YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0KXt0aGlzLl90YXJnZXQ9dCx0aGlzLnNpdHVhdGlvbnM9W10sdGhpcy5hY3RpdmU9ITEsdGhpcy5zaXR1YXRpb249bnVsbCx0aGlzLnBhdXNlZD0hMSx0aGlzLmxhc3RQb3M9MCx0aGlzLnBvcz0wLHRoaXMuYWJzUG9zPTAsdGhpcy5fc3BlZWQ9MX0sZXh0ZW5kOnthbmltYXRlOmZ1bmN0aW9uKHQsZSxzKXtcIm9iamVjdFwiPT09aSh0KSYmKGU9dC5lYXNlLHM9dC5kZWxheSx0PXQuZHVyYXRpb24pO3ZhciByPW5ldyBhLlNpdHVhdGlvbih7ZHVyYXRpb246dHx8MWUzLGRlbGF5OnN8fDAsZWFzZTphLmVhc2luZ1tlfHxcIi1cIl18fGV9KTtyZXR1cm4gdGhpcy5xdWV1ZShyKSx0aGlzfSx0YXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQgaW5zdGFuY2VvZiBhLkVsZW1lbnQ/KHRoaXMuX3RhcmdldD10LHRoaXMpOnRoaXMuX3RhcmdldH0sdGltZVRvQWJzUG9zOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMuc2l0dWF0aW9uLnN0YXJ0KS8odGhpcy5zaXR1YXRpb24uZHVyYXRpb24vdGhpcy5fc3BlZWQpfSxhYnNQb3NUb1RpbWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2l0dWF0aW9uLmR1cmF0aW9uL3RoaXMuX3NwZWVkKnQrdGhpcy5zaXR1YXRpb24uc3RhcnR9LHN0YXJ0QW5pbUZyYW1lOmZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbUZyYW1lKCksdGhpcy5hbmltYXRpb25GcmFtZT10LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuc3RlcCgpfS5iaW5kKHRoaXMpKX0sc3RvcEFuaW1GcmFtZTpmdW5jdGlvbigpe3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpb25GcmFtZSl9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuYWN0aXZlJiZ0aGlzLnNpdHVhdGlvbiYmKHRoaXMuYWN0aXZlPSEwLHRoaXMuc3RhcnRDdXJyZW50KCkpLHRoaXN9LHN0YXJ0Q3VycmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpdHVhdGlvbi5zdGFydD0rbmV3IERhdGUrdGhpcy5zaXR1YXRpb24uZGVsYXkvdGhpcy5fc3BlZWQsdGhpcy5zaXR1YXRpb24uZmluaXNoPXRoaXMuc2l0dWF0aW9uLnN0YXJ0K3RoaXMuc2l0dWF0aW9uLmR1cmF0aW9uL3RoaXMuX3NwZWVkLHRoaXMuaW5pdEFuaW1hdGlvbnMoKS5zdGVwKCl9LHF1ZXVlOmZ1bmN0aW9uKHQpe3JldHVybihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgYS5TaXR1YXRpb24pJiZ0aGlzLnNpdHVhdGlvbnMucHVzaCh0KSx0aGlzLnNpdHVhdGlvbnx8KHRoaXMuc2l0dWF0aW9uPXRoaXMuc2l0dWF0aW9ucy5zaGlmdCgpKSx0aGlzfSxkZXF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcCgpLHRoaXMuc2l0dWF0aW9uPXRoaXMuc2l0dWF0aW9ucy5zaGlmdCgpLHRoaXMuc2l0dWF0aW9uJiYodGhpcy5zaXR1YXRpb24gaW5zdGFuY2VvZiBhLlNpdHVhdGlvbj90aGlzLnN0YXJ0KCk6dGhpcy5zaXR1YXRpb24uY2FsbCh0aGlzKSksdGhpc30saW5pdEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuc2l0dWF0aW9uO2lmKGUuaW5pdClyZXR1cm4gdGhpcztmb3IodmFyIGkgaW4gZS5hbmltYXRpb25zKXt0PXRoaXMudGFyZ2V0KClbaV0oKSxBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pLEFycmF5LmlzQXJyYXkoZS5hbmltYXRpb25zW2ldKXx8KGUuYW5pbWF0aW9uc1tpXT1bZS5hbmltYXRpb25zW2ldXSk7Zm9yKHZhciBzPXQubGVuZ3RoO3MtLTspZS5hbmltYXRpb25zW2ldW3NdaW5zdGFuY2VvZiBhLk51bWJlciYmKHRbc109bmV3IGEuTnVtYmVyKHRbc10pKSxlLmFuaW1hdGlvbnNbaV1bc109dFtzXS5tb3JwaChlLmFuaW1hdGlvbnNbaV1bc10pfWZvcih2YXIgaSBpbiBlLmF0dHJzKWUuYXR0cnNbaV09bmV3IGEuTW9ycGhPYmoodGhpcy50YXJnZXQoKS5hdHRyKGkpLGUuYXR0cnNbaV0pO2Zvcih2YXIgaSBpbiBlLnN0eWxlcyllLnN0eWxlc1tpXT1uZXcgYS5Nb3JwaE9iaih0aGlzLnRhcmdldCgpLnN0eWxlKGkpLGUuc3R5bGVzW2ldKTtyZXR1cm4gZS5pbml0aWFsVHJhbnNmb3JtYXRpb249dGhpcy50YXJnZXQoKS5tYXRyaXhpZnkoKSxlLmluaXQ9ITAsdGhpc30sY2xlYXJRdWV1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpdHVhdGlvbnM9W10sdGhpc30sY2xlYXJDdXJyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l0dWF0aW9uPW51bGwsdGhpc30sc3RvcDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuYWN0aXZlO3JldHVybiB0aGlzLmFjdGl2ZT0hMSxlJiZ0aGlzLmNsZWFyUXVldWUoKSx0JiZ0aGlzLnNpdHVhdGlvbiYmKCFpJiZ0aGlzLnN0YXJ0Q3VycmVudCgpLHRoaXMuYXRFbmQoKSksdGhpcy5zdG9wQW5pbUZyYW1lKCksdGhpcy5jbGVhckN1cnJlbnQoKX0sYWZ0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0KCk7cmV0dXJuIHRoaXMudGFyZ2V0KCkub24oXCJmaW5pc2hlZC5meFwiLChmdW5jdGlvbiBpKGEpe2EuZGV0YWlsLnNpdHVhdGlvbj09ZSYmKHQuY2FsbCh0aGlzLGUpLHRoaXMub2ZmKFwiZmluaXNoZWQuZnhcIixpKSl9KSksdGhpcy5fY2FsbFN0YXJ0KCl9LGR1cmluZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3QoKSxpPWZ1bmN0aW9uKGkpe2kuZGV0YWlsLnNpdHVhdGlvbj09ZSYmdC5jYWxsKHRoaXMsaS5kZXRhaWwucG9zLGEubW9ycGgoaS5kZXRhaWwucG9zKSxpLmRldGFpbC5lYXNlZCxlKX07cmV0dXJuIHRoaXMudGFyZ2V0KCkub2ZmKFwiZHVyaW5nLmZ4XCIsaSkub24oXCJkdXJpbmcuZnhcIixpKSx0aGlzLmFmdGVyKChmdW5jdGlvbigpe3RoaXMub2ZmKFwiZHVyaW5nLmZ4XCIsaSl9KSksdGhpcy5fY2FsbFN0YXJ0KCl9LGFmdGVyQWxsOmZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uIGUoaSl7dC5jYWxsKHRoaXMpLHRoaXMub2ZmKFwiYWxsZmluaXNoZWQuZnhcIixlKX07cmV0dXJuIHRoaXMudGFyZ2V0KCkub2ZmKFwiYWxsZmluaXNoZWQuZnhcIixlKS5vbihcImFsbGZpbmlzaGVkLmZ4XCIsZSksdGhpcy5fY2FsbFN0YXJ0KCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXR1YXRpb25zLmxlbmd0aD90aGlzLnNpdHVhdGlvbnNbdGhpcy5zaXR1YXRpb25zLmxlbmd0aC0xXTp0aGlzLnNpdHVhdGlvbn0sYWRkOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5sYXN0KClbaXx8XCJhbmltYXRpb25zXCJdW3RdPWUsdGhpcy5fY2FsbFN0YXJ0KCl9LHN0ZXA6ZnVuY3Rpb24odCl7dmFyIGUsaSxhO3R8fCh0aGlzLmFic1Bvcz10aGlzLnRpbWVUb0Fic1BvcygrbmV3IERhdGUpKSwhMSE9PXRoaXMuc2l0dWF0aW9uLmxvb3BzPyhlPU1hdGgubWF4KHRoaXMuYWJzUG9zLDApLGk9TWF0aC5mbG9vcihlKSwhMD09PXRoaXMuc2l0dWF0aW9uLmxvb3BzfHxpPHRoaXMuc2l0dWF0aW9uLmxvb3BzPyh0aGlzLnBvcz1lLWksYT10aGlzLnNpdHVhdGlvbi5sb29wLHRoaXMuc2l0dWF0aW9uLmxvb3A9aSk6KHRoaXMuYWJzUG9zPXRoaXMuc2l0dWF0aW9uLmxvb3BzLHRoaXMucG9zPTEsYT10aGlzLnNpdHVhdGlvbi5sb29wLTEsdGhpcy5zaXR1YXRpb24ubG9vcD10aGlzLnNpdHVhdGlvbi5sb29wcyksdGhpcy5zaXR1YXRpb24ucmV2ZXJzaW5nJiYodGhpcy5zaXR1YXRpb24ucmV2ZXJzZWQ9dGhpcy5zaXR1YXRpb24ucmV2ZXJzZWQhPUJvb2xlYW4oKHRoaXMuc2l0dWF0aW9uLmxvb3AtYSklMikpKToodGhpcy5hYnNQb3M9TWF0aC5taW4odGhpcy5hYnNQb3MsMSksdGhpcy5wb3M9dGhpcy5hYnNQb3MpLHRoaXMucG9zPDAmJih0aGlzLnBvcz0wKSx0aGlzLnNpdHVhdGlvbi5yZXZlcnNlZCYmKHRoaXMucG9zPTEtdGhpcy5wb3MpO3ZhciBzPXRoaXMuc2l0dWF0aW9uLmVhc2UodGhpcy5wb3MpO2Zvcih2YXIgciBpbiB0aGlzLnNpdHVhdGlvbi5vbmNlKXI+dGhpcy5sYXN0UG9zJiZyPD1zJiYodGhpcy5zaXR1YXRpb24ub25jZVtyXS5jYWxsKHRoaXMudGFyZ2V0KCksdGhpcy5wb3MscyksZGVsZXRlIHRoaXMuc2l0dWF0aW9uLm9uY2Vbcl0pO3JldHVybiB0aGlzLmFjdGl2ZSYmdGhpcy50YXJnZXQoKS5maXJlKFwiZHVyaW5nXCIse3Bvczp0aGlzLnBvcyxlYXNlZDpzLGZ4OnRoaXMsc2l0dWF0aW9uOnRoaXMuc2l0dWF0aW9ufSksdGhpcy5zaXR1YXRpb24/KHRoaXMuZWFjaEF0KCksMT09dGhpcy5wb3MmJiF0aGlzLnNpdHVhdGlvbi5yZXZlcnNlZHx8dGhpcy5zaXR1YXRpb24ucmV2ZXJzZWQmJjA9PXRoaXMucG9zPyh0aGlzLnN0b3BBbmltRnJhbWUoKSx0aGlzLnRhcmdldCgpLmZpcmUoXCJmaW5pc2hlZFwiLHtmeDp0aGlzLHNpdHVhdGlvbjp0aGlzLnNpdHVhdGlvbn0pLHRoaXMuc2l0dWF0aW9ucy5sZW5ndGh8fCh0aGlzLnRhcmdldCgpLmZpcmUoXCJhbGxmaW5pc2hlZFwiKSx0aGlzLnNpdHVhdGlvbnMubGVuZ3RofHwodGhpcy50YXJnZXQoKS5vZmYoXCIuZnhcIiksdGhpcy5hY3RpdmU9ITEpKSx0aGlzLmFjdGl2ZT90aGlzLmRlcXVldWUoKTp0aGlzLmNsZWFyQ3VycmVudCgpKTohdGhpcy5wYXVzZWQmJnRoaXMuYWN0aXZlJiZ0aGlzLnN0YXJ0QW5pbUZyYW1lKCksdGhpcy5sYXN0UG9zPXMsdGhpcyk6dGhpc30sZWFjaEF0OmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLGk9dGhpcy50YXJnZXQoKSxzPXRoaXMuc2l0dWF0aW9uO2Zvcih2YXIgciBpbiBzLmFuaW1hdGlvbnMpdD1bXS5jb25jYXQocy5hbmltYXRpb25zW3JdKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiB0JiZ0LmF0P3QuYXQocy5lYXNlKGUucG9zKSxlLnBvcyk6dH0pKSxpW3JdLmFwcGx5KGksdCk7Zm9yKHZhciByIGluIHMuYXR0cnMpdD1bcl0uY29uY2F0KHMuYXR0cnNbcl0pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQmJnQuYXQ/dC5hdChzLmVhc2UoZS5wb3MpLGUucG9zKTp0fSkpLGkuYXR0ci5hcHBseShpLHQpO2Zvcih2YXIgciBpbiBzLnN0eWxlcyl0PVtyXS5jb25jYXQocy5zdHlsZXNbcl0pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQmJnQuYXQ/dC5hdChzLmVhc2UoZS5wb3MpLGUucG9zKTp0fSkpLGkuc3R5bGUuYXBwbHkoaSx0KTtpZihzLnRyYW5zZm9ybXMubGVuZ3RoKXt0PXMuaW5pdGlhbFRyYW5zZm9ybWF0aW9uLHI9MDtmb3IodmFyIG89cy50cmFuc2Zvcm1zLmxlbmd0aDtyPG87cisrKXt2YXIgbj1zLnRyYW5zZm9ybXNbcl07biBpbnN0YW5jZW9mIGEuTWF0cml4P3Q9bi5yZWxhdGl2ZT90Lm11bHRpcGx5KChuZXcgYS5NYXRyaXgpLm1vcnBoKG4pLmF0KHMuZWFzZSh0aGlzLnBvcykpKTp0Lm1vcnBoKG4pLmF0KHMuZWFzZSh0aGlzLnBvcykpOihuLnJlbGF0aXZlfHxuLnVuZG8odC5leHRyYWN0KCkpLHQ9dC5tdWx0aXBseShuLmF0KHMuZWFzZSh0aGlzLnBvcykpKSl9aS5tYXRyaXgodCl9cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXRoaXMubGFzdCgpO3JldHVybiBpfHwodD1hLmVhc2UodCkpLGEub25jZVt0XT1lLHRoaXN9LF9jYWxsU3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuc3RhcnQoKX0uYmluZCh0aGlzKSwwKSx0aGlzfX0scGFyZW50OmEuRWxlbWVudCxjb25zdHJ1Y3Q6e2FuaW1hdGU6ZnVuY3Rpb24odCxlLGkpe3JldHVybih0aGlzLmZ4fHwodGhpcy5meD1uZXcgYS5GWCh0aGlzKSkpLmFuaW1hdGUodCxlLGkpfSxkZWxheTpmdW5jdGlvbih0KXtyZXR1cm4odGhpcy5meHx8KHRoaXMuZng9bmV3IGEuRlgodGhpcykpKS5kZWxheSh0KX0sc3RvcDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmZ4JiZ0aGlzLmZ4LnN0b3AodCxlKSx0aGlzfSxmaW5pc2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5meCYmdGhpcy5meC5maW5pc2goKSx0aGlzfX19KSxhLk1vcnBoT2JqPWEuaW52ZW50KHtjcmVhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5Db2xvci5pc0NvbG9yKGUpP25ldyBhLkNvbG9yKHQpLm1vcnBoKGUpOmEucmVnZXguZGVsaW1pdGVyLnRlc3QodCk/YS5yZWdleC5wYXRoTGV0dGVycy50ZXN0KHQpP25ldyBhLlBhdGhBcnJheSh0KS5tb3JwaChlKTpuZXcgYS5BcnJheSh0KS5tb3JwaChlKTphLnJlZ2V4Lm51bWJlckFuZFVuaXQudGVzdChlKT9uZXcgYS5OdW1iZXIodCkubW9ycGgoZSk6KHRoaXMudmFsdWU9dCx2b2lkKHRoaXMuZGVzdGluYXRpb249ZSkpfSxleHRlbmQ6e2F0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU8MT90aGlzLnZhbHVlOnRoaXMuZGVzdGluYXRpb259LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX19fSksYS5leHRlbmQoYS5GWCx7YXR0cjpmdW5jdGlvbih0LGUsYSl7aWYoXCJvYmplY3RcIj09PWkodCkpZm9yKHZhciBzIGluIHQpdGhpcy5hdHRyKHMsdFtzXSk7ZWxzZSB0aGlzLmFkZCh0LGUsXCJhdHRyc1wiKTtyZXR1cm4gdGhpc30scGxvdDpmdW5jdGlvbih0LGUsaSxhKXtyZXR1cm4gND09YXJndW1lbnRzLmxlbmd0aD90aGlzLnBsb3QoW3QsZSxpLGFdKTp0aGlzLmFkZChcInBsb3RcIixuZXcodGhpcy50YXJnZXQoKS5tb3JwaEFycmF5KSh0KSl9fSksYS5Cb3g9YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0LGUscyxyKXtpZighKFwib2JqZWN0XCIhPT1pKHQpfHx0IGluc3RhbmNlb2YgYS5FbGVtZW50KSlyZXR1cm4gYS5Cb3guY2FsbCh0aGlzLG51bGwhPXQubGVmdD90LmxlZnQ6dC54LG51bGwhPXQudG9wP3QudG9wOnQueSx0LndpZHRoLHQuaGVpZ2h0KTs0PT1hcmd1bWVudHMubGVuZ3RoJiYodGhpcy54PXQsdGhpcy55PWUsdGhpcy53aWR0aD1zLHRoaXMuaGVpZ2h0PXIpLGIodGhpcyl9fSksYS5CQm94PWEuaW52ZW50KHtjcmVhdGU6ZnVuY3Rpb24odCl7aWYoYS5Cb3guYXBwbHkodGhpcyxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpLHQgaW5zdGFuY2VvZiBhLkVsZW1lbnQpe3ZhciBpO3RyeXtpZighZS5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMpe2Zvcih2YXIgcz10Lm5vZGU7cy5wYXJlbnROb2RlOylzPXMucGFyZW50Tm9kZTtpZihzIT1lKXRocm93IG5ldyBFcnJvcihcIkVsZW1lbnQgbm90IGluIHRoZSBkb21cIil9aT10Lm5vZGUuZ2V0QkJveCgpfWNhdGNoKGUpe2lmKHQgaW5zdGFuY2VvZiBhLlNoYXBlKXthLnBhcnNlci5kcmF3fHxhLnByZXBhcmUoKTt2YXIgcj10LmNsb25lKGEucGFyc2VyLmRyYXcuaW5zdGFuY2UpLnNob3coKTtyJiZyLm5vZGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIubm9kZS5nZXRCQm94JiYoaT1yLm5vZGUuZ2V0QkJveCgpKSxyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnJlbW92ZSYmci5yZW1vdmUoKX1lbHNlIGk9e3g6dC5ub2RlLmNsaWVudExlZnQseTp0Lm5vZGUuY2xpZW50VG9wLHdpZHRoOnQubm9kZS5jbGllbnRXaWR0aCxoZWlnaHQ6dC5ub2RlLmNsaWVudEhlaWdodH19YS5Cb3guY2FsbCh0aGlzLGkpfX0saW5oZXJpdDphLkJveCxwYXJlbnQ6YS5FbGVtZW50LGNvbnN0cnVjdDp7YmJveDpmdW5jdGlvbigpe3JldHVybiBuZXcgYS5CQm94KHRoaXMpfX19KSxhLkJCb3gucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEuQkJveCxhLk1hdHJpeD1hLmludmVudCh7Y3JlYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXAoWzEsMCwwLDEsMCwwXSk7dD1udWxsPT09dD9lOnQgaW5zdGFuY2VvZiBhLkVsZW1lbnQ/dC5tYXRyaXhpZnkoKTpcInN0cmluZ1wiPT10eXBlb2YgdD9wKHQuc3BsaXQoYS5yZWdleC5kZWxpbWl0ZXIpLm1hcChwYXJzZUZsb2F0KSk6Nj09YXJndW1lbnRzLmxlbmd0aD9wKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk6QXJyYXkuaXNBcnJheSh0KT9wKHQpOnQmJlwib2JqZWN0XCI9PT1pKHQpP3Q6ZTtmb3IodmFyIHM9bS5sZW5ndGgtMTtzPj0wOy0tcyl0aGlzW21bc11dPW51bGwhPXRbbVtzXV0/dFttW3NdXTplW21bc11dfSxleHRlbmQ6e2V4dHJhY3Q6ZnVuY3Rpb24oKXt2YXIgdD1mKHRoaXMsMCwxKTtmKHRoaXMsMSwwKTt2YXIgZT0xODAvTWF0aC5QSSpNYXRoLmF0YW4yKHQueSx0LngpLTkwO3JldHVybnt4OnRoaXMuZSx5OnRoaXMuZix0cmFuc2Zvcm1lZFg6KHRoaXMuZSpNYXRoLmNvcyhlKk1hdGguUEkvMTgwKSt0aGlzLmYqTWF0aC5zaW4oZSpNYXRoLlBJLzE4MCkpL01hdGguc3FydCh0aGlzLmEqdGhpcy5hK3RoaXMuYip0aGlzLmIpLHRyYW5zZm9ybWVkWToodGhpcy5mKk1hdGguY29zKGUqTWF0aC5QSS8xODApK3RoaXMuZSpNYXRoLnNpbigtZSpNYXRoLlBJLzE4MCkpL01hdGguc3FydCh0aGlzLmMqdGhpcy5jK3RoaXMuZCp0aGlzLmQpLHJvdGF0aW9uOmUsYTp0aGlzLmEsYjp0aGlzLmIsYzp0aGlzLmMsZDp0aGlzLmQsZTp0aGlzLmUsZjp0aGlzLmYsbWF0cml4Om5ldyBhLk1hdHJpeCh0aGlzKX19LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhLk1hdHJpeCh0aGlzKX0sbW9ycGg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb249bmV3IGEuTWF0cml4KHQpLHRoaXN9LG11bHRpcGx5OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYS5NYXRyaXgodGhpcy5uYXRpdmUoKS5tdWx0aXBseShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGEuTWF0cml4fHwodD1uZXcgYS5NYXRyaXgodCkpLHR9KHQpLm5hdGl2ZSgpKSl9LGludmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEuTWF0cml4KHRoaXMubmF0aXZlKCkuaW52ZXJzZSgpKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBhLk1hdHJpeCh0aGlzLm5hdGl2ZSgpLnRyYW5zbGF0ZSh0fHwwLGV8fDApKX0sbmF0aXZlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWEucGFyc2VyLm5hdGl2ZS5jcmVhdGVTVkdNYXRyaXgoKSxlPW0ubGVuZ3RoLTE7ZT49MDtlLS0pdFttW2VdXT10aGlzW21bZV1dO3JldHVybiB0fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVyblwibWF0cml4KFwiK3YodGhpcy5hKStcIixcIit2KHRoaXMuYikrXCIsXCIrdih0aGlzLmMpK1wiLFwiK3YodGhpcy5kKStcIixcIit2KHRoaXMuZSkrXCIsXCIrdih0aGlzLmYpK1wiKVwifX0scGFyZW50OmEuRWxlbWVudCxjb25zdHJ1Y3Q6e2N0bTpmdW5jdGlvbigpe3JldHVybiBuZXcgYS5NYXRyaXgodGhpcy5ub2RlLmdldENUTSgpKX0sc2NyZWVuQ1RNOmZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIGEuTmVzdGVkKXt2YXIgdD10aGlzLnJlY3QoMSwxKSxlPXQubm9kZS5nZXRTY3JlZW5DVE0oKTtyZXR1cm4gdC5yZW1vdmUoKSxuZXcgYS5NYXRyaXgoZSl9cmV0dXJuIG5ldyBhLk1hdHJpeCh0aGlzLm5vZGUuZ2V0U2NyZWVuQ1RNKCkpfX19KSxhLlBvaW50PWEuaW52ZW50KHtjcmVhdGU6ZnVuY3Rpb24odCxlKXt2YXIgYTthPUFycmF5LmlzQXJyYXkodCk/e3g6dFswXSx5OnRbMV19Olwib2JqZWN0XCI9PT1pKHQpP3t4OnQueCx5OnQueX06bnVsbCE9dD97eDp0LHk6bnVsbCE9ZT9lOnR9Ont4OjAseTowfSx0aGlzLng9YS54LHRoaXMueT1hLnl9LGV4dGVuZDp7Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEuUG9pbnQodGhpcyl9LG1vcnBoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVzdGluYXRpb249bmV3IGEuUG9pbnQodCxlKSx0aGlzfX19KSxhLmV4dGVuZChhLkVsZW1lbnQse3BvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBhLlBvaW50KHQsZSkudHJhbnNmb3JtKHRoaXMuc2NyZWVuQ1RNKCkuaW52ZXJzZSgpKX19KSxhLmV4dGVuZChhLkVsZW1lbnQse2F0dHI6ZnVuY3Rpb24odCxlLHMpe2lmKG51bGw9PXQpe2Zvcih0PXt9LHM9KGU9dGhpcy5ub2RlLmF0dHJpYnV0ZXMpLmxlbmd0aC0xO3M+PTA7cy0tKXRbZVtzXS5ub2RlTmFtZV09YS5yZWdleC5pc051bWJlci50ZXN0KGVbc10ubm9kZVZhbHVlKT9wYXJzZUZsb2F0KGVbc10ubm9kZVZhbHVlKTplW3NdLm5vZGVWYWx1ZTtyZXR1cm4gdH1pZihcIm9iamVjdFwiPT09aSh0KSlmb3IodmFyIHIgaW4gdCl0aGlzLmF0dHIocix0W3JdKTtlbHNlIGlmKG51bGw9PT1lKXRoaXMubm9kZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtpZihudWxsPT1lKXJldHVybiBudWxsPT0oZT10aGlzLm5vZGUuZ2V0QXR0cmlidXRlKHQpKT9hLmRlZmF1bHRzLmF0dHJzW3RdOmEucmVnZXguaXNOdW1iZXIudGVzdChlKT9wYXJzZUZsb2F0KGUpOmU7XCJzdHJva2Utd2lkdGhcIj09dD90aGlzLmF0dHIoXCJzdHJva2VcIixwYXJzZUZsb2F0KGUpPjA/dGhpcy5fc3Ryb2tlOm51bGwpOlwic3Ryb2tlXCI9PXQmJih0aGlzLl9zdHJva2U9ZSksXCJmaWxsXCIhPXQmJlwic3Ryb2tlXCIhPXR8fChhLnJlZ2V4LmlzSW1hZ2UudGVzdChlKSYmKGU9dGhpcy5kb2MoKS5kZWZzKCkuaW1hZ2UoZSwwLDApKSxlIGluc3RhbmNlb2YgYS5JbWFnZSYmKGU9dGhpcy5kb2MoKS5kZWZzKCkucGF0dGVybigwLDAsKGZ1bmN0aW9uKCl7dGhpcy5hZGQoZSl9KSkpKSxcIm51bWJlclwiPT10eXBlb2YgZT9lPW5ldyBhLk51bWJlcihlKTphLkNvbG9yLmlzQ29sb3IoZSk/ZT1uZXcgYS5Db2xvcihlKTpBcnJheS5pc0FycmF5KGUpJiYoZT1uZXcgYS5BcnJheShlKSksXCJsZWFkaW5nXCI9PXQ/dGhpcy5sZWFkaW5nJiZ0aGlzLmxlYWRpbmcoZSk6XCJzdHJpbmdcIj09dHlwZW9mIHM/dGhpcy5ub2RlLnNldEF0dHJpYnV0ZU5TKHMsdCxlLnRvU3RyaW5nKCkpOnRoaXMubm9kZS5zZXRBdHRyaWJ1dGUodCxlLnRvU3RyaW5nKCkpLCF0aGlzLnJlYnVpbGR8fFwiZm9udC1zaXplXCIhPXQmJlwieFwiIT10fHx0aGlzLnJlYnVpbGQodCxlKX1yZXR1cm4gdGhpc319KSxhLmV4dGVuZChhLkVsZW1lbnQse3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3ZhciBzO3JldHVyblwib2JqZWN0XCIhPT1pKHQpPyhzPW5ldyBhLk1hdHJpeCh0aGlzKS5leHRyYWN0KCksXCJzdHJpbmdcIj09dHlwZW9mIHQ/c1t0XTpzKToocz1uZXcgYS5NYXRyaXgodGhpcyksZT0hIWV8fCEhdC5yZWxhdGl2ZSxudWxsIT10LmEmJihzPWU/cy5tdWx0aXBseShuZXcgYS5NYXRyaXgodCkpOm5ldyBhLk1hdHJpeCh0KSksdGhpcy5hdHRyKFwidHJhbnNmb3JtXCIscykpfX0pLGEuZXh0ZW5kKGEuRWxlbWVudCx7dW50cmFuc2Zvcm06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdHRyKFwidHJhbnNmb3JtXCIsbnVsbCl9LG1hdHJpeGlmeTpmdW5jdGlvbigpe3JldHVybih0aGlzLmF0dHIoXCJ0cmFuc2Zvcm1cIil8fFwiXCIpLnNwbGl0KGEucmVnZXgudHJhbnNmb3Jtcykuc2xpY2UoMCwtMSkubWFwKChmdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKS5zcGxpdChcIihcIik7cmV0dXJuW2VbMF0sZVsxXS5zcGxpdChhLnJlZ2V4LmRlbGltaXRlcikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pKV19KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVyblwibWF0cml4XCI9PWVbMF0/dC5tdWx0aXBseShwKGVbMV0pKTp0W2VbMF1dLmFwcGx5KHQsZVsxXSl9KSxuZXcgYS5NYXRyaXgpfSx0b1BhcmVudDpmdW5jdGlvbih0KXtpZih0aGlzPT10KXJldHVybiB0aGlzO3ZhciBlPXRoaXMuc2NyZWVuQ1RNKCksaT10LnNjcmVlbkNUTSgpLmludmVyc2UoKTtyZXR1cm4gdGhpcy5hZGRUbyh0KS51bnRyYW5zZm9ybSgpLnRyYW5zZm9ybShpLm11bHRpcGx5KGUpKSx0aGlzfSx0b0RvYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvUGFyZW50KHRoaXMuZG9jKCkpfX0pLGEuVHJhbnNmb3JtYXRpb249YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmXCJib29sZWFuXCIhPXR5cGVvZiBlKXJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBhPTAscz10aGlzLmFyZ3VtZW50cy5sZW5ndGg7YTxzOysrYSl0aGlzW3RoaXMuYXJndW1lbnRzW2FdXT10W2FdO2Vsc2UgaWYodCYmXCJvYmplY3RcIj09PWkodCkpZm9yKGE9MCxzPXRoaXMuYXJndW1lbnRzLmxlbmd0aDthPHM7KythKXRoaXNbdGhpcy5hcmd1bWVudHNbYV1dPXRbdGhpcy5hcmd1bWVudHNbYV1dO3RoaXMuaW52ZXJzZWQ9ITEsITA9PT1lJiYodGhpcy5pbnZlcnNlZD0hMCl9fSksYS5UcmFuc2xhdGU9YS5pbnZlbnQoe3BhcmVudDphLk1hdHJpeCxpbmhlcml0OmEuVHJhbnNmb3JtYXRpb24sY3JlYXRlOmZ1bmN0aW9uKHQsZSl7dGhpcy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9LGV4dGVuZDp7YXJndW1lbnRzOltcInRyYW5zZm9ybWVkWFwiLFwidHJhbnNmb3JtZWRZXCJdLG1ldGhvZDpcInRyYW5zbGF0ZVwifX0pLGEuZXh0ZW5kKGEuRWxlbWVudCx7c3R5bGU6ZnVuY3Rpb24odCxlKXtpZigwPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLm5vZGUuc3R5bGUuY3NzVGV4dHx8XCJcIjtpZihhcmd1bWVudHMubGVuZ3RoPDIpaWYoXCJvYmplY3RcIj09PWkodCkpZm9yKHZhciBzIGluIHQpdGhpcy5zdHlsZShzLHRbc10pO2Vsc2V7aWYoIWEucmVnZXguaXNDc3MudGVzdCh0KSlyZXR1cm4gdGhpcy5ub2RlLnN0eWxlW2ModCldO2Zvcih0PXQuc3BsaXQoL1xccyo7XFxzKi8pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISF0fSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoL1xccyo6XFxzKi8pfSkpO2U9dC5wb3AoKTspdGhpcy5zdHlsZShlWzBdLGVbMV0pfWVsc2UgdGhpcy5ub2RlLnN0eWxlW2ModCldPW51bGw9PT1lfHxhLnJlZ2V4LmlzQmxhbmsudGVzdChlKT9cIlwiOmU7cmV0dXJuIHRoaXN9fSksYS5QYXJlbnQ9YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0KXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyx0KX0saW5oZXJpdDphLkVsZW1lbnQsZXh0ZW5kOntjaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiBhLnV0aWxzLm1hcChhLnV0aWxzLmZpbHRlclNWR0VsZW1lbnRzKHRoaXMubm9kZS5jaGlsZE5vZGVzKSwoZnVuY3Rpb24odCl7cmV0dXJuIGEuYWRvcHQodCl9KSl9LGFkZDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3RoaXMubm9kZS5hcHBlbmRDaGlsZCh0Lm5vZGUpOnQubm9kZSE9dGhpcy5ub2RlLmNoaWxkTm9kZXNbZV0mJnRoaXMubm9kZS5pbnNlcnRCZWZvcmUodC5ub2RlLHRoaXMubm9kZS5jaGlsZE5vZGVzW2VdKSx0aGlzfSxwdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGQodCxlKSx0fSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5kZXgodCk+PTB9LGluZGV4OmZ1bmN0aW9uKHQpe3JldHVybltdLnNsaWNlLmNhbGwodGhpcy5ub2RlLmNoaWxkTm9kZXMpLmluZGV4T2YodC5ub2RlKX0sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhLmFkb3B0KHRoaXMubm9kZS5jaGlsZE5vZGVzW3RdKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5ub2RlLmNoaWxkTm9kZXMubGVuZ3RoLTEpfSxlYWNoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPXRoaXMuY2hpbGRyZW4oKSxzPTAscj1pLmxlbmd0aDtzPHI7cysrKWlbc11pbnN0YW5jZW9mIGEuRWxlbWVudCYmdC5hcHBseShpW3NdLFtzLGldKSxlJiZpW3NdaW5zdGFuY2VvZiBhLkNvbnRhaW5lciYmaVtzXS5lYWNoKHQsZSk7cmV0dXJuIHRoaXN9LHJlbW92ZUVsZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubm9kZS5yZW1vdmVDaGlsZCh0Lm5vZGUpLHRoaXN9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLm5vZGUuaGFzQ2hpbGROb2RlcygpOyl0aGlzLm5vZGUucmVtb3ZlQ2hpbGQodGhpcy5ub2RlLmxhc3RDaGlsZCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9kZWZzLHRoaXN9LGRlZnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MoKS5kZWZzKCl9fX0pLGEuZXh0ZW5kKGEuUGFyZW50LHt1bmdyb3VwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT1lfHx0aGlzIGluc3RhbmNlb2YgYS5EZWZzfHx0aGlzLm5vZGU9PWEucGFyc2VyLmRyYXd8fCh0PXR8fCh0aGlzIGluc3RhbmNlb2YgYS5Eb2M/dGhpczp0aGlzLnBhcmVudChhLlBhcmVudCkpLGU9ZXx8MS8wLHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGEuRGVmcz90aGlzOnRoaXMgaW5zdGFuY2VvZiBhLlBhcmVudD90aGlzLnVuZ3JvdXAodCxlLTEpOnRoaXMudG9QYXJlbnQodCl9KSksdGhpcy5ub2RlLmZpcnN0Q2hpbGR8fHRoaXMucmVtb3ZlKCkpLHRoaXN9LGZsYXR0ZW46ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy51bmdyb3VwKHQsZSl9fSksYS5Db250YWluZXI9YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0KXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyx0KX0saW5oZXJpdDphLlBhcmVudH0pLGEuVmlld0JveD1hLmludmVudCh7cGFyZW50OmEuQ29udGFpbmVyLGNvbnN0cnVjdDp7fX0pLFtcImNsaWNrXCIsXCJkYmxjbGlja1wiLFwibW91c2Vkb3duXCIsXCJtb3VzZXVwXCIsXCJtb3VzZW92ZXJcIixcIm1vdXNlb3V0XCIsXCJtb3VzZW1vdmVcIixcInRvdWNoc3RhcnRcIixcInRvdWNobW92ZVwiLFwidG91Y2hsZWF2ZVwiLFwidG91Y2hlbmRcIixcInRvdWNoY2FuY2VsXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2EuRWxlbWVudC5wcm90b3R5cGVbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIGEub24odGhpcy5ub2RlLHQsZSksdGhpc319KSksYS5saXN0ZW5lcnM9W10sYS5oYW5kbGVyTWFwPVtdLGEubGlzdGVuZXJJZD0wLGEub249ZnVuY3Rpb24odCxlLGkscyxyKXt2YXIgbz1pLmJpbmQoc3x8dC5pbnN0YW5jZXx8dCksbj0oYS5oYW5kbGVyTWFwLmluZGV4T2YodCkrMXx8YS5oYW5kbGVyTWFwLnB1c2godCkpLTEsbD1lLnNwbGl0KFwiLlwiKVswXSxoPWUuc3BsaXQoXCIuXCIpWzFdfHxcIipcIjthLmxpc3RlbmVyc1tuXT1hLmxpc3RlbmVyc1tuXXx8e30sYS5saXN0ZW5lcnNbbl1bbF09YS5saXN0ZW5lcnNbbl1bbF18fHt9LGEubGlzdGVuZXJzW25dW2xdW2hdPWEubGlzdGVuZXJzW25dW2xdW2hdfHx7fSxpLl9zdmdqc0xpc3RlbmVySWR8fChpLl9zdmdqc0xpc3RlbmVySWQ9KythLmxpc3RlbmVySWQpLGEubGlzdGVuZXJzW25dW2xdW2hdW2kuX3N2Z2pzTGlzdGVuZXJJZF09byx0LmFkZEV2ZW50TGlzdGVuZXIobCxvLHJ8fHtwYXNzaXZlOiEwfSl9LGEub2ZmPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcz1hLmhhbmRsZXJNYXAuaW5kZXhPZih0KSxyPWUmJmUuc3BsaXQoXCIuXCIpWzBdLG89ZSYmZS5zcGxpdChcIi5cIilbMV0sbj1cIlwiO2lmKC0xIT1zKWlmKGkpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkmJihpPWkuX3N2Z2pzTGlzdGVuZXJJZCksIWkpcmV0dXJuO2EubGlzdGVuZXJzW3NdW3JdJiZhLmxpc3RlbmVyc1tzXVtyXVtvfHxcIipcIl0mJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIocixhLmxpc3RlbmVyc1tzXVtyXVtvfHxcIipcIl1baV0sITEpLGRlbGV0ZSBhLmxpc3RlbmVyc1tzXVtyXVtvfHxcIipcIl1baV0pfWVsc2UgaWYobyYmcil7aWYoYS5saXN0ZW5lcnNbc11bcl0mJmEubGlzdGVuZXJzW3NdW3JdW29dKXtmb3IodmFyIGwgaW4gYS5saXN0ZW5lcnNbc11bcl1bb10pYS5vZmYodCxbcixvXS5qb2luKFwiLlwiKSxsKTtkZWxldGUgYS5saXN0ZW5lcnNbc11bcl1bb119fWVsc2UgaWYobylmb3IodmFyIGggaW4gYS5saXN0ZW5lcnNbc10pZm9yKHZhciBuIGluIGEubGlzdGVuZXJzW3NdW2hdKW89PT1uJiZhLm9mZih0LFtoLG9dLmpvaW4oXCIuXCIpKTtlbHNlIGlmKHIpe2lmKGEubGlzdGVuZXJzW3NdW3JdKXtmb3IodmFyIG4gaW4gYS5saXN0ZW5lcnNbc11bcl0pYS5vZmYodCxbcixuXS5qb2luKFwiLlwiKSk7ZGVsZXRlIGEubGlzdGVuZXJzW3NdW3JdfX1lbHNle2Zvcih2YXIgaCBpbiBhLmxpc3RlbmVyc1tzXSlhLm9mZih0LGgpO2RlbGV0ZSBhLmxpc3RlbmVyc1tzXSxkZWxldGUgYS5oYW5kbGVyTWFwW3NdfX0sYS5leHRlbmQoYS5FbGVtZW50LHtvbjpmdW5jdGlvbih0LGUsaSxzKXtyZXR1cm4gYS5vbih0aGlzLm5vZGUsdCxlLGkscyksdGhpc30sb2ZmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEub2ZmKHRoaXMubm9kZSx0LGUpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oZSxpKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHQuRXZlbnQ/dGhpcy5ub2RlLmRpc3BhdGNoRXZlbnQoZSk6dGhpcy5ub2RlLmRpc3BhdGNoRXZlbnQoZT1uZXcgYS5DdXN0b21FdmVudChlLHtkZXRhaWw6aSxjYW5jZWxhYmxlOiEwfSkpLHRoaXMuX2V2ZW50PWUsdGhpc30sZXZlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnR9fSksYS5EZWZzPWEuaW52ZW50KHtjcmVhdGU6XCJkZWZzXCIsaW5oZXJpdDphLkNvbnRhaW5lcn0pLGEuRz1hLmludmVudCh7Y3JlYXRlOlwiZ1wiLGluaGVyaXQ6YS5Db250YWluZXIsZXh0ZW5kOnt4OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMudHJhbnNmb3JtKFwieFwiKTp0aGlzLnRyYW5zZm9ybSh7eDp0LXRoaXMueCgpfSwhMCl9fSxjb25zdHJ1Y3Q6e2dyb3VwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHV0KG5ldyBhLkcpfX19KSxhLkRvYz1hLmludmVudCh7Y3JlYXRlOmZ1bmN0aW9uKHQpe3QmJihcInN2Z1wiPT0odD1cInN0cmluZ1wiPT10eXBlb2YgdD9lLmdldEVsZW1lbnRCeUlkKHQpOnQpLm5vZGVOYW1lP3RoaXMuY29uc3RydWN0b3IuY2FsbCh0aGlzLHQpOih0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhLmNyZWF0ZShcInN2Z1wiKSksdC5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpLHRoaXMuc2l6ZShcIjEwMCVcIixcIjEwMCVcIikpLHRoaXMubmFtZXNwYWNlKCkuZGVmcygpKX0saW5oZXJpdDphLkNvbnRhaW5lcixleHRlbmQ6e25hbWVzcGFjZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHIoe3htbG5zOmEubnMsdmVyc2lvbjpcIjEuMVwifSkuYXR0cihcInhtbG5zOnhsaW5rXCIsYS54bGluayxhLnhtbG5zKS5hdHRyKFwieG1sbnM6c3ZnanNcIixhLnN2Z2pzLGEueG1sbnMpfSxkZWZzOmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuX2RlZnN8fCgodD10aGlzLm5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkZWZzXCIpWzBdKT90aGlzLl9kZWZzPWEuYWRvcHQodCk6dGhpcy5fZGVmcz1uZXcgYS5EZWZzLHRoaXMubm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9kZWZzLm5vZGUpKSx0aGlzLl9kZWZzfSxwYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLnBhcmVudE5vZGUmJlwiI2RvY3VtZW50XCIhPXRoaXMubm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lP3RoaXMubm9kZS5wYXJlbnROb2RlOm51bGx9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLnJlbW92ZUNoaWxkKHRoaXMubm9kZSksdGhpc30sY2xlYXI6ZnVuY3Rpb24oKXtmb3IoO3RoaXMubm9kZS5oYXNDaGlsZE5vZGVzKCk7KXRoaXMubm9kZS5yZW1vdmVDaGlsZCh0aGlzLm5vZGUubGFzdENoaWxkKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2RlZnMsYS5wYXJzZXIuZHJhdyYmIWEucGFyc2VyLmRyYXcucGFyZW50Tm9kZSYmdGhpcy5ub2RlLmFwcGVuZENoaWxkKGEucGFyc2VyLmRyYXcpLHRoaXN9LGNsb25lOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVEYXRhVG9Eb20oKTt2YXIgZT10aGlzLm5vZGUsaT14KGUuY2xvbmVOb2RlKCEwKSk7cmV0dXJuIHQ/KHQubm9kZXx8dCkuYXBwZW5kQ2hpbGQoaS5ub2RlKTplLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGkubm9kZSxlLm5leHRTaWJsaW5nKSxpfX19KSxhLmV4dGVuZChhLkVsZW1lbnQse30pLGEuR3JhZGllbnQ9YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0KXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhLmNyZWF0ZSh0K1wiR3JhZGllbnRcIikpLHRoaXMudHlwZT10fSxpbmhlcml0OmEuQ29udGFpbmVyLGV4dGVuZDp7YXQ6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLnB1dChuZXcgYS5TdG9wKS51cGRhdGUodCxlLGkpfSx1cGRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xlYXIoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LmNhbGwodGhpcyx0aGlzKSx0aGlzfSxmaWxsOmZ1bmN0aW9uKCl7cmV0dXJuXCJ1cmwoI1wiK3RoaXMuaWQoKStcIilcIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsKCl9LGF0dHI6ZnVuY3Rpb24odCxlLGkpe3JldHVyblwidHJhbnNmb3JtXCI9PXQmJih0PVwiZ3JhZGllbnRUcmFuc2Zvcm1cIiksYS5Db250YWluZXIucHJvdG90eXBlLmF0dHIuY2FsbCh0aGlzLHQsZSxpKX19LGNvbnN0cnVjdDp7Z3JhZGllbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZWZzKCkuZ3JhZGllbnQodCxlKX19fSksYS5leHRlbmQoYS5HcmFkaWVudCxhLkZYLHtmcm9tOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJyYWRpYWxcIj09KHRoaXMuX3RhcmdldHx8dGhpcykudHlwZT90aGlzLmF0dHIoe2Z4Om5ldyBhLk51bWJlcih0KSxmeTpuZXcgYS5OdW1iZXIoZSl9KTp0aGlzLmF0dHIoe3gxOm5ldyBhLk51bWJlcih0KSx5MTpuZXcgYS5OdW1iZXIoZSl9KX0sdG86ZnVuY3Rpb24odCxlKXtyZXR1cm5cInJhZGlhbFwiPT0odGhpcy5fdGFyZ2V0fHx0aGlzKS50eXBlP3RoaXMuYXR0cih7Y3g6bmV3IGEuTnVtYmVyKHQpLGN5Om5ldyBhLk51bWJlcihlKX0pOnRoaXMuYXR0cih7eDI6bmV3IGEuTnVtYmVyKHQpLHkyOm5ldyBhLk51bWJlcihlKX0pfX0pLGEuZXh0ZW5kKGEuRGVmcyx7Z3JhZGllbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wdXQobmV3IGEuR3JhZGllbnQodCkpLnVwZGF0ZShlKX19KSxhLlN0b3A9YS5pbnZlbnQoe2NyZWF0ZTpcInN0b3BcIixpbmhlcml0OmEuRWxlbWVudCxleHRlbmQ6e3VwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4oXCJudW1iZXJcIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBhLk51bWJlcikmJih0PXtvZmZzZXQ6YXJndW1lbnRzWzBdLGNvbG9yOmFyZ3VtZW50c1sxXSxvcGFjaXR5OmFyZ3VtZW50c1syXX0pLG51bGwhPXQub3BhY2l0eSYmdGhpcy5hdHRyKFwic3RvcC1vcGFjaXR5XCIsdC5vcGFjaXR5KSxudWxsIT10LmNvbG9yJiZ0aGlzLmF0dHIoXCJzdG9wLWNvbG9yXCIsdC5jb2xvciksbnVsbCE9dC5vZmZzZXQmJnRoaXMuYXR0cihcIm9mZnNldFwiLG5ldyBhLk51bWJlcih0Lm9mZnNldCkpLHRoaXN9fX0pLGEuUGF0dGVybj1hLmludmVudCh7Y3JlYXRlOlwicGF0dGVyblwiLGluaGVyaXQ6YS5Db250YWluZXIsZXh0ZW5kOntmaWxsOmZ1bmN0aW9uKCl7cmV0dXJuXCJ1cmwoI1wiK3RoaXMuaWQoKStcIilcIn0sdXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsZWFyKCksXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5jYWxsKHRoaXMsdGhpcyksdGhpc30sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsKCl9LGF0dHI6ZnVuY3Rpb24odCxlLGkpe3JldHVyblwidHJhbnNmb3JtXCI9PXQmJih0PVwicGF0dGVyblRyYW5zZm9ybVwiKSxhLkNvbnRhaW5lci5wcm90b3R5cGUuYXR0ci5jYWxsKHRoaXMsdCxlLGkpfX0sY29uc3RydWN0OntwYXR0ZXJuOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5kZWZzKCkucGF0dGVybih0LGUsaSl9fX0pLGEuZXh0ZW5kKGEuRGVmcyx7cGF0dGVybjpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMucHV0KG5ldyBhLlBhdHRlcm4pLnVwZGF0ZShpKS5hdHRyKHt4OjAseTowLHdpZHRoOnQsaGVpZ2h0OmUscGF0dGVyblVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0pfX0pLGEuU2hhcGU9YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbih0KXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyx0KX0saW5oZXJpdDphLkVsZW1lbnR9KSxhLlN5bWJvbD1hLmludmVudCh7Y3JlYXRlOlwic3ltYm9sXCIsaW5oZXJpdDphLkNvbnRhaW5lcixjb25zdHJ1Y3Q6e3N5bWJvbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1dChuZXcgYS5TeW1ib2wpfX19KSxhLlVzZT1hLmludmVudCh7Y3JlYXRlOlwidXNlXCIsaW5oZXJpdDphLlNoYXBlLGV4dGVuZDp7ZWxlbWVudDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmF0dHIoXCJocmVmXCIsKGV8fFwiXCIpK1wiI1wiK3QsYS54bGluayl9fSxjb25zdHJ1Y3Q6e3VzZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnB1dChuZXcgYS5Vc2UpLmVsZW1lbnQodCxlKX19fSksYS5SZWN0PWEuaW52ZW50KHtjcmVhdGU6XCJyZWN0XCIsaW5oZXJpdDphLlNoYXBlLGNvbnN0cnVjdDp7cmVjdDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnB1dChuZXcgYS5SZWN0KS5zaXplKHQsZSl9fX0pLGEuQ2lyY2xlPWEuaW52ZW50KHtjcmVhdGU6XCJjaXJjbGVcIixpbmhlcml0OmEuU2hhcGUsY29uc3RydWN0OntjaXJjbGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHV0KG5ldyBhLkNpcmNsZSkucngobmV3IGEuTnVtYmVyKHQpLmRpdmlkZSgyKSkubW92ZSgwLDApfX19KSxhLmV4dGVuZChhLkNpcmNsZSxhLkZYLHtyeDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hdHRyKFwiclwiLHQpfSxyeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yeCh0KX19KSxhLkVsbGlwc2U9YS5pbnZlbnQoe2NyZWF0ZTpcImVsbGlwc2VcIixpbmhlcml0OmEuU2hhcGUsY29uc3RydWN0OntlbGxpcHNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucHV0KG5ldyBhLkVsbGlwc2UpLnNpemUodCxlKS5tb3ZlKDAsMCl9fX0pLGEuZXh0ZW5kKGEuRWxsaXBzZSxhLlJlY3QsYS5GWCx7cng6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXR0cihcInJ4XCIsdCl9LHJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF0dHIoXCJyeVwiLHQpfX0pLGEuZXh0ZW5kKGEuQ2lyY2xlLGEuRWxsaXBzZSx7eDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLmN4KCktdGhpcy5yeCgpOnRoaXMuY3godCt0aGlzLnJ4KCkpfSx5OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuY3koKS10aGlzLnJ5KCk6dGhpcy5jeSh0K3RoaXMucnkoKSl9LGN4OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuYXR0cihcImN4XCIpOnRoaXMuYXR0cihcImN4XCIsdCl9LGN5OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuYXR0cihcImN5XCIpOnRoaXMuYXR0cihcImN5XCIsdCl9LHdpZHRoOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10PzIqdGhpcy5yeCgpOnRoaXMucngobmV3IGEuTnVtYmVyKHQpLmRpdmlkZSgyKSl9LGhlaWdodDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD8yKnRoaXMucnkoKTp0aGlzLnJ5KG5ldyBhLk51bWJlcih0KS5kaXZpZGUoMikpfSxzaXplOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dSh0aGlzLHQsZSk7cmV0dXJuIHRoaXMucngobmV3IGEuTnVtYmVyKGkud2lkdGgpLmRpdmlkZSgyKSkucnkobmV3IGEuTnVtYmVyKGkuaGVpZ2h0KS5kaXZpZGUoMikpfX0pLGEuTGluZT1hLmludmVudCh7Y3JlYXRlOlwibGluZVwiLGluaGVyaXQ6YS5TaGFwZSxleHRlbmQ6e2FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhLlBvaW50QXJyYXkoW1t0aGlzLmF0dHIoXCJ4MVwiKSx0aGlzLmF0dHIoXCJ5MVwiKV0sW3RoaXMuYXR0cihcIngyXCIpLHRoaXMuYXR0cihcInkyXCIpXV0pfSxwbG90OmZ1bmN0aW9uKHQsZSxpLHMpe3JldHVybiBudWxsPT10P3RoaXMuYXJyYXkoKToodD12b2lkIDAhPT1lP3t4MTp0LHkxOmUseDI6aSx5MjpzfTpuZXcgYS5Qb2ludEFycmF5KHQpLnRvTGluZSgpLHRoaXMuYXR0cih0KSl9LG1vdmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hdHRyKHRoaXMuYXJyYXkoKS5tb3ZlKHQsZSkudG9MaW5lKCkpfSxzaXplOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dSh0aGlzLHQsZSk7cmV0dXJuIHRoaXMuYXR0cih0aGlzLmFycmF5KCkuc2l6ZShpLndpZHRoLGkuaGVpZ2h0KS50b0xpbmUoKSl9fSxjb25zdHJ1Y3Q6e2xpbmU6ZnVuY3Rpb24odCxlLGkscyl7cmV0dXJuIGEuTGluZS5wcm90b3R5cGUucGxvdC5hcHBseSh0aGlzLnB1dChuZXcgYS5MaW5lKSxudWxsIT10P1t0LGUsaSxzXTpbMCwwLDAsMF0pfX19KSxhLlBvbHlsaW5lPWEuaW52ZW50KHtjcmVhdGU6XCJwb2x5bGluZVwiLGluaGVyaXQ6YS5TaGFwZSxjb25zdHJ1Y3Q6e3BvbHlsaW5lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnB1dChuZXcgYS5Qb2x5bGluZSkucGxvdCh0fHxuZXcgYS5Qb2ludEFycmF5KX19fSksYS5Qb2x5Z29uPWEuaW52ZW50KHtjcmVhdGU6XCJwb2x5Z29uXCIsaW5oZXJpdDphLlNoYXBlLGNvbnN0cnVjdDp7cG9seWdvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wdXQobmV3IGEuUG9seWdvbikucGxvdCh0fHxuZXcgYS5Qb2ludEFycmF5KX19fSksYS5leHRlbmQoYS5Qb2x5bGluZSxhLlBvbHlnb24se2FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5fHwodGhpcy5fYXJyYXk9bmV3IGEuUG9pbnRBcnJheSh0aGlzLmF0dHIoXCJwb2ludHNcIikpKX0scGxvdDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLmFycmF5KCk6dGhpcy5jbGVhcigpLmF0dHIoXCJwb2ludHNcIixcInN0cmluZ1wiPT10eXBlb2YgdD90OnRoaXMuX2FycmF5PW5ldyBhLlBvaW50QXJyYXkodCkpfSxjbGVhcjpmdW5jdGlvbigpe3JldHVybiBkZWxldGUgdGhpcy5fYXJyYXksdGhpc30sbW92ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmF0dHIoXCJwb2ludHNcIix0aGlzLmFycmF5KCkubW92ZSh0LGUpKX0sc2l6ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXUodGhpcyx0LGUpO3JldHVybiB0aGlzLmF0dHIoXCJwb2ludHNcIix0aGlzLmFycmF5KCkuc2l6ZShpLndpZHRoLGkuaGVpZ2h0KSl9fSksYS5leHRlbmQoYS5MaW5lLGEuUG9seWxpbmUsYS5Qb2x5Z29uLHttb3JwaEFycmF5OmEuUG9pbnRBcnJheSx4OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuYmJveCgpLng6dGhpcy5tb3ZlKHQsdGhpcy5iYm94KCkueSl9LHk6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5iYm94KCkueTp0aGlzLm1vdmUodGhpcy5iYm94KCkueCx0KX0sd2lkdGg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5iYm94KCk7cmV0dXJuIG51bGw9PXQ/ZS53aWR0aDp0aGlzLnNpemUodCxlLmhlaWdodCl9LGhlaWdodDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmJib3goKTtyZXR1cm4gbnVsbD09dD9lLmhlaWdodDp0aGlzLnNpemUoZS53aWR0aCx0KX19KSxhLlBhdGg9YS5pbnZlbnQoe2NyZWF0ZTpcInBhdGhcIixpbmhlcml0OmEuU2hhcGUsZXh0ZW5kOnttb3JwaEFycmF5OmEuUGF0aEFycmF5LGFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FycmF5fHwodGhpcy5fYXJyYXk9bmV3IGEuUGF0aEFycmF5KHRoaXMuYXR0cihcImRcIikpKX0scGxvdDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLmFycmF5KCk6dGhpcy5jbGVhcigpLmF0dHIoXCJkXCIsXCJzdHJpbmdcIj09dHlwZW9mIHQ/dDp0aGlzLl9hcnJheT1uZXcgYS5QYXRoQXJyYXkodCkpfSxjbGVhcjpmdW5jdGlvbigpe3JldHVybiBkZWxldGUgdGhpcy5fYXJyYXksdGhpc319LGNvbnN0cnVjdDp7cGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wdXQobmV3IGEuUGF0aCkucGxvdCh0fHxuZXcgYS5QYXRoQXJyYXkpfX19KSxhLkltYWdlPWEuaW52ZW50KHtjcmVhdGU6XCJpbWFnZVwiLGluaGVyaXQ6YS5TaGFwZSxleHRlbmQ6e2xvYWQ6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIGk9dGhpcyxzPW5ldyB0LkltYWdlO3JldHVybiBhLm9uKHMsXCJsb2FkXCIsKGZ1bmN0aW9uKCl7YS5vZmYocyk7dmFyIHQ9aS5wYXJlbnQoYS5QYXR0ZXJuKTtudWxsIT09dCYmKDA9PWkud2lkdGgoKSYmMD09aS5oZWlnaHQoKSYmaS5zaXplKHMud2lkdGgscy5oZWlnaHQpLHQmJjA9PXQud2lkdGgoKSYmMD09dC5oZWlnaHQoKSYmdC5zaXplKGkud2lkdGgoKSxpLmhlaWdodCgpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLl9sb2FkZWQmJmkuX2xvYWRlZC5jYWxsKGkse3dpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0LHJhdGlvOnMud2lkdGgvcy5oZWlnaHQsdXJsOmV9KSl9KSksYS5vbihzLFwiZXJyb3JcIiwoZnVuY3Rpb24odCl7YS5vZmYocyksXCJmdW5jdGlvblwiPT10eXBlb2YgaS5fZXJyb3ImJmkuX2Vycm9yLmNhbGwoaSx0KX0pKSx0aGlzLmF0dHIoXCJocmVmXCIscy5zcmM9dGhpcy5zcmM9ZSxhLnhsaW5rKX0sbG9hZGVkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sb2FkZWQ9dCx0aGlzfSxlcnJvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXJyb3I9dCx0aGlzfX0sY29uc3RydWN0OntpbWFnZTpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMucHV0KG5ldyBhLkltYWdlKS5sb2FkKHQpLnNpemUoZXx8MCxpfHxlfHwwKX19fSksYS5UZXh0PWEuaW52ZW50KHtjcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhLmNyZWF0ZShcInRleHRcIikpLHRoaXMuZG9tLmxlYWRpbmc9bmV3IGEuTnVtYmVyKDEuMyksdGhpcy5fcmVidWlsZD0hMCx0aGlzLl9idWlsZD0hMSx0aGlzLmF0dHIoXCJmb250LWZhbWlseVwiLGEuZGVmYXVsdHMuYXR0cnNbXCJmb250LWZhbWlseVwiXSl9LGluaGVyaXQ6YS5TaGFwZSxleHRlbmQ6e3g6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5hdHRyKFwieFwiKTp0aGlzLmF0dHIoXCJ4XCIsdCl9LHRleHQ6ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCl7dD1cIlwiO2Zvcih2YXIgZT10aGlzLm5vZGUuY2hpbGROb2RlcyxpPTAscz1lLmxlbmd0aDtpPHM7KytpKTAhPWkmJjMhPWVbaV0ubm9kZVR5cGUmJjE9PWEuYWRvcHQoZVtpXSkuZG9tLm5ld0xpbmVkJiYodCs9XCJcXG5cIiksdCs9ZVtpXS50ZXh0Q29udGVudDtyZXR1cm4gdH1pZih0aGlzLmNsZWFyKCkuYnVpbGQoITApLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpdC5jYWxsKHRoaXMsdGhpcyk7ZWxzZXtpPTA7Zm9yKHZhciByPSh0PXQuc3BsaXQoXCJcXG5cIikpLmxlbmd0aDtpPHI7aSsrKXRoaXMudHNwYW4odFtpXSkubmV3TGluZSgpfXJldHVybiB0aGlzLmJ1aWxkKCExKS5yZWJ1aWxkKCl9LHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXR0cihcImZvbnQtc2l6ZVwiLHQpLnJlYnVpbGQoKX0sbGVhZGluZzpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLmRvbS5sZWFkaW5nOih0aGlzLmRvbS5sZWFkaW5nPW5ldyBhLk51bWJlcih0KSx0aGlzLnJlYnVpbGQoKSl9LGxpbmVzOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMudGV4dFBhdGgmJnRoaXMudGV4dFBhdGgoKXx8dGhpcykubm9kZSxlPWEudXRpbHMubWFwKGEudXRpbHMuZmlsdGVyU1ZHRWxlbWVudHModC5jaGlsZE5vZGVzKSwoZnVuY3Rpb24odCl7cmV0dXJuIGEuYWRvcHQodCl9KSk7cmV0dXJuIG5ldyBhLlNldChlKX0scmVidWlsZDpmdW5jdGlvbih0KXtpZihcImJvb2xlYW5cIj09dHlwZW9mIHQmJih0aGlzLl9yZWJ1aWxkPXQpLHRoaXMuX3JlYnVpbGQpe3ZhciBlPXRoaXMsaT0wLHM9dGhpcy5kb20ubGVhZGluZypuZXcgYS5OdW1iZXIodGhpcy5hdHRyKFwiZm9udC1zaXplXCIpKTt0aGlzLmxpbmVzKCkuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLmRvbS5uZXdMaW5lZCYmKGUudGV4dFBhdGgoKXx8dGhpcy5hdHRyKFwieFwiLGUuYXR0cihcInhcIikpLFwiXFxuXCI9PXRoaXMudGV4dCgpP2krPXM6KHRoaXMuYXR0cihcImR5XCIscytpKSxpPTApKX0pKSx0aGlzLmZpcmUoXCJyZWJ1aWxkXCIpfXJldHVybiB0aGlzfSxidWlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYnVpbGQ9ISF0LHRoaXN9LHNldERhdGE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZG9tPXQsdGhpcy5kb20ubGVhZGluZz1uZXcgYS5OdW1iZXIodC5sZWFkaW5nfHwxLjMpLHRoaXN9fSxjb25zdHJ1Y3Q6e3RleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHV0KG5ldyBhLlRleHQpLnRleHQodCl9LHBsYWluOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnB1dChuZXcgYS5UZXh0KS5wbGFpbih0KX19fSksYS5Uc3Bhbj1hLmludmVudCh7Y3JlYXRlOlwidHNwYW5cIixpbmhlcml0OmEuU2hhcGUsZXh0ZW5kOnt0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMubm9kZS50ZXh0Q29udGVudCsodGhpcy5kb20ubmV3TGluZWQ/XCJcXG5cIjpcIlwiKTooXCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwodGhpcyx0aGlzKTp0aGlzLnBsYWluKHQpLHRoaXMpfSxkeDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hdHRyKFwiZHhcIix0KX0sZHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXR0cihcImR5XCIsdCl9LG5ld0xpbmU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudChhLlRleHQpO3JldHVybiB0aGlzLmRvbS5uZXdMaW5lZD0hMCx0aGlzLmR5KHQuZG9tLmxlYWRpbmcqdC5hdHRyKFwiZm9udC1zaXplXCIpKS5hdHRyKFwieFwiLHQueCgpKX19fSksYS5leHRlbmQoYS5UZXh0LGEuVHNwYW4se3BsYWluOmZ1bmN0aW9uKHQpe3JldHVybiExPT09dGhpcy5fYnVpbGQmJnRoaXMuY2xlYXIoKSx0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZS5jcmVhdGVUZXh0Tm9kZSh0KSksdGhpc30sdHNwYW46ZnVuY3Rpb24odCl7dmFyIGU9KHRoaXMudGV4dFBhdGgmJnRoaXMudGV4dFBhdGgoKXx8dGhpcykubm9kZSxpPW5ldyBhLlRzcGFuO3JldHVybiExPT09dGhpcy5fYnVpbGQmJnRoaXMuY2xlYXIoKSxlLmFwcGVuZENoaWxkKGkubm9kZSksaS50ZXh0KHQpfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD0odGhpcy50ZXh0UGF0aCYmdGhpcy50ZXh0UGF0aCgpfHx0aGlzKS5ub2RlO3QuaGFzQ2hpbGROb2RlcygpOyl0LnJlbW92ZUNoaWxkKHQubGFzdENoaWxkKTtyZXR1cm4gdGhpc30sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKX19KSxhLlRleHRQYXRoPWEuaW52ZW50KHtjcmVhdGU6XCJ0ZXh0UGF0aFwiLGluaGVyaXQ6YS5QYXJlbnQscGFyZW50OmEuVGV4dCxjb25zdHJ1Y3Q6e21vcnBoQXJyYXk6YS5QYXRoQXJyYXksYXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYWNrKCk7cmV0dXJuIHQ/dC5hcnJheSgpOm51bGx9LHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy50cmFjaygpLGk9bnVsbDtyZXR1cm4gZSYmKGk9ZS5wbG90KHQpKSxudWxsPT10P2k6dGhpc30sdHJhY2s6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRleHRQYXRoKCk7aWYodClyZXR1cm4gdC5yZWZlcmVuY2UoXCJocmVmXCIpfSx0ZXh0UGF0aDpmdW5jdGlvbigpe2lmKHRoaXMubm9kZS5maXJzdENoaWxkJiZcInRleHRQYXRoXCI9PXRoaXMubm9kZS5maXJzdENoaWxkLm5vZGVOYW1lKXJldHVybiBhLmFkb3B0KHRoaXMubm9kZS5maXJzdENoaWxkKX19fSksYS5OZXN0ZWQ9YS5pbnZlbnQoe2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEuY3JlYXRlKFwic3ZnXCIpKSx0aGlzLnN0eWxlKFwib3ZlcmZsb3dcIixcInZpc2libGVcIil9LGluaGVyaXQ6YS5Db250YWluZXIsY29uc3RydWN0OntuZXN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXQobmV3IGEuTmVzdGVkKX19fSk7dmFyIGw9e3N0cm9rZTpbXCJjb2xvclwiLFwid2lkdGhcIixcIm9wYWNpdHlcIixcImxpbmVjYXBcIixcImxpbmVqb2luXCIsXCJtaXRlcmxpbWl0XCIsXCJkYXNoYXJyYXlcIixcImRhc2hvZmZzZXRcIl0sZmlsbDpbXCJjb2xvclwiLFwib3BhY2l0eVwiLFwicnVsZVwiXSxwcmVmaXg6ZnVuY3Rpb24odCxlKXtyZXR1cm5cImNvbG9yXCI9PWU/dDp0K1wiLVwiK2V9fTtmdW5jdGlvbiBoKHQsZSxpLHMpe3JldHVybiBpK3MucmVwbGFjZShhLnJlZ2V4LmRvdHMsXCIgLlwiKX1mdW5jdGlvbiBjKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLSguKS9nLChmdW5jdGlvbih0LGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC50b1N0cmluZygxNik7cmV0dXJuIDE9PWUubGVuZ3RoP1wiMFwiK2U6ZX1mdW5jdGlvbiB1KHQsZSxpKXtpZihudWxsPT1lfHxudWxsPT1pKXt2YXIgYT10LmJib3goKTtudWxsPT1lP2U9YS53aWR0aC9hLmhlaWdodCppOm51bGw9PWkmJihpPWEuaGVpZ2h0L2Eud2lkdGgqZSl9cmV0dXJue3dpZHRoOmUsaGVpZ2h0Oml9fWZ1bmN0aW9uIGYodCxlLGkpe3JldHVybnt4OmUqdC5hK2kqdC5jKzAseTplKnQuYitpKnQuZCswfX1mdW5jdGlvbiBwKHQpe3JldHVybnthOnRbMF0sYjp0WzFdLGM6dFsyXSxkOnRbM10sZTp0WzRdLGY6dFs1XX19ZnVuY3Rpb24geChlKXtmb3IodmFyIGk9ZS5jaGlsZE5vZGVzLmxlbmd0aC0xO2k+PTA7aS0tKWUuY2hpbGROb2Rlc1tpXWluc3RhbmNlb2YgdC5TVkdFbGVtZW50JiZ4KGUuY2hpbGROb2Rlc1tpXSk7cmV0dXJuIGEuYWRvcHQoZSkuaWQoYS5laWQoZS5ub2RlTmFtZSkpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG51bGw9PXQueCYmKHQueD0wLHQueT0wLHQud2lkdGg9MCx0LmhlaWdodD0wKSx0Lnc9dC53aWR0aCx0Lmg9dC5oZWlnaHQsdC54Mj10LngrdC53aWR0aCx0LnkyPXQueSt0LmhlaWdodCx0LmN4PXQueCt0LndpZHRoLzIsdC5jeT10LnkrdC5oZWlnaHQvMix0fWZ1bmN0aW9uIHYodCl7cmV0dXJuIE1hdGguYWJzKHQpPjFlLTM3P3Q6MH1bXCJmaWxsXCIsXCJzdHJva2VcIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9e307ZVt0XT1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiB0aGlzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxhLkNvbG9yLmlzUmdiKGUpfHxlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmZpbGwpdGhpcy5hdHRyKHQsZSk7ZWxzZSBmb3IodmFyIGk9bFt0XS5sZW5ndGgtMTtpPj0wO2ktLSludWxsIT1lW2xbdF1baV1dJiZ0aGlzLmF0dHIobC5wcmVmaXgodCxsW3RdW2ldKSxlW2xbdF1baV1dKTtyZXR1cm4gdGhpc30sYS5leHRlbmQoYS5FbGVtZW50LGEuRlgsZSl9KSksYS5leHRlbmQoYS5FbGVtZW50LGEuRlgse3RyYW5zbGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh7eDp0LHk6ZX0pfSxtYXRyaXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXR0cihcInRyYW5zZm9ybVwiLG5ldyBhLk1hdHJpeCg2PT1hcmd1bWVudHMubGVuZ3RoP1tdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTp0KSl9LG9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYXR0cihcIm9wYWNpdHlcIix0KX0sZHg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueChuZXcgYS5OdW1iZXIodCkucGx1cyh0aGlzIGluc3RhbmNlb2YgYS5GWD8wOnRoaXMueCgpKSwhMCl9LGR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnkobmV3IGEuTnVtYmVyKHQpLnBsdXModGhpcyBpbnN0YW5jZW9mIGEuRlg/MDp0aGlzLnkoKSksITApfX0pLGEuZXh0ZW5kKGEuUGF0aCx7bGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCgpfSxwb2ludEF0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5vZGUuZ2V0UG9pbnRBdExlbmd0aCh0KX19KSxhLlNldD1hLmludmVudCh7Y3JlYXRlOmZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodCk/dGhpcy5tZW1iZXJzPXQ6dGhpcy5jbGVhcigpfSxleHRlbmQ6e2FkZDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLm1lbWJlcnMucHVzaCh0W2VdKTtyZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5kZXgodCk7cmV0dXJuIGU+LTEmJnRoaXMubWVtYmVycy5zcGxpY2UoZSwxKSx0aGlzfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLGk9dGhpcy5tZW1iZXJzLmxlbmd0aDtlPGk7ZSsrKXQuYXBwbHkodGhpcy5tZW1iZXJzW2VdLFtlLHRoaXMubWVtYmVyc10pO3JldHVybiB0aGlzfSxjbGVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbWJlcnM9W10sdGhpc30sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVtYmVycy5sZW5ndGh9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbmRleCh0KT49MH0saW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWVtYmVycy5pbmRleE9mKHQpfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWVtYmVyc1t0XX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5tZW1iZXJzLmxlbmd0aC0xKX0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbWJlcnN9fSxjb25zdHJ1Y3Q6e3NldDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEuU2V0KHQpfX19KSxhLkZYLlNldD1hLmludmVudCh7Y3JlYXRlOmZ1bmN0aW9uKHQpe3RoaXMuc2V0PXR9fSksYS5TZXQuaW5oZXJpdD1mdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBhLlNoYXBlLnByb3RvdHlwZSlcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLlNoYXBlLnByb3RvdHlwZVtlXSYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5TZXQucHJvdG90eXBlW2VdJiZ0LnB1c2goZSk7Zm9yKHZhciBlIGluIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7YS5TZXQucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsaT10aGlzLm1lbWJlcnMubGVuZ3RoO2U8aTtlKyspdGhpcy5tZW1iZXJzW2VdJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm1lbWJlcnNbZV1bdF0mJnRoaXMubWVtYmVyc1tlXVt0XS5hcHBseSh0aGlzLm1lbWJlcnNbZV0sYXJndW1lbnRzKTtyZXR1cm5cImFuaW1hdGVcIj09dD90aGlzLmZ4fHwodGhpcy5meD1uZXcgYS5GWC5TZXQodGhpcykpOnRoaXN9fSkpLHQ9W10sYS5GWC5wcm90b3R5cGUpXCJmdW5jdGlvblwiPT10eXBlb2YgYS5GWC5wcm90b3R5cGVbZV0mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuRlguU2V0LnByb3RvdHlwZVtlXSYmdC5wdXNoKGUpO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7YS5GWC5TZXQucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsaT10aGlzLnNldC5tZW1iZXJzLmxlbmd0aDtlPGk7ZSsrKXRoaXMuc2V0Lm1lbWJlcnNbZV0uZnhbdF0uYXBwbHkodGhpcy5zZXQubWVtYmVyc1tlXS5meCxhcmd1bWVudHMpO3JldHVybiB0aGlzfX0pKX0sYS5leHRlbmQoYS5FbGVtZW50LHt9KSxhLmV4dGVuZChhLkVsZW1lbnQse3JlbWVtYmVyOmZ1bmN0aW9uKHQsZSl7aWYoXCJvYmplY3RcIj09PWkoYXJndW1lbnRzWzBdKSlmb3IodmFyIGEgaW4gdCl0aGlzLnJlbWVtYmVyKGEsdFthXSk7ZWxzZXtpZigxPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLm1lbW9yeSgpW3RdO3RoaXMubWVtb3J5KClbdF09ZX1yZXR1cm4gdGhpc30sZm9yZ2V0OmZ1bmN0aW9uKCl7aWYoMD09YXJndW1lbnRzLmxlbmd0aCl0aGlzLl9tZW1vcnk9e307ZWxzZSBmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aC0xO3Q+PTA7dC0tKWRlbGV0ZSB0aGlzLm1lbW9yeSgpW2FyZ3VtZW50c1t0XV07cmV0dXJuIHRoaXN9LG1lbW9yeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZW1vcnl8fCh0aGlzLl9tZW1vcnk9e30pfX0pLGEuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBpPWUuZ2V0RWxlbWVudEJ5SWQoZnVuY3Rpb24odCl7dmFyIGU9KHR8fFwiXCIpLnRvU3RyaW5nKCkubWF0Y2goYS5yZWdleC5yZWZlcmVuY2UpO2lmKGUpcmV0dXJuIGVbMV19KHQpfHx0KTtyZXR1cm4gYS5hZG9wdChpKX0sYS5zZWxlY3Q9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IGEuU2V0KGEudXRpbHMubWFwKChpfHxlKS5xdWVyeVNlbGVjdG9yQWxsKHQpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5hZG9wdCh0KX0pKSl9LGEuZXh0ZW5kKGEuUGFyZW50LHtzZWxlY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGEuc2VsZWN0KHQsdGhpcy5ub2RlKX19KTt2YXIgbT1cImFiY2RlZlwiLnNwbGl0KFwiXCIpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQuQ3VzdG9tRXZlbnQpe3ZhciB5PWZ1bmN0aW9uKHQsaSl7aT1pfHx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExLGRldGFpbDp2b2lkIDB9O3ZhciBhPWUuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKTtyZXR1cm4gYS5pbml0Q3VzdG9tRXZlbnQodCxpLmJ1YmJsZXMsaS5jYW5jZWxhYmxlLGkuZGV0YWlsKSxhfTt5LnByb3RvdHlwZT10LkV2ZW50LnByb3RvdHlwZSxhLkN1c3RvbUV2ZW50PXl9ZWxzZSBhLkN1c3RvbUV2ZW50PXQuQ3VzdG9tRXZlbnQ7cmV0dXJuIGF9LFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoKGZ1bmN0aW9uKCl7cmV0dXJuIEV0KHp0LHp0LmRvY3VtZW50KX0pKTpcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBleHBvcnRzP1widW5kZWZpbmVkXCI6aShleHBvcnRzKSkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9enQuZG9jdW1lbnQ/RXQoenQsenQuZG9jdW1lbnQpOmZ1bmN0aW9uKHQpe3JldHVybiBFdCh0LHQuZG9jdW1lbnQpfTp6dC5TVkc9RXQoenQsenQuZG9jdW1lbnQpLFxuLyohIHN2Zy5maWx0ZXIuanMgLSB2Mi4wLjIgLSAyMDE2LTAyLTI0XG4gICogaHR0cHM6Ly9naXRodWIuY29tL3dvdXQvc3ZnLmZpbHRlci5qc1xuICAqIENvcHlyaWdodCAoYykgMjAxNiBXb3V0IEZpZXJlbnM7IExpY2Vuc2VkIE1JVCAqL1xuZnVuY3Rpb24oKXtTVkcuRmlsdGVyPVNWRy5pbnZlbnQoe2NyZWF0ZTpcImZpbHRlclwiLGluaGVyaXQ6U1ZHLlBhcmVudCxleHRlbmQ6e3NvdXJjZTpcIlNvdXJjZUdyYXBoaWNcIixzb3VyY2VBbHBoYTpcIlNvdXJjZUFscGhhXCIsYmFja2dyb3VuZDpcIkJhY2tncm91bmRJbWFnZVwiLGJhY2tncm91bmRBbHBoYTpcIkJhY2tncm91bmRBbHBoYVwiLGZpbGw6XCJGaWxsUGFpbnRcIixzdHJva2U6XCJTdHJva2VQYWludFwiLGF1dG9TZXRJbjohMCxwdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGQodCxlKSwhdC5hdHRyKFwiaW5cIikmJnRoaXMuYXV0b1NldEluJiZ0LmF0dHIoXCJpblwiLHRoaXMuc291cmNlKSx0LmF0dHIoXCJyZXN1bHRcIil8fHQuYXR0cihcInJlc3VsdFwiLHQpLHR9LGJsZW5kOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5wdXQobmV3IFNWRy5CbGVuZEVmZmVjdCh0LGUsaSkpfSxjb2xvck1hdHJpeDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnB1dChuZXcgU1ZHLkNvbG9yTWF0cml4RWZmZWN0KHQsZSkpfSxjb252b2x2ZU1hdHJpeDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wdXQobmV3IFNWRy5Db252b2x2ZU1hdHJpeEVmZmVjdCh0KSl9LGNvbXBvbmVudFRyYW5zZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnB1dChuZXcgU1ZHLkNvbXBvbmVudFRyYW5zZmVyRWZmZWN0KHQpKX0sY29tcG9zaXRlOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5wdXQobmV3IFNWRy5Db21wb3NpdGVFZmZlY3QodCxlLGkpKX0sZmxvb2Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wdXQobmV3IFNWRy5GbG9vZEVmZmVjdCh0LGUpKX0sb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucHV0KG5ldyBTVkcuT2Zmc2V0RWZmZWN0KHQsZSkpfSxpbWFnZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wdXQobmV3IFNWRy5JbWFnZUVmZmVjdCh0KSl9LG1lcmdlOmZ1bmN0aW9uKCl7dmFyIHQ9W3ZvaWQgMF07Zm9yKHZhciBlIGluIGFyZ3VtZW50cyl0LnB1c2goYXJndW1lbnRzW2VdKTtyZXR1cm4gdGhpcy5wdXQobmV3KFNWRy5NZXJnZUVmZmVjdC5iaW5kLmFwcGx5KFNWRy5NZXJnZUVmZmVjdCx0KSkpfSxnYXVzc2lhbkJsdXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wdXQobmV3IFNWRy5HYXVzc2lhbkJsdXJFZmZlY3QodCxlKSl9LG1vcnBob2xvZ3k6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wdXQobmV3IFNWRy5Nb3JwaG9sb2d5RWZmZWN0KHQsZSkpfSxkaWZmdXNlTGlnaHRpbmc6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLnB1dChuZXcgU1ZHLkRpZmZ1c2VMaWdodGluZ0VmZmVjdCh0LGUsaSkpfSxkaXNwbGFjZW1lbnRNYXA6ZnVuY3Rpb24odCxlLGksYSxzKXtyZXR1cm4gdGhpcy5wdXQobmV3IFNWRy5EaXNwbGFjZW1lbnRNYXBFZmZlY3QodCxlLGksYSxzKSl9LHNwZWN1bGFyTGlnaHRpbmc6ZnVuY3Rpb24odCxlLGksYSl7cmV0dXJuIHRoaXMucHV0KG5ldyBTVkcuU3BlY3VsYXJMaWdodGluZ0VmZmVjdCh0LGUsaSxhKSl9LHRpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXQobmV3IFNWRy5UaWxlRWZmZWN0KX0sdHVyYnVsZW5jZTpmdW5jdGlvbih0LGUsaSxhLHMpe3JldHVybiB0aGlzLnB1dChuZXcgU1ZHLlR1cmJ1bGVuY2VFZmZlY3QodCxlLGksYSxzKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJ1cmwoI1wiK3RoaXMuYXR0cihcImlkXCIpK1wiKVwifX19KSxTVkcuZXh0ZW5kKFNWRy5EZWZzLHtmaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wdXQobmV3IFNWRy5GaWx0ZXIpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQuY2FsbChlLGUpLGV9fSksU1ZHLmV4dGVuZChTVkcuQ29udGFpbmVyLHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVmcygpLmZpbHRlcih0KX19KSxTVkcuZXh0ZW5kKFNWRy5FbGVtZW50LFNWRy5HLFNWRy5OZXN0ZWQse2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5maWx0ZXJlcj10IGluc3RhbmNlb2YgU1ZHLkVsZW1lbnQ/dDp0aGlzLmRvYygpLmZpbHRlcih0KSx0aGlzLmRvYygpJiZ0aGlzLmZpbHRlcmVyLmRvYygpIT09dGhpcy5kb2MoKSYmdGhpcy5kb2MoKS5kZWZzKCkuYWRkKHRoaXMuZmlsdGVyZXIpLHRoaXMuYXR0cihcImZpbHRlclwiLHRoaXMuZmlsdGVyZXIpLHRoaXMuZmlsdGVyZXJ9LHVuZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpbHRlcmVyJiYhMD09PXQmJnRoaXMuZmlsdGVyZXIucmVtb3ZlKCksZGVsZXRlIHRoaXMuZmlsdGVyZXIsdGhpcy5hdHRyKFwiZmlsdGVyXCIsbnVsbCl9fSksU1ZHLkVmZmVjdD1TVkcuaW52ZW50KHtjcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9LGluaGVyaXQ6U1ZHLkVsZW1lbnQsZXh0ZW5kOntpbjpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD90aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLnNlbGVjdCgnW3Jlc3VsdD1cIicrdGhpcy5hdHRyKFwiaW5cIikrJ1wiXScpLmdldCgwKXx8dGhpcy5hdHRyKFwiaW5cIik6dGhpcy5hdHRyKFwiaW5cIix0KX0scmVzdWx0OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMuYXR0cihcInJlc3VsdFwiKTp0aGlzLmF0dHIoXCJyZXN1bHRcIix0KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHQoKX19fSksU1ZHLlBhcmVudEVmZmVjdD1TVkcuaW52ZW50KHtjcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9LGluaGVyaXQ6U1ZHLlBhcmVudCxleHRlbmQ6e2luOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkuc2VsZWN0KCdbcmVzdWx0PVwiJyt0aGlzLmF0dHIoXCJpblwiKSsnXCJdJykuZ2V0KDApfHx0aGlzLmF0dHIoXCJpblwiKTp0aGlzLmF0dHIoXCJpblwiLHQpfSxyZXN1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dGhpcy5hdHRyKFwicmVzdWx0XCIpOnRoaXMuYXR0cihcInJlc3VsdFwiLHQpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlc3VsdCgpfX19KTt2YXIgdD17YmxlbmQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wYXJlbnQoKSYmdGhpcy5wYXJlbnQoKS5ibGVuZCh0aGlzLHQsZSl9LGNvbG9yTWF0cml4OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkuY29sb3JNYXRyaXgodCxlKS5pbih0aGlzKX0sY29udm9sdmVNYXRyaXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkuY29udm9sdmVNYXRyaXgodCkuaW4odGhpcyl9LGNvbXBvbmVudFRyYW5zZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLmNvbXBvbmVudFRyYW5zZmVyKHQpLmluKHRoaXMpfSxjb21wb3NpdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wYXJlbnQoKSYmdGhpcy5wYXJlbnQoKS5jb21wb3NpdGUodGhpcyx0LGUpfSxmbG9vZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLmZsb29kKHQsZSl9LG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLm9mZnNldCh0LGUpLmluKHRoaXMpfSxpbWFnZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wYXJlbnQoKSYmdGhpcy5wYXJlbnQoKS5pbWFnZSh0KX0sbWVyZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKSYmdGhpcy5wYXJlbnQoKS5tZXJnZS5hcHBseSh0aGlzLnBhcmVudCgpLFt0aGlzXS5jb25jYXQoYXJndW1lbnRzKSl9LGdhdXNzaWFuQmx1cjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLmdhdXNzaWFuQmx1cih0LGUpLmluKHRoaXMpfSxtb3JwaG9sb2d5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkubW9ycGhvbG9neSh0LGUpLmluKHRoaXMpfSxkaWZmdXNlTGlnaHRpbmc6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLmRpZmZ1c2VMaWdodGluZyh0LGUsaSkuaW4odGhpcyl9LGRpc3BsYWNlbWVudE1hcDpmdW5jdGlvbih0LGUsaSxhKXtyZXR1cm4gdGhpcy5wYXJlbnQoKSYmdGhpcy5wYXJlbnQoKS5kaXNwbGFjZW1lbnRNYXAodGhpcyx0LGUsaSxhKX0sc3BlY3VsYXJMaWdodGluZzpmdW5jdGlvbih0LGUsaSxhKXtyZXR1cm4gdGhpcy5wYXJlbnQoKSYmdGhpcy5wYXJlbnQoKS5zcGVjdWxhckxpZ2h0aW5nKHQsZSxpLGEpLmluKHRoaXMpfSx0aWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkudGlsZSgpLmluKHRoaXMpfSx0dXJidWxlbmNlOmZ1bmN0aW9uKHQsZSxpLGEscyl7cmV0dXJuIHRoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkudHVyYnVsZW5jZSh0LGUsaSxhLHMpLmluKHRoaXMpfX07U1ZHLmV4dGVuZChTVkcuRWZmZWN0LHQpLFNWRy5leHRlbmQoU1ZHLlBhcmVudEVmZmVjdCx0KSxTVkcuQ2hpbGRFZmZlY3Q9U1ZHLmludmVudCh7Y3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfSxpbmhlcml0OlNWRy5FbGVtZW50LGV4dGVuZDp7aW46ZnVuY3Rpb24odCl7dGhpcy5hdHRyKFwiaW5cIix0KX19fSk7dmFyIGU9e2JsZW5kOmZ1bmN0aW9uKHQsZSxpKXt0aGlzLmF0dHIoe2luOnQsaW4yOmUsbW9kZTppfHxcIm5vcm1hbFwifSl9LGNvbG9yTWF0cml4OmZ1bmN0aW9uKHQsZSl7XCJtYXRyaXhcIj09dCYmKGU9cyhlKSksdGhpcy5hdHRyKHt0eXBlOnQsdmFsdWVzOnZvaWQgMD09PWU/bnVsbDplfSl9LGNvbnZvbHZlTWF0cml4OmZ1bmN0aW9uKHQpe3Q9cyh0KSx0aGlzLmF0dHIoe29yZGVyOk1hdGguc3FydCh0LnNwbGl0KFwiIFwiKS5sZW5ndGgpLGtlcm5lbE1hdHJpeDp0fSl9LGNvbXBvc2l0ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy5hdHRyKHtpbjp0LGluMjplLG9wZXJhdG9yOml9KX0sZmxvb2Q6ZnVuY3Rpb24odCxlKXt0aGlzLmF0dHIoXCJmbG9vZC1jb2xvclwiLHQpLG51bGwhPWUmJnRoaXMuYXR0cihcImZsb29kLW9wYWNpdHlcIixlKX0sb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7dGhpcy5hdHRyKHtkeDp0LGR5OmV9KX0saW1hZ2U6ZnVuY3Rpb24odCl7dGhpcy5hdHRyKFwiaHJlZlwiLHQsU1ZHLnhsaW5rKX0sZGlzcGxhY2VtZW50TWFwOmZ1bmN0aW9uKHQsZSxpLGEscyl7dGhpcy5hdHRyKHtpbjp0LGluMjplLHNjYWxlOmkseENoYW5uZWxTZWxlY3RvcjphLHlDaGFubmVsU2VsZWN0b3I6c30pfSxnYXVzc2lhbkJsdXI6ZnVuY3Rpb24odCxlKXtudWxsIT10fHxudWxsIT1lP3RoaXMuYXR0cihcInN0ZERldmlhdGlvblwiLHIoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpOnRoaXMuYXR0cihcInN0ZERldmlhdGlvblwiLFwiMCAwXCIpfSxtb3JwaG9sb2d5OmZ1bmN0aW9uKHQsZSl7dGhpcy5hdHRyKHtvcGVyYXRvcjp0LHJhZGl1czplfSl9LHRpbGU6ZnVuY3Rpb24oKXt9LHR1cmJ1bGVuY2U6ZnVuY3Rpb24odCxlLGksYSxzKXt0aGlzLmF0dHIoe251bU9jdGF2ZXM6ZSxzZWVkOmksc3RpdGNoVGlsZXM6YSxiYXNlRnJlcXVlbmN5OnQsdHlwZTpzfSl9fSxpPXttZXJnZTpmdW5jdGlvbigpe3ZhciB0O2lmKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgU1ZHLlNldCl7dmFyIGU9dGhpczthcmd1bWVudHNbMF0uZWFjaCgoZnVuY3Rpb24odCl7dGhpcyBpbnN0YW5jZW9mIFNWRy5NZXJnZU5vZGU/ZS5wdXQodGhpcyk6KHRoaXMgaW5zdGFuY2VvZiBTVkcuRWZmZWN0fHx0aGlzIGluc3RhbmNlb2YgU1ZHLlBhcmVudEVmZmVjdCkmJmUucHV0KG5ldyBTVkcuTWVyZ2VOb2RlKHRoaXMpKX0pKX1lbHNle3Q9QXJyYXkuaXNBcnJheShhcmd1bWVudHNbMF0pP2FyZ3VtZW50c1swXTphcmd1bWVudHM7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXWluc3RhbmNlb2YgU1ZHLk1lcmdlTm9kZT90aGlzLnB1dCh0W2ldKTp0aGlzLnB1dChuZXcgU1ZHLk1lcmdlTm9kZSh0W2ldKSl9fSxjb21wb25lbnRUcmFuc2ZlcjpmdW5jdGlvbih0KXtpZih0aGlzLnJnYj1uZXcgU1ZHLlNldCxbXCJyXCIsXCJnXCIsXCJiXCIsXCJhXCJdLmZvckVhY2goZnVuY3Rpb24odCl7dGhpc1t0XT1uZXcoU1ZHW1wiRnVuY1wiK3QudG9VcHBlckNhc2UoKV0pKFwiaWRlbnRpdHlcIiksdGhpcy5yZ2IuYWRkKHRoaXNbdF0pLHRoaXMubm9kZS5hcHBlbmRDaGlsZCh0aGlzW3RdLm5vZGUpfS5iaW5kKHRoaXMpKSx0KWZvcih2YXIgZSBpbiB0LnJnYiYmKFtcInJcIixcImdcIixcImJcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzW2VdLmF0dHIodC5yZ2IpfS5iaW5kKHRoaXMpKSxkZWxldGUgdC5yZ2IpLHQpdGhpc1tlXS5hdHRyKHRbZV0pfSxkaWZmdXNlTGlnaHRpbmc6ZnVuY3Rpb24odCxlLGkpe3RoaXMuYXR0cih7c3VyZmFjZVNjYWxlOnQsZGlmZnVzZUNvbnN0YW50OmUsa2VybmVsVW5pdExlbmd0aDppfSl9LHNwZWN1bGFyTGlnaHRpbmc6ZnVuY3Rpb24odCxlLGksYSl7dGhpcy5hdHRyKHtzdXJmYWNlU2NhbGU6dCxkaWZmdXNlQ29uc3RhbnQ6ZSxzcGVjdWxhckV4cG9uZW50Omksa2VybmVsVW5pdExlbmd0aDphfSl9fSxhPXtkaXN0YW50TGlnaHQ6ZnVuY3Rpb24odCxlKXt0aGlzLmF0dHIoe2F6aW11dGg6dCxlbGV2YXRpb246ZX0pfSxwb2ludExpZ2h0OmZ1bmN0aW9uKHQsZSxpKXt0aGlzLmF0dHIoe3g6dCx5OmUsejppfSl9LHNwb3RMaWdodDpmdW5jdGlvbih0LGUsaSxhLHMscil7dGhpcy5hdHRyKHt4OnQseTplLHo6aSxwb2ludHNBdFg6YSxwb2ludHNBdFk6cyxwb2ludHNBdFo6cn0pfSxtZXJnZU5vZGU6ZnVuY3Rpb24odCl7dGhpcy5hdHRyKFwiaW5cIix0KX19O2Z1bmN0aW9uIHModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJih0PW5ldyBTVkcuQXJyYXkodCkpLHQudG9TdHJpbmcoKS5yZXBsYWNlKC9eXFxzKy8sXCJcIikucmVwbGFjZSgvXFxzKyQvLFwiXCIpLnJlcGxhY2UoL1xccysvZyxcIiBcIil9ZnVuY3Rpb24gcih0KXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9MCxpPXQubGVuZ3RoLGE9W107ZTxpO2UrKylhLnB1c2godFtlXSk7cmV0dXJuIGEuam9pbihcIiBcIil9ZnVuY3Rpb24gbygpe3ZhciB0PWZ1bmN0aW9uKCl7fTtmb3IodmFyIGUgaW5cImZ1bmN0aW9uXCI9PXR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSYmKHQ9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0sQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGFyZ3VtZW50cyxhcmd1bWVudHMubGVuZ3RoLTEsMSkpLGFyZ3VtZW50cylmb3IodmFyIGkgaW4gYXJndW1lbnRzW2VdKXQoYXJndW1lbnRzW2VdW2ldLGksYXJndW1lbnRzW2VdKX1bXCJyXCIsXCJnXCIsXCJiXCIsXCJhXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FbXCJGdW5jXCIrdC50b1VwcGVyQ2FzZSgpXT1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5hdHRyKFwidHlwZVwiLHQpLHQpe2Nhc2VcInRhYmxlXCI6dGhpcy5hdHRyKFwidGFibGVWYWx1ZXNcIixhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2VcImxpbmVhclwiOnRoaXMuYXR0cihcInNsb3BlXCIsYXJndW1lbnRzWzFdKSx0aGlzLmF0dHIoXCJpbnRlcmNlcHRcIixhcmd1bWVudHNbMl0pO2JyZWFrO2Nhc2VcImdhbW1hXCI6dGhpcy5hdHRyKFwiYW1wbGl0dWRlXCIsYXJndW1lbnRzWzFdKSx0aGlzLmF0dHIoXCJleHBvbmVudFwiLGFyZ3VtZW50c1syXSksdGhpcy5hdHRyKFwib2Zmc2V0XCIsYXJndW1lbnRzWzJdKX19fSkpLG8oZSwoZnVuY3Rpb24odCxlKXt2YXIgaT1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7U1ZHW2krXCJFZmZlY3RcIl09U1ZHLmludmVudCh7Y3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsU1ZHLmNyZWF0ZShcImZlXCIraSkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMucmVzdWx0KHRoaXMuYXR0cihcImlkXCIpK1wiT3V0XCIpfSxpbmhlcml0OlNWRy5FZmZlY3QsZXh0ZW5kOnt9fSl9KSksbyhpLChmdW5jdGlvbih0LGUpe3ZhciBpPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtTVkdbaStcIkVmZmVjdFwiXT1TVkcuaW52ZW50KHtjcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxTVkcuY3JlYXRlKFwiZmVcIitpKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5yZXN1bHQodGhpcy5hdHRyKFwiaWRcIikrXCJPdXRcIil9LGluaGVyaXQ6U1ZHLlBhcmVudEVmZmVjdCxleHRlbmQ6e319KX0pKSxvKGEsKGZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO1NWR1tpXT1TVkcuaW52ZW50KHtjcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxTVkcuY3JlYXRlKFwiZmVcIitpKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGluaGVyaXQ6U1ZHLkNoaWxkRWZmZWN0LGV4dGVuZDp7fX0pfSkpLFNWRy5leHRlbmQoU1ZHLk1lcmdlRWZmZWN0LHtpbjpmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFNWRy5NZXJnZU5vZGU/dGhpcy5hZGQodCwwKTp0aGlzLmFkZChuZXcgU1ZHLk1lcmdlTm9kZSh0KSwwKSx0aGlzfX0pLFNWRy5leHRlbmQoU1ZHLkNvbXBvc2l0ZUVmZmVjdCxTVkcuQmxlbmRFZmZlY3QsU1ZHLkRpc3BsYWNlbWVudE1hcEVmZmVjdCx7aW4yOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3RoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkuc2VsZWN0KCdbcmVzdWx0PVwiJyt0aGlzLmF0dHIoXCJpbjJcIikrJ1wiXScpLmdldCgwKXx8dGhpcy5hdHRyKFwiaW4yXCIpOnRoaXMuYXR0cihcImluMlwiLHQpfX0pLFNWRy5maWx0ZXI9e3NlcGlhdG9uZTpbLjM0MywuNjY5LC4xMTksMCwwLC4yNDksLjYyNiwuMTMsMCwwLC4xNzIsLjMzNCwuMTExLDAsMCwwLDAsMCwxLDBdfX0uY2FsbCh2b2lkIDApLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LHMscixvLG4sbCxoKXtmb3IodmFyIGM9dC5zbGljZShzLHJ8fGgpLGQ9by5zbGljZShuLGx8fGgpLGc9MCx1PXtwb3M6WzAsMF0sc3RhcnQ6WzAsMF19LGY9e3BvczpbMCwwXSxzdGFydDpbMCwwXX07Oyl7aWYoY1tnXT1lLmNhbGwodSxjW2ddKSxkW2ddPWUuY2FsbChmLGRbZ10pLGNbZ11bMF0hPWRbZ11bMF18fFwiTVwiPT1jW2ddWzBdfHxcIkFcIj09Y1tnXVswXSYmKGNbZ11bNF0hPWRbZ11bNF18fGNbZ11bNV0hPWRbZ11bNV0pPyhBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGMsW2csMV0uY29uY2F0KGEuY2FsbCh1LGNbZ10pKSksQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShkLFtnLDFdLmNvbmNhdChhLmNhbGwoZixkW2ddKSkpKTooY1tnXT1pLmNhbGwodSxjW2ddKSxkW2ddPWkuY2FsbChmLGRbZ10pKSwrK2c9PWMubGVuZ3RoJiZnPT1kLmxlbmd0aClicmVhaztnPT1jLmxlbmd0aCYmYy5wdXNoKFtcIkNcIix1LnBvc1swXSx1LnBvc1sxXSx1LnBvc1swXSx1LnBvc1sxXSx1LnBvc1swXSx1LnBvc1sxXV0pLGc9PWQubGVuZ3RoJiZkLnB1c2goW1wiQ1wiLGYucG9zWzBdLGYucG9zWzFdLGYucG9zWzBdLGYucG9zWzFdLGYucG9zWzBdLGYucG9zWzFdXSl9cmV0dXJue3N0YXJ0OmMsZGVzdDpkfX1mdW5jdGlvbiBlKHQpe3N3aXRjaCh0WzBdKXtjYXNlXCJ6XCI6Y2FzZVwiWlwiOnRbMF09XCJMXCIsdFsxXT10aGlzLnN0YXJ0WzBdLHRbMl09dGhpcy5zdGFydFsxXTticmVhaztjYXNlXCJIXCI6dFswXT1cIkxcIix0WzJdPXRoaXMucG9zWzFdO2JyZWFrO2Nhc2VcIlZcIjp0WzBdPVwiTFwiLHRbMl09dFsxXSx0WzFdPXRoaXMucG9zWzBdO2JyZWFrO2Nhc2VcIlRcIjp0WzBdPVwiUVwiLHRbM109dFsxXSx0WzRdPXRbMl0sdFsxXT10aGlzLnJlZmxlY3Rpb25bMV0sdFsyXT10aGlzLnJlZmxlY3Rpb25bMF07YnJlYWs7Y2FzZVwiU1wiOnRbMF09XCJDXCIsdFs2XT10WzRdLHRbNV09dFszXSx0WzRdPXRbMl0sdFszXT10WzFdLHRbMl09dGhpcy5yZWZsZWN0aW9uWzFdLHRbMV09dGhpcy5yZWZsZWN0aW9uWzBdfXJldHVybiB0fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIHRoaXMucG9zPVt0W2UtMl0sdFtlLTFdXSwtMSE9XCJTQ1FUXCIuaW5kZXhPZih0WzBdKSYmKHRoaXMucmVmbGVjdGlvbj1bMip0aGlzLnBvc1swXS10W2UtNF0sMip0aGlzLnBvc1sxXS10W2UtM11dKSx0fWZ1bmN0aW9uIGEodCl7dmFyIGU9W3RdO3N3aXRjaCh0WzBdKXtjYXNlXCJNXCI6cmV0dXJuIHRoaXMucG9zPXRoaXMuc3RhcnQ9W3RbMV0sdFsyXV0sZTtjYXNlXCJMXCI6dFs1XT10WzNdPXRbMV0sdFs2XT10WzRdPXRbMl0sdFsxXT10aGlzLnBvc1swXSx0WzJdPXRoaXMucG9zWzFdO2JyZWFrO2Nhc2VcIlFcIjp0WzZdPXRbNF0sdFs1XT10WzNdLHRbNF09MSp0WzRdLzMrMip0WzJdLzMsdFszXT0xKnRbM10vMysyKnRbMV0vMyx0WzJdPTEqdGhpcy5wb3NbMV0vMysyKnRbMl0vMyx0WzFdPTEqdGhpcy5wb3NbMF0vMysyKnRbMV0vMzticmVhaztjYXNlXCJBXCI6ZT1mdW5jdGlvbih0LGUpe3ZhciBpLGEscyxyLG8sbixsLGgsYyxkLGcsdSxmLHAseCxiLHYsbSx5LHcsayxBLFMsQyxMLFAsVD1NYXRoLmFicyhlWzFdKSxNPU1hdGguYWJzKGVbMl0pLEk9ZVszXSUzNjAsWD1lWzRdLHo9ZVs1XSxFPWVbNl0sWT1lWzddLEY9bmV3IFNWRy5Qb2ludCh0KSxSPW5ldyBTVkcuUG9pbnQoRSxZKSxEPVtdO2lmKDA9PT1UfHwwPT09TXx8Ri54PT09Ui54JiZGLnk9PT1SLnkpcmV0dXJuW1tcIkNcIixGLngsRi55LFIueCxSLnksUi54LFIueV1dO2k9bmV3IFNWRy5Qb2ludCgoRi54LVIueCkvMiwoRi55LVIueSkvMikudHJhbnNmb3JtKChuZXcgU1ZHLk1hdHJpeCkucm90YXRlKEkpKSwoYT1pLngqaS54LyhUKlQpK2kueSppLnkvKE0qTSkpPjEmJihUKj1hPU1hdGguc3FydChhKSxNKj1hKTtzPShuZXcgU1ZHLk1hdHJpeCkucm90YXRlKEkpLnNjYWxlKDEvVCwxL00pLnJvdGF0ZSgtSSksRj1GLnRyYW5zZm9ybShzKSxSPVIudHJhbnNmb3JtKHMpLHI9W1IueC1GLngsUi55LUYueV0sbj1yWzBdKnJbMF0rclsxXSpyWzFdLG89TWF0aC5zcXJ0KG4pLHJbMF0vPW8sclsxXS89byxsPW48ND9NYXRoLnNxcnQoMS1uLzQpOjAsWD09PXomJihsKj0tMSk7aD1uZXcgU1ZHLlBvaW50KChSLngrRi54KS8yK2wqLXJbMV0sKFIueStGLnkpLzIrbCpyWzBdKSxjPW5ldyBTVkcuUG9pbnQoRi54LWgueCxGLnktaC55KSxkPW5ldyBTVkcuUG9pbnQoUi54LWgueCxSLnktaC55KSxnPU1hdGguYWNvcyhjLngvTWF0aC5zcXJ0KGMueCpjLngrYy55KmMueSkpLGMueTwwJiYoZyo9LTEpO3U9TWF0aC5hY29zKGQueC9NYXRoLnNxcnQoZC54KmQueCtkLnkqZC55KSksZC55PDAmJih1Kj0tMSk7eiYmZz51JiYodSs9MipNYXRoLlBJKTsheiYmZzx1JiYodS09MipNYXRoLlBJKTtmb3IocD1NYXRoLmNlaWwoMipNYXRoLmFicyhnLXUpL01hdGguUEkpLGI9W10sdj1nLGY9KHUtZykvcCx4PTQqTWF0aC50YW4oZi80KS8zLGs9MDtrPD1wO2srKyl5PU1hdGguY29zKHYpLG09TWF0aC5zaW4odiksdz1uZXcgU1ZHLlBvaW50KGgueCt5LGgueSttKSxiW2tdPVtuZXcgU1ZHLlBvaW50KHcueCt4Km0sdy55LXgqeSksdyxuZXcgU1ZHLlBvaW50KHcueC14Km0sdy55K3gqeSldLHYrPWY7Zm9yKGJbMF1bMF09YlswXVsxXS5jbG9uZSgpLGJbYi5sZW5ndGgtMV1bMl09YltiLmxlbmd0aC0xXVsxXS5jbG9uZSgpLHM9KG5ldyBTVkcuTWF0cml4KS5yb3RhdGUoSSkuc2NhbGUoVCxNKS5yb3RhdGUoLUkpLGs9MCxBPWIubGVuZ3RoO2s8QTtrKyspYltrXVswXT1iW2tdWzBdLnRyYW5zZm9ybShzKSxiW2tdWzFdPWJba11bMV0udHJhbnNmb3JtKHMpLGJba11bMl09YltrXVsyXS50cmFuc2Zvcm0ocyk7Zm9yKGs9MSxBPWIubGVuZ3RoO2s8QTtrKyspUz0odz1iW2stMV1bMl0pLngsQz13LnksTD0odz1iW2tdWzBdKS54LFA9dy55LEU9KHc9YltrXVsxXSkueCxZPXcueSxELnB1c2goW1wiQ1wiLFMsQyxMLFAsRSxZXSk7cmV0dXJuIER9KHRoaXMucG9zLHQpLHQ9ZVswXX1yZXR1cm4gdFswXT1cIkNcIix0aGlzLnBvcz1bdFs1XSx0WzZdXSx0aGlzLnJlZmxlY3Rpb249WzIqdFs1XS10WzNdLDIqdFs2XS10WzRdXSxlfWZ1bmN0aW9uIHModCxlKXtpZighMT09PWUpcmV0dXJuITE7Zm9yKHZhciBpPWUsYT10Lmxlbmd0aDtpPGE7KytpKWlmKFwiTVwiPT10W2ldWzBdKXJldHVybiBpO3JldHVybiExfVNWRy5leHRlbmQoU1ZHLlBhdGhBcnJheSx7bW9ycGg6ZnVuY3Rpb24oZSl7Zm9yKHZhciBpPXRoaXMudmFsdWUsYT10aGlzLnBhcnNlKGUpLHI9MCxvPTAsbj0hMSxsPSExOyExIT09cnx8ITEhPT1vOyl7dmFyIGg7bj1zKGksITEhPT1yJiZyKzEpLGw9cyhhLCExIT09byYmbysxKSwhMT09PXImJihyPTA9PShoPW5ldyBTVkcuUGF0aEFycmF5KGMuc3RhcnQpLmJib3goKSkuaGVpZ2h0fHwwPT1oLndpZHRoP2kucHVzaChpWzBdKS0xOmkucHVzaChbXCJNXCIsaC54K2gud2lkdGgvMixoLnkraC5oZWlnaHQvMl0pLTEpLCExPT09byYmKG89MD09KGg9bmV3IFNWRy5QYXRoQXJyYXkoYy5kZXN0KS5iYm94KCkpLmhlaWdodHx8MD09aC53aWR0aD9hLnB1c2goYVswXSktMTphLnB1c2goW1wiTVwiLGgueCtoLndpZHRoLzIsaC55K2guaGVpZ2h0LzJdKS0xKTt2YXIgYz10KGkscixuLGEsbyxsKTtpPWkuc2xpY2UoMCxyKS5jb25jYXQoYy5zdGFydCwhMT09PW4/W106aS5zbGljZShuKSksYT1hLnNsaWNlKDAsbykuY29uY2F0KGMuZGVzdCwhMT09PWw/W106YS5zbGljZShsKSkscj0hMSE9PW4mJnIrYy5zdGFydC5sZW5ndGgsbz0hMSE9PWwmJm8rYy5kZXN0Lmxlbmd0aH1yZXR1cm4gdGhpcy52YWx1ZT1pLHRoaXMuZGVzdGluYXRpb249bmV3IFNWRy5QYXRoQXJyYXksdGhpcy5kZXN0aW5hdGlvbi52YWx1ZT1hLHRoaXN9fSl9KCksXG4vKiEgc3ZnLmRyYWdnYWJsZS5qcyAtIHYyLjIuMiAtIDIwMTktMDEtMDhcbiAgKiBodHRwczovL2dpdGh1Yi5jb20vc3ZnZG90anMvc3ZnLmRyYWdnYWJsZS5qc1xuICAqIENvcHlyaWdodCAoYykgMjAxOSBXb3V0IEZpZXJlbnM7IExpY2Vuc2VkIE1JVCAqL1xuZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3QucmVtZW1iZXIoXCJfZHJhZ2dhYmxlXCIsdGhpcyksdGhpcy5lbD10fXQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO3RoaXMuY29uc3RyYWludD10LHRoaXMudmFsdWU9ZSx0aGlzLmVsLm9uKFwibW91c2Vkb3duLmRyYWdcIiwoZnVuY3Rpb24odCl7aS5zdGFydCh0KX0pKSx0aGlzLmVsLm9uKFwidG91Y2hzdGFydC5kcmFnXCIsKGZ1bmN0aW9uKHQpe2kuc3RhcnQodCl9KSl9LHQucHJvdG90eXBlLnRyYW5zZm9ybVBvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIGk9KHQ9dHx8d2luZG93LmV2ZW50KS5jaGFuZ2VkVG91Y2hlcyYmdC5jaGFuZ2VkVG91Y2hlc1swXXx8dDtyZXR1cm4gdGhpcy5wLng9aS5jbGllbnRYLShlfHwwKSx0aGlzLnAueT1pLmNsaWVudFksdGhpcy5wLm1hdHJpeFRyYW5zZm9ybSh0aGlzLm0pfSx0LnByb3RvdHlwZS5nZXRCQm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbC5iYm94KCk7cmV0dXJuIHRoaXMuZWwgaW5zdGFuY2VvZiBTVkcuTmVzdGVkJiYodD10aGlzLmVsLnJib3goKSksKHRoaXMuZWwgaW5zdGFuY2VvZiBTVkcuR3x8dGhpcy5lbCBpbnN0YW5jZW9mIFNWRy5Vc2V8fHRoaXMuZWwgaW5zdGFuY2VvZiBTVkcuTmVzdGVkKSYmKHQueD10aGlzLmVsLngoKSx0Lnk9dGhpcy5lbC55KCkpLHR9LHQucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKHQpe2lmKFwiY2xpY2tcIiE9dC50eXBlJiZcIm1vdXNlZG93blwiIT10LnR5cGUmJlwibW91c2Vtb3ZlXCIhPXQudHlwZXx8MT09KHQud2hpY2h8fHQuYnV0dG9ucykpe3ZhciBlPXRoaXM7aWYodGhpcy5lbC5maXJlKFwiYmVmb3JlZHJhZ1wiLHtldmVudDp0LGhhbmRsZXI6dGhpc30pLCF0aGlzLmVsLmV2ZW50KCkuZGVmYXVsdFByZXZlbnRlZCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wYXJlbnQ9dGhpcy5wYXJlbnR8fHRoaXMuZWwucGFyZW50KFNWRy5OZXN0ZWQpfHx0aGlzLmVsLnBhcmVudChTVkcuRG9jKSx0aGlzLnA9dGhpcy5wYXJlbnQubm9kZS5jcmVhdGVTVkdQb2ludCgpLHRoaXMubT10aGlzLmVsLm5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpO3ZhciBpLGE9dGhpcy5nZXRCQm94KCk7aWYodGhpcy5lbCBpbnN0YW5jZW9mIFNWRy5UZXh0KXN3aXRjaChpPXRoaXMuZWwubm9kZS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSx0aGlzLmVsLmF0dHIoXCJ0ZXh0LWFuY2hvclwiKSl7Y2FzZVwibWlkZGxlXCI6aS89MjticmVhaztjYXNlXCJzdGFydFwiOmk9MH10aGlzLnN0YXJ0UG9pbnRzPXtwb2ludDp0aGlzLnRyYW5zZm9ybVBvaW50KHQsaSksYm94OmEsdHJhbnNmb3JtOnRoaXMuZWwudHJhbnNmb3JtKCl9LFNWRy5vbih3aW5kb3csXCJtb3VzZW1vdmUuZHJhZ1wiLChmdW5jdGlvbih0KXtlLmRyYWcodCl9KSksU1ZHLm9uKHdpbmRvdyxcInRvdWNobW92ZS5kcmFnXCIsKGZ1bmN0aW9uKHQpe2UuZHJhZyh0KX0pKSxTVkcub24od2luZG93LFwibW91c2V1cC5kcmFnXCIsKGZ1bmN0aW9uKHQpe2UuZW5kKHQpfSkpLFNWRy5vbih3aW5kb3csXCJ0b3VjaGVuZC5kcmFnXCIsKGZ1bmN0aW9uKHQpe2UuZW5kKHQpfSkpLHRoaXMuZWwuZmlyZShcImRyYWdzdGFydFwiLHtldmVudDp0LHA6dGhpcy5zdGFydFBvaW50cy5wb2ludCxtOnRoaXMubSxoYW5kbGVyOnRoaXN9KX19fSx0LnByb3RvdHlwZS5kcmFnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0QkJveCgpLGk9dGhpcy50cmFuc2Zvcm1Qb2ludCh0KSxhPXRoaXMuc3RhcnRQb2ludHMuYm94LngraS54LXRoaXMuc3RhcnRQb2ludHMucG9pbnQueCxzPXRoaXMuc3RhcnRQb2ludHMuYm94LnkraS55LXRoaXMuc3RhcnRQb2ludHMucG9pbnQueSxyPXRoaXMuY29uc3RyYWludCxvPWkueC10aGlzLnN0YXJ0UG9pbnRzLnBvaW50Lngsbj1pLnktdGhpcy5zdGFydFBvaW50cy5wb2ludC55O2lmKHRoaXMuZWwuZmlyZShcImRyYWdtb3ZlXCIse2V2ZW50OnQscDppLG06dGhpcy5tLGhhbmRsZXI6dGhpc30pLHRoaXMuZWwuZXZlbnQoKS5kZWZhdWx0UHJldmVudGVkKXJldHVybiBpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpe3ZhciBsPXIuY2FsbCh0aGlzLmVsLGEscyx0aGlzLm0pO1wiYm9vbGVhblwiPT10eXBlb2YgbCYmKGw9e3g6bCx5Omx9KSwhMD09PWwueD90aGlzLmVsLngoYSk6ITEhPT1sLngmJnRoaXMuZWwueChsLngpLCEwPT09bC55P3RoaXMuZWwueShzKTohMSE9PWwueSYmdGhpcy5lbC55KGwueSl9ZWxzZVwib2JqZWN0XCI9PXR5cGVvZiByJiYobnVsbCE9ci5taW5YJiZhPHIubWluWD9vPShhPXIubWluWCktdGhpcy5zdGFydFBvaW50cy5ib3gueDpudWxsIT1yLm1heFgmJmE+ci5tYXhYLWUud2lkdGgmJihvPShhPXIubWF4WC1lLndpZHRoKS10aGlzLnN0YXJ0UG9pbnRzLmJveC54KSxudWxsIT1yLm1pblkmJnM8ci5taW5ZP249KHM9ci5taW5ZKS10aGlzLnN0YXJ0UG9pbnRzLmJveC55Om51bGwhPXIubWF4WSYmcz5yLm1heFktZS5oZWlnaHQmJihuPShzPXIubWF4WS1lLmhlaWdodCktdGhpcy5zdGFydFBvaW50cy5ib3gueSksbnVsbCE9ci5zbmFwVG9HcmlkJiYoYS09YSVyLnNuYXBUb0dyaWQscy09cyVyLnNuYXBUb0dyaWQsby09byVyLnNuYXBUb0dyaWQsbi09biVyLnNuYXBUb0dyaWQpLHRoaXMuZWwgaW5zdGFuY2VvZiBTVkcuRz90aGlzLmVsLm1hdHJpeCh0aGlzLnN0YXJ0UG9pbnRzLnRyYW5zZm9ybSkudHJhbnNmb3JtKHt4Om8seTpufSwhMCk6dGhpcy5lbC5tb3ZlKGEscykpO3JldHVybiBpfSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kcmFnKHQpO3RoaXMuZWwuZmlyZShcImRyYWdlbmRcIix7ZXZlbnQ6dCxwOmUsbTp0aGlzLm0saGFuZGxlcjp0aGlzfSksU1ZHLm9mZih3aW5kb3csXCJtb3VzZW1vdmUuZHJhZ1wiKSxTVkcub2ZmKHdpbmRvdyxcInRvdWNobW92ZS5kcmFnXCIpLFNWRy5vZmYod2luZG93LFwibW91c2V1cC5kcmFnXCIpLFNWRy5vZmYod2luZG93LFwidG91Y2hlbmQuZHJhZ1wiKX0sU1ZHLmV4dGVuZChTVkcuRWxlbWVudCx7ZHJhZ2dhYmxlOmZ1bmN0aW9uKGUsaSl7XCJmdW5jdGlvblwiIT10eXBlb2YgZSYmXCJvYmplY3RcIiE9dHlwZW9mIGV8fChpPWUsZT0hMCk7dmFyIGE9dGhpcy5yZW1lbWJlcihcIl9kcmFnZ2FibGVcIil8fG5ldyB0KHRoaXMpO3JldHVybihlPXZvaWQgMD09PWV8fGUpP2EuaW5pdChpfHx7fSxlKToodGhpcy5vZmYoXCJtb3VzZWRvd24uZHJhZ1wiKSx0aGlzLm9mZihcInRvdWNoc3RhcnQuZHJhZ1wiKSksdGhpc319KX0uY2FsbCh2b2lkIDApLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmVsPXQsdC5yZW1lbWJlcihcIl9zZWxlY3RIYW5kbGVyXCIsdGhpcyksdGhpcy5wb2ludFNlbGVjdGlvbj17aXNTZWxlY3RlZDohMX0sdGhpcy5yZWN0U2VsZWN0aW9uPXtpc1NlbGVjdGVkOiExfSx0aGlzLnBvaW50c0xpc3Q9e2x0OlswLDBdLHJ0OltcIndpZHRoXCIsMF0scmI6W1wid2lkdGhcIixcImhlaWdodFwiXSxsYjpbMCxcImhlaWdodFwiXSx0OltcIndpZHRoXCIsMF0scjpbXCJ3aWR0aFwiLFwiaGVpZ2h0XCJdLGI6W1wid2lkdGhcIixcImhlaWdodFwiXSxsOlswLFwiaGVpZ2h0XCJdfSx0aGlzLnBvaW50Q29vcmQ9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPVwic3RyaW5nXCIhPXR5cGVvZiB0P3Q6ZVt0XTtyZXR1cm4gaT9hLzI6YX0sdGhpcy5wb2ludENvb3Jkcz1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMucG9pbnRzTGlzdFt0XTtyZXR1cm57eDp0aGlzLnBvaW50Q29vcmQoaVswXSxlLFwidFwiPT09dHx8XCJiXCI9PT10KSx5OnRoaXMucG9pbnRDb29yZChpWzFdLGUsXCJyXCI9PT10fHxcImxcIj09PXQpfX19dC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuZWwuYmJveCgpO3RoaXMub3B0aW9ucz17fTt2YXIgYT10aGlzLmVsLnNlbGVjdGl6ZS5kZWZhdWx0cy5wb2ludHM7Zm9yKHZhciBzIGluIHRoaXMuZWwuc2VsZWN0aXplLmRlZmF1bHRzKXRoaXMub3B0aW9uc1tzXT10aGlzLmVsLnNlbGVjdGl6ZS5kZWZhdWx0c1tzXSx2b2lkIDAhPT1lW3NdJiYodGhpcy5vcHRpb25zW3NdPWVbc10pO3ZhciByPVtcInBvaW50c1wiLFwicG9pbnRzRXhjbHVkZVwiXTtmb3IodmFyIHMgaW4gcil7dmFyIG89dGhpcy5vcHRpb25zW3Jbc11dO1wic3RyaW5nXCI9PXR5cGVvZiBvP289by5sZW5ndGg+MD9vLnNwbGl0KC9cXHMqLFxccyovaSk6W106XCJib29sZWFuXCI9PXR5cGVvZiBvJiZcInBvaW50c1wiPT09cltzXSYmKG89bz9hOltdKSx0aGlzLm9wdGlvbnNbcltzXV09b310aGlzLm9wdGlvbnMucG9pbnRzPVthLHRoaXMub3B0aW9ucy5wb2ludHNdLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmluZGV4T2YodCk+LTF9KSl9KSksdGhpcy5vcHRpb25zLnBvaW50cz1bdGhpcy5vcHRpb25zLnBvaW50cyx0aGlzLm9wdGlvbnMucG9pbnRzRXhjbHVkZV0ucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5kZXhPZih0KTwwfSkpfSkpLHRoaXMucGFyZW50PXRoaXMuZWwucGFyZW50KCksdGhpcy5uZXN0ZWQ9dGhpcy5uZXN0ZWR8fHRoaXMucGFyZW50Lmdyb3VwKCksdGhpcy5uZXN0ZWQubWF0cml4KG5ldyBTVkcuTWF0cml4KHRoaXMuZWwpLnRyYW5zbGF0ZShpLngsaS55KSksdGhpcy5vcHRpb25zLmRlZXBTZWxlY3QmJi0xIT09W1wibGluZVwiLFwicG9seWxpbmVcIixcInBvbHlnb25cIl0uaW5kZXhPZih0aGlzLmVsLnR5cGUpP3RoaXMuc2VsZWN0UG9pbnRzKHQpOnRoaXMuc2VsZWN0UmVjdCh0KSx0aGlzLm9ic2VydmUoKSx0aGlzLmNsZWFudXAoKX0sdC5wcm90b3R5cGUuc2VsZWN0UG9pbnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBvaW50U2VsZWN0aW9uLmlzU2VsZWN0ZWQ9dCx0aGlzLnBvaW50U2VsZWN0aW9uLnNldHx8KHRoaXMucG9pbnRTZWxlY3Rpb24uc2V0PXRoaXMucGFyZW50LnNldCgpLHRoaXMuZHJhd1BvaW50cygpKSx0aGlzfSx0LnByb3RvdHlwZS5nZXRQb2ludEFycmF5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbC5iYm94KCk7cmV0dXJuIHRoaXMuZWwuYXJyYXkoKS52YWx1ZU9mKCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bZVswXS10LngsZVsxXS10LnldfSkpfSx0LnByb3RvdHlwZS5kcmF3UG9pbnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT10aGlzLmdldFBvaW50QXJyYXkoKSxpPTAsYT1lLmxlbmd0aDtpPGE7KytpKXt2YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSl7KGk9aXx8d2luZG93LmV2ZW50KS5wcmV2ZW50RGVmYXVsdD9pLnByZXZlbnREZWZhdWx0KCk6aS5yZXR1cm5WYWx1ZT0hMSxpLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBhPWkucGFnZVh8fGkudG91Y2hlc1swXS5wYWdlWCxzPWkucGFnZVl8fGkudG91Y2hlc1swXS5wYWdlWTt0LmVsLmZpcmUoXCJwb2ludFwiLHt4OmEseTpzLGk6ZSxldmVudDppfSl9fShpKSxyPXRoaXMuZHJhd1BvaW50KGVbaV1bMF0sZVtpXVsxXSkuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzUG9pbnRzKS5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuY2xhc3NQb2ludHMrXCJfcG9pbnRcIikub24oXCJ0b3VjaHN0YXJ0XCIscykub24oXCJtb3VzZWRvd25cIixzKTt0aGlzLnBvaW50U2VsZWN0aW9uLnNldC5hZGQocil9fSx0LnByb3RvdHlwZS5kcmF3UG9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLm9wdGlvbnMucG9pbnRUeXBlO3N3aXRjaChpKXtjYXNlXCJjaXJjbGVcIjpyZXR1cm4gdGhpcy5kcmF3Q2lyY2xlKHQsZSk7Y2FzZVwicmVjdFwiOnJldHVybiB0aGlzLmRyYXdSZWN0KHQsZSk7ZGVmYXVsdDppZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBpKXJldHVybiBpLmNhbGwodGhpcyx0LGUpO3Rocm93IG5ldyBFcnJvcihcIlVua25vd24gXCIraStcIiBwb2ludCB0eXBlIVwiKX19LHQucHJvdG90eXBlLmRyYXdDaXJjbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5uZXN0ZWQuY2lyY2xlKHRoaXMub3B0aW9ucy5wb2ludFNpemUpLmNlbnRlcih0LGUpfSx0LnByb3RvdHlwZS5kcmF3UmVjdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm5lc3RlZC5yZWN0KHRoaXMub3B0aW9ucy5wb2ludFNpemUsdGhpcy5vcHRpb25zLnBvaW50U2l6ZSkuY2VudGVyKHQsZSl9LHQucHJvdG90eXBlLnVwZGF0ZVBvaW50U2VsZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQb2ludEFycmF5KCk7dGhpcy5wb2ludFNlbGVjdGlvbi5zZXQuZWFjaCgoZnVuY3Rpb24oZSl7dGhpcy5jeCgpPT09dFtlXVswXSYmdGhpcy5jeSgpPT09dFtlXVsxXXx8dGhpcy5jZW50ZXIodFtlXVswXSx0W2VdWzFdKX0pKX0sdC5wcm90b3R5cGUudXBkYXRlUmVjdFNlbGVjdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmVsLmJib3goKTtpZih0aGlzLnJlY3RTZWxlY3Rpb24uc2V0LmdldCgwKS5hdHRyKHt3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodH0pLHRoaXMub3B0aW9ucy5wb2ludHMubGVuZ3RoJiZ0aGlzLm9wdGlvbnMucG9pbnRzLm1hcCgoZnVuY3Rpb24oaSxhKXt2YXIgcz10LnBvaW50Q29vcmRzKGksZSk7dC5yZWN0U2VsZWN0aW9uLnNldC5nZXQoYSsxKS5jZW50ZXIocy54LHMueSl9KSksdGhpcy5vcHRpb25zLnJvdGF0aW9uUG9pbnQpe3ZhciBpPXRoaXMucmVjdFNlbGVjdGlvbi5zZXQubGVuZ3RoKCk7dGhpcy5yZWN0U2VsZWN0aW9uLnNldC5nZXQoaS0xKS5jZW50ZXIoZS53aWR0aC8yLDIwKX19LHQucHJvdG90eXBlLnNlbGVjdFJlY3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuZWwuYmJveCgpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGkpeyhpPWl8fHdpbmRvdy5ldmVudCkucHJldmVudERlZmF1bHQ/aS5wcmV2ZW50RGVmYXVsdCgpOmkucmV0dXJuVmFsdWU9ITEsaS5zdG9wUHJvcGFnYXRpb24oKTt2YXIgYT1pLnBhZ2VYfHxpLnRvdWNoZXNbMF0ucGFnZVgscz1pLnBhZ2VZfHxpLnRvdWNoZXNbMF0ucGFnZVk7ZS5lbC5maXJlKHQse3g6YSx5OnMsZXZlbnQ6aX0pfX1pZih0aGlzLnJlY3RTZWxlY3Rpb24uaXNTZWxlY3RlZD10LHRoaXMucmVjdFNlbGVjdGlvbi5zZXQ9dGhpcy5yZWN0U2VsZWN0aW9uLnNldHx8dGhpcy5wYXJlbnQuc2V0KCksdGhpcy5yZWN0U2VsZWN0aW9uLnNldC5nZXQoMCl8fHRoaXMucmVjdFNlbGVjdGlvbi5zZXQuYWRkKHRoaXMubmVzdGVkLnJlY3QoaS53aWR0aCxpLmhlaWdodCkuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzUmVjdCkpLHRoaXMub3B0aW9ucy5wb2ludHMubGVuZ3RoJiZ0aGlzLnJlY3RTZWxlY3Rpb24uc2V0Lmxlbmd0aCgpPDIpe3RoaXMub3B0aW9ucy5wb2ludHMubWFwKChmdW5jdGlvbih0LHMpe3ZhciByPWUucG9pbnRDb29yZHModCxpKSxvPWUuZHJhd1BvaW50KHIueCxyLnkpLmF0dHIoXCJjbGFzc1wiLGUub3B0aW9ucy5jbGFzc1BvaW50cytcIl9cIit0KS5vbihcIm1vdXNlZG93blwiLGEodCkpLm9uKFwidG91Y2hzdGFydFwiLGEodCkpO2UucmVjdFNlbGVjdGlvbi5zZXQuYWRkKG8pfSkpLHRoaXMucmVjdFNlbGVjdGlvbi5zZXQuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLmFkZENsYXNzKGUub3B0aW9ucy5jbGFzc1BvaW50cyl9KSl9aWYodGhpcy5vcHRpb25zLnJvdGF0aW9uUG9pbnQmJih0aGlzLm9wdGlvbnMucG9pbnRzJiYhdGhpcy5yZWN0U2VsZWN0aW9uLnNldC5nZXQoOSl8fCF0aGlzLm9wdGlvbnMucG9pbnRzJiYhdGhpcy5yZWN0U2VsZWN0aW9uLnNldC5nZXQoMSkpKXt2YXIgcz1mdW5jdGlvbih0KXsodD10fHx3aW5kb3cuZXZlbnQpLnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGk9dC5wYWdlWHx8dC50b3VjaGVzWzBdLnBhZ2VYLGE9dC5wYWdlWXx8dC50b3VjaGVzWzBdLnBhZ2VZO2UuZWwuZmlyZShcInJvdFwiLHt4OmkseTphLGV2ZW50OnR9KX0scj10aGlzLmRyYXdQb2ludChpLndpZHRoLzIsMjApLmF0dHIoXCJjbGFzc1wiLHRoaXMub3B0aW9ucy5jbGFzc1BvaW50cytcIl9yb3RcIikub24oXCJ0b3VjaHN0YXJ0XCIscykub24oXCJtb3VzZWRvd25cIixzKTt0aGlzLnJlY3RTZWxlY3Rpb24uc2V0LmFkZChyKX19LHQucHJvdG90eXBlLmhhbmRsZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsLmJib3goKTt0aGlzLm5lc3RlZC5tYXRyaXgobmV3IFNWRy5NYXRyaXgodGhpcy5lbCkudHJhbnNsYXRlKHQueCx0LnkpKSx0aGlzLnJlY3RTZWxlY3Rpb24uaXNTZWxlY3RlZCYmdGhpcy51cGRhdGVSZWN0U2VsZWN0aW9uKCksdGhpcy5wb2ludFNlbGVjdGlvbi5pc1NlbGVjdGVkJiZ0aGlzLnVwZGF0ZVBvaW50U2VsZWN0aW9uKCl9LHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKE11dGF0aW9uT2JzZXJ2ZXIpaWYodGhpcy5yZWN0U2VsZWN0aW9uLmlzU2VsZWN0ZWR8fHRoaXMucG9pbnRTZWxlY3Rpb24uaXNTZWxlY3RlZCl0aGlzLm9ic2VydmVySW5zdD10aGlzLm9ic2VydmVySW5zdHx8bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGZ1bmN0aW9uKCl7dC5oYW5kbGVyKCl9KSksdGhpcy5vYnNlcnZlckluc3Qub2JzZXJ2ZSh0aGlzLmVsLm5vZGUse2F0dHJpYnV0ZXM6ITB9KTtlbHNlIHRyeXt0aGlzLm9ic2VydmVySW5zdC5kaXNjb25uZWN0KCksZGVsZXRlIHRoaXMub2JzZXJ2ZXJJbnN0fWNhdGNoKHQpe31lbHNlIHRoaXMuZWwub2ZmKFwiRE9NQXR0ck1vZGlmaWVkLnNlbGVjdFwiKSwodGhpcy5yZWN0U2VsZWN0aW9uLmlzU2VsZWN0ZWR8fHRoaXMucG9pbnRTZWxlY3Rpb24uaXNTZWxlY3RlZCkmJnRoaXMuZWwub24oXCJET01BdHRyTW9kaWZpZWQuc2VsZWN0XCIsKGZ1bmN0aW9uKCl7dC5oYW5kbGVyKCl9KSl9LHQucHJvdG90eXBlLmNsZWFudXA9ZnVuY3Rpb24oKXshdGhpcy5yZWN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQmJnRoaXMucmVjdFNlbGVjdGlvbi5zZXQmJih0aGlzLnJlY3RTZWxlY3Rpb24uc2V0LmVhY2goKGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmUoKX0pKSx0aGlzLnJlY3RTZWxlY3Rpb24uc2V0LmNsZWFyKCksZGVsZXRlIHRoaXMucmVjdFNlbGVjdGlvbi5zZXQpLCF0aGlzLnBvaW50U2VsZWN0aW9uLmlzU2VsZWN0ZWQmJnRoaXMucG9pbnRTZWxlY3Rpb24uc2V0JiYodGhpcy5wb2ludFNlbGVjdGlvbi5zZXQuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLnJlbW92ZSgpfSkpLHRoaXMucG9pbnRTZWxlY3Rpb24uc2V0LmNsZWFyKCksZGVsZXRlIHRoaXMucG9pbnRTZWxlY3Rpb24uc2V0KSx0aGlzLnBvaW50U2VsZWN0aW9uLmlzU2VsZWN0ZWR8fHRoaXMucmVjdFNlbGVjdGlvbi5pc1NlbGVjdGVkfHwodGhpcy5uZXN0ZWQucmVtb3ZlKCksZGVsZXRlIHRoaXMubmVzdGVkKX0sU1ZHLmV4dGVuZChTVkcuRWxlbWVudCx7c2VsZWN0aXplOmZ1bmN0aW9uKGUsaSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJihpPWUsZT0hMCksKHRoaXMucmVtZW1iZXIoXCJfc2VsZWN0SGFuZGxlclwiKXx8bmV3IHQodGhpcykpLmluaXQodm9pZCAwPT09ZXx8ZSxpfHx7fSksdGhpc319KSxTVkcuRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0aXplLmRlZmF1bHRzPXtwb2ludHM6W1wibHRcIixcInJ0XCIsXCJyYlwiLFwibGJcIixcInRcIixcInJcIixcImJcIixcImxcIl0scG9pbnRzRXhjbHVkZTpbXSxjbGFzc1JlY3Q6XCJzdmdfc2VsZWN0X2JvdW5kaW5nUmVjdFwiLGNsYXNzUG9pbnRzOlwic3ZnX3NlbGVjdF9wb2ludHNcIixwb2ludFNpemU6Nyxyb3RhdGlvblBvaW50OiEwLGRlZXBTZWxlY3Q6ITEscG9pbnRUeXBlOlwiY2lyY2xlXCJ9fSgpLGZ1bmN0aW9uKCl7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0LnJlbWVtYmVyKFwiX3Jlc2l6ZUhhbmRsZXJcIix0aGlzKSx0aGlzLmVsPXQsdGhpcy5wYXJhbWV0ZXJzPXt9LHRoaXMubGFzdFVwZGF0ZUNhbGw9bnVsbCx0aGlzLnA9dC5kb2MoKS5ub2RlLmNyZWF0ZVNWR1BvaW50KCl9dC5wcm90b3R5cGUudHJhbnNmb3JtUG9pbnQ9ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLnAueD10LSh0aGlzLm9mZnNldC54LXdpbmRvdy5wYWdlWE9mZnNldCksdGhpcy5wLnk9ZS0odGhpcy5vZmZzZXQueS13aW5kb3cucGFnZVlPZmZzZXQpLHRoaXMucC5tYXRyaXhUcmFuc2Zvcm0oaXx8dGhpcy5tKX0sdC5wcm90b3R5cGUuX2V4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm57eDpudWxsIT10LmNsaWVudFg/dC5jbGllbnRYOnQudG91Y2hlc1swXS5jbGllbnRYLHk6bnVsbCE9dC5jbGllbnRZP3QuY2xpZW50WTp0LnRvdWNoZXNbMF0uY2xpZW50WX19LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0aGlzLnN0b3AoKSxcInN0b3BcIiE9PXQpe2Zvcih2YXIgaSBpbiB0aGlzLm9wdGlvbnM9e30sdGhpcy5lbC5yZXNpemUuZGVmYXVsdHMpdGhpcy5vcHRpb25zW2ldPXRoaXMuZWwucmVzaXplLmRlZmF1bHRzW2ldLHZvaWQgMCE9PXRbaV0mJih0aGlzLm9wdGlvbnNbaV09dFtpXSk7dGhpcy5lbC5vbihcImx0LnJlc2l6ZVwiLChmdW5jdGlvbih0KXtlLnJlc2l6ZSh0fHx3aW5kb3cuZXZlbnQpfSkpLHRoaXMuZWwub24oXCJydC5yZXNpemVcIiwoZnVuY3Rpb24odCl7ZS5yZXNpemUodHx8d2luZG93LmV2ZW50KX0pKSx0aGlzLmVsLm9uKFwicmIucmVzaXplXCIsKGZ1bmN0aW9uKHQpe2UucmVzaXplKHR8fHdpbmRvdy5ldmVudCl9KSksdGhpcy5lbC5vbihcImxiLnJlc2l6ZVwiLChmdW5jdGlvbih0KXtlLnJlc2l6ZSh0fHx3aW5kb3cuZXZlbnQpfSkpLHRoaXMuZWwub24oXCJ0LnJlc2l6ZVwiLChmdW5jdGlvbih0KXtlLnJlc2l6ZSh0fHx3aW5kb3cuZXZlbnQpfSkpLHRoaXMuZWwub24oXCJyLnJlc2l6ZVwiLChmdW5jdGlvbih0KXtlLnJlc2l6ZSh0fHx3aW5kb3cuZXZlbnQpfSkpLHRoaXMuZWwub24oXCJiLnJlc2l6ZVwiLChmdW5jdGlvbih0KXtlLnJlc2l6ZSh0fHx3aW5kb3cuZXZlbnQpfSkpLHRoaXMuZWwub24oXCJsLnJlc2l6ZVwiLChmdW5jdGlvbih0KXtlLnJlc2l6ZSh0fHx3aW5kb3cuZXZlbnQpfSkpLHRoaXMuZWwub24oXCJyb3QucmVzaXplXCIsKGZ1bmN0aW9uKHQpe2UucmVzaXplKHR8fHdpbmRvdy5ldmVudCl9KSksdGhpcy5lbC5vbihcInBvaW50LnJlc2l6ZVwiLChmdW5jdGlvbih0KXtlLnJlc2l6ZSh0fHx3aW5kb3cuZXZlbnQpfSkpLHRoaXMudXBkYXRlKCl9fSx0LnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWwub2ZmKFwibHQucmVzaXplXCIpLHRoaXMuZWwub2ZmKFwicnQucmVzaXplXCIpLHRoaXMuZWwub2ZmKFwicmIucmVzaXplXCIpLHRoaXMuZWwub2ZmKFwibGIucmVzaXplXCIpLHRoaXMuZWwub2ZmKFwidC5yZXNpemVcIiksdGhpcy5lbC5vZmYoXCJyLnJlc2l6ZVwiKSx0aGlzLmVsLm9mZihcImIucmVzaXplXCIpLHRoaXMuZWwub2ZmKFwibC5yZXNpemVcIiksdGhpcy5lbC5vZmYoXCJyb3QucmVzaXplXCIpLHRoaXMuZWwub2ZmKFwicG9pbnQucmVzaXplXCIpLHRoaXN9LHQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMubT10aGlzLmVsLm5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpLHRoaXMub2Zmc2V0PXt4OndpbmRvdy5wYWdlWE9mZnNldCx5OndpbmRvdy5wYWdlWU9mZnNldH07dmFyIGk9dGhpcy5fZXh0cmFjdFBvc2l0aW9uKHQuZGV0YWlsLmV2ZW50KTtpZih0aGlzLnBhcmFtZXRlcnM9e3R5cGU6dGhpcy5lbC50eXBlLHA6dGhpcy50cmFuc2Zvcm1Qb2ludChpLngsaS55KSx4OnQuZGV0YWlsLngseTp0LmRldGFpbC55LGJveDp0aGlzLmVsLmJib3goKSxyb3RhdGlvbjp0aGlzLmVsLnRyYW5zZm9ybSgpLnJvdGF0aW9ufSxcInRleHRcIj09PXRoaXMuZWwudHlwZSYmKHRoaXMucGFyYW1ldGVycy5mb250U2l6ZT10aGlzLmVsLmF0dHIoKVtcImZvbnQtc2l6ZVwiXSksdm9pZCAwIT09dC5kZXRhaWwuaSl7dmFyIGE9dGhpcy5lbC5hcnJheSgpLnZhbHVlT2YoKTt0aGlzLnBhcmFtZXRlcnMuaT10LmRldGFpbC5pLHRoaXMucGFyYW1ldGVycy5wb2ludENvb3Jkcz1bYVt0LmRldGFpbC5pXVswXSxhW3QuZGV0YWlsLmldWzFdXX1zd2l0Y2godC50eXBlKXtjYXNlXCJsdFwiOnRoaXMuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuc25hcFRvR3JpZCh0LGUpO2lmKHRoaXMucGFyYW1ldGVycy5ib3gud2lkdGgtaVswXT4wJiZ0aGlzLnBhcmFtZXRlcnMuYm94LmhlaWdodC1pWzFdPjApe2lmKFwidGV4dFwiPT09dGhpcy5wYXJhbWV0ZXJzLnR5cGUpcmV0dXJuIHRoaXMuZWwubW92ZSh0aGlzLnBhcmFtZXRlcnMuYm94LngraVswXSx0aGlzLnBhcmFtZXRlcnMuYm94LnkpLHZvaWQgdGhpcy5lbC5hdHRyKFwiZm9udC1zaXplXCIsdGhpcy5wYXJhbWV0ZXJzLmZvbnRTaXplLWlbMF0pO2k9dGhpcy5jaGVja0FzcGVjdFJhdGlvKGkpLHRoaXMuZWwubW92ZSh0aGlzLnBhcmFtZXRlcnMuYm94LngraVswXSx0aGlzLnBhcmFtZXRlcnMuYm94LnkraVsxXSkuc2l6ZSh0aGlzLnBhcmFtZXRlcnMuYm94LndpZHRoLWlbMF0sdGhpcy5wYXJhbWV0ZXJzLmJveC5oZWlnaHQtaVsxXSl9fTticmVhaztjYXNlXCJydFwiOnRoaXMuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuc25hcFRvR3JpZCh0LGUsMik7aWYodGhpcy5wYXJhbWV0ZXJzLmJveC53aWR0aCtpWzBdPjAmJnRoaXMucGFyYW1ldGVycy5ib3guaGVpZ2h0LWlbMV0+MCl7aWYoXCJ0ZXh0XCI9PT10aGlzLnBhcmFtZXRlcnMudHlwZSlyZXR1cm4gdGhpcy5lbC5tb3ZlKHRoaXMucGFyYW1ldGVycy5ib3gueC1pWzBdLHRoaXMucGFyYW1ldGVycy5ib3gueSksdm9pZCB0aGlzLmVsLmF0dHIoXCJmb250LXNpemVcIix0aGlzLnBhcmFtZXRlcnMuZm9udFNpemUraVswXSk7aT10aGlzLmNoZWNrQXNwZWN0UmF0aW8oaSwhMCksdGhpcy5lbC5tb3ZlKHRoaXMucGFyYW1ldGVycy5ib3gueCx0aGlzLnBhcmFtZXRlcnMuYm94LnkraVsxXSkuc2l6ZSh0aGlzLnBhcmFtZXRlcnMuYm94LndpZHRoK2lbMF0sdGhpcy5wYXJhbWV0ZXJzLmJveC5oZWlnaHQtaVsxXSl9fTticmVhaztjYXNlXCJyYlwiOnRoaXMuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuc25hcFRvR3JpZCh0LGUsMCk7aWYodGhpcy5wYXJhbWV0ZXJzLmJveC53aWR0aCtpWzBdPjAmJnRoaXMucGFyYW1ldGVycy5ib3guaGVpZ2h0K2lbMV0+MCl7aWYoXCJ0ZXh0XCI9PT10aGlzLnBhcmFtZXRlcnMudHlwZSlyZXR1cm4gdGhpcy5lbC5tb3ZlKHRoaXMucGFyYW1ldGVycy5ib3gueC1pWzBdLHRoaXMucGFyYW1ldGVycy5ib3gueSksdm9pZCB0aGlzLmVsLmF0dHIoXCJmb250LXNpemVcIix0aGlzLnBhcmFtZXRlcnMuZm9udFNpemUraVswXSk7aT10aGlzLmNoZWNrQXNwZWN0UmF0aW8oaSksdGhpcy5lbC5tb3ZlKHRoaXMucGFyYW1ldGVycy5ib3gueCx0aGlzLnBhcmFtZXRlcnMuYm94LnkpLnNpemUodGhpcy5wYXJhbWV0ZXJzLmJveC53aWR0aCtpWzBdLHRoaXMucGFyYW1ldGVycy5ib3guaGVpZ2h0K2lbMV0pfX07YnJlYWs7Y2FzZVwibGJcIjp0aGlzLmNhbGM9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnNuYXBUb0dyaWQodCxlLDEpO2lmKHRoaXMucGFyYW1ldGVycy5ib3gud2lkdGgtaVswXT4wJiZ0aGlzLnBhcmFtZXRlcnMuYm94LmhlaWdodCtpWzFdPjApe2lmKFwidGV4dFwiPT09dGhpcy5wYXJhbWV0ZXJzLnR5cGUpcmV0dXJuIHRoaXMuZWwubW92ZSh0aGlzLnBhcmFtZXRlcnMuYm94LngraVswXSx0aGlzLnBhcmFtZXRlcnMuYm94LnkpLHZvaWQgdGhpcy5lbC5hdHRyKFwiZm9udC1zaXplXCIsdGhpcy5wYXJhbWV0ZXJzLmZvbnRTaXplLWlbMF0pO2k9dGhpcy5jaGVja0FzcGVjdFJhdGlvKGksITApLHRoaXMuZWwubW92ZSh0aGlzLnBhcmFtZXRlcnMuYm94LngraVswXSx0aGlzLnBhcmFtZXRlcnMuYm94LnkpLnNpemUodGhpcy5wYXJhbWV0ZXJzLmJveC53aWR0aC1pWzBdLHRoaXMucGFyYW1ldGVycy5ib3guaGVpZ2h0K2lbMV0pfX07YnJlYWs7Y2FzZVwidFwiOnRoaXMuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuc25hcFRvR3JpZCh0LGUsMik7aWYodGhpcy5wYXJhbWV0ZXJzLmJveC5oZWlnaHQtaVsxXT4wKXtpZihcInRleHRcIj09PXRoaXMucGFyYW1ldGVycy50eXBlKXJldHVybjt0aGlzLmVsLm1vdmUodGhpcy5wYXJhbWV0ZXJzLmJveC54LHRoaXMucGFyYW1ldGVycy5ib3gueStpWzFdKS5oZWlnaHQodGhpcy5wYXJhbWV0ZXJzLmJveC5oZWlnaHQtaVsxXSl9fTticmVhaztjYXNlXCJyXCI6dGhpcy5jYWxjPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5zbmFwVG9HcmlkKHQsZSwwKTtpZih0aGlzLnBhcmFtZXRlcnMuYm94LndpZHRoK2lbMF0+MCl7aWYoXCJ0ZXh0XCI9PT10aGlzLnBhcmFtZXRlcnMudHlwZSlyZXR1cm47dGhpcy5lbC5tb3ZlKHRoaXMucGFyYW1ldGVycy5ib3gueCx0aGlzLnBhcmFtZXRlcnMuYm94LnkpLndpZHRoKHRoaXMucGFyYW1ldGVycy5ib3gud2lkdGgraVswXSl9fTticmVhaztjYXNlXCJiXCI6dGhpcy5jYWxjPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5zbmFwVG9HcmlkKHQsZSwwKTtpZih0aGlzLnBhcmFtZXRlcnMuYm94LmhlaWdodCtpWzFdPjApe2lmKFwidGV4dFwiPT09dGhpcy5wYXJhbWV0ZXJzLnR5cGUpcmV0dXJuO3RoaXMuZWwubW92ZSh0aGlzLnBhcmFtZXRlcnMuYm94LngsdGhpcy5wYXJhbWV0ZXJzLmJveC55KS5oZWlnaHQodGhpcy5wYXJhbWV0ZXJzLmJveC5oZWlnaHQraVsxXSl9fTticmVhaztjYXNlXCJsXCI6dGhpcy5jYWxjPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5zbmFwVG9HcmlkKHQsZSwxKTtpZih0aGlzLnBhcmFtZXRlcnMuYm94LndpZHRoLWlbMF0+MCl7aWYoXCJ0ZXh0XCI9PT10aGlzLnBhcmFtZXRlcnMudHlwZSlyZXR1cm47dGhpcy5lbC5tb3ZlKHRoaXMucGFyYW1ldGVycy5ib3gueCtpWzBdLHRoaXMucGFyYW1ldGVycy5ib3gueSkud2lkdGgodGhpcy5wYXJhbWV0ZXJzLmJveC53aWR0aC1pWzBdKX19O2JyZWFrO2Nhc2VcInJvdFwiOnRoaXMuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciBpPXQrdGhpcy5wYXJhbWV0ZXJzLnAueCxhPWUrdGhpcy5wYXJhbWV0ZXJzLnAueSxzPU1hdGguYXRhbjIodGhpcy5wYXJhbWV0ZXJzLnAueS10aGlzLnBhcmFtZXRlcnMuYm94LnktdGhpcy5wYXJhbWV0ZXJzLmJveC5oZWlnaHQvMix0aGlzLnBhcmFtZXRlcnMucC54LXRoaXMucGFyYW1ldGVycy5ib3gueC10aGlzLnBhcmFtZXRlcnMuYm94LndpZHRoLzIpLHI9TWF0aC5hdGFuMihhLXRoaXMucGFyYW1ldGVycy5ib3gueS10aGlzLnBhcmFtZXRlcnMuYm94LmhlaWdodC8yLGktdGhpcy5wYXJhbWV0ZXJzLmJveC54LXRoaXMucGFyYW1ldGVycy5ib3gud2lkdGgvMiksbz10aGlzLnBhcmFtZXRlcnMucm90YXRpb24rMTgwKihyLXMpL01hdGguUEkrdGhpcy5vcHRpb25zLnNuYXBUb0FuZ2xlLzI7dGhpcy5lbC5jZW50ZXIodGhpcy5wYXJhbWV0ZXJzLmJveC5jeCx0aGlzLnBhcmFtZXRlcnMuYm94LmN5KS5yb3RhdGUoby1vJXRoaXMub3B0aW9ucy5zbmFwVG9BbmdsZSx0aGlzLnBhcmFtZXRlcnMuYm94LmN4LHRoaXMucGFyYW1ldGVycy5ib3guY3kpfTticmVhaztjYXNlXCJwb2ludFwiOnRoaXMuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuc25hcFRvR3JpZCh0LGUsdGhpcy5wYXJhbWV0ZXJzLnBvaW50Q29vcmRzWzBdLHRoaXMucGFyYW1ldGVycy5wb2ludENvb3Jkc1sxXSksYT10aGlzLmVsLmFycmF5KCkudmFsdWVPZigpO2FbdGhpcy5wYXJhbWV0ZXJzLmldWzBdPXRoaXMucGFyYW1ldGVycy5wb2ludENvb3Jkc1swXStpWzBdLGFbdGhpcy5wYXJhbWV0ZXJzLmldWzFdPXRoaXMucGFyYW1ldGVycy5wb2ludENvb3Jkc1sxXStpWzFdLHRoaXMuZWwucGxvdChhKX19dGhpcy5lbC5maXJlKFwicmVzaXplc3RhcnRcIix7ZHg6dGhpcy5wYXJhbWV0ZXJzLngsZHk6dGhpcy5wYXJhbWV0ZXJzLnksZXZlbnQ6dH0pLFNWRy5vbih3aW5kb3csXCJ0b3VjaG1vdmUucmVzaXplXCIsKGZ1bmN0aW9uKHQpe2UudXBkYXRlKHR8fHdpbmRvdy5ldmVudCl9KSksU1ZHLm9uKHdpbmRvdyxcInRvdWNoZW5kLnJlc2l6ZVwiLChmdW5jdGlvbigpe2UuZG9uZSgpfSkpLFNWRy5vbih3aW5kb3csXCJtb3VzZW1vdmUucmVzaXplXCIsKGZ1bmN0aW9uKHQpe2UudXBkYXRlKHR8fHdpbmRvdy5ldmVudCl9KSksU1ZHLm9uKHdpbmRvdyxcIm1vdXNldXAucmVzaXplXCIsKGZ1bmN0aW9uKCl7ZS5kb25lKCl9KSl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT10aGlzLl9leHRyYWN0UG9zaXRpb24odCksaT10aGlzLnRyYW5zZm9ybVBvaW50KGUueCxlLnkpLGE9aS54LXRoaXMucGFyYW1ldGVycy5wLngscz1pLnktdGhpcy5wYXJhbWV0ZXJzLnAueTt0aGlzLmxhc3RVcGRhdGVDYWxsPVthLHNdLHRoaXMuY2FsYyhhLHMpLHRoaXMuZWwuZmlyZShcInJlc2l6aW5nXCIse2R4OmEsZHk6cyxldmVudDp0fSl9ZWxzZSB0aGlzLmxhc3RVcGRhdGVDYWxsJiZ0aGlzLmNhbGModGhpcy5sYXN0VXBkYXRlQ2FsbFswXSx0aGlzLmxhc3RVcGRhdGVDYWxsWzFdKX0sdC5wcm90b3R5cGUuZG9uZT1mdW5jdGlvbigpe3RoaXMubGFzdFVwZGF0ZUNhbGw9bnVsbCxTVkcub2ZmKHdpbmRvdyxcIm1vdXNlbW92ZS5yZXNpemVcIiksU1ZHLm9mZih3aW5kb3csXCJtb3VzZXVwLnJlc2l6ZVwiKSxTVkcub2ZmKHdpbmRvdyxcInRvdWNobW92ZS5yZXNpemVcIiksU1ZHLm9mZih3aW5kb3csXCJ0b3VjaGVuZC5yZXNpemVcIiksdGhpcy5lbC5maXJlKFwicmVzaXplZG9uZVwiKX0sdC5wcm90b3R5cGUuc25hcFRvR3JpZD1mdW5jdGlvbih0LGUsaSxhKXt2YXIgcztyZXR1cm4gdm9pZCAwIT09YT9zPVsoaSt0KSV0aGlzLm9wdGlvbnMuc25hcFRvR3JpZCwoYStlKSV0aGlzLm9wdGlvbnMuc25hcFRvR3JpZF06KGk9bnVsbD09aT8zOmkscz1bKHRoaXMucGFyYW1ldGVycy5ib3gueCt0KygxJmk/MDp0aGlzLnBhcmFtZXRlcnMuYm94LndpZHRoKSkldGhpcy5vcHRpb25zLnNuYXBUb0dyaWQsKHRoaXMucGFyYW1ldGVycy5ib3gueStlKygyJmk/MDp0aGlzLnBhcmFtZXRlcnMuYm94LmhlaWdodCkpJXRoaXMub3B0aW9ucy5zbmFwVG9HcmlkXSksdDwwJiYoc1swXS09dGhpcy5vcHRpb25zLnNuYXBUb0dyaWQpLGU8MCYmKHNbMV0tPXRoaXMub3B0aW9ucy5zbmFwVG9HcmlkKSx0LT1NYXRoLmFicyhzWzBdKTx0aGlzLm9wdGlvbnMuc25hcFRvR3JpZC8yP3NbMF06c1swXS0odDwwPy10aGlzLm9wdGlvbnMuc25hcFRvR3JpZDp0aGlzLm9wdGlvbnMuc25hcFRvR3JpZCksZS09TWF0aC5hYnMoc1sxXSk8dGhpcy5vcHRpb25zLnNuYXBUb0dyaWQvMj9zWzFdOnNbMV0tKGU8MD8tdGhpcy5vcHRpb25zLnNuYXBUb0dyaWQ6dGhpcy5vcHRpb25zLnNuYXBUb0dyaWQpLHRoaXMuY29uc3RyYWludFRvQm94KHQsZSxpLGEpfSx0LnByb3RvdHlwZS5jb25zdHJhaW50VG9Cb3g9ZnVuY3Rpb24odCxlLGksYSl7dmFyIHMscixvPXRoaXMub3B0aW9ucy5jb25zdHJhaW50fHx7fTtyZXR1cm4gdm9pZCAwIT09YT8ocz1pLHI9YSk6KHM9dGhpcy5wYXJhbWV0ZXJzLmJveC54KygxJmk/MDp0aGlzLnBhcmFtZXRlcnMuYm94LndpZHRoKSxyPXRoaXMucGFyYW1ldGVycy5ib3gueSsoMiZpPzA6dGhpcy5wYXJhbWV0ZXJzLmJveC5oZWlnaHQpKSx2b2lkIDAhPT1vLm1pblgmJnMrdDxvLm1pblgmJih0PW8ubWluWC1zKSx2b2lkIDAhPT1vLm1heFgmJnMrdD5vLm1heFgmJih0PW8ubWF4WC1zKSx2b2lkIDAhPT1vLm1pblkmJnIrZTxvLm1pblkmJihlPW8ubWluWS1yKSx2b2lkIDAhPT1vLm1heFkmJnIrZT5vLm1heFkmJihlPW8ubWF4WS1yKSxbdCxlXX0sdC5wcm90b3R5cGUuY2hlY2tBc3BlY3RSYXRpbz1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLm9wdGlvbnMuc2F2ZUFzcGVjdFJhdGlvKXJldHVybiB0O3ZhciBpPXQuc2xpY2UoKSxhPXRoaXMucGFyYW1ldGVycy5ib3gud2lkdGgvdGhpcy5wYXJhbWV0ZXJzLmJveC5oZWlnaHQscz10aGlzLnBhcmFtZXRlcnMuYm94LndpZHRoK3RbMF0scj10aGlzLnBhcmFtZXRlcnMuYm94LmhlaWdodC10WzFdLG89cy9yO3JldHVybiBvPGE/KGlbMV09cy9hLXRoaXMucGFyYW1ldGVycy5ib3guaGVpZ2h0LGUmJihpWzFdPS1pWzFdKSk6bz5hJiYoaVswXT10aGlzLnBhcmFtZXRlcnMuYm94LndpZHRoLXIqYSxlJiYoaVswXT0taVswXSkpLGl9LFNWRy5leHRlbmQoU1ZHLkVsZW1lbnQse3Jlc2l6ZTpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5yZW1lbWJlcihcIl9yZXNpemVIYW5kbGVyXCIpfHxuZXcgdCh0aGlzKSkuaW5pdChlfHx7fSksdGhpc319KSxTVkcuRWxlbWVudC5wcm90b3R5cGUucmVzaXplLmRlZmF1bHRzPXtzbmFwVG9BbmdsZTouMSxzbmFwVG9HcmlkOjEsY29uc3RyYWludDp7fSxzYXZlQXNwZWN0UmF0aW86ITF9fSkuY2FsbCh0aGlzKX0oKSx2b2lkIDA9PT13aW5kb3cuQXBleCYmKHdpbmRvdy5BcGV4PXt9KTt2YXIgTnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2EodGhpcyx0KSx0aGlzLmN0eD1lLHRoaXMudz1lLnd9cmV0dXJuIHIodCxbe2tleTpcImluaXRNb2R1bGVzXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmN0eC5wdWJsaWNNZXRob2RzPVtcInVwZGF0ZU9wdGlvbnNcIixcInVwZGF0ZVNlcmllc1wiLFwiYXBwZW5kRGF0YVwiLFwiYXBwZW5kU2VyaWVzXCIsXCJ0b2dnbGVTZXJpZXNcIixcInNob3dTZXJpZXNcIixcImhpZGVTZXJpZXNcIixcInNldExvY2FsZVwiLFwicmVzZXRTZXJpZXNcIixcInpvb21YXCIsXCJ0b2dnbGVEYXRhUG9pbnRTZWxlY3Rpb25cIixcImRhdGFVUklcIixcImV4cG9ydFRvQ1NWXCIsXCJhZGRYYXhpc0Fubm90YXRpb25cIixcImFkZFlheGlzQW5ub3RhdGlvblwiLFwiYWRkUG9pbnRBbm5vdGF0aW9uXCIsXCJjbGVhckFubm90YXRpb25zXCIsXCJyZW1vdmVBbm5vdGF0aW9uXCIsXCJwYXBlclwiLFwiZGVzdHJveVwiXSx0aGlzLmN0eC5ldmVudExpc3Q9W1wiY2xpY2tcIixcIm1vdXNlZG93blwiLFwibW91c2Vtb3ZlXCIsXCJtb3VzZWxlYXZlXCIsXCJ0b3VjaHN0YXJ0XCIsXCJ0b3VjaG1vdmVcIixcInRvdWNobGVhdmVcIixcIm1vdXNldXBcIixcInRvdWNoZW5kXCJdLHRoaXMuY3R4LmFuaW1hdGlvbnM9bmV3IGIodGhpcy5jdHgpLHRoaXMuY3R4LmF4ZXM9bmV3IEoodGhpcy5jdHgpLHRoaXMuY3R4LmNvcmU9bmV3IER0KHRoaXMuY3R4LmVsLHRoaXMuY3R4KSx0aGlzLmN0eC5jb25maWc9bmV3IHooe30pLHRoaXMuY3R4LmRhdGE9bmV3IE8odGhpcy5jdHgpLHRoaXMuY3R4LmdyaWQ9bmV3IGoodGhpcy5jdHgpLHRoaXMuY3R4LmdyYXBoaWNzPW5ldyBtKHRoaXMuY3R4KSx0aGlzLmN0eC5jb3JlVXRpbHM9bmV3IHkodGhpcy5jdHgpLHRoaXMuY3R4LmNyb3NzaGFpcnM9bmV3IFEodGhpcy5jdHgpLHRoaXMuY3R4LmV2ZW50cz1uZXcgWih0aGlzLmN0eCksdGhpcy5jdHguZXhwb3J0cz1uZXcgVih0aGlzLmN0eCksdGhpcy5jdHgubG9jYWxpemF0aW9uPW5ldyAkKHRoaXMuY3R4KSx0aGlzLmN0eC5vcHRpb25zPW5ldyBMLHRoaXMuY3R4LnJlc3BvbnNpdmU9bmV3IEsodGhpcy5jdHgpLHRoaXMuY3R4LnNlcmllcz1uZXcgTih0aGlzLmN0eCksdGhpcy5jdHgudGhlbWU9bmV3IHR0KHRoaXMuY3R4KSx0aGlzLmN0eC5mb3JtYXR0ZXJzPW5ldyBXKHRoaXMuY3R4KSx0aGlzLmN0eC50aXRsZVN1YnRpdGxlPW5ldyBldCh0aGlzLmN0eCksdGhpcy5jdHgubGVnZW5kPW5ldyBsdCh0aGlzLmN0eCksdGhpcy5jdHgudG9vbGJhcj1uZXcgaHQodGhpcy5jdHgpLHRoaXMuY3R4LnRvb2x0aXA9bmV3IGJ0KHRoaXMuY3R4KSx0aGlzLmN0eC5kaW1lbnNpb25zPW5ldyBvdCh0aGlzLmN0eCksdGhpcy5jdHgudXBkYXRlSGVscGVycz1uZXcgSHQodGhpcy5jdHgpLHRoaXMuY3R4Lnpvb21QYW5TZWxlY3Rpb249bmV3IGN0KHRoaXMuY3R4KSx0aGlzLmN0eC53Lmdsb2JhbHMudG9vbHRpcD1uZXcgYnQodGhpcy5jdHgpfX1dKSx0fSgpLE90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXthKHRoaXMsdCksdGhpcy5jdHg9ZSx0aGlzLnc9ZS53fXJldHVybiByKHQsW3trZXk6XCJjbGVhclwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaXNVcGRhdGluZzt0aGlzLmN0eC56b29tUGFuU2VsZWN0aW9uJiZ0aGlzLmN0eC56b29tUGFuU2VsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmN0eC50b29sYmFyJiZ0aGlzLmN0eC50b29sYmFyLmRlc3Ryb3koKSx0aGlzLmN0eC5hbmltYXRpb25zPW51bGwsdGhpcy5jdHguYXhlcz1udWxsLHRoaXMuY3R4LmFubm90YXRpb25zPW51bGwsdGhpcy5jdHguY29yZT1udWxsLHRoaXMuY3R4LmRhdGE9bnVsbCx0aGlzLmN0eC5ncmlkPW51bGwsdGhpcy5jdHguc2VyaWVzPW51bGwsdGhpcy5jdHgucmVzcG9uc2l2ZT1udWxsLHRoaXMuY3R4LnRoZW1lPW51bGwsdGhpcy5jdHguZm9ybWF0dGVycz1udWxsLHRoaXMuY3R4LnRpdGxlU3VidGl0bGU9bnVsbCx0aGlzLmN0eC5sZWdlbmQ9bnVsbCx0aGlzLmN0eC5kaW1lbnNpb25zPW51bGwsdGhpcy5jdHgub3B0aW9ucz1udWxsLHRoaXMuY3R4LmNyb3NzaGFpcnM9bnVsbCx0aGlzLmN0eC56b29tUGFuU2VsZWN0aW9uPW51bGwsdGhpcy5jdHgudXBkYXRlSGVscGVycz1udWxsLHRoaXMuY3R4LnRvb2xiYXI9bnVsbCx0aGlzLmN0eC5sb2NhbGl6YXRpb249bnVsbCx0aGlzLmN0eC53Lmdsb2JhbHMudG9vbHRpcD1udWxsLHRoaXMuY2xlYXJEb21FbGVtZW50cyh7aXNVcGRhdGluZzplfSl9fSx7a2V5Olwia2lsbFNWR1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCxlKXt0aGlzLnJlbW92ZUNsYXNzKFwiKlwiKSx0aGlzLm9mZigpLHRoaXMuc3RvcCgpfSksITApLHQudW5ncm91cCgpLHQuY2xlYXIoKX19LHtrZXk6XCJjbGVhckRvbUVsZW1lbnRzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXQuaXNVcGRhdGluZyxhPXRoaXMudy5nbG9iYWxzLmRvbS5QYXBlci5ub2RlO2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnBhcmVudE5vZGUmJiFpJiYoYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuc3R5bGUubWluSGVpZ2h0PVwidW5zZXRcIik7dmFyIHM9dGhpcy53Lmdsb2JhbHMuZG9tLmJhc2VFbDtzJiZ0aGlzLmN0eC5ldmVudExpc3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKHQsZS5jdHguZXZlbnRzLmRvY3VtZW50RXZlbnQpfSkpO3ZhciByPXRoaXMudy5nbG9iYWxzLmRvbTtpZihudWxsIT09dGhpcy5jdHguZWwpZm9yKDt0aGlzLmN0eC5lbC5maXJzdENoaWxkOyl0aGlzLmN0eC5lbC5yZW1vdmVDaGlsZCh0aGlzLmN0eC5lbC5maXJzdENoaWxkKTt0aGlzLmtpbGxTVkcoci5QYXBlciksci5QYXBlci5yZW1vdmUoKSxyLmVsV3JhcD1udWxsLHIuZWxHcmFwaGljYWw9bnVsbCxyLmVsQW5ub3RhdGlvbnM9bnVsbCxyLmVsTGVnZW5kV3JhcD1udWxsLHIuYmFzZUVsPW51bGwsci5lbEdyaWRSZWN0PW51bGwsci5lbEdyaWRSZWN0TWFzaz1udWxsLHIuZWxHcmlkUmVjdE1hcmtlck1hc2s9bnVsbCxyLmVsRm9yZWNhc3RNYXNrPW51bGwsci5lbE5vbkZvcmVjYXN0TWFzaz1udWxsLHIuZWxEZWZzPW51bGx9fV0pLHR9KCksV3Q9bmV3IFdlYWtNYXA7dmFyIEJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLGkpe2EodGhpcyx0KSx0aGlzLm9wdHM9aSx0aGlzLmN0eD10aGlzLHRoaXMudz1uZXcgWShpKS5pbml0KCksdGhpcy5lbD1lLHRoaXMudy5nbG9iYWxzLmN1aWQ9eC5yYW5kb21JZCgpLHRoaXMudy5nbG9iYWxzLmNoYXJ0SUQ9dGhpcy53LmNvbmZpZy5jaGFydC5pZD94LmVzY2FwZVN0cmluZyh0aGlzLncuY29uZmlnLmNoYXJ0LmlkKTp0aGlzLncuZ2xvYmFscy5jdWlkLG5ldyBOdCh0aGlzKS5pbml0TW9kdWxlcygpLHRoaXMuY3JlYXRlPXguYmluZCh0aGlzLmNyZWF0ZSx0aGlzKSx0aGlzLndpbmRvd1Jlc2l6ZUhhbmRsZXI9dGhpcy5fd2luZG93UmVzaXplSGFuZGxlci5iaW5kKHRoaXMpLHRoaXMucGFyZW50UmVzaXplSGFuZGxlcj10aGlzLl9wYXJlbnRSZXNpemVDYWxsYmFjay5iaW5kKHRoaXMpfXJldHVybiByKHQsW3trZXk6XCJyZW5kZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLGkpe2lmKG51bGwhPT10LmVsKXt2b2lkIDA9PT1BcGV4Ll9jaGFydEluc3RhbmNlcyYmKEFwZXguX2NoYXJ0SW5zdGFuY2VzPVtdKSx0LncuY29uZmlnLmNoYXJ0LmlkJiZBcGV4Ll9jaGFydEluc3RhbmNlcy5wdXNoKHtpZDp0LncuZ2xvYmFscy5jaGFydElELGdyb3VwOnQudy5jb25maWcuY2hhcnQuZ3JvdXAsY2hhcnQ6dH0pLHQuc2V0TG9jYWxlKHQudy5jb25maWcuY2hhcnQuZGVmYXVsdExvY2FsZSk7dmFyIGE9dC53LmNvbmZpZy5jaGFydC5ldmVudHMuYmVmb3JlTW91bnQ7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmYSh0LHQudyksdC5ldmVudHMuZmlyZUV2ZW50KFwiYmVmb3JlTW91bnRcIixbdCx0LnddKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQud2luZG93UmVzaXplSGFuZGxlciksZnVuY3Rpb24odCxlKXt2YXIgaT0hMTtpZih0Lm5vZGVUeXBlIT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXt2YXIgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1wibm9uZVwiIT09dC5zdHlsZS5kaXNwbGF5JiYwIT09YS53aWR0aHx8KGk9ITApfXZhciBzPW5ldyBSZXNpemVPYnNlcnZlcigoZnVuY3Rpb24oYSl7aSYmZS5jYWxsKHQsYSksaT0hMH0pKTt0Lm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP0FycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHMub2JzZXJ2ZSh0KX0pKTpzLm9ic2VydmUodCksV3Quc2V0KGUscyl9KHQuZWwucGFyZW50Tm9kZSx0LnBhcmVudFJlc2l6ZUhhbmRsZXIpLCF0LmNzcyl7dmFyIHM9dC5lbC5nZXRSb290Tm9kZSYmdC5lbC5nZXRSb290Tm9kZSgpLHI9eC5pcyhcIlNoYWRvd1Jvb3RcIixzKSxvPXQuZWwub3duZXJEb2N1bWVudCxuPW8uZ2V0RWxlbWVudEJ5SWQoXCJhcGV4Y2hhcnRzLWNzc1wiKTshciYmbnx8KHQuY3NzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSx0LmNzcy5pZD1cImFwZXhjaGFydHMtY3NzXCIsdC5jc3MudGV4dENvbnRlbnQ9J0BrZXlmcmFtZXMgb3BhcXVlIHtcXG4gIDAlIHtcXG4gICAgICBvcGFjaXR5OiAwXFxuICB9XFxuXFxuICB0byB7XFxuICAgICAgb3BhY2l0eTogMVxcbiAgfVxcbn1cXG5cXG5Aa2V5ZnJhbWVzIHJlc2l6ZWFuaW0ge1xcbiAgMCUsdG8ge1xcbiAgICAgIG9wYWNpdHk6IDBcXG4gIH1cXG59XFxuXFxuLmFwZXhjaGFydHMtY2FudmFzIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHVzZXItc2VsZWN0OiBub25lXFxufVxcblxcbi5hcGV4Y2hhcnRzLWNhbnZhcyA6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIHdpZHRoOiA2cHhcXG59XFxuXFxuLmFwZXhjaGFydHMtY2FudmFzIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwuNSk7XFxuICBib3gtc2hhZG93OiAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjUpO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjUpXFxufVxcblxcbi5hcGV4Y2hhcnRzLWlubmVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZVxcbn1cXG5cXG4uYXBleGNoYXJ0cy10ZXh0IHRzcGFuIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0XFxufVxcblxcbi5sZWdlbmQtbW91c2VvdmVyLWluYWN0aXZlIHtcXG4gIHRyYW5zaXRpb246IC4xNXMgZWFzZSBhbGw7XFxuICBvcGFjaXR5OiAuMlxcbn1cXG5cXG4uYXBleGNoYXJ0cy1zZXJpZXMtY29sbGFwc2VkIHtcXG4gIG9wYWNpdHk6IDBcXG59XFxuXFxuLmFwZXhjaGFydHMtdG9vbHRpcCB7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBib3gtc2hhZG93OiAycHggMnB4IDZweCAtNHB4ICM5OTk7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsZWZ0OiA2MnB4O1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAyMHB4O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIHotaW5kZXg6IDEyO1xcbiAgdHJhbnNpdGlvbjogLjE1cyBlYXNlIGFsbFxcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sdGlwLmFwZXhjaGFydHMtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2l0aW9uOiAuMTVzIGVhc2UgYWxsXFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAuYXBleGNoYXJ0cy10aGVtZS1saWdodCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTNlM2UzO1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuOTYpXFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAuYXBleGNoYXJ0cy10aGVtZS1kYXJrIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZDogcmdiYSgzMCwzMCwzMCwuOClcXG59XFxuXFxuLmFwZXhjaGFydHMtdG9vbHRpcCAqIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0XFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAtdGl0bGUge1xcbiAgcGFkZGluZzogNnB4O1xcbiAgZm9udC1zaXplOiAxNXB4O1xcbiAgbWFyZ2luLWJvdHRvbTogNHB4XFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAuYXBleGNoYXJ0cy10aGVtZS1saWdodCAuYXBleGNoYXJ0cy10b29sdGlwLXRpdGxlIHtcXG4gIGJhY2tncm91bmQ6ICNlY2VmZjE7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZFxcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sdGlwLmFwZXhjaGFydHMtdGhlbWUtZGFyayAuYXBleGNoYXJ0cy10b29sdGlwLXRpdGxlIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjcpO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzNcXG59XFxuXFxuLmFwZXhjaGFydHMtdG9vbHRpcC10ZXh0LWdvYWxzLXZhbHVlLC5hcGV4Y2hhcnRzLXRvb2x0aXAtdGV4dC15LXZhbHVlLC5hcGV4Y2hhcnRzLXRvb2x0aXAtdGV4dC16LXZhbHVlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1sZWZ0OiA1cHg7XFxuICBmb250LXdlaWdodDogNjAwXFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAtdGV4dC1nb2Fscy1sYWJlbDplbXB0eSwuYXBleGNoYXJ0cy10b29sdGlwLXRleHQtZ29hbHMtdmFsdWU6ZW1wdHksLmFwZXhjaGFydHMtdG9vbHRpcC10ZXh0LXktbGFiZWw6ZW1wdHksLmFwZXhjaGFydHMtdG9vbHRpcC10ZXh0LXktdmFsdWU6ZW1wdHksLmFwZXhjaGFydHMtdG9vbHRpcC10ZXh0LXotdmFsdWU6ZW1wdHksLmFwZXhjaGFydHMtdG9vbHRpcC10aXRsZTplbXB0eSB7XFxuICBkaXNwbGF5OiBub25lXFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAtdGV4dC1nb2Fscy1sYWJlbCwuYXBleGNoYXJ0cy10b29sdGlwLXRleHQtZ29hbHMtdmFsdWUge1xcbiAgcGFkZGluZzogNnB4IDAgNXB4XFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAtZ29hbHMtZ3JvdXAsLmFwZXhjaGFydHMtdG9vbHRpcC10ZXh0LWdvYWxzLWxhYmVsLC5hcGV4Y2hhcnRzLXRvb2x0aXAtdGV4dC1nb2Fscy12YWx1ZSB7XFxuICBkaXNwbGF5OiBmbGV4XFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAtdGV4dC1nb2Fscy1sYWJlbDpub3QoOmVtcHR5KSwuYXBleGNoYXJ0cy10b29sdGlwLXRleHQtZ29hbHMtdmFsdWU6bm90KDplbXB0eSkge1xcbiAgbWFyZ2luLXRvcDogLTZweFxcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sdGlwLW1hcmtlciB7XFxuICB3aWR0aDogMTJweDtcXG4gIGhlaWdodDogMTJweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogMDtcXG4gIG1hcmdpbi1yaWdodDogMTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJVxcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sdGlwLXNlcmllcy1ncm91cCB7XFxuICBwYWRkaW5nOiAwIDEwcHg7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIGp1c3RpZnktY29udGVudDogbGVmdDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXJcXG59XFxuXFxuLmFwZXhjaGFydHMtdG9vbHRpcC1zZXJpZXMtZ3JvdXAuYXBleGNoYXJ0cy1hY3RpdmUgLmFwZXhjaGFydHMtdG9vbHRpcC1tYXJrZXIge1xcbiAgb3BhY2l0eTogMVxcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sdGlwLXNlcmllcy1ncm91cC5hcGV4Y2hhcnRzLWFjdGl2ZSwuYXBleGNoYXJ0cy10b29sdGlwLXNlcmllcy1ncm91cDpsYXN0LWNoaWxkIHtcXG4gIHBhZGRpbmctYm90dG9tOiA0cHhcXG59XFxuXFxuLmFwZXhjaGFydHMtdG9vbHRpcC1zZXJpZXMtZ3JvdXAtaGlkZGVuIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBoZWlnaHQ6IDA7XFxuICBsaW5lLWhlaWdodDogMDtcXG4gIHBhZGRpbmc6IDAhaW1wb3J0YW50XFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAteS1ncm91cCB7XFxuICBwYWRkaW5nOiA2cHggMCA1cHhcXG59XFxuXFxuLmFwZXhjaGFydHMtY3VzdG9tLXRvb2x0aXAsLmFwZXhjaGFydHMtdG9vbHRpcC1ib3gge1xcbiAgcGFkZGluZzogNHB4IDhweFxcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sdGlwLWJveFBsb3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZVxcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sdGlwLWJveD5kaXYge1xcbiAgbWFyZ2luOiA0cHggMFxcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sdGlwLWJveCBzcGFuLnZhbHVlIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDBcXG59XFxuXFxuLmFwZXhjaGFydHMtdG9vbHRpcC1yYW5nZWJhciB7XFxuICBwYWRkaW5nOiA1cHggOHB4XFxufVxcblxcbi5hcGV4Y2hhcnRzLXRvb2x0aXAtcmFuZ2ViYXIgLmNhdGVnb3J5IHtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogIzc3N1xcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sdGlwLXJhbmdlYmFyIC5zZXJpZXMtbmFtZSB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tYm90dG9tOiA1cHhcXG59XFxuXFxuLmFwZXhjaGFydHMteGF4aXN0b29sdGlwLC5hcGV4Y2hhcnRzLXlheGlzdG9vbHRpcCB7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb2xvcjogIzM3M2QzZjtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDEwO1xcbiAgYmFja2dyb3VuZDogI2VjZWZmMTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM5MGE0YWVcXG59XFxuXFxuLmFwZXhjaGFydHMteGF4aXN0b29sdGlwIHtcXG4gIHBhZGRpbmc6IDlweCAxMHB4O1xcbiAgdHJhbnNpdGlvbjogLjE1cyBlYXNlIGFsbFxcbn1cXG5cXG4uYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXAuYXBleGNoYXJ0cy10aGVtZS1kYXJrIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjcpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLDAsMCwuNSk7XFxuICBjb2xvcjogI2ZmZlxcbn1cXG5cXG4uYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXA6YWZ0ZXIsLmFwZXhjaGFydHMteGF4aXN0b29sdGlwOmJlZm9yZSB7XFxuICBsZWZ0OiA1MCU7XFxuICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgY29udGVudDogXCIgXCI7XFxuICBoZWlnaHQ6IDA7XFxuICB3aWR0aDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lXFxufVxcblxcbi5hcGV4Y2hhcnRzLXhheGlzdG9vbHRpcDphZnRlciB7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiA2cHg7XFxuICBtYXJnaW4tbGVmdDogLTZweFxcbn1cXG5cXG4uYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXA6YmVmb3JlIHtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDdweDtcXG4gIG1hcmdpbi1sZWZ0OiAtN3B4XFxufVxcblxcbi5hcGV4Y2hhcnRzLXhheGlzdG9vbHRpcC1ib3R0b206YWZ0ZXIsLmFwZXhjaGFydHMteGF4aXN0b29sdGlwLWJvdHRvbTpiZWZvcmUge1xcbiAgYm90dG9tOiAxMDAlXFxufVxcblxcbi5hcGV4Y2hhcnRzLXhheGlzdG9vbHRpcC10b3A6YWZ0ZXIsLmFwZXhjaGFydHMteGF4aXN0b29sdGlwLXRvcDpiZWZvcmUge1xcbiAgdG9wOiAxMDAlXFxufVxcblxcbi5hcGV4Y2hhcnRzLXhheGlzdG9vbHRpcC1ib3R0b206YWZ0ZXIge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2VjZWZmMVxcbn1cXG5cXG4uYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXAtYm90dG9tOmJlZm9yZSB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjOTBhNGFlXFxufVxcblxcbi5hcGV4Y2hhcnRzLXhheGlzdG9vbHRpcC1ib3R0b20uYXBleGNoYXJ0cy10aGVtZS1kYXJrOmFmdGVyLC5hcGV4Y2hhcnRzLXhheGlzdG9vbHRpcC1ib3R0b20uYXBleGNoYXJ0cy10aGVtZS1kYXJrOmJlZm9yZSB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsMCwwLC41KVxcbn1cXG5cXG4uYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXAtdG9wOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNlY2VmZjFcXG59XFxuXFxuLmFwZXhjaGFydHMteGF4aXN0b29sdGlwLXRvcDpiZWZvcmUge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzkwYTRhZVxcbn1cXG5cXG4uYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXAtdG9wLmFwZXhjaGFydHMtdGhlbWUtZGFyazphZnRlciwuYXBleGNoYXJ0cy14YXhpc3Rvb2x0aXAtdG9wLmFwZXhjaGFydHMtdGhlbWUtZGFyazpiZWZvcmUge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLDAsMCwuNSlcXG59XFxuXFxuLmFwZXhjaGFydHMteGF4aXN0b29sdGlwLmFwZXhjaGFydHMtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2l0aW9uOiAuMTVzIGVhc2UgYWxsXFxufVxcblxcbi5hcGV4Y2hhcnRzLXlheGlzdG9vbHRpcCB7XFxuICBwYWRkaW5nOiA0cHggMTBweFxcbn1cXG5cXG4uYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXAuYXBleGNoYXJ0cy10aGVtZS1kYXJrIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjcpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLDAsMCwuNSk7XFxuICBjb2xvcjogI2ZmZlxcbn1cXG5cXG4uYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXA6YWZ0ZXIsLmFwZXhjaGFydHMteWF4aXN0b29sdGlwOmJlZm9yZSB7XFxuICB0b3A6IDUwJTtcXG4gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7XFxuICBjb250ZW50OiBcIiBcIjtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmVcXG59XFxuXFxuLmFwZXhjaGFydHMteWF4aXN0b29sdGlwOmFmdGVyIHtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItd2lkdGg6IDZweDtcXG4gIG1hcmdpbi10b3A6IC02cHhcXG59XFxuXFxuLmFwZXhjaGFydHMteWF4aXN0b29sdGlwOmJlZm9yZSB7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXdpZHRoOiA3cHg7XFxuICBtYXJnaW4tdG9wOiAtN3B4XFxufVxcblxcbi5hcGV4Y2hhcnRzLXlheGlzdG9vbHRpcC1sZWZ0OmFmdGVyLC5hcGV4Y2hhcnRzLXlheGlzdG9vbHRpcC1sZWZ0OmJlZm9yZSB7XFxuICBsZWZ0OiAxMDAlXFxufVxcblxcbi5hcGV4Y2hhcnRzLXlheGlzdG9vbHRpcC1yaWdodDphZnRlciwuYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXAtcmlnaHQ6YmVmb3JlIHtcXG4gIHJpZ2h0OiAxMDAlXFxufVxcblxcbi5hcGV4Y2hhcnRzLXlheGlzdG9vbHRpcC1sZWZ0OmFmdGVyIHtcXG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZWNlZmYxXFxufVxcblxcbi5hcGV4Y2hhcnRzLXlheGlzdG9vbHRpcC1sZWZ0OmJlZm9yZSB7XFxuICBib3JkZXItbGVmdC1jb2xvcjogIzkwYTRhZVxcbn1cXG5cXG4uYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXAtbGVmdC5hcGV4Y2hhcnRzLXRoZW1lLWRhcms6YWZ0ZXIsLmFwZXhjaGFydHMteWF4aXN0b29sdGlwLWxlZnQuYXBleGNoYXJ0cy10aGVtZS1kYXJrOmJlZm9yZSB7XFxuICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgwLDAsMCwuNSlcXG59XFxuXFxuLmFwZXhjaGFydHMteWF4aXN0b29sdGlwLXJpZ2h0OmFmdGVyIHtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2VjZWZmMVxcbn1cXG5cXG4uYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXAtcmlnaHQ6YmVmb3JlIHtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzkwYTRhZVxcbn1cXG5cXG4uYXBleGNoYXJ0cy15YXhpc3Rvb2x0aXAtcmlnaHQuYXBleGNoYXJ0cy10aGVtZS1kYXJrOmFmdGVyLC5hcGV4Y2hhcnRzLXlheGlzdG9vbHRpcC1yaWdodC5hcGV4Y2hhcnRzLXRoZW1lLWRhcms6YmVmb3JlIHtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgwLDAsMCwuNSlcXG59XFxuXFxuLmFwZXhjaGFydHMteWF4aXN0b29sdGlwLmFwZXhjaGFydHMtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDFcXG59XFxuXFxuLmFwZXhjaGFydHMteWF4aXN0b29sdGlwLWhpZGRlbiB7XFxuICBkaXNwbGF5OiBub25lXFxufVxcblxcbi5hcGV4Y2hhcnRzLXhjcm9zc2hhaXJzLC5hcGV4Y2hhcnRzLXljcm9zc2hhaXJzIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IC4xNXMgZWFzZSBhbGxcXG59XFxuXFxuLmFwZXhjaGFydHMteGNyb3NzaGFpcnMuYXBleGNoYXJ0cy1hY3RpdmUsLmFwZXhjaGFydHMteWNyb3NzaGFpcnMuYXBleGNoYXJ0cy1hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG4gIHRyYW5zaXRpb246IC4xNXMgZWFzZSBhbGxcXG59XFxuXFxuLmFwZXhjaGFydHMteWNyb3NzaGFpcnMtaGlkZGVuIHtcXG4gIG9wYWNpdHk6IDBcXG59XFxuXFxuLmFwZXhjaGFydHMtc2VsZWN0aW9uLXJlY3Qge1xcbiAgY3Vyc29yOiBtb3ZlXFxufVxcblxcbi5zdmdfc2VsZWN0X2JvdW5kaW5nUmVjdCwuc3ZnX3NlbGVjdF9wb2ludHNfcm90IHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgb3BhY2l0eTogMDtcXG4gIHZpc2liaWxpdHk6IGhpZGRlblxcbn1cXG5cXG4uYXBleGNoYXJ0cy1zZWxlY3Rpb24tcmVjdCtnIC5zdmdfc2VsZWN0X2JvdW5kaW5nUmVjdCwuYXBleGNoYXJ0cy1zZWxlY3Rpb24tcmVjdCtnIC5zdmdfc2VsZWN0X3BvaW50c19yb3Qge1xcbiAgb3BhY2l0eTogMDtcXG4gIHZpc2liaWxpdHk6IGhpZGRlblxcbn1cXG5cXG4uYXBleGNoYXJ0cy1zZWxlY3Rpb24tcmVjdCtnIC5zdmdfc2VsZWN0X3BvaW50c19sLC5hcGV4Y2hhcnRzLXNlbGVjdGlvbi1yZWN0K2cgLnN2Z19zZWxlY3RfcG9pbnRzX3Ige1xcbiAgY3Vyc29yOiBldy1yZXNpemU7XFxuICBvcGFjaXR5OiAxO1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZVxcbn1cXG5cXG4uc3ZnX3NlbGVjdF9wb2ludHMge1xcbiAgZmlsbDogI2VmZWZlZjtcXG4gIHN0cm9rZTogIzMzMztcXG4gIHJ4OiAyXFxufVxcblxcbi5hcGV4Y2hhcnRzLXN2Zy5hcGV4Y2hhcnRzLXpvb21hYmxlLmhvdmVyaW5nLXpvb20ge1xcbiAgY3Vyc29yOiBjcm9zc2hhaXJcXG59XFxuXFxuLmFwZXhjaGFydHMtc3ZnLmFwZXhjaGFydHMtem9vbWFibGUuaG92ZXJpbmctcGFuIHtcXG4gIGN1cnNvcjogbW92ZVxcbn1cXG5cXG4uYXBleGNoYXJ0cy1tZW51LWljb24sLmFwZXhjaGFydHMtcGFuLWljb24sLmFwZXhjaGFydHMtcmVzZXQtaWNvbiwuYXBleGNoYXJ0cy1zZWxlY3Rpb24taWNvbiwuYXBleGNoYXJ0cy10b29sYmFyLWN1c3RvbS1pY29uLC5hcGV4Y2hhcnRzLXpvb20taWNvbiwuYXBleGNoYXJ0cy16b29taW4taWNvbiwuYXBleGNoYXJ0cy16b29tb3V0LWljb24ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIGNvbG9yOiAjNmU4MTkyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyXFxufVxcblxcbi5hcGV4Y2hhcnRzLW1lbnUtaWNvbiBzdmcsLmFwZXhjaGFydHMtcmVzZXQtaWNvbiBzdmcsLmFwZXhjaGFydHMtem9vbS1pY29uIHN2ZywuYXBleGNoYXJ0cy16b29taW4taWNvbiBzdmcsLmFwZXhjaGFydHMtem9vbW91dC1pY29uIHN2ZyB7XFxuICBmaWxsOiAjNmU4MTkyXFxufVxcblxcbi5hcGV4Y2hhcnRzLXNlbGVjdGlvbi1pY29uIHN2ZyB7XFxuICBmaWxsOiAjNDQ0O1xcbiAgdHJhbnNmb3JtOiBzY2FsZSguNzYpXFxufVxcblxcbi5hcGV4Y2hhcnRzLXRoZW1lLWRhcmsgLmFwZXhjaGFydHMtbWVudS1pY29uIHN2ZywuYXBleGNoYXJ0cy10aGVtZS1kYXJrIC5hcGV4Y2hhcnRzLXBhbi1pY29uIHN2ZywuYXBleGNoYXJ0cy10aGVtZS1kYXJrIC5hcGV4Y2hhcnRzLXJlc2V0LWljb24gc3ZnLC5hcGV4Y2hhcnRzLXRoZW1lLWRhcmsgLmFwZXhjaGFydHMtc2VsZWN0aW9uLWljb24gc3ZnLC5hcGV4Y2hhcnRzLXRoZW1lLWRhcmsgLmFwZXhjaGFydHMtdG9vbGJhci1jdXN0b20taWNvbiBzdmcsLmFwZXhjaGFydHMtdGhlbWUtZGFyayAuYXBleGNoYXJ0cy16b29tLWljb24gc3ZnLC5hcGV4Y2hhcnRzLXRoZW1lLWRhcmsgLmFwZXhjaGFydHMtem9vbWluLWljb24gc3ZnLC5hcGV4Y2hhcnRzLXRoZW1lLWRhcmsgLmFwZXhjaGFydHMtem9vbW91dC1pY29uIHN2ZyB7XFxuICBmaWxsOiAjZjNmNGY1XFxufVxcblxcbi5hcGV4Y2hhcnRzLWNhbnZhcyAuYXBleGNoYXJ0cy1yZXNldC16b29tLWljb24uYXBleGNoYXJ0cy1zZWxlY3RlZCBzdmcsLmFwZXhjaGFydHMtY2FudmFzIC5hcGV4Y2hhcnRzLXNlbGVjdGlvbi1pY29uLmFwZXhjaGFydHMtc2VsZWN0ZWQgc3ZnLC5hcGV4Y2hhcnRzLWNhbnZhcyAuYXBleGNoYXJ0cy16b29tLWljb24uYXBleGNoYXJ0cy1zZWxlY3RlZCBzdmcge1xcbiAgZmlsbDogIzAwOGZmYlxcbn1cXG5cXG4uYXBleGNoYXJ0cy10aGVtZS1saWdodCAuYXBleGNoYXJ0cy1tZW51LWljb246aG92ZXIgc3ZnLC5hcGV4Y2hhcnRzLXRoZW1lLWxpZ2h0IC5hcGV4Y2hhcnRzLXJlc2V0LWljb246aG92ZXIgc3ZnLC5hcGV4Y2hhcnRzLXRoZW1lLWxpZ2h0IC5hcGV4Y2hhcnRzLXNlbGVjdGlvbi1pY29uOm5vdCguYXBleGNoYXJ0cy1zZWxlY3RlZCk6aG92ZXIgc3ZnLC5hcGV4Y2hhcnRzLXRoZW1lLWxpZ2h0IC5hcGV4Y2hhcnRzLXpvb20taWNvbjpub3QoLmFwZXhjaGFydHMtc2VsZWN0ZWQpOmhvdmVyIHN2ZywuYXBleGNoYXJ0cy10aGVtZS1saWdodCAuYXBleGNoYXJ0cy16b29taW4taWNvbjpob3ZlciBzdmcsLmFwZXhjaGFydHMtdGhlbWUtbGlnaHQgLmFwZXhjaGFydHMtem9vbW91dC1pY29uOmhvdmVyIHN2ZyB7XFxuICBmaWxsOiAjMzMzXFxufVxcblxcbi5hcGV4Y2hhcnRzLW1lbnUtaWNvbiwuYXBleGNoYXJ0cy1zZWxlY3Rpb24taWNvbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmVcXG59XFxuXFxuLmFwZXhjaGFydHMtcmVzZXQtaWNvbiB7XFxuICBtYXJnaW4tbGVmdDogNXB4XFxufVxcblxcbi5hcGV4Y2hhcnRzLW1lbnUtaWNvbiwuYXBleGNoYXJ0cy1yZXNldC1pY29uLC5hcGV4Y2hhcnRzLXpvb20taWNvbiB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKC44NSlcXG59XFxuXFxuLmFwZXhjaGFydHMtem9vbWluLWljb24sLmFwZXhjaGFydHMtem9vbW91dC1pY29uIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoLjcpXFxufVxcblxcbi5hcGV4Y2hhcnRzLXpvb21vdXQtaWNvbiB7XFxuICBtYXJnaW4tcmlnaHQ6IDNweFxcbn1cXG5cXG4uYXBleGNoYXJ0cy1wYW4taWNvbiB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKC42Mik7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBsZWZ0OiAxcHg7XFxuICB0b3A6IDBcXG59XFxuXFxuLmFwZXhjaGFydHMtcGFuLWljb24gc3ZnIHtcXG4gIGZpbGw6ICNmZmY7XFxuICBzdHJva2U6ICM2ZTgxOTI7XFxuICBzdHJva2Utd2lkdGg6IDJcXG59XFxuXFxuLmFwZXhjaGFydHMtcGFuLWljb24uYXBleGNoYXJ0cy1zZWxlY3RlZCBzdmcge1xcbiAgc3Ryb2tlOiAjMDA4ZmZiXFxufVxcblxcbi5hcGV4Y2hhcnRzLXBhbi1pY29uOm5vdCguYXBleGNoYXJ0cy1zZWxlY3RlZCk6aG92ZXIgc3ZnIHtcXG4gIHN0cm9rZTogIzMzM1xcbn1cXG5cXG4uYXBleGNoYXJ0cy10b29sYmFyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHotaW5kZXg6IDExO1xcbiAgbWF4LXdpZHRoOiAxNzZweDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgcGFkZGluZzogMCA2cHggMnB4O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXJcXG59XFxuXFxuLmFwZXhjaGFydHMtbWVudSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMDAlO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIHBhZGRpbmc6IDNweDtcXG4gIHJpZ2h0OiAxMHB4O1xcbiAgb3BhY2l0eTogMDtcXG4gIG1pbi13aWR0aDogMTEwcHg7XFxuICB0cmFuc2l0aW9uOiAuMTVzIGVhc2UgYWxsO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmVcXG59XFxuXFxuLmFwZXhjaGFydHMtbWVudS5hcGV4Y2hhcnRzLW1lbnUtb3BlbiB7XFxuICBvcGFjaXR5OiAxO1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG4gIHRyYW5zaXRpb246IC4xNXMgZWFzZSBhbGxcXG59XFxuXFxuLmFwZXhjaGFydHMtbWVudS1pdGVtIHtcXG4gIHBhZGRpbmc6IDZweCA3cHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjdXJzb3I6IHBvaW50ZXJcXG59XFxuXFxuLmFwZXhjaGFydHMtdGhlbWUtbGlnaHQgLmFwZXhjaGFydHMtbWVudS1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6ICNlZWVcXG59XFxuXFxuLmFwZXhjaGFydHMtdGhlbWUtZGFyayAuYXBleGNoYXJ0cy1tZW51IHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsLjcpO1xcbiAgY29sb3I6ICNmZmZcXG59XFxuXFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCkge1xcbiAgLmFwZXhjaGFydHMtY2FudmFzOmhvdmVyIC5hcGV4Y2hhcnRzLXRvb2xiYXIge1xcbiAgICAgIG9wYWNpdHk6IDFcXG4gIH1cXG59XFxuXFxuLmFwZXhjaGFydHMtY2FudmFzIC5hcGV4Y2hhcnRzLWVsZW1lbnQtaGlkZGVuLC5hcGV4Y2hhcnRzLWRhdGFsYWJlbC5hcGV4Y2hhcnRzLWVsZW1lbnQtaGlkZGVuLC5hcGV4Y2hhcnRzLWhpZGUgLmFwZXhjaGFydHMtc2VyaWVzLXBvaW50cyB7XFxuICBvcGFjaXR5OiAwXFxufVxcblxcbi5hcGV4Y2hhcnRzLWRhdGFsYWJlbCwuYXBleGNoYXJ0cy1kYXRhbGFiZWwtbGFiZWwsLmFwZXhjaGFydHMtZGF0YWxhYmVsLXZhbHVlLC5hcGV4Y2hhcnRzLWRhdGFsYWJlbHMsLmFwZXhjaGFydHMtcGllLWxhYmVsIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lXFxufVxcblxcbi5hcGV4Y2hhcnRzLXBpZS1sYWJlbC1kZWxheSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgYW5pbWF0aW9uLW5hbWU6IG9wYXF1ZTtcXG4gIGFuaW1hdGlvbi1kdXJhdGlvbjogLjNzO1xcbiAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XFxuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlXFxufVxcblxcbi5hcGV4Y2hhcnRzLWFubm90YXRpb24tcmVjdCwuYXBleGNoYXJ0cy1hcmVhLXNlcmllcyAuYXBleGNoYXJ0cy1hcmVhLC5hcGV4Y2hhcnRzLWFyZWEtc2VyaWVzIC5hcGV4Y2hhcnRzLXNlcmllcy1tYXJrZXJzIC5hcGV4Y2hhcnRzLW1hcmtlci5uby1wb2ludGVyLWV2ZW50cywuYXBleGNoYXJ0cy1ncmlkbGluZSwuYXBleGNoYXJ0cy1saW5lLC5hcGV4Y2hhcnRzLWxpbmUtc2VyaWVzIC5hcGV4Y2hhcnRzLXNlcmllcy1tYXJrZXJzIC5hcGV4Y2hhcnRzLW1hcmtlci5uby1wb2ludGVyLWV2ZW50cywuYXBleGNoYXJ0cy1wb2ludC1hbm5vdGF0aW9uLWxhYmVsLC5hcGV4Y2hhcnRzLXJhZGFyLXNlcmllcyBwYXRoLC5hcGV4Y2hhcnRzLXJhZGFyLXNlcmllcyBwb2x5Z29uLC5hcGV4Y2hhcnRzLXRvb2xiYXIgc3ZnLC5hcGV4Y2hhcnRzLXRvb2x0aXAgLmFwZXhjaGFydHMtbWFya2VyLC5hcGV4Y2hhcnRzLXhheGlzLWFubm90YXRpb24tbGFiZWwsLmFwZXhjaGFydHMteWF4aXMtYW5ub3RhdGlvbi1sYWJlbCwuYXBleGNoYXJ0cy16b29tLXJlY3Qge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmVcXG59XFxuXFxuLmFwZXhjaGFydHMtbWFya2VyIHtcXG4gIHRyYW5zaXRpb246IC4xNXMgZWFzZSBhbGxcXG59XFxuXFxuLnJlc2l6ZS10cmlnZ2VycyB7XFxuICBhbmltYXRpb246IDFtcyByZXNpemVhbmltO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgb3BhY2l0eTogMDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlblxcbn1cXG5cXG4uY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUsLnJlc2l6ZS10cmlnZ2VycywucmVzaXplLXRyaWdnZXJzPmRpdiB7XFxuICBjb250ZW50OiBcIiBcIjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMFxcbn1cXG5cXG4ucmVzaXplLXRyaWdnZXJzPmRpdiB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6ICNlZWU7XFxuICBvdmVyZmxvdzogYXV0b1xcbn1cXG5cXG4uY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdpZHRoOiAyMDAlO1xcbiAgaGVpZ2h0OiAyMDAlXFxufScscj9zLnByZXBlbmQodC5jc3MpOm8uaGVhZC5hcHBlbmRDaGlsZCh0LmNzcykpfXZhciBsPXQuY3JlYXRlKHQudy5jb25maWcuc2VyaWVzLHt9KTtpZighbClyZXR1cm4gZSh0KTt0Lm1vdW50KGwpLnRoZW4oKGZ1bmN0aW9uKCl7XCJmdW5jdGlvblwiPT10eXBlb2YgdC53LmNvbmZpZy5jaGFydC5ldmVudHMubW91bnRlZCYmdC53LmNvbmZpZy5jaGFydC5ldmVudHMubW91bnRlZCh0LHQudyksdC5ldmVudHMuZmlyZUV2ZW50KFwibW91bnRlZFwiLFt0LHQud10pLGUobCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe2kodCl9KSl9ZWxzZSBpKG5ldyBFcnJvcihcIkVsZW1lbnQgbm90IGZvdW5kXCIpKX0pKX19LHtrZXk6XCJjcmVhdGVcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudztuZXcgTnQodGhpcykuaW5pdE1vZHVsZXMoKTt2YXIgYT10aGlzLncuZ2xvYmFsczsoYS5ub0RhdGE9ITEsYS5hbmltYXRpb25FbmRlZD0hMSx0aGlzLnJlc3BvbnNpdmUuY2hlY2tSZXNwb25zaXZlQ29uZmlnKGUpLGkuY29uZmlnLnhheGlzLmNvbnZlcnRlZENhdFRvTnVtZXJpYykmJm5ldyBYKGkuY29uZmlnKS5jb252ZXJ0Q2F0VG9OdW1lcmljWGF4aXMoaS5jb25maWcsdGhpcy5jdHgpO2lmKG51bGw9PT10aGlzLmVsKXJldHVybiBhLmFuaW1hdGlvbkVuZGVkPSEwLG51bGw7aWYodGhpcy5jb3JlLnNldHVwRWxlbWVudHMoKSxcInRyZWVtYXBcIj09PWkuY29uZmlnLmNoYXJ0LnR5cGUmJihpLmNvbmZpZy5ncmlkLnNob3c9ITEsaS5jb25maWcueWF4aXNbMF0uc2hvdz0hMSksMD09PWEuc3ZnV2lkdGgpcmV0dXJuIGEuYW5pbWF0aW9uRW5kZWQ9ITAsbnVsbDt2YXIgcz15LmNoZWNrQ29tYm9TZXJpZXModCk7YS5jb21ib0NoYXJ0cz1zLmNvbWJvQ2hhcnRzLGEuY29tYm9CYXJDb3VudD1zLmNvbWJvQmFyQ291bnQ7dmFyIHI9dC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YSYmMD09PXQuZGF0YS5sZW5ndGh9KSk7KDA9PT10Lmxlbmd0aHx8cikmJnRoaXMuc2VyaWVzLmhhbmRsZU5vRGF0YSgpLHRoaXMuZXZlbnRzLnNldHVwRXZlbnRIYW5kbGVycygpLHRoaXMuZGF0YS5wYXJzZURhdGEodCksdGhpcy50aGVtZS5pbml0KCksbmV3IFIodGhpcykuc2V0R2xvYmFsTWFya2VyU2l6ZSgpLHRoaXMuZm9ybWF0dGVycy5zZXRMYWJlbEZvcm1hdHRlcnMoKSx0aGlzLnRpdGxlU3VidGl0bGUuZHJhdygpLGEubm9EYXRhJiZhLmNvbGxhcHNlZFNlcmllcy5sZW5ndGghPT1hLnNlcmllcy5sZW5ndGgmJiFpLmNvbmZpZy5sZWdlbmQuc2hvd0ZvclNpbmdsZVNlcmllc3x8dGhpcy5sZWdlbmQuaW5pdCgpLHRoaXMuc2VyaWVzLmhhc0FsbFNlcmllc0VxdWFsWCgpLGEuYXhpc0NoYXJ0cyYmKHRoaXMuY29yZS5jb3JlQ2FsY3VsYXRpb25zKCksXCJjYXRlZ29yeVwiIT09aS5jb25maWcueGF4aXMudHlwZSYmdGhpcy5mb3JtYXR0ZXJzLnNldExhYmVsRm9ybWF0dGVycygpLHRoaXMuY3R4LnRvb2xiYXIubWluWD1pLmdsb2JhbHMubWluWCx0aGlzLmN0eC50b29sYmFyLm1heFg9aS5nbG9iYWxzLm1heFgpLHRoaXMuZm9ybWF0dGVycy5oZWF0bWFwTGFiZWxGb3JtYXR0ZXJzKCksbmV3IHkodGhpcykuZ2V0TGFyZ2VzdE1hcmtlclNpemUoKSx0aGlzLmRpbWVuc2lvbnMucGxvdENvb3JkcygpO3ZhciBvPXRoaXMuY29yZS54eVNldHRpbmdzKCk7dGhpcy5ncmlkLmNyZWF0ZUdyaWRNYXNrKCk7dmFyIG49dGhpcy5jb3JlLnBsb3RDaGFydFR5cGUodCxvKSxsPW5ldyBIKHRoaXMpO2wuYnJpbmdGb3J3YXJkKCksaS5jb25maWcuZGF0YUxhYmVscy5iYWNrZ3JvdW5kLmVuYWJsZWQmJmwuZGF0YUxhYmVsc0JhY2tncm91bmQoKSx0aGlzLmNvcmUuc2hpZnRHcmFwaFBvc2l0aW9uKCk7dmFyIGg9e3Bsb3Q6e2xlZnQ6aS5nbG9iYWxzLnRyYW5zbGF0ZVgsdG9wOmkuZ2xvYmFscy50cmFuc2xhdGVZLHdpZHRoOmkuZ2xvYmFscy5ncmlkV2lkdGgsaGVpZ2h0OmkuZ2xvYmFscy5ncmlkSGVpZ2h0fX07cmV0dXJue2VsR3JhcGg6bix4eVJhdGlvczpvLGVsSW5uZXI6aS5nbG9iYWxzLmRvbS5lbEdyYXBoaWNhbCxkaW1lbnNpb25zOmh9fX0se2tleTpcIm1vdW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsaT10aGlzLGE9aS53O3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocyxyKXtpZihudWxsPT09aS5lbClyZXR1cm4gcihuZXcgRXJyb3IoXCJOb3QgZW5vdWdoIGRhdGEgdG8gZGlzcGxheSBvciB0YXJnZXQgZWxlbWVudCBub3QgZm91bmRcIikpOyhudWxsPT09ZXx8YS5nbG9iYWxzLmFsbFNlcmllc0NvbGxhcHNlZCkmJmkuc2VyaWVzLmhhbmRsZU5vRGF0YSgpLFwidHJlZW1hcFwiIT09YS5jb25maWcuY2hhcnQudHlwZSYmaS5heGVzLmRyYXdBeGlzKGEuY29uZmlnLmNoYXJ0LnR5cGUsZS54eVJhdGlvcyksaS5ncmlkPW5ldyBqKGkpO3ZhciBvPWkuZ3JpZC5kcmF3R3JpZCgpO2kuYW5ub3RhdGlvbnM9bmV3IFAoaSksaS5hbm5vdGF0aW9ucy5kcmF3SW1hZ2VBbm5vcygpLGkuYW5ub3RhdGlvbnMuZHJhd1RleHRBbm5vcygpLFwiYmFja1wiPT09YS5jb25maWcuZ3JpZC5wb3NpdGlvbiYmbyYmYS5nbG9iYWxzLmRvbS5lbEdyYXBoaWNhbC5hZGQoby5lbCk7dmFyIG49bmV3IEcodC5jdHgpLGw9bmV3IHEodC5jdHgpO2lmKG51bGwhPT1vJiYobi54QXhpc0xhYmVsQ29ycmVjdGlvbnMoby54QXhpc1RpY2tXaWR0aCksbC5zZXRZQXhpc1RleHRBbGlnbm1lbnRzKCksYS5jb25maWcueWF4aXMubWFwKChmdW5jdGlvbih0LGUpey0xPT09YS5nbG9iYWxzLmlnbm9yZVlBeGlzSW5kZXhlcy5pbmRleE9mKGUpJiZsLnlBeGlzVGl0bGVSb3RhdGUoZSx0Lm9wcG9zaXRlKX0pKSksXCJiYWNrXCI9PT1hLmNvbmZpZy5hbm5vdGF0aW9ucy5wb3NpdGlvbiYmKGEuZ2xvYmFscy5kb20uUGFwZXIuYWRkKGEuZ2xvYmFscy5kb20uZWxBbm5vdGF0aW9ucyksaS5hbm5vdGF0aW9ucy5kcmF3QXhlc0Fubm90YXRpb25zKCkpLEFycmF5LmlzQXJyYXkoZS5lbEdyYXBoKSlmb3IodmFyIGg9MDtoPGUuZWxHcmFwaC5sZW5ndGg7aCsrKWEuZ2xvYmFscy5kb20uZWxHcmFwaGljYWwuYWRkKGUuZWxHcmFwaFtoXSk7ZWxzZSBhLmdsb2JhbHMuZG9tLmVsR3JhcGhpY2FsLmFkZChlLmVsR3JhcGgpO2lmKFwiZnJvbnRcIj09PWEuY29uZmlnLmdyaWQucG9zaXRpb24mJm8mJmEuZ2xvYmFscy5kb20uZWxHcmFwaGljYWwuYWRkKG8uZWwpLFwiZnJvbnRcIj09PWEuY29uZmlnLnhheGlzLmNyb3NzaGFpcnMucG9zaXRpb24mJmkuY3Jvc3NoYWlycy5kcmF3WENyb3NzaGFpcnMoKSxcImZyb250XCI9PT1hLmNvbmZpZy55YXhpc1swXS5jcm9zc2hhaXJzLnBvc2l0aW9uJiZpLmNyb3NzaGFpcnMuZHJhd1lDcm9zc2hhaXJzKCksXCJmcm9udFwiPT09YS5jb25maWcuYW5ub3RhdGlvbnMucG9zaXRpb24mJihhLmdsb2JhbHMuZG9tLlBhcGVyLmFkZChhLmdsb2JhbHMuZG9tLmVsQW5ub3RhdGlvbnMpLGkuYW5ub3RhdGlvbnMuZHJhd0F4ZXNBbm5vdGF0aW9ucygpKSwhYS5nbG9iYWxzLm5vRGF0YSl7aWYoYS5jb25maWcudG9vbHRpcC5lbmFibGVkJiYhYS5nbG9iYWxzLm5vRGF0YSYmaS53Lmdsb2JhbHMudG9vbHRpcC5kcmF3VG9vbHRpcChlLnh5UmF0aW9zKSxhLmdsb2JhbHMuYXhpc0NoYXJ0cyYmKGEuZ2xvYmFscy5pc1hOdW1lcmljfHxhLmNvbmZpZy54YXhpcy5jb252ZXJ0ZWRDYXRUb051bWVyaWN8fGEuZ2xvYmFscy5pc1JhbmdlQmFyKSkoYS5jb25maWcuY2hhcnQuem9vbS5lbmFibGVkfHxhLmNvbmZpZy5jaGFydC5zZWxlY3Rpb24mJmEuY29uZmlnLmNoYXJ0LnNlbGVjdGlvbi5lbmFibGVkfHxhLmNvbmZpZy5jaGFydC5wYW4mJmEuY29uZmlnLmNoYXJ0LnBhbi5lbmFibGVkKSYmaS56b29tUGFuU2VsZWN0aW9uLmluaXQoe3h5UmF0aW9zOmUueHlSYXRpb3N9KTtlbHNle3ZhciBjPWEuY29uZmlnLmNoYXJ0LnRvb2xiYXIudG9vbHM7W1wiem9vbVwiLFwiem9vbWluXCIsXCJ6b29tb3V0XCIsXCJzZWxlY3Rpb25cIixcInBhblwiLFwicmVzZXRcIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7Y1t0XT0hMX0pKX1hLmNvbmZpZy5jaGFydC50b29sYmFyLnNob3cmJiFhLmdsb2JhbHMuYWxsU2VyaWVzQ29sbGFwc2VkJiZpLnRvb2xiYXIuY3JlYXRlVG9vbGJhcigpfWEuZ2xvYmFscy5tZW1vcnkubWV0aG9kc1RvRXhlYy5sZW5ndGg+MCYmYS5nbG9iYWxzLm1lbW9yeS5tZXRob2RzVG9FeGVjLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QubWV0aG9kKHQucGFyYW1zLCExLHQuY29udGV4dCl9KSksYS5nbG9iYWxzLmF4aXNDaGFydHN8fGEuZ2xvYmFscy5ub0RhdGF8fGkuY29yZS5yZXNpemVOb25BeGlzQ2hhcnRzKCkscyhpKX0pKX19LHtrZXk6XCJkZXN0cm95XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy53aW5kb3dSZXNpemVIYW5kbGVyKSx0aGlzLmVsLnBhcmVudE5vZGUsdD10aGlzLnBhcmVudFJlc2l6ZUhhbmRsZXIsKGU9V3QuZ2V0KHQpKSYmKGUuZGlzY29ubmVjdCgpLFd0LmRlbGV0ZSh0KSk7dmFyIGk9dGhpcy53LmNvbmZpZy5jaGFydC5pZDtpJiZBcGV4Ll9jaGFydEluc3RhbmNlcy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuaWQ9PT14LmVzY2FwZVN0cmluZyhpKSYmQXBleC5fY2hhcnRJbnN0YW5jZXMuc3BsaWNlKGUsMSl9KSksbmV3IE90KHRoaXMuY3R4KS5jbGVhcih7aXNVcGRhdGluZzohMX0pfX0se2tleTpcInVwZGF0ZU9wdGlvbnNcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0scz0hKGFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdLHI9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxvPXRoaXMudztyZXR1cm4gby5nbG9iYWxzLnNlbGVjdGlvbj12b2lkIDAsdC5zZXJpZXMmJih0aGlzLnNlcmllcy5yZXNldFNlcmllcyghMSwhMCwhMSksdC5zZXJpZXMubGVuZ3RoJiZ0LnNlcmllc1swXS5kYXRhJiYodC5zZXJpZXM9dC5zZXJpZXMubWFwKChmdW5jdGlvbih0LGkpe3JldHVybiBlLnVwZGF0ZUhlbHBlcnMuX2V4dGVuZFNlcmllcyh0LGkpfSkpKSx0aGlzLnVwZGF0ZUhlbHBlcnMucmV2ZXJ0RGVmYXVsdEF4aXNNaW5NYXgoKSksdC54YXhpcyYmKHQ9dGhpcy51cGRhdGVIZWxwZXJzLmZvcmNlWEF4aXNVcGRhdGUodCkpLHQueWF4aXMmJih0PXRoaXMudXBkYXRlSGVscGVycy5mb3JjZVlBeGlzVXBkYXRlKHQpKSxvLmdsb2JhbHMuY29sbGFwc2VkU2VyaWVzSW5kaWNlcy5sZW5ndGg+MCYmdGhpcy5zZXJpZXMuY2xlYXJQcmV2aW91c1BhdGhzKCksdC50aGVtZSYmKHQ9dGhpcy50aGVtZS51cGRhdGVUaGVtZU9wdGlvbnModCkpLHRoaXMudXBkYXRlSGVscGVycy5fdXBkYXRlT3B0aW9ucyh0LGksYSxzLHIpfX0se2tleTpcInVwZGF0ZVNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxpPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07cmV0dXJuIHRoaXMuc2VyaWVzLnJlc2V0U2VyaWVzKCExKSx0aGlzLnVwZGF0ZUhlbHBlcnMucmV2ZXJ0RGVmYXVsdEF4aXNNaW5NYXgoKSx0aGlzLnVwZGF0ZUhlbHBlcnMuX3VwZGF0ZVNlcmllcyh0LGUsaSl9fSx7a2V5OlwiYXBwZW5kU2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxpPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0sYT10aGlzLncuY29uZmlnLnNlcmllcy5zbGljZSgpO3JldHVybiBhLnB1c2godCksdGhpcy5zZXJpZXMucmVzZXRTZXJpZXMoITEpLHRoaXMudXBkYXRlSGVscGVycy5yZXZlcnREZWZhdWx0QXhpc01pbk1heCgpLHRoaXMudXBkYXRlSGVscGVycy5fdXBkYXRlU2VyaWVzKGEsZSxpKX19LHtrZXk6XCJhcHBlbmREYXRhXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxpPXRoaXM7aS53Lmdsb2JhbHMuZGF0YUNoYW5nZWQ9ITAsaS5zZXJpZXMuZ2V0UHJldmlvdXNQYXRocygpO2Zvcih2YXIgYT1pLncuY29uZmlnLnNlcmllcy5zbGljZSgpLHM9MDtzPGEubGVuZ3RoO3MrKylpZihudWxsIT09dFtzXSYmdm9pZCAwIT09dFtzXSlmb3IodmFyIHI9MDtyPHRbc10uZGF0YS5sZW5ndGg7cisrKWFbc10uZGF0YS5wdXNoKHRbc10uZGF0YVtyXSk7cmV0dXJuIGkudy5jb25maWcuc2VyaWVzPWEsZSYmKGkudy5nbG9iYWxzLmluaXRpYWxTZXJpZXM9eC5jbG9uZShpLncuY29uZmlnLnNlcmllcykpLHRoaXMudXBkYXRlKCl9fSx7a2V5OlwidXBkYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGksYSl7bmV3IE90KGUuY3R4KS5jbGVhcih7aXNVcGRhdGluZzohMH0pO3ZhciBzPWUuY3JlYXRlKGUudy5jb25maWcuc2VyaWVzLHQpO2lmKCFzKXJldHVybiBpKGUpO2UubW91bnQocykudGhlbigoZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLncuY29uZmlnLmNoYXJ0LmV2ZW50cy51cGRhdGVkJiZlLncuY29uZmlnLmNoYXJ0LmV2ZW50cy51cGRhdGVkKGUsZS53KSxlLmV2ZW50cy5maXJlRXZlbnQoXCJ1cGRhdGVkXCIsW2UsZS53XSksZS53Lmdsb2JhbHMuaXNEaXJ0eT0hMCxpKGUpfSkpLmNhdGNoKChmdW5jdGlvbih0KXthKHQpfSkpfSkpfX0se2tleTpcImdldFN5bmNlZENoYXJ0c1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRHcm91cGVkQ2hhcnRzKCksZT1bdGhpc107cmV0dXJuIHQubGVuZ3RoJiYoZT1bXSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2UucHVzaCh0KX0pKSksZX19LHtrZXk6XCJnZXRHcm91cGVkQ2hhcnRzXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBBcGV4Ll9jaGFydEluc3RhbmNlcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe2lmKHQuZ3JvdXApcmV0dXJuITB9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC53LmNvbmZpZy5jaGFydC5ncm91cD09PWUuZ3JvdXA/ZS5jaGFydDp0fSkpfX0se2tleTpcInRvZ2dsZVNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlcmllcy50b2dnbGVTZXJpZXModCl9fSx7a2V5OlwiaGlnaGxpZ2h0U2VyaWVzT25MZWdlbmRIb3ZlclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2VyaWVzLnRvZ2dsZVNlcmllc09uSG92ZXIodCxlKX19LHtrZXk6XCJzaG93U2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXJpZXMuc2hvd1Nlcmllcyh0KX19LHtrZXk6XCJoaWRlU2VyaWVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXJpZXMuaGlkZVNlcmllcyh0KX19LHtrZXk6XCJyZXNldFNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxlPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07dGhpcy5zZXJpZXMucmVzZXRTZXJpZXModCxlKX19LHtrZXk6XCJhZGRFdmVudExpc3RlbmVyXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLmV2ZW50cy5hZGRFdmVudExpc3RlbmVyKHQsZSl9fSx7a2V5OlwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5ldmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpfX0se2tleTpcImFkZFhheGlzQW5ub3RhdGlvblwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0saT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dm9pZCAwLGE9dGhpcztpJiYoYT1pKSxhLmFubm90YXRpb25zLmFkZFhheGlzQW5ub3RhdGlvbkV4dGVybmFsKHQsZSxhKX19LHtrZXk6XCJhZGRZYXhpc0Fubm90YXRpb25cIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGk9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnZvaWQgMCxhPXRoaXM7aSYmKGE9aSksYS5hbm5vdGF0aW9ucy5hZGRZYXhpc0Fubm90YXRpb25FeHRlcm5hbCh0LGUsYSl9fSx7a2V5OlwiYWRkUG9pbnRBbm5vdGF0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp2b2lkIDAsYT10aGlzO2kmJihhPWkpLGEuYW5ub3RhdGlvbnMuYWRkUG9pbnRBbm5vdGF0aW9uRXh0ZXJuYWwodCxlLGEpfX0se2tleTpcImNsZWFyQW5ub3RhdGlvbnNcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp2b2lkIDAsZT10aGlzO3QmJihlPXQpLGUuYW5ub3RhdGlvbnMuY2xlYXJBbm5vdGF0aW9ucyhlKX19LHtrZXk6XCJyZW1vdmVBbm5vdGF0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZvaWQgMCxpPXRoaXM7ZSYmKGk9ZSksaS5hbm5vdGF0aW9ucy5yZW1vdmVBbm5vdGF0aW9uKGksdCl9fSx7a2V5OlwiZ2V0Q2hhcnRBcmVhXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53Lmdsb2JhbHMuZG9tLmJhc2VFbC5xdWVyeVNlbGVjdG9yKFwiLmFwZXhjaGFydHMtaW5uZXJcIil9fSx7a2V5OlwiZ2V0U2VyaWVzVG90YWxYUmFuZ2VcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvcmVVdGlscy5nZXRTZXJpZXNUb3RhbHNYUmFuZ2UodCxlKX19LHtrZXk6XCJnZXRIaWdoZXN0VmFsdWVJblNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsZT1uZXcgVSh0aGlzLmN0eCk7cmV0dXJuIGUuZ2V0TWluWU1heFkodCkuaGlnaGVzdFl9fSx7a2V5OlwiZ2V0TG93ZXN0VmFsdWVJblNlcmllc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsZT1uZXcgVSh0aGlzLmN0eCk7cmV0dXJuIGUuZ2V0TWluWU1heFkodCkubG93ZXN0WX19LHtrZXk6XCJnZXRTZXJpZXNUb3RhbFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudy5nbG9iYWxzLnNlcmllc1RvdGFsc319LHtrZXk6XCJ0b2dnbGVEYXRhUG9pbnRTZWxlY3Rpb25cIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnVwZGF0ZUhlbHBlcnMudG9nZ2xlRGF0YVBvaW50U2VsZWN0aW9uKHQsZSl9fSx7a2V5Olwiem9vbVhcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuY3R4LnRvb2xiYXIuem9vbVVwZGF0ZU9wdGlvbnModCxlKX19LHtrZXk6XCJzZXRMb2NhbGVcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmxvY2FsaXphdGlvbi5zZXRDdXJyZW50TG9jYWxlVmFsdWVzKHQpfX0se2tleTpcImRhdGFVUklcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFYodGhpcy5jdHgpLmRhdGFVUkkodCl9fSx7a2V5OlwiZXhwb3J0VG9DU1ZcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxlPW5ldyBWKHRoaXMuY3R4KTtyZXR1cm4gZS5leHBvcnRUb0NTVih0KX19LHtrZXk6XCJwYXBlclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudy5nbG9iYWxzLmRvbS5QYXBlcn19LHtrZXk6XCJfcGFyZW50UmVzaXplQ2FsbGJhY2tcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudy5nbG9iYWxzLmFuaW1hdGlvbkVuZGVkJiZ0aGlzLncuY29uZmlnLmNoYXJ0LnJlZHJhd09uUGFyZW50UmVzaXplJiZ0aGlzLl93aW5kb3dSZXNpemUoKX19LHtrZXk6XCJfd2luZG93UmVzaXplXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2NsZWFyVGltZW91dCh0aGlzLncuZ2xvYmFscy5yZXNpemVUaW1lciksdGhpcy53Lmdsb2JhbHMucmVzaXplVGltZXI9d2luZG93LnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC53Lmdsb2JhbHMucmVzaXplZD0hMCx0LncuZ2xvYmFscy5kYXRhQ2hhbmdlZD0hMSx0LmN0eC51cGRhdGUoKX0pLDE1MCl9fSx7a2V5OlwiX3dpbmRvd1Jlc2l6ZUhhbmRsZXJcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMudy5jb25maWcuY2hhcnQucmVkcmF3T25XaW5kb3dSZXNpemU7XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dCgpKSx0JiZ0aGlzLl93aW5kb3dSZXNpemUoKX19XSxbe2tleTpcImdldENoYXJ0QnlJRFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXguZXNjYXBlU3RyaW5nKHQpLGk9QXBleC5fY2hhcnRJbnN0YW5jZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWV9KSlbMF07cmV0dXJuIGkmJmkuY2hhcnR9fSx7a2V5OlwiaW5pdE9uTG9hZFwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hcGV4Y2hhcnRzXVwiKSxpPTA7aTxlLmxlbmd0aDtpKyspe25ldyB0KGVbaV0sSlNPTi5wYXJzZShlW2ldLmdldEF0dHJpYnV0ZShcImRhdGEtb3B0aW9uc1wiKSkpLnJlbmRlcigpfX19LHtrZXk6XCJleGVjXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmdldENoYXJ0QnlJRCh0KTtpZihpKXtpLncuZ2xvYmFscy5pc0V4ZWNDYWxsZWQ9ITA7dmFyIGE9bnVsbDtpZigtMSE9PWkucHVibGljTWV0aG9kcy5pbmRleE9mKGUpKXtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShzPjI/cy0yOjApLG89MjtvPHM7bysrKXJbby0yXT1hcmd1bWVudHNbb107YT1pW2VdLmFwcGx5KGkscil9cmV0dXJuIGF9fX0se2tleTpcIm1lcmdlXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4geC5leHRlbmQodCxlKX19XSksdH0oKTtyZXR1cm4gQnR9KSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/apexcharts/dist/apexcharts.min.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/_array-fill.js": /*!*****************************************************!*\ !*** ./node_modules/core-js/modules/_array-fill.js ***! \*****************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/modules/_to-absolute-index.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-fill.js\n"); /***/ }), /***/ "./node_modules/core-js/modules/es6.array.fill.js": /*!********************************************************!*\ !*** ./node_modules/core-js/modules/es6.array.fill.js ***! \********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\n\n$export($export.P, 'Array', { fill: __webpack_require__(/*! ./_array-fill */ \"./node_modules/core-js/modules/_array-fill.js\") });\n\n__webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/core-js/modules/_add-to-unscopables.js\")('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/es6.array.fill.js\n"); /***/ }), /***/ "./node_modules/vue-apexcharts/dist/vue-apexcharts.js": /*!************************************************************!*\ !*** ./node_modules/vue-apexcharts/dist/vue-apexcharts.js ***! \************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("(function (global, factory) {\n true ? module.exports = factory(__webpack_require__(/*! apexcharts/dist/apexcharts.min */ \"./node_modules/apexcharts/dist/apexcharts.min.js\")) :\n undefined;\n}(this, (function (ApexCharts) { 'use strict';\n\n ApexCharts = ApexCharts && ApexCharts.hasOwnProperty('default') ? ApexCharts['default'] : ApexCharts;\n\n function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var ApexChartsComponent = {\n props: {\n options: {\n type: Object\n },\n type: {\n type: String\n },\n series: {\n type: Array,\n required: true,\n default: function _default() {\n return [];\n }\n },\n width: {\n default: \"100%\"\n },\n height: {\n default: \"auto\"\n }\n },\n data: function data() {\n return {\n chart: null\n };\n },\n beforeMount: function beforeMount() {\n window.ApexCharts = ApexCharts;\n },\n mounted: function mounted() {\n this.init();\n },\n created: function created() {\n var _this = this;\n\n this.$watch(\"options\", function (options) {\n if (!_this.chart && options) {\n _this.init();\n } else {\n _this.chart.updateOptions(_this.options);\n }\n });\n this.$watch(\"series\", function (series) {\n if (!_this.chart && series) {\n _this.init();\n } else {\n _this.chart.updateSeries(_this.series);\n }\n });\n var watched = [\"type\", \"width\", \"height\"];\n watched.forEach(function (prop) {\n _this.$watch(prop, function () {\n _this.refresh();\n });\n });\n },\n beforeDestroy: function beforeDestroy() {\n if (!this.chart) {\n return;\n }\n\n this.destroy();\n },\n render: function render(createElement) {\n return createElement(\"div\");\n },\n methods: {\n init: function init() {\n var _this2 = this;\n\n var newOptions = {\n chart: {\n type: this.type || this.options.chart.type || \"line\",\n height: this.height,\n width: this.width,\n events: {}\n },\n series: this.series\n };\n Object.keys(this.$listeners).forEach(function (evt) {\n newOptions.chart.events[evt] = _this2.$listeners[evt];\n });\n var config = this.extend(this.options, newOptions);\n this.chart = new ApexCharts(this.$el, config);\n return this.chart.render();\n },\n isObject: function isObject(item) {\n return item && _typeof(item) === \"object\" && !Array.isArray(item) && item != null;\n },\n extend: function extend(target, source) {\n var _this3 = this;\n\n if (typeof Object.assign !== \"function\") {\n (function () {\n Object.assign = function (target) {\n // We must check against these specific cases.\n if (target === undefined || target === null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var _source = arguments[index];\n\n if (_source !== undefined && _source !== null) {\n for (var nextKey in _source) {\n if (_source.hasOwnProperty(nextKey)) {\n output[nextKey] = _source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n })();\n }\n\n var output = Object.assign({}, target);\n\n if (this.isObject(target) && this.isObject(source)) {\n Object.keys(source).forEach(function (key) {\n if (_this3.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, _defineProperty({}, key, source[key]));\n } else {\n output[key] = _this3.extend(target[key], source[key]);\n }\n } else {\n Object.assign(output, _defineProperty({}, key, source[key]));\n }\n });\n }\n\n return output;\n },\n refresh: function refresh() {\n this.destroy();\n return this.init();\n },\n destroy: function destroy() {\n this.chart.destroy();\n },\n updateSeries: function updateSeries(newSeries, animate) {\n return this.chart.updateSeries(newSeries, animate);\n },\n updateOptions: function updateOptions(newOptions, redrawPaths, animate, updateSyncedCharts) {\n return this.chart.updateOptions(newOptions, redrawPaths, animate, updateSyncedCharts);\n },\n toggleSeries: function toggleSeries(seriesName) {\n return this.chart.toggleSeries(seriesName);\n },\n showSeries: function showSeries(seriesName) {\n this.chart.showSeries(seriesName);\n },\n hideSeries: function hideSeries(seriesName) {\n this.chart.hideSeries(seriesName);\n },\n appendSeries: function appendSeries(newSeries, animate) {\n return this.chart.appendSeries(newSeries, animate);\n },\n resetSeries: function resetSeries() {\n this.chart.resetSeries();\n },\n zoomX: function zoomX(min, max) {\n this.chart.zoomX(min, max);\n },\n toggleDataPointSelection: function toggleDataPointSelection(seriesIndex, dataPointIndex) {\n this.chart.toggleDataPointSelection(seriesIndex, dataPointIndex);\n },\n appendData: function appendData(newData) {\n return this.chart.appendData(newData);\n },\n addText: function addText(options) {\n this.chart.addText(options);\n },\n addImage: function addImage(options) {\n this.chart.addImage(options);\n },\n addShape: function addShape(options) {\n this.chart.addShape(options);\n },\n dataURI: function dataURI() {\n return this.chart.dataURI();\n },\n setLocale: function setLocale(localeName) {\n return this.chart.setLocale(localeName);\n },\n addXaxisAnnotation: function addXaxisAnnotation(options, pushToMemory) {\n this.chart.addXaxisAnnotation(options, pushToMemory);\n },\n addYaxisAnnotation: function addYaxisAnnotation(options, pushToMemory) {\n this.chart.addYaxisAnnotation(options, pushToMemory);\n },\n addPointAnnotation: function addPointAnnotation(options, pushToMemory) {\n this.chart.addPointAnnotation(options, pushToMemory);\n },\n removeAnnotation: function removeAnnotation(id, options) {\n this.chart.removeAnnotation(id, options);\n },\n clearAnnotations: function clearAnnotations() {\n this.chart.clearAnnotations();\n }\n }\n };\n\n var VueApexCharts = ApexChartsComponent;\n window.ApexCharts = ApexCharts;\n\n VueApexCharts.install = function (Vue) {\n //adding a global method or property\n Vue.ApexCharts = ApexCharts;\n window.ApexCharts = ApexCharts; // add the instance method\n\n Object.defineProperty(Vue.prototype, '$apexcharts', {\n get: function get() {\n return ApexCharts;\n }\n });\n };\n\n return VueApexCharts;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdnVlLWFwZXhjaGFydHMvZGlzdC92dWUtYXBleGNoYXJ0cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUtYXBleGNoYXJ0cy9kaXN0L3Z1ZS1hcGV4Y2hhcnRzLmpzPzEzMjEiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2FwZXhjaGFydHMvZGlzdC9hcGV4Y2hhcnRzLm1pbicpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2FwZXhjaGFydHMvZGlzdC9hcGV4Y2hhcnRzLm1pbiddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwuVnVlQXBleENoYXJ0cyA9IGZhY3RvcnkoZ2xvYmFsLkFwZXhDaGFydHMpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChBcGV4Q2hhcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICBBcGV4Q2hhcnRzID0gQXBleENoYXJ0cyAmJiBBcGV4Q2hhcnRzLmhhc093blByb3BlcnR5KCdkZWZhdWx0JykgPyBBcGV4Q2hhcnRzWydkZWZhdWx0J10gOiBBcGV4Q2hhcnRzO1xuXG4gIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgICBfdHlwZW9mID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3R5cGVvZihvYmopO1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIEFwZXhDaGFydHNDb21wb25lbnQgPSB7XG4gICAgcHJvcHM6IHtcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0XG4gICAgICB9LFxuICAgICAgdHlwZToge1xuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICAgIH0sXG4gICAgICBzZXJpZXM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB3aWR0aDoge1xuICAgICAgICBkZWZhdWx0OiBcIjEwMCVcIlxuICAgICAgfSxcbiAgICAgIGhlaWdodDoge1xuICAgICAgICBkZWZhdWx0OiBcImF1dG9cIlxuICAgICAgfVxuICAgIH0sXG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYXJ0OiBudWxsXG4gICAgICB9O1xuICAgIH0sXG4gICAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50KCkge1xuICAgICAgd2luZG93LkFwZXhDaGFydHMgPSBBcGV4Q2hhcnRzO1xuICAgIH0sXG4gICAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH0sXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJHdhdGNoKFwib3B0aW9uc1wiLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBpZiAoIV90aGlzLmNoYXJ0ICYmIG9wdGlvbnMpIHtcbiAgICAgICAgICBfdGhpcy5pbml0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyhfdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLiR3YXRjaChcInNlcmllc1wiLCBmdW5jdGlvbiAoc2VyaWVzKSB7XG4gICAgICAgIGlmICghX3RoaXMuY2hhcnQgJiYgc2VyaWVzKSB7XG4gICAgICAgICAgX3RoaXMuaW5pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmNoYXJ0LnVwZGF0ZVNlcmllcyhfdGhpcy5zZXJpZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciB3YXRjaGVkID0gW1widHlwZVwiLCBcIndpZHRoXCIsIFwiaGVpZ2h0XCJdO1xuICAgICAgd2F0Y2hlZC5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIF90aGlzLiR3YXRjaChwcm9wLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMucmVmcmVzaCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICAgIGlmICghdGhpcy5jaGFydCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH0sXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoY3JlYXRlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICB2YXIgbmV3T3B0aW9ucyA9IHtcbiAgICAgICAgICBjaGFydDoge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlIHx8IHRoaXMub3B0aW9ucy5jaGFydC50eXBlIHx8IFwibGluZVwiLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgZXZlbnRzOiB7fVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VyaWVzOiB0aGlzLnNlcmllc1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLiRsaXN0ZW5lcnMpLmZvckVhY2goZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgIG5ld09wdGlvbnMuY2hhcnQuZXZlbnRzW2V2dF0gPSBfdGhpczIuJGxpc3RlbmVyc1tldnRdO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMuZXh0ZW5kKHRoaXMub3B0aW9ucywgbmV3T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY2hhcnQgPSBuZXcgQXBleENoYXJ0cyh0aGlzLiRlbCwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQucmVuZGVyKCk7XG4gICAgICB9LFxuICAgICAgaXNPYmplY3Q6IGZ1bmN0aW9uIGlzT2JqZWN0KGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gJiYgX3R5cGVvZihpdGVtKSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShpdGVtKSAmJiBpdGVtICE9IG51bGw7XG4gICAgICB9LFxuICAgICAgZXh0ZW5kOiBmdW5jdGlvbiBleHRlbmQodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbiA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgLy8gV2UgbXVzdCBjaGVjayBhZ2FpbnN0IHRoZXNlIHNwZWNpZmljIGNhc2VzLlxuICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcblxuICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHZhciBfc291cmNlID0gYXJndW1lbnRzW2luZGV4XTtcblxuICAgICAgICAgICAgICAgIGlmIChfc291cmNlICE9PSB1bmRlZmluZWQgJiYgX3NvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBfc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W25leHRLZXldID0gX3NvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3V0cHV0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGFyZ2V0KTtcblxuICAgICAgICBpZiAodGhpcy5pc09iamVjdCh0YXJnZXQpICYmIHRoaXMuaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMzLmlzT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gdGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ob3V0cHV0LCBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgc291cmNlW2tleV0pKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRba2V5XSA9IF90aGlzMy5leHRlbmQodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihvdXRwdXQsIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCBzb3VyY2Vba2V5XSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgIH0sXG4gICAgICByZWZyZXNoOiBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdCgpO1xuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZVNlcmllczogZnVuY3Rpb24gdXBkYXRlU2VyaWVzKG5ld1NlcmllcywgYW5pbWF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFydC51cGRhdGVTZXJpZXMobmV3U2VyaWVzLCBhbmltYXRlKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGVPcHRpb25zOiBmdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5ld09wdGlvbnMsIHJlZHJhd1BhdGhzLCBhbmltYXRlLCB1cGRhdGVTeW5jZWRDaGFydHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyhuZXdPcHRpb25zLCByZWRyYXdQYXRocywgYW5pbWF0ZSwgdXBkYXRlU3luY2VkQ2hhcnRzKTtcbiAgICAgIH0sXG4gICAgICB0b2dnbGVTZXJpZXM6IGZ1bmN0aW9uIHRvZ2dsZVNlcmllcyhzZXJpZXNOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYXJ0LnRvZ2dsZVNlcmllcyhzZXJpZXNOYW1lKTtcbiAgICAgIH0sXG4gICAgICBzaG93U2VyaWVzOiBmdW5jdGlvbiBzaG93U2VyaWVzKHNlcmllc05hbWUpIHtcbiAgICAgICAgdGhpcy5jaGFydC5zaG93U2VyaWVzKHNlcmllc05hbWUpO1xuICAgICAgfSxcbiAgICAgIGhpZGVTZXJpZXM6IGZ1bmN0aW9uIGhpZGVTZXJpZXMoc2VyaWVzTmFtZSkge1xuICAgICAgICB0aGlzLmNoYXJ0LmhpZGVTZXJpZXMoc2VyaWVzTmFtZSk7XG4gICAgICB9LFxuICAgICAgYXBwZW5kU2VyaWVzOiBmdW5jdGlvbiBhcHBlbmRTZXJpZXMobmV3U2VyaWVzLCBhbmltYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYXJ0LmFwcGVuZFNlcmllcyhuZXdTZXJpZXMsIGFuaW1hdGUpO1xuICAgICAgfSxcbiAgICAgIHJlc2V0U2VyaWVzOiBmdW5jdGlvbiByZXNldFNlcmllcygpIHtcbiAgICAgICAgdGhpcy5jaGFydC5yZXNldFNlcmllcygpO1xuICAgICAgfSxcbiAgICAgIHpvb21YOiBmdW5jdGlvbiB6b29tWChtaW4sIG1heCkge1xuICAgICAgICB0aGlzLmNoYXJ0Lnpvb21YKG1pbiwgbWF4KTtcbiAgICAgIH0sXG4gICAgICB0b2dnbGVEYXRhUG9pbnRTZWxlY3Rpb246IGZ1bmN0aW9uIHRvZ2dsZURhdGFQb2ludFNlbGVjdGlvbihzZXJpZXNJbmRleCwgZGF0YVBvaW50SW5kZXgpIHtcbiAgICAgICAgdGhpcy5jaGFydC50b2dnbGVEYXRhUG9pbnRTZWxlY3Rpb24oc2VyaWVzSW5kZXgsIGRhdGFQb2ludEluZGV4KTtcbiAgICAgIH0sXG4gICAgICBhcHBlbmREYXRhOiBmdW5jdGlvbiBhcHBlbmREYXRhKG5ld0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnQuYXBwZW5kRGF0YShuZXdEYXRhKTtcbiAgICAgIH0sXG4gICAgICBhZGRUZXh0OiBmdW5jdGlvbiBhZGRUZXh0KG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jaGFydC5hZGRUZXh0KG9wdGlvbnMpO1xuICAgICAgfSxcbiAgICAgIGFkZEltYWdlOiBmdW5jdGlvbiBhZGRJbWFnZShvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuY2hhcnQuYWRkSW1hZ2Uob3B0aW9ucyk7XG4gICAgICB9LFxuICAgICAgYWRkU2hhcGU6IGZ1bmN0aW9uIGFkZFNoYXBlKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5jaGFydC5hZGRTaGFwZShvcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICBkYXRhVVJJOiBmdW5jdGlvbiBkYXRhVVJJKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFydC5kYXRhVVJJKCk7XG4gICAgICB9LFxuICAgICAgc2V0TG9jYWxlOiBmdW5jdGlvbiBzZXRMb2NhbGUobG9jYWxlTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFydC5zZXRMb2NhbGUobG9jYWxlTmFtZSk7XG4gICAgICB9LFxuICAgICAgYWRkWGF4aXNBbm5vdGF0aW9uOiBmdW5jdGlvbiBhZGRYYXhpc0Fubm90YXRpb24ob3B0aW9ucywgcHVzaFRvTWVtb3J5KSB7XG4gICAgICAgIHRoaXMuY2hhcnQuYWRkWGF4aXNBbm5vdGF0aW9uKG9wdGlvbnMsIHB1c2hUb01lbW9yeSk7XG4gICAgICB9LFxuICAgICAgYWRkWWF4aXNBbm5vdGF0aW9uOiBmdW5jdGlvbiBhZGRZYXhpc0Fubm90YXRpb24ob3B0aW9ucywgcHVzaFRvTWVtb3J5KSB7XG4gICAgICAgIHRoaXMuY2hhcnQuYWRkWWF4aXNBbm5vdGF0aW9uKG9wdGlvbnMsIHB1c2hUb01lbW9yeSk7XG4gICAgICB9LFxuICAgICAgYWRkUG9pbnRBbm5vdGF0aW9uOiBmdW5jdGlvbiBhZGRQb2ludEFubm90YXRpb24ob3B0aW9ucywgcHVzaFRvTWVtb3J5KSB7XG4gICAgICAgIHRoaXMuY2hhcnQuYWRkUG9pbnRBbm5vdGF0aW9uKG9wdGlvbnMsIHB1c2hUb01lbW9yeSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlQW5ub3RhdGlvbjogZnVuY3Rpb24gcmVtb3ZlQW5ub3RhdGlvbihpZCwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmNoYXJ0LnJlbW92ZUFubm90YXRpb24oaWQsIG9wdGlvbnMpO1xuICAgICAgfSxcbiAgICAgIGNsZWFyQW5ub3RhdGlvbnM6IGZ1bmN0aW9uIGNsZWFyQW5ub3RhdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuY2hhcnQuY2xlYXJBbm5vdGF0aW9ucygpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgVnVlQXBleENoYXJ0cyA9IEFwZXhDaGFydHNDb21wb25lbnQ7XG4gIHdpbmRvdy5BcGV4Q2hhcnRzID0gQXBleENoYXJ0cztcblxuICBWdWVBcGV4Q2hhcnRzLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gICAgLy9hZGRpbmcgYSBnbG9iYWwgbWV0aG9kIG9yIHByb3BlcnR5XG4gICAgVnVlLkFwZXhDaGFydHMgPSBBcGV4Q2hhcnRzO1xuICAgIHdpbmRvdy5BcGV4Q2hhcnRzID0gQXBleENoYXJ0czsgLy8gYWRkIHRoZSBpbnN0YW5jZSBtZXRob2RcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGFwZXhjaGFydHMnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIEFwZXhDaGFydHM7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFZ1ZUFwZXhDaGFydHM7XG5cbn0pKSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxXQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/vue-apexcharts/dist/vue-apexcharts.js\n"); /***/ }) }]);
Copyright ©2k19 -
Hexid
|
Tex7ure