"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6970],{4137:function(e,t,r){r.d(t,{Zo:function(){return m},kt:function(){return f}});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},l=Object.keys(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)r=l[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var o=n.createContext({}),s=function(e){var t=n.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=s(e.components);return n.createElement(o.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,o=e.parentName,m=c(e,["components","mdxType","originalType","parentName"]),d=s(r),f=a,p=d["".concat(o,".").concat(f)]||d[f]||u[f]||l;return r?n.createElement(p,i(i({ref:t},m),{},{components:r})):n.createElement(p,i({ref:t},m))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,i=new Array(l);i[0]=d;var c={};for(var o in t)hasOwnProperty.call(t,o)&&(c[o]=t[o]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var s=2;s<l;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},2896:function(e,t,r){r.d(t,{Z:function(){return E}});var n=r(3366),a=r(7294),l=r(6010),i=r(2051),c=r(2511),o="sidebar_2ahu",s="sidebarItemTitle_2hhb",m="sidebarItemList_2xAf",u="sidebarItem_2UVv",d="sidebarItemLink_1RT6",f="sidebarItemLinkActive_12pM",p=r(7130);function v(e){var t=e.sidebar;return 0===t.items.length?null:a.createElement("nav",{className:(0,l.Z)(o,"thin-scrollbar"),"aria-label":(0,p.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},a.createElement("div",{className:(0,l.Z)(s,"margin-bottom--md")},t.title),a.createElement("ul",{className:m},t.items.map((function(e){return a.createElement("li",{key:e.permalink,className:u},a.createElement(c.Z,{isNavLink:!0,to:e.permalink,className:d,activeClassName:f},e.title))}))))}var g=r(5389),h=["sidebar","toc","children"];var E=function(e){var t=e.sidebar,r=e.toc,c=e.children,o=(0,n.Z)(e,h),s=t&&t.items.length>0;return a.createElement(i.Z,o,a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},s&&a.createElement("aside",{className:"col col--3"},a.createElement(v,{sidebar:t})),a.createElement("main",{className:(0,l.Z)("col",{"col--7":s,"col--9 col--offset-1":!s})},c),r&&a.createElement("div",{className:"col col--2"},a.createElement(g.Z,{toc:r})))))}},2903:function(e,t,r){r.d(t,{Z:function(){return v}});var n=r(7294),a=r(6010),l=r(4137),i=r(7130),c=r(2511),o=r(8626),s=r(3006),m=r(4175),u=r(7680),d="blogPostTitle_GeHD",f="blogPostData_291c",p="blogPostDetailsFull_3kfx";var v=function(e){var t,r,v,g=(r=(0,o.c2)().selectMessage,function(e){var t=Math.ceil(e);return r(t,(0,i.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:t}))}),h=e.children,E=e.frontMatter,b=e.metadata,y=e.truncated,Z=e.isBlogPostPage,N=void 0!==Z&&Z,_=b.date,O=b.formattedDate,k=b.permalink,w=b.tags,T=b.readingTime,P=b.title,j=b.editUrl,x=E.author,C=E.image,L=E.keywords,I=E.author_url||E.authorURL,D=E.author_title||E.authorTitle,R=E.author_image_url||E.authorImageURL;return n.createElement(n.Fragment,null,n.createElement(m.Z,{keywords:L,image:C}),n.createElement("article",{className:N?void 0:"margin-bottom--xl"},(v=N?"h1":"h2",n.createElement("header",null,n.createElement(v,{className:d},N?P:n.createElement(c.Z,{to:k},P)),n.createElement("div",{className:(0,a.Z)(f,"margin-vert--md")},n.createElement("time",{dateTime:_},O),T&&n.createElement(n.Fragment,null," \xb7 ",g(T))),n.createElement("div",{className:"avatar margin-vert--md"},R&&n.createElement(c.Z,{className:"avatar__photo-link avatar__photo",href:I},n.createElement("img",{src:R,alt:x})),n.createElement("div",{className:"avatar__intro"},x&&n.createElement(n.Fragment,null,n.createElement("div",{className:"avatar__name"},n.createElement(c.Z,{href:I},x)),n.createElement("small",{className:"avatar__subtitle"},D)))))),n.createElement("div",{className:"markdown"},n.createElement(l.Zo,{components:s.Z},h)),(w.length>0||y)&&n.createElement("footer",{className:(0,a.Z)("row docusaurus-mt-lg",(t={},t[p]=N,t))},w.length>0&&n.createElement("div",{className:"col"},n.createElement("b",null,n.createElement(i.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),w.map((function(e){var t=e.label,r=e.permalink;return n.createElement(c.Z,{key:r,className:"margin-horiz--sm",to:r},t)}))),N&&j&&n.createElement("div",{className:"col margin-top--sm"},n.createElement(u.Z,{editUrl:j})),!N&&y&&n.createElement("div",{className:"col text--right"},n.createElement(c.Z,{to:b.permalink,"aria-label":"Read more about "+P},n.createElement("b",null,n.createElement(i.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More")))))))}},7680:function(e,t,r){r.d(t,{Z:function(){return u}});var n=r(7294),a=r(7130),l=r(7462),i=r(3366),c=r(6010),o="iconEdit_2_ui",s=["className"],m=function(e){var t=e.className,r=(0,i.Z)(e,s);return n.createElement("svg",(0,l.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,c.Z)(o,t),"aria-hidden":"true"},r),n.createElement("g",null,n.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))};function u(e){var t=e.editUrl;return n.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener"},n.createElement(m,null),n.createElement(a.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},3006:function(e,t,r){r.d(t,{Z:function(){return d}});var n=r(7462),a=r(7294),l=r(2511),i=r(3522),c=r(5607),o=r(6010),s=r(8626),m="details_1VDD";function u(e){var t=Object.assign({},e);return a.createElement(s.PO,(0,n.Z)({},t,{className:(0,o.Z)("alert alert--info",m,t.className)}))}var d={code:function(e){var t=e.children;return(0,a.isValidElement)(t)?t:t.includes("\n")?a.createElement(i.Z,e):a.createElement("code",e)},a:function(e){return a.createElement(l.Z,e)},pre:function(e){var t,r=e.children;return(0,a.isValidElement)(null==r||null==(t=r.props)?void 0:t.children)?null==r?void 0:r.props.children:a.createElement(i.Z,(0,a.isValidElement)(r)?null==r?void 0:r.props:Object.assign({},e))},details:function(e){var t=a.Children.toArray(e.children),r=t.find((function(e){var t;return"summary"===(null==e||null==(t=e.props)?void 0:t.mdxType)})),l=a.createElement(a.Fragment,null,t.filter((function(e){return e!==r})));return a.createElement(u,(0,n.Z)({},e,{summary:r}),l)},h1:(0,c.Z)("h1"),h2:(0,c.Z)("h2"),h3:(0,c.Z)("h3"),h4:(0,c.Z)("h4"),h5:(0,c.Z)("h5"),h6:(0,c.Z)("h6")}},5389:function(e,t,r){r.d(t,{r:function(){return o},Z:function(){return s}});var n=r(7294),a=r(6010);var l=function(e,t,r){var a=(0,n.useState)(void 0),l=a[0],i=a[1];(0,n.useEffect)((function(){function n(){var n=function(){var e=Array.from(document.getElementsByClassName("anchor")),t=e.find((function(e){return e.getBoundingClientRect().top>=r}));if(t){if(t.getBoundingClientRect().top>=r){var n=e[e.indexOf(t)-1];return null!=n?n:t}return t}return e[e.length-1]}();if(n)for(var a=0,c=!1,o=document.getElementsByClassName(e);a<o.length&&!c;){var s=o[a],m=s.href,u=decodeURIComponent(m.substring(m.indexOf("#")+1));n.id===u&&(l&&l.classList.remove(t),s.classList.add(t),i(s),c=!0),a+=1}}return document.addEventListener("scroll",n),document.addEventListener("resize",n),n(),function(){document.removeEventListener("scroll",n),document.removeEventListener("resize",n)}}))},i="tableOfContents_35-E",c="table-of-contents__link";function o(e){var t=e.toc,r=e.isChild;return t.length?n.createElement("ul",{className:r?"":"table-of-contents table-of-contents__left-border"},t.map((function(e){return n.createElement("li",{key:e.id},n.createElement("a",{href:"#"+e.id,className:c,dangerouslySetInnerHTML:{__html:e.value}}),n.createElement(o,{isChild:!0,toc:e.children}))}))):null}var s=function(e){var t=e.toc;return l(c,"table-of-contents__link--active",100),n.createElement("div",{className:(0,a.Z)(i,"thin-scrollbar")},n.createElement(o,{toc:t}))}}}]);