(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[6265],{830:function(e,t,n){"use strict";n.d(t,{W:function(){return a}});var r=n(7294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},6681:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(7294),a="iconExternalLink_3J9K",o=function(e){var t=e.width,n=void 0===t?13.5:t,o=e.height,c=void 0===o?13.5:o;return r.createElement("svg",{width:n,height:c,"aria-hidden":"true",viewBox:"0 0 24 24",className:a},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},6416:function(e,t,n){"use strict";var r=n(2122),a=n(9756),o=n(7294),c=["width","height","className"];t.Z=function(e){var t=e.width,n=void 0===t?30:t,l=e.height,i=void 0===l?30:l,s=e.className,u=(0,a.Z)(e,c);return o.createElement("svg",(0,r.Z)({className:s,width:n,height:i,viewBox:"0 0 30 30","aria-hidden":"true"},u),o.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}},6265:function(e,t,n){"use strict";n.d(t,{Z:function(){return Be}});var r=n(7294),a=n(6010),o=n(5977),c=n(7130),l=n(2433),i="skipToContent_1oUP";function s(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}var u=function(){var e=(0,r.useRef)(null),t=(0,o.k6)().action;return(0,l.SL)((function(n){var r=n.location;e.current&&!r.hash&&"POP"!==t&&s(e.current)})),r.createElement("div",{ref:e},r.createElement("a",{href:"#",className:i,onClick:function(e){e.preventDefault();var t=document.querySelector("main:first-of-type")||document.querySelector(".main-wrapper");t&&s(t)}},r.createElement(c.Z,{id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"},"Skip to main content")))},m="announcementBar_3WsW",d="announcementBarClose_38nx",f="announcementBarContent_3EUC",v="announcementBarCloseable_3myR";var h=function(){var e,t=(0,l.nT)(),n=t.isClosed,o=t.close,i=(0,l.LU)().announcementBar;if(!i)return null;var s=i.content,u=i.backgroundColor,h=i.textColor,g=i.isCloseable;return!s||g&&n?null:r.createElement("div",{className:m,style:{backgroundColor:u,color:h},role:"banner"},r.createElement("div",{className:(0,a.Z)(f,(e={},e[v]=g,e)),dangerouslySetInnerHTML:{__html:s}}),g?r.createElement("button",{type:"button",className:(0,a.Z)(d,"clean-btn"),onClick:o,"aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},r.createElement("span",{"aria-hidden":"true"},"\xd7")):null)},g=n(2122),b=n(9756),p=n(3935),E=n(9962),k=n(9524),Z=n(2511),C=n(9584),w=n(9963);function y(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var N=n(830);function _(){return(_=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function S(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var L="Ctrl";var I=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=S(e,["translations"]),c=a.buttonText,l=void 0===c?"Search":c,i=a.buttonAriaLabel,s=void 0===i?"Search":i,u=(0,r.useMemo)((function(){return"undefined"!=typeof navigator?/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"\u2318":L:null}),[]);return r.createElement("button",_({type:"button",className:"DocSearch DocSearch-Button","aria-label":s},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(N.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},l)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==u&&r.createElement(r.Fragment,null,r.createElement("span",{className:"DocSearch-Button-Key"},u===L?r.createElement(y,null):u),r.createElement("span",{className:"DocSearch-Button-Key"},"K"))))})),D=n(7849);function T(){var e=function(){var e=(0,E.Z)().i18n,t=(0,D._r)(),n=(0,D.WS)(),r=(0,l.Oh)(),a=[l.HX].concat(Object.keys(t).map((function(e){var a,o,c=(null==n||null==(a=n.activePlugin)?void 0:a.pluginId)===e?n.activeVersion:void 0,i=r[e],s=t[e].versions.find((function(e){return e.isLast})),u=null!=(o=null!=c?c:i)?o:s;return(0,l.os)(e,u.name)})));return{locale:e.currentLocale,tags:a}}();return["language:"+e.locale,e.tags.map((function(e){return"docusaurus_tag:"+e}))]}var B="searchBox_1Doo",P=["contextualSearch"],x=null;function M(e){var t=e.hit,n=e.children;return r.createElement(Z.Z,{to:t.url},n)}function A(e){var t=e.state,n=e.onClose,a=(0,w.Z)().generateSearchPageLink;return r.createElement(Z.Z,{to:a(t.query),onClick:n},"See all ",t.context.nbHits," results")}function O(e){var t,a,l=e.contextualSearch,i=(0,b.Z)(e,P),s=(0,E.Z)().siteMetadata,u=T(),m=null!=(t=null==(a=i.searchParameters)?void 0:a.facetFilters)?t:[],d=l?[].concat(u,m):m,f=Object.assign({},i.searchParameters,{facetFilters:d}),v=(0,k.C)().withBaseUrl,h=(0,o.k6)(),Z=(0,r.useRef)(null),w=(0,r.useRef)(null),y=(0,r.useState)(!1),N=y[0],_=y[1],S=(0,r.useState)(null),L=S[0],D=S[1],O=(0,r.useCallback)((function(){return x?Promise.resolve():Promise.all([n.e(4300).then(n.bind(n,4300)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,6945)),Promise.all([n.e(532),n.e(1212)]).then(n.bind(n,1212))]).then((function(e){var t=e[0].DocSearchModal;x=t}))}),[]),R=(0,r.useCallback)((function(){O().then((function(){Z.current=document.createElement("div"),document.body.insertBefore(Z.current,document.body.firstChild),_(!0)}))}),[O,_]),U=(0,r.useCallback)((function(){_(!1),Z.current.remove()}),[_]),V=(0,r.useCallback)((function(e){O().then((function(){_(!0),D(e.key)}))}),[O,_,D]),W=(0,r.useRef)({navigate:function(e){var t=e.itemUrl;h.push(t)}}).current,H=(0,r.useRef)((function(e){return e.map((function(e){var t=document.createElement("a");return t.href=e.url,Object.assign({},e,{url:v(""+t.pathname+t.hash)})}))})).current,j=(0,r.useMemo)((function(){return function(e){return r.createElement(A,(0,g.Z)({},e,{onClose:U}))}}),[U]),z=(0,r.useCallback)((function(e){return e.addAlgoliaAgent("docusaurus",s.docusaurusVersion),e}),[s.docusaurusVersion]);!function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,c=e.searchButtonRef;r.useEffect((function(){function e(e){(27===e.keyCode&&t||"k"===e.key&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),c&&c.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,c])}({isOpen:N,onOpen:R,onClose:U,onInput:V,searchButtonRef:w});var q=(0,c.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"});return r.createElement(r.Fragment,null,r.createElement(C.Z,null,r.createElement("link",{rel:"preconnect",href:"https://"+i.appId+"-dsn.algolia.net",crossOrigin:"anonymous"})),r.createElement("div",{className:B},r.createElement(I,{onTouchStart:O,onFocus:O,onMouseOver:O,onClick:R,ref:w,translations:{buttonText:q,buttonAriaLabel:q}})),N&&(0,p.createPortal)(r.createElement(x,(0,g.Z)({onClose:U,initialScrollY:window.scrollY,initialQuery:L,navigator:W,transformItems:H,hitComponent:M,resultsFooterComponent:j,transformSearchClient:z},i,{searchParameters:f})),Z.current))}var R=function(){var e=(0,E.Z)().siteConfig;return r.createElement(O,e.themeConfig.algolia)},U={toggle:"toggle_71bT"},V=function(e){var t=e.icon,n=e.style;return r.createElement("span",{className:(0,a.Z)(U.toggle,U.dark),style:n},t)},W=function(e){var t=e.icon,n=e.style;return r.createElement("span",{className:(0,a.Z)(U.toggle,U.light),style:n},t)},H=(0,r.memo)((function(e){var t=e.className,n=e.icons,o=e.checked,c=e.disabled,l=e.onChange,i=(0,r.useState)(o),s=i[0],u=i[1],m=(0,r.useState)(!1),d=m[0],f=m[1],v=(0,r.useRef)(null);return r.createElement("div",{className:(0,a.Z)("react-toggle",t,{"react-toggle--checked":s,"react-toggle--focus":d,"react-toggle--disabled":c})},r.createElement("div",{className:"react-toggle-track",role:"button",tabIndex:-1,onClick:function(){var e;return null==(e=v.current)?void 0:e.click()}},r.createElement("div",{className:"react-toggle-track-check"},n.checked),r.createElement("div",{className:"react-toggle-track-x"},n.unchecked),r.createElement("div",{className:"react-toggle-thumb"})),r.createElement("input",{ref:v,checked:s,type:"checkbox",className:"react-toggle-screenreader-only","aria-label":"Switch between dark and light mode",onChange:l,onClick:function(){return u(!s)},onFocus:function(){return f(!0)},onBlur:function(){return f(!1)}}))}));function j(e){var t=(0,l.LU)().colorMode.switchConfig,n=t.darkIcon,a=t.darkIconStyle,o=t.lightIcon,c=t.lightIconStyle,i=(0,E.Z)().isClient;return r.createElement(H,(0,g.Z)({disabled:!i,icons:{checked:r.createElement(V,{icon:n,style:a}),unchecked:r.createElement(W,{icon:o,style:c})}},e))}var z=n(8002),q=n(5717),K=function(e){var t=(0,o.TH)(),n=(0,r.useState)(e),a=n[0],c=n[1],i=(0,r.useRef)(!1),s=(0,r.useState)(0),u=s[0],m=s[1],d=(0,r.useCallback)((function(e){null!==e&&m(e.getBoundingClientRect().height)}),[]);return(0,q.Z)((function(t,n){var r=t.scrollY,a=n.scrollY;if(e)if(r<u)c(!0);else{if(i.current)return i.current=!1,void c(!1);a&&0===r&&c(!0);var o=document.documentElement.scrollHeight-u,l=window.innerHeight;a&&r>=a?c(!1):r+l<o&&c(!0)}}),[u,i]),(0,l.SL)((function(t){e&&!t.location.hash&&c(!0)})),(0,r.useEffect)((function(){e&&t.hash&&(i.current=!0)}),[t.hash]),{navbarRef:d,isNavbarVisible:a}},F=n(9729),G=n(3301),Y=n(6971),Q=["width","height"],X=function(e){var t=e.width,n=void 0===t?20:t,a=e.height,o=void 0===a?20:a,c=(0,b.Z)(e,Q);return r.createElement("svg",(0,g.Z)({viewBox:"0 0 20 20",width:n,height:o,"aria-hidden":"true"},c),r.createElement("path",{fill:"currentColor",d:"M19.753 10.909c-.624-1.707-2.366-2.726-4.661-2.726-.09 0-.176.002-.262.006l-.016-2.063 3.525-.607c.115-.019.133-.119.109-.231-.023-.111-.167-.883-.188-.976-.027-.131-.102-.127-.207-.109-.104.018-3.25.461-3.25.461l-.013-2.078c-.001-.125-.069-.158-.194-.156l-1.025.016c-.105.002-.164.049-.162.148l.033 2.307s-3.061.527-3.144.543c-.084.014-.17.053-.151.143.019.09.19 1.094.208 1.172.018.08.072.129.188.107l2.924-.504.035 2.018c-1.077.281-1.801.824-2.256 1.303-.768.807-1.207 1.887-1.207 2.963 0 1.586.971 2.529 2.328 2.695 3.162.387 5.119-3.06 5.769-4.715 1.097 1.506.256 4.354-2.094 5.98-.043.029-.098.129-.033.207l.619.756c.08.096.206.059.256.023 2.51-1.73 3.661-4.515 2.869-6.683zm-7.386 3.188c-.966-.121-.944-.914-.944-1.453 0-.773.327-1.58.876-2.156a3.21 3.21 0 011.229-.799l.082 4.277a2.773 2.773 0 01-1.243.131zm2.427-.553l.046-4.109c.084-.004.166-.01.252-.01.773 0 1.494.145 1.885.361.391.217-1.023 2.713-2.183 3.758zm-8.95-7.668a.196.196 0 00-.196-.145h-1.95a.194.194 0 00-.194.144L.008 16.916c-.017.051-.011.076.062.076h1.733c.075 0 .099-.023.114-.072l1.008-3.318h3.496l1.008 3.318c.016.049.039.072.113.072h1.734c.072 0 .078-.025.062-.076-.014-.05-3.083-9.741-3.494-11.04zm-2.618 6.318l1.447-5.25 1.447 5.25H3.226z"}))},J=["mobile","dropdownItemsBefore","dropdownItemsAfter"];function $(e){var t=e.mobile,n=e.dropdownItemsBefore,a=e.dropdownItemsAfter,o=(0,b.Z)(e,J),c=(0,E.Z)().i18n,i=c.currentLocale,s=c.locales,u=c.localeConfigs,m=(0,l.l5)();function d(e){return u[e].label}var f=s.map((function(e){var t="pathname://"+m.createUrl({locale:e,fullyQualified:!1});return{isNavLink:!0,label:d(e),to:t,target:"_self",autoAddBaseUrl:!1,className:e===i?"dropdown__link--active":"",style:{textTransform:"capitalize"}}})),v=[].concat(n,f,a),h=t?"Languages":d(i);return r.createElement(Y.Z,(0,g.Z)({},o,{href:"#",mobile:t,label:r.createElement("span",null,r.createElement(X,{style:{verticalAlign:"text-bottom",marginRight:5}}),r.createElement("span",null,h)),items:v}))}function ee(e){return e.mobile?null:r.createElement(R,null)}var te=["type"],ne={default:function(){return Y.Z},localeDropdown:function(){return $},search:function(){return ee},docsVersion:function(){return n(6028).Z},docsVersionDropdown:function(){return n(7999).Z},doc:function(){return n(4520).Z}};function re(e){var t=e.type,n=(0,b.Z)(e,te),a=function(e){void 0===e&&(e="default");var t=ne[e];if(!t)throw new Error('No NavbarItem component found for type "'+e+'".');return t()}(t);return r.createElement(a,n)}var ae=n(2827),oe=n(6416),ce="displayOnlyInLargeViewport_GrZ2",le="navbarHideable_2qcr",ie="navbarHidden_3yey",se="right";var ue=function(){var e,t=(0,l.LU)(),n=t.navbar,o=n.items,c=n.hideOnScroll,i=n.style,s=t.colorMode.disableSwitch,u=(0,r.useState)(!1),m=u[0],d=u[1],f=(0,z.Z)(),v=f.isDarkTheme,h=f.setLightTheme,b=f.setDarkTheme,p=K(c),E=p.navbarRef,k=p.isNavbarVisible;(0,F.Z)(m);var Z=(0,r.useCallback)((function(){d(!0)}),[d]),C=(0,r.useCallback)((function(){d(!1)}),[d]),w=(0,r.useCallback)((function(e){return e.target.checked?b():h()}),[h,b]),y=(0,G.Z)();(0,r.useEffect)((function(){y===G.D.desktop&&d(!1)}),[y]);var N=o.some((function(e){return"search"===e.type})),_=function(e){return{leftItems:e.filter((function(e){var t;return"left"===(null!=(t=e.position)?t:se)})),rightItems:e.filter((function(e){var t;return"right"===(null!=(t=e.position)?t:se)}))}}(o),S=_.leftItems,L=_.rightItems;return r.createElement("nav",{ref:E,className:(0,a.Z)("navbar","navbar--fixed-top",(e={"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":m},e[le]=c,e[ie]=c&&!k,e))},r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},null!=o&&0!==o.length&&r.createElement("button",{"aria-label":"Navigation bar toggle",className:"navbar__toggle clean-btn",type:"button",tabIndex:0,onClick:Z,onKeyDown:Z},r.createElement(oe.Z,null)),r.createElement(ae.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title"}),S.map((function(e,t){return r.createElement(re,(0,g.Z)({},e,{key:t}))}))),r.createElement("div",{className:"navbar__items navbar__items--right"},L.map((function(e,t){return r.createElement(re,(0,g.Z)({},e,{key:t}))})),!s&&r.createElement(j,{className:ce,checked:v,onChange:w}),!N&&r.createElement(R,null))),r.createElement("div",{role:"presentation",className:"navbar-sidebar__backdrop",onClick:C}),r.createElement("div",{className:"navbar-sidebar"},r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(ae.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title",onClick:C}),!s&&m&&r.createElement(j,{checked:v,onChange:w})),r.createElement("div",{className:"navbar-sidebar__items"},r.createElement("div",{className:"menu"},r.createElement("ul",{className:"menu__list"},o.map((function(e,t){return r.createElement(re,(0,g.Z)({mobile:!0},e,{onClick:C,key:t}))})))))))},me=n(283),de=n(6136),fe=(0,l.WA)("theme"),ve="light",he="dark",ge=function(e){return e===he?he:ve},be=function(e){(0,l.WA)("theme").set(ge(e))},pe=function(){var e=(0,l.LU)().colorMode,t=e.defaultMode,n=e.disableSwitch,a=e.respectPrefersColorScheme,o=(0,r.useState)(function(e){return de.Z.canUseDOM?ge(document.documentElement.getAttribute("data-theme")):ge(e)}(t)),c=o[0],i=o[1],s=(0,r.useCallback)((function(){i(ve),be(ve)}),[]),u=(0,r.useCallback)((function(){i(he),be(he)}),[]);return(0,r.useEffect)((function(){document.documentElement.setAttribute("data-theme",ge(c))}),[c]),(0,r.useEffect)((function(){if(!n)try{var e=fe.get();null!==e&&i(ge(e))}catch(t){console.error(t)}}),[i]),(0,r.useEffect)((function(){n&&!a||window.matchMedia("(prefers-color-scheme: dark)").addListener((function(e){var t=e.matches;i(t?he:ve)}))}),[]),{isDarkTheme:c===he,setLightTheme:s,setDarkTheme:u}},Ee=n(5406);var ke=function(e){var t=pe(),n=t.isDarkTheme,a=t.setLightTheme,o=t.setDarkTheme;return r.createElement(Ee.Z.Provider,{value:{isDarkTheme:n,setLightTheme:a,setDarkTheme:o}},e.children)},Ze="docusaurus.tab.",Ce=function(){var e=(0,r.useState)({}),t=e[0],n=e[1],a=(0,r.useCallback)((function(e,t){(0,l.WA)("docusaurus.tab."+e).set(t)}),[]);return(0,r.useEffect)((function(){try{var e={};(0,l._f)().forEach((function(t){if(t.startsWith(Ze)){var n=t.substring(Ze.length);e[n]=(0,l.WA)(t).get()}})),n(e)}catch(t){console.error(t)}}),[]),{tabGroupChoices:t,setTabGroupChoices:function(e,t){n((function(n){var r;return Object.assign({},n,((r={})[e]=t,r))})),a(e,t)}}},we=n(2713);var ye=function(e){var t=Ce(),n=t.tabGroupChoices,a=t.setTabGroupChoices;return r.createElement(we.Z.Provider,{value:{tabGroupChoices:n,setTabGroupChoices:a}},e.children)};function Ne(e){var t=e.children;return r.createElement(ke,null,r.createElement(l.pl,null,r.createElement(ye,null,r.createElement(l.L5,null,t))))}function _e(e){var t=e.locale,n=e.version,a=e.tag,o=t;return r.createElement(C.Z,null,o&&r.createElement("meta",{name:"docsearch:language",content:o}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}var Se=n(4175);function Le(){var e=(0,E.Z)().i18n,t=e.defaultLocale,n=e.locales,a=(0,l.l5)();return r.createElement(C.Z,null,n.map((function(e){return r.createElement("link",{key:e,rel:"alternate",href:a.createUrl({locale:e,fullyQualified:!0}),hrefLang:e})})),r.createElement("link",{rel:"alternate",href:a.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}))}function Ie(e){var t=e.permalink,n=(0,E.Z)().siteConfig.url,a=function(){var e=(0,E.Z)().siteConfig.url,t=(0,o.TH)().pathname;return e+(0,k.Z)(t)}(),c=t?""+n+t:a;return r.createElement(C.Z,null,r.createElement("meta",{property:"og:url",content:c}),r.createElement("link",{rel:"canonical",href:c}))}function De(e){var t=(0,E.Z)(),n=t.siteConfig,a=n.favicon,o=n.themeConfig,c=o.metadatas,i=o.image,s=t.i18n,u=s.currentLocale,m=s.localeConfigs,d=e.title,f=e.description,v=e.image,h=e.keywords,b=e.searchMetadatas,p=(0,k.Z)(a),Z=(0,l.pe)(d),w=u,y=m[u].direction;return r.createElement(r.Fragment,null,r.createElement(C.Z,null,r.createElement("html",{lang:w,dir:y}),a&&r.createElement("link",{rel:"shortcut icon",href:p}),r.createElement("title",null,Z),r.createElement("meta",{property:"og:title",content:Z}),v||i&&r.createElement("meta",{name:"twitter:card",content:"summary_large_image"})),r.createElement(Se.Z,{description:f,keywords:h,image:v}),r.createElement(Ie,null),r.createElement(Le,null),r.createElement(_e,(0,g.Z)({tag:l.HX,locale:u},b)),r.createElement(C.Z,null,c.map((function(e,t){return r.createElement("meta",(0,g.Z)({key:"metadata_"+t},e))}))))}var Te=function(){(0,r.useEffect)((function(){var e="navigation-with-keyboard";function t(t){"keydown"===t.type&&"Tab"===t.key&&document.body.classList.add(e),"mousedown"===t.type&&document.body.classList.remove(e)}return document.addEventListener("keydown",t),document.addEventListener("mousedown",t),function(){document.body.classList.remove(e),document.removeEventListener("keydown",t),document.removeEventListener("mousedown",t)}}),[])};var Be=function(e){var t=e.children,n=e.noFooter,o=e.wrapperClassName,c=e.pageClassName;return Te(),r.createElement(Ne,null,r.createElement(De,e),r.createElement(u,null),r.createElement(h,null),r.createElement(ue,null),r.createElement("div",{className:(0,a.Z)(l.kM.wrapper.main,o,c)},t),!n&&r.createElement(me.Z,null))}},2827:function(e,t,n){"use strict";var r=n(2122),a=n(9756),o=n(7294),c=n(2511),l=n(4087),i=n(9524),s=n(9962),u=["imageClassName","titleClassName"];t.Z=function(e){var t=(0,s.Z)(),n=t.siteConfig,m=n.title,d=n.themeConfig.navbar,f=d.title,v=d.logo,h=void 0===v?{src:""}:v,g=t.isClient,b=e.imageClassName,p=e.titleClassName,E=(0,a.Z)(e,u),k=(0,i.Z)(h.href||"/"),Z={light:(0,i.Z)(h.src),dark:(0,i.Z)(h.srcDark||h.src)};return o.createElement(c.Z,(0,r.Z)({to:k},E,h.target&&{target:h.target}),h.src&&o.createElement(l.Z,{key:g,className:b,sources:Z,alt:h.alt||f||m}),null!=f&&o.createElement("b",{className:p},f))}},6971:function(e,t,n){"use strict";var r=n(2122),a=n(9756),o=n(7294),c=n(6010),l=n(2511),i=n(9524),s=n(5977),u=n(2433),m=n(6681),d=n(2735),f=["activeBasePath","activeBaseRegex","to","href","label","activeClassName","prependBaseUrlToHref"],v=["items","position","className"],h=["className"],g=["items","className","position"],b=["className"],p=["mobile"],E="dropdown__link--active";function k(e){var t=e.activeBasePath,n=e.activeBaseRegex,c=e.to,s=e.href,u=e.label,v=e.activeClassName,h=void 0===v?"navbar__link--active":v,g=e.prependBaseUrlToHref,b=(0,a.Z)(e,f),p=(0,i.Z)(c),k=(0,i.Z)(t),Z=(0,i.Z)(s,{forcePrependBaseUrl:!0}),C=u&&s&&!(0,d.Z)(s),w=h===E;return o.createElement(l.Z,(0,r.Z)({},s?{href:g?Z:s}:Object.assign({isNavLink:!0,activeClassName:h,to:p},t||n?{isActive:function(e,t){return n?new RegExp(n).test(t.pathname):t.pathname.startsWith(k)}}:null),b),C?o.createElement("span",null,u,o.createElement(m.Z,w&&{width:12,height:12})):u)}function Z(e){var t,n=e.items,l=e.position,i=e.className,s=(0,a.Z)(e,v),u=(0,o.useRef)(null),m=(0,o.useRef)(null),d=(0,o.useState)(!1),f=d[0],g=d[1];(0,o.useEffect)((function(){var e=function(e){u.current&&!u.current.contains(e.target)&&g(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),function(){document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[u]);var b=function(e,t){return void 0===t&&(t=!1),(0,c.Z)({"navbar__item navbar__link":!t,dropdown__link:t},e)};return n?o.createElement("div",{ref:u,className:(0,c.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--left":"left"===l,"dropdown--right":"right"===l,"dropdown--show":f})},o.createElement(k,(0,r.Z)({className:b(i)},s,{onClick:s.to?void 0:function(e){return e.preventDefault()},onKeyDown:function(e){"Enter"===e.key&&(e.preventDefault(),g(!f))}}),null!=(t=s.children)?t:s.label),o.createElement("ul",{ref:m,className:"dropdown__menu"},n.map((function(e,t){var c=e.className,l=(0,a.Z)(e,h);return o.createElement("li",{key:t},o.createElement(k,(0,r.Z)({onKeyDown:function(e){if(t===n.length-1&&"Tab"===e.key){e.preventDefault(),g(!1);var r=u.current.nextElementSibling;r&&r.focus()}},activeClassName:E,className:b(c,!0)},l)))})))):o.createElement(k,(0,r.Z)({className:b(i)},s))}function C(e){var t,n,l,i=e.items,m=e.className,d=(e.position,(0,a.Z)(e,g)),f=(0,o.useRef)(null),v=(0,s.TH)().pathname,h=(0,o.useState)((function(){var e;return null==(e=!(null!=i&&i.some((function(e){return(0,u.Mg)(e.to,v)}))))||e})),p=h[0],E=h[1],Z=function(e,t){return void 0===t&&(t=!1),(0,c.Z)("menu__link",{"menu__link--sublist":t},e)};if(!i)return o.createElement("li",{className:"menu__list-item"},o.createElement(k,(0,r.Z)({className:Z(m)},d)));var C=null!=(t=f.current)&&t.scrollHeight?(null==(n=f.current)?void 0:n.scrollHeight)+"px":void 0;return o.createElement("li",{className:(0,c.Z)("menu__list-item",{"menu__list-item--collapsed":p})},o.createElement(k,(0,r.Z)({role:"button",className:Z(m,!0)},d,{onClick:function(e){e.preventDefault(),E((function(e){return!e}))}}),null!=(l=d.children)?l:d.label),o.createElement("ul",{className:"menu__list",ref:f,style:{height:p?void 0:C}},i.map((function(e,t){var n=e.className,c=(0,a.Z)(e,b);return o.createElement("li",{className:"menu__list-item",key:t},o.createElement(k,(0,r.Z)({activeClassName:"menu__link--active",className:Z(n)},c,{onClick:d.onClick})))}))))}t.Z=function(e){var t=e.mobile,n=void 0!==t&&t,r=(0,a.Z)(e,p),c=n?C:Z;return o.createElement(c,r)}},4520:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(2122),a=n(9756),o=n(7294),c=n(6971),l=n(7849),i=n(6010),s=n(2433),u=n(3905),m=["docId","activeSidebarClassName","label","docsPluginId"];function d(e){var t,n=e.docId,d=e.activeSidebarClassName,f=e.label,v=e.docsPluginId,h=(0,a.Z)(e,m),g=(0,l.Iw)(v),b=g.activeVersion,p=g.activeDoc,E=(0,s.J)(v).preferredVersion,k=(0,l.yW)(v),Z=function(e,t){var n,r=(n=[]).concat.apply(n,e.map((function(e){return e.docs}))),a=r.find((function(e){return e.id===t}));if(!a){var o=r.map((function(e){return e.id})).join("\n- ");throw new Error("DocNavbarItem: couldn't find any doc with id \""+t+'" in version'+(e.length?"s":"")+" "+e.map((function(e){return e.name})).join(", ")+'".\nAvailable doc ids are:\n- '+o)}return a}((0,u.uniq)([b,E,k].filter(Boolean)),n);return o.createElement(c.Z,(0,r.Z)({exact:!0},h,{className:(0,i.Z)(h.className,(t={},t[d]=p&&p.sidebar===Z.sidebar,t)),label:null!=f?f:Z.id,to:Z.path}))}},7999:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(2122),a=n(9756),o=n(7294),c=n(6971),l=n(7849),i=n(2433),s=["mobile","docsPluginId","dropdownActiveClassDisabled","dropdownItemsBefore","dropdownItemsAfter"],u=function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))};function m(e){var t,n,m=e.mobile,d=e.docsPluginId,f=e.dropdownActiveClassDisabled,v=e.dropdownItemsBefore,h=e.dropdownItemsAfter,g=(0,a.Z)(e,s),b=(0,l.Iw)(d),p=(0,l.gB)(d),E=(0,l.yW)(d),k=(0,i.J)(d),Z=k.preferredVersion,C=k.savePreferredVersionName;var w=function(){var e=p.map((function(e){var t=(null==b?void 0:b.alternateDocVersions[e.name])||u(e);return{isNavLink:!0,label:e.label,to:t.path,isActive:function(){return e===(null==b?void 0:b.activeVersion)},onClick:function(){C(e.name)}}})),t=[].concat(v,e,h);if(!(t.length<=1))return t}(),y=null!=(t=null!=(n=b.activeVersion)?n:Z)?t:E,N=m&&w?"Versions":y.label,_=m&&w?void 0:u(y).path;return o.createElement(c.Z,(0,r.Z)({},g,{mobile:m,label:N,to:_,items:w,isActive:f?function(){return!1}:void 0}))}},6028:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(2122),a=n(9756),o=n(7294),c=n(6971),l=n(7849),i=n(2433),s=["label","to","docsPluginId"];function u(e){var t,n=e.label,u=e.to,m=e.docsPluginId,d=(0,a.Z)(e,s),f=(0,l.zu)(m),v=(0,i.J)(m).preferredVersion,h=(0,l.yW)(m),g=null!=(t=null!=f?f:v)?t:h,b=null!=n?n:g.label,p=null!=u?u:function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))}(g).path;return o.createElement(c.Z,(0,r.Z)({},d,{label:b,to:p}))}},5406:function(e,t,n){"use strict";var r=n(7294).createContext(void 0);t.Z=r},4087:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var r=n(2122),a=n(9756),o=n(7294),c=n(6010),l=n(9962),i=n(8002),s={themedImage:"themedImage_1VuW","themedImage--light":"themedImage--light_3UqQ","themedImage--dark":"themedImage--dark_hz6m"},u=["sources","className","alt"],m=function(e){var t=(0,l.Z)().isClient,n=(0,i.Z)().isDarkTheme,m=e.sources,d=e.className,f=e.alt,v=void 0===f?"":f,h=(0,a.Z)(e,u),g=t?n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,g.map((function(e){return o.createElement("img",(0,r.Z)({key:e,src:m[e],alt:v,className:(0,c.Z)(s.themedImage,s["themedImage--"+e],d)},h))})))}},2713:function(e,t,n){"use strict";var r=(0,n(7294).createContext)(void 0);t.Z=r},9729:function(e,t,n){"use strict";var r=n(7294);t.Z=function(e){void 0===e&&(e=!0),(0,r.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e])}},5717:function(e,t,n){"use strict";var r=n(7294),a=n(6136),o=function(){return{scrollX:a.Z.canUseDOM?window.pageXOffset:0,scrollY:a.Z.canUseDOM?window.pageYOffset:0}};t.Z=function(e,t){void 0===t&&(t=[]);var n=(0,r.useRef)(o()),a=function(){var t=o();e&&e(t,n.current),n.current=t};(0,r.useEffect)((function(){var e={passive:!0};return a(),window.addEventListener("scroll",a,e),function(){return window.removeEventListener("scroll",a,e)}}),t)}},8002:function(e,t,n){"use strict";var r=n(7294),a=n(5406);t.Z=function(){var e=(0,r.useContext)(a.Z);if(null==e)throw new Error('"useThemeContext" is used outside of "Layout" component. Please see https://docusaurus.io/docs/api/themes/configuration#usethemecontext.');return e}},3301:function(e,t,n){"use strict";n.d(t,{D:function(){return o}});var r=n(7294),a=n(6136),o={desktop:"desktop",mobile:"mobile"};t.Z=function(){var e=a.Z.canUseDOM;function t(){if(e)return window.innerWidth>996?o.desktop:o.mobile}var n=(0,r.useState)(t),c=n[0],l=n[1];return(0,r.useEffect)((function(){if(e)return window.addEventListener("resize",n),function(){return window.removeEventListener("resize",n)};function n(){l(t())}}),[]),c}},9963:function(e,t,n){"use strict";var r=n(5977),a=n(6136),o=n(9962);t.Z=function(){var e=(0,r.k6)(),t=(0,r.TH)(),n=(0,o.Z)().siteConfig,c=(n=void 0===n?{}:n).baseUrl;return{searchValue:a.Z.canUseDOM&&new URLSearchParams(t.search).get("q")||"",updateSearchPath:function(n){var r=new URLSearchParams(t.search);n?r.set("q",n):r.delete("q"),e.replace({search:r.toString()})},generateSearchPageLink:function(e){return c+"search?q="+encodeURIComponent(e)}}}}}]);