(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{"+uyH":function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.Track=void 0;var n=r(a("pVnL")),i=r(a("lwsE")),o=r(a("W8MJ")),l=r(a("PJYZ")),s=r(a("7W2i")),d=r(a("LQ03")),c=r(a("lSNA")),u=r(a("3tO9")),f=r(a("q1tI")),p=r(a("TSYQ")),h=a("3K4p"),g=function(e){var t,a,r,n,i;return r=(i=e.rtl?e.slideCount-1-e.index:e.index)<0||i>=e.slideCount,e.centerMode?(n=Math.floor(e.slidesToShow/2),a=(i-e.currentSlide)%e.slideCount==0,i>e.currentSlide-n-1&&i<=e.currentSlide+n&&(t=!0)):t=e.currentSlide<=i&&i<e.currentSlide+e.slidesToShow,{"slick-slide":!0,"slick-active":t,"slick-center":a,"slick-cloned":r,"slick-current":i===e.currentSlide}},m=function(e,t){return e.key+"-"+t},v=function(e){var t,a=[],r=[],n=[],i=f.default.Children.count(e.children),o=(0,h.lazyStartIndex)(e),l=(0,h.lazyEndIndex)(e);return f.default.Children.forEach(e.children,(function(s,d){var c,v={message:"children",index:d,slidesToScroll:e.slidesToScroll,currentSlide:e.currentSlide};c=!e.lazyLoad||e.lazyLoad&&e.lazyLoadedList.indexOf(d)>=0?s:f.default.createElement("div",null);var b=function(e){var t={};return void 0!==e.variableWidth&&!1!==e.variableWidth||(t.width=e.slideWidth),e.fade&&(t.position="relative",e.vertical?t.top=-e.index*parseInt(e.slideHeight):t.left=-e.index*parseInt(e.slideWidth),t.opacity=e.currentSlide===e.index?1:0,t.transition="opacity "+e.speed+"ms "+e.cssEase+", visibility "+e.speed+"ms "+e.cssEase),t}((0,u.default)((0,u.default)({},e),{},{index:d})),y=c.props.className||"",w=g((0,u.default)((0,u.default)({},e),{},{index:d}));if(a.push(f.default.cloneElement(c,{key:"original"+m(c,d),"data-index":d,className:(0,p.default)(w,y),tabIndex:"-1","aria-hidden":!w["slick-active"],style:(0,u.default)((0,u.default)({outline:"none"},c.props.style||{}),b),onClick:function(t){c.props&&c.props.onClick&&c.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(v)}})),e.infinite&&!1===e.fade){var S=i-d;S<=(0,h.getPreClones)(e)&&i!==e.slidesToShow&&((t=-S)>=o&&(c=s),w=g((0,u.default)((0,u.default)({},e),{},{index:t})),r.push(f.default.cloneElement(c,{key:"precloned"+m(c,t),"data-index":t,tabIndex:"-1",className:(0,p.default)(w,y),"aria-hidden":!w["slick-active"],style:(0,u.default)((0,u.default)({},c.props.style||{}),b),onClick:function(t){c.props&&c.props.onClick&&c.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(v)}}))),i!==e.slidesToShow&&((t=i+d)<l&&(c=s),w=g((0,u.default)((0,u.default)({},e),{},{index:t})),n.push(f.default.cloneElement(c,{key:"postcloned"+m(c,t),"data-index":t,tabIndex:"-1",className:(0,p.default)(w,y),"aria-hidden":!w["slick-active"],style:(0,u.default)((0,u.default)({},c.props.style||{}),b),onClick:function(t){c.props&&c.props.onClick&&c.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(v)}})))}})),e.rtl?r.concat(a,n).reverse():r.concat(a,n)},b=function(e){(0,s.default)(a,e);var t=(0,d.default)(a);function a(){var e;(0,i.default)(this,a);for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return e=t.call.apply(t,[this].concat(n)),(0,c.default)((0,l.default)(e),"node",null),(0,c.default)((0,l.default)(e),"handleRef",(function(t){e.node=t})),e}return(0,o.default)(a,[{key:"render",value:function(){var e=v(this.props),t=this.props,a={onMouseEnter:t.onMouseEnter,onMouseOver:t.onMouseOver,onMouseLeave:t.onMouseLeave};return f.default.createElement("div",(0,n.default)({ref:this.handleRef,className:"slick-track",style:this.props.trackStyle},a),e)}}]),a}(f.default.PureComponent);t.Track=b},"/kpp":function(e,t,a){"use strict";var r=a("lSNA"),n=a.n(r),i=a("pVnL"),o=a.n(i),l=a("cDf5"),s=a.n(l),d=a("q1tI"),c=a("TSYQ"),u=a.n(c),f=a("o/2+"),p=a("H84U"),h=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]])}return a};var g=d.forwardRef((function(e,t){var a=function(a){var r,i=a.getPrefixCls,l=a.direction,c=e.prefixCls,p=e.span,g=e.order,m=e.offset,v=e.push,b=e.pull,y=e.className,w=e.children,S=e.flex,k=e.style,x=h(e,["prefixCls","span","order","offset","push","pull","className","children","flex","style"]),O=i("col",c),E={};["xs","sm","md","lg","xl","xxl"].forEach((function(t){var a,r={},i=e[t];"number"==typeof i?r.span=i:"object"===s()(i)&&(r=i||{}),delete x[t],E=o()(o()({},E),(a={},n()(a,"".concat(O,"-").concat(t,"-").concat(r.span),void 0!==r.span),n()(a,"".concat(O,"-").concat(t,"-order-").concat(r.order),r.order||0===r.order),n()(a,"".concat(O,"-").concat(t,"-offset-").concat(r.offset),r.offset||0===r.offset),n()(a,"".concat(O,"-").concat(t,"-push-").concat(r.push),r.push||0===r.push),n()(a,"".concat(O,"-").concat(t,"-pull-").concat(r.pull),r.pull||0===r.pull),n()(a,"".concat(O,"-rtl"),"rtl"===l),a))}));var C=u()(O,(r={},n()(r,"".concat(O,"-").concat(p),void 0!==p),n()(r,"".concat(O,"-order-").concat(g),g),n()(r,"".concat(O,"-offset-").concat(m),m),n()(r,"".concat(O,"-push-").concat(v),v),n()(r,"".concat(O,"-pull-").concat(b),b),r),y,E);return d.createElement(f.a.Consumer,null,(function(e){var a=e.gutter,r=o()({},k);return a&&(r=o()(o()(o()({},a[0]>0?{paddingLeft:a[0]/2,paddingRight:a[0]/2}:{}),a[1]>0?{paddingTop:a[1]/2,paddingBottom:a[1]/2}:{}),r)),S&&(r.flex=function(e){return"number"==typeof e?"".concat(e," ").concat(e," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(e)?"0 0 ".concat(e):e}(S)),d.createElement("div",o()({},x,{style:r,className:C,ref:t}),w)}))};return d.createElement(p.a,null,a)}));g.displayName="Col",t.a=g},"3Fjq":function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.NextArrow=t.PrevArrow=void 0;var n=r(a("pVnL")),i=r(a("3tO9")),o=r(a("lwsE")),l=r(a("W8MJ")),s=r(a("7W2i")),d=r(a("LQ03")),c=r(a("q1tI")),u=r(a("TSYQ")),f=a("3K4p"),p=function(e){(0,s.default)(a,e);var t=(0,d.default)(a);function a(){return(0,o.default)(this,a),t.apply(this,arguments)}return(0,l.default)(a,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-prev":!0},t=this.clickHandler.bind(this,{message:"previous"});!this.props.infinite&&(0===this.props.currentSlide||this.props.slideCount<=this.props.slidesToShow)&&(e["slick-disabled"]=!0,t=null);var a={key:"0","data-role":"none",className:(0,u.default)(e),style:{display:"block"},onClick:t},r={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.prevArrow?c.default.cloneElement(this.props.prevArrow,(0,i.default)((0,i.default)({},a),r)):c.default.createElement("button",(0,n.default)({key:"0",type:"button"},a)," ","Previous")}}]),a}(c.default.PureComponent);t.PrevArrow=p;var h=function(e){(0,s.default)(a,e);var t=(0,d.default)(a);function a(){return(0,o.default)(this,a),t.apply(this,arguments)}return(0,l.default)(a,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-next":!0},t=this.clickHandler.bind(this,{message:"next"});(0,f.canGoNext)(this.props)||(e["slick-disabled"]=!0,t=null);var a={key:"1","data-role":"none",className:(0,u.default)(e),style:{display:"block"},onClick:t},r={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.nextArrow?c.default.cloneElement(this.props.nextArrow,(0,i.default)((0,i.default)({},a),r)):c.default.createElement("button",(0,n.default)({key:"1",type:"button"},a)," ","Next")}}]),a}(c.default.PureComponent);t.NextArrow=h},"3K4p":function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.canUseDOM=t.slidesOnLeft=t.slidesOnRight=t.siblingDirection=t.getTotalSlides=t.getPostClones=t.getPreClones=t.getTrackLeft=t.getTrackAnimateCSS=t.getTrackCSS=t.checkSpecKeys=t.getSlideCount=t.checkNavigable=t.getNavigableIndexes=t.swipeEnd=t.swipeMove=t.swipeStart=t.keyHandler=t.changeSlide=t.slideHandler=t.initializedState=t.extractObject=t.canGoNext=t.getSwipeDirection=t.getHeight=t.getWidth=t.lazySlidesOnRight=t.lazySlidesOnLeft=t.lazyEndIndex=t.lazyStartIndex=t.getRequiredLazySlides=t.getOnDemandLazySlides=void 0;var n=r(a("3tO9")),i=r(a("q1tI")),o=function(e){for(var t=[],a=l(e),r=s(e),n=a;n<r;n++)e.lazyLoadedList.indexOf(n)<0&&t.push(n);return t};t.getOnDemandLazySlides=o;t.getRequiredLazySlides=function(e){for(var t=[],a=l(e),r=s(e),n=a;n<r;n++)t.push(n);return t};var l=function(e){return e.currentSlide-d(e)};t.lazyStartIndex=l;var s=function(e){return e.currentSlide+c(e)};t.lazyEndIndex=s;var d=function(e){return e.centerMode?Math.floor(e.slidesToShow/2)+(parseInt(e.centerPadding)>0?1:0):0};t.lazySlidesOnLeft=d;var c=function(e){return e.centerMode?Math.floor((e.slidesToShow-1)/2)+1+(parseInt(e.centerPadding)>0?1:0):e.slidesToShow};t.lazySlidesOnRight=c;var u=function(e){return e&&e.offsetWidth||0};t.getWidth=u;var f=function(e){return e&&e.offsetHeight||0};t.getHeight=f;var p=function(e){var t,a,r,n,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t=e.startX-e.curX,a=e.startY-e.curY,r=Math.atan2(a,t),(n=Math.round(180*r/Math.PI))<0&&(n=360-Math.abs(n)),n<=45&&n>=0||n<=360&&n>=315?"left":n>=135&&n<=225?"right":!0===i?n>=35&&n<=135?"up":"down":"vertical"};t.getSwipeDirection=p;var h=function(e){var t=!0;return e.infinite||(e.centerMode&&e.currentSlide>=e.slideCount-1||e.slideCount<=e.slidesToShow||e.currentSlide>=e.slideCount-e.slidesToShow)&&(t=!1),t};t.canGoNext=h;t.extractObject=function(e,t){var a={};return t.forEach((function(t){return a[t]=e[t]})),a};t.initializedState=function(e){var t,a=i.default.Children.count(e.children),r=e.listRef,l=Math.ceil(u(r)),s=e.trackRef&&e.trackRef.node,d=Math.ceil(u(s));if(e.vertical)t=l;else{var c=e.centerMode&&2*parseInt(e.centerPadding);"string"==typeof e.centerPadding&&"%"===e.centerPadding.slice(-1)&&(c*=l/100),t=Math.ceil((l-c)/e.slidesToShow)}var p=r&&f(r.querySelector('[data-index="0"]')),h=p*e.slidesToShow,g=void 0===e.currentSlide?e.initialSlide:e.currentSlide;e.rtl&&void 0===e.currentSlide&&(g=a-1-e.initialSlide);var m=e.lazyLoadedList||[],v=o((0,n.default)((0,n.default)({},e),{},{currentSlide:g,lazyLoadedList:m}));m.concat(v);var b={slideCount:a,slideWidth:t,listWidth:l,trackWidth:d,currentSlide:g,slideHeight:p,listHeight:h,lazyLoadedList:m};return null===e.autoplaying&&e.autoplay&&(b.autoplaying="playing"),b};t.slideHandler=function(e){var t=e.waitForAnimate,a=e.animating,r=e.fade,i=e.infinite,l=e.index,s=e.slideCount,d=e.lazyLoadedList,c=e.lazyLoad,u=e.currentSlide,f=e.centerMode,p=e.slidesToScroll,g=e.slidesToShow,m=e.useCSS;if(t&&a)return{};var v,b,k,x=l,O={},E={};if(r){if(!i&&(l<0||l>=s))return{};l<0?x=l+s:l>=s&&(x=l-s),c&&d.indexOf(x)<0&&d.push(x),O={animating:!0,currentSlide:x,lazyLoadedList:d},E={animating:!1}}else v=x,x<0?(v=x+s,i?s%p!=0&&(v=s-s%p):v=0):!h(e)&&x>u?x=v=u:f&&x>=s?(x=i?s:s-1,v=i?0:s-1):x>=s&&(v=x-s,i?s%p!=0&&(v=0):v=s-g),b=S((0,n.default)((0,n.default)({},e),{},{slideIndex:x})),k=S((0,n.default)((0,n.default)({},e),{},{slideIndex:v})),i||(b===k&&(x=v),b=k),c&&d.concat(o((0,n.default)((0,n.default)({},e),{},{currentSlide:x}))),m?(O={animating:!0,currentSlide:v,trackStyle:w((0,n.default)((0,n.default)({},e),{},{left:b})),lazyLoadedList:d},E={animating:!1,currentSlide:v,trackStyle:y((0,n.default)((0,n.default)({},e),{},{left:k})),swipeLeft:null}):O={currentSlide:v,trackStyle:y((0,n.default)((0,n.default)({},e),{},{left:k})),lazyLoadedList:d};return{state:O,nextState:E}};t.changeSlide=function(e,t){var a,r,i,o,l=e.slidesToScroll,s=e.slidesToShow,d=e.slideCount,c=e.currentSlide,u=e.lazyLoad,f=e.infinite;if(a=d%l!=0?0:(d-c)%l,"previous"===t.message)o=c-(i=0===a?l:s-a),u&&!f&&(o=-1===(r=c-i)?d-1:r);else if("next"===t.message)o=c+(i=0===a?l:a),u&&!f&&(o=(c+l)%d+a);else if("dots"===t.message){if((o=t.index*t.slidesToScroll)===t.currentSlide)return null}else if("children"===t.message){if((o=t.index)===t.currentSlide)return null;if(f){var p=E((0,n.default)((0,n.default)({},e),{},{targetSlide:o}));o>t.currentSlide&&"left"===p?o-=d:o<t.currentSlide&&"right"===p&&(o+=d)}}else if("index"===t.message&&(o=Number(t.index))===t.currentSlide)return null;return o};t.keyHandler=function(e,t,a){return e.target.tagName.match("TEXTAREA|INPUT|SELECT")||!t?"":37===e.keyCode?a?"next":"previous":39===e.keyCode?a?"previous":"next":""};t.swipeStart=function(e,t,a){return"IMG"===e.target.tagName&&e.preventDefault(),!t||!a&&-1!==e.type.indexOf("mouse")?"":{dragging:!0,touchObject:{startX:e.touches?e.touches[0].pageX:e.clientX,startY:e.touches?e.touches[0].pageY:e.clientY,curX:e.touches?e.touches[0].pageX:e.clientX,curY:e.touches?e.touches[0].pageY:e.clientY}}};t.swipeMove=function(e,t){var a=t.scrolling,r=t.animating,i=t.vertical,o=t.swipeToSlide,l=t.verticalSwiping,s=t.rtl,d=t.currentSlide,c=t.edgeFriction,u=t.edgeDragged,f=t.onEdge,g=t.swiped,m=t.swiping,v=t.slideCount,b=t.slidesToScroll,w=t.infinite,k=t.touchObject,x=t.swipeEvent,O=t.listHeight,E=t.listWidth;if(!a){if(r)return e.preventDefault();i&&o&&l&&e.preventDefault();var C,T={},L=S(t);k.curX=e.touches?e.touches[0].pageX:e.clientX,k.curY=e.touches?e.touches[0].pageY:e.clientY,k.swipeLength=Math.round(Math.sqrt(Math.pow(k.curX-k.startX,2)));var z=Math.round(Math.sqrt(Math.pow(k.curY-k.startY,2)));if(!l&&!m&&z>10)return{scrolling:!0};l&&(k.swipeLength=z);var j=(s?-1:1)*(k.curX>k.startX?1:-1);l&&(j=k.curY>k.startY?1:-1);var M=Math.ceil(v/b),P=p(t.touchObject,l),R=k.swipeLength;return w||(0===d&&"right"===P||d+1>=M&&"left"===P||!h(t)&&"left"===P)&&(R=k.swipeLength*c,!1===u&&f&&(f(P),T.edgeDragged=!0)),!g&&x&&(x(P),T.swiped=!0),C=i?L+R*(O/E)*j:s?L-R*j:L+R*j,l&&(C=L+R*j),T=(0,n.default)((0,n.default)({},T),{},{touchObject:k,swipeLeft:C,trackStyle:y((0,n.default)((0,n.default)({},t),{},{left:C}))}),Math.abs(k.curX-k.startX)<.8*Math.abs(k.curY-k.startY)?T:(k.swipeLength>10&&(T.swiping=!0,e.preventDefault()),T)}};t.swipeEnd=function(e,t){var a=t.dragging,r=t.swipe,i=t.touchObject,o=t.listWidth,l=t.touchThreshold,s=t.verticalSwiping,d=t.listHeight,c=t.currentSlide,u=t.swipeToSlide,f=t.scrolling,h=t.onSwipe;if(!a)return r&&e.preventDefault(),{};var g=s?d/l:o/l,b=p(i,s),y={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(f)return y;if(!i.swipeLength)return y;if(i.swipeLength>g){var k,x;switch(e.preventDefault(),h&&h(b),b){case"left":case"up":x=c+v(t),k=u?m(t,x):x,y.currentDirection=0;break;case"right":case"down":x=c-v(t),k=u?m(t,x):x,y.currentDirection=1;break;default:k=c}y.triggerSlideHandler=k}else{var O=S(t);y.trackStyle=w((0,n.default)((0,n.default)({},t),{},{left:O}))}return y};var g=function(e){for(var t=e.infinite?2*e.slideCount:e.slideCount,a=e.infinite?-1*e.slidesToShow:0,r=e.infinite?-1*e.slidesToShow:0,n=[];a<t;)n.push(a),a=r+e.slidesToScroll,r+=Math.min(e.slidesToScroll,e.slidesToShow);return n};t.getNavigableIndexes=g;var m=function(e,t){var a=g(e),r=0;if(t>a[a.length-1])t=a[a.length-1];else for(var n in a){if(t<a[n]){t=r;break}r=a[n]}return t};t.checkNavigable=m;var v=function(e){var t=e.centerMode?e.slideWidth*Math.floor(e.slidesToShow/2):0;if(e.swipeToSlide){var a,r=e.listRef.querySelectorAll(".slick-slide");if(Array.from(r).every((function(r){if(e.vertical){if(r.offsetTop+f(r)/2>-1*e.swipeLeft)return a=r,!1}else if(r.offsetLeft-t+u(r)/2>-1*e.swipeLeft)return a=r,!1;return!0})),!a)return 0;var n=!0===e.rtl?e.slideCount-e.currentSlide:e.currentSlide;return Math.abs(a.dataset.index-n)||1}return e.slidesToScroll};t.getSlideCount=v;var b=function(e,t){return t.reduce((function(t,a){return t&&e.hasOwnProperty(a)}),!0)?null:console.error("Keys Missing:",e)};t.checkSpecKeys=b;var y=function(e){var t,a;b(e,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var r=e.slideCount+2*e.slidesToShow;e.vertical?a=r*e.slideHeight:t=O(e)*e.slideWidth;var i={opacity:1,transition:"",WebkitTransition:""};if(e.useTransform){var o=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",l=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",s=e.vertical?"translateY("+e.left+"px)":"translateX("+e.left+"px)";i=(0,n.default)((0,n.default)({},i),{},{WebkitTransform:o,transform:l,msTransform:s})}else e.vertical?i.top=e.left:i.left=e.left;return e.fade&&(i={opacity:1}),t&&(i.width=t),a&&(i.height=a),window&&!window.addEventListener&&window.attachEvent&&(e.vertical?i.marginTop=e.left+"px":i.marginLeft=e.left+"px"),i};t.getTrackCSS=y;var w=function(e){b(e,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var t=y(e);return e.useTransform?(t.WebkitTransition="-webkit-transform "+e.speed+"ms "+e.cssEase,t.transition="transform "+e.speed+"ms "+e.cssEase):e.vertical?t.transition="top "+e.speed+"ms "+e.cssEase:t.transition="left "+e.speed+"ms "+e.cssEase,t};t.getTrackAnimateCSS=w;var S=function(e){if(e.unslick)return 0;b(e,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var t,a,r=e.slideIndex,n=e.trackRef,i=e.infinite,o=e.centerMode,l=e.slideCount,s=e.slidesToShow,d=e.slidesToScroll,c=e.slideWidth,u=e.listWidth,f=e.variableWidth,p=e.slideHeight,h=e.fade,g=e.vertical;if(h||1===e.slideCount)return 0;var m=0;if(i?(m=-k(e),l%d!=0&&r+d>l&&(m=-(r>l?s-(r-l):l%d)),o&&(m+=parseInt(s/2))):(l%d!=0&&r+d>l&&(m=s-l%d),o&&(m=parseInt(s/2))),t=g?r*p*-1+m*p:r*c*-1+m*c,!0===f){var v,y=n&&n.node;if(v=r+k(e),t=(a=y&&y.childNodes[v])?-1*a.offsetLeft:0,!0===o){v=i?r+k(e):r,a=y&&y.children[v],t=0;for(var w=0;w<v;w++)t-=y&&y.children[w]&&y.children[w].offsetWidth;t-=parseInt(e.centerPadding),t+=a&&(u-a.offsetWidth)/2}}return t};t.getTrackLeft=S;var k=function(e){return e.unslick||!e.infinite?0:e.variableWidth?e.slideCount:e.slidesToShow+(e.centerMode?1:0)};t.getPreClones=k;var x=function(e){return e.unslick||!e.infinite?0:e.slideCount};t.getPostClones=x;var O=function(e){return 1===e.slideCount?1:k(e)+e.slideCount+x(e)};t.getTotalSlides=O;var E=function(e){return e.targetSlide>e.currentSlide?e.targetSlide>e.currentSlide+C(e)?"left":"right":e.targetSlide<e.currentSlide-T(e)?"right":"left"};t.siblingDirection=E;var C=function(e){var t=e.slidesToShow,a=e.centerMode,r=e.rtl,n=e.centerPadding;if(a){var i=(t-1)/2+1;return parseInt(n)>0&&(i+=1),r&&t%2==0&&(i+=1),i}return r?0:t-1};t.slidesOnRight=C;var T=function(e){var t=e.slidesToShow,a=e.centerMode,r=e.rtl,n=e.centerPadding;if(a){var i=(t-1)/2+1;return parseInt(n)>0&&(i+=1),r||t%2!=0||(i+=1),i}return r?t-1:0};t.slidesOnLeft=T;t.canUseDOM=function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}},"4t1q":function(e,t,a){"use strict";a("SchZ"),a("TZyB")},"9eSz":function(e,t,a){"use strict";var r=a("TqRt");t.__esModule=!0,t.default=void 0;var n,i=r(a("PJYZ")),o=r(a("VbXa")),l=r(a("8OQS")),s=r(a("pVnL")),d=r(a("q1tI")),c=r(a("17x9")),u=function(e){var t=(0,s.default)({},e),a=t.resolutions,r=t.sizes,n=t.critical;return a&&(t.fixed=a,delete t.resolutions),r&&(t.fluid=r,delete t.sizes),n&&(t.loading="eager"),t.fluid&&(t.fluid=k([].concat(t.fluid))),t.fixed&&(t.fixed=k([].concat(t.fixed))),t},f=function(e){var t=e.media;return!!t&&(b&&!!window.matchMedia(t).matches)},p=function(e){var t=e.fluid,a=e.fixed,r=h(t||a||[]);return r&&r.src},h=function(e){if(b&&function(e){return!!e&&Array.isArray(e)&&e.some((function(e){return void 0!==e.media}))}(e)){var t=e.findIndex(f);if(-1!==t)return e[t];var a=e.findIndex((function(e){return void 0===e.media}));if(-1!==a)return e[a]}return e[0]},g=Object.create({}),m=function(e){var t=u(e),a=p(t);return g[a]||!1},v="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype,b="undefined"!=typeof window,y=b&&window.IntersectionObserver,w=new WeakMap;function S(e){return e.map((function(e){var t=e.src,a=e.srcSet,r=e.srcSetWebp,n=e.media,i=e.sizes;return d.default.createElement(d.default.Fragment,{key:t},r&&d.default.createElement("source",{type:"image/webp",media:n,srcSet:r,sizes:i}),d.default.createElement("source",{media:n,srcSet:a,sizes:i}))}))}function k(e){var t=[],a=[];return e.forEach((function(e){return(e.media?t:a).push(e)})),[].concat(t,a)}function x(e){return e.map((function(e){var t=e.src,a=e.media,r=e.tracedSVG;return d.default.createElement("source",{key:t,media:a,srcSet:r})}))}function O(e){return e.map((function(e){var t=e.src,a=e.media,r=e.base64;return d.default.createElement("source",{key:t,media:a,srcSet:r})}))}function E(e,t){var a=e.srcSet,r=e.srcSetWebp,n=e.media,i=e.sizes;return"<source "+(t?"type='image/webp' ":"")+(n?'media="'+n+'" ':"")+'srcset="'+(t?r:a)+'" '+(i?'sizes="'+i+'" ':"")+"/>"}var C=function(e,t){var a=(void 0===n&&"undefined"!=typeof window&&window.IntersectionObserver&&(n=new window.IntersectionObserver((function(e){e.forEach((function(e){if(w.has(e.target)){var t=w.get(e.target);(e.isIntersecting||e.intersectionRatio>0)&&(n.unobserve(e.target),w.delete(e.target),t())}}))}),{rootMargin:"200px"})),n);return a&&(a.observe(e),w.set(e,t)),function(){a.unobserve(e),w.delete(e)}},T=function(e){var t=e.src?'src="'+e.src+'" ':'src="" ',a=e.sizes?'sizes="'+e.sizes+'" ':"",r=e.srcSet?'srcset="'+e.srcSet+'" ':"",n=e.title?'title="'+e.title+'" ':"",i=e.alt?'alt="'+e.alt+'" ':'alt="" ',o=e.width?'width="'+e.width+'" ':"",l=e.height?'height="'+e.height+'" ':"",s=e.crossOrigin?'crossorigin="'+e.crossOrigin+'" ':"",d=e.loading?'loading="'+e.loading+'" ':"",c=e.draggable?'draggable="'+e.draggable+'" ':"";return"<picture>"+e.imageVariants.map((function(e){return(e.srcSetWebp?E(e,!0):"")+E(e)})).join("")+"<img "+d+o+l+a+r+t+i+n+s+c+'style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture>'},L=d.default.forwardRef((function(e,t){var a=e.src,r=e.imageVariants,n=e.generateSources,i=e.spreadProps,o=e.ariaHidden,l=d.default.createElement(z,(0,s.default)({ref:t,src:a},i,{ariaHidden:o}));return r.length>1?d.default.createElement("picture",null,n(r),l):l})),z=d.default.forwardRef((function(e,t){var a=e.sizes,r=e.srcSet,n=e.src,i=e.style,o=e.onLoad,c=e.onError,u=e.loading,f=e.draggable,p=e.ariaHidden,h=(0,l.default)(e,["sizes","srcSet","src","style","onLoad","onError","loading","draggable","ariaHidden"]);return d.default.createElement("img",(0,s.default)({"aria-hidden":p,sizes:a,srcSet:r,src:n},h,{onLoad:o,onError:c,ref:t,loading:u,draggable:f,style:(0,s.default)({position:"absolute",top:0,left:0,width:"100%",height:"100%",objectFit:"cover",objectPosition:"center"},i)}))}));z.propTypes={style:c.default.object,onError:c.default.func,onLoad:c.default.func};var j=function(e){function t(t){var a;(a=e.call(this,t)||this).seenBefore=b&&m(t),a.isCritical="eager"===t.loading||t.critical,a.addNoScript=!(a.isCritical&&!t.fadeIn),a.useIOSupport=!v&&y&&!a.isCritical&&!a.seenBefore;var r=a.isCritical||b&&(v||!a.useIOSupport);return a.state={isVisible:r,imgLoaded:!1,imgCached:!1,fadeIn:!a.seenBefore&&t.fadeIn},a.imageRef=d.default.createRef(),a.placeholderRef=t.placeholderRef||d.default.createRef(),a.handleImageLoaded=a.handleImageLoaded.bind((0,i.default)(a)),a.handleRef=a.handleRef.bind((0,i.default)(a)),a}(0,o.default)(t,e);var a=t.prototype;return a.componentDidMount=function(){if(this.state.isVisible&&"function"==typeof this.props.onStartLoad&&this.props.onStartLoad({wasCached:m(this.props)}),this.isCritical){var e=this.imageRef.current;e&&e.complete&&this.handleImageLoaded()}},a.componentWillUnmount=function(){this.cleanUpListeners&&this.cleanUpListeners()},a.handleRef=function(e){var t=this;this.useIOSupport&&e&&(this.cleanUpListeners=C(e,(function(){var e=m(t.props);t.state.isVisible||"function"!=typeof t.props.onStartLoad||t.props.onStartLoad({wasCached:e}),t.setState({isVisible:!0},(function(){t.setState({imgLoaded:e,imgCached:!(!t.imageRef.current||!t.imageRef.current.currentSrc)})}))})))},a.handleImageLoaded=function(){var e,t,a;e=this.props,t=u(e),(a=p(t))&&(g[a]=!0),this.setState({imgLoaded:!0}),this.props.onLoad&&this.props.onLoad()},a.render=function(){var e=u(this.props),t=e.title,a=e.alt,r=e.className,n=e.style,i=void 0===n?{}:n,o=e.imgStyle,l=void 0===o?{}:o,c=e.placeholderStyle,f=void 0===c?{}:c,p=e.placeholderClassName,g=e.fluid,m=e.fixed,v=e.backgroundColor,b=e.durationFadeIn,y=e.Tag,w=e.itemProp,k=e.loading,E=e.draggable,C=!1===this.state.fadeIn||this.state.imgLoaded,j=!0===this.state.fadeIn&&!this.state.imgCached,M=(0,s.default)({opacity:C?1:0,transition:j?"opacity "+b+"ms":"none"},l),P="boolean"==typeof v?"lightgray":v,R={transitionDelay:b+"ms"},N=(0,s.default)({opacity:this.state.imgLoaded?0:1},j&&R,l,f),H={title:t,alt:this.state.isVisible?"":a,style:N,className:p,itemProp:w};if(g){var I=g,D=h(g);return d.default.createElement(y,{className:(r||"")+" gatsby-image-wrapper",style:(0,s.default)({position:"relative",overflow:"hidden",maxWidth:D.maxWidth?D.maxWidth+"px":null,maxHeight:D.maxHeight?D.maxHeight+"px":null},i),ref:this.handleRef,key:"fluid-"+JSON.stringify(D.srcSet)},d.default.createElement(y,{"aria-hidden":!0,style:{width:"100%",paddingBottom:100/D.aspectRatio+"%"}}),P&&d.default.createElement(y,{"aria-hidden":!0,title:t,style:(0,s.default)({backgroundColor:P,position:"absolute",top:0,bottom:0,opacity:this.state.imgLoaded?0:1,right:0,left:0},j&&R)}),D.base64&&d.default.createElement(L,{ariaHidden:!0,ref:this.placeholderRef,src:D.base64,spreadProps:H,imageVariants:I,generateSources:O}),D.tracedSVG&&d.default.createElement(L,{ariaHidden:!0,ref:this.placeholderRef,src:D.tracedSVG,spreadProps:H,imageVariants:I,generateSources:x}),this.state.isVisible&&d.default.createElement("picture",null,S(I),d.default.createElement(z,{alt:a,title:t,sizes:D.sizes,src:D.src,crossOrigin:this.props.crossOrigin,srcSet:D.srcSet,style:M,ref:this.imageRef,onLoad:this.handleImageLoaded,onError:this.props.onError,itemProp:w,loading:k,draggable:E})),this.addNoScript&&d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:T((0,s.default)({alt:a,title:t,loading:k},D,{imageVariants:I}))}}))}if(m){var A=m,F=h(m),W=(0,s.default)({position:"relative",overflow:"hidden",display:"inline-block",width:F.width,height:F.height},i);return"inherit"===i.display&&delete W.display,d.default.createElement(y,{className:(r||"")+" gatsby-image-wrapper",style:W,ref:this.handleRef,key:"fixed-"+JSON.stringify(F.srcSet)},P&&d.default.createElement(y,{"aria-hidden":!0,title:t,style:(0,s.default)({backgroundColor:P,width:F.width,opacity:this.state.imgLoaded?0:1,height:F.height},j&&R)}),F.base64&&d.default.createElement(L,{ariaHidden:!0,ref:this.placeholderRef,src:F.base64,spreadProps:H,imageVariants:A,generateSources:O}),F.tracedSVG&&d.default.createElement(L,{ariaHidden:!0,ref:this.placeholderRef,src:F.tracedSVG,spreadProps:H,imageVariants:A,generateSources:x}),this.state.isVisible&&d.default.createElement("picture",null,S(A),d.default.createElement(z,{alt:a,title:t,width:F.width,height:F.height,sizes:F.sizes,src:F.src,crossOrigin:this.props.crossOrigin,srcSet:F.srcSet,style:M,ref:this.imageRef,onLoad:this.handleImageLoaded,onError:this.props.onError,itemProp:w,loading:k,draggable:E})),this.addNoScript&&d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:T((0,s.default)({alt:a,title:t,loading:k},F,{imageVariants:A}))}}))}return null},t}(d.default.Component);j.defaultProps={fadeIn:!0,durationFadeIn:500,alt:"",Tag:"div",loading:"lazy"};var M=c.default.shape({width:c.default.number.isRequired,height:c.default.number.isRequired,src:c.default.string.isRequired,srcSet:c.default.string.isRequired,base64:c.default.string,tracedSVG:c.default.string,srcWebp:c.default.string,srcSetWebp:c.default.string,media:c.default.string}),P=c.default.shape({aspectRatio:c.default.number.isRequired,src:c.default.string.isRequired,srcSet:c.default.string.isRequired,sizes:c.default.string.isRequired,base64:c.default.string,tracedSVG:c.default.string,srcWebp:c.default.string,srcSetWebp:c.default.string,media:c.default.string,maxWidth:c.default.number,maxHeight:c.default.number});function R(e){return function(t,a,r){var n;if(!t.fixed&&!t.fluid)throw new Error("The prop `fluid` or `fixed` is marked as required in `"+r+"`, but their values are both `undefined`.");c.default.checkPropTypes(((n={})[a]=e,n),t,"prop",r)}}j.propTypes={resolutions:M,sizes:P,fixed:R(c.default.oneOfType([M,c.default.arrayOf(M)])),fluid:R(c.default.oneOfType([P,c.default.arrayOf(P)])),fadeIn:c.default.bool,durationFadeIn:c.default.number,title:c.default.string,alt:c.default.string,className:c.default.oneOfType([c.default.string,c.default.object]),critical:c.default.bool,crossOrigin:c.default.oneOfType([c.default.string,c.default.bool]),style:c.default.object,imgStyle:c.default.object,placeholderStyle:c.default.object,placeholderClassName:c.default.string,backgroundColor:c.default.oneOfType([c.default.string,c.default.bool]),onLoad:c.default.func,onError:c.default.func,onStartLoad:c.default.func,Tag:c.default.string,itemProp:c.default.string,loading:c.default.oneOf(["auto","lazy","eager"]),draggable:c.default.bool};var N=j;t.default=N},ACnJ:function(e,t,a){"use strict";a.d(t,"b",(function(){return l}));var r=a("lSNA"),n=a.n(r),i=a("pVnL"),o=a.n(i),l=["xxl","xl","lg","md","sm","xs"],s={xs:"(max-width: 575px)",sm:"(min-width: 576px)",md:"(min-width: 768px)",lg:"(min-width: 992px)",xl:"(min-width: 1200px)",xxl:"(min-width: 1600px)"},d=new Map,c=-1,u={},f={matchHandlers:{},dispatch:function(e){return u=e,d.forEach((function(e){return e(u)})),d.size>=1},subscribe:function(e){return d.size||this.register(),c+=1,d.set(c,e),e(u),c},unsubscribe:function(e){d.delete(e),d.size||this.unregister()},unregister:function(){var e=this;Object.keys(s).forEach((function(t){var a=s[t],r=e.matchHandlers[a];null==r||r.mql.removeListener(null==r?void 0:r.listener)})),d.clear()},register:function(){var e=this;Object.keys(s).forEach((function(t){var a=s[t],r=function(a){var r=a.matches;e.dispatch(o()(o()({},u),n()({},t,r)))},i=window.matchMedia(a);i.addListener(r),e.matchHandlers[a]={mql:i,listener:r},r(i)}))}};t.a=f},BJfS:function(e,t){e.exports=function(e){return e.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})).toLowerCase()}},BMrR:function(e,t,a){"use strict";var r=a("qrJ5");t.a=r.a},F1Ou:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideCount:null,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0};t.default=r},Jmwx:function(e,t,a){"use strict";a("SchZ"),a("4t1q")},"N/JB":function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(a("ToDW")).default;t.default=n},Oyq8:function(e,t,a){"use strict";a.d(t,"b",(function(){return r})),a.d(t,"a",(function(){return n}));var r=[{name:" Aaron Suddjian",github:"https://github.com/suddjian",image:"https://github.com/suddjian.png"},{name:"Beto Dealmeida",github:"https://github.com/betodealmeida",image:"https://github.com/betodealmeida.png"},{name:"Bogdan Kyryliuk",github:"https://github.com/bkyryliuk",image:"https://github.com/bkyryliuk.png"},{name:"Chris Williams",github:"https://github.com/williaster",image:"https://github.com/williaster.png"},{name:"Craig Rueda",github:"https://github.com/craig-rueda",image:"https://github.com/craig-rueda.png"},{name:"Daniel Gaspar",github:"https://github.com/dpgaspar",image:"https://github.com/dpgaspar.png"},{name:"Erik Ritker",github:"https://github.com/etr2460",image:"https://github.com/etr2460.png"},{name:"Evan Rusackas",github:"https://github.com/rusackas",image:"https://github.com/rusackas.png"},{name:"Grace Guo",github:"https://github.com/graceguo-supercat",image:"https://github.com/graceguo-supercat.png"},{name:"Jeff Feng",github:"https://github.com/jfeng15",image:"https://github.com/jfeng15.png"},{name:"Jesse Yang",github:"https://github.com/ktmud",image:"https://github.com/ktmud.png"},{name:"John Bodley",github:"https://github.com/john-bodley",image:"https://github.com/john-bodley.png"},{name:"Krist Wongsuphasawat",github:"https://github.com/kristw",image:"https://github.com/kristw.png"},{name:"Maxime Beauchemin",github:"https://github.com/mistercrunch",image:"https://github.com/mistercrunch.png"},{name:"Michelle Thomas",github:"https://github.com/michellethomas",image:"https://github.com/michellethomas.png"},{name:"Nishant Bangarwa",github:"https://github.com/nishantmonu51",image:"https://github.com/nishantmonu51.png"},{name:"Tai Dupree",github:"https://github.com/nytai",image:"https://github.com/nytai.png"},{name:"Ville Brofeldt",github:"https://github.com/villebro",image:"https://github.com/villebro.png"},{name:"Will Barrett",github:"https://github.com/willbarrett",image:"https://github.com/willbarrett.png"}];void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!r.hasOwnProperty("__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"pmc",filename:"src/resources/data.js"}}),void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!r.hasOwnProperty("__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"pmc",filename:"src/resources/data.js"}});var n=[{title:"Amazon Redshfit",href:"https://aws.amazon.com/redshift/",imgName:"aws-redshift.png"},{title:"Apache Druid",href:"http://druid.io/",imgName:"druid.png"},{title:"Apache Kylin",href:"http://kylin.apache.org/",imgName:"apache-kylin.png"},{title:"BigQuery",href:"https://cloud.google.com/bigquery/",imgName:"googleBQ.png"},{title:"ClickHouse",href:"https://clickhouse.tech/",imgName:"clickhouse.png"},{title:"Exasol",href:"https://www.exasol.com/en/",imgName:"exasol.png"},{title:"FireBirdSql",href:"https://firebirdsql.org/",imgName:"firebird.png"},{title:"Green Plum",href:"https://greenplum.org/",imgName:"greenplum.png"},{title:"IBM Db2",href:"https://www.ibm.com/analytics/db2",imgName:"ibmdb2.png"},{title:"MySQL",href:"https://www.mysql.com/",imgName:"mysql.png"},{title:"Microsoft SqlServer",href:"https://www.microsoft.com/en-us/sql-server",imgName:"msql.png"},{title:"MonetDB",href:"https://www.monetdb.org/",imgName:"monet.png"},{title:"Oracle",href:"https://www.oracle.com/database/",imgName:"oraclelogo.png"},{title:"PostgresSQL",href:"https://www.postgresql.org/",imgName:"postsql.png"},{title:"Presto",href:"https://prestodb.io/",imgName:"presto-og.png"},{title:"Snowflake",href:"https://www.snowflake.com/",imgName:"snowflake.png"},{title:"SQLite",href:"https://www.sqlite.org/index.html",imgName:"sqllite.png"},{title:"Vertica",href:"https://www.vertica.com/",imgName:"vertica.png"}];void 0!==n&&n&&n===Object(n)&&Object.isExtensible(n)&&!n.hasOwnProperty("__filemeta")&&Object.defineProperty(n,"__filemeta",{configurable:!0,value:{name:"Databases",filename:"src/resources/data.js"}}),void 0!==n&&n&&n===Object(n)&&Object.isExtensible(n)&&!n.hasOwnProperty("__filemeta")&&Object.defineProperty(n,"__filemeta",{configurable:!0,value:{name:"Databases",filename:"src/resources/data.js"}})},QeBL:function(e,t,a){"use strict";a.r(t);a("SchZ"),a("mdmF");var r=a("lSNA"),n=a.n(r),i=a("pVnL"),o=a.n(i),l=a("lwsE"),s=a.n(l),d=a("W8MJ"),c=a.n(d),u=a("7W2i"),f=a.n(u),p=a("LQ03"),h=a.n(p),g=a("q1tI"),m=a.n(g),v=a("sEfC"),b=a.n(v),y=a("N/JB"),w=a.n(y),S=a("TSYQ"),k=a.n(S),x=a("H84U"),O=function(e){f()(a,e);var t=h()(a);function a(e){var r;return s()(this,a),(r=t.call(this,e)).saveSlick=function(e){r.slick=e},r.onWindowResized=function(){r.props.autoplay&&r.slick&&r.slick.innerSlider&&r.slick.innerSlider.autoPlay&&r.slick.innerSlider.autoPlay()},r.renderCarousel=function(e){var t,a,i=e.getPrefixCls,l=e.direction,s=o()({},r.props);"fade"===s.effect&&(s.fade=!0);var d=i("carousel",s.prefixCls),c=r.getDotPosition();s.vertical="left"===c||"right"===c;var u=!!s.dots,f=k()("slick-dots","".concat("slick-dots","-").concat(c||"bottom"),"boolean"!=typeof s.dots&&(null===(a=s.dots)||void 0===a?void 0:a.className)),p=k()(d,(t={},n()(t,"".concat(d,"-rtl"),"rtl"===l),n()(t,"".concat(d,"-vertical"),s.vertical),t));return g.createElement("div",{className:p},g.createElement(w.a,o()({ref:r.saveSlick},s,{dots:u,dotsClass:f})))},r.onWindowResized=b()(r.onWindowResized,500,{leading:!1}),r}return c()(a,[{key:"componentDidMount",value:function(){this.props.autoplay&&window.addEventListener("resize",this.onWindowResized),this.innerSlider=this.slick&&this.slick.innerSlider}},{key:"componentDidUpdate",value:function(e){g.Children.count(this.props.children)!==g.Children.count(e.children)&&this.goTo(this.props.initialSlide||0,!1)}},{key:"componentWillUnmount",value:function(){this.props.autoplay&&(window.removeEventListener("resize",this.onWindowResized),this.onWindowResized.cancel())}},{key:"getDotPosition",value:function(){var e=this.props.dotPosition;return void 0===e?"bottom":e}},{key:"next",value:function(){this.slick.slickNext()}},{key:"prev",value:function(){this.slick.slickPrev()}},{key:"goTo",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.slick.slickGoTo(e,t)}},{key:"render",value:function(){return g.createElement(x.a,null,this.renderCarousel)}}]),a}(g.Component);O.defaultProps={dots:!0,arrows:!1,draggable:!1};a("Jmwx");var E=a("BMrR"),C=(a("rO+z"),a("kPKH")),T=(a("L/Qf"),a("2/Rp")),L=a("52AM"),z=a("Wbzz"),j=a("dCk4"),M=a("qKvR"),P=a("lOwS"),R={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M834.1 469.2A347.49 347.49 0 00751.2 354l-29.1-26.7a8.09 8.09 0 00-13 3.3l-13 37.3c-8.1 23.4-23 47.3-44.1 70.8-1.4 1.5-3 1.9-4.1 2-1.1.1-2.8-.1-4.3-1.5-1.4-1.2-2.1-3-2-4.8 3.7-60.2-14.3-128.1-53.7-202C555.3 171 510 123.1 453.4 89.7l-41.3-24.3c-5.4-3.2-12.3 1-12 7.3l2.2 48c1.5 32.8-2.3 61.8-11.3 85.9-11 29.5-26.8 56.9-47 81.5a295.64 295.64 0 01-47.5 46.1 352.6 352.6 0 00-100.3 121.5A347.75 347.75 0 00160 610c0 47.2 9.3 92.9 27.7 136a349.4 349.4 0 0075.5 110.9c32.4 32 70 57.2 111.9 74.7C418.5 949.8 464.5 959 512 959s93.5-9.2 136.9-27.3A348.6 348.6 0 00760.8 857c32.4-32 57.8-69.4 75.5-110.9a344.2 344.2 0 0027.7-136c0-48.8-10-96.2-29.9-140.9zM713 808.5c-53.7 53.2-125 82.4-201 82.4s-147.3-29.2-201-82.4c-53.5-53.1-83-123.5-83-198.4 0-43.5 9.8-85.2 29.1-124 18.8-37.9 46.8-71.8 80.8-97.9a349.6 349.6 0 0058.6-56.8c25-30.5 44.6-64.5 58.2-101a240 240 0 0012.1-46.5c24.1 22.2 44.3 49 61.2 80.4 33.4 62.6 48.8 118.3 45.8 165.7a74.01 74.01 0 0024.4 59.8 73.36 73.36 0 0053.4 18.8c19.7-1 37.8-9.7 51-24.4 13.3-14.9 24.8-30.1 34.4-45.6 14 17.9 25.7 37.4 35 58.4 15.9 35.8 24 73.9 24 113.1 0 74.9-29.5 145.4-83 198.4z"}}]},name:"fire",theme:"outlined"},N=a("6VBw"),H=function(e,t){return g.createElement(N.a,Object.assign({},e,{ref:t,icon:R}))};H.displayName="FireOutlined";var I=g.forwardRef(H),D={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM304 240a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"database",theme:"outlined"},A=function(e,t){return g.createElement(N.a,Object.assign({},e,{ref:t,icon:D}))};A.displayName="DatabaseOutlined";var F=g.forwardRef(A),W={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888.3 693.2c-42.5-24.6-94.3-18-129.2 12.8l-53-30.7V523.6c0-15.7-8.4-30.3-22-38.1l-136-78.3v-67.1c44.2-15 76-56.8 76-106.1 0-61.9-50.1-112-112-112s-112 50.1-112 112c0 49.3 31.8 91.1 76 106.1v67.1l-136 78.3c-13.6 7.8-22 22.4-22 38.1v151.6l-53 30.7c-34.9-30.8-86.8-37.4-129.2-12.8-53.5 31-71.7 99.4-41 152.9 30.8 53.5 98.9 71.9 152.2 41 42.5-24.6 62.7-73 53.6-118.8l48.7-28.3 140.6 81c6.8 3.9 14.4 5.9 22 5.9s15.2-2 22-5.9L674.5 740l48.7 28.3c-9.1 45.7 11.2 94.2 53.6 118.8 53.3 30.9 121.5 12.6 152.2-41 30.8-53.6 12.6-122-40.7-152.9zm-673 138.4a47.6 47.6 0 01-65.2-17.6c-13.2-22.9-5.4-52.3 17.5-65.5a47.6 47.6 0 0165.2 17.6c13.2 22.9 5.4 52.3-17.5 65.5zM522 463.8zM464 234a48.01 48.01 0 0196 0 48.01 48.01 0 01-96 0zm170 446.2l-122 70.3-122-70.3V539.8l122-70.3 122 70.3v140.4zm239.9 133.9c-13.2 22.9-42.4 30.8-65.2 17.6-22.8-13.2-30.7-42.6-17.5-65.5s42.4-30.8 65.2-17.6c22.9 13.2 30.7 42.5 17.5 65.5z"}}]},name:"deployment-unit",theme:"outlined"},_=function(e,t){return g.createElement(N.a,Object.assign({},e,{ref:t,icon:W}))};_.displayName="DeploymentUnitOutlined";var q=g.forwardRef(_),B={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM288 604a64 64 0 10128 0 64 64 0 10-128 0zm118-224a48 48 0 1096 0 48 48 0 10-96 0zm158 228a96 96 0 10192 0 96 96 0 10-192 0zm148-314a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"dot-chart",theme:"outlined"},V=function(e,t){return g.createElement(N.a,Object.assign({},e,{ref:t,icon:B}))};V.displayName="DotChartOutlined";var G=g.forwardRef(V),U=a("rePB"),Y=a("1OyB"),Q=a("vuIU"),J=a("Ji7U"),X=a("md7G"),K=a("foSv");function Z(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function $(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Z(Object(a),!0).forEach((function(t){Object(U.a)(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Z(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function ee(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var a,r=Object(K.a)(e);if(t){var n=Object(K.a)(this).constructor;a=Reflect.construct(r,arguments,n)}else a=r.apply(this,arguments);return Object(X.a)(this,a)}}var te=function(e){Object(J.a)(r,e);var t=ee(r);function r(e){var a;return Object(Y.a)(this,r),(a=t.call(this,e)).$=m.a.createRef(),a._=m.a.createRef(),a}return Object(Q.a)(r,[{key:"render",value:function(){return m.a.createElement("span",{ref:this.$},m.a.createElement("a",$($({},this.props),{},{ref:this._}),this.props.children))}},{key:"componentDidMount",value:function(){this.paint()}},{key:"getSnapshotBeforeUpdate",value:function(){return this.reset(),null}},{key:"componentDidUpdate",value:function(){this.paint()}},{key:"componentWillUnmount",value:function(){this.reset()}},{key:"paint",value:function(){var e=this,t=this.$.current.appendChild(document.createElement("span"));Promise.resolve().then(a.bind(null,"q01k")).then((function(a){(0,a.render)(t.appendChild(e._.current),(function(e){try{t.parentNode.replaceChild(e,t)}catch(t){}}))}))}},{key:"reset",value:function(){this.$.current.replaceChild(this._.current,this.$.current.lastChild)}}]),r}(g.PureComponent),ae=a("Oyq8"),re=a("9Dj+"),ne=a("wx14"),ie=a("zLVn"),oe=a("9eSz"),le=a.n(oe),se=function(e){var t,a,r,n,i=e.imageName,o=e.type,l=e.width,s=e.height,d=Object(ie.a)(e,["imageName","type","width","height"]),c=Object(z.useStaticQuery)("2167773359"),u=c.getAllImages.edges.filter((function(e){return e.node.fixed.originalName===i})),f=l&&s?{width:l,height:s}:{};return"db"===o?Object(M.d)(le.a,{fixed:null===(t=u[0])||void 0===t||null===(a=t.node)||void 0===a?void 0:a.fixed,style:f,imgStyle:f}):Object(M.d)(le.a,Object(ne.a)({fixed:null===(r=c[i])||void 0===r||null===(n=r.childImageSharp)||void 0===n?void 0:n.fixed},d))},de=se;void 0!==se&&se&&se===Object(se)&&Object.isExtensible(se)&&!se.hasOwnProperty("__filemeta")&&Object.defineProperty(se,"__filemeta",{configurable:!0,value:{name:"Image",filename:"src/components/image.tsx"}});a("TpwP");var ce=a("vrFN"),ue=a("fT7D"),fe=a.n(ue),pe=a("Al62"),he=P.supersetTheme.colors,ge=Object(M.c)("position:relative;text-align:center;padding-top:131px;padding-bottom:80px;background-image:url('/images/data-point.jpg');background-size:cover;Button{margin-top:39px;}.github-section{margin-bottom:40px;margin-top:40px;.github-button{margin:5px;}}.logo-horiz{margin-top:20px;margin-bottom:20px;width:600px;",[pe.d[2]],"{width:450px;}}.incubator{margin-top:40px;}.alert{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb;max-width:600px;margin:0 auto;padding:0.75rem 1.25rem;margin-top:83px;border:1px solid transparent;border-radius:0.25rem;}"),me={name:"177fmpb",styles:"font-size:55px;text-align:center;"},ve=Object(M.c)("background:#fff;padding:5vw 0;margin-top:0px;margin-bottom:30px;.featureList{padding:40px;width:100%;list-style-type:none;margin:0 auto;max-width:1000px;.feature{padding:20px;text-align:center;margin-bottom:40px;.imagePlaceHolder{svg{width:60px;height:60px;}margin-bottom:15px;}.featureText{color:",he.grayscale.dark2,";strong{font-size:18px;}}}}.heading{font-size:25px;width:60%;margin:0 auto;}.anticon{color:#ccc;}"),be={name:"1gzpg9z",styles:"background:white;margin-bottom:150px;.databaseSub{text-align:center;display:block;margin-bottom:40px;font-size:18px;}.databaseList{margin-top:100px;list-style-type:none;padding:0px;max-width:1000px;margin:0 auto;display:flex;flex-wrap:wrap;justify-content:space-around;margin-bottom:50px;a{margin:20px;}}"},ye=Object(M.c)(".toggleContainer{display:flex;flex-direction:column;margin-bottom:100px;.toggleBtns{display:flex;flex-direction:row;justify-content:center;.toggle{margin:10px;color:#666;border:1px solid #888;background-color:#20a7c911;border-radius:3px;padding:16px;transition:all 0.25s;&:hover{cursor:pointer;color:",he.primary.base,";border:1px solid ",he.primary.base,";}&.active{background:red;background:#20a7c933;}}}.imageContainer{img{margin:0 auto;width:80%;box-shadow:0 0 3px #aaa;margin-top:5px;margin-bottom:5px;}}}"),we=function(e){var t=e.icon,a=e.title,r=e.descr;return Object(M.d)("li",{className:"feature"},Object(M.d)("div",{className:"imagePlaceHolder"},t),Object(M.d)("div",{className:"featureText"},Object(M.d)("strong",null,a),Object(M.d)("br",null),r))},Se=Object(L.b)()((function(){var e=Object(L.d)(),t=Object(g.useRef)(null),a=Object(g.useState)(0),r=a[0],n=a[1];return Object(M.d)(j.a,{theme:e},Object(M.d)(ce.a,{title:"Superset"}),Object(M.d)(re.a,null,Object(M.d)("div",{css:ge},Object(M.d)("img",{width:"500",className:"logo-horiz",src:fe.a,alt:"logo-horiz"}),Object(M.d)("h2",null,"Apache Superset is a modern data",Object(M.d)("br",null),"exploration and visualization platform"),Object(M.d)("div",{className:"github-section"},Object(M.d)("span",{className:"github-button"},Object(M.d)(te,{href:"https://github.com/apache/incubator-superset","data-size":"large","data-show-count":"true","aria-label":"Star apache/incubator-superset on GitHub"},"Star")),Object(M.d)("span",{className:"github-button"},Object(M.d)(te,{href:"https://github.com/apache/incubator-superset/subscription","data-size":"large","data-show-count":"true","aria-label":"Watch apache/incubator-superset on GitHub"},"Watch")),Object(M.d)("span",{className:"github-button"},Object(M.d)(te,{href:"https://github.com/apache/incubator-superset/fork","data-size":"large","data-show-count":"true","aria-label":"Fork apache/incubator-superset on GitHub"},"Fork"))),Object(M.d)("div",{className:"incubator"},Object(M.d)(de,{imageName:"incubatorSm"})),Object(M.d)("div",null,Object(M.d)(z.Link,{to:"/docs/intro"},Object(M.d)(T.a,{type:"primary",size:"medium"},"Get Started")))),Object(M.d)("div",{css:ve},Object(M.d)("h2",{css:me},"Overview"),Object(M.d)("h4",{className:"heading"}," ","Superset is fast, lightweight, intuitive, and loaded with options that make it easy for users of all skill sets to explore and visualize their data, from simple line charts to highly detailed geospatial charts."," "),Object(M.d)("ul",{className:"featureList ant-row"},Object(M.d)(E.a,null,Object(M.d)(C.a,{sm:24,md:12},Object(M.d)(we,{icon:Object(M.d)(I,null),title:"Powerful and easy to use",descr:"\n                    Quickly and easily integrate and explore your data, using\n                    either our simple no-code viz builder or state of the art SQL\n                    IDE.\n                  "})),Object(M.d)(C.a,{sm:24,md:12},Object(M.d)(we,{icon:Object(M.d)(F,null),title:"Integrates with modern databases",descr:"\n                    Superset can connect to any SQL based datasource\n                    through SQL Alchemy, including modern cloud native databases\n                    and engines at petabyte scale.\n                  "}))),Object(M.d)(E.a,null,Object(M.d)(C.a,{sm:24,md:12},Object(M.d)(we,{icon:Object(M.d)(q,null),title:"Modern architecture",descr:"\n                    Superset is lightweight and highly scalable, leveraging the\n                    power of your existing data infrastructure without requiring\n                    yet another ingestion layer.\n                  "})),Object(M.d)(C.a,{sm:24,md:12},Object(M.d)(we,{icon:Object(M.d)(G,null),title:"Rich visualizations and dashboards",descr:"\n                    Superset ships with a wide array of beautiful visualizations.\n                    Our visualization plug-in architecture makes it easy to build\n                    custom visualizations that drop directly into Superset.\n                  "}))))),Object(M.d)("div",{css:ye},Object(M.d)("h2",{css:me},"Explore"),Object(M.d)("div",{className:"toggleContainer"},Object(M.d)("div",{className:"toggleBtns"},Object(M.d)("div",{className:"toggle "+(0===r?"active":null),onClick:function(){return t.current.goTo(0)},role:"button"},Object(M.d)("h2",null,"Explore"),Object(M.d)("span",null,"Explore your data using the array of data visualizations.")),Object(M.d)("div",{className:"toggle "+(1===r?"active":null),onClick:function(){return t.current.goTo(1)},role:"button"},Object(M.d)("h2",null,"View"),Object(M.d)("span",null,"View your data through interactive dashboards")),Object(M.d)("div",{className:"toggle "+(2===r?"active":null),onClick:function(){return t.current.goTo(2)},role:"button"},Object(M.d)("h2",null,"Investigate"),Object(M.d)("span",null,"Use sqlab to write queries to explore your data"))),Object(M.d)(O,{ref:t,effect:"scrollx",afterChange:function(e){n(e)}},Object(M.d)("div",{className:"imageContainer"},Object(M.d)("img",{src:"/images/explorer.png",alt:""})),Object(M.d)("div",{className:"imageContainer"},Object(M.d)("img",{src:"/images/dashboard3.png",alt:""})),Object(M.d)("div",{className:"imageContainer"},Object(M.d)("img",{src:"/images/sqllab1.png",alt:""}))))),Object(M.d)("div",{css:be},Object(M.d)("h2",{css:me},"Supported Databases"),Object(M.d)("ul",{className:"databaseList"},ae.a.map((function(e){var t=e.title,a=e.href,r=e.imgName,n=e.width,i=e.height;return Object(M.d)("a",{href:a,target:"_blank",key:r,rel:"noreferrer"},Object(M.d)(de,{imageName:r,type:"db",width:n,height:i,alt:t}))}))),Object(M.d)("span",{className:"databaseSub"}," ","... and any other SQLAlchemy"," ",Object(M.d)("a",{href:"https://superset.incubator.apache.org/installation.html#database-dependencies"}," ","compatible databases"," ")," "))))}));t.default=Se;void 0!==Se&&Se&&Se===Object(Se)&&Object.isExtensible(Se)&&!Se.hasOwnProperty("__filemeta")&&Object.defineProperty(Se,"__filemeta",{configurable:!0,value:{name:"__DOCZ_DUMMY_EXPORT_DEFAULT",filename:"src/pages/index.tsx"}})},TZyB:function(e,t,a){},ToDW:function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(a("pVnL")),i=r(a("3tO9")),o=r(a("lwsE")),l=r(a("W8MJ")),s=r(a("PJYZ")),d=r(a("7W2i")),c=r(a("LQ03")),u=r(a("lSNA")),f=r(a("q1tI")),p=a("hQUZ"),h=r(a("pIsd")),g=r(a("cZFH")),m=a("3K4p"),v=function(e){(0,d.default)(a,e);var t=(0,c.default)(a);function a(e){var r;return(0,o.default)(this,a),r=t.call(this,e),(0,u.default)((0,s.default)(r),"innerSliderRefHandler",(function(e){return r.innerSlider=e})),(0,u.default)((0,s.default)(r),"slickPrev",(function(){return r.innerSlider.slickPrev()})),(0,u.default)((0,s.default)(r),"slickNext",(function(){return r.innerSlider.slickNext()})),(0,u.default)((0,s.default)(r),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return r.innerSlider.slickGoTo(e,t)})),(0,u.default)((0,s.default)(r),"slickPause",(function(){return r.innerSlider.pause("paused")})),(0,u.default)((0,s.default)(r),"slickPlay",(function(){return r.innerSlider.autoPlay("play")})),r.state={breakpoint:null},r._responsiveMediaHandlers=[],r}return(0,l.default)(a,[{key:"media",value:function(e,t){var a=window.matchMedia(e),r=function(e){e.matches&&t()};a.addListener(r),r(a),this._responsiveMediaHandlers.push({mql:a,query:e,listener:r})}},{key:"UNSAFE_componentWillMount",value:function(){var e=this;if(this.props.responsive){var t=this.props.responsive.map((function(e){return e.breakpoint}));t.sort((function(e,t){return e-t})),t.forEach((function(a,r){var n;n=0===r?(0,h.default)({minWidth:0,maxWidth:a}):(0,h.default)({minWidth:t[r-1]+1,maxWidth:a}),(0,m.canUseDOM)()&&e.media(n,(function(){e.setState({breakpoint:a})}))}));var a=(0,h.default)({minWidth:t.slice(-1)[0]});(0,m.canUseDOM)()&&this.media(a,(function(){e.setState({breakpoint:null})}))}}},{key:"componentWillUnmount",value:function(){this._responsiveMediaHandlers.forEach((function(e){e.mql.removeListener(e.listener)}))}},{key:"render",value:function(){var e,t,a=this;(e=this.state.breakpoint?"unslick"===(t=this.props.responsive.filter((function(e){return e.breakpoint===a.state.breakpoint})))[0].settings?"unslick":(0,i.default)((0,i.default)((0,i.default)({},g.default),this.props),t[0].settings):(0,i.default)((0,i.default)({},g.default),this.props)).centerMode&&(e.slidesToScroll,e.slidesToScroll=1),e.fade&&(e.slidesToShow,e.slidesToScroll,e.slidesToShow=1,e.slidesToScroll=1);var r=f.default.Children.toArray(this.props.children);r=r.filter((function(e){return"string"==typeof e?!!e.trim():!!e})),e.variableWidth&&(e.rows>1||e.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),e.variableWidth=!1);for(var o=[],l=null,s=0;s<r.length;s+=e.rows*e.slidesPerRow){for(var d=[],c=s;c<s+e.rows*e.slidesPerRow;c+=e.slidesPerRow){for(var u=[],h=c;h<c+e.slidesPerRow&&(e.variableWidth&&r[h].props.style&&(l=r[h].props.style.width),!(h>=r.length));h+=1)u.push(f.default.cloneElement(r[h],{key:100*s+10*c+h,tabIndex:-1,style:{width:"".concat(100/e.slidesPerRow,"%"),display:"inline-block"}}));d.push(f.default.createElement("div",{key:10*s+c},u))}e.variableWidth?o.push(f.default.createElement("div",{key:s,style:{width:l}},d)):o.push(f.default.createElement("div",{key:s},d))}if("unslick"===e){var m="regular slider "+(this.props.className||"");return f.default.createElement("div",{className:m},r)}return o.length<=e.slidesToShow&&(e.unslick=!0),f.default.createElement(p.InnerSlider,(0,n.default)({style:this.props.style,ref:this.innerSliderRefHandler},e),o)}}]),a}(f.default.Component);t.default=v},cZFH:function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(a("q1tI")),i={accessibility:!0,adaptiveHeight:!1,afterChange:null,appendDots:function(e){return n.default.createElement("ul",{style:{display:"block"}},e)},arrows:!0,autoplay:!1,autoplaySpeed:3e3,beforeChange:null,centerMode:!1,centerPadding:"50px",className:"",cssEase:"ease",customPaging:function(e){return n.default.createElement("button",null,e+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:null,nextArrow:null,onEdge:null,onInit:null,onLazyLoadError:null,onReInit:null,pauseOnDotsHover:!1,pauseOnFocus:!1,pauseOnHover:!0,prevArrow:null,responsive:null,rows:1,rtl:!1,slide:"div",slidesPerRow:1,slidesToScroll:1,slidesToShow:1,speed:500,swipe:!0,swipeEvent:null,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,waitForAnimate:!0};t.default=i},coqV:function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.Dots=void 0;var n=r(a("3tO9")),i=r(a("lwsE")),o=r(a("W8MJ")),l=r(a("7W2i")),s=r(a("LQ03")),d=r(a("q1tI")),c=r(a("TSYQ")),u=function(e){(0,l.default)(a,e);var t=(0,s.default)(a);function a(){return(0,i.default)(this,a),t.apply(this,arguments)}return(0,o.default)(a,[{key:"clickHandler",value:function(e,t){t.preventDefault(),this.props.clickHandler(e)}},{key:"render",value:function(){var e,t=this,a=(e={slideCount:this.props.slideCount,slidesToScroll:this.props.slidesToScroll,slidesToShow:this.props.slidesToShow,infinite:this.props.infinite}).infinite?Math.ceil(e.slideCount/e.slidesToScroll):Math.ceil((e.slideCount-e.slidesToShow)/e.slidesToScroll)+1,r=this.props,i={onMouseEnter:r.onMouseEnter,onMouseOver:r.onMouseOver,onMouseLeave:r.onMouseLeave},o=Array.apply(null,Array(a+1).join("0").split("")).map((function(e,a){var r=a*t.props.slidesToScroll,n=a*t.props.slidesToScroll+(t.props.slidesToScroll-1),i=(0,c.default)({"slick-active":t.props.currentSlide>=r&&t.props.currentSlide<=n}),o={message:"dots",index:a,slidesToScroll:t.props.slidesToScroll,currentSlide:t.props.currentSlide},l=t.clickHandler.bind(t,o);return d.default.createElement("li",{key:a,className:i},d.default.cloneElement(t.props.customPaging(a),{onClick:l}))}));return d.default.cloneElement(this.props.appendDots(o),(0,n.default)({className:this.props.dotsClass},i))}}]),a}(d.default.PureComponent);t.Dots=u},fT7D:function(e,t,a){e.exports=a.p+"static/superset-logo-horiz-apache-ac1a91de27eed9f5c53944c555a39c6f.svg"},hQUZ:function(e,t,a){"use strict";var r=a("TqRt");Object.defineProperty(t,"__esModule",{value:!0}),t.InnerSlider=void 0;var n=r(a("pVnL")),i=r(a("QILm")),o=r(a("cDf5")),l=r(a("3tO9")),s=r(a("lwsE")),d=r(a("PJYZ")),c=r(a("7W2i")),u=r(a("LQ03")),f=r(a("lSNA")),p=r(a("q1tI")),h=r(a("F1Ou")),g=r(a("sEfC")),m=r(a("TSYQ")),v=a("3K4p"),b=a("+uyH"),y=a("coqV"),w=a("3Fjq"),S=r(a("bdgK")),k=function(e){(0,c.default)(a,e);var t=(0,u.default)(a);function a(e){var r;return(0,s.default)(this,a),r=t.call(this,e),(0,f.default)((0,d.default)(r),"listRefHandler",(function(e){return r.list=e})),(0,f.default)((0,d.default)(r),"trackRefHandler",(function(e){return r.track=e})),(0,f.default)((0,d.default)(r),"adaptHeight",(function(){if(r.props.adaptiveHeight&&r.list){var e=r.list.querySelector('[data-index="'.concat(r.state.currentSlide,'"]'));r.list.style.height=(0,v.getHeight)(e)+"px"}})),(0,f.default)((0,d.default)(r),"UNSAFE_componentWillMount",(function(){if(r.ssrInit(),r.props.onInit&&r.props.onInit(),r.props.lazyLoad){var e=(0,v.getOnDemandLazySlides)((0,l.default)((0,l.default)({},r.props),r.state));e.length>0&&(r.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),r.props.onLazyLoad&&r.props.onLazyLoad(e))}})),(0,f.default)((0,d.default)(r),"componentDidMount",(function(){var e=(0,l.default)({listRef:r.list,trackRef:r.track},r.props);r.updateState(e,!0,(function(){r.adaptHeight(),r.props.autoplay&&r.autoPlay("update")})),"progressive"===r.props.lazyLoad&&(r.lazyLoadTimer=setInterval(r.progressiveLazyLoad,1e3)),r.ro=new S.default((function(){r.state.animating?(r.onWindowResized(!1),r.callbackTimers.push(setTimeout((function(){return r.onWindowResized()}),r.props.speed))):r.onWindowResized()})),r.ro.observe(r.list),Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),(function(e){e.onfocus=r.props.pauseOnFocus?r.onSlideFocus:null,e.onblur=r.props.pauseOnFocus?r.onSlideBlur:null})),window.addEventListener?window.addEventListener("resize",r.onWindowResized):window.attachEvent("onresize",r.onWindowResized)})),(0,f.default)((0,d.default)(r),"componentWillUnmount",(function(){r.animationEndCallback&&clearTimeout(r.animationEndCallback),r.lazyLoadTimer&&clearInterval(r.lazyLoadTimer),r.callbackTimers.length&&(r.callbackTimers.forEach((function(e){return clearTimeout(e)})),r.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",r.onWindowResized):window.detachEvent("onresize",r.onWindowResized),r.autoplayTimer&&clearInterval(r.autoplayTimer),r.ro.disconnect()})),(0,f.default)((0,d.default)(r),"UNSAFE_componentWillReceiveProps",(function(e){for(var t=r.props,a=t.autoplay,n=t.autoplaySpeed,i=(0,l.default)((0,l.default)({listRef:r.list,trackRef:r.track},e),r.state),s=!1,d=0,c=Object.keys(r.props);d<c.length;d++){var u=c[d];if(!e.hasOwnProperty(u)){s=!0;break}if("object"!==(0,o.default)(e[u])&&"function"!=typeof e[u]&&e[u]!==r.props[u]){s=!0;break}}r.updateState(i,s,(function(){r.state.currentSlide>=p.default.Children.count(e.children)&&r.changeSlide({message:"index",index:p.default.Children.count(e.children)-e.slidesToShow,currentSlide:r.state.currentSlide}),a===e.autoplay&&n===e.autoplaySpeed||(e.autoplay?r.autoPlay("update"):r.pause("paused"))}))})),(0,f.default)((0,d.default)(r),"componentDidUpdate",(function(){if(r.checkImagesLoad(),r.props.onReInit&&r.props.onReInit(),r.props.lazyLoad){var e=(0,v.getOnDemandLazySlides)((0,l.default)((0,l.default)({},r.props),r.state));e.length>0&&(r.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),r.props.onLazyLoad&&r.props.onLazyLoad(e))}r.adaptHeight()})),(0,f.default)((0,d.default)(r),"onWindowResized",(function(e){r.debouncedResize&&r.debouncedResize.cancel(),r.debouncedResize=(0,g.default)((function(){return r.resizeWindow(e)}),50),r.debouncedResize()})),(0,f.default)((0,d.default)(r),"resizeWindow",(function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=Boolean(r.track&&r.track.node);if(t){var a=(0,l.default)((0,l.default)({listRef:r.list,trackRef:r.track},r.props),r.state);r.updateState(a,e,(function(){r.props.autoplay?r.autoPlay("update"):r.pause("paused")})),r.setState({animating:!1}),clearTimeout(r.animationEndCallback),delete r.animationEndCallback}})),(0,f.default)((0,d.default)(r),"updateState",(function(e,t,a){var n=(0,v.initializedState)(e);e=(0,l.default)((0,l.default)((0,l.default)({},e),n),{},{slideIndex:n.currentSlide});var i=(0,v.getTrackLeft)(e);e=(0,l.default)((0,l.default)({},e),{},{left:i});var o=(0,v.getTrackCSS)(e);(t||p.default.Children.count(r.props.children)!==p.default.Children.count(e.children))&&(n.trackStyle=o),r.setState(n,a)})),(0,f.default)((0,d.default)(r),"ssrInit",(function(){if(r.props.variableWidth){var e=0,t=0,a=[],n=(0,v.getPreClones)((0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:r.props.children.length})),i=(0,v.getPostClones)((0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:r.props.children.length}));r.props.children.forEach((function(t){a.push(t.props.style.width),e+=t.props.style.width}));for(var o=0;o<n;o++)t+=a[a.length-1-o],e+=a[a.length-1-o];for(var s=0;s<i;s++)e+=a[s];for(var d=0;d<r.state.currentSlide;d++)t+=a[d];var c={width:e+"px",left:-t+"px"};if(r.props.centerMode){var u="".concat(a[r.state.currentSlide],"px");c.left="calc(".concat(c.left," + (100% - ").concat(u,") / 2 ) ")}r.setState({trackStyle:c})}else{var f=p.default.Children.count(r.props.children),h=(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:f}),g=(0,v.getPreClones)(h)+(0,v.getPostClones)(h)+f,m=100/r.props.slidesToShow*g,b=100/g,y=-b*((0,v.getPreClones)(h)+r.state.currentSlide)*m/100;r.props.centerMode&&(y+=(100-b*m/100)/2);var w={width:m+"%",left:y+"%"};r.setState({slideWidth:b+"%",trackStyle:w})}})),(0,f.default)((0,d.default)(r),"checkImagesLoad",(function(){var e=r.list.querySelectorAll(".slick-slide img"),t=e.length,a=0;Array.prototype.forEach.call(e,(function(e){var n=function(){return++a&&a>=t&&r.onWindowResized()};if(e.onclick){var i=e.onclick;e.onclick=function(){i(),e.parentNode.focus()}}else e.onclick=function(){return e.parentNode.focus()};e.onload||(r.props.lazyLoad?e.onload=function(){r.adaptHeight(),r.callbackTimers.push(setTimeout(r.onWindowResized,r.props.speed))}:(e.onload=n,e.onerror=function(){n(),r.props.onLazyLoadError&&r.props.onLazyLoadError()}))}))})),(0,f.default)((0,d.default)(r),"progressiveLazyLoad",(function(){for(var e=[],t=(0,l.default)((0,l.default)({},r.props),r.state),a=r.state.currentSlide;a<r.state.slideCount+(0,v.getPostClones)(t);a++)if(r.state.lazyLoadedList.indexOf(a)<0){e.push(a);break}for(var n=r.state.currentSlide-1;n>=-(0,v.getPreClones)(t);n--)if(r.state.lazyLoadedList.indexOf(n)<0){e.push(n);break}e.length>0?(r.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),r.props.onLazyLoad&&r.props.onLazyLoad(e)):r.lazyLoadTimer&&(clearInterval(r.lazyLoadTimer),delete r.lazyLoadTimer)})),(0,f.default)((0,d.default)(r),"slideHandler",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=r.props,n=a.asNavFor,o=a.beforeChange,s=a.onLazyLoad,d=a.speed,c=a.afterChange,u=r.state.currentSlide,f=(0,v.slideHandler)((0,l.default)((0,l.default)((0,l.default)({index:e},r.props),r.state),{},{trackRef:r.track,useCSS:r.props.useCSS&&!t})),p=f.state,h=f.nextState;if(p){o&&o(u,p.currentSlide);var g=p.lazyLoadedList.filter((function(e){return r.state.lazyLoadedList.indexOf(e)<0}));s&&g.length>0&&s(g),r.setState(p,(function(){n&&n.innerSlider.slideHandler(e),h&&(r.animationEndCallback=setTimeout((function(){var e=h.animating,t=(0,i.default)(h,["animating"]);r.setState(t,(function(){r.callbackTimers.push(setTimeout((function(){return r.setState({animating:e})}),10)),c&&c(p.currentSlide),delete r.animationEndCallback}))}),d))}))}})),(0,f.default)((0,d.default)(r),"changeSlide",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=(0,l.default)((0,l.default)({},r.props),r.state),n=(0,v.changeSlide)(a,e);(0===n||n)&&(!0===t?r.slideHandler(n,t):r.slideHandler(n))})),(0,f.default)((0,d.default)(r),"clickHandler",(function(e){!1===r.clickable&&(e.stopPropagation(),e.preventDefault()),r.clickable=!0})),(0,f.default)((0,d.default)(r),"keyHandler",(function(e){var t=(0,v.keyHandler)(e,r.props.accessibility,r.props.rtl);""!==t&&r.changeSlide({message:t})})),(0,f.default)((0,d.default)(r),"selectHandler",(function(e){r.changeSlide(e)})),(0,f.default)((0,d.default)(r),"disableBodyScroll",(function(){window.ontouchmove=function(e){(e=e||window.event).preventDefault&&e.preventDefault(),e.returnValue=!1}})),(0,f.default)((0,d.default)(r),"enableBodyScroll",(function(){window.ontouchmove=null})),(0,f.default)((0,d.default)(r),"swipeStart",(function(e){r.props.verticalSwiping&&r.disableBodyScroll();var t=(0,v.swipeStart)(e,r.props.swipe,r.props.draggable);""!==t&&r.setState(t)})),(0,f.default)((0,d.default)(r),"swipeMove",(function(e){var t=(0,v.swipeMove)(e,(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{trackRef:r.track,listRef:r.list,slideIndex:r.state.currentSlide}));t&&(t.swiping&&(r.clickable=!1),r.setState(t))})),(0,f.default)((0,d.default)(r),"swipeEnd",(function(e){var t=(0,v.swipeEnd)(e,(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{trackRef:r.track,listRef:r.list,slideIndex:r.state.currentSlide}));if(t){var a=t.triggerSlideHandler;delete t.triggerSlideHandler,r.setState(t),void 0!==a&&(r.slideHandler(a),r.props.verticalSwiping&&r.enableBodyScroll())}})),(0,f.default)((0,d.default)(r),"slickPrev",(function(){r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"previous"})}),0))})),(0,f.default)((0,d.default)(r),"slickNext",(function(){r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"next"})}),0))})),(0,f.default)((0,d.default)(r),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e=Number(e),isNaN(e))return"";r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"index",index:e,currentSlide:r.state.currentSlide},t)}),0))})),(0,f.default)((0,d.default)(r),"play",(function(){var e;if(r.props.rtl)e=r.state.currentSlide-r.props.slidesToScroll;else{if(!(0,v.canGoNext)((0,l.default)((0,l.default)({},r.props),r.state)))return!1;e=r.state.currentSlide+r.props.slidesToScroll}r.slideHandler(e)})),(0,f.default)((0,d.default)(r),"autoPlay",(function(e){r.autoplayTimer&&clearInterval(r.autoplayTimer);var t=r.state.autoplaying;if("update"===e){if("hovered"===t||"focused"===t||"paused"===t)return}else if("leave"===e){if("paused"===t||"focused"===t)return}else if("blur"===e&&("paused"===t||"hovered"===t))return;r.autoplayTimer=setInterval(r.play,r.props.autoplaySpeed+50),r.setState({autoplaying:"playing"})})),(0,f.default)((0,d.default)(r),"pause",(function(e){r.autoplayTimer&&(clearInterval(r.autoplayTimer),r.autoplayTimer=null);var t=r.state.autoplaying;"paused"===e?r.setState({autoplaying:"paused"}):"focused"===e?"hovered"!==t&&"playing"!==t||r.setState({autoplaying:"focused"}):"playing"===t&&r.setState({autoplaying:"hovered"})})),(0,f.default)((0,d.default)(r),"onDotsOver",(function(){return r.props.autoplay&&r.pause("hovered")})),(0,f.default)((0,d.default)(r),"onDotsLeave",(function(){return r.props.autoplay&&"hovered"===r.state.autoplaying&&r.autoPlay("leave")})),(0,f.default)((0,d.default)(r),"onTrackOver",(function(){return r.props.autoplay&&r.pause("hovered")})),(0,f.default)((0,d.default)(r),"onTrackLeave",(function(){return r.props.autoplay&&"hovered"===r.state.autoplaying&&r.autoPlay("leave")})),(0,f.default)((0,d.default)(r),"onSlideFocus",(function(){return r.props.autoplay&&r.pause("focused")})),(0,f.default)((0,d.default)(r),"onSlideBlur",(function(){return r.props.autoplay&&"focused"===r.state.autoplaying&&r.autoPlay("blur")})),(0,f.default)((0,d.default)(r),"render",(function(){var e,t,a,i=(0,m.default)("slick-slider",r.props.className,{"slick-vertical":r.props.vertical,"slick-initialized":!0}),o=(0,l.default)((0,l.default)({},r.props),r.state),s=(0,v.extractObject)(o,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding"]),d=r.props.pauseOnHover;if(s=(0,l.default)((0,l.default)({},s),{},{onMouseEnter:d?r.onTrackOver:null,onMouseLeave:d?r.onTrackLeave:null,onMouseOver:d?r.onTrackOver:null,focusOnSelect:r.props.focusOnSelect?r.selectHandler:null}),!0===r.props.dots&&r.state.slideCount>=r.props.slidesToShow){var c=(0,v.extractObject)(o,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),u=r.props.pauseOnDotsHover;c=(0,l.default)((0,l.default)({},c),{},{clickHandler:r.changeSlide,onMouseEnter:u?r.onDotsLeave:null,onMouseOver:u?r.onDotsOver:null,onMouseLeave:u?r.onDotsLeave:null}),e=p.default.createElement(y.Dots,c)}var f=(0,v.extractObject)(o,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);f.clickHandler=r.changeSlide,r.props.arrows&&(t=p.default.createElement(w.PrevArrow,f),a=p.default.createElement(w.NextArrow,f));var h=null;r.props.vertical&&(h={height:r.state.listHeight});var g=null;!1===r.props.vertical?!0===r.props.centerMode&&(g={padding:"0px "+r.props.centerPadding}):!0===r.props.centerMode&&(g={padding:r.props.centerPadding+" 0px"});var S=(0,l.default)((0,l.default)({},h),g),k=r.props.touchMove,x={className:"slick-list",style:S,onClick:r.clickHandler,onMouseDown:k?r.swipeStart:null,onMouseMove:r.state.dragging&&k?r.swipeMove:null,onMouseUp:k?r.swipeEnd:null,onMouseLeave:r.state.dragging&&k?r.swipeEnd:null,onTouchStart:k?r.swipeStart:null,onTouchMove:r.state.dragging&&k?r.swipeMove:null,onTouchEnd:k?r.swipeEnd:null,onTouchCancel:r.state.dragging&&k?r.swipeEnd:null,onKeyDown:r.props.accessibility?r.keyHandler:null},O={className:i,dir:"ltr",style:r.props.style};return r.props.unslick&&(x={className:"slick-list"},O={className:i}),p.default.createElement("div",O,r.props.unslick?"":t,p.default.createElement("div",(0,n.default)({ref:r.listRefHandler},x),p.default.createElement(b.Track,(0,n.default)({ref:r.trackRefHandler},s),r.props.children)),r.props.unslick?"":a,r.props.unslick?"":e)})),r.list=null,r.track=null,r.state=(0,l.default)((0,l.default)({},h.default),{},{currentSlide:r.props.initialSlide,slideCount:p.default.Children.count(r.props.children)}),r.callbackTimers=[],r.clickable=!0,r.debouncedResize=null,r}return a}(p.default.Component);t.InnerSlider=k},kPKH:function(e,t,a){"use strict";var r=a("/kpp");t.a=r.a},lOwS:function(e,t,a){"use strict";t.__esModule=!0,t.default=t.supersetTheme=t.styled=t.withTheme=t.ThemeProvider=t.useTheme=void 0;var r,n=(r=a("5D9J"))&&r.__esModule?r:{default:r},i=a("wLTh");t.useTheme=i.useTheme,t.ThemeProvider=i.ThemeProvider,t.withTheme=i.withTheme;var o=n.default;t.styled=o;var l={borderRadius:4,colors:{primary:{base:"#20A7C9",dark1:"#1A85A0",dark2:"#156378",light1:"#79CADE",light2:"#A5DAE9",light3:"#D2EDF4",light4:"#E9F6F9",light5:"#F3F8FA"},secondary:{base:"#444E7C",dark1:"#363E63",dark2:"#282E4A",dark3:"#1B1F31",light1:"#8E94B0",light2:"#B4B8CA",light3:"#D9DBE4",light4:"#ECEEF2",light5:"#F5F5F8"},grayscale:{base:"#666666",dark1:"#323232",dark2:"#000000",light1:"#B2B2B2",light2:"#E0E0E0",light3:"#F0F0F0",light4:"#F7F7F7",light5:"#FFFFFF"},error:{base:"#E04355",dark1:"#A7323F",dark2:"#6F212A",light1:"#EFA1AA",light2:"#FAEDEE"},warning:{base:"#FF7F44",dark1:"#BF5E33",dark2:"#7F3F21",light1:"#FEC0A1",light2:"#FFF2EC"},alert:{base:"#FCC700",dark1:"#BC9501",dark2:"#7D6300",light1:"#FDE380",light2:"#FEF9E6"},success:{base:"#5AC189",dark1:"#439066",dark2:"#2B6144",light1:"#ACE1C4",light2:"#EEF8F3"},info:{base:"#66BCFE",dark1:"#4D8CBE",dark2:"#315E7E",light1:"#B3DEFE",light2:"#EFF8FE"}},opacity:{light:"10%",mediumLight:"35%",mediumHeavy:"60%",heavy:"80%"},typography:{families:{sansSerif:"'Inter', Helvetica, Arial",serif:"Georgia, 'Times New Roman', Times, serif",monospace:"'Fira Code', 'Courier New', monospace"},weights:{light:200,normal:400,bold:700},sizes:{xxs:9,xs:10,s:12,m:14,l:16,xl:21,xxl:28}},zIndex:{aboveDashboardCharts:10,dropdown:11,max:3e3},transitionTiming:.3,gridUnit:4};t.supersetTheme=l;var s=o;t.default=s},mdmF:function(e,t,a){},"o/2+":function(e,t,a){"use strict";var r=a("q1tI"),n=Object(r.createContext)({});t.a=n},pIsd:function(e,t,a){var r=a("BJfS"),n=function(e){var t="",a=Object.keys(e);return a.forEach((function(n,i){var o=e[n];(function(e){return/[height|width]$/.test(e)})(n=r(n))&&"number"==typeof o&&(o+="px"),t+=!0===o?n:!1===o?"not "+n:"("+n+": "+o+")",i<a.length-1&&(t+=" and ")})),t};e.exports=function(e){var t="";return"string"==typeof e?e:e instanceof Array?(e.forEach((function(a,r){t+=n(a),r<e.length-1&&(t+=", ")})),t):n(e)}},q01k:function(e,t,a){"use strict";a.r(t),a.d(t,"render",(function(){return T}));var r=window.document,n=window.Math,i=window.HTMLElement,o=window.XMLHttpRequest,l=function(e){return function(t,a,r){var n=e.createElement(t);if(null!=a)for(var i in a){var o=a[i];null!=o&&(null!=n[i]?n[i]=o:n.setAttribute(i,o))}if(null!=r)for(var l=0,s=r.length;l<s;l++){var d=r[l];n.appendChild("string"==typeof d?e.createTextNode(d):d)}return n}},s=l(r),d=function(e,t){return{}.hasOwnProperty.call(e,t)},c=function(e){return(""+e).toLowerCase()},u="github.com",f=o&&"prototype"in o&&"withCredentials"in o.prototype,p=f&&i&&"attachShadow"in i.prototype&&!("prototype"in i.prototype.attachShadow),h=function(e,t,a){e.addEventListener?e.addEventListener(t,a,!1):e.attachEvent("on"+t,a)},g=function(e,t,a){e.removeEventListener?e.removeEventListener(t,a,!1):e.detachEvent("on"+t,a)},m={light:".btn{color:#24292e;background-color:#eff3f6;border-color:#c5c9cc;border-color:rgba(27,31,35,.2);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23fafbfc'/%3e%3cstop offset='90%25' stop-color='%23eff3f6'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #fafbfc, #eff3f6 90%);background-image:linear-gradient(180deg, #fafbfc, #eff3f6 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFFAFBFC', endColorstr='#FFEEF2F5')}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#e6ebf1;background-position:-0.5em;border-color:#9fa4a9;border-color:rgba(27,31,35,.35);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f0f3f6'/%3e%3cstop offset='90%25' stop-color='%23e6ebf1'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f0f3f6, #e6ebf1 90%);background-image:linear-gradient(180deg, #f0f3f6, #e6ebf1 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF0F3F6', endColorstr='#FFE5EAF0')}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#e9ecef;border-color:#a1a4a8;border-color:rgba(27,31,35,.35);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);background-image:none;filter:none}.social-count{color:#24292e;background-color:#fff;border-color:#d1d2d3;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#0366d6}.octicon-heart{color:#ea4aaa}",dark:".btn{color:#fafbfc;background-color:#202428;border-color:#1f2327;border-color:rgba(27,31,35,.2);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232f363d'/%3e%3cstop offset='90%25' stop-color='%23202428'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #2f363d, #202428 90%);background-image:linear-gradient(180deg, #2f363d, #202428 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2F363D', endColorstr='#FF1E2226')}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#1b1f23;background-position:-0.5em;border-color:#1b1f23;border-color:rgba(27,31,35,.5);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232b3137'/%3e%3cstop offset='90%25' stop-color='%231b1f23'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #2b3137, #1b1f23 90%);background-image:linear-gradient(180deg, #2b3137, #1b1f23 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2B3137', endColorstr='#FF191D21')}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#181b1f;border-color:#1a1d21;border-color:rgba(27,31,35,.5);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);background-image:none;filter:none}.social-count{color:#fafbfc;background-color:#1b1f23;border-color:#1b1f23;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#2188ff}.octicon-heart{color:#ec6cb9}"},v=function(e,t){return"@media(prefers-color-scheme:"+e+"){"+m[d(m,t)?t:e]+"}"},b=function(e){if(null==e)return m.light;if(d(m,e))return m[e];var t=function(e,t,a,r){null==t&&(t="&"),null==a&&(a="="),null==r&&(r=window.decodeURIComponent);for(var n={},i=e.split(t),o=0,l=i.length;o<l;o++){var s=i[o];if(""!==s){var d=s.split(a);n[r(d[0])]=null!=d[1]?r(d.slice(1).join(a)):void 0}}return n}(e,";",":",(function(e){return e.replace(/^[ \t\n\f\r]+|[ \t\n\f\r]+$/g,"")}));return m[d(m,t["no-preference"])?t["no-preference"]:"light"]+v("light",t.light)+v("dark",t.dark)},y={"mark-github":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>'}}},heart:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"></path>'}}},eye:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>'}}},star:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path>'}}},"repo-forked":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path>'}}},"repo-template":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M6 .75A.75.75 0 016.75 0h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 .75zm5 0a.75.75 0 01.75-.75h1.5a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V1.5h-.75A.75.75 0 0111 .75zM4.992.662a.75.75 0 01-.636.848c-.436.063-.783.41-.846.846a.75.75 0 01-1.485-.212A2.501 2.501 0 014.144.025a.75.75 0 01.848.637zM2.75 4a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 012.75 4zm10.5 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5a.75.75 0 01.75-.75zM2.75 8a.75.75 0 01.75.75v.268A1.72 1.72 0 013.75 9h.5a.75.75 0 010 1.5h-.5a.25.25 0 00-.25.25v.75c0 .28.114.532.3.714a.75.75 0 01-1.05 1.072A2.495 2.495 0 012 11.5V8.75A.75.75 0 012.75 8zm10.5 0a.75.75 0 01.75.75v4.5a.75.75 0 01-.75.75h-2.5a.75.75 0 010-1.5h1.75v-2h-.75a.75.75 0 010-1.5h.75v-.25a.75.75 0 01.75-.75zM6 9.75A.75.75 0 016.75 9h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 9.75zm-1 2.5v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>'}}},"issue-opened":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"></path>'}}},download:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"></path>'}}}},w=function(e,t){e=c(e).replace(/^octicon-/,""),d(y,e)||(e="mark-github");var a=t>=24&&24 in y[e].heights?24:16,r=y[e].heights[a];return'<svg viewBox="0 0 '+r.width+" "+a+'" width="'+t*r.width/a+'" height="'+t+'" class="octicon octicon-'+e+'" aria-hidden="true">'+r.path+"</svg>"},S={},k=function(e,t){var a=S[e]||(S[e]=[]);if(!(a.push(t)>1)){var r=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete S[e];t=a.shift();)t.apply(null,arguments)}));if(f){var n=new o;h(n,"abort",r),h(n,"error",r),h(n,"load",(function(){var e;try{e=JSON.parse(this.responseText)}catch(t){return void r(t)}r(200!==this.status,e)})),n.open("GET",e),n.send()}else{var i=this||window;i._=function(e){i._=null,r(200!==e.meta.status,e.data)};var s=l(i.document)("script",{async:!0,src:e+(-1!==e.indexOf("?")?"&":"?")+"callback=_"}),d=function(){i._&&i._({meta:{}})};h(s,"load",d),h(s,"error",d),s.readyState&&function(e,t,a){h(e,"readystatechange",(function r(){if(t.test(e.readyState))return g(e,"readystatechange",r),a.apply(this,arguments)}))}(s,/de|m/,d),i.document.getElementsByTagName("head")[0].appendChild(s)}}},x=function(e,t,a){var r=l(e.ownerDocument),n=e.appendChild(r("style",{type:"text/css"})),i="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;line-height:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:20px;padding:3px 10px;font-size:12px;line-height:20px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}"+b(t["data-color-scheme"]);n.styleSheet?n.styleSheet.cssText=i:n.appendChild(e.ownerDocument.createTextNode(i));var o="large"===c(t["data-size"]),s=r("a",{className:"btn",href:t.href,rel:"noopener",target:"_blank",title:t.title||void 0,"aria-label":t["aria-label"]||void 0,innerHTML:w(t["data-icon"],o?16:14)},[" ",r("span",{},[t["data-text"]||""])]),d=e.appendChild(r("div",{className:"widget"+(o?" widget-lg":"")},[s])),f=s.hostname.replace(/\.$/,"");if(f.length<u.length||("."+f).substring(f.length-u.length)!=="."+u)return s.removeAttribute("href"),void a(d);var p=(" /"+s.pathname).split(/\/+/);if(((f===u||f==="gist."+u)&&"archive"===p[3]||f===u&&"releases"===p[3]&&("download"===p[4]||"latest"===p[4]&&"download"===p[5])||f==="codeload."+u)&&(s.target="_top"),"true"===c(t["data-show-count"])&&f===u){var h,g;if(!p[2]&&p[1])g="followers",h="?tab=followers";else if(!p[3]&&p[2])g="stargazers_count",h="/stargazers";else if(p[4]||"subscription"!==p[3])if(p[4]||"fork"!==p[3]){if("issues"!==p[3])return void a(d);g="open_issues_count",h="/issues"}else g="forks_count",h="/network/members";else g="subscribers_count",h="/watchers";var m=p[2]?"/repos/"+p[1]+"/"+p[2]:"/users/"+p[1];k.call(this,"https://api.github.com"+m,(function(e,t){if(!e){var n=t[g];d.appendChild(r("a",{className:"social-count",href:t.html_url+h,rel:"noopener",target:"_blank","aria-label":n+" "+g.replace(/_count$/,"").replace("_"," ").slice(0,n<2?-1:void 0)+" on GitHub"},[(""+n).replace(/\B(?=(\d{3})+(?!\d))/g,",")]))}a(d)}))}else a(d)},O=window.devicePixelRatio||1,E=function(e){return(O>1?n.ceil(n.round(e*O)/O*2)/2:n.ceil(e))||0},C=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},T=function(e,t){if(null!=e&&null!=t)if(e.getAttribute&&(e=function(e){for(var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")},a=["icon","color-scheme","text","size","show-count"],r=0,n=a.length;r<n;r++){var i="data-"+a[r];t[i]=e.getAttribute(i)}return null==t["data-text"]&&(t["data-text"]=e.textContent||e.innerText),t}(e)),p){var a=s("span");x(a.attachShadow({mode:"closed"}),e,(function(){t(a)}))}else{var i=s("iframe",{src:"javascript:0",title:e.title||void 0,allowtransparency:!0,scrolling:"no",frameBorder:0});C(i,[0,0]),i.style.border="none";h(i,"load",(function a(){var o,l=i.contentWindow;try{o=l.document.body}catch(s){return void r.body.appendChild(i.parentNode.removeChild(i))}g(i,"load",a),x.call(l,o,e,(function(a){var r=function(e){var t=e.offsetWidth,a=e.offsetHeight;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=n.max(t,E(r.width)),a=n.max(a,E(r.height))}return[t,a]}(a);i.parentNode.removeChild(i),function(e,t,a){h(e,t,(function r(){return g(e,t,r),a.apply(this,arguments)}))}(i,"load",(function(){C(i,r)})),i.src="https://unpkg.com/github-buttons@2.14.0/dist/buttons.html#"+(i.name=function(e,t,a,r){null==t&&(t="&"),null==a&&(a="="),null==r&&(r=window.encodeURIComponent);var n=[];for(var i in e){var o=e[i];null!=o&&n.push(r(i)+a+r(o))}return n.join(t)}(e)),t(i)}))})),r.body.appendChild(i)}}},qrJ5:function(e,t,a){"use strict";var r=a("pVnL"),n=a.n(r),i=a("lSNA"),o=a.n(i),l=a("cDf5"),s=a.n(l),d=a("J4zp"),c=a.n(d),u=a("q1tI"),f=a("TSYQ"),p=a.n(f),h=a("H84U"),g=a("o/2+"),m=a("CWQg"),v=a("ACnJ"),b=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]])}return a},y=(Object(m.a)("top","middle","bottom","stretch"),Object(m.a)("start","end","center","space-around","space-between"),u.forwardRef((function(e,t){var a=u.useState({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),r=c()(a,2),i=r[0],l=r[1],d=u.useRef();d.current=e.gutter,u.useEffect((function(){var e=v.a.subscribe((function(e){var t=d.current||0;(!Array.isArray(t)&&"object"===s()(t)||Array.isArray(t)&&("object"===s()(t[0])||"object"===s()(t[1])))&&l(e)}));return function(){v.a.unsubscribe(e)}}),[]);var f=function(a){var r,l=a.getPrefixCls,d=a.direction,c=e.prefixCls,f=e.justify,h=e.align,m=e.className,y=e.style,w=e.children,S=b(e,["prefixCls","justify","align","className","style","children"]),k=l("row",c),x=function(){var t=[0,0],a=e.gutter,r=void 0===a?0:a;return(Array.isArray(r)?r:[r,0]).forEach((function(e,a){if("object"===s()(e))for(var r=0;r<v.b.length;r++){var n=v.b[r];if(i[n]&&void 0!==e[n]){t[a]=e[n];break}}else t[a]=e||0})),t}(),O=p()(k,(r={},o()(r,"".concat(k,"-").concat(f),f),o()(r,"".concat(k,"-").concat(h),h),o()(r,"".concat(k,"-rtl"),"rtl"===d),r),m),E=n()(n()(n()({},x[0]>0?{marginLeft:x[0]/-2,marginRight:x[0]/-2}:{}),x[1]>0?{marginTop:x[1]/-2,marginBottom:x[1]/2}:{}),y),C=n()({},S);return delete C.gutter,u.createElement(g.a.Provider,{value:{gutter:x}},u.createElement("div",n()({},C,{className:O,style:E,ref:t}),w))};return u.createElement(h.a,null,f)})));y.displayName="Row",t.a=y},"rO+z":function(e,t,a){"use strict";a("SchZ"),a("4t1q")},wLTh:function(e,t,a){"use strict";a.r(t),a.d(t,"ThemeProvider",(function(){return m})),a.d(t,"useTheme",(function(){return b})),a.d(t,"withTheme",(function(){return v}));var r=a("lSNA"),n=a.n(r),i=a("q1tI"),o=a.n(i),l=a("qKvR"),s=a("gRFL"),d=a("pVnL"),c=a.n(d),u=a("2mql"),f=a.n(u);function p(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}var h=function(e,t){return"function"==typeof t?t(e):function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?p(a,!0).forEach((function(t){n()(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):p(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},e,{},t)},g=Object(s.a)((function(e){return Object(s.a)((function(t){return h(e,t)}))})),m=function(e){return Object(i.createElement)(l.b.Consumer,null,(function(t){return e.theme!==t&&(t=g(t)(e.theme)),Object(i.createElement)(l.b.Provider,{value:t},e.children)}))};function v(e){var t=e.displayName||e.name||"Component",a=Object(i.forwardRef)((function(t,a){return Object(i.createElement)(l.b.Consumer,null,(function(r){return Object(i.createElement)(e,c()({theme:r,ref:a},t))}))}));return a.displayName="WithTheme("+t+")",f()(a,e)}function b(){return o.a.useContext(l.b)}}}]);
//# sourceMappingURL=component---src-pages-index-tsx-1f79b7f3c4c9c7f8e123.js.map