diff --git a/404.html b/404.html index bc37e38..18ade16 100644 --- a/404.html +++ b/404.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><div class="theme-doc-markdown markdown"><h1>Page Not Found</h1><p>This page no longer exists. It may have moved, or its content is no longer supported by Regression Games.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/assets/js/04115efe.a166a43b.js b/assets/js/04115efe.a166a43b.js new file mode 100644 index 0000000..a23234e --- /dev/null +++ b/assets/js/04115efe.a166a43b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[5792],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function r(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=r(e,["components","mdxType","originalType","parentName"]),d=p(a),m=o,h=d["".concat(l,".").concat(m)]||d[m]||c[m]||i;return a?n.createElement(h,s(s({ref:t},u),{},{components:a})):n.createElement(h,s({ref:t},u))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,s=new Array(i);s[0]=m;var r={};for(var l in t)hasOwnProperty.call(t,l)&&(r[l]=t[l]);r.originalType=e,r[d]="string"==typeof e?e:o,s[1]=r;for(var p=2;p<i;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},7889:(e,t,a)=>{a.d(t,{ZP:()=>r});var n=a(7462),o=(a(7294),a(3905));const i={toc:[]},s="wrapper";function r(e){let{components:t,...r}=e;return(0,o.kt)(s,(0,n.Z)({},i,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Find the ",(0,o.kt)("inlineCode",{parentName:"p"},"RGOverlayCanvasV2")," prefab by navigating to ",(0,o.kt)("strong",{parentName:"p"},"Packages")," > ",(0,o.kt)("strong",{parentName:"p"},"Regression Games Unity Bots")," > ",(0,o.kt)("strong",{parentName:"p"},"Runtime")," > ",(0,o.kt)("strong",{parentName:"p"},"Prefabs")," and\ndrag it into your scene's object hierarchy. Make sure that the canvas is at the top of the hierarchy, so that it is always\nvisible and interactable."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Note that this overlay ",(0,o.kt)("strong",{parentName:"p"},"must be present in your scene")," for Regression Games to function. The visibility\nof the overlay can be hidden through the Regression Games settings pane under ",(0,o.kt)("strong",{parentName:"p"},"Edit")," > ",(0,o.kt)("strong",{parentName:"p"},"Project Settings")," >\n",(0,o.kt)("strong",{parentName:"p"},"Regression Games"),". Place this component into each scene that must be able to use Regression Games SDK features.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the search pane for the RGOverlayCanvas.",src:a(4375).Z,width:"1084",height:"568"})))}r.isMDXComponent=!0},7360:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>r,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>u});var n=a(7462),o=(a(7294),a(3905)),i=a(7889);const s={sidebar_label:"Writing Your First Automated Test"},r="Writing Your First Automated Test",l={unversionedId:"tutorials/building-your-first-bot",id:"tutorials/building-your-first-bot",title:"Writing Your First Automated Test",description:"In this tutorial, we will get a simple automated test working in Unity using Regression Games. We will show you:",source:"@site/docs/tutorials/building-your-first-bot.mdx",sourceDirName:"tutorials",slug:"/tutorials/building-your-first-bot",permalink:"/tutorials/building-your-first-bot",draft:!1,tags:[],version:"current",frontMatter:{sidebar_label:"Writing Your First Automated Test"},sidebar:"unitySidebar",next:{title:"Getting Started with Gameplay Sessions",permalink:"/gameplay-sessions/gameplay-sessions-getting-started"}},p={},u=[{value:"(Optional) Download a sample game",id:"optional-download-a-sample-game",level:2},{value:"Import the Regression Games Unity Bots package",id:"import-the-regression-games-unity-bots-package",level:2},{value:"Restart Unity and your IDE",id:"restart-unity-and-your-ide",level:2},{value:"Record a gameplay session",id:"record-a-gameplay-session",level:2},{value:"Add the RGOverlayCanvas",id:"add-the-rgoverlaycanvas",level:3},{value:"Record a gameplay session as an automated test",id:"record-a-gameplay-session-as-an-automated-test",level:3},{value:"Create a Validation Suite",id:"create-a-validation-suite",level:2},{value:"Creating the test scenario",id:"creating-the-test-scenario",level:3},{value:"Run the Validation Suite on new automated runs",id:"run-the-validation-suite-on-new-automated-runs",level:3},{value:"Next Steps",id:"next-steps",level:2}],d={toc:u},c="wrapper";function m(e){let{components:t,...s}=e;return(0,o.kt)(c,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"writing-your-first-automated-test"},"Writing Your First Automated Test"),(0,o.kt)("p",null,"In this tutorial, we will get a simple automated test working in Unity using Regression Games. We will show you:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"How to integrate the RG Unity SDK into your game"),(0,o.kt)("li",{parentName:"ul"},"Record a ",(0,o.kt)("a",{parentName:"li",href:"/gameplay-sessions/gameplay-sessions-getting-started"},"Gameplay Session")," as an automated test"),(0,o.kt)("li",{parentName:"ul"},"Create a ",(0,o.kt)("a",{parentName:"li",href:"/validations/validations-getting-started"},"Validation Suite")," and run that against future test runs")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of results from a run",src:a(7909).Z,width:"3218",height:"1892"})),(0,o.kt)("h2",{id:"optional-download-a-sample-game"},"(Optional) Download a sample game"),(0,o.kt)("p",null,"Feel free to follow this tutorial within your own game, but we recommend starting with a sample game if you do not have\na game available. Our team often uses BossRoom, a simple multiplayer game created by Unity. However, you can start\nwith any game of your choosing!"),(0,o.kt)("p",null,"Download the BossRoom sample from the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Unity-Technologies/com.unity.multiplayer.samples.coop"},"official GitHub repository.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that there are some limitations of the package that may not work with your game. For instance, our framework\nworks best with games that use standard UI canvas elements and game objects. Learn\nmore about these limitations in our ",(0,o.kt)("a",{parentName:"p",href:"/gameplay-sessions/gameplay-sessions-getting-started"},"Gameplay Session recording docs"),".")),(0,o.kt)("p",null,"Open it within Unity version 2022.3 (visit the ",(0,o.kt)("a",{parentName:"p",href:"https://unity.com/releases/editor/whats-new/2022.3.27"},"Unity archive")," if\nyou can't find that version from Unity Hub). Once the project is loaded, open the ",(0,o.kt)("strong",{parentName:"p"},"MainMenu")," scene within\n",(0,o.kt)("strong",{parentName:"p"},"Assets")," > ",(0,o.kt)("strong",{parentName:"p"},"Scenes")," > ",(0,o.kt)("strong",{parentName:"p"},"MainMenu"),"."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the playground scene",src:a(834).Z,width:"2692",height:"1676"})),(0,o.kt)("h2",{id:"import-the-regression-games-unity-bots-package"},"Import the Regression Games Unity Bots package"),(0,o.kt)("p",null,"You can find ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Regression-Games/RGUnityBots"},"our package on GitHub"),". Import the package into your Unity project by opening\nthe ",(0,o.kt)("strong",{parentName:"p"},"Package Manager")," window (",(0,o.kt)("strong",{parentName:"p"},"Window")," > ",(0,o.kt)("strong",{parentName:"p"},"Package Manager"),") and click ",(0,o.kt)("strong",{parentName:"p"},"Add package from git URL"),". Then, paste the following URL:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.28\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"This package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them."),(0,o.kt)("li",{parentName:"ul"},"This package installs a dependency of Newtonsoft Json (",(0,o.kt)("a",{parentName:"li",href:"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"},"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"),") for serializing/deserializing Json message payloads."),(0,o.kt)("li",{parentName:"ul"},"If you get a note about Unity's new input system, click ",(0,o.kt)("strong",{parentName:"li"},"Yes")," and allow the editor to restart.")),(0,o.kt)("p",{parentName:"admonition"},"If your game utilizes Unity's ECS, we now have an extension package available to support it."),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots.ecs#v0.0.28\n")),(0,o.kt)("p",{parentName:"admonition"},"Install this package in addition to / after installing the core RGUnityBots package.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gif of the package imported into the project",src:a(1274).Z,width:"1084",height:"568"})),(0,o.kt)("p",null,"After importing the package, you will be greeted by a login screen. Create an account at\n",(0,o.kt)("a",{parentName:"p",href:"https://play.regression.gg"},"https://play.regression.gg")," and login to Unity with your account credentials. If you need to login again in the future,\nyou can enter your login info by visiting the ",(0,o.kt)("strong",{parentName:"p"},"Regression Games")," > ",(0,o.kt)("strong",{parentName:"p"},"Getting Started")," menu."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the package imported into the project",src:a(4589).Z,width:"3456",height:"2160"})),(0,o.kt)("h2",{id:"restart-unity-and-your-ide"},"Restart Unity and your IDE"),(0,o.kt)("p",null,"After installing the Regression Games Unity Bots package and its dependencies into Unity, please restart Unity\nand your code editor (e.g. Rider or Visual Studio). Without this step, Unity and your code editor may not properly\nresolve the new packages even after Unity recompiles the scripts."),(0,o.kt)("h2",{id:"record-a-gameplay-session"},"Record a gameplay session"),(0,o.kt)("p",null,"The first step in automating a test is to record a ",(0,o.kt)("a",{parentName:"p",href:"/gameplay-sessions/gameplay-sessions-getting-started"},"gameplay session"),".\nThis feature allows you to record real gameplay and play it back later as an automated test. Regression Games does\noffer other utilities for dynamic bots, but to get started with a simple example, we will record a click-through that\nverifies the functionality of the UI in BossRoom."),(0,o.kt)("h3",{id:"add-the-rgoverlaycanvas"},"Add the RGOverlayCanvas"),(0,o.kt)("p",null,"The RGOverlayCanvasV2 prefab provides an overlay that allows you to begin recording gameplay sessions."),(0,o.kt)(i.ZP,{mdxType:"OverlayPartial"}),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Your scene must have an EventSystem to make interaction with the overlay possible. You can add one by\nright-clicking in your scene's Hierarchy and selecting ",(0,o.kt)("strong",{parentName:"p"},"GameObject")," > ",(0,o.kt)("strong",{parentName:"p"},"UI")," > ",(0,o.kt)("strong",{parentName:"p"},"Event System"),".\nIf you are using the sample scene we provide, this is already included.")),(0,o.kt)("h3",{id:"record-a-gameplay-session-as-an-automated-test"},"Record a gameplay session as an automated test"),(0,o.kt)("p",null,"Once the overlay has been added to your scene(s), it's time to start a gameplay session recording! Our goal is to\n",(0,o.kt)("strong",{parentName:"p"},"record gameplay that can later be used as an automated test"),". More specifically, we will test the following\nsimple scenario (feel free to come up with your own if you are not using Boss Room):"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The game loads into the main menu"),(0,o.kt)("li",{parentName:"ul"},"We use the mouse to click the Volume Settings button"),(0,o.kt)("li",{parentName:"ul"},"We verify that the Volume Settings panel is displayed"),(0,o.kt)("li",{parentName:"ul"},"Finally, we close the volume settings panel")),(0,o.kt)("p",null,"These actions are ",(0,o.kt)("strong",{parentName:"p"},"recorded")," and can be ",(0,o.kt)("strong",{parentName:"p"},"played back")," later as an automated test. As the test is run, data from the\ngame is collected, which will then be used within validations."),(0,o.kt)("p",null,"As shown in the short video below, follow these steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Click the play button in the editor to start the game."),(0,o.kt)("li",{parentName:"ol"},"Click the red record button in the bottom right to start recording."),(0,o.kt)("li",{parentName:"ol"},"Click the Volume Settings button near the top right of the main menu."),(0,o.kt)("li",{parentName:"ol"},"Click the close button on the Volume Settings panel."),(0,o.kt)("li",{parentName:"ol"},"Click the rec recording button in the bottom right to stop recording."),(0,o.kt)("li",{parentName:"ol"},"When finished recording, click the hamburger menu next to the record button to open up a dialog for loading your\nrecording. You can find the recordings within ",(0,o.kt)("a",{parentName:"li",href:"/gameplay-sessions/gameplay-sessions-reference#folder-and-file-structure"},"the session directory"),".\nSelect the ",(0,o.kt)("inlineCode",{parentName:"li"},"bot_segments.zip")," file and click ",(0,o.kt)("strong",{parentName:"li"},"Load Replay"),"."),(0,o.kt)("li",{parentName:"ol"},"Click the play button under the Regression Games logo to see your recording play back!")),(0,o.kt)("div",{style:{position:"relative",paddingBottom:"50.40485829959515%",height:0}},(0,o.kt)("iframe",{src:"https://www.loom.com/embed/1a88ffcad1ff49d6940473d5637e35ed?sid=336eaf3b-208c-4ea3-a0b3-c6ad3d2d2cee",frameborder:"0",webkitallowfullscreen:!0,mozallowfullscreen:!0,allowfullscreen:!0,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%"}})),(0,o.kt)("h2",{id:"create-a-validation-suite"},"Create a Validation Suite"),(0,o.kt)("p",null,"With your first gameplay session saved, we can now write a functional test that validates the behaviour of this\nscenario! Visit ",(0,o.kt)("a",{parentName:"p",href:"https://play.regression.gg/validations"},"https://play.regression.gg/validations")," to begin creating a new\n",(0,o.kt)("a",{parentName:"p",href:"/validations/validations-getting-started"},"validation suite")," using this session."),(0,o.kt)("h3",{id:"creating-the-test-scenario"},"Creating the test scenario"),(0,o.kt)("p",null,"Click ",(0,o.kt)("strong",{parentName:"p"},"Create Suite"),", enter a name for yor validation suite, and select the gameplay session you just recorded (if\nyou don't see it, try refreshing the page). You may notice that there are two or more sessions; these include both\nthe original test session and the sessions created through the automated playback, so make sure to select the one\nlowest in the list, which is the first one created. Click ",(0,o.kt)("strong",{parentName:"p"},"Create Suite")," in the bottom right."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the validation suite creation",src:a(8735).Z,width:"1772",height:"1098"})),(0,o.kt)("p",null,"Once the suite is created, you'll be able to select it within the Validation Suites Dashboard. Select your suite, and\nclick ",(0,o.kt)("strong",{parentName:"p"},"Create Scenario")," in the bottom right to start creating your first functional test."),(0,o.kt)("p",null,"The editor you see here is the ",(0,o.kt)("inlineCode",{parentName:"p"},"Scenario Editor"),". It features a screenshot scrubber to see your game in action, as well\nas a state panel to see in-depth information scraped from your game, including not only position information, but also\nMonobehaviour properties and fields, as well as keyboard and mouse inputs. For example, for a user interface, you can\nsee information such as image sources and text values."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot the scenario builder",src:a(8735).Z,width:"1772",height:"1098"})),(0,o.kt)("p",null,"Enter a name for your scenario (we used ",(0,o.kt)("inlineCode",{parentName:"p"},"Verify that the volume mixer opens"),"), and hover over the pane on the left to\nsee a list of options for validation. For this scenario, we will verify that:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"The scene loads properly"),(0,o.kt)("li",{parentName:"ol"},"The volume settings panel appears")),(0,o.kt)("p",null,"This tools allows a wide variety of test scenarios, including mouse and key press detection, state assertions, and\nstoring values for comparison (learn more in the ",(0,o.kt)("a",{parentName:"p",href:"/validations/validations-scenario-builder-reference"},"documentation for validations"),").\nFor now, we will keep it simple, and the two steps listed above. See the screenshot above and the video below to see\nhow to add these steps (the search feature can be helpful for finding relevant elements in your scene)."),(0,o.kt)("div",{style:{position:"relative",paddingBottom:"50.40485829959515%",height:0}},(0,o.kt)("iframe",{src:"https://www.loom.com/embed/3575d3ef72ae4ebc87dc4eab668d3284?sid=336eaf3b-208c-4ea3-a0b3-c6ad3d2d2cee",frameborder:"0",webkitallowfullscreen:!0,mozallowfullscreen:!0,allowfullscreen:!0,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%"}})),(0,o.kt)("p",null,"Once you are done creating these steps, click ",(0,o.kt)("strong",{parentName:"p"},"Create Scenario")," to save it. Back on the Validation Suite page, you\ncan click the options menu next to the scenario you just created to run it, by selecting the ",(0,o.kt)("strong",{parentName:"p"},"Run Scenario")," option.\nThis will immediately run this scenario on the original gameplay session and provide you with the results."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of results from a scenario",src:a(7603).Z,width:"1530",height:"726"})),(0,o.kt)("h3",{id:"run-the-validation-suite-on-new-automated-runs"},"Run the Validation Suite on new automated runs"),(0,o.kt)("p",null,"Now that this validation suite exists, we can run it on the other runs conducted by the automated test! In the top\nright of the Validation Suite, click the ",(0,o.kt)("strong",{parentName:"p"},"Run Suite")," button, and select a more recent gameplay session to validate.\nOnce the test is run, you can click the result within the list of runs to see a detailed view of the passed and failed\nscenarios."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the validation suite runs",src:a(8837).Z,width:"2146",height:"1404"})),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of results from a run",src:a(7909).Z,width:"3218",height:"1892"})),(0,o.kt)("h2",{id:"next-steps"},"Next Steps"),(0,o.kt)("p",null,"We now have a repeatable automated gameplay session that can be verified using the validation tool! If you got stuck\nduring this tutorial, or want to brainstorm how to get the most of this tool, please\n",(0,o.kt)("a",{parentName:"p",href:"https://discord.com/invite/925SYVse2H"},"join our active Discord community."),". We are excited to make the best automation\ntools for game QA, and would love your feedback!"))}m.isMDXComponent=!0},4375:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/add-overlay-to-scene-d2369f9c6ecb17be282b7e6d175c0d32.gif"},834:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/bossroom-e2d90f0cd24bd29720d5f957f472c2e2.png"},8735:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/create-validation-suite-1e06e261be14acf7e407379829a9cba9.png"},1274:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installing-sdk-935e0d98a5c03fa57b5bd51d752b4c20.gif"},8837:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/many-runs-a80de3b5750d354032f573092a032b17.png"},7909:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/run-details-cf545d899ae285e3f19cdeae414e0092.png"},7603:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/run-scenario-66214adfa78107a7f74a7a0b566e41e9.png"},4589:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/welcome_3-bbd5b9fb049a87d0719c924bf62625ce.png"}}]); \ No newline at end of file diff --git a/assets/js/04115efe.e8aeff5d.js b/assets/js/04115efe.e8aeff5d.js deleted file mode 100644 index e6c7ab5..0000000 --- a/assets/js/04115efe.e8aeff5d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[5792],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function r(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=r(e,["components","mdxType","originalType","parentName"]),d=p(a),m=o,h=d["".concat(l,".").concat(m)]||d[m]||c[m]||i;return a?n.createElement(h,s(s({ref:t},u),{},{components:a})):n.createElement(h,s({ref:t},u))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,s=new Array(i);s[0]=m;var r={};for(var l in t)hasOwnProperty.call(t,l)&&(r[l]=t[l]);r.originalType=e,r[d]="string"==typeof e?e:o,s[1]=r;for(var p=2;p<i;p++)s[p]=a[p];return n.createElement.apply(null,s)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},7889:(e,t,a)=>{a.d(t,{ZP:()=>r});var n=a(7462),o=(a(7294),a(3905));const i={toc:[]},s="wrapper";function r(e){let{components:t,...r}=e;return(0,o.kt)(s,(0,n.Z)({},i,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Find the ",(0,o.kt)("inlineCode",{parentName:"p"},"RGOverlayCanvasV2")," prefab by navigating to ",(0,o.kt)("strong",{parentName:"p"},"Packages")," > ",(0,o.kt)("strong",{parentName:"p"},"Regression Games Unity Bots")," > ",(0,o.kt)("strong",{parentName:"p"},"Runtime")," > ",(0,o.kt)("strong",{parentName:"p"},"Prefabs")," and\ndrag it into your scene's object hierarchy. Make sure that the canvas is at the top of the hierarchy, so that it is always\nvisible and interactable."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Note that this overlay ",(0,o.kt)("strong",{parentName:"p"},"must be present in your scene")," for Regression Games to function. The visibility\nof the overlay can be hidden through the Regression Games settings pane under ",(0,o.kt)("strong",{parentName:"p"},"Edit")," > ",(0,o.kt)("strong",{parentName:"p"},"Project Settings")," >\n",(0,o.kt)("strong",{parentName:"p"},"Regression Games"),". Place this component into each scene that must be able to use Regression Games SDK features.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the search pane for the RGOverlayCanvas.",src:a(4375).Z,width:"1084",height:"568"})))}r.isMDXComponent=!0},7360:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>r,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>u});var n=a(7462),o=(a(7294),a(3905)),i=a(7889);const s={sidebar_label:"Writing Your First Automated Test"},r="Writing Your First Automated Test",l={unversionedId:"tutorials/building-your-first-bot",id:"tutorials/building-your-first-bot",title:"Writing Your First Automated Test",description:"In this tutorial, we will get a simple automated test working in Unity using Regression Games. We will show you:",source:"@site/docs/tutorials/building-your-first-bot.mdx",sourceDirName:"tutorials",slug:"/tutorials/building-your-first-bot",permalink:"/tutorials/building-your-first-bot",draft:!1,tags:[],version:"current",frontMatter:{sidebar_label:"Writing Your First Automated Test"},sidebar:"unitySidebar",next:{title:"Getting Started with Gameplay Sessions",permalink:"/gameplay-sessions/gameplay-sessions-getting-started"}},p={},u=[{value:"(Optional) Download a sample game",id:"optional-download-a-sample-game",level:2},{value:"Import the Regression Games Unity Bots package",id:"import-the-regression-games-unity-bots-package",level:2},{value:"Restart Unity and your IDE",id:"restart-unity-and-your-ide",level:2},{value:"Record a gameplay session",id:"record-a-gameplay-session",level:2},{value:"Add the RGOverlayCanvas",id:"add-the-rgoverlaycanvas",level:3},{value:"Record a gameplay session as an automated test",id:"record-a-gameplay-session-as-an-automated-test",level:3},{value:"Create a Validation Suite",id:"create-a-validation-suite",level:2},{value:"Creating the test scenario",id:"creating-the-test-scenario",level:3},{value:"Run the Validation Suite on new automated runs",id:"run-the-validation-suite-on-new-automated-runs",level:3},{value:"Next Steps",id:"next-steps",level:2}],d={toc:u},c="wrapper";function m(e){let{components:t,...s}=e;return(0,o.kt)(c,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"writing-your-first-automated-test"},"Writing Your First Automated Test"),(0,o.kt)("p",null,"In this tutorial, we will get a simple automated test working in Unity using Regression Games. We will show you:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"How to integrate the RG Unity SDK into your game"),(0,o.kt)("li",{parentName:"ul"},"Record a ",(0,o.kt)("a",{parentName:"li",href:"/gameplay-sessions/gameplay-sessions-getting-started"},"Gameplay Session")," as an automated test"),(0,o.kt)("li",{parentName:"ul"},"Create a ",(0,o.kt)("a",{parentName:"li",href:"/validations/validations-getting-started"},"Validation Suite")," and run that against future test runs")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of results from a run",src:a(7909).Z,width:"3218",height:"1892"})),(0,o.kt)("h2",{id:"optional-download-a-sample-game"},"(Optional) Download a sample game"),(0,o.kt)("p",null,"Feel free to follow this tutorial within your own game, but we recommend starting with a sample game if you do not have\na game available. Our team often uses BossRoom, a simple multiplayer game created by Unity. However, you can start\nwith any game of your choosing!"),(0,o.kt)("p",null,"Download the BossRoom sample from the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Unity-Technologies/com.unity.multiplayer.samples.coop"},"official GitHub repository.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Note that there are some limitations of the package that may not work with your game. For instance, our framework\nworks best with games that use standard UI canvas elements and game objects. Learn\nmore about these limitations in our ",(0,o.kt)("a",{parentName:"p",href:"/gameplay-sessions/gameplay-sessions-getting-started"},"Gameplay Session recording docs"),".")),(0,o.kt)("p",null,"Open it within Unity version 2022.3 (visit the ",(0,o.kt)("a",{parentName:"p",href:"https://unity.com/releases/editor/whats-new/2022.3.27"},"Unity archive")," if\nyou can't find that version from Unity Hub). Once the project is loaded, open the ",(0,o.kt)("strong",{parentName:"p"},"MainMenu")," scene within\n",(0,o.kt)("strong",{parentName:"p"},"Assets")," > ",(0,o.kt)("strong",{parentName:"p"},"Scenes")," > ",(0,o.kt)("strong",{parentName:"p"},"MainMenu"),"."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the playground scene",src:a(834).Z,width:"2692",height:"1676"})),(0,o.kt)("h2",{id:"import-the-regression-games-unity-bots-package"},"Import the Regression Games Unity Bots package"),(0,o.kt)("p",null,"You can find ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/Regression-Games/RGUnityBots"},"our package on GitHub"),". Import the package into your Unity project by opening\nthe ",(0,o.kt)("strong",{parentName:"p"},"Package Manager")," window (",(0,o.kt)("strong",{parentName:"p"},"Window")," > ",(0,o.kt)("strong",{parentName:"p"},"Package Manager"),") and click ",(0,o.kt)("strong",{parentName:"p"},"Add package from git URL"),". Then, paste the following URL:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.27\n")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},"This package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them."),(0,o.kt)("li",{parentName:"ul"},"This package installs a dependency of Newtonsoft Json (",(0,o.kt)("a",{parentName:"li",href:"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"},"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"),") for serializing/deserializing Json message payloads."),(0,o.kt)("li",{parentName:"ul"},"If you get a note about Unity's new input system, click ",(0,o.kt)("strong",{parentName:"li"},"Yes")," and allow the editor to restart.")),(0,o.kt)("p",{parentName:"admonition"},"If your game utilizes Unity's ECS, we now have an extension package available to support it."),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots/tree/main/src/gg.regression.unity.bots.ecs#v0.0.27\n")),(0,o.kt)("p",{parentName:"admonition"},"Install this package in addition to / after installing the core RGUnityBots package.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gif of the package imported into the project",src:a(1274).Z,width:"1084",height:"568"})),(0,o.kt)("p",null,"After importing the package, you will be greeted by a login screen. Create an account at\n",(0,o.kt)("a",{parentName:"p",href:"https://play.regression.gg"},"https://play.regression.gg")," and login to Unity with your account credentials. If you need to login again in the future,\nyou can enter your login info by visiting the ",(0,o.kt)("strong",{parentName:"p"},"Regression Games")," > ",(0,o.kt)("strong",{parentName:"p"},"Getting Started")," menu."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the package imported into the project",src:a(4589).Z,width:"3456",height:"2160"})),(0,o.kt)("h2",{id:"restart-unity-and-your-ide"},"Restart Unity and your IDE"),(0,o.kt)("p",null,"After installing the Regression Games Unity Bots package and its dependencies into Unity, please restart Unity\nand your code editor (e.g. Rider or Visual Studio). Without this step, Unity and your code editor may not properly\nresolve the new packages even after Unity recompiles the scripts."),(0,o.kt)("h2",{id:"record-a-gameplay-session"},"Record a gameplay session"),(0,o.kt)("p",null,"The first step in automating a test is to record a ",(0,o.kt)("a",{parentName:"p",href:"/gameplay-sessions/gameplay-sessions-getting-started"},"gameplay session"),".\nThis feature allows you to record real gameplay and play it back later as an automated test. Regression Games does\noffer other utilities for dynamic bots, but to get started with a simple example, we will record a click-through that\nverifies the functionality of the UI in BossRoom."),(0,o.kt)("h3",{id:"add-the-rgoverlaycanvas"},"Add the RGOverlayCanvas"),(0,o.kt)("p",null,"The RGOverlayCanvasV2 prefab provides an overlay that allows you to begin recording gameplay sessions."),(0,o.kt)(i.ZP,{mdxType:"OverlayPartial"}),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Your scene must have an EventSystem to make interaction with the overlay possible. You can add one by\nright-clicking in your scene's Hierarchy and selecting ",(0,o.kt)("strong",{parentName:"p"},"GameObject")," > ",(0,o.kt)("strong",{parentName:"p"},"UI")," > ",(0,o.kt)("strong",{parentName:"p"},"Event System"),".\nIf you are using the sample scene we provide, this is already included.")),(0,o.kt)("h3",{id:"record-a-gameplay-session-as-an-automated-test"},"Record a gameplay session as an automated test"),(0,o.kt)("p",null,"Once the overlay has been added to your scene(s), it's time to start a gameplay session recording! Our goal is to\n",(0,o.kt)("strong",{parentName:"p"},"record gameplay that can later be used as an automated test"),". More specifically, we will test the following\nsimple scenario (feel free to come up with your own if you are not using Boss Room):"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The game loads into the main menu"),(0,o.kt)("li",{parentName:"ul"},"We use the mouse to click the Volume Settings button"),(0,o.kt)("li",{parentName:"ul"},"We verify that the Volume Settings panel is displayed"),(0,o.kt)("li",{parentName:"ul"},"Finally, we close the volume settings panel")),(0,o.kt)("p",null,"These actions are ",(0,o.kt)("strong",{parentName:"p"},"recorded")," and can be ",(0,o.kt)("strong",{parentName:"p"},"played back")," later as an automated test. As the test is run, data from the\ngame is collected, which will then be used within validations."),(0,o.kt)("p",null,"As shown in the short video below, follow these steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Click the play button in the editor to start the game."),(0,o.kt)("li",{parentName:"ol"},"Click the red record button in the bottom right to start recording."),(0,o.kt)("li",{parentName:"ol"},"Click the Volume Settings button near the top right of the main menu."),(0,o.kt)("li",{parentName:"ol"},"Click the close button on the Volume Settings panel."),(0,o.kt)("li",{parentName:"ol"},"Click the rec recording button in the bottom right to stop recording."),(0,o.kt)("li",{parentName:"ol"},"When finished recording, click the hamburger menu next to the record button to open up a dialog for loading your\nrecording. You can find the recordings within ",(0,o.kt)("a",{parentName:"li",href:"/gameplay-sessions/gameplay-sessions-reference#folder-and-file-structure"},"the session directory"),".\nSelect the ",(0,o.kt)("inlineCode",{parentName:"li"},"bot_segments.zip")," file and click ",(0,o.kt)("strong",{parentName:"li"},"Load Replay"),"."),(0,o.kt)("li",{parentName:"ol"},"Click the play button under the Regression Games logo to see your recording play back!")),(0,o.kt)("div",{style:{position:"relative",paddingBottom:"50.40485829959515%",height:0}},(0,o.kt)("iframe",{src:"https://www.loom.com/embed/1a88ffcad1ff49d6940473d5637e35ed?sid=336eaf3b-208c-4ea3-a0b3-c6ad3d2d2cee",frameborder:"0",webkitallowfullscreen:!0,mozallowfullscreen:!0,allowfullscreen:!0,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%"}})),(0,o.kt)("h2",{id:"create-a-validation-suite"},"Create a Validation Suite"),(0,o.kt)("p",null,"With your first gameplay session saved, we can now write a functional test that validates the behaviour of this\nscenario! Visit ",(0,o.kt)("a",{parentName:"p",href:"https://play.regression.gg/validations"},"https://play.regression.gg/validations")," to begin creating a new\n",(0,o.kt)("a",{parentName:"p",href:"/validations/validations-getting-started"},"validation suite")," using this session."),(0,o.kt)("h3",{id:"creating-the-test-scenario"},"Creating the test scenario"),(0,o.kt)("p",null,"Click ",(0,o.kt)("strong",{parentName:"p"},"Create Suite"),", enter a name for yor validation suite, and select the gameplay session you just recorded (if\nyou don't see it, try refreshing the page). You may notice that there are two or more sessions; these include both\nthe original test session and the sessions created through the automated playback, so make sure to select the one\nlowest in the list, which is the first one created. Click ",(0,o.kt)("strong",{parentName:"p"},"Create Suite")," in the bottom right."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the validation suite creation",src:a(8735).Z,width:"1772",height:"1098"})),(0,o.kt)("p",null,"Once the suite is created, you'll be able to select it within the Validation Suites Dashboard. Select your suite, and\nclick ",(0,o.kt)("strong",{parentName:"p"},"Create Scenario")," in the bottom right to start creating your first functional test."),(0,o.kt)("p",null,"The editor you see here is the ",(0,o.kt)("inlineCode",{parentName:"p"},"Scenario Editor"),". It features a screenshot scrubber to see your game in action, as well\nas a state panel to see in-depth information scraped from your game, including not only position information, but also\nMonobehaviour properties and fields, as well as keyboard and mouse inputs. For example, for a user interface, you can\nsee information such as image sources and text values."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot the scenario builder",src:a(8735).Z,width:"1772",height:"1098"})),(0,o.kt)("p",null,"Enter a name for your scenario (we used ",(0,o.kt)("inlineCode",{parentName:"p"},"Verify that the volume mixer opens"),"), and hover over the pane on the left to\nsee a list of options for validation. For this scenario, we will verify that:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"The scene loads properly"),(0,o.kt)("li",{parentName:"ol"},"The volume settings panel appears")),(0,o.kt)("p",null,"This tools allows a wide variety of test scenarios, including mouse and key press detection, state assertions, and\nstoring values for comparison (learn more in the ",(0,o.kt)("a",{parentName:"p",href:"/validations/validations-scenario-builder-reference"},"documentation for validations"),").\nFor now, we will keep it simple, and the two steps listed above. See the screenshot above and the video below to see\nhow to add these steps (the search feature can be helpful for finding relevant elements in your scene)."),(0,o.kt)("div",{style:{position:"relative",paddingBottom:"50.40485829959515%",height:0}},(0,o.kt)("iframe",{src:"https://www.loom.com/embed/3575d3ef72ae4ebc87dc4eab668d3284?sid=336eaf3b-208c-4ea3-a0b3-c6ad3d2d2cee",frameborder:"0",webkitallowfullscreen:!0,mozallowfullscreen:!0,allowfullscreen:!0,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%"}})),(0,o.kt)("p",null,"Once you are done creating these steps, click ",(0,o.kt)("strong",{parentName:"p"},"Create Scenario")," to save it. Back on the Validation Suite page, you\ncan click the options menu next to the scenario you just created to run it, by selecting the ",(0,o.kt)("strong",{parentName:"p"},"Run Scenario")," option.\nThis will immediately run this scenario on the original gameplay session and provide you with the results."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of results from a scenario",src:a(7603).Z,width:"1530",height:"726"})),(0,o.kt)("h3",{id:"run-the-validation-suite-on-new-automated-runs"},"Run the Validation Suite on new automated runs"),(0,o.kt)("p",null,"Now that this validation suite exists, we can run it on the other runs conducted by the automated test! In the top\nright of the Validation Suite, click the ",(0,o.kt)("strong",{parentName:"p"},"Run Suite")," button, and select a more recent gameplay session to validate.\nOnce the test is run, you can click the result within the list of runs to see a detailed view of the passed and failed\nscenarios."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the validation suite runs",src:a(8837).Z,width:"2146",height:"1404"})),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of results from a run",src:a(7909).Z,width:"3218",height:"1892"})),(0,o.kt)("h2",{id:"next-steps"},"Next Steps"),(0,o.kt)("p",null,"We now have a repeatable automated gameplay session that can be verified using the validation tool! If you got stuck\nduring this tutorial, or want to brainstorm how to get the most of this tool, please\n",(0,o.kt)("a",{parentName:"p",href:"https://discord.com/invite/925SYVse2H"},"join our active Discord community."),". We are excited to make the best automation\ntools for game QA, and would love your feedback!"))}m.isMDXComponent=!0},4375:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/add-overlay-to-scene-d2369f9c6ecb17be282b7e6d175c0d32.gif"},834:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/bossroom-e2d90f0cd24bd29720d5f957f472c2e2.png"},8735:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/create-validation-suite-1e06e261be14acf7e407379829a9cba9.png"},1274:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installing-sdk-935e0d98a5c03fa57b5bd51d752b4c20.gif"},8837:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/many-runs-a80de3b5750d354032f573092a032b17.png"},7909:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/run-details-cf545d899ae285e3f19cdeae414e0092.png"},7603:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/run-scenario-66214adfa78107a7f74a7a0b566e41e9.png"},4589:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/welcome_3-bbd5b9fb049a87d0719c924bf62625ce.png"}}]); \ No newline at end of file diff --git a/assets/js/1db64337.2675c864.js b/assets/js/1db64337.b2a8d27d.js similarity index 98% rename from assets/js/1db64337.2675c864.js rename to assets/js/1db64337.b2a8d27d.js index a8f7483..56df417 100644 --- a/assets/js/1db64337.2675c864.js +++ b/assets/js/1db64337.b2a8d27d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[1372],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),u=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),m=r,d=p["".concat(l,".").concat(m)]||p[m]||g[m]||o;return n?a.createElement(d,i(i({ref:t},c),{},{components:n})):a.createElement(d,i({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var u=2;u<o;u++)i[u]=n[u];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},6777:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const o={sidebar_label:"Overview"},i="Regression Games for Unity",s={unversionedId:"overview",id:"overview",title:"Regression Games for Unity",description:"Regression Games is developing a platform where studios can build and deploy bots for a variety of use cases in minutes. We are designing for scale (deploy thousands of bots), ease of use (e.g. generative AI to build bots), ease of integration (minimal impact on game development time), and feature richness (e.g. A/B bot test for engagement).",source:"@site/docs/overview.md",sourceDirName:".",slug:"/overview",permalink:"/overview",draft:!1,tags:[],version:"current",frontMatter:{sidebar_label:"Overview"}},l={},u=[{value:"Current Stage of the Product",id:"current-stage-of-the-product",level:2},{value:"Availability Assurances",id:"availability-assurances",level:2},{value:"Implemented Features",id:"implemented-features",level:2},{value:"Importing the Regression Games Unity Bots package",id:"importing-the-regression-games-unity-bots-package",level:2}],c={toc:u},p="wrapper";function g(e){let{components:t,...o}=e;return(0,r.kt)(p,(0,a.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"regression-games-for-unity"},"Regression Games for Unity"),(0,r.kt)("p",null,"Regression Games is developing a platform where studios can ",(0,r.kt)("strong",{parentName:"p"},"build and deploy bots for a variety of use cases in minutes.")," We are designing for scale (deploy thousands of bots), ease of use (e.g. generative AI to build bots), ease of integration (minimal impact on game development time), and feature richness (e.g. A/B bot test for engagement)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"vision",src:n(543).Z,width:"2000",height:"700"})),(0,r.kt)("h2",{id:"current-stage-of-the-product"},"Current Stage of the Product"),(0,r.kt)("p",null,"This product is currently a ",(0,r.kt)("strong",{parentName:"p"},"release preview"),". We are actively talking with studios and game developers to discover the best features and use cases to tackle, and we're making changes frequently."),(0,r.kt)("p",null,"The team has focused on the foundation of supporting use cases and initial infrastructure to get bots to connect to Unity. The bulk\nof our value will come from the interfaces to build bots, the scale of our infrastructure, the speed of integration, and the products\nbuilt around these bots."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"timeline feature",src:n(9737).Z,width:"2636",height:"2058"})),(0,r.kt)("h2",{id:"availability-assurances"},"Availability Assurances"),(0,r.kt)("p",null,"The Regression Games team offers the following assurances for our initial testing with developers. Additionally, we have a dedicated Discord server for support, and can also create a Slack Connect channel, giving you direct access to our entire team. For access to\nthese channels, send an e-mail to ",(0,r.kt)("a",{parentName:"p",href:"mailto:aaron@regression.gg"},"aaron@regression.gg"),"."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"A single account can run at least 10 bots concurrently"),(0,r.kt)("li",{parentName:"ul"},"The time from requesting a bot to be started to the time it connects to Unity will take less than 10 seconds if the bot is relying on dependencies that are common to most bots. This does not cover bots that may have lots of library dependencies, which may take longer.")),(0,r.kt)("h2",{id:"implemented-features"},"Implemented Features"),(0,r.kt)("p",null,"The table below details and links to documentation for the features implemented on our platform."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"th"},"Feature")),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"th"},"Description")),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"th"},"Documentation")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Unity C# SDK"),(0,r.kt)("td",{parentName:"tr",align:null},"A C# SDK for implementing bots locally in Unity."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"creating-bots/csharp/adaptive-bots"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Bot Code Generation"),(0,r.kt)("td",{parentName:"tr",align:null},"Create bots with low-code tools such as behavior trees powered by GPT."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"creating-bots/csharp/agent-builder"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Platform and Language Agnostic"),(0,r.kt)("td",{parentName:"tr",align:null},"Our protocol permits bots to eventually be written in multiple engines and languages."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},"Docs coming soon"))))),(0,r.kt)("h2",{id:"importing-the-regression-games-unity-bots-package"},"Importing the Regression Games Unity Bots package"),(0,r.kt)("p",null,"Our package is available via GitHub ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Regression-Games/RGUnityBots"},"here"),". Import the repository by\nclicking ",(0,r.kt)("strong",{parentName:"p"},"Add package from git URL")," in the ",(0,r.kt)("strong",{parentName:"p"},"Package Manager")," window (this window can be opened\nin the ",(0,r.kt)("strong",{parentName:"p"},"Window > Package Manager")," menu) and pasting in the following URL."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.27\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Note that this package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them."),(0,r.kt)("li",{parentName:"ul"},"Note that this package installs a dependency of Newtonsoft Json (",(0,r.kt)("a",{parentName:"li",href:"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"},"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"),") for serializing/deserializing Json message payloads."),(0,r.kt)("li",{parentName:"ul"},"If your game utilizes Unity's ECS, we now have an extension package available to support it. Install this package after installing the core RGUnityBots package:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots/tree/main/src/gg.regression.unity.bots.ecs#v0.0.27\n\n\n\nFor a full walkthrough on getting started, see the [Building Your First Bot](tutorials/building-your-first-bot) tutorial.\n")))}g.isMDXComponent=!0},543:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/vision-b3e04de61e7311b6c82aea1140042c36.png"},9737:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/timeline-6aa7e114768fc3f9b776ae9af1d4cfa9.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[1372],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),u=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),m=r,d=p["".concat(l,".").concat(m)]||p[m]||g[m]||o;return n?a.createElement(d,i(i({ref:t},c),{},{components:n})):a.createElement(d,i({ref:t},c))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:r,i[1]=s;for(var u=2;u<o;u++)i[u]=n[u];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},6777:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const o={sidebar_label:"Overview"},i="Regression Games for Unity",s={unversionedId:"overview",id:"overview",title:"Regression Games for Unity",description:"Regression Games is developing a platform where studios can build and deploy bots for a variety of use cases in minutes. We are designing for scale (deploy thousands of bots), ease of use (e.g. generative AI to build bots), ease of integration (minimal impact on game development time), and feature richness (e.g. A/B bot test for engagement).",source:"@site/docs/overview.md",sourceDirName:".",slug:"/overview",permalink:"/overview",draft:!1,tags:[],version:"current",frontMatter:{sidebar_label:"Overview"}},l={},u=[{value:"Current Stage of the Product",id:"current-stage-of-the-product",level:2},{value:"Availability Assurances",id:"availability-assurances",level:2},{value:"Implemented Features",id:"implemented-features",level:2},{value:"Importing the Regression Games Unity Bots package",id:"importing-the-regression-games-unity-bots-package",level:2}],c={toc:u},p="wrapper";function g(e){let{components:t,...o}=e;return(0,r.kt)(p,(0,a.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"regression-games-for-unity"},"Regression Games for Unity"),(0,r.kt)("p",null,"Regression Games is developing a platform where studios can ",(0,r.kt)("strong",{parentName:"p"},"build and deploy bots for a variety of use cases in minutes.")," We are designing for scale (deploy thousands of bots), ease of use (e.g. generative AI to build bots), ease of integration (minimal impact on game development time), and feature richness (e.g. A/B bot test for engagement)."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"vision",src:n(543).Z,width:"2000",height:"700"})),(0,r.kt)("h2",{id:"current-stage-of-the-product"},"Current Stage of the Product"),(0,r.kt)("p",null,"This product is currently a ",(0,r.kt)("strong",{parentName:"p"},"release preview"),". We are actively talking with studios and game developers to discover the best features and use cases to tackle, and we're making changes frequently."),(0,r.kt)("p",null,"The team has focused on the foundation of supporting use cases and initial infrastructure to get bots to connect to Unity. The bulk\nof our value will come from the interfaces to build bots, the scale of our infrastructure, the speed of integration, and the products\nbuilt around these bots."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"timeline feature",src:n(9737).Z,width:"2636",height:"2058"})),(0,r.kt)("h2",{id:"availability-assurances"},"Availability Assurances"),(0,r.kt)("p",null,"The Regression Games team offers the following assurances for our initial testing with developers. Additionally, we have a dedicated Discord server for support, and can also create a Slack Connect channel, giving you direct access to our entire team. For access to\nthese channels, send an e-mail to ",(0,r.kt)("a",{parentName:"p",href:"mailto:aaron@regression.gg"},"aaron@regression.gg"),"."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"A single account can run at least 10 bots concurrently"),(0,r.kt)("li",{parentName:"ul"},"The time from requesting a bot to be started to the time it connects to Unity will take less than 10 seconds if the bot is relying on dependencies that are common to most bots. This does not cover bots that may have lots of library dependencies, which may take longer.")),(0,r.kt)("h2",{id:"implemented-features"},"Implemented Features"),(0,r.kt)("p",null,"The table below details and links to documentation for the features implemented on our platform."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"th"},"Feature")),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"th"},"Description")),(0,r.kt)("th",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"th"},"Documentation")))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Unity C# SDK"),(0,r.kt)("td",{parentName:"tr",align:null},"A C# SDK for implementing bots locally in Unity."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"creating-bots/csharp/adaptive-bots"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Bot Code Generation"),(0,r.kt)("td",{parentName:"tr",align:null},"Create bots with low-code tools such as behavior trees powered by GPT."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"creating-bots/csharp/agent-builder"},"Link"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Platform and Language Agnostic"),(0,r.kt)("td",{parentName:"tr",align:null},"Our protocol permits bots to eventually be written in multiple engines and languages."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("em",{parentName:"td"},"Docs coming soon"))))),(0,r.kt)("h2",{id:"importing-the-regression-games-unity-bots-package"},"Importing the Regression Games Unity Bots package"),(0,r.kt)("p",null,"Our package is available via GitHub ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Regression-Games/RGUnityBots"},"here"),". Import the repository by\nclicking ",(0,r.kt)("strong",{parentName:"p"},"Add package from git URL")," in the ",(0,r.kt)("strong",{parentName:"p"},"Package Manager")," window (this window can be opened\nin the ",(0,r.kt)("strong",{parentName:"p"},"Window > Package Manager")," menu) and pasting in the following URL."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.28\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Note that this package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them."),(0,r.kt)("li",{parentName:"ul"},"Note that this package installs a dependency of Newtonsoft Json (",(0,r.kt)("a",{parentName:"li",href:"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"},"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"),") for serializing/deserializing Json message payloads."),(0,r.kt)("li",{parentName:"ul"},"If your game utilizes Unity's ECS, we now have an extension package available to support it. Install this package after installing the core RGUnityBots package:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots/tree/main/src/gg.regression.unity.bots.ecs#v0.0.28\n\n\n\nFor a full walkthrough on getting started, see the [Building Your First Bot](tutorials/building-your-first-bot) tutorial.\n")))}g.isMDXComponent=!0},543:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/vision-b3e04de61e7311b6c82aea1140042c36.png"},9737:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/timeline-6aa7e114768fc3f9b776ae9af1d4cfa9.png"}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.b6548682.js b/assets/js/1df93b7f.224599d5.js similarity index 99% rename from assets/js/1df93b7f.b6548682.js rename to assets/js/1df93b7f.224599d5.js index fd1db6f..bf4dc69 100644 --- a/assets/js/1df93b7f.b6548682.js +++ b/assets/js/1df93b7f.224599d5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[3237],{8391:(A,e,t)=>{t.r(e),t.d(e,{default:()=>g});var a=t(7294),s=t(6010),c=t(9960),l=t(7961),E=t(7462);const n={features:"features_t9lD",featureSvg:"featureSvg_GfXr"},B=[{title:"A Plethora of Features",image:t(3768).Z,description:a.createElement(a.Fragment,null,"Regression Games is building the best platform for game test automation with replay features, validation libraries, CI/CD integration, and more.")},{title:"Ease of Integration",image:t(4661).Z,description:a.createElement(a.Fragment,null,"Ease of integration is one of our top priorities, and it shows. As soon as you add the SDK, data and deep state info is collected, without custom code needed.")},{title:"Bot Versatility",image:t(7390).Z,description:a.createElement(a.Fragment,null,"Regression Games interfaces are built for a variety of teams, even those who may not have code access. Our intuitive functional testing builder allows anyone to make tests.")}];function r(A){let{title:e,image:t,description:c}=A;return a.createElement("div",{className:(0,s.Z)("col col--4")},a.createElement("div",{className:"text--center"},a.createElement("img",{className:n.featureSvg,src:t})),a.createElement("div",{className:"text--center padding-horiz--md"},a.createElement("h3",null,e),a.createElement("p",null,c)))}function i(){return a.createElement("section",{className:n.features},a.createElement("div",{className:"container"},a.createElement("div",{className:"row"},B.map(((A,e)=>a.createElement(r,(0,E.Z)({key:e},A)))))))}const o="heroBanner_qdFl",Q="buttons_AeoN",m=()=>a.createElement("header",{className:(0,s.Z)("hero hero--secondary",o)},a.createElement("div",{className:"container",style:{textAlign:"left"}},a.createElement("div",{className:"row"},a.createElement("div",{className:"col margin-vert--lg margin-right--md"},a.createElement("h1",{className:"hero__title"},"Make better games through automated testing"),a.createElement("p",{className:"hero__subtitle"},"Regression Games helps game developers go from zero to one with automated game testing"),a.createElement("div",{className:Q,style:{justifyContent:"left"}},a.createElement(c.Z,{className:"button button--primary button--outline button--lg",to:"tutorials/building-your-first-bot"},"Get Started")),a.createElement("div",{style:{marginTop:"16px"}},"Get started immediately by adding the package to Unity:",a.createElement("div",{style:{marginTop:"16px",fontSize:12}},a.createElement("pre",{style:{display:"inline"}},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.27")))),a.createElement("div",{className:"col"},a.createElement("img",{src:t(329).Z,alt:"Regression Games",style:{borderRadius:"12px"}}),a.createElement("div",{style:{color:"gray",paddingRight:"24px",fontStyle:"italic"}},"Demo of our recording and validation features. Automatically extract game state and begin writing functional tests in minutes."))))),g=()=>a.createElement(l.Z,{title:"Regression Games Docs",description:"Build bots for games"},a.createElement(m,null),a.createElement("main",null,a.createElement(i,null)),a.createElement("div",{className:"container text--center"},a.createElement("div",{style:{marginBottom:"64px",marginTop:"32px",fontSize:"1.5em",color:"grey",fontWeight:"bold"}},"BACKED BY TIER 1 INVESTORS"),a.createElement("div",{className:"row"},a.createElement("div",{className:(0,s.Z)("col col--3")},a.createElement("div",{className:"text--center"},a.createElement("a",{href:"https://nea.com/",target:"_blank"},a.createElement("img",{style:{height:"60px"},src:t(8926).Z})))),a.createElement("div",{className:(0,s.Z)("col col--3")},a.createElement("div",{className:"text--center"},a.createElement("a",{href:"https://a16z.com/",target:"_blank"},a.createElement("img",{style:{height:"100px",marginTop:"-20px"},src:t(2074).Z})))),a.createElement("div",{className:(0,s.Z)("col col--3")},a.createElement("div",{className:"text--center"},a.createElement("a",{href:"https://roosh.vc/",target:"_blank"},a.createElement("img",{style:{height:"150px",marginTop:"-40px"},src:t(5377).Z})))),a.createElement("div",{className:(0,s.Z)("col col--3")},a.createElement("div",{className:"text--center"},a.createElement("a",{href:"https://bbq.capital/",target:"_blank"},a.createElement("img",{style:{height:"80px",marginTop:"-00px"},src:t(6796).Z})))))))},2074:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/a16z-137749dc988bf598433d91265cf02959.jpeg"},7390:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/ai (2)-19c3966e89df8c194ecd3e781a68cfca.png"},4661:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/ai (3)-a8825fb481555ca2707f39c89be6dedb.png"},3768:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/ai_1-e765bdc2cfecce91cbd44170e21a6e1c.png"},6796:(A,e,t)=>{t.d(e,{Z:()=>a});const a="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCADIAMgDASIAAhEBAxEB/8QAHAABAAEFAQEAAAAAAAAAAAAAAAQDBQYHCAEC/8QAGwEBAAIDAQEAAAAAAAAAAAAAAAUGAgMEAQf/2gAMAwEAAhADEAAAAdUi6Q4AAAAAAAAAAAAAAAAAkY4R1090ctqTIm7p8GewAAAAAAAenl1ud/g6vBnEFVQw1I0llni1i2Na5qy4Y+/iftwe+gAAAAMix3J+CJyB8/VS+fg8AAAtGH7Hw6etlpE9awAAAAAJWTYe443Y7CMnr1QuA4IkABa7p8bd+u3vl3+oAAAAAAVKd9tcXao3vkrvr1yyHHrLB4bFYvksZ8y+xzx48NfUvr5vX1UMsgAAAEmNfY2zSoktTPuGMX2LdJyhLDfonFOW6/RJPntwnWG0vk+bQocHr+Q4+LZ9AAAAAdYcn9Jx2/cntdXJKgrntBXFBXFBXFDyQeR+Nez+EJfjhCd4gAAAGx9cfWv3v1hmZ1GWDH0AAADX3IO69KWWODv0AAAAAZV2LwhmUdv7NY9kNdkA89AAAt3EPd/FMxyYsJziAAAAAAlbm0e059jZdwWjt/fti4fY+9O6bwZ3aerNm8DOTb01zN47tAdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//EACgQAAEDBAIABgMBAQAAAAAAAAMBAgQABQYwEhMHEBEUFSAxQGAkM//aAAgBAQABBQL+WZHISktp1r409PiGZ+pGt7z0GEIP1LGGapFrcyvx+hCt/HTLhNkI9ijdttsT11z4nezbFuTfRFRyariDpNtDJJHWPchl1XEXZG3x5pI9R5o5Gh7ebdrWK/6CnFjUGSOQn2J/02Rx8BnH1kqOPsJJHzGiq1Y90VtNcj08/wAUq+q6wD7CVJHzHUcfAdHH1kjj5kRytVspPRrkclTCdcbZHHwH5e3/ANHlJHzHHH1j8ux8Mse5MLV1PyXV4ftGXGPbiroHXQOugddA66B10DroHXQOugddA69uKvbirK3I7I9XhdL527Y96DZNke8masCunxuQbM6unxmP60VWrid9bfrTr8TmTFuGzHL8XHrjAnAuUXVcIAbnDnw3W+bsxzJ5OOyLNfod9j6soO2TkO2NKNDNaPE04Ug5rZ5yClgkI5yNSVf7bCS5eJkCOlyzO63I+N51EugVMNGZXnceJH/qv//EADQRAAECAwUFBQcFAAAAAAAAAAECBAADEQUSICExBhMUMFEiQWGRwRAVMkCBsdEkU3Hh8P/aAAgBAwEBPwH5JSkoFVGkcY2/cHnCVomZoNeU9te4d238/wARMmLmm8s19iVqQbyTSGdrkG4484BrmMdpb/cUkD+cVjuyf06/pyHLCS6zUKHrDqzZzbPVPXBImbmamYO7kP7DmMmEl2dT8XhXT+/GGrdbucmRL1VG02y0pk6uS8gcwYcMHDaqlp7PXu9qcgMWz1ne8HqQodhOZ/H1h22Q8kLbzNFCNmLGW1nTXDgZpN0ep/3jG0lnceyKkjtozHqIsGykNLP3c5NSvNQP2jbHYxu2AeWcLgOo7q+n2huxm8UmXMTTFJ+KAaaRePWLxi8YvHrFSYcaDEDdNYBqK4pxqrHKmXMjANcLgaHkJUU6QHB7xHEeEKmKVAnkawtZWc/nv//EACwRAAEDAgQEBgIDAAAAAAAAAAIAAQMEEQUTIDEhIjBBEBIUMkCRQkNRUoH/2gAIAQIBAT8B+E5MPF16iH+7ISEva/SqcQ8vJF9ojI3uT+Ak4vcVT4g7cs32t9dbm5Vom1YdUfpL/OhNSxz77qejkh47toiPLNi6EFaM05RfSkkaIHMuyiijr4/O3AlNAcD2PxbbVX1GRC9t3UUjxGxj2WJVbSgIB34rD6jIms+zqvqM+bhsypI/UXC/MoaU89gNtVc14deHNzE+qQGkFxdELgXlfVRAwxX/AJ11VLncw7p2cXs+nDie5D26EkIS+9kWHD+JJsObuSjpYo9mR4eJPcXsoYRgaw/O/8QAORAAAQICBgcFBgYDAAAAAAAAAQIDABEEISIwYZEQEjEyM0FREyBxgaEFIyRAUuEUQlNgktFicoL/2gAIAQEABj8C/a1lBMbsvON0ZxW2flJmwnrFSZnqe7aSDjE27Q6c/kQt0V8k3MxU51gpUJEX3aq/5u9ZO+PW+CHBqYjZEwZi7mN1Vd9ZPlElWFel0TzTX8ht1k9DG3VV0NwR1vjLl3AHLafWLB8u+rxvcTGGjARiImDIxJ20OoiY7pN5hoxGjE6MIwEVRbziYMxoWcJXuJ0/47dOIjE6bBkOkSXYV6QlscqzdsTQklKlisYxwkfxjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhoyjhI/jHtDVqAdIqu6XRubbmv5Efa9KlGSQJkw++drq1LzN22lRk3SB2R8eXrevgGTr/uU+e30vJioiEOk/EIsOjHr53jC3EfBBMmlDZPnPG9S+i02anG/qEN0ijrDjSxUbt2jPp1m3BIw/Rl7zSyg3s2/eUdW+ydh+8dpRXJn8zZ3k+N3T3EVp7UifhVfJdYcU04nYpBkYCPaDH4gfqt1Ky2QJUxLKvpesfaJtPNuf6qBiZIHjHvqcwjDXE8oIoja6WvqbCf7hLhpBYCDrJbZqA/uEt0xxNFpgqOtUlfgY1ytIR9U6oXRvZ7oepKqu1Ruo8+Z/df/xAAqEAABAgQDCAIDAAAAAAAAAAABABEhMDFRQXHxECBhgZGhscFA8GDR4f/aAAgBAQABPyH8WpbXaCwLmBEeJkCwG3Afx8QEM9VOQTGxn53Qcc6uqEE/G/TogkxDEfACDpWTDOSdN95mqFBEGdCjhgPmWJmh9FpzPLAwQGACUIlw2aCzxnPBsYlQph5tVzlZTH38BmARmYCQYBegEIhi02GFD7jJnA8aOaeDpxKo3xbPTWp7hTwBVEbGB7hUSF1DBAKEJqF1JDpXG4Swk0C42F5jQDRE7HIi4NjU9w7HACqITU9wp4ExQmA2BAYRqEbL1FjnNaibh2ig32ptiQupge4dpKukjYUzZ8akArcfxS39OpCTWfa0wtNrTa02tNrTa02tNrTa02tNpz9VaYTVAyNEIepYzxhRGS8n1mgmGiMAEerivxD7ljqe3QFX0Ac5oaIlxu93aYMkJDgioQVMHg/hV1tMY4Ppd2PC9BnNfir99SME63MDwbEWljTtpiLEcRVRrDpdizzTeNY/mi3EgIUQwuW90ll1BRgocTtOiNeZBB3BhB59TsncpguHM+yGAU4+MTObcmRASQvuhFYWeC7p9EE6WKYUf9nQ1kROaJAZHusR0OHuQRzkyOG46Bv4q/lX/9oADAMBAAIAAwAAABDzzzzzzzzzzzzzzzzzz/PPzzzzzzzzjRz2x37zzzzzyj73333jzzzzzzy1z333zTzzzzzzetX/AN9e888887+2rUi9888887OMMMMdO888887288888U888888528888o8888888s/es+t88888888888888888888888888888//EACYRAQABAwMCBgMAAAAAAAAAAAERADFhICFBUYEQMHGhwdFAkbH/2gAIAQMBAT8Q/ChAGWKSY9l90ZBGEf55UxApe4+3q7et6lLWWfAmpHIw0c3z9j16mb+tARJHXMmM8Lhg5nHFIjDpcWz8j5O/kHOAr9+vepOOJ8lz+Z0LyAP37eROVwu57duiBQ/ywHflwG7gpNKU4TwiWkZtDCLM0AiiCIu60vCwwMLHhegieDVuZejsW7nHSaGjeDjomRhMlRcWdmxhIB5Gm8lL1k+Q3yhQgYYARE2Q7IFx5Wp9qjfStxLodyLGACaIugy9IN3ezNu+phHqUlyKyqytZWsqkkLSANTgOKAhZ1Ko8a5XBQCR0hHJ5C8ugclK4pdn9UZAmpB+c//EACkRAQABAQYFBAMBAAAAAAAAAAERACAhMUFhwTBRgZGhcdHh8BBAsfH/2gAIAQIBAT8Q/SKlA1qJjyFCyCaM8KY3rn7Pepll1/EmEdKcL4+r/vehAJhbkUicYxjT1pEYbKLJruNzrwDpMcxj81Lw1Dcy/mthB8keAAsDFzjH40rCiE09KNhjDS7U8zR8McHJ/JQDakiyjd6HmKxPlP31pY7gLY3elRCZbs9/C1IryTd6viKlhAXk4JmevegwmGXlBr4tNIZI7b0q42S7CkU5Ad/8tYBSRTgby0LDLefa2Qy/mnRwlnQxPXgBxJ/e9Jbw9Sfaht+9I3avmR5t/wAVdUuUT2vK59sXn+9//8QAKhABAAECBAUDBAMAAAAAAAAAAREAITAxQVFhcYHB8BCRoSBAYOGx0fH/2gAIAQEAAT8Q/FgBbaX8sqJl82yaNk4HuqFUYzhTrKkRRITR+zu5dwbHhd+aERj9NodD6WA40EHovSZzu5Dlp8GnKEQiQjjgqASuhRdHsFuMavDT+MAaBFgW4f7UgBmxYwqXDZZp5j/MNxncQX7jb94x4gR+QsSZnz0oWySuRODhit8wMjQ79cactWbrnHcvVoa2vucNHWhEkuYIEEqJwLfBfb7ByGNeQODmfxwoiWNeF5OvlsDMObySKRlZGHFzvSvl6ijJZppQ8TscNXJqMkSbLnHct9ZBMgz3cWcCOnGh5vUBI9v29IQJ63sVOFNpxNTzalbJK4R51LnkRQeZk+Z0KVyeJzNPoNRAStO5m3ucSIk+37dfSEE9eNTzb0lgjp2x6RWj2/bpUsE9e2KJPLUp1CIlCTqUOapXI9fQZ+EcyzvPTFjBHTjQ839YdA6Y/b49ZwptOJqebVARH6s9EkqWY4q5bJ8b1GAW0lznp196MTdI2lLPZXqYd3NJgiypsa8l7V592rz7tXn3avHu1efdq8+7V592rz7tXn3avPu1Oebn/XXkvamkYpALWAcVhzxVw3hWcD/UxcoUJAJV5BQ8oEZhRw02LEVxHmXDQeKNYMJyB4kBv0XdiAPYvCFxHRp3Uw4EK0NizSYasRKUjBNoXoAMkUvAxBBKDwJ7xoZy0bZKOq0B46hmiRVxMNOTGBLqtEgOiFIWEqQN4OCEnBxVTgVk0J7xGQL2ESKOKZhsdJcthK0XDfwIsypDcVs8cZg7SngJNHUydajccrK3SF5NdQEnJ2b7oqvQKBL1TS4RzAPdrMFquloroUT/AMjnMhlyjO5TWvlX0oSq5xnYGKP5gBdlOSO8MtqW2rZkN7oip/WX+IQWg3AbraSqVVW6v5V//9k="},329:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/demo-932c14cb4e546042c07e5799665cc0d8.gif"},8926:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/nea-3a1bcf8f2def3c2af15a50c315f2f176.jpg"},5377:(A,e,t)=>{t.d(e,{Z:()=>a});const a="data:image/jpeg;base64,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"}}]); \ No newline at end of file +"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[3237],{8391:(A,e,t)=>{t.r(e),t.d(e,{default:()=>g});var a=t(7294),s=t(6010),c=t(9960),l=t(7961),E=t(7462);const n={features:"features_t9lD",featureSvg:"featureSvg_GfXr"},B=[{title:"A Plethora of Features",image:t(3768).Z,description:a.createElement(a.Fragment,null,"Regression Games is building the best platform for game test automation with replay features, validation libraries, CI/CD integration, and more.")},{title:"Ease of Integration",image:t(4661).Z,description:a.createElement(a.Fragment,null,"Ease of integration is one of our top priorities, and it shows. As soon as you add the SDK, data and deep state info is collected, without custom code needed.")},{title:"Bot Versatility",image:t(7390).Z,description:a.createElement(a.Fragment,null,"Regression Games interfaces are built for a variety of teams, even those who may not have code access. Our intuitive functional testing builder allows anyone to make tests.")}];function r(A){let{title:e,image:t,description:c}=A;return a.createElement("div",{className:(0,s.Z)("col col--4")},a.createElement("div",{className:"text--center"},a.createElement("img",{className:n.featureSvg,src:t})),a.createElement("div",{className:"text--center padding-horiz--md"},a.createElement("h3",null,e),a.createElement("p",null,c)))}function i(){return a.createElement("section",{className:n.features},a.createElement("div",{className:"container"},a.createElement("div",{className:"row"},B.map(((A,e)=>a.createElement(r,(0,E.Z)({key:e},A)))))))}const o="heroBanner_qdFl",Q="buttons_AeoN",m=()=>a.createElement("header",{className:(0,s.Z)("hero hero--secondary",o)},a.createElement("div",{className:"container",style:{textAlign:"left"}},a.createElement("div",{className:"row"},a.createElement("div",{className:"col margin-vert--lg margin-right--md"},a.createElement("h1",{className:"hero__title"},"Make better games through automated testing"),a.createElement("p",{className:"hero__subtitle"},"Regression Games helps game developers go from zero to one with automated game testing"),a.createElement("div",{className:Q,style:{justifyContent:"left"}},a.createElement(c.Z,{className:"button button--primary button--outline button--lg",to:"tutorials/building-your-first-bot"},"Get Started")),a.createElement("div",{style:{marginTop:"16px"}},"Get started immediately by adding the package to Unity:",a.createElement("div",{style:{marginTop:"16px",fontSize:12}},a.createElement("pre",{style:{display:"inline"}},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.28")))),a.createElement("div",{className:"col"},a.createElement("img",{src:t(329).Z,alt:"Regression Games",style:{borderRadius:"12px"}}),a.createElement("div",{style:{color:"gray",paddingRight:"24px",fontStyle:"italic"}},"Demo of our recording and validation features. Automatically extract game state and begin writing functional tests in minutes."))))),g=()=>a.createElement(l.Z,{title:"Regression Games Docs",description:"Build bots for games"},a.createElement(m,null),a.createElement("main",null,a.createElement(i,null)),a.createElement("div",{className:"container text--center"},a.createElement("div",{style:{marginBottom:"64px",marginTop:"32px",fontSize:"1.5em",color:"grey",fontWeight:"bold"}},"BACKED BY TIER 1 INVESTORS"),a.createElement("div",{className:"row"},a.createElement("div",{className:(0,s.Z)("col col--3")},a.createElement("div",{className:"text--center"},a.createElement("a",{href:"https://nea.com/",target:"_blank"},a.createElement("img",{style:{height:"60px"},src:t(8926).Z})))),a.createElement("div",{className:(0,s.Z)("col col--3")},a.createElement("div",{className:"text--center"},a.createElement("a",{href:"https://a16z.com/",target:"_blank"},a.createElement("img",{style:{height:"100px",marginTop:"-20px"},src:t(2074).Z})))),a.createElement("div",{className:(0,s.Z)("col col--3")},a.createElement("div",{className:"text--center"},a.createElement("a",{href:"https://roosh.vc/",target:"_blank"},a.createElement("img",{style:{height:"150px",marginTop:"-40px"},src:t(5377).Z})))),a.createElement("div",{className:(0,s.Z)("col col--3")},a.createElement("div",{className:"text--center"},a.createElement("a",{href:"https://bbq.capital/",target:"_blank"},a.createElement("img",{style:{height:"80px",marginTop:"-00px"},src:t(6796).Z})))))))},2074:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/a16z-137749dc988bf598433d91265cf02959.jpeg"},7390:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/ai (2)-19c3966e89df8c194ecd3e781a68cfca.png"},4661:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/ai (3)-a8825fb481555ca2707f39c89be6dedb.png"},3768:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/ai_1-e765bdc2cfecce91cbd44170e21a6e1c.png"},6796:(A,e,t)=>{t.d(e,{Z:()=>a});const a="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCADIAMgDASIAAhEBAxEB/8QAHAABAAEFAQEAAAAAAAAAAAAAAAQDBQYHCAEC/8QAGwEBAAIDAQEAAAAAAAAAAAAAAAUGAgMEAQf/2gAMAwEAAhADEAAAAdUi6Q4AAAAAAAAAAAAAAAAAkY4R1090ctqTIm7p8GewAAAAAAAenl1ud/g6vBnEFVQw1I0llni1i2Na5qy4Y+/iftwe+gAAAAMix3J+CJyB8/VS+fg8AAAtGH7Hw6etlpE9awAAAAAJWTYe443Y7CMnr1QuA4IkABa7p8bd+u3vl3+oAAAAAAVKd9tcXao3vkrvr1yyHHrLB4bFYvksZ8y+xzx48NfUvr5vX1UMsgAAAEmNfY2zSoktTPuGMX2LdJyhLDfonFOW6/RJPntwnWG0vk+bQocHr+Q4+LZ9AAAAAdYcn9Jx2/cntdXJKgrntBXFBXFBXFDyQeR+Nez+EJfjhCd4gAAAGx9cfWv3v1hmZ1GWDH0AAADX3IO69KWWODv0AAAAAZV2LwhmUdv7NY9kNdkA89AAAt3EPd/FMxyYsJziAAAAAAlbm0e059jZdwWjt/fti4fY+9O6bwZ3aerNm8DOTb01zN47tAdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//EACgQAAEDBAIABgMBAQAAAAAAAAMBAgQABQYwEhMHEBEUFSAxQGAkM//aAAgBAQABBQL+WZHISktp1r409PiGZ+pGt7z0GEIP1LGGapFrcyvx+hCt/HTLhNkI9ijdttsT11z4nezbFuTfRFRyariDpNtDJJHWPchl1XEXZG3x5pI9R5o5Gh7ebdrWK/6CnFjUGSOQn2J/02Rx8BnH1kqOPsJJHzGiq1Y90VtNcj08/wAUq+q6wD7CVJHzHUcfAdHH1kjj5kRytVspPRrkclTCdcbZHHwH5e3/ANHlJHzHHH1j8ux8Mse5MLV1PyXV4ftGXGPbiroHXQOugddA66B10DroHXQOugddA69uKvbirK3I7I9XhdL527Y96DZNke8masCunxuQbM6unxmP60VWrid9bfrTr8TmTFuGzHL8XHrjAnAuUXVcIAbnDnw3W+bsxzJ5OOyLNfod9j6soO2TkO2NKNDNaPE04Ug5rZ5yClgkI5yNSVf7bCS5eJkCOlyzO63I+N51EugVMNGZXnceJH/qv//EADQRAAECAwUFBQcFAAAAAAAAAAECBAADEQUSICExBhMUMFEiQWGRwRAVMkCBsdEkU3Hh8P/aAAgBAwEBPwH5JSkoFVGkcY2/cHnCVomZoNeU9te4d238/wARMmLmm8s19iVqQbyTSGdrkG4484BrmMdpb/cUkD+cVjuyf06/pyHLCS6zUKHrDqzZzbPVPXBImbmamYO7kP7DmMmEl2dT8XhXT+/GGrdbucmRL1VG02y0pk6uS8gcwYcMHDaqlp7PXu9qcgMWz1ne8HqQodhOZ/H1h22Q8kLbzNFCNmLGW1nTXDgZpN0ep/3jG0lnceyKkjtozHqIsGykNLP3c5NSvNQP2jbHYxu2AeWcLgOo7q+n2huxm8UmXMTTFJ+KAaaRePWLxi8YvHrFSYcaDEDdNYBqK4pxqrHKmXMjANcLgaHkJUU6QHB7xHEeEKmKVAnkawtZWc/nv//EACwRAAEDAgQEBgIDAAAAAAAAAAIAAQMEEQUTIDEhIjBBEBIUMkCRQkNRUoH/2gAIAQIBAT8B+E5MPF16iH+7ISEva/SqcQ8vJF9ojI3uT+Ak4vcVT4g7cs32t9dbm5Vom1YdUfpL/OhNSxz77qejkh47toiPLNi6EFaM05RfSkkaIHMuyiijr4/O3AlNAcD2PxbbVX1GRC9t3UUjxGxj2WJVbSgIB34rD6jIms+zqvqM+bhsypI/UXC/MoaU89gNtVc14deHNzE+qQGkFxdELgXlfVRAwxX/AJ11VLncw7p2cXs+nDie5D26EkIS+9kWHD+JJsObuSjpYo9mR4eJPcXsoYRgaw/O/8QAORAAAQICBgcFBgYDAAAAAAAAAQIDABEEISIwYZEQEjEyM0FREyBxgaEFIyRAUuEUQlNgktFicoL/2gAIAQEABj8C/a1lBMbsvON0ZxW2flJmwnrFSZnqe7aSDjE27Q6c/kQt0V8k3MxU51gpUJEX3aq/5u9ZO+PW+CHBqYjZEwZi7mN1Vd9ZPlElWFel0TzTX8ht1k9DG3VV0NwR1vjLl3AHLafWLB8u+rxvcTGGjARiImDIxJ20OoiY7pN5hoxGjE6MIwEVRbziYMxoWcJXuJ0/47dOIjE6bBkOkSXYV6QlscqzdsTQklKlisYxwkfxjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhoyjhI/jHtDVqAdIqu6XRubbmv5Efa9KlGSQJkw++drq1LzN22lRk3SB2R8eXrevgGTr/uU+e30vJioiEOk/EIsOjHr53jC3EfBBMmlDZPnPG9S+i02anG/qEN0ijrDjSxUbt2jPp1m3BIw/Rl7zSyg3s2/eUdW+ydh+8dpRXJn8zZ3k+N3T3EVp7UifhVfJdYcU04nYpBkYCPaDH4gfqt1Ky2QJUxLKvpesfaJtPNuf6qBiZIHjHvqcwjDXE8oIoja6WvqbCf7hLhpBYCDrJbZqA/uEt0xxNFpgqOtUlfgY1ytIR9U6oXRvZ7oepKqu1Ruo8+Z/df/xAAqEAABAgQDCAIDAAAAAAAAAAABABEhMDFRQXHxECBhgZGhscFA8GDR4f/aAAgBAQABPyH8WpbXaCwLmBEeJkCwG3Afx8QEM9VOQTGxn53Qcc6uqEE/G/TogkxDEfACDpWTDOSdN95mqFBEGdCjhgPmWJmh9FpzPLAwQGACUIlw2aCzxnPBsYlQph5tVzlZTH38BmARmYCQYBegEIhi02GFD7jJnA8aOaeDpxKo3xbPTWp7hTwBVEbGB7hUSF1DBAKEJqF1JDpXG4Swk0C42F5jQDRE7HIi4NjU9w7HACqITU9wp4ExQmA2BAYRqEbL1FjnNaibh2ig32ptiQupge4dpKukjYUzZ8akArcfxS39OpCTWfa0wtNrTa02tNrTa02tNrTa02tNpz9VaYTVAyNEIepYzxhRGS8n1mgmGiMAEerivxD7ljqe3QFX0Ac5oaIlxu93aYMkJDgioQVMHg/hV1tMY4Ppd2PC9BnNfir99SME63MDwbEWljTtpiLEcRVRrDpdizzTeNY/mi3EgIUQwuW90ll1BRgocTtOiNeZBB3BhB59TsncpguHM+yGAU4+MTObcmRASQvuhFYWeC7p9EE6WKYUf9nQ1kROaJAZHusR0OHuQRzkyOG46Bv4q/lX/9oADAMBAAIAAwAAABDzzzzzzzzzzzzzzzzzz/PPzzzzzzzzjRz2x37zzzzzyj73333jzzzzzzy1z333zTzzzzzzetX/AN9e888887+2rUi9888887OMMMMdO888887288888U888888528888o8888888s/es+t88888888888888888888888888888//EACYRAQABAwMCBgMAAAAAAAAAAAERADFhICFBUYEQMHGhwdFAkbH/2gAIAQMBAT8Q/ChAGWKSY9l90ZBGEf55UxApe4+3q7et6lLWWfAmpHIw0c3z9j16mb+tARJHXMmM8Lhg5nHFIjDpcWz8j5O/kHOAr9+vepOOJ8lz+Z0LyAP37eROVwu57duiBQ/ywHflwG7gpNKU4TwiWkZtDCLM0AiiCIu60vCwwMLHhegieDVuZejsW7nHSaGjeDjomRhMlRcWdmxhIB5Gm8lL1k+Q3yhQgYYARE2Q7IFx5Wp9qjfStxLodyLGACaIugy9IN3ezNu+phHqUlyKyqytZWsqkkLSANTgOKAhZ1Ko8a5XBQCR0hHJ5C8ugclK4pdn9UZAmpB+c//EACkRAQABAQYFBAMBAAAAAAAAAAERACAhMUFhwTBRgZGhcdHh8BBAsfH/2gAIAQIBAT8Q/SKlA1qJjyFCyCaM8KY3rn7Pepll1/EmEdKcL4+r/vehAJhbkUicYxjT1pEYbKLJruNzrwDpMcxj81Lw1Dcy/mthB8keAAsDFzjH40rCiE09KNhjDS7U8zR8McHJ/JQDakiyjd6HmKxPlP31pY7gLY3elRCZbs9/C1IryTd6viKlhAXk4JmevegwmGXlBr4tNIZI7b0q42S7CkU5Ad/8tYBSRTgby0LDLefa2Qy/mnRwlnQxPXgBxJ/e9Jbw9Sfaht+9I3avmR5t/wAVdUuUT2vK59sXn+9//8QAKhABAAECBAUDBAMAAAAAAAAAAREAITAxQVFhcYHB8BCRoSBAYOGx0fH/2gAIAQEAAT8Q/FgBbaX8sqJl82yaNk4HuqFUYzhTrKkRRITR+zu5dwbHhd+aERj9NodD6WA40EHovSZzu5Dlp8GnKEQiQjjgqASuhRdHsFuMavDT+MAaBFgW4f7UgBmxYwqXDZZp5j/MNxncQX7jb94x4gR+QsSZnz0oWySuRODhit8wMjQ79cactWbrnHcvVoa2vucNHWhEkuYIEEqJwLfBfb7ByGNeQODmfxwoiWNeF5OvlsDMObySKRlZGHFzvSvl6ijJZppQ8TscNXJqMkSbLnHct9ZBMgz3cWcCOnGh5vUBI9v29IQJ63sVOFNpxNTzalbJK4R51LnkRQeZk+Z0KVyeJzNPoNRAStO5m3ucSIk+37dfSEE9eNTzb0lgjp2x6RWj2/bpUsE9e2KJPLUp1CIlCTqUOapXI9fQZ+EcyzvPTFjBHTjQ839YdA6Y/b49ZwptOJqebVARH6s9EkqWY4q5bJ8b1GAW0lznp196MTdI2lLPZXqYd3NJgiypsa8l7V592rz7tXn3avHu1efdq8+7V592rz7tXn3avPu1Oebn/XXkvamkYpALWAcVhzxVw3hWcD/UxcoUJAJV5BQ8oEZhRw02LEVxHmXDQeKNYMJyB4kBv0XdiAPYvCFxHRp3Uw4EK0NizSYasRKUjBNoXoAMkUvAxBBKDwJ7xoZy0bZKOq0B46hmiRVxMNOTGBLqtEgOiFIWEqQN4OCEnBxVTgVk0J7xGQL2ESKOKZhsdJcthK0XDfwIsypDcVs8cZg7SngJNHUydajccrK3SF5NdQEnJ2b7oqvQKBL1TS4RzAPdrMFquloroUT/AMjnMhlyjO5TWvlX0oSq5xnYGKP5gBdlOSO8MtqW2rZkN7oip/WX+IQWg3AbraSqVVW6v5V//9k="},329:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/demo-932c14cb4e546042c07e5799665cc0d8.gif"},8926:(A,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/nea-3a1bcf8f2def3c2af15a50c315f2f176.jpg"},5377:(A,e,t)=>{t.d(e,{Z:()=>a});const a="data:image/jpeg;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/735d0569.85fea1fa.js b/assets/js/735d0569.85fea1fa.js new file mode 100644 index 0000000..469c4b7 --- /dev/null +++ b/assets/js/735d0569.85fea1fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[7445],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>c});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),d=u(a),k=r,c=d["".concat(s,".").concat(k)]||d[k]||m[k]||l;return a?n.createElement(c,i(i({ref:t},p),{},{components:a})):n.createElement(c,i({ref:t},p))}));function c(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=k;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[d]="string"==typeof e?e:r,i[1]=o;for(var u=2;u<l;u++)i[u]=a[u];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}k.displayName="MDXCreateElement"},997:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>o,toc:()=>u});var n=a(7462),r=(a(7294),a(3905));const l={sidebar_label:"Changelog"},i="Changelog",o={unversionedId:"changelog",id:"changelog",title:"Changelog",description:"Release 0.0.28",source:"@site/docs/changelog.mdx",sourceDirName:".",slug:"/changelog",permalink:"/changelog",draft:!1,tags:[],version:"current",frontMatter:{sidebar_label:"Changelog"}},s={},u=[{value:"Release 0.0.28",id:"release-0028",level:2},{value:"Release 0.0.27",id:"release-0027",level:2},{value:"Release 0.0.26",id:"release-0026",level:2},{value:"Release 0.0.25",id:"release-0025",level:2},{value:"Release 0.0.24",id:"release-0024",level:2},{value:"Release 0.0.23",id:"release-0023",level:2},{value:"Release 0.0.22",id:"release-0022",level:2},{value:"Release 0.0.21",id:"release-0021",level:2},{value:"Release 0.0.20",id:"release-0020",level:2},{value:"Release 0.0.19",id:"release-0019",level:2},{value:"Release 0.0.18",id:"release-0018",level:2},{value:"Release 0.0.17",id:"release-0017",level:2},{value:"Release 0.0.16",id:"release-0016",level:2},{value:"Release 0.0.15",id:"release-0015",level:2},{value:"Release 0.0.14",id:"release-0014",level:2},{value:"Release 0.0.13",id:"release-0013",level:2},{value:"Release 0.0.12",id:"release-0012",level:2},{value:"Release 0.0.11",id:"release-0011",level:2}],p={toc:u},d="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"changelog"},"Changelog"),(0,r.kt)("h2",{id:"release-0028"},"Release 0.0.28"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"September 23, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bot Sequences can now be created, edited, and deleted directly from the in-game overlay"),(0,r.kt)("li",{parentName:"ul"},"Bot segments that rely on image sources can now load images from paths vs just raw data"),(0,r.kt)("li",{parentName:"ul"},"Direct login is no longer supported for the SDK; API keys are now required"),(0,r.kt)("li",{parentName:"ul"},"Bot Sequences are now reloaded automatically from disk when played"),(0,r.kt)("li",{parentName:"ul"},"Object detection bot segments can now define a confidence threshold (text queries only)")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Improved language and explanations within the website"),(0,r.kt)("li",{parentName:"ul"},"Properly handle failing behaviour segments that dont load or timeout"),(0,r.kt)("li",{parentName:"ul"},"Use of computer-vision capabilities now requires authentication by setting an API key in the SDK settings"),(0,r.kt)("li",{parentName:"ul"},"Sprite rendering within the SDK has been improved"),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where the overlay would throw a null exception when opening for the first time"),(0,r.kt)("li",{parentName:"ul"},"Fixed issues causing the game to freeze for a few seconds when starting"),(0,r.kt)("li",{parentName:"ul"},"Data for the last segment of a recording is now properly saved")),(0,r.kt)("h2",{id:"release-0027"},"Release 0.0.27"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"September 9, 2024")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Validations can now be run against state contained within the root properties of a Game Object."),(0,r.kt)("li",{parentName:"ul"},"Game logs are now recorded and uploaded as part of a bot sequence run or recording (no UI available yet)."),(0,r.kt)("li",{parentName:"ul"},"Performance of data capture during gameplay recording has been improved, especially for ECS-based games."),(0,r.kt)("li",{parentName:"ul"},"Bug fix: Screenshots are now properly captured at the end of a frame.")),(0,r.kt)("h2",{id:"release-0026"},"Release 0.0.26"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"}," August 26, 2024")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Interleaved playback of recorded mouse and keyboard events has been improved"),(0,r.kt)("li",{parentName:"ul"},"Improved navigation layout on our website"),(0,r.kt)("li",{parentName:"ul"},"Bug fix: Scenario builder no longer shows duplicate step options"),(0,r.kt)("li",{parentName:"ul"},"Bug fix: Improvements to the display of the Validation Demo walkthrough"),(0,r.kt)("li",{parentName:"ul"},"Many experimental features added for an improved overlay experience, bot logic sequencing, and computer vision approaches... stay tuned!")),(0,r.kt)("h2",{id:"release-0025"},"Release 0.0.25"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"August 12, 2024")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Performance rules can be created to flag when a playthrough crosses certain FPS thresholds"),(0,r.kt)("li",{parentName:"ul"},"Performance information is collected more frequently during gameplay recording"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"New Bot"),' - An action analysis tool adds support for a "monkey bot" that can randomly interact with a game in an efficient manner'),(0,r.kt)("li",{parentName:"ul"},"Unity ECS data collection is now supported - validate state information from both ECS and GameObjects"),(0,r.kt)("li",{parentName:"ul"},"Improvements to various SDK error messages"),(0,r.kt)("li",{parentName:"ul"},"Better support for lower resolution screens")),(0,r.kt)("h2",{id:"release-0024"},"Release 0.0.24"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"This release deployment was skipped and kept internal")),(0,r.kt)("h2",{id:"release-0023"},"Release 0.0.23"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"July 1, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Try out our validation tool without an account or game! Visit ",(0,r.kt)("a",{parentName:"li",href:"http://play.regression.gg"},"play.regression.gg")," to learn more"),(0,r.kt)("li",{parentName:"ul"},"A tutorial is now available for our validation tool, built directly into the website"),(0,r.kt)("li",{parentName:"ul"},"The progress of a validation run is now displayed"),(0,r.kt)("li",{parentName:"ul"},"Scenarios can now be run from the demo scenario builder page")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Scenario validations now properly start from the start of a recording (the ordering of scenarios no longer matters)"),(0,r.kt)("li",{parentName:"ul"},"The validation results now shows the proper gameplay recording within the screenshot scrubber"),(0,r.kt)("li",{parentName:"ul"},"Improved performance of input recording within the SDK"),(0,r.kt)("li",{parentName:"ul"},"Long-running validation runs no longer timeout")),(0,r.kt)("h2",{id:"release-0022"},"Release 0.0.22"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"June 18, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The Unity SDK now supports recording games using the legacy input system and Unity UI."),(0,r.kt)("li",{parentName:"ul"},"New data collection format for improved state display within the scenario builder and validation results page."),(0,r.kt)("li",{parentName:"ul"},"New Bot Segment data format for stitching together various bot types, such as monkey testing bots combined with recordings."),(0,r.kt)("li",{parentName:"ul"},"Bounding boxes show entity locations within the gameplay session web UI for improved debugging.")),(0,r.kt)("h2",{id:"release-0021"},"Release 0.0.21"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"June 6, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New SDK Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Recordings can now be used programmatically in Unity Test Runner."),(0,r.kt)("li",{parentName:"ul"},"Inputs handled via ",(0,r.kt)("inlineCode",{parentName:"li"},"Input.GetKey()")," can now be captured and used in replays."),(0,r.kt)("li",{parentName:"ul"},"An animation rigging package is now available within the Unity SDK for data capturing.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"SDK Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Improvements to error messages for recording playback.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Website Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Prevent breakage when storing null or undefined in a Store Step."),(0,r.kt)("li",{parentName:"ul"},"Adjusted height for the recording thumbnail in suite details.")),(0,r.kt)("h2",{id:"release-0020"},"Release 0.0.20"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"May 23rd, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Memory and CPU information is now captured by gameplay session recording."),(0,r.kt)("li",{parentName:"ul"},"The in-game overlay has an improved layout."),(0,r.kt)("li",{parentName:"ul"},"Gameplay session recordings can now be looped for repeated testing.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Quickscope ",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Null count values are now allowed for scenario steps that have an optional count."),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where duplicate scenario names were allowed in a suite."),(0,r.kt)("li",{parentName:"ul"},"Scenarios now maintain their creation order."),(0,r.kt)("li",{parentName:"ul"},"Improved loading of screenshots for a gameplay session.")))),(0,r.kt)("h2",{id:"release-0019"},"Release 0.0.19"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"May 8th, 2024")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Introducing ",(0,r.kt)("strong",{parentName:"li"},"Quickscope"),", a new collection of features made for easy smoke test automation!",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"New features within the SDK for recording a gameplay session and playing it back as an automated test"),(0,r.kt)("li",{parentName:"ul"},"A UI for designing functional validation tests from data automatically scraped from your game.")))),(0,r.kt)("p",null,"Learn more about this release in our ",(0,r.kt)("a",{parentName:"p",href:"https://www.regression.gg/post/quickscope-launch?ref=docs.regression.gg"},"blog post!"),"."),(0,r.kt)("h2",{id:"release-0018"},"Release 0.0.18"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"April 8th, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The new UI/UX is now available to all users."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Be on the lookout for a large release at the beginning of May!"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where Agent Builder would use incorrect paths for certain operation systems."),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where certain redirects were not working on the website.")),(0,r.kt)("h2",{id:"release-0017"},"Release 0.0.17"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"February 29, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Introducing an ",(0,r.kt)("a",{parentName:"li",href:"/automated-testing/overview"},"automated UI testing framework for Unity")),(0,r.kt)("li",{parentName:"ul"},"An entirely new way of ","[representing states]"," requiring less custom integration"),(0,r.kt)("li",{parentName:"ul"},"[Rolling Out]"," New UI design - send us a message for access!")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The SDK is still only usable in the editor, but will no longer interfere with creating production builds. Future support for running the SDK in production builds will be coming at a later date."),(0,r.kt)("li",{parentName:"ul"},"Various UI improvements, such as screen size scaling and link fixes")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Other Notes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Improved scalability of the bot instance history dashboard")),(0,r.kt)("h2",{id:"release-0016"},"Release 0.0.16"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"December 19, 2023")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Our new ",(0,r.kt)("a",{parentName:"li",href:"/quickstart"},"quickstart guide")," allows you to have your first bot running in minutes"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[RGState]")," is now allowed on class properties"),(0,r.kt)("li",{parentName:"ul"},"Support for raw key press actions using the new Unity Input System, which works great for certain types of bots"),(0,r.kt)("li",{parentName:"ul"},"Code generation time has been reduced, and is now automatic"),(0,r.kt)("li",{parentName:"ul"},"Default tick rate for bots is now faster"),(0,r.kt)("li",{parentName:"ul"},"Logs from local bots are now uploaded and saved for debugging"),(0,r.kt)("li",{parentName:"ul"},"Local bots can now be saved onto your Regression Games account"),(0,r.kt)("li",{parentName:"ul"},"The current tick number can now be accessed by local bots")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed bug where the username and password would not change within the SDK settings"),(0,r.kt)("li",{parentName:"ul"},"Bot loading reliability has been improved"),(0,r.kt)("li",{parentName:"ul"},"Better save settings around login passwords"),(0,r.kt)("li",{parentName:"ul"},"Stack traces from bots are now clickable and more usable within the Unity console"),(0,r.kt)("li",{parentName:"ul"},"Improved / reduced OOM issues with bot replay data")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Other Notes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Our SSL certs have been updated - make sure to update your SDK to use these new settings")),(0,r.kt)("h2",{id:"release-0015"},"Release 0.0.15"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"November 21, 2023")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview, and it's ",(0,r.kt)("strong",{parentName:"p"},"our biggest release yet!")," Our product is in beta and we would love for developers to\ntry it out and provide feedback! Contact us at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New welcome screen added to the SDK, with docs and ",(0,r.kt)("strong",{parentName:"li"},"sample scene/bot")," options"),(0,r.kt)("li",{parentName:"ul"},"Introducing C# bots that run ",(0,r.kt)("strong",{parentName:"li"},"directly in Unity")," (reference materials ",(0,r.kt)("a",{parentName:"li",href:"creating-bots/csharp/adaptive-bots"},"here"),")"),(0,r.kt)("li",{parentName:"ul"},"Introducing ",(0,r.kt)("a",{parentName:"li",href:"pre-made-bots"},(0,r.kt)("strong",{parentName:"a"},"Bot Marketplace"))," (Beta), which provides ready-to-go bots and integration instructions for those bots"),(0,r.kt)("li",{parentName:"ul"},"Introducing ",(0,r.kt)("strong",{parentName:"li"},"Validation Dashboard")," (Beta), which provides an interface to view validation runs for a bot, complete with screenshots, state information, and historical records of previous runs"),(0,r.kt)("li",{parentName:"ul"},"Introducing ",(0,r.kt)("a",{parentName:"li",href:"creating-bots/csharp/agent-builder"},(0,r.kt)("strong",{parentName:"a"},"Agent Builder"))," (Beta), which provides a fast, low-code way to develop bots"),(0,r.kt)("li",{parentName:"ul"},"Improved debug utilities like RGGizmos to see what your bot is thinking"),(0,r.kt)("li",{parentName:"ul"},"Bots can now be directly synced into your Unity projects"),(0,r.kt)("li",{parentName:"ul"},"New tutorials and guides for getting started")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"General Improvements")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New homepage dashboard for game developers, showing the latest runs, bots, and guides"),(0,r.kt)("li",{parentName:"ul"},"Agent Builder now supports and uses zip file bots by default"),(0,r.kt)("li",{parentName:"ul"},"New RGState, RGAction, and RGEntity features for integrating the SDK into your game"),(0,r.kt)("li",{parentName:"ul"},"Site has been updated to remove most tournament information and instead focuses on bots for studios")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where nullable types were not properly generated for RGActions"),(0,r.kt)("li",{parentName:"ul"},"Fixed a code generation bug in Firefox"),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where local unity bots could not utilize action formats properly")),(0,r.kt)("h2",{id:"release-0014"},"Release 0.0.14"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"October 10, 2023")," "),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact\nus at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Platform Improvements")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added better support for choosing between various languages and bot-building tools when creating bots")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed bug with updating bots that are managed via a zip file"),(0,r.kt)("li",{parentName:"ul"},"Fixed bug where logs for bots would display duplicated lines"),(0,r.kt)("li",{parentName:"ul"},"Fixed issue with default settings for the Getting Started sample")),(0,r.kt)("h2",{id:"release-0013"},"Release 0.0.13"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"September 25, 2023")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact\nus at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New RGState attribute in our Unity SDK can be used to seamlessly communicate state information to your bots"),(0,r.kt)("li",{parentName:"ul"},"Agent validation results are now sent to the Unity SDK and properly cause QA tests to fail if a validation has failed"),(0,r.kt)("li",{parentName:"ul"},"The connection status of bots are now shown within the Unity SDK Overlay")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Platform Improvements")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Logs in the Unity SDK have been sanitized to omit sensitive information"),(0,r.kt)("li",{parentName:"ul"},"New AIEngine service is available to make instant bots more stable and scalable"),(0,r.kt)("li",{parentName:"ul"},"The start time of current and historical bot runs is now visible within the Running Bots dashboard")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Users no longer need a GitHub account to create and use Zip bots"),(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where match logs would be retrieved from an incorrect starting index"),(0,r.kt)("li",{parentName:"ul"},"Fixed a client bug where documentation would not open from the Running Bots dashboard"),(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where Zip bots would not properly start or reload")),(0,r.kt)("h2",{id:"release-0012"},"Release 0.0.12"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"September 11, 2023")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact\nus at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Platform Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New ","[RGAction attribute]"," within RG Unity SDK to make actions easier to define"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"tutorials/github-actions"},"GitHub Actions and Unity Test Runner Support")," - New samples and guides for running bots\nin GitHub Actions (and other CI/CD systems via ",(0,r.kt)("a",{parentName:"li",href:"https://game.ci"},"GameCI"),")"),(0,r.kt)("li",{parentName:"ul"},"UI improvements to Behavior Tree Beta"),(0,r.kt)("li",{parentName:"ul"},"Updated defaults for RG Unity SDK to be more user-friendly"),(0,r.kt)("li",{parentName:"ul"},"The RG Unity SDK now includes its own font assets for better interoperability"),(0,r.kt)("li",{parentName:"ul"},"Links to download Zip bots from dashboard are now available")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed issue where the website would freeze in some match loading scenarios"),(0,r.kt)("li",{parentName:"ul"},"Fixed broken links in documentation"),(0,r.kt)("li",{parentName:"ul"},"Fixed issue where Agent Builder code generation would flicker"),(0,r.kt)("li",{parentName:"ul"},"Fixed bug where Unity actions would sometimes be sent to the wrong bots"),(0,r.kt)("li",{parentName:"ul"},"Fixed bug where instant bots would not start when the user did not have a linked GitHub account")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Security fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed bug where lobby APIs would reveal email addresses")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Coming Soon")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Continued improvements and additions to the Unity attribute system"),(0,r.kt)("li",{parentName:"ul"},"Additional samples and guides for various use cases"),(0,r.kt)("li",{parentName:"ul"},"New features for the Agent Builder tool")),(0,r.kt)("h2",{id:"release-0011"},"Release 0.0.11"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"August 28, 2023")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact\nus at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Platform Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"404"},"Agent Builder")," Beta - Our GPT-enabled agent builder product is live for select players, now with improved validation tools. If you","'","d like to try it out, let us know!"),(0,r.kt)("li",{parentName:"ul"},"Our documentation site is now live! This docs site includes API/SDK references, tutorials, guides, and FAQs for both players and developers."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"authenticating-with-api-keys"},"API Keys")," - developers and players can now create API keys to interact with RG services"),(0,r.kt)("li",{parentName:"ul"},"New onboarding flow for players and game developers"),(0,r.kt)("li",{parentName:"ul"},"The ID of a bot can now be seen and copied within the Bot Manager"),(0,r.kt)("li",{parentName:"ul"},"Zip Bots - Bots uploaded via zip can now be downloaded"),(0,r.kt)("li",{parentName:"ul"},"The home page has been redesigned to provide players more information about getting started.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Unity SDK Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"An early preview of our ",(0,r.kt)("a",{parentName:"li",href:"overview"},"Unity SDK")," for building AI agents is now live! Our docs site has a getting started guide - message us for access."),(0,r.kt)("li",{parentName:"ul"},"Developers can now create Unity bots from the Bot Manager"),(0,r.kt)("li",{parentName:"ul"},"Logs for bots can now be downloaded - available via API or through the ",(0,r.kt)("a",{parentName:"li",href:"session-insights/in-editor-replay"},"Bot History dashboard")),(0,r.kt)("li",{parentName:"ul"},"Character configuration for Unity bots is more flexible and customizable"),(0,r.kt)("li",{parentName:"ul"},"Validation results for QA testing bots are now saved to Unity Replay files, allowing for viewing the validation directly within Unity"),(0,r.kt)("li",{parentName:"ul"},"Default settings for the SDK have been adjusted for increased ease of use"),(0,r.kt)("li",{parentName:"ul"},"Added a \u201cStop All\u201d button for stopping bots from within the Unity game")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed issue where choosing a bot repository via commit would throw an error"),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where bot logs would not show the correct number of lines before clearing"),(0,r.kt)("li",{parentName:"ul"},"Fixed issues where Unity bots would not teardown properly"),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where login and registration would sometimes fail"),(0,r.kt)("li",{parentName:"ul"},"Feedback button has been moved to a better spot on the screen to avoid hiding other components"),(0,r.kt)("li",{parentName:"ul"},"Fixed issue with SSL certs on certain systems")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Migration Notes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"For Unity developers: the namespace for various classes in the Unity SDK have been updated. Please make sure to add the following import declaration\nin your files that use classes from Regression Games.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},"using RegressionGames;\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Coming Soon")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New attribute-based system for Unity SDK integration. New attributes will permit defining bot actions and state from existing functions and variables within your code."),(0,r.kt)("li",{parentName:"ul"},"CI/CD support - Instructions and examples will be added for running a Quality Assurance Bots in GitHub Actions.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/735d0569.d2da1b08.js b/assets/js/735d0569.d2da1b08.js deleted file mode 100644 index ad5d8ec..0000000 --- a/assets/js/735d0569.d2da1b08.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[7445],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>c});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),d=u(a),k=r,c=d["".concat(s,".").concat(k)]||d[k]||m[k]||l;return a?n.createElement(c,i(i({ref:t},p),{},{components:a})):n.createElement(c,i({ref:t},p))}));function c(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=k;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[d]="string"==typeof e?e:r,i[1]=o;for(var u=2;u<l;u++)i[u]=a[u];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}k.displayName="MDXCreateElement"},997:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>o,toc:()=>u});var n=a(7462),r=(a(7294),a(3905));const l={sidebar_label:"Changelog"},i="Changelog",o={unversionedId:"changelog",id:"changelog",title:"Changelog",description:"Release 0.0.27",source:"@site/docs/changelog.mdx",sourceDirName:".",slug:"/changelog",permalink:"/changelog",draft:!1,tags:[],version:"current",frontMatter:{sidebar_label:"Changelog"}},s={},u=[{value:"Release 0.0.27",id:"release-0027",level:2},{value:"Release 0.0.26",id:"release-0026",level:2},{value:"Release 0.0.25",id:"release-0025",level:2},{value:"Release 0.0.24",id:"release-0024",level:2},{value:"Release 0.0.23",id:"release-0023",level:2},{value:"Release 0.0.22",id:"release-0022",level:2},{value:"Release 0.0.21",id:"release-0021",level:2},{value:"Release 0.0.20",id:"release-0020",level:2},{value:"Release 0.0.19",id:"release-0019",level:2},{value:"Release 0.0.18",id:"release-0018",level:2},{value:"Release 0.0.17",id:"release-0017",level:2},{value:"Release 0.0.16",id:"release-0016",level:2},{value:"Release 0.0.15",id:"release-0015",level:2},{value:"Release 0.0.14",id:"release-0014",level:2},{value:"Release 0.0.13",id:"release-0013",level:2},{value:"Release 0.0.12",id:"release-0012",level:2},{value:"Release 0.0.11",id:"release-0011",level:2}],p={toc:u},d="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"changelog"},"Changelog"),(0,r.kt)("h2",{id:"release-0027"},"Release 0.0.27"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"September 9, 2024")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Validations can now be run against state contained within the root properties of a Game Object."),(0,r.kt)("li",{parentName:"ul"},"Game logs are now recorded and uploaded as part of a bot sequence run or recording (no UI available yet)."),(0,r.kt)("li",{parentName:"ul"},"Performance of data capture during gameplay recording has been improved, especially for ECS-based games."),(0,r.kt)("li",{parentName:"ul"},"Bug fix: Screenshots are now properly captured at the end of a frame.")),(0,r.kt)("h2",{id:"release-0026"},"Release 0.0.26"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"}," August 26, 2024")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Interleaved playback of recorded mouse and keyboard events has been improved"),(0,r.kt)("li",{parentName:"ul"},"Improved navigation layout on our website"),(0,r.kt)("li",{parentName:"ul"},"Bug fix: Scenario builder no longer shows duplicate step options"),(0,r.kt)("li",{parentName:"ul"},"Bug fix: Improvements to the display of the Validation Demo walkthrough"),(0,r.kt)("li",{parentName:"ul"},"Many experimental features added for an improved overlay experience, bot logic sequencing, and computer vision approaches... stay tuned!")),(0,r.kt)("h2",{id:"release-0025"},"Release 0.0.25"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"August 12, 2024")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Performance rules can be created to flag when a playthrough crosses certain FPS thresholds"),(0,r.kt)("li",{parentName:"ul"},"Performance information is collected more frequently during gameplay recording"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"New Bot"),' - An action analysis tool adds support for a "monkey bot" that can randomly interact with a game in an efficient manner'),(0,r.kt)("li",{parentName:"ul"},"Unity ECS data collection is now supported - validate state information from both ECS and GameObjects"),(0,r.kt)("li",{parentName:"ul"},"Improvements to various SDK error messages"),(0,r.kt)("li",{parentName:"ul"},"Better support for lower resolution screens")),(0,r.kt)("h2",{id:"release-0024"},"Release 0.0.24"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"This release deployment was skipped and kept internal")),(0,r.kt)("h2",{id:"release-0023"},"Release 0.0.23"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"July 1, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Try out our validation tool without an account or game! Visit ",(0,r.kt)("a",{parentName:"li",href:"http://play.regression.gg"},"play.regression.gg")," to learn more"),(0,r.kt)("li",{parentName:"ul"},"A tutorial is now available for our validation tool, built directly into the website"),(0,r.kt)("li",{parentName:"ul"},"The progress of a validation run is now displayed"),(0,r.kt)("li",{parentName:"ul"},"Scenarios can now be run from the demo scenario builder page")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Scenario validations now properly start from the start of a recording (the ordering of scenarios no longer matters)"),(0,r.kt)("li",{parentName:"ul"},"The validation results now shows the proper gameplay recording within the screenshot scrubber"),(0,r.kt)("li",{parentName:"ul"},"Improved performance of input recording within the SDK"),(0,r.kt)("li",{parentName:"ul"},"Long-running validation runs no longer timeout")),(0,r.kt)("h2",{id:"release-0022"},"Release 0.0.22"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"June 18, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The Unity SDK now supports recording games using the legacy input system and Unity UI."),(0,r.kt)("li",{parentName:"ul"},"New data collection format for improved state display within the scenario builder and validation results page."),(0,r.kt)("li",{parentName:"ul"},"New Bot Segment data format for stitching together various bot types, such as monkey testing bots combined with recordings."),(0,r.kt)("li",{parentName:"ul"},"Bounding boxes show entity locations within the gameplay session web UI for improved debugging.")),(0,r.kt)("h2",{id:"release-0021"},"Release 0.0.21"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"June 6, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New SDK Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Recordings can now be used programmatically in Unity Test Runner."),(0,r.kt)("li",{parentName:"ul"},"Inputs handled via ",(0,r.kt)("inlineCode",{parentName:"li"},"Input.GetKey()")," can now be captured and used in replays."),(0,r.kt)("li",{parentName:"ul"},"An animation rigging package is now available within the Unity SDK for data capturing.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"SDK Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Improvements to error messages for recording playback.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Website Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Prevent breakage when storing null or undefined in a Store Step."),(0,r.kt)("li",{parentName:"ul"},"Adjusted height for the recording thumbnail in suite details.")),(0,r.kt)("h2",{id:"release-0020"},"Release 0.0.20"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"May 23rd, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Memory and CPU information is now captured by gameplay session recording."),(0,r.kt)("li",{parentName:"ul"},"The in-game overlay has an improved layout."),(0,r.kt)("li",{parentName:"ul"},"Gameplay session recordings can now be looped for repeated testing.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Quickscope ",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Null count values are now allowed for scenario steps that have an optional count."),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where duplicate scenario names were allowed in a suite."),(0,r.kt)("li",{parentName:"ul"},"Scenarios now maintain their creation order."),(0,r.kt)("li",{parentName:"ul"},"Improved loading of screenshots for a gameplay session.")))),(0,r.kt)("h2",{id:"release-0019"},"Release 0.0.19"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"May 8th, 2024")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Introducing ",(0,r.kt)("strong",{parentName:"li"},"Quickscope"),", a new collection of features made for easy smoke test automation!",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"New features within the SDK for recording a gameplay session and playing it back as an automated test"),(0,r.kt)("li",{parentName:"ul"},"A UI for designing functional validation tests from data automatically scraped from your game.")))),(0,r.kt)("p",null,"Learn more about this release in our ",(0,r.kt)("a",{parentName:"p",href:"https://www.regression.gg/post/quickscope-launch?ref=docs.regression.gg"},"blog post!"),"."),(0,r.kt)("h2",{id:"release-0018"},"Release 0.0.18"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"April 8th, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The new UI/UX is now available to all users."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Be on the lookout for a large release at the beginning of May!"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where Agent Builder would use incorrect paths for certain operation systems."),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where certain redirects were not working on the website.")),(0,r.kt)("h2",{id:"release-0017"},"Release 0.0.17"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"February 29, 2024")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Introducing an ",(0,r.kt)("a",{parentName:"li",href:"/automated-testing/overview"},"automated UI testing framework for Unity")),(0,r.kt)("li",{parentName:"ul"},"An entirely new way of ","[representing states]"," requiring less custom integration"),(0,r.kt)("li",{parentName:"ul"},"[Rolling Out]"," New UI design - send us a message for access!")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The SDK is still only usable in the editor, but will no longer interfere with creating production builds. Future support for running the SDK in production builds will be coming at a later date."),(0,r.kt)("li",{parentName:"ul"},"Various UI improvements, such as screen size scaling and link fixes")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Other Notes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Improved scalability of the bot instance history dashboard")),(0,r.kt)("h2",{id:"release-0016"},"Release 0.0.16"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"December 19, 2023")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Our new ",(0,r.kt)("a",{parentName:"li",href:"/quickstart"},"quickstart guide")," allows you to have your first bot running in minutes"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[RGState]")," is now allowed on class properties"),(0,r.kt)("li",{parentName:"ul"},"Support for raw key press actions using the new Unity Input System, which works great for certain types of bots"),(0,r.kt)("li",{parentName:"ul"},"Code generation time has been reduced, and is now automatic"),(0,r.kt)("li",{parentName:"ul"},"Default tick rate for bots is now faster"),(0,r.kt)("li",{parentName:"ul"},"Logs from local bots are now uploaded and saved for debugging"),(0,r.kt)("li",{parentName:"ul"},"Local bots can now be saved onto your Regression Games account"),(0,r.kt)("li",{parentName:"ul"},"The current tick number can now be accessed by local bots")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed bug where the username and password would not change within the SDK settings"),(0,r.kt)("li",{parentName:"ul"},"Bot loading reliability has been improved"),(0,r.kt)("li",{parentName:"ul"},"Better save settings around login passwords"),(0,r.kt)("li",{parentName:"ul"},"Stack traces from bots are now clickable and more usable within the Unity console"),(0,r.kt)("li",{parentName:"ul"},"Improved / reduced OOM issues with bot replay data")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Other Notes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Our SSL certs have been updated - make sure to update your SDK to use these new settings")),(0,r.kt)("h2",{id:"release-0015"},"Release 0.0.15"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"November 21, 2023")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview, and it's ",(0,r.kt)("strong",{parentName:"p"},"our biggest release yet!")," Our product is in beta and we would love for developers to\ntry it out and provide feedback! Contact us at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New welcome screen added to the SDK, with docs and ",(0,r.kt)("strong",{parentName:"li"},"sample scene/bot")," options"),(0,r.kt)("li",{parentName:"ul"},"Introducing C# bots that run ",(0,r.kt)("strong",{parentName:"li"},"directly in Unity")," (reference materials ",(0,r.kt)("a",{parentName:"li",href:"creating-bots/csharp/adaptive-bots"},"here"),")"),(0,r.kt)("li",{parentName:"ul"},"Introducing ",(0,r.kt)("a",{parentName:"li",href:"pre-made-bots"},(0,r.kt)("strong",{parentName:"a"},"Bot Marketplace"))," (Beta), which provides ready-to-go bots and integration instructions for those bots"),(0,r.kt)("li",{parentName:"ul"},"Introducing ",(0,r.kt)("strong",{parentName:"li"},"Validation Dashboard")," (Beta), which provides an interface to view validation runs for a bot, complete with screenshots, state information, and historical records of previous runs"),(0,r.kt)("li",{parentName:"ul"},"Introducing ",(0,r.kt)("a",{parentName:"li",href:"creating-bots/csharp/agent-builder"},(0,r.kt)("strong",{parentName:"a"},"Agent Builder"))," (Beta), which provides a fast, low-code way to develop bots"),(0,r.kt)("li",{parentName:"ul"},"Improved debug utilities like RGGizmos to see what your bot is thinking"),(0,r.kt)("li",{parentName:"ul"},"Bots can now be directly synced into your Unity projects"),(0,r.kt)("li",{parentName:"ul"},"New tutorials and guides for getting started")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"General Improvements")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New homepage dashboard for game developers, showing the latest runs, bots, and guides"),(0,r.kt)("li",{parentName:"ul"},"Agent Builder now supports and uses zip file bots by default"),(0,r.kt)("li",{parentName:"ul"},"New RGState, RGAction, and RGEntity features for integrating the SDK into your game"),(0,r.kt)("li",{parentName:"ul"},"Site has been updated to remove most tournament information and instead focuses on bots for studios")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where nullable types were not properly generated for RGActions"),(0,r.kt)("li",{parentName:"ul"},"Fixed a code generation bug in Firefox"),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where local unity bots could not utilize action formats properly")),(0,r.kt)("h2",{id:"release-0014"},"Release 0.0.14"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"October 10, 2023")," "),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact\nus at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Platform Improvements")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added better support for choosing between various languages and bot-building tools when creating bots")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed bug with updating bots that are managed via a zip file"),(0,r.kt)("li",{parentName:"ul"},"Fixed bug where logs for bots would display duplicated lines"),(0,r.kt)("li",{parentName:"ul"},"Fixed issue with default settings for the Getting Started sample")),(0,r.kt)("h2",{id:"release-0013"},"Release 0.0.13"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"September 25, 2023")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact\nus at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New RGState attribute in our Unity SDK can be used to seamlessly communicate state information to your bots"),(0,r.kt)("li",{parentName:"ul"},"Agent validation results are now sent to the Unity SDK and properly cause QA tests to fail if a validation has failed"),(0,r.kt)("li",{parentName:"ul"},"The connection status of bots are now shown within the Unity SDK Overlay")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Platform Improvements")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Logs in the Unity SDK have been sanitized to omit sensitive information"),(0,r.kt)("li",{parentName:"ul"},"New AIEngine service is available to make instant bots more stable and scalable"),(0,r.kt)("li",{parentName:"ul"},"The start time of current and historical bot runs is now visible within the Running Bots dashboard")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Users no longer need a GitHub account to create and use Zip bots"),(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where match logs would be retrieved from an incorrect starting index"),(0,r.kt)("li",{parentName:"ul"},"Fixed a client bug where documentation would not open from the Running Bots dashboard"),(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where Zip bots would not properly start or reload")),(0,r.kt)("h2",{id:"release-0012"},"Release 0.0.12"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"September 11, 2023")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact\nus at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Platform Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New ","[RGAction attribute]"," within RG Unity SDK to make actions easier to define"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"tutorials/github-actions"},"GitHub Actions and Unity Test Runner Support")," - New samples and guides for running bots\nin GitHub Actions (and other CI/CD systems via ",(0,r.kt)("a",{parentName:"li",href:"https://game.ci"},"GameCI"),")"),(0,r.kt)("li",{parentName:"ul"},"UI improvements to Behavior Tree Beta"),(0,r.kt)("li",{parentName:"ul"},"Updated defaults for RG Unity SDK to be more user-friendly"),(0,r.kt)("li",{parentName:"ul"},"The RG Unity SDK now includes its own font assets for better interoperability"),(0,r.kt)("li",{parentName:"ul"},"Links to download Zip bots from dashboard are now available")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed issue where the website would freeze in some match loading scenarios"),(0,r.kt)("li",{parentName:"ul"},"Fixed broken links in documentation"),(0,r.kt)("li",{parentName:"ul"},"Fixed issue where Agent Builder code generation would flicker"),(0,r.kt)("li",{parentName:"ul"},"Fixed bug where Unity actions would sometimes be sent to the wrong bots"),(0,r.kt)("li",{parentName:"ul"},"Fixed bug where instant bots would not start when the user did not have a linked GitHub account")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Security fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed bug where lobby APIs would reveal email addresses")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Coming Soon")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Continued improvements and additions to the Unity attribute system"),(0,r.kt)("li",{parentName:"ul"},"Additional samples and guides for various use cases"),(0,r.kt)("li",{parentName:"ul"},"New features for the Agent Builder tool")),(0,r.kt)("h2",{id:"release-0011"},"Release 0.0.11"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"August 28, 2023")),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact\nus at ",(0,r.kt)("a",{parentName:"p",href:"mailto:info@regression.gg"},"info@regression.gg")," for dedicated support and access.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"New Platform Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"404"},"Agent Builder")," Beta - Our GPT-enabled agent builder product is live for select players, now with improved validation tools. If you","'","d like to try it out, let us know!"),(0,r.kt)("li",{parentName:"ul"},"Our documentation site is now live! This docs site includes API/SDK references, tutorials, guides, and FAQs for both players and developers."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"authenticating-with-api-keys"},"API Keys")," - developers and players can now create API keys to interact with RG services"),(0,r.kt)("li",{parentName:"ul"},"New onboarding flow for players and game developers"),(0,r.kt)("li",{parentName:"ul"},"The ID of a bot can now be seen and copied within the Bot Manager"),(0,r.kt)("li",{parentName:"ul"},"Zip Bots - Bots uploaded via zip can now be downloaded"),(0,r.kt)("li",{parentName:"ul"},"The home page has been redesigned to provide players more information about getting started.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Unity SDK Features")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"An early preview of our ",(0,r.kt)("a",{parentName:"li",href:"overview"},"Unity SDK")," for building AI agents is now live! Our docs site has a getting started guide - message us for access."),(0,r.kt)("li",{parentName:"ul"},"Developers can now create Unity bots from the Bot Manager"),(0,r.kt)("li",{parentName:"ul"},"Logs for bots can now be downloaded - available via API or through the ",(0,r.kt)("a",{parentName:"li",href:"session-insights/in-editor-replay"},"Bot History dashboard")),(0,r.kt)("li",{parentName:"ul"},"Character configuration for Unity bots is more flexible and customizable"),(0,r.kt)("li",{parentName:"ul"},"Validation results for QA testing bots are now saved to Unity Replay files, allowing for viewing the validation directly within Unity"),(0,r.kt)("li",{parentName:"ul"},"Default settings for the SDK have been adjusted for increased ease of use"),(0,r.kt)("li",{parentName:"ul"},"Added a \u201cStop All\u201d button for stopping bots from within the Unity game")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Bug Fixes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed issue where choosing a bot repository via commit would throw an error"),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where bot logs would not show the correct number of lines before clearing"),(0,r.kt)("li",{parentName:"ul"},"Fixed issues where Unity bots would not teardown properly"),(0,r.kt)("li",{parentName:"ul"},"Fixed a bug where login and registration would sometimes fail"),(0,r.kt)("li",{parentName:"ul"},"Feedback button has been moved to a better spot on the screen to avoid hiding other components"),(0,r.kt)("li",{parentName:"ul"},"Fixed issue with SSL certs on certain systems")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Migration Notes")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"For Unity developers: the namespace for various classes in the Unity SDK have been updated. Please make sure to add the following import declaration\nin your files that use classes from Regression Games.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-csharp"},"using RegressionGames;\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Coming Soon")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"New attribute-based system for Unity SDK integration. New attributes will permit defining bot actions and state from existing functions and variables within your code."),(0,r.kt)("li",{parentName:"ul"},"CI/CD support - Instructions and examples will be added for running a Quality Assurance Bots in GitHub Actions.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/74876495.4b1a4773.js b/assets/js/74876495.7da9c602.js similarity index 59% rename from assets/js/74876495.4b1a4773.js rename to assets/js/74876495.7da9c602.js index be087ce..022d6ea 100644 --- a/assets/js/74876495.4b1a4773.js +++ b/assets/js/74876495.7da9c602.js @@ -1 +1 @@ -"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[5049],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||r;return n?a.createElement(h,s(s({ref:t},c),{},{components:n})):a.createElement(h,s({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,s=new Array(r);s[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:o,s[1]=i;for(var p=2;p<r;p++)s[p]=n[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},4235:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var a=n(7462),o=(n(7294),n(3905));const r={sidebar_label:"Quickstart"},s="Quickstart - Sample Scene and Bot",i={unversionedId:"quickstart",id:"quickstart",title:"Quickstart - Sample Scene and Bot",description:"_Time to complete: 10 minutes_",source:"@site/docs/quickstart.mdx",sourceDirName:".",slug:"/quickstart",permalink:"/quickstart",draft:!1,tags:[],version:"current",frontMatter:{sidebar_label:"Quickstart"}},l={},p=[{value:"Step 1: Create or open a 3D URP scene",id:"step-1-create-or-open-a-3d-urp-scene",level:2},{value:"Step 2: Import the Regression Games Unity Bots SDK",id:"step-2-import-the-regression-games-unity-bots-sdk",level:2},{value:"Step 3: Login (optional) and load the scene",id:"step-3-login-optional-and-load-the-scene",level:2},{value:"Step 4: Run the bot!",id:"step-4-run-the-bot",level:2},{value:"Next steps",id:"next-steps",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"quickstart---sample-scene-and-bot"},"Quickstart - Sample Scene and Bot"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"Time to complete: 10 minutes"))),(0,o.kt)("p",null,"This quick walk-through will show you an example scene and bot using the Regression Games Unity SDK. Within a few minutes,\nyou will have your first bot running in Unity!"),(0,o.kt)("h2",{id:"step-1-create-or-open-a-3d-urp-scene"},"Step 1: Create or open a 3D URP scene"),(0,o.kt)("p",null,"To try out the sample scene, you will need to open or create a project that uses Unity's Universal Render Pipeline (URP).\nWithin your Unity Hub, search for a template called ",(0,o.kt)("strong",{parentName:"p"},"3D (URP)"),", download it if you haven't already, and create a new\nproject from that template."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Create a new project from the 3D URP template",src:n(1741).Z,width:"2024",height:"1180"})),(0,o.kt)("h2",{id:"step-2-import-the-regression-games-unity-bots-sdk"},"Step 2: Import the Regression Games Unity Bots SDK"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://github.com/Regression-Games/RGUnityBots"},"Our package is available via GitHub"),". Import the repository by\nclicking ",(0,o.kt)("strong",{parentName:"p"},"Add package from git URL")," in the ",(0,o.kt)("strong",{parentName:"p"},"Package Manager")," window (this window can be opened\nin the ",(0,o.kt)("strong",{parentName:"p"},"Window > Package Manager")," menu) and pasting in the following URL."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.27\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Note that this package uses the new Unity Input System, and will likely ask you to restart the editor - ",(0,o.kt)("strong",{parentName:"li"},"please select yes to restart"),"."),(0,o.kt)("li",{parentName:"ul"},"Note that this package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them."),(0,o.kt)("li",{parentName:"ul"},"Note that this package installs a dependency of ",(0,o.kt)("a",{parentName:"li",href:"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"},"Newtonsoft Json")," for serializing/deserializing Json message payloads."),(0,o.kt)("li",{parentName:"ul"},"If your game utilizes Unity's ECS, we now have an extension package available to support it. Install this package after installing the core RGUnityBots package:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots/tree/main/src/gg.regression.unity.bots.ecs#v0.0.27\n")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the package imported into the project",src:n(2839).Z,width:"2608",height:"736"})),(0,o.kt)("h2",{id:"step-3-login-optional-and-load-the-scene"},"Step 3: Login (optional) and load the scene"),(0,o.kt)("p",null,"Once the package is imported, a welcome pane will open with the ability to login to Regression Games. Create\nan account to sync your bot and get access to other ",(0,o.kt)("a",{parentName:"p",href:"pre-made-bots"},"ready-to-go bots")," and our\n",(0,o.kt)("a",{parentName:"p",href:"creating-bots/csharp/agent-builder"},"Agent Builder tool"),", or skip the login (you can access this later from the\n",(0,o.kt)("strong",{parentName:"p"},"Regression Games")," > ",(0,o.kt)("strong",{parentName:"p"},"Getting Started")," menu)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the welcome pane",src:n(3136).Z,width:"1568",height:"1480"})),(0,o.kt)("p",null,"Once you click continue, you will see a screen that links to documentation and has an option to load a sample scene. Click\nthat button, which will import the sample scene into a new folder within your Assets directory. Once imported, the scene\nwill automatically open!"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the welcome pane",src:n(3342).Z,width:"1564",height:"1576"})),(0,o.kt)("h2",{id:"step-4-run-the-bot"},"Step 4: Run the bot!"),(0,o.kt)("p",null,'Once the scene is open, run the scene by clicking play. Once running, click the Regression Games logo in the bottom right,\nand click "Start Bot" button to start the ',(0,o.kt)("inlineCode",{parentName:"p"},"QuickstartBot")," that is provided with the scene."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the welcome pane",src:n(4292).Z,width:"1978",height:"1004"})),(0,o.kt)("p",null,"You should see the bot move around the platform and attack the enemy!"),(0,o.kt)("div",{style:{position:"relative",paddingBottom:"50.40485829959515%",height:0}},(0,o.kt)("iframe",{src:"https://www.loom.com/embed/c4a31389df6742ba9320bf7dc0e91739?sid=336eaf3b-208c-4ea3-a0b3-c6ad3d2d2cee",frameborder:"0",webkitallowfullscreen:!0,mozallowfullscreen:!0,allowfullscreen:!0,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%"}})),(0,o.kt)("h2",{id:"next-steps"},"Next steps"),(0,o.kt)("p",null,"Now that you see a bot in action, you can start building your own! In the next tutorial, you will learn more about the\nintegration patterns and approaches to building bots in Unity using the Regression Games Unity Bots SDK."))}d.isMDXComponent=!0},4292:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/overlay-0040d4f292eaacfba15a56c49870009b.png"},3136:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/signin-78e5d0b29f4546a2b1961355c05ef6b9.png"},1741:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/urp-e326136087f444fbfb2da78da73a623d.png"},3342:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/welcome-a15de99713e35e0ec54740015a688a5f.png"},2839:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/tutorial-1-package-0d2bfbaccdb409a6013aa1de51012636.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[5049],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(n),h=o,m=u["".concat(l,".").concat(h)]||u[h]||d[h]||r;return n?a.createElement(m,s(s({ref:t},c),{},{components:n})):a.createElement(m,s({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,s=new Array(r);s[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:o,s[1]=i;for(var p=2;p<r;p++)s[p]=n[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}h.displayName="MDXCreateElement"},4235:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var a=n(7462),o=(n(7294),n(3905));const r={sidebar_label:"Quickstart"},s="Quickstart - Sample Scene and Bot",i={unversionedId:"quickstart",id:"quickstart",title:"Quickstart - Sample Scene and Bot",description:"_Time to complete: 10 minutes_",source:"@site/docs/quickstart.mdx",sourceDirName:".",slug:"/quickstart",permalink:"/quickstart",draft:!1,tags:[],version:"current",frontMatter:{sidebar_label:"Quickstart"}},l={},p=[{value:"Step 1: Create or open a 3D URP scene",id:"step-1-create-or-open-a-3d-urp-scene",level:2},{value:"Step 2: Import the Regression Games Unity Bots SDK",id:"step-2-import-the-regression-games-unity-bots-sdk",level:2},{value:"Step 3: Login (optional) and load the scene",id:"step-3-login-optional-and-load-the-scene",level:2},{value:"Step 4: Run the bot!",id:"step-4-run-the-bot",level:2},{value:"Next steps",id:"next-steps",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"quickstart---sample-scene-and-bot"},"Quickstart - Sample Scene and Bot"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"Time to complete: 10 minutes"))),(0,o.kt)("p",null,"This quick walk-through will show you an example scene and bot using the Regression Games Unity SDK. Within a few minutes,\nyou will have your first bot running in Unity!"),(0,o.kt)("h2",{id:"step-1-create-or-open-a-3d-urp-scene"},"Step 1: Create or open a 3D URP scene"),(0,o.kt)("p",null,"To try out the sample scene, you will need to open or create a project that uses Unity's Universal Render Pipeline (URP).\nWithin your Unity Hub, search for a template called ",(0,o.kt)("strong",{parentName:"p"},"3D (URP)"),", download it if you haven't already, and create a new\nproject from that template."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Create a new project from the 3D URP template",src:n(1741).Z,width:"2024",height:"1180"})),(0,o.kt)("h2",{id:"step-2-import-the-regression-games-unity-bots-sdk"},"Step 2: Import the Regression Games Unity Bots SDK"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://github.com/Regression-Games/RGUnityBots"},"Our package is available via GitHub"),". Import the repository by\nclicking ",(0,o.kt)("strong",{parentName:"p"},"Add package from git URL")," in the ",(0,o.kt)("strong",{parentName:"p"},"Package Manager")," window (this window can be opened\nin the ",(0,o.kt)("strong",{parentName:"p"},"Window > Package Manager")," menu) and pasting in the following URL."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.28\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Note that this package uses the new Unity Input System, and will likely ask you to restart the editor - ",(0,o.kt)("strong",{parentName:"li"},"please select yes to restart"),"."),(0,o.kt)("li",{parentName:"ul"},"Note that this package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them."),(0,o.kt)("li",{parentName:"ul"},"Note that this package installs a dependency of ",(0,o.kt)("a",{parentName:"li",href:"https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html"},"Newtonsoft Json")," for serializing/deserializing Json message payloads."),(0,o.kt)("li",{parentName:"ul"},"If your game utilizes Unity's ECS, we now have an extension package available to support it. Install this package after installing the core RGUnityBots package:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots.ecs#v0.0.28\n")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the package imported into the project",src:n(2839).Z,width:"2608",height:"736"})),(0,o.kt)("h2",{id:"step-3-login-optional-and-load-the-scene"},"Step 3: Login (optional) and load the scene"),(0,o.kt)("p",null,"Once the package is imported, a welcome pane will open with the ability to login to Regression Games. Create\nan account to sync your bot and get access to other ",(0,o.kt)("a",{parentName:"p",href:"pre-made-bots"},"ready-to-go bots")," and our\n",(0,o.kt)("a",{parentName:"p",href:"creating-bots/csharp/agent-builder"},"Agent Builder tool"),", or skip the login (you can access this later from the\n",(0,o.kt)("strong",{parentName:"p"},"Regression Games")," > ",(0,o.kt)("strong",{parentName:"p"},"Getting Started")," menu)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the welcome pane",src:n(3136).Z,width:"1568",height:"1480"})),(0,o.kt)("p",null,"Once you click continue, you will see a screen that links to documentation and has an option to load a sample scene. Click\nthat button, which will import the sample scene into a new folder within your Assets directory. Once imported, the scene\nwill automatically open!"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the welcome pane",src:n(3342).Z,width:"1564",height:"1576"})),(0,o.kt)("h2",{id:"step-4-run-the-bot"},"Step 4: Run the bot!"),(0,o.kt)("p",null,'Once the scene is open, run the scene by clicking play. Once running, click the Regression Games logo in the bottom right,\nand click "Start Bot" button to start the ',(0,o.kt)("inlineCode",{parentName:"p"},"QuickstartBot")," that is provided with the scene."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Screenshot of the welcome pane",src:n(4292).Z,width:"1978",height:"1004"})),(0,o.kt)("p",null,"You should see the bot move around the platform and attack the enemy!"),(0,o.kt)("div",{style:{position:"relative",paddingBottom:"50.40485829959515%",height:0}},(0,o.kt)("iframe",{src:"https://www.loom.com/embed/c4a31389df6742ba9320bf7dc0e91739?sid=336eaf3b-208c-4ea3-a0b3-c6ad3d2d2cee",frameborder:"0",webkitallowfullscreen:!0,mozallowfullscreen:!0,allowfullscreen:!0,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%"}})),(0,o.kt)("h2",{id:"next-steps"},"Next steps"),(0,o.kt)("p",null,"Now that you see a bot in action, you can start building your own! In the next tutorial, you will learn more about the\nintegration patterns and approaches to building bots in Unity using the Regression Games Unity Bots SDK."))}d.isMDXComponent=!0},4292:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/overlay-0040d4f292eaacfba15a56c49870009b.png"},3136:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/signin-78e5d0b29f4546a2b1961355c05ef6b9.png"},1741:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/urp-e326136087f444fbfb2da78da73a623d.png"},3342:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/welcome-a15de99713e35e0ec54740015a688a5f.png"},2839:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/tutorial-1-package-0d2bfbaccdb409a6013aa1de51012636.png"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.f0c270bf.js b/assets/js/935f2afb.609ede5f.js similarity index 99% rename from assets/js/935f2afb.f0c270bf.js rename to assets/js/935f2afb.609ede5f.js index bf4af6b..f28a0a1 100644 --- a/assets/js/935f2afb.f0c270bf.js +++ b/assets/js/935f2afb.609ede5f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"unitySidebar":[{"type":"link","label":"Writing Your First Automated Test","href":"/tutorials/building-your-first-bot","docId":"tutorials/building-your-first-bot"},{"type":"category","label":"Gameplay Sessions","items":[{"type":"link","label":"Getting Started with Gameplay Sessions","href":"/gameplay-sessions/gameplay-sessions-getting-started","docId":"gameplay-sessions/gameplay-sessions-getting-started"},{"type":"link","label":"Using Gameplay Sessions","href":"/gameplay-sessions/gameplay-sessions-usage","docId":"gameplay-sessions/gameplay-sessions-usage"},{"type":"link","label":"Gameplay Sessions Technical Reference","href":"/gameplay-sessions/gameplay-sessions-reference","docId":"gameplay-sessions/gameplay-sessions-reference"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Validations","items":[{"type":"link","label":"Getting Started with Validations","href":"/validations/validations-getting-started","docId":"validations/validations-getting-started"},{"type":"link","label":"Scenario Builder Reference","href":"/validations/validations-scenario-builder-reference","docId":"validations/validations-scenario-builder-reference"},{"type":"link","label":"Rules Reference","href":"/validations/validations-rules-reference","docId":"validations/validations-rules-reference"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Authenticating with API Keys","href":"/authenticating-with-api-keys","docId":"authenticating-with-api-keys"},{"type":"category","label":"Generic Bots","items":[{"type":"link","label":"Monkey Bot","href":"/generic-bots/monkey-bot","docId":"generic-bots/monkey-bot"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Custom Bots","items":[{"type":"link","label":"Adaptive Bots","href":"/creating-bots/csharp/adaptive-bots","docId":"creating-bots/csharp/adaptive-bots"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Computer Vision","items":[{"type":"link","label":"Overview","href":"/computer-vision/","docId":"computer-vision/computer-vision"},{"type":"link","label":"CVImage Docs","href":"/computer-vision/image-match","docId":"computer-vision/image-match"},{"type":"link","label":"CVText Docs","href":"/computer-vision/text-match","docId":"computer-vision/text-match"},{"type":"link","label":"Object Detection Docs","href":"/computer-vision/object-detection","docId":"computer-vision/object-detection"}],"collapsed":true,"collapsible":true}],"automatedTesting":[{"type":"link","label":"Overview","href":"/automated-testing/overview","docId":"automated-testing/overview"},{"type":"link","label":"Getting Started","href":"/automated-testing/getting-started","docId":"automated-testing/getting-started"},{"type":"link","label":"GPT Assistant Bot","href":"/automated-testing/gpt-assistant-bot","docId":"automated-testing/gpt-assistant-bot"},{"type":"link","label":"Custom Bots and Discoverers","href":"/automated-testing/creating-custom-components","docId":"automated-testing/creating-custom-components"}]},"docs":{"404":{"id":"404","title":"Page Not Found","description":"This page no longer exists. It may have moved, or its content is no longer supported by Regression Games."},"authenticating-with-api-keys":{"id":"authenticating-with-api-keys","title":"Authenticating with API Keys","description":"The Regression Games platform provides the ability to generate API keys, which can be used","sidebar":"unitySidebar"},"automated-testing/creating-custom-components":{"id":"automated-testing/creating-custom-components","title":"Custom Bots and Discoverers","description":"If the built-in Bot and Discoverer components aren\'t sufficient for your testing needs, you can also create your own with just a few steps and some code.","sidebar":"automatedTesting"},"automated-testing/getting-started":{"id":"automated-testing/getting-started","title":"Getting Started with Automated UI Testing","description":"The Automated UI Testing package is currently a preview and we\'re looking for your feedback!","sidebar":"automatedTesting"},"automated-testing/gpt-assistant-bot":{"id":"automated-testing/gpt-assistant-bot","title":"Using the GPT Assistant Bot","description":"In addition to the completely random \\"Monkey\\" Bot, the RegressionGames Automated UI Testing package includes a \\"GPT Assistant\\" Bot that uses OpenAI\'s GPT-4 Large Language Model to drive a bot in your game.","sidebar":"automatedTesting"},"automated-testing/overview":{"id":"automated-testing/overview","title":"Automated UI Testing for Unity","description":"The Automated UI Testing package is currently a preview and we\'re looking for your feedback!","sidebar":"automatedTesting"},"changelog":{"id":"changelog","title":"Changelog","description":"Release 0.0.27"},"computer-vision/computer-vision":{"id":"computer-vision/computer-vision","title":"Computer Vision","description":"Our Computer Vision module provides powerful tools to interact with and validate visual elements in your application or game. This functionality is crucial for automated testing, user interface verification, and interactive simulations.","sidebar":"unitySidebar"},"computer-vision/image-match":{"id":"computer-vision/image-match","title":"CVImage Docs","description":"","sidebar":"unitySidebar"},"computer-vision/object-detection":{"id":"computer-vision/object-detection","title":"Object Detection Docs","description":"","sidebar":"unitySidebar"},"computer-vision/text-match":{"id":"computer-vision/text-match","title":"CVText Docs","description":"","sidebar":"unitySidebar"},"creating-bots/csharp/adaptive-bots":{"id":"creating-bots/csharp/adaptive-bots","title":"Defining Bots that Adapt to the Game State","description":"Defining a Unity Bot in C# is as simple as creating a MonoBehaviour that implements the IRGBot interface.","sidebar":"unitySidebar"},"creating-bots/csharp/agent-builder":{"id":"creating-bots/csharp/agent-builder","title":"Creating AIs Using the Agent Builder","description":"Regression Games\' Agent Builder is an easy-to-use visual editor for constructing AI behavior trees."},"gameplay-sessions/gameplay-sessions-getting-started":{"id":"gameplay-sessions/gameplay-sessions-getting-started","title":"Gameplay Sessions","description":"A Gameplay Session is a recorded snippet of gameplay from your game.","sidebar":"unitySidebar"},"gameplay-sessions/gameplay-sessions-reference":{"id":"gameplay-sessions/gameplay-sessions-reference","title":"Gameplay Sessions Technical Reference","description":"Although developers on Regression Games will often interact with the Gameplay Sessions through the web interface or","sidebar":"unitySidebar"},"gameplay-sessions/gameplay-sessions-usage":{"id":"gameplay-sessions/gameplay-sessions-usage","title":"Using Gameplay Sessions","description":"Preparing the Overlay","sidebar":"unitySidebar"},"generic-bots/monkey-bot":{"id":"generic-bots/monkey-bot","title":"Monkey Bot","description":"Monkey Bot Image","sidebar":"unitySidebar"},"overview":{"id":"overview","title":"Regression Games for Unity","description":"Regression Games is developing a platform where studios can build and deploy bots for a variety of use cases in minutes. We are designing for scale (deploy thousands of bots), ease of use (e.g. generative AI to build bots), ease of integration (minimal impact on game development time), and feature richness (e.g. A/B bot test for engagement)."},"pre-made-bots":{"id":"pre-made-bots","title":"Bot Marketplace","description":"The Bot Marketplace is your one-stop-shop for ready-to-go bots. The Regression Games SDK allows you to build bots for"},"quickstart":{"id":"quickstart","title":"Quickstart - Sample Scene and Bot","description":"_Time to complete: 10 minutes_"},"session-insights/client-dashboard":{"id":"session-insights/client-dashboard","title":"Viewing Validations","description":"Validations are used to assert the state of your bots at a point in time. You can think of them as tests that can be run to"},"session-insights/in-editor-replay":{"id":"session-insights/in-editor-replay","title":"Replaying Bot Behaviors in the Unity Editor","description":"Bots running on Regression Games save all states observed, all actions sent, and all validations performed for each game tick. This data can be loaded in the Unity editor for visualization and playback in the scene. This feature, combined with our validation framework, allows you to find and debug specific errors within your game."},"tutorials/building-your-first-bot":{"id":"tutorials/building-your-first-bot","title":"Writing Your First Automated Test","description":"In this tutorial, we will get a simple automated test working in Unity using Regression Games. We will show you:","sidebar":"unitySidebar"},"tutorials/github-actions":{"id":"tutorials/github-actions","title":"Testing with GitHub Actions","description":"This tutorial will walk you through the following steps to create a QA Bot for your Unity project using"},"validations/validations-getting-started":{"id":"validations/validations-getting-started","title":"Validations","description":"Screenshot of a scenario","sidebar":"unitySidebar"},"validations/validations-rules-reference":{"id":"validations/validations-rules-reference","title":"Rules Reference","description":"Rules can be asserted when running a Validation Suite against a gameplay recording, to ensure that the recording meets specific criteria. We provide a set of rule types that can be used to construct assertions based on various performance metrics. For each tick in the gameplay recording, all Rules are evaluated. If a Rule is violated the Validation Run will display a warning for that Rule.","sidebar":"unitySidebar"},"validations/validations-scenario-builder-reference":{"id":"validations/validations-scenario-builder-reference","title":"Scenario Builder Reference","description":"Scenarios are composed of one or more steps that can be asserted throughout a gameplay recording. Steps are asserted in the order they appear in the Scenario, and if any step fails, the Scenario will fail.","sidebar":"unitySidebar"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"unitySidebar":[{"type":"link","label":"Writing Your First Automated Test","href":"/tutorials/building-your-first-bot","docId":"tutorials/building-your-first-bot"},{"type":"category","label":"Gameplay Sessions","items":[{"type":"link","label":"Getting Started with Gameplay Sessions","href":"/gameplay-sessions/gameplay-sessions-getting-started","docId":"gameplay-sessions/gameplay-sessions-getting-started"},{"type":"link","label":"Using Gameplay Sessions","href":"/gameplay-sessions/gameplay-sessions-usage","docId":"gameplay-sessions/gameplay-sessions-usage"},{"type":"link","label":"Gameplay Sessions Technical Reference","href":"/gameplay-sessions/gameplay-sessions-reference","docId":"gameplay-sessions/gameplay-sessions-reference"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Validations","items":[{"type":"link","label":"Getting Started with Validations","href":"/validations/validations-getting-started","docId":"validations/validations-getting-started"},{"type":"link","label":"Scenario Builder Reference","href":"/validations/validations-scenario-builder-reference","docId":"validations/validations-scenario-builder-reference"},{"type":"link","label":"Rules Reference","href":"/validations/validations-rules-reference","docId":"validations/validations-rules-reference"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Authenticating with API Keys","href":"/authenticating-with-api-keys","docId":"authenticating-with-api-keys"},{"type":"category","label":"Generic Bots","items":[{"type":"link","label":"Monkey Bot","href":"/generic-bots/monkey-bot","docId":"generic-bots/monkey-bot"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Custom Bots","items":[{"type":"link","label":"Adaptive Bots","href":"/creating-bots/csharp/adaptive-bots","docId":"creating-bots/csharp/adaptive-bots"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Computer Vision","items":[{"type":"link","label":"Overview","href":"/computer-vision/","docId":"computer-vision/computer-vision"},{"type":"link","label":"CVImage Docs","href":"/computer-vision/image-match","docId":"computer-vision/image-match"},{"type":"link","label":"CVText Docs","href":"/computer-vision/text-match","docId":"computer-vision/text-match"},{"type":"link","label":"Object Detection Docs","href":"/computer-vision/object-detection","docId":"computer-vision/object-detection"}],"collapsed":true,"collapsible":true}],"automatedTesting":[{"type":"link","label":"Overview","href":"/automated-testing/overview","docId":"automated-testing/overview"},{"type":"link","label":"Getting Started","href":"/automated-testing/getting-started","docId":"automated-testing/getting-started"},{"type":"link","label":"GPT Assistant Bot","href":"/automated-testing/gpt-assistant-bot","docId":"automated-testing/gpt-assistant-bot"},{"type":"link","label":"Custom Bots and Discoverers","href":"/automated-testing/creating-custom-components","docId":"automated-testing/creating-custom-components"}]},"docs":{"404":{"id":"404","title":"Page Not Found","description":"This page no longer exists. It may have moved, or its content is no longer supported by Regression Games."},"authenticating-with-api-keys":{"id":"authenticating-with-api-keys","title":"Authenticating with API Keys","description":"The Regression Games platform provides the ability to generate API keys, which can be used","sidebar":"unitySidebar"},"automated-testing/creating-custom-components":{"id":"automated-testing/creating-custom-components","title":"Custom Bots and Discoverers","description":"If the built-in Bot and Discoverer components aren\'t sufficient for your testing needs, you can also create your own with just a few steps and some code.","sidebar":"automatedTesting"},"automated-testing/getting-started":{"id":"automated-testing/getting-started","title":"Getting Started with Automated UI Testing","description":"The Automated UI Testing package is currently a preview and we\'re looking for your feedback!","sidebar":"automatedTesting"},"automated-testing/gpt-assistant-bot":{"id":"automated-testing/gpt-assistant-bot","title":"Using the GPT Assistant Bot","description":"In addition to the completely random \\"Monkey\\" Bot, the RegressionGames Automated UI Testing package includes a \\"GPT Assistant\\" Bot that uses OpenAI\'s GPT-4 Large Language Model to drive a bot in your game.","sidebar":"automatedTesting"},"automated-testing/overview":{"id":"automated-testing/overview","title":"Automated UI Testing for Unity","description":"The Automated UI Testing package is currently a preview and we\'re looking for your feedback!","sidebar":"automatedTesting"},"changelog":{"id":"changelog","title":"Changelog","description":"Release 0.0.28"},"computer-vision/computer-vision":{"id":"computer-vision/computer-vision","title":"Computer Vision","description":"Our Computer Vision module provides powerful tools to interact with and validate visual elements in your application or game. This functionality is crucial for automated testing, user interface verification, and interactive simulations.","sidebar":"unitySidebar"},"computer-vision/image-match":{"id":"computer-vision/image-match","title":"CVImage Docs","description":"","sidebar":"unitySidebar"},"computer-vision/object-detection":{"id":"computer-vision/object-detection","title":"Object Detection Docs","description":"","sidebar":"unitySidebar"},"computer-vision/text-match":{"id":"computer-vision/text-match","title":"CVText Docs","description":"","sidebar":"unitySidebar"},"creating-bots/csharp/adaptive-bots":{"id":"creating-bots/csharp/adaptive-bots","title":"Defining Bots that Adapt to the Game State","description":"Defining a Unity Bot in C# is as simple as creating a MonoBehaviour that implements the IRGBot interface.","sidebar":"unitySidebar"},"creating-bots/csharp/agent-builder":{"id":"creating-bots/csharp/agent-builder","title":"Creating AIs Using the Agent Builder","description":"Regression Games\' Agent Builder is an easy-to-use visual editor for constructing AI behavior trees."},"gameplay-sessions/gameplay-sessions-getting-started":{"id":"gameplay-sessions/gameplay-sessions-getting-started","title":"Gameplay Sessions","description":"A Gameplay Session is a recorded snippet of gameplay from your game.","sidebar":"unitySidebar"},"gameplay-sessions/gameplay-sessions-reference":{"id":"gameplay-sessions/gameplay-sessions-reference","title":"Gameplay Sessions Technical Reference","description":"Although developers on Regression Games will often interact with the Gameplay Sessions through the web interface or","sidebar":"unitySidebar"},"gameplay-sessions/gameplay-sessions-usage":{"id":"gameplay-sessions/gameplay-sessions-usage","title":"Using Gameplay Sessions","description":"Preparing the Overlay","sidebar":"unitySidebar"},"generic-bots/monkey-bot":{"id":"generic-bots/monkey-bot","title":"Monkey Bot","description":"Monkey Bot Image","sidebar":"unitySidebar"},"overview":{"id":"overview","title":"Regression Games for Unity","description":"Regression Games is developing a platform where studios can build and deploy bots for a variety of use cases in minutes. We are designing for scale (deploy thousands of bots), ease of use (e.g. generative AI to build bots), ease of integration (minimal impact on game development time), and feature richness (e.g. A/B bot test for engagement)."},"pre-made-bots":{"id":"pre-made-bots","title":"Bot Marketplace","description":"The Bot Marketplace is your one-stop-shop for ready-to-go bots. The Regression Games SDK allows you to build bots for"},"quickstart":{"id":"quickstart","title":"Quickstart - Sample Scene and Bot","description":"_Time to complete: 10 minutes_"},"session-insights/client-dashboard":{"id":"session-insights/client-dashboard","title":"Viewing Validations","description":"Validations are used to assert the state of your bots at a point in time. You can think of them as tests that can be run to"},"session-insights/in-editor-replay":{"id":"session-insights/in-editor-replay","title":"Replaying Bot Behaviors in the Unity Editor","description":"Bots running on Regression Games save all states observed, all actions sent, and all validations performed for each game tick. This data can be loaded in the Unity editor for visualization and playback in the scene. This feature, combined with our validation framework, allows you to find and debug specific errors within your game."},"tutorials/building-your-first-bot":{"id":"tutorials/building-your-first-bot","title":"Writing Your First Automated Test","description":"In this tutorial, we will get a simple automated test working in Unity using Regression Games. We will show you:","sidebar":"unitySidebar"},"tutorials/github-actions":{"id":"tutorials/github-actions","title":"Testing with GitHub Actions","description":"This tutorial will walk you through the following steps to create a QA Bot for your Unity project using"},"validations/validations-getting-started":{"id":"validations/validations-getting-started","title":"Validations","description":"Screenshot of a scenario","sidebar":"unitySidebar"},"validations/validations-rules-reference":{"id":"validations/validations-rules-reference","title":"Rules Reference","description":"Rules can be asserted when running a Validation Suite against a gameplay recording, to ensure that the recording meets specific criteria. We provide a set of rule types that can be used to construct assertions based on various performance metrics. For each tick in the gameplay recording, all Rules are evaluated. If a Rule is violated the Validation Run will display a warning for that Rule.","sidebar":"unitySidebar"},"validations/validations-scenario-builder-reference":{"id":"validations/validations-scenario-builder-reference","title":"Scenario Builder Reference","description":"Scenarios are composed of one or more steps that can be asserted throughout a gameplay recording. Steps are asserted in the order they appear in the Scenario, and if any step fails, the Scenario will fail.","sidebar":"unitySidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/main.95f684d1.js b/assets/js/main.7b9cd64a.js similarity index 99% rename from assets/js/main.95f684d1.js rename to assets/js/main.7b9cd64a.js index e174faf..9264d15 100644 --- a/assets/js/main.95f684d1.js +++ b/assets/js/main.7b9cd64a.js @@ -1,2 +1,2 @@ -/*! For license information please see main.95f684d1.js.LICENSE.txt */ -(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"031793e1":[()=>n.e(1633).then(n.t.bind(n,2511,19)),"~blog/default/blog-tags-facebook-038.json",2511],"04115efe":[()=>n.e(5792).then(n.bind(n,7360)),"@site/docs/tutorials/building-your-first-bot.mdx",7360],"096bfee4":[()=>n.e(7178).then(n.t.bind(n,5010,19)),"~blog/default/blog-tags-facebook-038-list.json",5010],"0a367c1a":[()=>n.e(8895).then(n.bind(n,5840)),"@site/docs/computer-vision/object-detection.mdx",5840],"0e5c35ea":[()=>n.e(3069).then(n.bind(n,359)),"@site/docs/computer-vision/text-match.mdx",359],"1359ca2f":[()=>n.e(7624).then(n.bind(n,2284)),"@site/docs/automated-testing/getting-started.mdx",2284],"13d931f8":[()=>n.e(1857).then(n.bind(n,526)),"@site/docs/generic-bots/monkey-bot.mdx",526],14407088:[()=>n.e(6163).then(n.t.bind(n,5745,19)),"/home/runner/work/RegressionDocs/RegressionDocs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"148a37a4":[()=>n.e(7161).then(n.t.bind(n,4469,19)),"/home/runner/work/RegressionDocs/RegressionDocs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],17896441:[()=>Promise.all([n.e(532),n.e(1506),n.e(7918)]).then(n.bind(n,8945)),"@theme/DocItem",8945],"1970a410":[()=>n.e(6519).then(n.bind(n,9381)),"@site/docs/authenticating-with-api-keys.mdx",9381],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1db64337":[()=>n.e(1372).then(n.bind(n,6777)),"@site/docs/overview.md",6777],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,8391)),"@site/src/pages/index.tsx",8391],"1ee9a467":[()=>n.e(3197).then(n.bind(n,1053)),"@site/docs/computer-vision/image-match.mdx",1053],"1f391b9e":[()=>Promise.all([n.e(532),n.e(1506),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"1fb3fb3e":[()=>n.e(2855).then(n.bind(n,7738)),"@site/docs/pre-made-bots.mdx",7738],"29cae6e4":[()=>n.e(6603).then(n.bind(n,7365)),"@site/docs/automated-testing/overview.md",7365],"2c33d6f6":[()=>n.e(1479).then(n.bind(n,2032)),"@site/docs/gameplay-sessions/gameplay-sessions-usage.mdx",2032],"2cd4476f":[()=>n.e(5065).then(n.bind(n,1517)),"@site/docs/validations/validations-getting-started.mdx",1517],"30a24c52":[()=>n.e(453).then(n.t.bind(n,8605,19)),"~blog/default/blog-tags-hello-039.json",8605],"393be207":[()=>n.e(7414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"39f90b1e":[()=>n.e(2808).then(n.bind(n,8030)),"@site/docs/session-insights/in-editor-replay.mdx",8030],"4c9e35b1":[()=>n.e(9035).then(n.t.bind(n,499,19)),"~blog/default/blog-tags-hola-ea2-list.json",499],"56604baf":[()=>n.e(6834).then(n.bind(n,3292)),"@site/docs/automated-testing/gpt-assistant-bot.mdx",3292],59362658:[()=>n.e(2267).then(n.bind(n,8642)),"@site/blog/2021-08-01-mdx-blog-post.mdx",8642],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"608ae6a4":[()=>n.e(6938).then(n.t.bind(n,4545,19)),"~blog/default/blog-tags-docusaurus-0e0-list.json",4545],66406991:[()=>n.e(110).then(n.t.bind(n,711,19)),"~blog/default/blog-tags-hello-039-list.json",711],"6806b5bc":[()=>n.e(5130).then(n.bind(n,7586)),"@site/docs/creating-bots/csharp/agent-builder.mdx",7586],"6875c492":[()=>Promise.all([n.e(532),n.e(1506),n.e(2529),n.e(8610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"735d0569":[()=>n.e(7445).then(n.bind(n,997)),"@site/docs/changelog.mdx",997],"73664a40":[()=>n.e(3514).then(n.bind(n,1976)),"@site/blog/2019-05-29-long-blog-post.md",1976],74876495:[()=>n.e(5049).then(n.bind(n,4235)),"@site/docs/quickstart.mdx",4235],"7661071f":[()=>n.e(9642).then(n.bind(n,6911)),"@site/blog/2021-08-26-welcome/index.md?truncated=true",6911],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"8717b14a":[()=>n.e(948).then(n.bind(n,3352)),"@site/blog/2019-05-29-long-blog-post.md?truncated=true",3352],"87bc41d4":[()=>n.e(7942).then(n.bind(n,6105)),"@site/docs/gameplay-sessions/gameplay-sessions-reference.mdx",6105],"8f2791df":[()=>n.e(7384).then(n.bind(n,5730)),"@site/docs/computer-vision/computer-vision.mdx",5730],"925b3f96":[()=>n.e(9003).then(n.bind(n,8856)),"@site/blog/2019-05-28-first-blog-post.md?truncated=true",8856],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9e4087bc":[()=>n.e(3608).then(n.bind(n,3169)),"@theme/BlogArchivePage",3169],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(1506),n.e(2529),n.e(3089)]).then(n.bind(n,46)),"@theme/BlogListPage",46],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],a80da1cf:[()=>n.e(3205).then(n.t.bind(n,4863,19)),"~blog/default/blog-tags-docusaurus-0e0.json",4863],af45fd03:[()=>n.e(5508).then(n.bind(n,8558)),"@site/docs/automated-testing/creating-custom-components.mdx",8558],b1406738:[()=>n.e(4873).then(n.bind(n,3117)),"@site/docs/validations/validations-rules-reference.mdx",3117],b220c1b0:[()=>n.e(3413).then(n.bind(n,5787)),"@site/docs/gameplay-sessions/gameplay-sessions-getting-started.mdx",5787],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],ccc49370:[()=>Promise.all([n.e(532),n.e(1506),n.e(2529),n.e(6103)]).then(n.bind(n,5203)),"@theme/BlogPostPage",5203],d0d95016:[()=>n.e(1640).then(n.bind(n,1901)),"@site/docs/404.mdx",1901],d2b05863:[()=>Promise.all([n.e(532),n.e(4998)]).then(n.bind(n,180)),"@site/docs/creating-bots/csharp/adaptive-bots.mdx",180],d9f32620:[()=>n.e(1914).then(n.bind(n,2900)),"@site/blog/2021-08-26-welcome/index.md",2900],e16015ca:[()=>n.e(9700).then(n.t.bind(n,5688,19)),"~blog/default/blog-tags-hola-ea2.json",5688],e273c56f:[()=>n.e(2362).then(n.bind(n,1947)),"@site/blog/2019-05-28-first-blog-post.md",1947],eadec799:[()=>n.e(660).then(n.bind(n,8784)),"@site/docs/validations/validations-scenario-builder-reference.mdx",8784],ebe69912:[()=>n.e(8329).then(n.bind(n,138)),"@site/docs/tutorials/github-actions.md",138],efcba355:[()=>n.e(8922).then(n.t.bind(n,3769,19)),"/home/runner/work/RegressionDocs/RegressionDocs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],f4f34a3a:[()=>n.e(8636).then(n.bind(n,5145)),"@site/blog/2021-08-01-mdx-blog-post.mdx?truncated=true",5145],f8739703:[()=>n.e(2216).then(n.bind(n,7473)),"@site/docs/session-insights/client-dashboard.mdx",7473]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,c.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/blog",component:f("/blog","ae5"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","eb2"),exact:!0},{path:"/blog/first-blog-post",component:f("/blog/first-blog-post","c66"),exact:!0},{path:"/blog/long-blog-post",component:f("/blog/long-blog-post","c95"),exact:!0},{path:"/blog/mdx-blog-post",component:f("/blog/mdx-blog-post","e29"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","612"),exact:!0},{path:"/blog/tags/docusaurus",component:f("/blog/tags/docusaurus","f84"),exact:!0},{path:"/blog/tags/facebook",component:f("/blog/tags/facebook","72b"),exact:!0},{path:"/blog/tags/hello",component:f("/blog/tags/hello","48d"),exact:!0},{path:"/blog/tags/hola",component:f("/blog/tags/hola","cc1"),exact:!0},{path:"/blog/welcome",component:f("/blog/welcome","bd6"),exact:!0},{path:"/markdown-page",component:f("/markdown-page","e06"),exact:!0},{path:"/",component:f("/","bb6"),exact:!0},{path:"/",component:f("/","da5"),routes:[{path:"/404",component:f("/404","b08"),exact:!0},{path:"/authenticating-with-api-keys",component:f("/authenticating-with-api-keys","483"),exact:!0,sidebar:"unitySidebar"},{path:"/automated-testing/creating-custom-components",component:f("/automated-testing/creating-custom-components","740"),exact:!0,sidebar:"automatedTesting"},{path:"/automated-testing/getting-started",component:f("/automated-testing/getting-started","c37"),exact:!0,sidebar:"automatedTesting"},{path:"/automated-testing/gpt-assistant-bot",component:f("/automated-testing/gpt-assistant-bot","dd7"),exact:!0,sidebar:"automatedTesting"},{path:"/automated-testing/overview",component:f("/automated-testing/overview","e56"),exact:!0,sidebar:"automatedTesting"},{path:"/changelog",component:f("/changelog","daf"),exact:!0},{path:"/computer-vision",component:f("/computer-vision","0f9"),exact:!0,sidebar:"unitySidebar"},{path:"/computer-vision/image-match",component:f("/computer-vision/image-match","df7"),exact:!0,sidebar:"unitySidebar"},{path:"/computer-vision/object-detection",component:f("/computer-vision/object-detection","3a3"),exact:!0,sidebar:"unitySidebar"},{path:"/computer-vision/text-match",component:f("/computer-vision/text-match","929"),exact:!0,sidebar:"unitySidebar"},{path:"/creating-bots/csharp/adaptive-bots",component:f("/creating-bots/csharp/adaptive-bots","9bd"),exact:!0,sidebar:"unitySidebar"},{path:"/creating-bots/csharp/agent-builder",component:f("/creating-bots/csharp/agent-builder","a00"),exact:!0},{path:"/gameplay-sessions/gameplay-sessions-getting-started",component:f("/gameplay-sessions/gameplay-sessions-getting-started","425"),exact:!0,sidebar:"unitySidebar"},{path:"/gameplay-sessions/gameplay-sessions-reference",component:f("/gameplay-sessions/gameplay-sessions-reference","fa6"),exact:!0,sidebar:"unitySidebar"},{path:"/gameplay-sessions/gameplay-sessions-usage",component:f("/gameplay-sessions/gameplay-sessions-usage","91a"),exact:!0,sidebar:"unitySidebar"},{path:"/generic-bots/monkey-bot",component:f("/generic-bots/monkey-bot","1c7"),exact:!0,sidebar:"unitySidebar"},{path:"/overview",component:f("/overview","224"),exact:!0},{path:"/pre-made-bots",component:f("/pre-made-bots","ae7"),exact:!0},{path:"/quickstart",component:f("/quickstart","dad"),exact:!0},{path:"/session-insights/client-dashboard",component:f("/session-insights/client-dashboard","f56"),exact:!0},{path:"/session-insights/in-editor-replay",component:f("/session-insights/in-editor-replay","2db"),exact:!0},{path:"/tutorials/building-your-first-bot",component:f("/tutorials/building-your-first-bot","13c"),exact:!0,sidebar:"unitySidebar"},{path:"/tutorials/github-actions",component:f("/tutorials/github-actions","4d2"),exact:!0},{path:"/validations/validations-getting-started",component:f("/validations/validations-getting-started","3a9"),exact:!0,sidebar:"unitySidebar"},{path:"/validations/validations-rules-reference",component:f("/validations/validations-rules-reference","5fe"),exact:!0,sidebar:"unitySidebar"},{path:"/validations/validations-scenario-builder-reference",component:f("/validations/validations-scenario-builder-reference","572"),exact:!0,sidebar:"unitySidebar"}]},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),E=n(3320),k=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,c.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function _(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var L=n(8934),A=n(8940);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const a=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),N("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?N("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=N("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(O,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const I=R,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function $(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${D}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function z(){const{siteConfig:{baseUrl:e}}=(0,g.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,$(e))),r.createElement("div",{id:M}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(z,null):null}function j(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(4763);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(Z.Z,null,r.createElement(A.M,null,r.createElement(L.t,null,r.createElement(f,null,r.createElement(j,null),r.createElement(_,null),r.createElement(U,null),r.createElement(I,{location:T(t)},e)))))}var V=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var W=n(9670);const q=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,X={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!q.has(e))(e))return!1;q.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,W.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),P(e))},Q=Object.freeze(X);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;P(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"tutorials/building-your-first-bot","docs":[{"id":"404","path":"/404"},{"id":"authenticating-with-api-keys","path":"/authenticating-with-api-keys","sidebar":"unitySidebar"},{"id":"automated-testing/creating-custom-components","path":"/automated-testing/creating-custom-components","sidebar":"automatedTesting"},{"id":"automated-testing/getting-started","path":"/automated-testing/getting-started","sidebar":"automatedTesting"},{"id":"automated-testing/gpt-assistant-bot","path":"/automated-testing/gpt-assistant-bot","sidebar":"automatedTesting"},{"id":"automated-testing/overview","path":"/automated-testing/overview","sidebar":"automatedTesting"},{"id":"changelog","path":"/changelog"},{"id":"computer-vision/computer-vision","path":"/computer-vision/","sidebar":"unitySidebar"},{"id":"computer-vision/image-match","path":"/computer-vision/image-match","sidebar":"unitySidebar"},{"id":"computer-vision/object-detection","path":"/computer-vision/object-detection","sidebar":"unitySidebar"},{"id":"computer-vision/text-match","path":"/computer-vision/text-match","sidebar":"unitySidebar"},{"id":"creating-bots/csharp/adaptive-bots","path":"/creating-bots/csharp/adaptive-bots","sidebar":"unitySidebar"},{"id":"creating-bots/csharp/agent-builder","path":"/creating-bots/csharp/agent-builder"},{"id":"gameplay-sessions/gameplay-sessions-getting-started","path":"/gameplay-sessions/gameplay-sessions-getting-started","sidebar":"unitySidebar"},{"id":"gameplay-sessions/gameplay-sessions-reference","path":"/gameplay-sessions/gameplay-sessions-reference","sidebar":"unitySidebar"},{"id":"gameplay-sessions/gameplay-sessions-usage","path":"/gameplay-sessions/gameplay-sessions-usage","sidebar":"unitySidebar"},{"id":"generic-bots/monkey-bot","path":"/generic-bots/monkey-bot","sidebar":"unitySidebar"},{"id":"overview","path":"/overview"},{"id":"pre-made-bots","path":"/pre-made-bots"},{"id":"quickstart","path":"/quickstart"},{"id":"session-insights/client-dashboard","path":"/session-insights/client-dashboard"},{"id":"session-insights/in-editor-replay","path":"/session-insights/in-editor-replay"},{"id":"tutorials/building-your-first-bot","path":"/tutorials/building-your-first-bot","sidebar":"unitySidebar"},{"id":"tutorials/github-actions","path":"/tutorials/github-actions"},{"id":"validations/validations-getting-started","path":"/validations/validations-getting-started","sidebar":"unitySidebar"},{"id":"validations/validations-rules-reference","path":"/validations/validations-rules-reference","sidebar":"unitySidebar"},{"id":"validations/validations-scenario-builder-reference","path":"/validations/validations-scenario-builder-reference","sidebar":"unitySidebar"}],"draftIds":[],"sidebars":{"unitySidebar":{"link":{"path":"/tutorials/building-your-first-bot","label":"tutorials/building-your-first-bot"}},"automatedTesting":{"link":{"path":"/automated-testing/overview","label":"automated-testing/overview"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.27","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(412),o=n(5742),i=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=a.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),k=(0,a.useContext)(c),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=f||p;const _=(0,s.Z)(x),C=x?.replace("pathname://","");let T=void 0!==C?(L=C,b&&(e=>e.startsWith("/"))(L)?E(L):L):void 0;var L;T&&_&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const A=(0,a.useRef)(!1),N=n?o.OL:o.rU,O=u.Z.canUseIntersectionObserver,P=(0,a.useRef)(),R=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,a.useEffect)((()=>(!O&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{O&&P.current&&P.current.disconnect()})),[P,T,O,_]);const I=T?.startsWith("#")??!1,M=!T||!_||I;return M||h||k.collectLink(T),M?a.createElement("a",(0,r.Z)({ref:S,href:T},x&&!_&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(N,(0,r.Z)({},v,{onMouseEnter:R,onTouchStart:R,innerRef:e=>{S.current=e,O&&e&&_&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>f,_r:()=>c,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(2549)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},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"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),u=n(5999),c=n(5936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({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",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(6668),E=n(9689);function k(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function x(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function L(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(x,{onClick:n,className:T.announcementBarClose}))}var A=n(3163),N=n(2466);var O=n(902),P=n(3102);const R=r.createContext(null);function I(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,P.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,O.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(R.Provider,{value:n},t)}function M(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(R);if(!e)throw new O.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:M(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var B=n(2949),$=n(2389);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const j={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,$.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(j.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",j.toggleButton,!l&&j.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,a.Z)(j.toggleIcon,j.lightToggleIcon)}),r.createElement(U,{className:(0,a.Z)(j.toggleIcon,j.darkToggleIcon)})))}const H=r.memo(Z),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,B.I)();return a?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var W=n(1327);function q(){return r.createElement(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,A.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(G,{className:"margin-right--md"}),r.createElement(Y,null))}var X=n(9960),Q=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,Q.Z)(a),p=(0,Q.Z)(t),m=(0,Q.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,J.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(te.Z,u&&{width:12,height:12}))};return o?r.createElement(X.Z,(0,l.Z)({href:c?m:o},d,h)):r.createElement(X.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,h))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(xe,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(xe,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const a=t?de:ce;return r.createElement(a,n)}var pe=n(4711);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";var he=n(1875);const be={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,be.searchBox)},t)}var ye=n(143),we=n(3438);var Ee=n(373);const ke=e=>e.docs.find((t=>t.id===e.mainDocId));const Se={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),g=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:ge}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(he.Z,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.vY)(t,a);return null===s?null:r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,we.lO)(a)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:g}=(0,Ee.J)(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??ke(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,we.lO)(n)[0],v=t&&h.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:ke(b).path;return h.length<=1?r.createElement(oe,(0,l.Z)({},c,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function xe(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Se[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function _e(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(xe,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Le(){const e=(0,A.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(K,null),primaryMenu:r.createElement(_e,null),secondaryMenu:r.createElement(Te,null)}):null}const Ae={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ne(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Oe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,A.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(a.current)return void(a.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-o.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Ae.navbarHideable,!s&&Ae.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Ne,{onClick:i.toggle}),r.createElement(Le,null))}var Pe=n(8780);const Re={errorBoundaryError:"errorBoundaryError_a6uf"};function Ie(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Me(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Re.errorBoundaryError},n)}class De extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Fe="right";function Be(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function $e(){const{toggle:e,shown:t}=(0,A.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Be,null))}const ze={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(De,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(xe,e)))))}function je(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Ze(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??Fe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(je,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement($e,null),r.createElement(q,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:a}),r.createElement(G,{className:ze.colorModeToggle}),!o&&r.createElement(ve,null,r.createElement(he.Z,null)))})}function He(){return r.createElement(Oe,null,r.createElement(Ze,null))}function Ve(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,Q.Z)(n),c=(0,Q.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(X.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function Ge(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ve,{item:t}))}function We(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ge,{key:t,item:e})))))}function qe(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(We,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ve,{item:t})}function Xe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Qe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(qe,{columns:t}):r.createElement(Xe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Q.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(X.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function ot(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(at,{style:o,links:n&&n.length>0&&r.createElement(Qe,{links:n}),logo:a&&r.createElement(nt,{logo:a}),copyright:t&&r.createElement(rt,{copyright:t})})}const it=r.memo(ot),lt=(0,O.Qc)([B.S,E.pl,N.OC,Ee.L5,i.VC,function(e){let{children:t}=e;return r.createElement(P.n2,null,r.createElement(A.M,null,r.createElement(I,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ut(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Ie,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Me,{error:t})))))}const ct={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(L,null),r.createElement(He,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,ct.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(ut,e)},t)),!n&&r.createElement(it,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),u=n(941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(u.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),g=n?"":t,h=u?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>h});var r=n(7462),a=n(7294),o=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!o.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,a.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function h(e){let{lazy:t,...n}=e;const r=t?g:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(3438),s=n(902),u=n(12);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),a=n(3102),o=n(7524),i=n(1980),l=n(6668),s=n(902);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3438:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>g,cE:()=>d,hI:()=>E,lO:()=>v,oz:()=>y,s1:()=>b,vY:()=>w});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(1116),u=n(7392),c=n(8596);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function h(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,c.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,c.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function b(){const e=(0,s.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?h({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function y(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:u}}},1980:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),a=n(6550),o=n(1688),i=n(902);function l(e){!function(e){const t=(0,a.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,a.k6)();return(0,o.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),a=n(1688);const o="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function l(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>L,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&a(e),s=t&&a(t),u=l||s;if(e&&a(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t,n=window.history,a=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,k=void 0===E?h:E,S=i.keyLength,x=void 0===S?6:S,_=e.basename?d(s(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,a=window.location,o=a.pathname+a.search+a.hash;return _&&(o=c(o,_)),p(o,r,n)}function T(){return Math.random().toString(36).substr(2,x)}var L=m();function A(e){(0,r.Z)(U,e),U.length=n.length,L.notifyListeners(U.location,U.action)}function N(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||R(C(e.state))}function O(){R(C(y()))}var P=!1;function R(e){if(P)P=!1,A();else{L.confirmTransitionTo(e,"POP",k,(function(t){t?A({action:"POP",location:e}):function(e){var t=U.location,n=M.indexOf(t.key);-1===n&&(n=0);var r=M.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(P=!0,F(a))}(e)}))}}var I=C(y()),M=[I.key];function D(e){return _+f(e)}function F(e){n.go(e)}var B=0;function $(e){1===(B+=e)&&1===e?(window.addEventListener(b,N),o&&window.addEventListener(v,O)):0===B&&(window.removeEventListener(b,N),o&&window.removeEventListener(v,O))}var z=!1;var U={length:n.length,action:"POP",location:I,createHref:D,push:function(e,t){var r="PUSH",o=p(e,t,T(),U.location);L.confirmTransitionTo(o,r,k,(function(e){if(e){var t=D(o),i=o.key,l=o.state;if(a)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=M.indexOf(U.location.key),u=M.slice(0,s+1);u.push(o.key),M=u,A({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,T(),U.location);L.confirmTransitionTo(o,r,k,(function(e){if(e){var t=D(o),i=o.key,l=o.state;if(a)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=M.indexOf(U.location.key);-1!==s&&(M[s]=o.key),A({action:r,location:o})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=L.setPrompt(e);return z||($(1),z=!0),function(){return z&&(z=!1,$(-1)),t()}},listen:function(e){var t=L.appendListener(e);return $(1),function(){$(-1),t()}}};return U}var E="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function x(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?h:a,i=n.hashType,u=void 0===i?"slash":i,b=e.basename?d(s(e.basename)):"",v=k[u],y=v.encodePath,w=v.decodePath;function C(){var e=w(x());return b&&(e=c(e,b)),p(e)}var T=m();function L(e){(0,r.Z)(z,e),z.length=t.length,T.notifyListeners(z.location,z.action)}var A=!1,N=null;function O(){var e,t,n=x(),r=y(n);if(n!==r)_(r);else{var a=C(),i=z.location;if(!A&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(N===f(a))return;N=null,function(e){if(A)A=!1,L();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?L({action:t,location:e}):function(e){var t=z.location,n=M.lastIndexOf(f(t));-1===n&&(n=0);var r=M.lastIndexOf(f(e));-1===r&&(r=0);var a=n-r;a&&(A=!0,D(a))}(e)}))}}(a)}}var P=x(),R=y(P);P!==R&&_(R);var I=C(),M=[f(I)];function D(e){t.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?window.addEventListener(E,O):0===F&&window.removeEventListener(E,O)}var $=!1;var z={length:t.length,action:"POP",location:I,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(b+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(b+t);if(x()!==a){N=t,function(e){window.location.hash=e}(a);var o=M.lastIndexOf(f(z.location)),i=M.slice(0,o+1);i.push(t),M=i,L({action:n,location:r})}else L()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(b+t);x()!==a&&(N=t,_(a));var o=M.indexOf(f(z.location));-1!==o&&(M[o]=t),L({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return $||(B(1),$=!0),function(){return $&&($=!1,B(-1)),t()}},listen:function(e){var t=T.appendListener(e);return B(1),function(){B(-1),t()}}};return z}function T(e,t,n){return Math.min(Math.max(e,t),n)}function L(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,u)}var h=T(l,0,o.length-1),b=o.map((function(e){return p(e,void 0,"string"==typeof e?g():e.key||g())})),v=f;function y(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[h],index:h,entries:b,createHref:v,push:function(e,t){var r="PUSH",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h<i.length;++h){var b=i[h];if(!(o[b]||r&&r[b]||g&&g[b]||l&&l[b])){var v=f(n,b);try{u(t,b,v)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in o=Object(arguments[s]))n.call(o,u)&&(l[u]=o[u]);if(t){i=t(o);for(var c=0;c<i.length;c++)r.call(o,i[c])&&(l[i[c]]=o[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var i in a={},n[o]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var a=e.classList;if(a.contains(t))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],i={};for(var l in o)if(o.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=o[l])}var u=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],a||l);var s=t[l],u=r.util.type(s);"Object"!==u||o[i(s)]?"Array"!==u||o[i(s)]||(o[i(s)]=!0,e(s,n,l,o)):(o[i(s)]=!0,e(s,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",o),o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new l;return s(a,a.head,e),i(e,a,t,a.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var g=p[m],h=g.inside,b=!!g.lookbehind,v=!!g.greedy,y=g.alias;if(v&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var E=g.pattern||g,k=l.next,S=c;k!==t.tail&&!(d&&S>=d.reach);S+=k.value.length,k=k.next){var x=k.value;if(t.length>e.length)return;if(!(x instanceof a)){var _,C=1;if(v){if(!(_=o(E,S,e,b))||_.index>=e.length)break;var T=_.index,L=_.index+_[0].length,A=S;for(A+=k.value.length;T>=A;)A+=(k=k.next).value.length;if(S=A-=k.value.length,k.value instanceof a)continue;for(var N=k;N!==t.tail&&(A<L||"string"==typeof N.value);N=N.next)C++,A+=N.value.length;C--,x=e.slice(S,A),_.index-=S}else if(!(_=o(E,0,x,b)))continue;T=_.index;var O=_[0],P=x.slice(0,T),R=x.slice(T+O.length),I=S+x.length;d&&I>d.reach&&(d.reach=I);var M=k.prev;if(P&&(M=s(t,M,P),S+=P.length),u(t,M,C),k=s(t,M,new a(f,h?r.tokenize(O,h):O,y,O)),R&&s(t,k,R),C>1){var D={cause:f+","+m,reach:I};i(e,t,n,k.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(o.classes,i):o.classes.push(i)),r.hooks.run("wrap",o);var l="";for(var s in o.attributes)l+=" "+s+'="'+(o.attributes[s]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+l+">"+o.content+"</"+o.tag+">"},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.shell=e.languages.bash}(a),a.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var a=t[n];if("code"===a.type){var o=a.content[1],i=a.content[3];if(o&&i&&"code-language"===o.type&&"code-block"===i.type&&"string"==typeof o.content){var l=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(a.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r],u=/language-(.+)/.exec(o);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var a=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var o=f(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),a.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&a.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))a++;else if(r.test(l)&&0===--a)return o}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),a.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r<a;r++){var o=n[r];if("string"!=typeof o){var i=o.content;if(Array.isArray(i))if("template-string"===o.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(a),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var a=n[r],o=e.languages.javascript[a];"RegExp"===e.util.type(o)&&(o=e.languages.javascript[a]={pattern:o});var i=o.inside||{};o.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(a),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;if("string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(a>=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern://,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9016:()=>{!function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,r){return RegExp(t(e,n),r||"")}function r(e,t){for(var n=0;n<t;n++)e=e.replace(/<<self>>/g,(function(){return"(?:"+e+")"}));return e.replace(/<<self>>/g,"[^\\s\\S]")}var a="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",o="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",l="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function s(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=s(o),c=RegExp(s(a+" "+o+" "+i+" "+l)),d=s(o+" "+i+" "+l),f=s(a+" "+o+" "+l),p=r(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source,2),m=r(/\((?:[^()]|<<self>>)*\)/.source,2),g=/@?\b[A-Za-z_]\w*\b/.source,h=t(/<<0>>(?:\s*<<1>>)?/.source,[g,p]),b=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,h]),v=/\[\s*(?:,\s*)*\]/.source,y=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[b,v]),w=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,m,v]),E=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[w]),k=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[E,b,v]),S={keyword:c,punctuation:/[<>()?,.:[\]]/},x=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,_=/"(?:\\.|[^\\"\r\n])*"/.source,C=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[C]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[_]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[g,k]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[g]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[u,h]),lookbehind:!0,inside:S},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\bwhere\s+)<<0>>/.source,[g]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[y]),lookbehind:!0,inside:S},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[k,f,g]),inside:S}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[g]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[g]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[m]),lookbehind:!0,alias:"class-name",inside:S},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[k,b]),inside:S,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[k]),lookbehind:!0,inside:S,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[g,p]),inside:{function:n(/^<<0>>/.source,[g]),generic:{pattern:RegExp(p),alias:"class-name",inside:S}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,h,g,k,c.source,m,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[h,m]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(k),greedy:!0,inside:S},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var T=_+"|"+x,L=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[T]),A=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[L]),2),N=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,O=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[b,A]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[N,O]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[N]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[A]),inside:e.languages.csharp},"class-name":{pattern:RegExp(b),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var P=/:[^}\r\n]+/.source,R=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[L]),2),I=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[R,P]),M=r(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source,[T]),2),D=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[M,P]);function F(t,r){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[r,P]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[I]),lookbehind:!0,greedy:!0,inside:F(I,R)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[D]),lookbehind:!0,greedy:!0,inside:F(D,M)}],char:{pattern:RegExp(x),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism)},2549:(e,t,n)=>{var r={"./prism-csharp":9016};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=2549},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},g={};function h(e,t,n,r,a,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){b[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];b[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){b[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){b[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){b[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){b[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){b[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){b[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){b[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var a=b.hasOwnProperty(t)?b[t]:null;(null!==a?0===a.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!p.call(g,e)||!p.call(m,e)&&(f.test(e)?g[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=60103,S=60106,x=60107,_=60108,C=60114,T=60109,L=60110,A=60112,N=60113,O=60120,P=60115,R=60116,I=60121,M=60128,D=60129,F=60130,B=60131;if("function"==typeof Symbol&&Symbol.for){var $=Symbol.for;k=$("react.element"),S=$("react.portal"),x=$("react.fragment"),_=$("react.strict_mode"),C=$("react.profiler"),T=$("react.provider"),L=$("react.context"),A=$("react.forward_ref"),N=$("react.suspense"),O=$("react.suspense_list"),P=$("react.memo"),R=$("react.lazy"),I=$("react.block"),$("react.scope"),M=$("react.opaque.id"),D=$("react.debug_trace_mode"),F=$("react.offscreen"),B=$("react.legacy_hidden")}var z,U="function"==typeof Symbol&&Symbol.iterator;function j(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function Z(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var H=!1;function V(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var a=s.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,l=o.length-1;1<=i&&0<=l&&a[i]!==o[l];)l--;for(;1<=i&&0<=l;i--,l--)if(a[i]!==o[l]){if(1!==i||1!==l)do{if(i--,0>--l||a[i]!==o[l])return"\n"+a[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{H=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Z(e):""}function G(e){switch(e.tag){case 5:return Z(e.type);case 16:return Z("Lazy");case 13:return Z("Suspense");case 19:return Z("SuspenseList");case 0:case 2:case 15:return e=V(e.type,!1);case 11:return e=V(e.type.render,!1);case 22:return e=V(e.type._render,!1);case 1:return e=V(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case x:return"Fragment";case S:return"Portal";case C:return"Profiler";case _:return"StrictMode";case N:return"Suspense";case O:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case L:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case P:return W(e.type);case I:return W(e._render);case R:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Y(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=Y(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function X(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Y(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Q(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return a({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ae(e,t.type,n):t.hasOwnProperty("defaultValue")&&ae(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ae(e,t,n){"number"===t&&Q(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function oe(e,t){return e=a({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return a({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,ge,he=(ge=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ge(e,t)}))}:ge);function be(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ve={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ye=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ve.hasOwnProperty(e)&&ve[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(ve).forEach((function(e){ye.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ve[t]=ve[e]}))}));var ke=a({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Se(e,t){if(t){if(ke[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function xe(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function _e(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Ce=null,Te=null,Le=null;function Ae(e){if(e=na(e)){if("function"!=typeof Ce)throw Error(i(280));var t=e.stateNode;t&&(t=aa(t),Ce(e.stateNode,e.type,t))}}function Ne(e){Te?Le?Le.push(e):Le=[e]:Te=e}function Oe(){if(Te){var e=Te,t=Le;if(Le=Te=null,Ae(e),t)for(e=0;e<t.length;e++)Ae(t[e])}}function Pe(e,t){return e(t)}function Re(e,t,n,r,a){return e(t,n,r,a)}function Ie(){}var Me=Pe,De=!1,Fe=!1;function Be(){null===Te&&null===Le||(Ie(),Oe())}function $e(e,t){var n=e.stateNode;if(null===n)return null;var r=aa(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){ze=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(ge){ze=!1}function je(e,t,n,r,a,o,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var Ze=!1,He=null,Ve=!1,Ge=null,We={onError:function(e){Ze=!0,He=e}};function qe(e,t,n,r,a,o,i,l,s){Ze=!1,He=null,je.apply(We,arguments)}function Ye(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ke(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Xe(e){if(Ye(e)!==e)throw Error(i(188))}function Qe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ye(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var o=a.alternate;if(null===o){if(null!==(r=a.return)){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return Xe(a),e;if(o===r)return Xe(a),t;o=o.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=o;else{for(var l=!1,s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l){for(s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,at=!1,ot=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,a){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:a,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function gt(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e=pt(t,n,r,a,o),null!==t&&(null!==(t=na(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function ht(e){var t=ta(e.target);if(null!==t){var n=Ye(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ke(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){o.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function bt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Qt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=na(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function vt(e,t,n){bt(e)&&n.delete(t)}function yt(){for(at=!1;0<ot.length;){var e=ot[0];if(null!==e.blockedOn){null!==(e=na(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Qt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&ot.shift()}null!==it&&bt(it)&&(it=null),null!==lt&&bt(lt)&&(lt=null),null!==st&&bt(st)&&(st=null),ut.forEach(vt),ct.forEach(vt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,at||(at=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,yt)))}function Et(e){function t(t){return wt(t,e)}if(0<ot.length){wt(ot[0],e);for(var n=1;n<ot.length;n++){var r=ot[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)ht(n),null===n.blockedOn&&dt.shift()}function kt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var St={animationend:kt("Animation","AnimationEnd"),animationiteration:kt("Animation","AnimationIteration"),animationstart:kt("Animation","AnimationStart"),transitionend:kt("Transition","TransitionEnd")},xt={},_t={};function Ct(e){if(xt[e])return xt[e];if(!St[e])return e;var t,n=St[e];for(t in n)if(n.hasOwnProperty(t)&&t in _t)return xt[e]=n[t];return e}d&&(_t=document.createElement("div").style,"AnimationEvent"in window||(delete St.animationend.animation,delete St.animationiteration.animation,delete St.animationstart.animation),"TransitionEvent"in window||delete St.transitionend.transition);var Tt=Ct("animationend"),Lt=Ct("animationiteration"),At=Ct("animationstart"),Nt=Ct("transitionend"),Ot=new Map,Pt=new Map,Rt=["abort","abort",Tt,"animationEnd",Lt,"animationIteration",At,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Nt,"transitionEnd","waiting","waiting"];function It(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],a=e[n+1];a="on"+(a[0].toUpperCase()+a.slice(1)),Pt.set(r,t),Ot.set(r,a),u(a,[r])}}(0,o.unstable_now)();var Mt=8;function Dt(e){if(0!=(1&e))return Mt=15,1;if(0!=(2&e))return Mt=14,2;if(0!=(4&e))return Mt=13,4;var t=24&e;return 0!==t?(Mt=12,t):0!=(32&e)?(Mt=11,32):0!==(t=192&e)?(Mt=10,t):0!=(256&e)?(Mt=9,256):0!==(t=3584&e)?(Mt=8,t):0!=(4096&e)?(Mt=7,4096):0!==(t=4186112&e)?(Mt=6,t):0!==(t=62914560&e)?(Mt=5,t):67108864&e?(Mt=4,67108864):0!=(134217728&e)?(Mt=3,134217728):0!==(t=805306368&e)?(Mt=2,t):0!=(1073741824&e)?(Mt=1,1073741824):(Mt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return Mt=0;var r=0,a=0,o=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==o)r=o,a=Mt=15;else if(0!==(o=134217727&n)){var s=o&~i;0!==s?(r=Dt(s),a=Mt):0!==(l&=o)&&(r=Dt(l),a=Mt)}else 0!==(o=n&~i)?(r=Dt(o),a=Mt):0!==l&&(r=Dt(l),a=Mt);if(0===r)return 0;if(r=n&((0>(r=31-Zt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),a<=Mt)return t;Mt=a}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-Zt(t)),r|=e[n],t&=~a;return r}function Bt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function $t(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?$t(10,t):e;case 10:return 0===(e=zt(192&~t))?$t(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function jt(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Zt(t)]=n}var Zt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ht(e)/Vt|0)|0},Ht=Math.log,Vt=Math.LN2;var Gt=o.unstable_UserBlockingPriority,Wt=o.unstable_runWithPriority,qt=!0;function Yt(e,t,n,r){De||Ie();var a=Xt,o=De;De=!0;try{Re(a,e,t,n,r)}finally{(De=o)||Be()}}function Kt(e,t,n,r){Wt(Gt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){var a;if(qt)if((a=0==(4&t))&&0<ot.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),ot.push(e);else{var o=Qt(e,t,n,r);if(null===o)a&&mt(e,r);else{if(a){if(-1<ft.indexOf(e))return e=pt(o,e,t,n,r),void ot.push(e);if(function(e,t,n,r,a){switch(t){case"focusin":return it=gt(it,e,t,n,r,a),!0;case"dragenter":return lt=gt(lt,e,t,n,r,a),!0;case"mouseover":return st=gt(st,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return ut.set(o,gt(ut.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,ct.set(o,gt(ct.get(o)||null,e,t,n,r,a)),!0}return!1}(o,e,t,n,r))return;mt(e,r)}Ir(e,t,r,null,n)}}}function Qt(e,t,n,r){var a=_e(r);if(null!==(a=ta(a))){var o=Ye(a);if(null===o)a=null;else{var i=o.tag;if(13===i){if(null!==(a=Ke(o)))return a;a=null}else if(3===i){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;a=null}else o!==a&&(a=null)}}return Ir(e,t,r,a,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,a="value"in Jt?Jt.value:Jt.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return tn=a.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function an(){return!0}function on(){return!1}function ln(e){function t(t,n,r,a,o){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(a):a[i]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?an:on,this.isPropagationStopped=on,this}return a(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=an)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=an)},persist:function(){},isPersistent:an}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=a({},dn,{view:0,detail:0}),mn=ln(pn),gn=a({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Tn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),hn=ln(gn),bn=ln(a({},gn,{dataTransfer:0})),vn=ln(a({},pn,{relatedTarget:0})),yn=ln(a({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=a({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),kn=ln(a({},dn,{data:0})),Sn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},_n={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Cn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=_n[e])&&!!t[e]}function Tn(){return Cn}var Ln=a({},pn,{key:function(e){if(e.key){var t=Sn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Tn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),An=ln(Ln),Nn=ln(a({},gn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),On=ln(a({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Tn})),Pn=ln(a({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Rn=a({},gn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),In=ln(Rn),Mn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Fn=null;d&&"documentMode"in document&&(Fn=document.documentMode);var Bn=d&&"TextEvent"in window&&!Fn,$n=d&&(!Dn||Fn&&8<Fn&&11>=Fn),zn=String.fromCharCode(32),Un=!1;function jn(e,t){switch(e){case"keyup":return-1!==Mn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Zn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1;var Vn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Gn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Vn[e.type]:"textarea"===t}function Wn(e,t,n,r){Ne(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Yn=null;function Kn(e){Lr(e,0)}function Xn(e){if(X(ra(e)))return e}function Qn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",ar),Yn=qn=null)}function ar(e){if("value"===e.propertyName&&Xn(Yn)){var t=[];if(Wn(t,Yn,e,_e(e)),e=Kn,De)e(t);else{De=!0;try{Pe(e,t)}finally{De=!1,Be()}}}}function or(e,t,n){"focusin"===e?(rr(),Yn=n,(qn=t).attachEvent("onpropertychange",ar)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Xn(Yn)}function lr(e,t){if("click"===e)return Xn(t)}function sr(e,t){if("input"===e||"change"===e)return Xn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function gr(){for(var e=window,t=Q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=Q((e=t.contentWindow).document)}return t}function hr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var br=d&&"documentMode"in document&&11>=document.documentMode,vr=null,yr=null,wr=null,Er=!1;function kr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==vr||vr!==Q(r)||("selectionStart"in(r=vr)&&hr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(yr,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}It("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),It("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),It(Rt,2);for(var Sr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),xr=0;xr<Sr.length;xr++)Pt.set(Sr[xr],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var _r="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Cr=new Set("cancel close invalid load scroll toggle".split(" ").concat(_r));function Tr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,o,l,s,u){if(qe.apply(this,arguments),Ze){if(!Ze)throw Error(i(198));var c=He;Ze=!1,He=null,Ve||(Ve=!0,Ge=c)}}(r,t,void 0,e),e.currentTarget=null}function Lr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==o&&a.isPropagationStopped())break e;Tr(a,l,u),o=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==o&&a.isPropagationStopped())break e;Tr(a,l,u),o=s}}}if(Ve)throw e=Ge,Ve=!1,Ge=null,e}function Ar(e,t){var n=oa(t),r=e+"__bubble";n.has(r)||(Rr(t,e,2,!1),n.add(r))}var Nr="_reactListening"+Math.random().toString(36).slice(2);function Or(e){e[Nr]||(e[Nr]=!0,l.forEach((function(t){Cr.has(t)||Pr(t,!1,e,null),Pr(t,!0,e,null)})))}function Pr(e,t,n,r){var a=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,o=n;if("selectionchange"===e&&9!==n.nodeType&&(o=n.ownerDocument),null!==r&&!t&&Cr.has(e)){if("scroll"!==e)return;a|=2,o=r}var i=oa(o),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(a|=4),Rr(o,e,a,t),i.add(l))}function Rr(e,t,n,r){var a=Pt.get(t);switch(void 0===a?2:a){case 0:a=Yt;break;case 1:a=Kt;break;default:a=Xt}n=a.bind(null,t,n,e),a=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Ir(e,t,n,r,a){var o=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===a||8===l.nodeType&&l.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===a||8===s.nodeType&&s.parentNode===a))return;i=i.return}for(;null!==l;){if(null===(i=ta(l)))return;if(5===(s=i.tag)||6===s){r=o=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{return Me(e,t,n)}finally{Fe=!1,Be()}}((function(){var r=o,a=_e(n),i=[];e:{var l=Ot.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=An;break;case"focusin":u="focus",s=vn;break;case"focusout":u="blur",s=vn;break;case"beforeblur":case"afterblur":s=vn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=hn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=bn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=On;break;case Tt:case Lt:case At:s=yn;break;case Nt:s=Pn;break;case"scroll":s=mn;break;case"wheel":s=In;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=Nn}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var g=(p=m).stateNode;if(5===p.tag&&null!==g&&(p=g,null!==f&&(null!=(g=$e(m,f))&&c.push(Mr(m,g,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,a),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!ta(u)&&!u[Jr])&&(s||l)&&(l=a.window===a?a:(l=a.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?ta(u):null)&&(u!==(d=Ye(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=hn,g="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=Nn,g="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ra(s),p=null==u?l:ra(u),(l=new c(g,m+"leave",s,n,a)).target=d,l.relatedTarget=p,g=null,ta(a)===r&&((c=new c(f,m+"enter",u,n,a)).target=p,c.relatedTarget=d,g=c),d=g,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Fr(p))m++;for(p=0,g=f;g;g=Fr(g))p++;for(;0<m-p;)c=Fr(c),m--;for(;0<p-m;)f=Fr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Fr(c),f=Fr(f)}c=null}else c=null;null!==s&&Br(i,l,s,c,!1),null!==u&&null!==d&&Br(i,d,u,c,!0)}if("select"===(s=(l=r?ra(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var h=Qn;else if(Gn(l))if(Jn)h=sr;else{h=ir;var b=or}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(h=lr);switch(h&&(h=h(e,r))?Wn(i,h,n,a):(b&&b(e,l,r),"focusout"===e&&(b=l._wrapperState)&&b.controlled&&"number"===l.type&&ae(l,"number",l.value)),b=r?ra(r):window,e){case"focusin":(Gn(b)||"true"===b.contentEditable)&&(vr=b,yr=r,wr=null);break;case"focusout":wr=yr=vr=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,kr(i,n,a);break;case"selectionchange":if(br)break;case"keydown":case"keyup":kr(i,n,a)}var v;if(Dn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Hn?jn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&($n&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Hn&&(v=nn()):(en="value"in(Jt=a)?Jt.value:Jt.textContent,Hn=!0)),0<(b=Dr(r,y)).length&&(y=new kn(y,e,null,n,a),i.push({event:y,listeners:b}),v?y.data=v:null!==(v=Zn(n))&&(y.data=v))),(v=Bn?function(e,t){switch(e){case"compositionend":return Zn(t);case"keypress":return 32!==t.which?null:(Un=!0,zn);case"textInput":return(e=t.data)===zn&&Un?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Dn&&jn(e,t)?(e=nn(),tn=en=Jt=null,Hn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return $n&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(a=new kn("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=v))}Lr(i,t)}))}function Mr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=$e(e,n))&&r.unshift(Mr(e,o,a)),null!=(o=$e(e,t))&&r.push(Mr(e,o,a))),e=e.return}return r}function Fr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Br(e,t,n,r,a){for(var o=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,a?null!=(s=$e(n,o))&&i.unshift(Mr(n,s,l)):a||null!=(s=$e(n,o))&&i.push(Mr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function $r(){}var zr=null,Ur=null;function jr(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Zr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Hr="function"==typeof setTimeout?setTimeout:void 0,Vr="function"==typeof clearTimeout?clearTimeout:void 0;function Gr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Yr=0;var Kr=Math.random().toString(36).slice(2),Xr="__reactFiber$"+Kr,Qr="__reactProps$"+Kr,Jr="__reactContainer$"+Kr,ea="__reactEvents$"+Kr;function ta(e){var t=e[Xr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Xr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Xr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function na(e){return!(e=e[Xr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ra(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function aa(e){return e[Qr]||null}function oa(e){var t=e[ea];return void 0===t&&(t=e[ea]=new Set),t}var ia=[],la=-1;function sa(e){return{current:e}}function ua(e){0>la||(e.current=ia[la],ia[la]=null,la--)}function ca(e,t){la++,ia[la]=e.current,e.current=t}var da={},fa=sa(da),pa=sa(!1),ma=da;function ga(e,t){var n=e.type.contextTypes;if(!n)return da;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function ha(e){return null!=(e=e.childContextTypes)}function ba(){ua(pa),ua(fa)}function va(e,t,n){if(fa.current!==da)throw Error(i(168));ca(fa,t),ca(pa,n)}function ya(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in e))throw Error(i(108,W(t)||"Unknown",o));return a({},n,r)}function wa(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||da,ma=fa.current,ca(fa,e),ca(pa,pa.current),!0}function Ea(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=ya(e,t,ma),r.__reactInternalMemoizedMergedChildContext=e,ua(pa),ua(fa),ca(fa,e)):ua(pa),ca(pa,n)}var ka=null,Sa=null,xa=o.unstable_runWithPriority,_a=o.unstable_scheduleCallback,Ca=o.unstable_cancelCallback,Ta=o.unstable_shouldYield,La=o.unstable_requestPaint,Aa=o.unstable_now,Na=o.unstable_getCurrentPriorityLevel,Oa=o.unstable_ImmediatePriority,Pa=o.unstable_UserBlockingPriority,Ra=o.unstable_NormalPriority,Ia=o.unstable_LowPriority,Ma=o.unstable_IdlePriority,Da={},Fa=void 0!==La?La:function(){},Ba=null,$a=null,za=!1,Ua=Aa(),ja=1e4>Ua?Aa:function(){return Aa()-Ua};function Za(){switch(Na()){case Oa:return 99;case Pa:return 98;case Ra:return 97;case Ia:return 96;case Ma:return 95;default:throw Error(i(332))}}function Ha(e){switch(e){case 99:return Oa;case 98:return Pa;case 97:return Ra;case 96:return Ia;case 95:return Ma;default:throw Error(i(332))}}function Va(e,t){return e=Ha(e),xa(e,t)}function Ga(e,t,n){return e=Ha(e),_a(e,t,n)}function Wa(){if(null!==$a){var e=$a;$a=null,Ca(e)}qa()}function qa(){if(!za&&null!==Ba){za=!0;var e=0;try{var t=Ba;Va(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Ba=null}catch(n){throw null!==Ba&&(Ba=Ba.slice(e+1)),_a(Oa,Wa),n}finally{za=!1}}}var Ya=E.ReactCurrentBatchConfig;function Ka(e,t){if(e&&e.defaultProps){for(var n in t=a({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xa=sa(null),Qa=null,Ja=null,eo=null;function to(){eo=Ja=Qa=null}function no(e){var t=Xa.current;ua(Xa),e.type._context._currentValue=t}function ro(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ao(e,t){Qa=e,eo=Ja=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function oo(e,t){if(eo!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(eo=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Ja){if(null===Qa)throw Error(i(308));Ja=t,Qa.dependencies={lanes:0,firstContext:t,responders:null}}else Ja=Ja.next=t;return e._currentValue}var io=!1;function lo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function so(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function uo(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function co(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fo(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?a=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function po(e,t,n,r){var o=e.updateQueue;io=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=o.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,g=i;switch(s=t,p=n,g.tag){case 1:if("function"==typeof(m=g.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=g.payload)?m.call(p,f,s):m))break e;f=a({},f,s);break e;case 2:io=!0}}null!==i.callback&&(e.flags|=32,null===(s=o.effects)?o.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=o.shared.pending))break;i=s.next,s.next=null,o.lastBaseUpdate=s,o.shared.pending=null}}null===d&&(u=f),o.baseState=u,o.firstBaseUpdate=c,o.lastBaseUpdate=d,Ul|=l,e.lanes=l,e.memoizedState=f}}function mo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(i(191,a));a.call(r)}}}var go=(new r.Component).refs;function ho(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:a({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var bo={isMounted:function(e){return!!(e=e._reactInternals)&&Ye(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),a=ps(e),o=uo(r,a);o.payload=t,null!=n&&(o.callback=n),co(e,o),ms(e,a,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),a=ps(e),o=uo(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),co(e,o),ms(e,a,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),a=uo(n,r);a.tag=2,null!=t&&(a.callback=t),co(e,a),ms(e,r,n)}};function vo(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(a,o))}function yo(e,t,n){var r=!1,a=da,o=t.contextType;return"object"==typeof o&&null!==o?o=oo(o):(a=ha(t)?ma:fa.current,o=(r=null!=(r=t.contextTypes))?ga(e,a):da),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=bo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function wo(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&bo.enqueueReplaceState(t,t.state,null)}function Eo(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=go,lo(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=oo(o):(o=ha(t)?ma:fa.current,a.context=ga(e,o)),po(e,n,a,r),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(ho(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&bo.enqueueReplaceState(a,a.state,null),po(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4)}var ko=Array.isArray;function So(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var a=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===a?t.ref:(t=function(e){var t=r.refs;t===go&&(t=r.refs={}),null===e?delete t[a]:t[a]=e},t._stringRef=a,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function xo(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function _o(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t){return(e=Gs(e,t)).index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ks(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=a(t,n.props)).ref=So(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=So(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Xs(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=qs(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ks(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=So(e,null,t),n.return=e,n;case S:return(t=Xs(t,e.mode,n)).return=e,t}if(ko(t)||j(t))return(t=qs(t,e.mode,n,null)).return=e,t;xo(e,t)}return null}function p(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==a?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===a?n.type===x?d(e,t,n.props.children,r,a):u(e,t,n,r):null;case S:return n.key===a?c(e,t,n,r):null}if(ko(n)||j(n))return null!==a?null:d(e,t,n,r,null);xo(e,n)}return null}function m(e,t,n,r,a){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return e=e.get(null===r.key?n:r.key)||null,r.type===x?d(t,e,r.props.children,a,r.key):u(t,e,r,a);case S:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a)}if(ko(r)||j(r))return d(t,e=e.get(n)||null,r,a,null);xo(t,r)}return null}function g(a,i,l,s){for(var u=null,c=null,d=i,g=i=0,h=null;null!==d&&g<l.length;g++){d.index>g?(h=d,d=null):h=d.sibling;var b=p(a,d,l[g],s);if(null===b){null===d&&(d=h);break}e&&d&&null===b.alternate&&t(a,d),i=o(b,i,g),null===c?u=b:c.sibling=b,c=b,d=h}if(g===l.length)return n(a,d),u;if(null===d){for(;g<l.length;g++)null!==(d=f(a,l[g],s))&&(i=o(d,i,g),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(a,d);g<l.length;g++)null!==(h=m(d,a,g,l[g],s))&&(e&&null!==h.alternate&&d.delete(null===h.key?g:h.key),i=o(h,i,g),null===c?u=h:c.sibling=h,c=h);return e&&d.forEach((function(e){return t(a,e)})),u}function h(a,l,s,u){var c=j(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,g=l,h=l=0,b=null,v=s.next();null!==g&&!v.done;h++,v=s.next()){g.index>h?(b=g,g=null):b=g.sibling;var y=p(a,g,v.value,u);if(null===y){null===g&&(g=b);break}e&&g&&null===y.alternate&&t(a,g),l=o(y,l,h),null===d?c=y:d.sibling=y,d=y,g=b}if(v.done)return n(a,g),c;if(null===g){for(;!v.done;h++,v=s.next())null!==(v=f(a,v.value,u))&&(l=o(v,l,h),null===d?c=v:d.sibling=v,d=v);return c}for(g=r(a,g);!v.done;h++,v=s.next())null!==(v=m(g,a,h,v.value,u))&&(e&&null!==v.alternate&&g.delete(null===v.key?h:v.key),l=o(v,l,h),null===d?c=v:d.sibling=v,d=v);return e&&g.forEach((function(e){return t(a,e)})),c}return function(e,r,o,s){var u="object"==typeof o&&null!==o&&o.type===x&&null===o.key;u&&(o=o.props.children);var c="object"==typeof o&&null!==o;if(c)switch(o.$$typeof){case k:e:{for(c=o.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(o.type===x){n(e,u.sibling),(r=a(u,o.props.children)).return=e,e=r;break e}}else if(u.elementType===o.type){n(e,u.sibling),(r=a(u,o.props)).ref=So(e,u,o),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}o.type===x?((r=qs(o.props.children,e.mode,s,o.key)).return=e,e=r):((s=Ws(o.type,o.key,o.props,null,e.mode,s)).ref=So(e,r,o),s.return=e,e=s)}return l(e);case S:e:{for(u=o.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),(r=a(r,o.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Xs(o,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof o||"number"==typeof o)return o=""+o,null!==r&&6===r.tag?(n(e,r.sibling),(r=a(r,o)).return=e,e=r):(n(e,r),(r=Ks(o,e.mode,s)).return=e,e=r),l(e);if(ko(o))return g(e,r,o,s);if(j(o))return h(e,r,o,s);if(c&&xo(e,o),void 0===o&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var Co=_o(!0),To=_o(!1),Lo={},Ao=sa(Lo),No=sa(Lo),Oo=sa(Lo);function Po(e){if(e===Lo)throw Error(i(174));return e}function Ro(e,t){switch(ca(Oo,t),ca(No,e),ca(Ao,Lo),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}ua(Ao),ca(Ao,t)}function Io(){ua(Ao),ua(No),ua(Oo)}function Mo(e){Po(Oo.current);var t=Po(Ao.current),n=pe(t,e.type);t!==n&&(ca(No,e),ca(Ao,n))}function Do(e){No.current===e&&(ua(Ao),ua(No))}var Fo=sa(0);function Bo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var $o=null,zo=null,Uo=!1;function jo(e,t){var n=Hs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Zo(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Ho(e){if(Uo){var t=zo;if(t){var n=t;if(!Zo(e,t)){if(!(t=Wr(n.nextSibling))||!Zo(e,t))return e.flags=-1025&e.flags|2,Uo=!1,void($o=e);jo($o,n)}$o=e,zo=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,Uo=!1,$o=e}}function Vo(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;$o=e}function Go(e){if(e!==$o)return!1;if(!Uo)return Vo(e),Uo=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Zr(t,e.memoizedProps))for(t=zo;t;)jo(e,t),t=Wr(t.nextSibling);if(Vo(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){zo=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}zo=null}}else zo=$o?Wr(e.stateNode.nextSibling):null;return!0}function Wo(){zo=$o=null,Uo=!1}var qo=[];function Yo(){for(var e=0;e<qo.length;e++)qo[e]._workInProgressVersionPrimary=null;qo.length=0}var Ko=E.ReactCurrentDispatcher,Xo=E.ReactCurrentBatchConfig,Qo=0,Jo=null,ei=null,ti=null,ni=!1,ri=!1;function ai(){throw Error(i(321))}function oi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,a,o){if(Qo=o,Jo=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ko.current=null===e||null===e.memoizedState?Pi:Ri,e=n(r,a),ri){o=0;do{if(ri=!1,!(25>o))throw Error(i(301));o+=1,ti=ei=null,t.updateQueue=null,Ko.current=Ii,e=n(r,a)}while(ri)}if(Ko.current=Oi,t=null!==ei&&null!==ei.next,Qo=0,ti=ei=Jo=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Jo.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Jo.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Jo.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Jo.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,a=r.baseQueue,o=n.pending;if(null!==o){if(null!==a){var l=a.next;a.next=o.next,o.next=l}r.baseQueue=a=o,n.pending=null}if(null!==a){a=a.next,r=r.baseState;var s=l=o=null,u=a;do{var c=u.lane;if((Qo&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,o=r):s=s.next=d,Jo.lanes|=c,Ul|=c}u=u.next}while(null!==u&&u!==a);null===s?o=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=o,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(null!==a){n.pending=null;var l=a=a.next;do{o=e(o,l.action),l=l.next}while(l!==a);ur(o,t.memoizedState)||(Di=!0),t.memoizedState=o,null===t.baseQueue&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var a=t._workInProgressVersionPrimary;if(null!==a?e=a===r:(e=e.mutableReadLanes,(e=(Qo&e)===e)&&(t._workInProgressVersionPrimary=r,qo.push(t))),e)return n(t._source);throw qo.push(t),Error(i(350))}function pi(e,t,n,r){var a=Rl;if(null===a)throw Error(i(349));var o=t._getVersion,l=o(t._source),s=Ko.current,u=s.useState((function(){return fi(a,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,g=f.source;f=f.subscribe;var h=Jo;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=o(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(h),a.mutableReadLanes|=e&a.pendingLanes),e=a.mutableReadLanes,a.entangledLanes|=e;for(var r=a.entanglements,i=e;0<i;){var s=31-Zt(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(h);a.mutableReadLanes|=r&a.pendingLanes}catch(o){n((function(){throw o}))}}))}),[t,r]),ur(m,n)&&ur(g,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ni.bind(null,Jo,e),u.queue=e,u.baseQueue=null,d=fi(a,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function gi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ni.bind(null,Jo,e),[t.memoizedState,e]}function hi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Jo.updateQueue)?(t={lastEffect:null},Jo.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function bi(e){return e={current:e},li().memoizedState=e}function vi(){return si().memoizedState}function yi(e,t,n,r){var a=li();Jo.flags|=e,a.memoizedState=hi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var a=si();r=void 0===r?null:r;var o=void 0;if(null!==ei){var i=ei.memoizedState;if(o=i.destroy,null!==r&&oi(r,i.deps))return void hi(t,n,o,r)}Jo.flags|=e,a.memoizedState=hi(1|t,n,o,r)}function Ei(e,t){return yi(516,4,e,t)}function ki(e,t){return wi(516,4,e,t)}function Si(e,t){return wi(4,2,e,t)}function xi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function _i(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,xi.bind(null,t,e),n)}function Ci(){}function Ti(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&oi(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Li(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&oi(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ai(e,t){var n=Za();Va(98>n?98:n,(function(){e(!0)})),Va(97<n?97:n,(function(){var n=Xo.transition;Xo.transition=1;try{e(!1),t()}finally{Xo.transition=n}}))}function Ni(e,t,n){var r=fs(),a=ps(e),o={lane:a,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?o.next=o:(o.next=i.next,i.next=o),t.pending=o,i=e.alternate,e===Jo||null!==i&&i===Jo)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(o.eagerReducer=i,o.eagerState=s,ur(s,l))return}catch(u){}ms(e,a,r)}}var Oi={readContext:oo,useCallback:ai,useContext:ai,useEffect:ai,useImperativeHandle:ai,useLayoutEffect:ai,useMemo:ai,useReducer:ai,useRef:ai,useState:ai,useDebugValue:ai,useDeferredValue:ai,useTransition:ai,useMutableSource:ai,useOpaqueIdentifier:ai,unstable_isNewReconciler:!1},Pi={readContext:oo,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:oo,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,yi(4,2,xi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return yi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ni.bind(null,Jo,e),[r.memoizedState,e]},useRef:bi,useState:gi,useDebugValue:Ci,useDeferredValue:function(e){var t=gi(e),n=t[0],r=t[1];return Ei((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=gi(!1),t=e[0];return bi(e=Ai.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if(Uo){var e=!1,t=function(e){return{$$typeof:M,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Yr++).toString(36))),Error(i(355))})),n=gi(t)[1];return 0==(2&Jo.mode)&&(Jo.flags|=516,hi(5,(function(){n("r:"+(Yr++).toString(36))}),void 0,null)),t}return gi(t="r:"+(Yr++).toString(36)),t},unstable_isNewReconciler:!1},Ri={readContext:oo,useCallback:Ti,useContext:oo,useEffect:ki,useImperativeHandle:_i,useLayoutEffect:Si,useMemo:Li,useReducer:ci,useRef:vi,useState:function(){return ci(ui)},useDebugValue:Ci,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return ki((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},Ii={readContext:oo,useCallback:Ti,useContext:oo,useEffect:ki,useImperativeHandle:_i,useLayoutEffect:Si,useMemo:Li,useReducer:di,useRef:vi,useState:function(){return di(ui)},useDebugValue:Ci,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return ki((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},Mi=E.ReactCurrentOwner,Di=!1;function Fi(e,t,n,r){t.child=null===e?To(t,null,n,r):Co(t,e.child,n,r)}function Bi(e,t,n,r,a){n=n.render;var o=t.ref;return ao(t,a),r=ii(e,t,n,r,o,a),null===e||Di?(t.flags|=1,Fi(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function $i(e,t,n,r,a,o){if(null===e){var i=n.type;return"function"!=typeof i||Vs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,a,o))}return i=e.child,0==(a&o)&&(a=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(a,r)&&e.ref===t.ref)?ol(e,t,o):(t.flags|=1,(e=Gs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,a,o){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(o&a))return t.lanes=e.lanes,ol(e,t,o);0!=(16384&e.flags)&&(Di=!0)}return Zi(e,t,n,r,o)}function Ui(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},ks(t,n);else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},ks(t,e),null;t.memoizedState={baseLanes:0},ks(t,null!==o?o.baseLanes:n)}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,ks(t,r);return Fi(e,t,a,n),t.child}function ji(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Zi(e,t,n,r,a){var o=ha(n)?ma:fa.current;return o=ga(t,o),ao(t,a),n=ii(e,t,n,r,o,a),null===e||Di?(t.flags|=1,Fi(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function Hi(e,t,n,r,a){if(ha(n)){var o=!0;wa(t)}else o=!1;if(ao(t,a),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),yo(t,n,r),Eo(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=oo(u):u=ga(t,u=ha(n)?ma:fa.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wo(t,i,r,u),io=!1;var f=t.memoizedState;i.state=f,po(t,r,i,a),s=t.memoizedState,l!==r||f!==s||pa.current||io?("function"==typeof c&&(ho(t,n,c,r),s=t.memoizedState),(l=io||vo(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,so(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ka(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=oo(s):s=ga(t,s=ha(n)?ma:fa.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wo(t,i,r,s),io=!1,f=t.memoizedState,i.state=f,po(t,r,i,a);var m=t.memoizedState;l!==d||f!==m||pa.current||io?("function"==typeof p&&(ho(t,n,p,r),m=t.memoizedState),(u=io||vo(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Vi(e,t,n,r,o,a)}function Vi(e,t,n,r,a,o){ji(e,t);var i=0!=(64&t.flags);if(!r&&!i)return a&&Ea(t,n,!1),ol(e,t,o);r=t.stateNode,Mi.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Co(t,e.child,null,o),t.child=Co(t,null,l,o)):Fi(e,t,l,o),t.memoizedState=r.state,a&&Ea(t,n,!0),t.child}function Gi(e){var t=e.stateNode;t.pendingContext?va(0,t.pendingContext,t.pendingContext!==t.context):t.context&&va(0,t.context,!1),Ro(e,t.containerInfo)}var Wi,qi,Yi,Ki,Xi={dehydrated:null,retryLane:0};function Qi(e,t,n){var r,a=t.pendingProps,o=Fo.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&o)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===a.fallback||!0===a.unstable_avoidThisFallback||(o|=1),ca(Fo,1&o),null===e?(void 0!==a.fallback&&Ho(t),e=a.children,o=a.fallback,i?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,e):"number"==typeof a.unstable_expectedLoadTime?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,t.lanes=33554432,e):((n=Ys({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(a=tl(e,t,a.children,a.fallback,n),i=t.child,o=e.child.memoizedState,i.memoizedState=null===o?{baseLanes:n}:{baseLanes:o.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Xi,a):(n=el(e,t,a.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var a=e.mode,o=e.child;return t={mode:"hidden",children:t},0==(2&a)&&null!==o?(o.childLanes=0,o.pendingProps=t):o=Ys(t,a,0,null),n=qs(n,a,r,null),o.return=e,n.return=e,o.sibling=n,e.child=o,n}function el(e,t,n,r){var a=e.child;return e=a.sibling,n=Gs(a,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,a){var o=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&o)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Gs(i,l),null!==e?r=Gs(e,r):(r=qs(r,o,a,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ro(e.return,t)}function rl(e,t,n,r,a,o){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a,lastEffect:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=a,i.lastEffect=o)}function al(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Fi(e,t,r.children,n),0!=(2&(r=Fo.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(ca(Fo,r),0==(2&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===Bo(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),rl(t,!1,a,n,o,t.lastEffect);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===Bo(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}rl(t,!0,n,null,o,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function ol(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ul|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Gs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Gs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!Uo)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return ha(t.type)&&ba(),null;case 3:return Io(),ua(pa),ua(fa),Yo(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Go(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Do(t);var o=Po(Oo.current);if(n=t.type,null!==e&&null!=t.stateNode)Yi(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Po(Ao.current),Go(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Xr]=t,r[Qr]=l,n){case"dialog":Ar("cancel",r),Ar("close",r);break;case"iframe":case"object":case"embed":Ar("load",r);break;case"video":case"audio":for(e=0;e<_r.length;e++)Ar(_r[e],r);break;case"source":Ar("error",r);break;case"img":case"image":case"link":Ar("error",r),Ar("load",r);break;case"details":Ar("toggle",r);break;case"input":ee(r,l),Ar("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Ar("invalid",r);break;case"textarea":se(r,l),Ar("invalid",r)}for(var u in Se(n,l),e=null,l)l.hasOwnProperty(u)&&(o=l[u],"children"===u?"string"==typeof o?r.textContent!==o&&(e=["children",o]):"number"==typeof o&&r.textContent!==""+o&&(e=["children",""+o]):s.hasOwnProperty(u)&&null!=o&&"onScroll"===u&&Ar("scroll",r));switch(n){case"input":K(r),re(r,l,!0);break;case"textarea":K(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=$r)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===o.nodeType?o:o.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Xr]=t,e[Qr]=r,Wi(e,t,!1,!1),t.stateNode=e,u=xe(n,r),n){case"dialog":Ar("cancel",e),Ar("close",e),o=r;break;case"iframe":case"object":case"embed":Ar("load",e),o=r;break;case"video":case"audio":for(o=0;o<_r.length;o++)Ar(_r[o],e);o=r;break;case"source":Ar("error",e),o=r;break;case"img":case"image":case"link":Ar("error",e),Ar("load",e),o=r;break;case"details":Ar("toggle",e),o=r;break;case"input":ee(e,r),o=J(e,r),Ar("invalid",e);break;case"option":o=oe(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=a({},r,{value:void 0}),Ar("invalid",e);break;case"textarea":se(e,r),o=le(e,r),Ar("invalid",e);break;default:o=r}Se(n,o);var c=o;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&he(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&be(e,d):"number"==typeof d&&be(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Ar("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":K(e),re(e,r,!1);break;case"textarea":K(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=$r)}jr(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ki(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Po(Oo.current),Po(Ao.current),Go(t)?(r=t.stateNode,n=t.memoizedProps,r[Xr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Xr]=t,t.stateNode=r)}return null;case 13:return ua(Fo),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Go(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Fo.current)?0===Bl&&(Bl=3):(0!==Bl&&3!==Bl||(Bl=4),null===Rl||0==(134217727&Ul)&&0==(134217727&jl)||vs(Rl,Ml))),(r||n)&&(t.flags|=4),null);case 4:return Io(),qi(t),null===e&&Or(t.stateNode.containerInfo),null;case 10:return no(t),null;case 19:if(ua(Fo),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Bl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Bo(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return ca(Fo,1&Fo.current|2),t.child}e=e.sibling}null!==r.tail&&ja()>Gl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Bo(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!Uo)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*ja()-r.renderingStartTime>Gl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=ja(),n.sibling=null,t=Fo.current,ca(Fo,l?1&t|2:1&t),n):null;case 23:case 24:return Ss(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:ha(e.type)&&ba();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Io(),ua(pa),ua(fa),Yo(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Do(e),null;case 13:return ua(Fo),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return ua(Fo),null;case 4:return Io(),null;case 10:return no(e),null;case 23:case 24:return Ss(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=G(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Wi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Yi=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Po(Ao.current);var i,l=null;switch(n){case"input":o=J(e,o),r=J(e,r),l=[];break;case"option":o=oe(e,o),r=oe(e,r),l=[];break;case"select":o=a({},o,{value:void 0}),r=a({},r,{value:void 0}),l=[];break;case"textarea":o=le(e,o),r=le(e,r),l=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=$r)}for(d in Se(n,r),n=null,o)if(!r.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var u=o[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=o?o[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Ar("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===M?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Ki=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=uo(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Kl||(Kl=!0,Xl=r),cl(0,t)},n}function pl(e,t,n){(n=uo(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return cl(0,t),r(a)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Ql?Ql=new Set([this]):Ql.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function gl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function hl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ka(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Gr(t.stateNode.containerInfo))}throw Error(i(163))}function bl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var a=e;r=a.next,0!=(4&(a=a.tag))&&0!=(1&a)&&(Fs(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ka(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&mo(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}mo(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&jr(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function vl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var a=n.memoizedProps.style;a=null!=a&&a.hasOwnProperty("display")?a.display:null,r.style.display=we("display",a)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function yl(e,t){if(Sa&&"function"==typeof Sa.onCommitFiberUnmount)try{Sa.onCommitFiberUnmount(ka,t)}catch(o){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,a=r.destroy;if(r=r.tag,void 0!==a)if(0!=(4&r))Fs(t,n);else{r=t;try{a()}catch(o){zs(r,o)}}n=n.next}while(n!==e)}break;case 1:if(gl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(o){zs(t,o)}break;case 5:gl(t);break;case 4:_l(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function kl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(be(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?Sl(e,n,t):xl(e,n,t)}function Sl(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=$r));else if(4!==r&&null!==(e=e.child))for(Sl(e,t,n),e=e.sibling;null!==e;)Sl(e,t,n),e=e.sibling}function xl(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(xl(e,t,n),e=e.sibling;null!==e;)xl(e,t,n),e=e.sibling}function _l(e,t){for(var n,r,a=t,o=!1;;){if(!o){o=a.return;e:for(;;){if(null===o)throw Error(i(160));switch(n=o.stateNode,o.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}o=o.return}o=!0}if(5===a.tag||6===a.tag){e:for(var l=e,s=a,u=s;;)if(yl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=a.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(a.stateNode)}else if(4===a.tag){if(null!==a.child){n=a.stateNode.containerInfo,r=!0,a.child.return=a,a=a.child;continue}}else if(yl(e,a),null!==a.child){a.child.return=a,a=a.child;continue}if(a===t)break;for(;null===a.sibling;){if(null===a.return||a.return===t)return;4===(a=a.return).tag&&(o=!1)}a.sibling.return=a.return,a=a.sibling}}function Cl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var a=null!==e?e.memoizedProps:r;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[Qr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),xe(e,a),t=xe(e,r),a=0;a<o.length;a+=2){var l=o[a],s=o[a+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?he(n,s):"children"===l?be(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(o=r.value)?ie(n,!!r.multiple,o,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Vl=ja(),vl(t.child,!0)),void Tl(t);case 19:return void Tl(t);case 23:case 24:return void vl(t,null!==t.memoizedState)}throw Error(i(163))}function Tl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=js.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Ll(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Al=Math.ceil,Nl=E.ReactCurrentDispatcher,Ol=E.ReactCurrentOwner,Pl=0,Rl=null,Il=null,Ml=0,Dl=0,Fl=sa(0),Bl=0,$l=null,zl=0,Ul=0,jl=0,Zl=0,Hl=null,Vl=0,Gl=1/0;function Wl(){Gl=ja()+500}var ql,Yl=null,Kl=!1,Xl=null,Ql=null,Jl=!1,es=null,ts=90,ns=[],rs=[],as=null,os=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Pl)?ja():-1!==ls?ls:ls=ja()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Za()?1:2;if(0===ss&&(ss=zl),0!==Ya.transition){0!==us&&(us=null!==Hl?Hl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Za(),0!=(4&Pl)&&98===e?e=$t(12,ss):e=$t(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<os)throw os=0,is=null,Error(i(185));if(null===(e=gs(e,t)))return null;jt(e,t,n),e===Rl&&(jl|=t,4===Bl&&vs(e,Ml));var r=Za();1===t?0!=(8&Pl)&&0==(48&Pl)?ys(e):(hs(e,n),0===Pl&&(Wl(),Wa())):(0==(4&Pl)||98!==r&&99!==r||(null===as?as=new Set([e]):as.add(e)),hs(e,n)),Hl=e}function gs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function hs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,a=e.pingedLanes,o=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Zt(l),u=1<<s,c=o[s];if(-1===c){if(0==(u&r)||0!=(u&a)){c=t,Dt(u);var d=Mt;o[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Ft(e,e===Rl?Ml:0),t=Mt,0===r)null!==n&&(n!==Da&&Ca(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Da&&Ca(n)}15===t?(n=ys.bind(null,e),null===Ba?(Ba=[n],$a=_a(Oa,qa)):Ba.push(n),n=Da):14===t?n=Ga(99,ys.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Ga(n,bs.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function bs(e){if(ls=-1,us=ss=0,0!=(48&Pl))throw Error(i(327));var t=e.callbackNode;if(Ms()&&e.callbackNode!==t)return null;var n=Ft(e,e===Rl?Ml:0);if(0===n)return null;var r=n,a=Pl;Pl|=16;var o=Cs();for(Rl===e&&Ml===r||(Wl(),xs(e,r));;)try{As();break}catch(s){_s(e,s)}if(to(),Nl.current=o,Pl=a,null!==Il?r=0:(Rl=null,Ml=0,r=Bl),0!=(zl&jl))xs(e,0);else if(0!==r){if(2===r&&(Pl|=64,e.hydrate&&(e.hydrate=!1,Gr(e.containerInfo)),0!==(n=Bt(e))&&(r=Ts(e,n))),1===r)throw t=$l,xs(e,0),vs(e,n),hs(e,ja()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ps(e);break;case 3:if(vs(e,n),(62914560&n)===n&&10<(r=Vl+500-ja())){if(0!==Ft(e,0))break;if(((a=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Hr(Ps.bind(null,e),r);break}Ps(e);break;case 4:if(vs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,a=-1;0<n;){var l=31-Zt(n);o=1<<l,(l=r[l])>a&&(a=l),n&=~o}if(n=a,10<(n=(120>(n=ja()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Al(n/1960))-n)){e.timeoutHandle=Hr(Ps.bind(null,e),n);break}Ps(e);break;default:throw Error(i(329))}}return hs(e,ja()),e.callbackNode===t?bs.bind(null,e):null}function vs(e,t){for(t&=~Zl,t&=~jl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Zt(t),r=1<<n;e[n]=-1,t&=~r}}function ys(e){if(0!=(48&Pl))throw Error(i(327));if(Ms(),e===Rl&&0!=(e.expiredLanes&Ml)){var t=Ml,n=Ts(e,t);0!=(zl&jl)&&(n=Ts(e,t=Ft(e,t)))}else n=Ts(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(Pl|=64,e.hydrate&&(e.hydrate=!1,Gr(e.containerInfo)),0!==(t=Bt(e))&&(n=Ts(e,t))),1===n)throw n=$l,xs(e,0),vs(e,t),hs(e,ja()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ps(e),hs(e,ja()),null}function ws(e,t){var n=Pl;Pl|=1;try{return e(t)}finally{0===(Pl=n)&&(Wl(),Wa())}}function Es(e,t){var n=Pl;Pl&=-2,Pl|=8;try{return e(t)}finally{0===(Pl=n)&&(Wl(),Wa())}}function ks(e,t){ca(Fl,Dl),Dl|=t,zl|=t}function Ss(){Dl=Fl.current,ua(Fl)}function xs(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Vr(n)),null!==Il)for(n=Il.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&ba();break;case 3:Io(),ua(pa),ua(fa),Yo();break;case 5:Do(r);break;case 4:Io();break;case 13:case 19:ua(Fo);break;case 10:no(r);break;case 23:case 24:Ss()}n=n.return}Rl=e,Il=Gs(e.current,null),Ml=Dl=zl=t,Bl=0,$l=null,Zl=jl=Ul=0}function _s(e,t){for(;;){var n=Il;try{if(to(),Ko.current=Oi,ni){for(var r=Jo.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}ni=!1}if(Qo=0,ti=ei=Jo=null,ri=!1,Ol.current=null,null===n||null===n.return){Bl=1,$l=t,Il=null;break}e:{var o=e,i=n.return,l=n,s=t;if(t=Ml,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Fo.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var g=f.memoizedProps;p=void 0!==g.fallback&&(!0!==g.unstable_avoidThisFallback||!d)}}if(p){var h=f.updateQueue;if(null===h){var b=new Set;b.add(u),f.updateQueue=b}else h.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var v=uo(-1,1);v.tag=2,co(l,v)}l.lanes|=1;break e}s=void 0,l=t;var y=o.pingCache;if(null===y?(y=o.pingCache=new dl,s=new Set,y.set(u,s)):void 0===(s=y.get(u))&&(s=new Set,y.set(u,s)),!s.has(l)){s.add(l);var w=Us.bind(null,o,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Bl&&(Bl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:o=s,f.flags|=4096,t&=-t,f.lanes|=t,fo(f,fl(0,o,t));break e;case 1:o=s;var E=f.type,k=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==k&&"function"==typeof k.componentDidCatch&&(null===Ql||!Ql.has(k)))){f.flags|=4096,t&=-t,f.lanes|=t,fo(f,pl(f,o,t));break e}}f=f.return}while(null!==f)}Os(n)}catch(S){t=S,Il===n&&null!==n&&(Il=n=n.return);continue}break}}function Cs(){var e=Nl.current;return Nl.current=Oi,null===e?Oi:e}function Ts(e,t){var n=Pl;Pl|=16;var r=Cs();for(Rl===e&&Ml===t||xs(e,t);;)try{Ls();break}catch(a){_s(e,a)}if(to(),Pl=n,Nl.current=r,null!==Il)throw Error(i(261));return Rl=null,Ml=0,Bl}function Ls(){for(;null!==Il;)Ns(Il)}function As(){for(;null!==Il&&!Ta();)Ns(Il)}function Ns(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?Os(e):Il=t,Ol.current=null}function Os(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(Il=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,a=n.child;null!==a;)r|=a.lanes|a.childLanes,a=a.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(Il=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Il=t);Il=t=e}while(null!==t);0===Bl&&(Bl=5)}function Ps(e){var t=Za();return Va(99,Rs.bind(null,e,t)),null}function Rs(e,t){do{Ms()}while(null!==es);if(0!=(48&Pl))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,a=r,o=e.pendingLanes&~a;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=a,e.mutableReadLanes&=a,e.entangledLanes&=a,a=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<o;){var u=31-Zt(o),c=1<<u;a[u]=0,l[u]=-1,s[u]=-1,o&=~c}if(null!==as&&0==(24&r)&&as.has(e)&&as.delete(e),e===Rl&&(Il=Rl=null,Ml=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(a=Pl,Pl|=32,Ol.current=null,zr=qt,hr(l=gr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,o=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(C){s=null;break e}var d=0,f=-1,p=-1,m=0,g=0,h=l,b=null;t:for(;;){for(var v;h!==s||0!==o&&3!==h.nodeType||(f=d+o),h!==u||0!==c&&3!==h.nodeType||(p=d+c),3===h.nodeType&&(d+=h.nodeValue.length),null!==(v=h.firstChild);)b=h,h=v;for(;;){if(h===l)break t;if(b===s&&++m===o&&(f=d),b===u&&++g===c&&(p=d),null!==(v=h.nextSibling))break;b=(h=b).parentNode}h=v}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;Ur={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Yl=r;do{try{Is()}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);cs=null,Yl=r;do{try{for(l=e;null!==Yl;){var y=Yl.flags;if(16&y&&be(Yl.stateNode,""),128&y){var w=Yl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&y){case 2:kl(Yl),Yl.flags&=-3;break;case 6:kl(Yl),Yl.flags&=-3,Cl(Yl.alternate,Yl);break;case 1024:Yl.flags&=-1025;break;case 1028:Yl.flags&=-1025,Cl(Yl.alternate,Yl);break;case 4:Cl(Yl.alternate,Yl);break;case 8:_l(l,s=Yl);var k=s.alternate;wl(s),null!==k&&wl(k)}Yl=Yl.nextEffect}}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);if(E=Ur,w=gr(),y=E.focusedElem,l=E.selectionRange,w!==y&&y&&y.ownerDocument&&mr(y.ownerDocument.documentElement,y)){null!==l&&hr(y)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(E,y.value.length)):(E=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=y.textContent.length,k=Math.min(l.start,s),l=void 0===l.end?k:Math.min(l.end,s),!E.extend&&k>l&&(s=l,l=k,k=s),s=pr(y,k),o=pr(y,l),s&&o&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==o.node||E.focusOffset!==o.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),k>l?(E.addRange(w),E.extend(o.node,o.offset)):(w.setEnd(o.node,o.offset),E.addRange(w))))),w=[];for(E=y;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(E=w[y]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,Ur=zr=null,e.current=n,Yl=r;do{try{for(y=e;null!==Yl;){var S=Yl.flags;if(36&S&&bl(y,Yl.alternate,Yl),128&S){w=void 0;var x=Yl.ref;if(null!==x){var _=Yl.stateNode;Yl.tag,w=_,"function"==typeof x?x(w):x.current=w}}Yl=Yl.nextEffect}}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);Yl=null,Fa(),Pl=a}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Yl=r;null!==Yl;)t=Yl.nextEffect,Yl.nextEffect=null,8&Yl.flags&&((S=Yl).sibling=null,S.stateNode=null),Yl=t;if(0===(r=e.pendingLanes)&&(Ql=null),1===r?e===is?os++:(os=0,is=e):os=0,n=n.stateNode,Sa&&"function"==typeof Sa.onCommitFiberRoot)try{Sa.onCommitFiberRoot(ka,n,void 0,64==(64&n.current.flags))}catch(C){}if(hs(e,ja()),Kl)throw Kl=!1,e=Xl,Xl=null,e;return 0!=(8&Pl)||Wa(),null}function Is(){for(;null!==Yl;){var e=Yl.alternate;ds||null===cs||(0!=(8&Yl.flags)?Je(Yl,cs)&&(ds=!0):13===Yl.tag&&Ll(e,Yl)&&Je(Yl,cs)&&(ds=!0));var t=Yl.flags;0!=(256&t)&&hl(e,Yl),0==(512&t)||Jl||(Jl=!0,Ga(97,(function(){return Ms(),null}))),Yl=Yl.nextEffect}}function Ms(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Va(e,Bs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Ga(97,(function(){return Ms(),null})))}function Fs(e,t){rs.push(t,e),Jl||(Jl=!0,Ga(97,(function(){return Ms(),null})))}function Bs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Pl))throw Error(i(331));var t=Pl;Pl|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var a=n[r],o=n[r+1],l=a.destroy;if(a.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){a=n[r],o=n[r+1];try{var s=a.create;a.destroy=s()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Pl=t,Wa(),!0}function $s(e,t,n){co(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=gs(e,1))&&(jt(e,1,t),hs(e,t))}function zs(e,t){if(3===e.tag)$s(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){$s(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Ql||!Ql.has(r))){var a=pl(n,e=ul(t,e),1);if(co(n,a),a=fs(),null!==(n=gs(n,1)))jt(n,1,a),hs(n,a);else if("function"==typeof r.componentDidCatch&&(null===Ql||!Ql.has(r)))try{r.componentDidCatch(t,e)}catch(o){}break}}n=n.return}}function Us(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Rl===e&&(Ml&n)===n&&(4===Bl||3===Bl&&(62914560&Ml)===Ml&&500>ja()-Vl?xs(e,0):Zl|=n),hs(e,t)}function js(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Za()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=gs(e,t))&&(jt(e,t,n),hs(e,n))}function Zs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Hs(e,t,n,r){return new Zs(e,t,n,r)}function Vs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Gs(e,t){var n=e.alternate;return null===n?((n=Hs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,a,o){var l=2;if(r=e,"function"==typeof e)Vs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case x:return qs(n.children,a,o,t);case D:l=8,a|=16;break;case _:l=8,a|=1;break;case C:return(e=Hs(12,n,t,8|a)).elementType=C,e.type=C,e.lanes=o,e;case N:return(e=Hs(13,n,t,a)).type=N,e.elementType=N,e.lanes=o,e;case O:return(e=Hs(19,n,t,a)).elementType=O,e.lanes=o,e;case F:return Ys(n,a,o,t);case B:return(e=Hs(24,n,t,a)).elementType=B,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:l=10;break e;case L:l=9;break e;case A:l=11;break e;case P:l=14;break e;case R:l=16,r=null;break e;case I:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Hs(l,n,t,a)).elementType=e,t.type=r,t.lanes=o,t}function qs(e,t,n,r){return(e=Hs(7,e,r,t)).lanes=n,e}function Ys(e,t,n,r){return(e=Hs(23,e,r,t)).elementType=F,e.lanes=n,e}function Ks(e,t,n){return(e=Hs(6,e,null,t)).lanes=n,e}function Xs(e,t,n){return(t=Hs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Qs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var a=t.current,o=fs(),l=ps(a);e:if(n){t:{if(Ye(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(ha(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(ha(u)){n=ya(n,u,s);break e}}n=s}else n=da;return null===t.context?t.context=n:t.pendingContext=n,(t=uo(o,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),co(a,t),ms(a,l,o),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Qs(e,t,null!=n&&!0===n.hydrate),t=Hs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,lo(t),e[Jr]=n.current,Or(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var a=(t=r[e])._getVersion;a=a(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,a]:n.mutableSourceEagerHydrationData.push(t,a)}this._internalRoot=n}function au(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ou(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o._internalRoot;if("function"==typeof a){var l=a;a=function(){var e=eu(i);l.call(e)}}Js(t,i,e,a)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=o._internalRoot,"function"==typeof a){var s=a;a=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,a)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!au(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||pa.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Gi(t),Wo();break;case 5:Mo(t);break;case 1:ha(t.type)&&wa(t);break;case 4:Ro(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var a=t.type._context;ca(Xa,a._currentValue),a._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Qi(e,t,n):(ca(Fo,1&Fo.current),null!==(t=ol(e,t,n))?t.sibling:null);ca(Fo,1&Fo.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return al(e,t,n);t.flags|=64}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),ca(Fo,Fo.current),r)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return ol(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=ga(t,fa.current),ao(t,n),a=ii(null,t,r,e,a,n),t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,ha(r)){var o=!0;wa(t)}else o=!1;t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,lo(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ho(t,r,l,e),a.updater=bo,t.stateNode=a,a._reactInternals=t,Eo(t,r,e,n),t=Vi(null,t,r,!0,o,n)}else t.tag=0,Fi(null,t,a,n),t=t.child;return t;case 16:a=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=(o=a._init)(a._payload),t.type=a,o=t.tag=function(e){if("function"==typeof e)return Vs(e)?1:0;if(null!=e){if((e=e.$$typeof)===A)return 11;if(e===P)return 14}return 2}(a),e=Ka(a,e),o){case 0:t=Zi(null,t,a,e,n);break e;case 1:t=Hi(null,t,a,e,n);break e;case 11:t=Bi(null,t,a,e,n);break e;case 14:t=$i(null,t,a,Ka(a.type,e),r,n);break e}throw Error(i(306,a,""))}return t;case 0:return r=t.type,a=t.pendingProps,Zi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 1:return r=t.type,a=t.pendingProps,Hi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 3:if(Gi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,a=null!==(a=t.memoizedState)?a.element:null,so(e,t),po(t,r,null,n),(r=t.memoizedState.element)===a)Wo(),t=ol(e,t,n);else{if((o=(a=t.stateNode).hydrate)&&(zo=Wr(t.stateNode.containerInfo.firstChild),$o=t,o=Uo=!0),o){if(null!=(e=a.mutableSourceEagerHydrationData))for(a=0;a<e.length;a+=2)(o=e[a])._workInProgressVersionPrimary=e[a+1],qo.push(o);for(n=To(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Fi(e,t,r,n),Wo();t=t.child}return t;case 5:return Mo(t),null===e&&Ho(t),r=t.type,a=t.pendingProps,o=null!==e?e.memoizedProps:null,l=a.children,Zr(r,a)?l=null:null!==o&&Zr(r,o)&&(t.flags|=16),ji(e,t),Fi(e,t,l,n),t.child;case 6:return null===e&&Ho(t),null;case 13:return Qi(e,t,n);case 4:return Ro(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Co(t,null,r,n):Fi(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,Bi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 7:return Fi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,a=t.pendingProps,l=t.memoizedProps,o=a.value;var s=t.type._context;if(ca(Xa,s._currentValue),s._currentValue=o,null!==l)if(s=l.value,0===(o=ur(s,o)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,o):1073741823))){if(l.children===a.children&&!pa.current){t=ol(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&o)){1===s.tag&&((c=uo(-1,n&-n)).tag=2,co(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),ro(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Fi(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=(o=t.pendingProps).children,ao(t,n),r=r(a=oo(a,o.unstable_observedBits)),t.flags|=1,Fi(e,t,r,n),t.child;case 14:return o=Ka(a=t.type,t.pendingProps),$i(e,t,a,o=Ka(a.type,o),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Ka(r,a),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,ha(r)?(e=!0,wa(t)):e=!1,ao(t,n),yo(t,r,a),Eo(t,r,a,n),Vi(null,t,r,!0,e,n);case 19:return al(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Ce=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=aa(r);if(!a)throw Error(i(90));X(r),ne(r,a)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Pe=ws,Re=function(e,t,n,r,a){var o=Pl;Pl|=4;try{return Va(98,e.bind(null,t,n,r,a))}finally{0===(Pl=o)&&(Wl(),Wa())}},Ie=function(){0==(49&Pl)&&(function(){if(null!==as){var e=as;as=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,hs(e,ja())}))}Wa()}(),Ms())},Me=function(e,t){var n=Pl;Pl|=2;try{return e(t)}finally{0===(Pl=n)&&(Wl(),Wa())}};var lu={Events:[na,ra,aa,Ne,Oe,Ms,{current:!1}]},su={findFiberByHostInstance:ta,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Qe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ka=cu.inject(uu),Sa=cu}catch(ge){}}t.hydrate=function(e,t,n){if(!au(t))throw Error(i(200));return ou(null,e,t,!0,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!o(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!o(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!o(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>V,ql:()=>J});var r=n(7294),a=n(5697),o=n.n(a),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=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},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map((function(e){return h[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},x=function(e){var t=S(e,h.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},_=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},L=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var a={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var l=o[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][u]&&(a[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var l=o[i],s=f({},r[l],a[l]);r[l]=s}return e}),[]).reverse()},A=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},N=function(e){return Array.isArray(e)?e.join(""):e},O=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},P=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},R=[h.NOSCRIPT,h.SCRIPT,h.STYLE],I=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},M=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},B=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=D(n,a),[r.createElement(h.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=M(n),o=N(t);return a?"<"+e+' data-rh="true" '+a+">"+I(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+I(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return M(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+I(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===R.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},$=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=O(e.metaTags,y),o=O(t,b),i=O(n,v);return{priorityMethods:{toComponent:function(){return[].concat(F(h.META,a.priority),F(h.LINK,o.priority),F(h.SCRIPT,i.priority))},toString:function(){return B(h.META,a.priority,r)+" "+B(h.LINK,o.priority,r)+" "+B(h.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:B(h.BASE,t,r),bodyAttributes:B("bodyAttributes",n,r),htmlAttributes:B("htmlAttributes",a,r),link:B(h.LINK,c,r),meta:B(h.META,d,r),noscript:B(h.NOSCRIPT,o,r),script:B(h.SCRIPT,f,r),style:B(h.STYLE,i,r),title:B(h.TITLE,{title:s,titleAttributes:u},r)}},z=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=$({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},j=r.createContext({}),Z=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),H="undefined"!=typeof document,V=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(j.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);V.canUseDOM=H,V.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},V.defaultProps={context:{}},V.displayName="HelmetProvider";var G=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===a.indexOf(s)&&a.push(s);var c=o.indexOf(s);-1!==c&&o.splice(c,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(h.BODY,e.bodyAttributes),W(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=N(e)),W(h.TITLE,t)}(c,d);var f={baseTag:G(h.BASE,n),linkTags:G(h.LINK,a),metaTags:G(h.META,o),noscriptTags:G(h.NOSCRIPT,i),scriptTags:G(h.SCRIPT,s),styleTags:G(h.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:L(h.LINK,["rel","href"],e),metaTags:L(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:L(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:L(h.SCRIPT,["src","innerHTML"],e),styleTags:L(h.STYLE,["cssText"],e),title:x(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:A(e,"prioritizeSeoTags")});V.canUseDOM?(t=o,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){q(t,(function(){Y=null}))})):(q(t),Y=null)):$&&(a=$(o)),r(a)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:Z.isRequired},K.displayName="HelmetDispatcher";var X=["children"],Q=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(P(this.props,"helmetData"),P(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return f({},a,((t={})[r.type]=i,t.titleAttributes=f({},o),t));case h.BODY:return f({},a,{bodyAttributes:f({},o)});case h.HTML:return f({},a,{htmlAttributes:f({},o)});default:return f({},a,((n={})[r.type]=f({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=g(r,X),l=Object.keys(i).reduce((function(e,t){return e[k[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,o),s){case h.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:l,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,Q),a=f({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof U||(o=new U(o.context,o.instances)),o?r.createElement(K,f({},a,{context:o.value,helmetData:void 0})):r.createElement(j.Consumer,null,(function(e){return r.createElement(K,f({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case o:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case h:case g:case s:return e;default:return t}}case a:return t}}}function k(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=o,t.Lazy=h,t.Memo=g,t.Portal=a,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return k(e)||E(e)===c},t.isConcurrentMode=k,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===o},t.isLazy=function(e){return E(e)===h},t.isMemo=function(e){return E(e)===g},t.isPortal=function(e){return E(e)===a},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=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},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),g=null;function h(){return g||(g=e(m.loader)),g.promise}return u.push(h),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return h()})),f=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),r._loadModule()})),h(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),o(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}o(h,"propTypes",{report:s.func.isRequired}),o(h,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),g.Capture=h,g.preloadAll=function(){return new Promise((function(e,t){b(u).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){b(c).then(e,e)}))},e.exports=g},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),a=n(7462),o=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>c,rU:()=>h});var r=n(6550),a=n(5068),o=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=o.forwardRef;void 0===m&&(m=p);var g=m((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,o.createElement("a",c)}));var h=m((function(e,t){var n=e.component,a=void 0===n?g:n,c=e.replace,h=e.to,b=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(h,e.location),e.location),s=r?n.createHref(r):"",g=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(h,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?g.ref=t||b:g.innerRef=b,o.createElement(a,g)}))})),b=function(e){return e},v=o.forwardRef;void 0===v&&(v=b);var y=v((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,g=e.exact,y=e.isActive,w=e.location,E=e.sensitive,k=e.strict,S=e.style,x=e.to,_=e.innerRef,C=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(x,n),n),s=i.pathname,T=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),L=T?(0,r.LX)(n.pathname,{path:T,exact:g,sensitive:E,strict:k}):null,A=!!(y?y(L,n):L),N="function"==typeof m?m(A):m,O="function"==typeof S?S(A):S;A&&(N=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(N,c),O=(0,l.Z)({},O,p));var P=(0,l.Z)({"aria-current":A&&a||null,className:N,style:O,to:i},C);return b!==v?P.ref=t||_:P.innerRef=_,o.createElement(h,P)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>x,F0:()=>y,LX:()=>S,TH:()=>R,k6:()=>P,rs:()=>N,s6:()=>v});var r=n(5068),a=n(7294),o=n(5697),i=n.n(o),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var g=a.createContext||function(e,t){var n,o,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return(t=e.call.apply(e,[this].concat(o))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(i=a)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(r,a):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},a.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},a.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},a.getValue=function(){return this.context[l]?this.context[l].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return u.contextTypes=((o={})[l]=i().object,o),{Provider:s,Consumer:u}},h=function(e){var t=g();return t.displayName=e,t},b=h("Router-History"),v=h("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return a.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var w={},E=1e4,k=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var a=[],o={regexp:d()(e,a,t),keys:a};return k<E&&(r[e]=o,k++),o}(n,{end:o,strict:l,sensitive:u}),a=r.regexp,i=r.keys,s=a.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return o&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var x=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,o=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===a.Children.count(e)}(l)&&(l=null),a.createElement(v.Provider,{value:o},o.match?l?"function"==typeof l?l(o):l:c?a.createElement(c,o):d?d(o):null:"function"==typeof l?l(o):null)}))},t}(a.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,l.Ep)(e)}function L(e){return function(){(0,s.Z)(!1)}}function A(){}a.Component;var N=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(o.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var O=a.useContext;function P(){return O(b)}function R(){return O(v).location}},9658:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=g&&null!=m&&m!==g,k="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||c,_=b||v;r.push({name:h||o++,prefix:g||"",delimiter:x,optional:S,repeat:k,partial:E,asterisk:!!w,pattern:_?u(_):w?".*":"[^"+s(x)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",l=t||{},s=(a||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(o+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');o+=c.prefix+d}}else o+=c}return o}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),g=i.slice(-m.length)===m;return a||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=o?"$":a&&g?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(p(e[a],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(o(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),a=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;a=d("react.element"),o=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function h(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function b(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},b.prototype=h.prototype;var y=v.prototype=new b;y.constructor=v,r(y,h.prototype),y.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,k={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,n){var r,o={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!k.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(1===s)o.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===o[r]&&(o[r]=s[r]);return{$$typeof:a,type:e,key:i,ref:l,props:o,_owner:w.current}}function x(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}var _=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case a:case o:s=!0}}if(s)return i=i(s=e),e=""===r?"."+C(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(_,"$&/")+"/"),T(i,t,n,"",(function(e){return e}))):null!=i&&(x(i)&&(i=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(_,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+C(l=e[u],u);s+=T(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=T(l=l.value,t,n,c=r+C(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function L(e,t,n){if(null==e)return e;var r=[],a=0;return T(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function A(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var N={current:null};function O(){var e=N.current;if(null===e)throw Error(p(321));return e}var P={ReactCurrentDispatcher:N,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:L,forEach:function(e,t,n){L(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return L(e,(function(){t++})),t},toArray:function(e){return L(e,(function(e){return e}))||[]},only:function(e){if(!x(e))throw Error(p(143));return e}},t.Component=h,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=P,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var o=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!k.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];o.children=u}return{$$typeof:a,type:e.type,key:i,ref:l,props:o,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=x,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return O().useCallback(e,t)},t.useContext=function(e,t){return O().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return O().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return O().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return O().useLayoutEffect(e,t)},t.useMemo=function(e,t){return O().useMemo(e,t)},t.useReducer=function(e,t,n){return O().useReducer(e,t,n)},t.useRef=function(e){return O().useRef(e)},t.useState=function(e){return O().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,a,o;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},a=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},o=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var g=!1,h=null,b=-1,v=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},o=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==h){var e=t.unstable_now();y=e+v;try{h(!0,e)?E.postMessage(null):(g=!1,h=null)}catch(n){throw E.postMessage(null),n}}else g=!1},n=function(e){h=e,g||(g=!0,E.postMessage(null))},r=function(e,n){b=f((function(){e(t.unstable_now())}),n)},a=function(){p(b),b=-1}}function k(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,a=e[r];if(!(void 0!==a&&0<_(a,t)))break e;e[r]=t,e[n]=a,n=r}}function S(e){return void 0===(e=e[0])?null:e}function x(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length;r<a;){var o=2*(r+1)-1,i=e[o],l=o+1,s=e[l];if(void 0!==i&&0>_(i,n))void 0!==s&&0>_(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[o]=n,r=o);else{if(!(void 0!==s&&0>_(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function _(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var C=[],T=[],L=1,A=null,N=3,O=!1,P=!1,R=!1;function I(e){for(var t=S(T);null!==t;){if(null===t.callback)x(T);else{if(!(t.startTime<=e))break;x(T),t.sortIndex=t.expirationTime,k(C,t)}t=S(T)}}function M(e){if(R=!1,I(e),!P)if(null!==S(C))P=!0,n(D);else{var t=S(T);null!==t&&r(M,t.startTime-e)}}function D(e,n){P=!1,R&&(R=!1,a()),O=!0;var o=N;try{for(I(n),A=S(C);null!==A&&(!(A.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=A.callback;if("function"==typeof i){A.callback=null,N=A.priorityLevel;var l=i(A.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?A.callback=l:A===S(C)&&x(C),I(n)}else x(C);A=S(C)}if(null!==A)var s=!0;else{var u=S(T);null!==u&&r(M,u.startTime-n),s=!1}return s}finally{A=null,N=o,O=!1}}var F=o;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){P||O||(P=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return N},t.unstable_getFirstCallbackNode=function(){return S(C)},t.unstable_next=function(e){switch(N){case 1:case 2:case 3:var t=3;break;default:t=N}var n=N;N=t;try{return e()}finally{N=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=F,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=N;N=e;try{return t()}finally{N=n}},t.unstable_scheduleCallback=function(e,o,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:L++,callback:o,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,k(T,e),null===S(C)&&e===S(T)&&(R?a():R=!0,r(M,i-l))):(e.sortIndex=s,k(C,e),P||O||(P=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=N;return function(){var n=N;N=t;try{return e.apply(this,arguments)}finally{N=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<o.length;s++){var u=o[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(a=n?n.call(r,c,d,u):void 0)||void 0===a&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!a(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=o({inst:{value:n,getSnapshot:t}}),a=r[0].inst,c=r[1];return l((function(){a.value=n,a.getSnapshot=t,u(a)&&c({inst:a})}),[e,n,t]),i((function(){return u(a)&&c({inst:a}),e((function(){u(a)&&c({inst:a})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Regression Games",tagline:"Introducing the first full-featured platform for AI, gaming, and tournaments. Build your own AIs and compete!",favicon:"img/favicon.ico",url:"https://docs.regression.gg",baseUrl:"/",organizationName:"Regression-Games",projectName:"RegressionDocs",deploymentBranch:"gh-pages",trailingSlash:!1,onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:{routeBasePath:"/",sidebarPath:"/home/runner/work/RegressionDocs/RegressionDocs/sidebars.js"},blog:{showReadingTime:!0},theme:{customCss:"/home/runner/work/RegressionDocs/RegressionDocs/src/css/custom.css"}}]],themeConfig:{image:"img/docusaurus-social-card.jpg",navbar:{title:"Regression Games",logo:{alt:"Regression Games Logo",src:"img/logo.png"},items:[{type:"docSidebar",sidebarId:"unitySidebar",position:"left",label:"Developer Reference"},{type:"docSidebar",sidebarId:"automatedTesting",position:"left",label:"Experimental Packages"},{type:"doc",docId:"changelog",label:"Changelog",position:"right"},{href:"https://github.com/Regression-Games",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Overview",to:"overview"},{label:"Quickstart",to:"quickstart"}]},{title:"Community",items:[{label:"Discord",href:"https://discord.com/invite/925SYVse2H"},{label:"Twitter",href:"https://twitter.com/RegressionGG"}]},{title:"More",items:[{label:"Blog",href:"https://medium.com/ai-and-games-by-regression-games"},{label:"GitHub",href:"https://github.com/Regression-Games"}]}],copyright:"Copyright \xa9 2024 Regression Games, Inc."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["csharp"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},scripts:[{src:"/js/loadposthog.js",async:!1}],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():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},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},3366:(e,t,n)=>{"use strict";function r(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}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=!0,a="Invariant failed";function o(e,t){if(!e){if(r)throw new Error(a);var n="function"==typeof t?t():t,o=n?"".concat(a,": ").concat(n):a;throw new Error(o)}}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/blog-ae5":{"__comp":"a6aa9e1f","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"metadata":"b2b675dd"},"/blog/archive-eb2":{"__comp":"9e4087bc","__context":{"plugin":"148a37a4"},"archive":"b2f554cd"},"/blog/first-blog-post-c66":{"__comp":"ccc49370","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","content":"e273c56f"},"/blog/long-blog-post-c95":{"__comp":"ccc49370","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","content":"73664a40"},"/blog/mdx-blog-post-e29":{"__comp":"ccc49370","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","content":"59362658"},"/blog/tags-612":{"__comp":"01a85c17","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/docusaurus-f84":{"__comp":"6875c492","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"tag":"a80da1cf","listMetadata":"608ae6a4"},"/blog/tags/facebook-72b":{"__comp":"6875c492","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"7661071f"}],"tag":"031793e1","listMetadata":"096bfee4"},"/blog/tags/hello-48d":{"__comp":"6875c492","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"8717b14a"}],"tag":"30a24c52","listMetadata":"66406991"},"/blog/tags/hola-cc1":{"__comp":"6875c492","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"925b3f96"}],"tag":"e16015ca","listMetadata":"4c9e35b1"},"/blog/welcome-bd6":{"__comp":"ccc49370","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","content":"d9f32620"},"/markdown-page-e06":{"__comp":"1f391b9e","__context":{"plugin":"14407088"},"content":"393be207"},"/-bb6":{"__comp":"1df93b7f","__context":{"plugin":"14407088"},"config":"5e9f5e1a"},"/-da5":{"__comp":"1be78505","__context":{"plugin":"efcba355"},"versionMetadata":"935f2afb"},"/404-b08":{"__comp":"17896441","content":"d0d95016"},"/authenticating-with-api-keys-483":{"__comp":"17896441","content":"1970a410"},"/automated-testing/creating-custom-components-740":{"__comp":"17896441","content":"af45fd03"},"/automated-testing/getting-started-c37":{"__comp":"17896441","content":"1359ca2f"},"/automated-testing/gpt-assistant-bot-dd7":{"__comp":"17896441","content":"56604baf"},"/automated-testing/overview-e56":{"__comp":"17896441","content":"29cae6e4"},"/changelog-daf":{"__comp":"17896441","content":"735d0569"},"/computer-vision-0f9":{"__comp":"17896441","content":"8f2791df"},"/computer-vision/image-match-df7":{"__comp":"17896441","content":"1ee9a467"},"/computer-vision/object-detection-3a3":{"__comp":"17896441","content":"0a367c1a"},"/computer-vision/text-match-929":{"__comp":"17896441","content":"0e5c35ea"},"/creating-bots/csharp/adaptive-bots-9bd":{"__comp":"17896441","content":"d2b05863"},"/creating-bots/csharp/agent-builder-a00":{"__comp":"17896441","content":"6806b5bc"},"/gameplay-sessions/gameplay-sessions-getting-started-425":{"__comp":"17896441","content":"b220c1b0"},"/gameplay-sessions/gameplay-sessions-reference-fa6":{"__comp":"17896441","content":"87bc41d4"},"/gameplay-sessions/gameplay-sessions-usage-91a":{"__comp":"17896441","content":"2c33d6f6"},"/generic-bots/monkey-bot-1c7":{"__comp":"17896441","content":"13d931f8"},"/overview-224":{"__comp":"17896441","content":"1db64337"},"/pre-made-bots-ae7":{"__comp":"17896441","content":"1fb3fb3e"},"/quickstart-dad":{"__comp":"17896441","content":"74876495"},"/session-insights/client-dashboard-f56":{"__comp":"17896441","content":"f8739703"},"/session-insights/in-editor-replay-2db":{"__comp":"17896441","content":"39f90b1e"},"/tutorials/building-your-first-bot-13c":{"__comp":"17896441","content":"04115efe"},"/tutorials/github-actions-4d2":{"__comp":"17896441","content":"ebe69912"},"/validations/validations-getting-started-3a9":{"__comp":"17896441","content":"2cd4476f"},"/validations/validations-rules-reference-5fe":{"__comp":"17896441","content":"b1406738"},"/validations/validations-scenario-builder-reference-572":{"__comp":"17896441","content":"eadec799"}}')}},e=>{e.O(0,[532],(()=>{return t=9383,e(e.s=t);var t}));e.O()}]); \ No newline at end of file +/*! For license information please see main.7b9cd64a.js.LICENSE.txt */ +(self.webpackChunkregression_docs=self.webpackChunkregression_docs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"031793e1":[()=>n.e(1633).then(n.t.bind(n,2511,19)),"~blog/default/blog-tags-facebook-038.json",2511],"04115efe":[()=>n.e(5792).then(n.bind(n,7360)),"@site/docs/tutorials/building-your-first-bot.mdx",7360],"096bfee4":[()=>n.e(7178).then(n.t.bind(n,5010,19)),"~blog/default/blog-tags-facebook-038-list.json",5010],"0a367c1a":[()=>n.e(8895).then(n.bind(n,5840)),"@site/docs/computer-vision/object-detection.mdx",5840],"0e5c35ea":[()=>n.e(3069).then(n.bind(n,359)),"@site/docs/computer-vision/text-match.mdx",359],"1359ca2f":[()=>n.e(7624).then(n.bind(n,2284)),"@site/docs/automated-testing/getting-started.mdx",2284],"13d931f8":[()=>n.e(1857).then(n.bind(n,526)),"@site/docs/generic-bots/monkey-bot.mdx",526],14407088:[()=>n.e(6163).then(n.t.bind(n,5745,19)),"/home/runner/work/RegressionDocs/RegressionDocs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"148a37a4":[()=>n.e(7161).then(n.t.bind(n,4469,19)),"/home/runner/work/RegressionDocs/RegressionDocs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],17896441:[()=>Promise.all([n.e(532),n.e(1506),n.e(7918)]).then(n.bind(n,8945)),"@theme/DocItem",8945],"1970a410":[()=>n.e(6519).then(n.bind(n,9381)),"@site/docs/authenticating-with-api-keys.mdx",9381],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1db64337":[()=>n.e(1372).then(n.bind(n,6777)),"@site/docs/overview.md",6777],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,8391)),"@site/src/pages/index.tsx",8391],"1ee9a467":[()=>n.e(3197).then(n.bind(n,1053)),"@site/docs/computer-vision/image-match.mdx",1053],"1f391b9e":[()=>Promise.all([n.e(532),n.e(1506),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"1fb3fb3e":[()=>n.e(2855).then(n.bind(n,7738)),"@site/docs/pre-made-bots.mdx",7738],"29cae6e4":[()=>n.e(6603).then(n.bind(n,7365)),"@site/docs/automated-testing/overview.md",7365],"2c33d6f6":[()=>n.e(1479).then(n.bind(n,2032)),"@site/docs/gameplay-sessions/gameplay-sessions-usage.mdx",2032],"2cd4476f":[()=>n.e(5065).then(n.bind(n,1517)),"@site/docs/validations/validations-getting-started.mdx",1517],"30a24c52":[()=>n.e(453).then(n.t.bind(n,8605,19)),"~blog/default/blog-tags-hello-039.json",8605],"393be207":[()=>n.e(7414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"39f90b1e":[()=>n.e(2808).then(n.bind(n,8030)),"@site/docs/session-insights/in-editor-replay.mdx",8030],"4c9e35b1":[()=>n.e(9035).then(n.t.bind(n,499,19)),"~blog/default/blog-tags-hola-ea2-list.json",499],"56604baf":[()=>n.e(6834).then(n.bind(n,3292)),"@site/docs/automated-testing/gpt-assistant-bot.mdx",3292],59362658:[()=>n.e(2267).then(n.bind(n,8642)),"@site/blog/2021-08-01-mdx-blog-post.mdx",8642],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"608ae6a4":[()=>n.e(6938).then(n.t.bind(n,4545,19)),"~blog/default/blog-tags-docusaurus-0e0-list.json",4545],66406991:[()=>n.e(110).then(n.t.bind(n,711,19)),"~blog/default/blog-tags-hello-039-list.json",711],"6806b5bc":[()=>n.e(5130).then(n.bind(n,7586)),"@site/docs/creating-bots/csharp/agent-builder.mdx",7586],"6875c492":[()=>Promise.all([n.e(532),n.e(1506),n.e(2529),n.e(8610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"735d0569":[()=>n.e(7445).then(n.bind(n,997)),"@site/docs/changelog.mdx",997],"73664a40":[()=>n.e(3514).then(n.bind(n,1976)),"@site/blog/2019-05-29-long-blog-post.md",1976],74876495:[()=>n.e(5049).then(n.bind(n,4235)),"@site/docs/quickstart.mdx",4235],"7661071f":[()=>n.e(9642).then(n.bind(n,6911)),"@site/blog/2021-08-26-welcome/index.md?truncated=true",6911],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"8717b14a":[()=>n.e(948).then(n.bind(n,3352)),"@site/blog/2019-05-29-long-blog-post.md?truncated=true",3352],"87bc41d4":[()=>n.e(7942).then(n.bind(n,6105)),"@site/docs/gameplay-sessions/gameplay-sessions-reference.mdx",6105],"8f2791df":[()=>n.e(7384).then(n.bind(n,5730)),"@site/docs/computer-vision/computer-vision.mdx",5730],"925b3f96":[()=>n.e(9003).then(n.bind(n,8856)),"@site/blog/2019-05-28-first-blog-post.md?truncated=true",8856],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9e4087bc":[()=>n.e(3608).then(n.bind(n,3169)),"@theme/BlogArchivePage",3169],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(1506),n.e(2529),n.e(3089)]).then(n.bind(n,46)),"@theme/BlogListPage",46],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],a80da1cf:[()=>n.e(3205).then(n.t.bind(n,4863,19)),"~blog/default/blog-tags-docusaurus-0e0.json",4863],af45fd03:[()=>n.e(5508).then(n.bind(n,8558)),"@site/docs/automated-testing/creating-custom-components.mdx",8558],b1406738:[()=>n.e(4873).then(n.bind(n,3117)),"@site/docs/validations/validations-rules-reference.mdx",3117],b220c1b0:[()=>n.e(3413).then(n.bind(n,5787)),"@site/docs/gameplay-sessions/gameplay-sessions-getting-started.mdx",5787],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],ccc49370:[()=>Promise.all([n.e(532),n.e(1506),n.e(2529),n.e(6103)]).then(n.bind(n,5203)),"@theme/BlogPostPage",5203],d0d95016:[()=>n.e(1640).then(n.bind(n,1901)),"@site/docs/404.mdx",1901],d2b05863:[()=>Promise.all([n.e(532),n.e(4998)]).then(n.bind(n,180)),"@site/docs/creating-bots/csharp/adaptive-bots.mdx",180],d9f32620:[()=>n.e(1914).then(n.bind(n,2900)),"@site/blog/2021-08-26-welcome/index.md",2900],e16015ca:[()=>n.e(9700).then(n.t.bind(n,5688,19)),"~blog/default/blog-tags-hola-ea2.json",5688],e273c56f:[()=>n.e(2362).then(n.bind(n,1947)),"@site/blog/2019-05-28-first-blog-post.md",1947],eadec799:[()=>n.e(660).then(n.bind(n,8784)),"@site/docs/validations/validations-scenario-builder-reference.mdx",8784],ebe69912:[()=>n.e(8329).then(n.bind(n,138)),"@site/docs/tutorials/github-actions.md",138],efcba355:[()=>n.e(8922).then(n.t.bind(n,3769,19)),"/home/runner/work/RegressionDocs/RegressionDocs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],f4f34a3a:[()=>n.e(8636).then(n.bind(n,5145)),"@site/blog/2021-08-01-mdx-blog-post.mdx?truncated=true",5145],f8739703:[()=>n.e(2216).then(n.bind(n,7473)),"@site/docs/session-insights/client-dashboard.mdx",7473]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,c.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/blog",component:f("/blog","ae5"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","eb2"),exact:!0},{path:"/blog/first-blog-post",component:f("/blog/first-blog-post","c66"),exact:!0},{path:"/blog/long-blog-post",component:f("/blog/long-blog-post","c95"),exact:!0},{path:"/blog/mdx-blog-post",component:f("/blog/mdx-blog-post","e29"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","612"),exact:!0},{path:"/blog/tags/docusaurus",component:f("/blog/tags/docusaurus","f84"),exact:!0},{path:"/blog/tags/facebook",component:f("/blog/tags/facebook","72b"),exact:!0},{path:"/blog/tags/hello",component:f("/blog/tags/hello","48d"),exact:!0},{path:"/blog/tags/hola",component:f("/blog/tags/hola","cc1"),exact:!0},{path:"/blog/welcome",component:f("/blog/welcome","bd6"),exact:!0},{path:"/markdown-page",component:f("/markdown-page","e06"),exact:!0},{path:"/",component:f("/","bb6"),exact:!0},{path:"/",component:f("/","da5"),routes:[{path:"/404",component:f("/404","b08"),exact:!0},{path:"/authenticating-with-api-keys",component:f("/authenticating-with-api-keys","483"),exact:!0,sidebar:"unitySidebar"},{path:"/automated-testing/creating-custom-components",component:f("/automated-testing/creating-custom-components","740"),exact:!0,sidebar:"automatedTesting"},{path:"/automated-testing/getting-started",component:f("/automated-testing/getting-started","c37"),exact:!0,sidebar:"automatedTesting"},{path:"/automated-testing/gpt-assistant-bot",component:f("/automated-testing/gpt-assistant-bot","dd7"),exact:!0,sidebar:"automatedTesting"},{path:"/automated-testing/overview",component:f("/automated-testing/overview","e56"),exact:!0,sidebar:"automatedTesting"},{path:"/changelog",component:f("/changelog","daf"),exact:!0},{path:"/computer-vision",component:f("/computer-vision","0f9"),exact:!0,sidebar:"unitySidebar"},{path:"/computer-vision/image-match",component:f("/computer-vision/image-match","df7"),exact:!0,sidebar:"unitySidebar"},{path:"/computer-vision/object-detection",component:f("/computer-vision/object-detection","3a3"),exact:!0,sidebar:"unitySidebar"},{path:"/computer-vision/text-match",component:f("/computer-vision/text-match","929"),exact:!0,sidebar:"unitySidebar"},{path:"/creating-bots/csharp/adaptive-bots",component:f("/creating-bots/csharp/adaptive-bots","9bd"),exact:!0,sidebar:"unitySidebar"},{path:"/creating-bots/csharp/agent-builder",component:f("/creating-bots/csharp/agent-builder","a00"),exact:!0},{path:"/gameplay-sessions/gameplay-sessions-getting-started",component:f("/gameplay-sessions/gameplay-sessions-getting-started","425"),exact:!0,sidebar:"unitySidebar"},{path:"/gameplay-sessions/gameplay-sessions-reference",component:f("/gameplay-sessions/gameplay-sessions-reference","fa6"),exact:!0,sidebar:"unitySidebar"},{path:"/gameplay-sessions/gameplay-sessions-usage",component:f("/gameplay-sessions/gameplay-sessions-usage","91a"),exact:!0,sidebar:"unitySidebar"},{path:"/generic-bots/monkey-bot",component:f("/generic-bots/monkey-bot","1c7"),exact:!0,sidebar:"unitySidebar"},{path:"/overview",component:f("/overview","224"),exact:!0},{path:"/pre-made-bots",component:f("/pre-made-bots","ae7"),exact:!0},{path:"/quickstart",component:f("/quickstart","dad"),exact:!0},{path:"/session-insights/client-dashboard",component:f("/session-insights/client-dashboard","f56"),exact:!0},{path:"/session-insights/in-editor-replay",component:f("/session-insights/in-editor-replay","2db"),exact:!0},{path:"/tutorials/building-your-first-bot",component:f("/tutorials/building-your-first-bot","13c"),exact:!0,sidebar:"unitySidebar"},{path:"/tutorials/github-actions",component:f("/tutorials/github-actions","4d2"),exact:!0},{path:"/validations/validations-getting-started",component:f("/validations/validations-getting-started","3a9"),exact:!0,sidebar:"unitySidebar"},{path:"/validations/validations-rules-reference",component:f("/validations/validations-rules-reference","5fe"),exact:!0,sidebar:"unitySidebar"},{path:"/validations/validations-scenario-builder-reference",component:f("/validations/validations-scenario-builder-reference","572"),exact:!0,sidebar:"unitySidebar"}]},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),E=n(3320),k=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,c.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function _(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var L=n(8934),A=n(8940);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const a=s.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),N("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class R extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?N("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=N("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(O,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const I=R,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function $(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${D}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${F}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${F}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function z(){const{siteConfig:{baseUrl:e}}=(0,g.Z)();return(0,r.useLayoutEffect)((()=>{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,$(e))),r.createElement("div",{id:M}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(z,null):null}function j(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(4763);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(Z.Z,null,r.createElement(A.M,null,r.createElement(L.t,null,r.createElement(f,null,r.createElement(j,null),r.createElement(_,null),r.createElement(U,null),r.createElement(I,{location:T(t)},e)))))}var V=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var W=n(9670);const q=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,X={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!q.has(e))(e))return!1;q.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,W.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),P(e))},Q=Object.freeze(X);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;P(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"tutorials/building-your-first-bot","docs":[{"id":"404","path":"/404"},{"id":"authenticating-with-api-keys","path":"/authenticating-with-api-keys","sidebar":"unitySidebar"},{"id":"automated-testing/creating-custom-components","path":"/automated-testing/creating-custom-components","sidebar":"automatedTesting"},{"id":"automated-testing/getting-started","path":"/automated-testing/getting-started","sidebar":"automatedTesting"},{"id":"automated-testing/gpt-assistant-bot","path":"/automated-testing/gpt-assistant-bot","sidebar":"automatedTesting"},{"id":"automated-testing/overview","path":"/automated-testing/overview","sidebar":"automatedTesting"},{"id":"changelog","path":"/changelog"},{"id":"computer-vision/computer-vision","path":"/computer-vision/","sidebar":"unitySidebar"},{"id":"computer-vision/image-match","path":"/computer-vision/image-match","sidebar":"unitySidebar"},{"id":"computer-vision/object-detection","path":"/computer-vision/object-detection","sidebar":"unitySidebar"},{"id":"computer-vision/text-match","path":"/computer-vision/text-match","sidebar":"unitySidebar"},{"id":"creating-bots/csharp/adaptive-bots","path":"/creating-bots/csharp/adaptive-bots","sidebar":"unitySidebar"},{"id":"creating-bots/csharp/agent-builder","path":"/creating-bots/csharp/agent-builder"},{"id":"gameplay-sessions/gameplay-sessions-getting-started","path":"/gameplay-sessions/gameplay-sessions-getting-started","sidebar":"unitySidebar"},{"id":"gameplay-sessions/gameplay-sessions-reference","path":"/gameplay-sessions/gameplay-sessions-reference","sidebar":"unitySidebar"},{"id":"gameplay-sessions/gameplay-sessions-usage","path":"/gameplay-sessions/gameplay-sessions-usage","sidebar":"unitySidebar"},{"id":"generic-bots/monkey-bot","path":"/generic-bots/monkey-bot","sidebar":"unitySidebar"},{"id":"overview","path":"/overview"},{"id":"pre-made-bots","path":"/pre-made-bots"},{"id":"quickstart","path":"/quickstart"},{"id":"session-insights/client-dashboard","path":"/session-insights/client-dashboard"},{"id":"session-insights/in-editor-replay","path":"/session-insights/in-editor-replay"},{"id":"tutorials/building-your-first-bot","path":"/tutorials/building-your-first-bot","sidebar":"unitySidebar"},{"id":"tutorials/github-actions","path":"/tutorials/github-actions"},{"id":"validations/validations-getting-started","path":"/validations/validations-getting-started","sidebar":"unitySidebar"},{"id":"validations/validations-rules-reference","path":"/validations/validations-rules-reference","sidebar":"unitySidebar"},{"id":"validations/validations-scenario-builder-reference","path":"/validations/validations-scenario-builder-reference","sidebar":"unitySidebar"}],"draftIds":[],"sidebars":{"unitySidebar":{"link":{"path":"/tutorials/building-your-first-bot","label":"tutorials/building-your-first-bot"}},"automatedTesting":{"link":{"path":"/automated-testing/overview","label":"automated-testing/overview"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.28","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(412),o=n(5742),i=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=a.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),k=(0,a.useContext)(c),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=f||p;const _=(0,s.Z)(x),C=x?.replace("pathname://","");let T=void 0!==C?(L=C,b&&(e=>e.startsWith("/"))(L)?E(L):L):void 0;var L;T&&_&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const A=(0,a.useRef)(!1),N=n?o.OL:o.rU,O=u.Z.canUseIntersectionObserver,P=(0,a.useRef)(),R=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,a.useEffect)((()=>(!O&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{O&&P.current&&P.current.disconnect()})),[P,T,O,_]);const I=T?.startsWith("#")??!1,M=!T||!_||I;return M||h||k.collectLink(T),M?a.createElement("a",(0,r.Z)({ref:S,href:T},x&&!_&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(N,(0,r.Z)({},v,{onMouseEnter:R,onTouchStart:R,innerRef:e=>{S.current=e,O&&e&&_&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>f,_r:()=>c,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(2549)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},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"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),u=n(5999),c=n(5936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({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",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(6668),E=n(9689);function k(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function x(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function L(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(x,{onClick:n,className:T.announcementBarClose}))}var A=n(3163),N=n(2466);var O=n(902),P=n(3102);const R=r.createContext(null);function I(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,P.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,O.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(R.Provider,{value:n},t)}function M(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(R);if(!e)throw new O.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:M(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var B=n(2949),$=n(2389);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const j={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,$.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(j.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",j.toggleButton,!l&&j.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,a.Z)(j.toggleIcon,j.lightToggleIcon)}),r.createElement(U,{className:(0,a.Z)(j.toggleIcon,j.darkToggleIcon)})))}const H=r.memo(Z),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,B.I)();return a?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var W=n(1327);function q(){return r.createElement(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,A.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(G,{className:"margin-right--md"}),r.createElement(Y,null))}var X=n(9960),Q=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,Q.Z)(a),p=(0,Q.Z)(t),m=(0,Q.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,J.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(te.Z,u&&{width:12,height:12}))};return o?r.createElement(X.Z,(0,l.Z)({href:c?m:o},d,h)):r.createElement(X.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,h))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(xe,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(xe,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const a=t?de:ce;return r.createElement(a,n)}var pe=n(4711);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";var he=n(1875);const be={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,be.searchBox)},t)}var ye=n(143),we=n(3438);var Ee=n(373);const ke=e=>e.docs.find((t=>t.id===e.mainDocId));const Se={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),g=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:ge}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(he.Z,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.vY)(t,a);return null===s?null:r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,we.lO)(a)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:g}=(0,Ee.J)(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??ke(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,we.lO)(n)[0],v=t&&h.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:ke(b).path;return h.length<=1?r.createElement(oe,(0,l.Z)({},c,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function xe(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Se[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function _e(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(xe,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Le(){const e=(0,A.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(K,null),primaryMenu:r.createElement(_e,null),secondaryMenu:r.createElement(Te,null)}):null}const Ae={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ne(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Oe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,A.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(a.current)return void(a.current=!1);const l=r?.scrollY,s=document.documentElement.scrollHeight-o.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Ae.navbarHideable,!s&&Ae.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Ne,{onClick:i.toggle}),r.createElement(Le,null))}var Pe=n(8780);const Re={errorBoundaryError:"errorBoundaryError_a6uf"};function Ie(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Me(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Re.errorBoundaryError},n)}class De extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Fe="right";function Be(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function $e(){const{toggle:e,shown:t}=(0,A.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Be,null))}const ze={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(De,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(xe,e)))))}function je(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Ze(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??Fe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(je,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement($e,null),r.createElement(q,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:a}),r.createElement(G,{className:ze.colorModeToggle}),!o&&r.createElement(ve,null,r.createElement(he.Z,null)))})}function He(){return r.createElement(Oe,null,r.createElement(Ze,null))}function Ve(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,Q.Z)(n),c=(0,Q.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(X.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function Ge(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ve,{item:t}))}function We(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ge,{key:t,item:e})))))}function qe(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(We,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ve,{item:t})}function Xe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Qe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(qe,{columns:t}):r.createElement(Xe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Q.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(X.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function ot(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(at,{style:o,links:n&&n.length>0&&r.createElement(Qe,{links:n}),logo:a&&r.createElement(nt,{logo:a}),copyright:t&&r.createElement(rt,{copyright:t})})}const it=r.memo(ot),lt=(0,O.Qc)([B.S,E.pl,N.OC,Ee.L5,i.VC,function(e){let{children:t}=e;return r.createElement(P.n2,null,r.createElement(A.M,null,r.createElement(I,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ut(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Ie,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Me,{error:t})))))}const ct={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(L,null),r.createElement(He,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,ct.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(ut,e)},t)),!n&&r.createElement(it,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),u=n(941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(u.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),g=n?"":t,h=u?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>h});var r=n(7462),a=n(7294),o=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!o.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,a.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function h(e){let{lazy:t,...n}=e;const r=t?g:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(3438),s=n(902),u=n(12);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),a=n(3102),o=n(7524),i=n(1980),l=n(6668),s=n(902);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3438:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>g,cE:()=>d,hI:()=>E,lO:()=>v,oz:()=>y,s1:()=>b,vY:()=>w});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(1116),u=n(7392),c=n(8596);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function h(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,c.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,c.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function b(){const e=(0,s.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?h({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function y(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:u}}},1980:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),a=n(6550),o=n(1688),i=n(902);function l(e){!function(e){const t=(0,a.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,a.k6)();return(0,o.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c});var r=n(7294),a=n(1688);const o="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function l(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>L,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&a(e),s=t&&a(t),u=l||s;if(e&&a(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t,n=window.history,a=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,k=void 0===E?h:E,S=i.keyLength,x=void 0===S?6:S,_=e.basename?d(s(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,a=window.location,o=a.pathname+a.search+a.hash;return _&&(o=c(o,_)),p(o,r,n)}function T(){return Math.random().toString(36).substr(2,x)}var L=m();function A(e){(0,r.Z)(U,e),U.length=n.length,L.notifyListeners(U.location,U.action)}function N(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||R(C(e.state))}function O(){R(C(y()))}var P=!1;function R(e){if(P)P=!1,A();else{L.confirmTransitionTo(e,"POP",k,(function(t){t?A({action:"POP",location:e}):function(e){var t=U.location,n=M.indexOf(t.key);-1===n&&(n=0);var r=M.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(P=!0,F(a))}(e)}))}}var I=C(y()),M=[I.key];function D(e){return _+f(e)}function F(e){n.go(e)}var B=0;function $(e){1===(B+=e)&&1===e?(window.addEventListener(b,N),o&&window.addEventListener(v,O)):0===B&&(window.removeEventListener(b,N),o&&window.removeEventListener(v,O))}var z=!1;var U={length:n.length,action:"POP",location:I,createHref:D,push:function(e,t){var r="PUSH",o=p(e,t,T(),U.location);L.confirmTransitionTo(o,r,k,(function(e){if(e){var t=D(o),i=o.key,l=o.state;if(a)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=M.indexOf(U.location.key),u=M.slice(0,s+1);u.push(o.key),M=u,A({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,T(),U.location);L.confirmTransitionTo(o,r,k,(function(e){if(e){var t=D(o),i=o.key,l=o.state;if(a)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=M.indexOf(U.location.key);-1!==s&&(M[s]=o.key),A({action:r,location:o})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=L.setPrompt(e);return z||($(1),z=!0),function(){return z&&(z=!1,$(-1)),t()}},listen:function(e){var t=L.appendListener(e);return $(1),function(){$(-1),t()}}};return U}var E="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function x(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?h:a,i=n.hashType,u=void 0===i?"slash":i,b=e.basename?d(s(e.basename)):"",v=k[u],y=v.encodePath,w=v.decodePath;function C(){var e=w(x());return b&&(e=c(e,b)),p(e)}var T=m();function L(e){(0,r.Z)(z,e),z.length=t.length,T.notifyListeners(z.location,z.action)}var A=!1,N=null;function O(){var e,t,n=x(),r=y(n);if(n!==r)_(r);else{var a=C(),i=z.location;if(!A&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(N===f(a))return;N=null,function(e){if(A)A=!1,L();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?L({action:t,location:e}):function(e){var t=z.location,n=M.lastIndexOf(f(t));-1===n&&(n=0);var r=M.lastIndexOf(f(e));-1===r&&(r=0);var a=n-r;a&&(A=!0,D(a))}(e)}))}}(a)}}var P=x(),R=y(P);P!==R&&_(R);var I=C(),M=[f(I)];function D(e){t.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?window.addEventListener(E,O):0===F&&window.removeEventListener(E,O)}var $=!1;var z={length:t.length,action:"POP",location:I,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(b+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(b+t);if(x()!==a){N=t,function(e){window.location.hash=e}(a);var o=M.lastIndexOf(f(z.location)),i=M.slice(0,o+1);i.push(t),M=i,L({action:n,location:r})}else L()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(b+t);x()!==a&&(N=t,_(a));var o=M.indexOf(f(z.location));-1!==o&&(M[o]=t),L({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return $||(B(1),$=!0),function(){return $&&($=!1,B(-1)),t()}},listen:function(e){var t=T.appendListener(e);return B(1),function(){B(-1),t()}}};return z}function T(e,t,n){return Math.min(Math.max(e,t),n)}function L(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,u)}var h=T(l,0,o.length-1),b=o.map((function(e){return p(e,void 0,"string"==typeof e?g():e.key||g())})),v=f;function y(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[h],index:h,entries:b,createHref:v,push:function(e,t){var r="PUSH",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h<i.length;++h){var b=i[h];if(!(o[b]||r&&r[b]||g&&g[b]||l&&l[b])){var v=f(n,b);try{u(t,b,v)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var u in o=Object(arguments[s]))n.call(o,u)&&(l[u]=o[u]);if(t){i=t(o);for(var c=0;c<i.length;c++)r.call(o,i[c])&&(l[i[c]]=o[i[c]])}}return l}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var i in a={},n[o]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var a=e.classList;if(a.contains(t))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],i={};for(var l in o)if(o.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=o[l])}var u=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],a||l);var s=t[l],u=r.util.type(s);"Object"!==u||o[i(s)]?"Array"!==u||o[i(s)]||(o[i(s)]=!0,e(s,n,l,o)):(o[i(s)]=!0,e(s,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",o),o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new l;return s(a,a.head,e),i(e,a,t,a.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var g=p[m],h=g.inside,b=!!g.lookbehind,v=!!g.greedy,y=g.alias;if(v&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var E=g.pattern||g,k=l.next,S=c;k!==t.tail&&!(d&&S>=d.reach);S+=k.value.length,k=k.next){var x=k.value;if(t.length>e.length)return;if(!(x instanceof a)){var _,C=1;if(v){if(!(_=o(E,S,e,b))||_.index>=e.length)break;var T=_.index,L=_.index+_[0].length,A=S;for(A+=k.value.length;T>=A;)A+=(k=k.next).value.length;if(S=A-=k.value.length,k.value instanceof a)continue;for(var N=k;N!==t.tail&&(A<L||"string"==typeof N.value);N=N.next)C++,A+=N.value.length;C--,x=e.slice(S,A),_.index-=S}else if(!(_=o(E,0,x,b)))continue;T=_.index;var O=_[0],P=x.slice(0,T),R=x.slice(T+O.length),I=S+x.length;d&&I>d.reach&&(d.reach=I);var M=k.prev;if(P&&(M=s(t,M,P),S+=P.length),u(t,M,C),k=s(t,M,new a(f,h?r.tokenize(O,h):O,y,O)),R&&s(t,k,R),C>1){var D={cause:f+","+m,reach:I};i(e,t,n,k.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(o.classes,i):o.classes.push(i)),r.hooks.run("wrap",o);var l="";for(var s in o.attributes)l+=" "+s+'="'+(o.attributes[s]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+l+">"+o.content+"</"+o.tag+">"},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.shell=e.languages.bash}(a),a.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var a=t[n];if("code"===a.type){var o=a.content[1],i=a.content[3];if(o&&i&&"code-language"===o.type&&"code-block"===i.type&&"string"==typeof o.content){var l=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(a.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r],u=/language-(.+)/.exec(o);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var a=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var o=f(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),a.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&a.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))a++;else if(r.test(l)&&0===--a)return o}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),a.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r<a;r++){var o=n[r];if("string"!=typeof o){var i=o.content;if(Array.isArray(i))if("template-string"===o.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(a),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var a=n[r],o=e.languages.javascript[a];"RegExp"===e.util.type(o)&&(o=e.languages.javascript[a]={pattern:o});var i=o.inside||{};o.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(a),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;if("string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(a>=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern://,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9016:()=>{!function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,r){return RegExp(t(e,n),r||"")}function r(e,t){for(var n=0;n<t;n++)e=e.replace(/<<self>>/g,(function(){return"(?:"+e+")"}));return e.replace(/<<self>>/g,"[^\\s\\S]")}var a="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",o="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",l="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function s(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=s(o),c=RegExp(s(a+" "+o+" "+i+" "+l)),d=s(o+" "+i+" "+l),f=s(a+" "+o+" "+l),p=r(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source,2),m=r(/\((?:[^()]|<<self>>)*\)/.source,2),g=/@?\b[A-Za-z_]\w*\b/.source,h=t(/<<0>>(?:\s*<<1>>)?/.source,[g,p]),b=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,h]),v=/\[\s*(?:,\s*)*\]/.source,y=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[b,v]),w=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,m,v]),E=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[w]),k=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[E,b,v]),S={keyword:c,punctuation:/[<>()?,.:[\]]/},x=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,_=/"(?:\\.|[^\\"\r\n])*"/.source,C=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[C]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[_]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[g,k]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[g]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[u,h]),lookbehind:!0,inside:S},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\bwhere\s+)<<0>>/.source,[g]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[y]),lookbehind:!0,inside:S},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[k,f,g]),inside:S}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[g]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[g]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[m]),lookbehind:!0,alias:"class-name",inside:S},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[k,b]),inside:S,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[k]),lookbehind:!0,inside:S,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[g,p]),inside:{function:n(/^<<0>>/.source,[g]),generic:{pattern:RegExp(p),alias:"class-name",inside:S}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,h,g,k,c.source,m,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[h,m]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(k),greedy:!0,inside:S},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var T=_+"|"+x,L=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[T]),A=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[L]),2),N=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,O=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[b,A]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[N,O]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[N]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[A]),inside:e.languages.csharp},"class-name":{pattern:RegExp(b),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var P=/:[^}\r\n]+/.source,R=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[L]),2),I=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[R,P]),M=r(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source,[T]),2),D=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[M,P]);function F(t,r){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[r,P]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[I]),lookbehind:!0,greedy:!0,inside:F(I,R)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[D]),lookbehind:!0,greedy:!0,inside:F(D,M)}],char:{pattern:RegExp(x),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism)},2549:(e,t,n)=>{var r={"./prism-csharp":9016};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=2549},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},g={};function h(e,t,n,r,a,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){b[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];b[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){b[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){b[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){b[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){b[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){b[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){b[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){b[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var a=b.hasOwnProperty(t)?b[t]:null;(null!==a?0===a.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!p.call(g,e)||!p.call(m,e)&&(f.test(e)?g[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=60103,S=60106,x=60107,_=60108,C=60114,T=60109,L=60110,A=60112,N=60113,O=60120,P=60115,R=60116,I=60121,M=60128,D=60129,F=60130,B=60131;if("function"==typeof Symbol&&Symbol.for){var $=Symbol.for;k=$("react.element"),S=$("react.portal"),x=$("react.fragment"),_=$("react.strict_mode"),C=$("react.profiler"),T=$("react.provider"),L=$("react.context"),A=$("react.forward_ref"),N=$("react.suspense"),O=$("react.suspense_list"),P=$("react.memo"),R=$("react.lazy"),I=$("react.block"),$("react.scope"),M=$("react.opaque.id"),D=$("react.debug_trace_mode"),F=$("react.offscreen"),B=$("react.legacy_hidden")}var z,U="function"==typeof Symbol&&Symbol.iterator;function j(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function Z(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var H=!1;function V(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var a=s.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,l=o.length-1;1<=i&&0<=l&&a[i]!==o[l];)l--;for(;1<=i&&0<=l;i--,l--)if(a[i]!==o[l]){if(1!==i||1!==l)do{if(i--,0>--l||a[i]!==o[l])return"\n"+a[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{H=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Z(e):""}function G(e){switch(e.tag){case 5:return Z(e.type);case 16:return Z("Lazy");case 13:return Z("Suspense");case 19:return Z("SuspenseList");case 0:case 2:case 15:return e=V(e.type,!1);case 11:return e=V(e.type.render,!1);case 22:return e=V(e.type._render,!1);case 1:return e=V(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case x:return"Fragment";case S:return"Portal";case C:return"Profiler";case _:return"StrictMode";case N:return"Suspense";case O:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case L:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case P:return W(e.type);case I:return W(e._render);case R:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Y(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=Y(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function X(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Y(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Q(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return a({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ae(e,t.type,n):t.hasOwnProperty("defaultValue")&&ae(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ae(e,t,n){"number"===t&&Q(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function oe(e,t){return e=a({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return a({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function fe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function pe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?fe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,ge,he=(ge=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ge(e,t)}))}:ge);function be(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ve={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ye=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ve.hasOwnProperty(e)&&ve[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(ve).forEach((function(e){ye.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ve[t]=ve[e]}))}));var ke=a({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Se(e,t){if(t){if(ke[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function xe(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function _e(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Ce=null,Te=null,Le=null;function Ae(e){if(e=na(e)){if("function"!=typeof Ce)throw Error(i(280));var t=e.stateNode;t&&(t=aa(t),Ce(e.stateNode,e.type,t))}}function Ne(e){Te?Le?Le.push(e):Le=[e]:Te=e}function Oe(){if(Te){var e=Te,t=Le;if(Le=Te=null,Ae(e),t)for(e=0;e<t.length;e++)Ae(t[e])}}function Pe(e,t){return e(t)}function Re(e,t,n,r,a){return e(t,n,r,a)}function Ie(){}var Me=Pe,De=!1,Fe=!1;function Be(){null===Te&&null===Le||(Ie(),Oe())}function $e(e,t){var n=e.stateNode;if(null===n)return null;var r=aa(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){ze=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(ge){ze=!1}function je(e,t,n,r,a,o,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var Ze=!1,He=null,Ve=!1,Ge=null,We={onError:function(e){Ze=!0,He=e}};function qe(e,t,n,r,a,o,i,l,s){Ze=!1,He=null,je.apply(We,arguments)}function Ye(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ke(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Xe(e){if(Ye(e)!==e)throw Error(i(188))}function Qe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ye(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var o=a.alternate;if(null===o){if(null!==(r=a.return)){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return Xe(a),e;if(o===r)return Xe(a),t;o=o.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=o;else{for(var l=!1,s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l){for(s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,at=!1,ot=[],it=null,lt=null,st=null,ut=new Map,ct=new Map,dt=[],ft="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function pt(e,t,n,r,a){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:a,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":lt=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function gt(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e=pt(t,n,r,a,o),null!==t&&(null!==(t=na(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function ht(e){var t=ta(e.target);if(null!==t){var n=Ye(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ke(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){o.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function bt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Qt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=na(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function vt(e,t,n){bt(e)&&n.delete(t)}function yt(){for(at=!1;0<ot.length;){var e=ot[0];if(null!==e.blockedOn){null!==(e=na(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Qt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&ot.shift()}null!==it&&bt(it)&&(it=null),null!==lt&&bt(lt)&&(lt=null),null!==st&&bt(st)&&(st=null),ut.forEach(vt),ct.forEach(vt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,at||(at=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,yt)))}function Et(e){function t(t){return wt(t,e)}if(0<ot.length){wt(ot[0],e);for(var n=1;n<ot.length;n++){var r=ot[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==lt&&wt(lt,e),null!==st&&wt(st,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)ht(n),null===n.blockedOn&&dt.shift()}function kt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var St={animationend:kt("Animation","AnimationEnd"),animationiteration:kt("Animation","AnimationIteration"),animationstart:kt("Animation","AnimationStart"),transitionend:kt("Transition","TransitionEnd")},xt={},_t={};function Ct(e){if(xt[e])return xt[e];if(!St[e])return e;var t,n=St[e];for(t in n)if(n.hasOwnProperty(t)&&t in _t)return xt[e]=n[t];return e}d&&(_t=document.createElement("div").style,"AnimationEvent"in window||(delete St.animationend.animation,delete St.animationiteration.animation,delete St.animationstart.animation),"TransitionEvent"in window||delete St.transitionend.transition);var Tt=Ct("animationend"),Lt=Ct("animationiteration"),At=Ct("animationstart"),Nt=Ct("transitionend"),Ot=new Map,Pt=new Map,Rt=["abort","abort",Tt,"animationEnd",Lt,"animationIteration",At,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Nt,"transitionEnd","waiting","waiting"];function It(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],a=e[n+1];a="on"+(a[0].toUpperCase()+a.slice(1)),Pt.set(r,t),Ot.set(r,a),u(a,[r])}}(0,o.unstable_now)();var Mt=8;function Dt(e){if(0!=(1&e))return Mt=15,1;if(0!=(2&e))return Mt=14,2;if(0!=(4&e))return Mt=13,4;var t=24&e;return 0!==t?(Mt=12,t):0!=(32&e)?(Mt=11,32):0!==(t=192&e)?(Mt=10,t):0!=(256&e)?(Mt=9,256):0!==(t=3584&e)?(Mt=8,t):0!=(4096&e)?(Mt=7,4096):0!==(t=4186112&e)?(Mt=6,t):0!==(t=62914560&e)?(Mt=5,t):67108864&e?(Mt=4,67108864):0!=(134217728&e)?(Mt=3,134217728):0!==(t=805306368&e)?(Mt=2,t):0!=(1073741824&e)?(Mt=1,1073741824):(Mt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return Mt=0;var r=0,a=0,o=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==o)r=o,a=Mt=15;else if(0!==(o=134217727&n)){var s=o&~i;0!==s?(r=Dt(s),a=Mt):0!==(l&=o)&&(r=Dt(l),a=Mt)}else 0!==(o=n&~i)?(r=Dt(o),a=Mt):0!==l&&(r=Dt(l),a=Mt);if(0===r)return 0;if(r=n&((0>(r=31-Zt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),a<=Mt)return t;Mt=a}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-Zt(t)),r|=e[n],t&=~a;return r}function Bt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function $t(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?$t(10,t):e;case 10:return 0===(e=zt(192&~t))?$t(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function jt(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Zt(t)]=n}var Zt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ht(e)/Vt|0)|0},Ht=Math.log,Vt=Math.LN2;var Gt=o.unstable_UserBlockingPriority,Wt=o.unstable_runWithPriority,qt=!0;function Yt(e,t,n,r){De||Ie();var a=Xt,o=De;De=!0;try{Re(a,e,t,n,r)}finally{(De=o)||Be()}}function Kt(e,t,n,r){Wt(Gt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){var a;if(qt)if((a=0==(4&t))&&0<ot.length&&-1<ft.indexOf(e))e=pt(null,e,t,n,r),ot.push(e);else{var o=Qt(e,t,n,r);if(null===o)a&&mt(e,r);else{if(a){if(-1<ft.indexOf(e))return e=pt(o,e,t,n,r),void ot.push(e);if(function(e,t,n,r,a){switch(t){case"focusin":return it=gt(it,e,t,n,r,a),!0;case"dragenter":return lt=gt(lt,e,t,n,r,a),!0;case"mouseover":return st=gt(st,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return ut.set(o,gt(ut.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,ct.set(o,gt(ct.get(o)||null,e,t,n,r,a)),!0}return!1}(o,e,t,n,r))return;mt(e,r)}Ir(e,t,r,null,n)}}}function Qt(e,t,n,r){var a=_e(r);if(null!==(a=ta(a))){var o=Ye(a);if(null===o)a=null;else{var i=o.tag;if(13===i){if(null!==(a=Ke(o)))return a;a=null}else if(3===i){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;a=null}else o!==a&&(a=null)}}return Ir(e,t,r,a,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,a="value"in Jt?Jt.value:Jt.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return tn=a.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function an(){return!0}function on(){return!1}function ln(e){function t(t,n,r,a,o){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(a):a[i]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?an:on,this.isPropagationStopped=on,this}return a(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=an)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=an)},persist:function(){},isPersistent:an}),t}var sn,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},fn=ln(dn),pn=a({},dn,{view:0,detail:0}),mn=ln(pn),gn=a({},pn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Tn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(sn=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=sn=0,cn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:un}}),hn=ln(gn),bn=ln(a({},gn,{dataTransfer:0})),vn=ln(a({},pn,{relatedTarget:0})),yn=ln(a({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=a({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=ln(wn),kn=ln(a({},dn,{data:0})),Sn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},_n={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Cn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=_n[e])&&!!t[e]}function Tn(){return Cn}var Ln=a({},pn,{key:function(e){if(e.key){var t=Sn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Tn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),An=ln(Ln),Nn=ln(a({},gn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),On=ln(a({},pn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Tn})),Pn=ln(a({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Rn=a({},gn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),In=ln(Rn),Mn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Fn=null;d&&"documentMode"in document&&(Fn=document.documentMode);var Bn=d&&"TextEvent"in window&&!Fn,$n=d&&(!Dn||Fn&&8<Fn&&11>=Fn),zn=String.fromCharCode(32),Un=!1;function jn(e,t){switch(e){case"keyup":return-1!==Mn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Zn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1;var Vn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Gn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Vn[e.type]:"textarea"===t}function Wn(e,t,n,r){Ne(r),0<(t=Dr(t,"onChange")).length&&(n=new fn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Yn=null;function Kn(e){Lr(e,0)}function Xn(e){if(X(ra(e)))return e}function Qn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){qn&&(qn.detachEvent("onpropertychange",ar),Yn=qn=null)}function ar(e){if("value"===e.propertyName&&Xn(Yn)){var t=[];if(Wn(t,Yn,e,_e(e)),e=Kn,De)e(t);else{De=!0;try{Pe(e,t)}finally{De=!1,Be()}}}}function or(e,t,n){"focusin"===e?(rr(),Yn=n,(qn=t).attachEvent("onpropertychange",ar)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Xn(Yn)}function lr(e,t){if("click"===e)return Xn(t)}function sr(e,t){if("input"===e||"change"===e)return Xn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function fr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function pr(e,t){var n,r=fr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=fr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function gr(){for(var e=window,t=Q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=Q((e=t.contentWindow).document)}return t}function hr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var br=d&&"documentMode"in document&&11>=document.documentMode,vr=null,yr=null,wr=null,Er=!1;function kr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==vr||vr!==Q(r)||("selectionStart"in(r=vr)&&hr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(yr,"onSelect")).length&&(t=new fn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}It("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),It("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),It(Rt,2);for(var Sr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),xr=0;xr<Sr.length;xr++)Pt.set(Sr[xr],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var _r="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Cr=new Set("cancel close invalid load scroll toggle".split(" ").concat(_r));function Tr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,o,l,s,u){if(qe.apply(this,arguments),Ze){if(!Ze)throw Error(i(198));var c=He;Ze=!1,He=null,Ve||(Ve=!0,Ge=c)}}(r,t,void 0,e),e.currentTarget=null}function Lr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==o&&a.isPropagationStopped())break e;Tr(a,l,u),o=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==o&&a.isPropagationStopped())break e;Tr(a,l,u),o=s}}}if(Ve)throw e=Ge,Ve=!1,Ge=null,e}function Ar(e,t){var n=oa(t),r=e+"__bubble";n.has(r)||(Rr(t,e,2,!1),n.add(r))}var Nr="_reactListening"+Math.random().toString(36).slice(2);function Or(e){e[Nr]||(e[Nr]=!0,l.forEach((function(t){Cr.has(t)||Pr(t,!1,e,null),Pr(t,!0,e,null)})))}function Pr(e,t,n,r){var a=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,o=n;if("selectionchange"===e&&9!==n.nodeType&&(o=n.ownerDocument),null!==r&&!t&&Cr.has(e)){if("scroll"!==e)return;a|=2,o=r}var i=oa(o),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(a|=4),Rr(o,e,a,t),i.add(l))}function Rr(e,t,n,r){var a=Pt.get(t);switch(void 0===a?2:a){case 0:a=Yt;break;case 1:a=Kt;break;default:a=Xt}n=a.bind(null,t,n,e),a=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Ir(e,t,n,r,a){var o=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===a||8===l.nodeType&&l.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===a||8===s.nodeType&&s.parentNode===a))return;i=i.return}for(;null!==l;){if(null===(i=ta(l)))return;if(5===(s=i.tag)||6===s){r=o=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{return Me(e,t,n)}finally{Fe=!1,Be()}}((function(){var r=o,a=_e(n),i=[];e:{var l=Ot.get(e);if(void 0!==l){var s=fn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":s=An;break;case"focusin":u="focus",s=vn;break;case"focusout":u="blur",s=vn;break;case"beforeblur":case"afterblur":s=vn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=hn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=bn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=On;break;case Tt:case Lt:case At:s=yn;break;case Nt:s=Pn;break;case"scroll":s=mn;break;case"wheel":s=In;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=Nn}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var g=(p=m).stateNode;if(5===p.tag&&null!==g&&(p=g,null!==f&&(null!=(g=$e(m,f))&&c.push(Mr(m,g,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,a),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!ta(u)&&!u[Jr])&&(s||l)&&(l=a.window===a?a:(l=a.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?ta(u):null)&&(u!==(d=Ye(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=hn,g="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=Nn,g="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:ra(s),p=null==u?l:ra(u),(l=new c(g,m+"leave",s,n,a)).target=d,l.relatedTarget=p,g=null,ta(a)===r&&((c=new c(f,m+"enter",u,n,a)).target=p,c.relatedTarget=d,g=c),d=g,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Fr(p))m++;for(p=0,g=f;g;g=Fr(g))p++;for(;0<m-p;)c=Fr(c),m--;for(;0<p-m;)f=Fr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Fr(c),f=Fr(f)}c=null}else c=null;null!==s&&Br(i,l,s,c,!1),null!==u&&null!==d&&Br(i,d,u,c,!0)}if("select"===(s=(l=r?ra(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var h=Qn;else if(Gn(l))if(Jn)h=sr;else{h=ir;var b=or}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(h=lr);switch(h&&(h=h(e,r))?Wn(i,h,n,a):(b&&b(e,l,r),"focusout"===e&&(b=l._wrapperState)&&b.controlled&&"number"===l.type&&ae(l,"number",l.value)),b=r?ra(r):window,e){case"focusin":(Gn(b)||"true"===b.contentEditable)&&(vr=b,yr=r,wr=null);break;case"focusout":wr=yr=vr=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,kr(i,n,a);break;case"selectionchange":if(br)break;case"keydown":case"keyup":kr(i,n,a)}var v;if(Dn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Hn?jn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&($n&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Hn&&(v=nn()):(en="value"in(Jt=a)?Jt.value:Jt.textContent,Hn=!0)),0<(b=Dr(r,y)).length&&(y=new kn(y,e,null,n,a),i.push({event:y,listeners:b}),v?y.data=v:null!==(v=Zn(n))&&(y.data=v))),(v=Bn?function(e,t){switch(e){case"compositionend":return Zn(t);case"keypress":return 32!==t.which?null:(Un=!0,zn);case"textInput":return(e=t.data)===zn&&Un?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Dn&&jn(e,t)?(e=nn(),tn=en=Jt=null,Hn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return $n&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(a=new kn("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=v))}Lr(i,t)}))}function Mr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=$e(e,n))&&r.unshift(Mr(e,o,a)),null!=(o=$e(e,t))&&r.push(Mr(e,o,a))),e=e.return}return r}function Fr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Br(e,t,n,r,a){for(var o=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,a?null!=(s=$e(n,o))&&i.unshift(Mr(n,s,l)):a||null!=(s=$e(n,o))&&i.push(Mr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function $r(){}var zr=null,Ur=null;function jr(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Zr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Hr="function"==typeof setTimeout?setTimeout:void 0,Vr="function"==typeof clearTimeout?clearTimeout:void 0;function Gr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Yr=0;var Kr=Math.random().toString(36).slice(2),Xr="__reactFiber$"+Kr,Qr="__reactProps$"+Kr,Jr="__reactContainer$"+Kr,ea="__reactEvents$"+Kr;function ta(e){var t=e[Xr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Xr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=qr(e);null!==e;){if(n=e[Xr])return n;e=qr(e)}return t}n=(e=n).parentNode}return null}function na(e){return!(e=e[Xr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ra(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function aa(e){return e[Qr]||null}function oa(e){var t=e[ea];return void 0===t&&(t=e[ea]=new Set),t}var ia=[],la=-1;function sa(e){return{current:e}}function ua(e){0>la||(e.current=ia[la],ia[la]=null,la--)}function ca(e,t){la++,ia[la]=e.current,e.current=t}var da={},fa=sa(da),pa=sa(!1),ma=da;function ga(e,t){var n=e.type.contextTypes;if(!n)return da;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function ha(e){return null!=(e=e.childContextTypes)}function ba(){ua(pa),ua(fa)}function va(e,t,n){if(fa.current!==da)throw Error(i(168));ca(fa,t),ca(pa,n)}function ya(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in e))throw Error(i(108,W(t)||"Unknown",o));return a({},n,r)}function wa(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||da,ma=fa.current,ca(fa,e),ca(pa,pa.current),!0}function Ea(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=ya(e,t,ma),r.__reactInternalMemoizedMergedChildContext=e,ua(pa),ua(fa),ca(fa,e)):ua(pa),ca(pa,n)}var ka=null,Sa=null,xa=o.unstable_runWithPriority,_a=o.unstable_scheduleCallback,Ca=o.unstable_cancelCallback,Ta=o.unstable_shouldYield,La=o.unstable_requestPaint,Aa=o.unstable_now,Na=o.unstable_getCurrentPriorityLevel,Oa=o.unstable_ImmediatePriority,Pa=o.unstable_UserBlockingPriority,Ra=o.unstable_NormalPriority,Ia=o.unstable_LowPriority,Ma=o.unstable_IdlePriority,Da={},Fa=void 0!==La?La:function(){},Ba=null,$a=null,za=!1,Ua=Aa(),ja=1e4>Ua?Aa:function(){return Aa()-Ua};function Za(){switch(Na()){case Oa:return 99;case Pa:return 98;case Ra:return 97;case Ia:return 96;case Ma:return 95;default:throw Error(i(332))}}function Ha(e){switch(e){case 99:return Oa;case 98:return Pa;case 97:return Ra;case 96:return Ia;case 95:return Ma;default:throw Error(i(332))}}function Va(e,t){return e=Ha(e),xa(e,t)}function Ga(e,t,n){return e=Ha(e),_a(e,t,n)}function Wa(){if(null!==$a){var e=$a;$a=null,Ca(e)}qa()}function qa(){if(!za&&null!==Ba){za=!0;var e=0;try{var t=Ba;Va(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Ba=null}catch(n){throw null!==Ba&&(Ba=Ba.slice(e+1)),_a(Oa,Wa),n}finally{za=!1}}}var Ya=E.ReactCurrentBatchConfig;function Ka(e,t){if(e&&e.defaultProps){for(var n in t=a({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xa=sa(null),Qa=null,Ja=null,eo=null;function to(){eo=Ja=Qa=null}function no(e){var t=Xa.current;ua(Xa),e.type._context._currentValue=t}function ro(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ao(e,t){Qa=e,eo=Ja=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function oo(e,t){if(eo!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(eo=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Ja){if(null===Qa)throw Error(i(308));Ja=t,Qa.dependencies={lanes:0,firstContext:t,responders:null}}else Ja=Ja.next=t;return e._currentValue}var io=!1;function lo(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function so(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function uo(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function co(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function fo(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?a=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function po(e,t,n,r){var o=e.updateQueue;io=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=o.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,g=i;switch(s=t,p=n,g.tag){case 1:if("function"==typeof(m=g.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=g.payload)?m.call(p,f,s):m))break e;f=a({},f,s);break e;case 2:io=!0}}null!==i.callback&&(e.flags|=32,null===(s=o.effects)?o.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=o.shared.pending))break;i=s.next,s.next=null,o.lastBaseUpdate=s,o.shared.pending=null}}null===d&&(u=f),o.baseState=u,o.firstBaseUpdate=c,o.lastBaseUpdate=d,Ul|=l,e.lanes=l,e.memoizedState=f}}function mo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(i(191,a));a.call(r)}}}var go=(new r.Component).refs;function ho(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:a({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var bo={isMounted:function(e){return!!(e=e._reactInternals)&&Ye(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),a=ps(e),o=uo(r,a);o.payload=t,null!=n&&(o.callback=n),co(e,o),ms(e,a,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),a=ps(e),o=uo(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),co(e,o),ms(e,a,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),a=uo(n,r);a.tag=2,null!=t&&(a.callback=t),co(e,a),ms(e,r,n)}};function vo(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(a,o))}function yo(e,t,n){var r=!1,a=da,o=t.contextType;return"object"==typeof o&&null!==o?o=oo(o):(a=ha(t)?ma:fa.current,o=(r=null!=(r=t.contextTypes))?ga(e,a):da),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=bo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function wo(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&bo.enqueueReplaceState(t,t.state,null)}function Eo(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=go,lo(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=oo(o):(o=ha(t)?ma:fa.current,a.context=ga(e,o)),po(e,n,a,r),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(ho(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&bo.enqueueReplaceState(a,a.state,null),po(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4)}var ko=Array.isArray;function So(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var a=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===a?t.ref:(t=function(e){var t=r.refs;t===go&&(t=r.refs={}),null===e?delete t[a]:t[a]=e},t._stringRef=a,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function xo(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function _o(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t){return(e=Gs(e,t)).index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ks(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=a(t,n.props)).ref=So(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=So(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Xs(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=qs(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ks(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=So(e,null,t),n.return=e,n;case S:return(t=Xs(t,e.mode,n)).return=e,t}if(ko(t)||j(t))return(t=qs(t,e.mode,n,null)).return=e,t;xo(e,t)}return null}function p(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==a?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===a?n.type===x?d(e,t,n.props.children,r,a):u(e,t,n,r):null;case S:return n.key===a?c(e,t,n,r):null}if(ko(n)||j(n))return null!==a?null:d(e,t,n,r,null);xo(e,n)}return null}function m(e,t,n,r,a){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return e=e.get(null===r.key?n:r.key)||null,r.type===x?d(t,e,r.props.children,a,r.key):u(t,e,r,a);case S:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a)}if(ko(r)||j(r))return d(t,e=e.get(n)||null,r,a,null);xo(t,r)}return null}function g(a,i,l,s){for(var u=null,c=null,d=i,g=i=0,h=null;null!==d&&g<l.length;g++){d.index>g?(h=d,d=null):h=d.sibling;var b=p(a,d,l[g],s);if(null===b){null===d&&(d=h);break}e&&d&&null===b.alternate&&t(a,d),i=o(b,i,g),null===c?u=b:c.sibling=b,c=b,d=h}if(g===l.length)return n(a,d),u;if(null===d){for(;g<l.length;g++)null!==(d=f(a,l[g],s))&&(i=o(d,i,g),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(a,d);g<l.length;g++)null!==(h=m(d,a,g,l[g],s))&&(e&&null!==h.alternate&&d.delete(null===h.key?g:h.key),i=o(h,i,g),null===c?u=h:c.sibling=h,c=h);return e&&d.forEach((function(e){return t(a,e)})),u}function h(a,l,s,u){var c=j(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,g=l,h=l=0,b=null,v=s.next();null!==g&&!v.done;h++,v=s.next()){g.index>h?(b=g,g=null):b=g.sibling;var y=p(a,g,v.value,u);if(null===y){null===g&&(g=b);break}e&&g&&null===y.alternate&&t(a,g),l=o(y,l,h),null===d?c=y:d.sibling=y,d=y,g=b}if(v.done)return n(a,g),c;if(null===g){for(;!v.done;h++,v=s.next())null!==(v=f(a,v.value,u))&&(l=o(v,l,h),null===d?c=v:d.sibling=v,d=v);return c}for(g=r(a,g);!v.done;h++,v=s.next())null!==(v=m(g,a,h,v.value,u))&&(e&&null!==v.alternate&&g.delete(null===v.key?h:v.key),l=o(v,l,h),null===d?c=v:d.sibling=v,d=v);return e&&g.forEach((function(e){return t(a,e)})),c}return function(e,r,o,s){var u="object"==typeof o&&null!==o&&o.type===x&&null===o.key;u&&(o=o.props.children);var c="object"==typeof o&&null!==o;if(c)switch(o.$$typeof){case k:e:{for(c=o.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(o.type===x){n(e,u.sibling),(r=a(u,o.props.children)).return=e,e=r;break e}}else if(u.elementType===o.type){n(e,u.sibling),(r=a(u,o.props)).ref=So(e,u,o),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}o.type===x?((r=qs(o.props.children,e.mode,s,o.key)).return=e,e=r):((s=Ws(o.type,o.key,o.props,null,e.mode,s)).ref=So(e,r,o),s.return=e,e=s)}return l(e);case S:e:{for(u=o.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),(r=a(r,o.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Xs(o,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof o||"number"==typeof o)return o=""+o,null!==r&&6===r.tag?(n(e,r.sibling),(r=a(r,o)).return=e,e=r):(n(e,r),(r=Ks(o,e.mode,s)).return=e,e=r),l(e);if(ko(o))return g(e,r,o,s);if(j(o))return h(e,r,o,s);if(c&&xo(e,o),void 0===o&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var Co=_o(!0),To=_o(!1),Lo={},Ao=sa(Lo),No=sa(Lo),Oo=sa(Lo);function Po(e){if(e===Lo)throw Error(i(174));return e}function Ro(e,t){switch(ca(Oo,t),ca(No,e),ca(Ao,Lo),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:pe(null,"");break;default:t=pe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}ua(Ao),ca(Ao,t)}function Io(){ua(Ao),ua(No),ua(Oo)}function Mo(e){Po(Oo.current);var t=Po(Ao.current),n=pe(t,e.type);t!==n&&(ca(No,e),ca(Ao,n))}function Do(e){No.current===e&&(ua(Ao),ua(No))}var Fo=sa(0);function Bo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var $o=null,zo=null,Uo=!1;function jo(e,t){var n=Hs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Zo(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Ho(e){if(Uo){var t=zo;if(t){var n=t;if(!Zo(e,t)){if(!(t=Wr(n.nextSibling))||!Zo(e,t))return e.flags=-1025&e.flags|2,Uo=!1,void($o=e);jo($o,n)}$o=e,zo=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,Uo=!1,$o=e}}function Vo(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;$o=e}function Go(e){if(e!==$o)return!1;if(!Uo)return Vo(e),Uo=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Zr(t,e.memoizedProps))for(t=zo;t;)jo(e,t),t=Wr(t.nextSibling);if(Vo(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){zo=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}zo=null}}else zo=$o?Wr(e.stateNode.nextSibling):null;return!0}function Wo(){zo=$o=null,Uo=!1}var qo=[];function Yo(){for(var e=0;e<qo.length;e++)qo[e]._workInProgressVersionPrimary=null;qo.length=0}var Ko=E.ReactCurrentDispatcher,Xo=E.ReactCurrentBatchConfig,Qo=0,Jo=null,ei=null,ti=null,ni=!1,ri=!1;function ai(){throw Error(i(321))}function oi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,a,o){if(Qo=o,Jo=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ko.current=null===e||null===e.memoizedState?Pi:Ri,e=n(r,a),ri){o=0;do{if(ri=!1,!(25>o))throw Error(i(301));o+=1,ti=ei=null,t.updateQueue=null,Ko.current=Ii,e=n(r,a)}while(ri)}if(Ko.current=Oi,t=null!==ei&&null!==ei.next,Qo=0,ti=ei=Jo=null,ni=!1,t)throw Error(i(300));return e}function li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Jo.memoizedState=ti=e:ti=ti.next=e,ti}function si(){if(null===ei){var e=Jo.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Jo.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Jo.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,a=r.baseQueue,o=n.pending;if(null!==o){if(null!==a){var l=a.next;a.next=o.next,o.next=l}r.baseQueue=a=o,n.pending=null}if(null!==a){a=a.next,r=r.baseState;var s=l=o=null,u=a;do{var c=u.lane;if((Qo&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,o=r):s=s.next=d,Jo.lanes|=c,Ul|=c}u=u.next}while(null!==u&&u!==a);null===s?o=r:s.next=l,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=o,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=si(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(null!==a){n.pending=null;var l=a=a.next;do{o=e(o,l.action),l=l.next}while(l!==a);ur(o,t.memoizedState)||(Di=!0),t.memoizedState=o,null===t.baseQueue&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function fi(e,t,n){var r=t._getVersion;r=r(t._source);var a=t._workInProgressVersionPrimary;if(null!==a?e=a===r:(e=e.mutableReadLanes,(e=(Qo&e)===e)&&(t._workInProgressVersionPrimary=r,qo.push(t))),e)return n(t._source);throw qo.push(t),Error(i(350))}function pi(e,t,n,r){var a=Rl;if(null===a)throw Error(i(349));var o=t._getVersion,l=o(t._source),s=Ko.current,u=s.useState((function(){return fi(a,t,n)})),c=u[1],d=u[0];u=ti;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,g=f.source;f=f.subscribe;var h=Jo;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=o(t._source);if(!ur(l,e)){e=n(t._source),ur(d,e)||(c(e),e=ps(h),a.mutableReadLanes|=e&a.pendingLanes),e=a.mutableReadLanes,a.entangledLanes|=e;for(var r=a.entanglements,i=e;0<i;){var s=31-Zt(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(h);a.mutableReadLanes|=r&a.pendingLanes}catch(o){n((function(){throw o}))}}))}),[t,r]),ur(m,n)&&ur(g,t)&&ur(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ni.bind(null,Jo,e),u.queue=e,u.baseQueue=null,d=fi(a,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return pi(si(),e,t,n)}function gi(e){var t=li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ni.bind(null,Jo,e),[t.memoizedState,e]}function hi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Jo.updateQueue)?(t={lastEffect:null},Jo.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function bi(e){return e={current:e},li().memoizedState=e}function vi(){return si().memoizedState}function yi(e,t,n,r){var a=li();Jo.flags|=e,a.memoizedState=hi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var a=si();r=void 0===r?null:r;var o=void 0;if(null!==ei){var i=ei.memoizedState;if(o=i.destroy,null!==r&&oi(r,i.deps))return void hi(t,n,o,r)}Jo.flags|=e,a.memoizedState=hi(1|t,n,o,r)}function Ei(e,t){return yi(516,4,e,t)}function ki(e,t){return wi(516,4,e,t)}function Si(e,t){return wi(4,2,e,t)}function xi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function _i(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,xi.bind(null,t,e),n)}function Ci(){}function Ti(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&oi(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Li(e,t){var n=si();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&oi(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ai(e,t){var n=Za();Va(98>n?98:n,(function(){e(!0)})),Va(97<n?97:n,(function(){var n=Xo.transition;Xo.transition=1;try{e(!1),t()}finally{Xo.transition=n}}))}function Ni(e,t,n){var r=fs(),a=ps(e),o={lane:a,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?o.next=o:(o.next=i.next,i.next=o),t.pending=o,i=e.alternate,e===Jo||null!==i&&i===Jo)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(o.eagerReducer=i,o.eagerState=s,ur(s,l))return}catch(u){}ms(e,a,r)}}var Oi={readContext:oo,useCallback:ai,useContext:ai,useEffect:ai,useImperativeHandle:ai,useLayoutEffect:ai,useMemo:ai,useReducer:ai,useRef:ai,useState:ai,useDebugValue:ai,useDeferredValue:ai,useTransition:ai,useMutableSource:ai,useOpaqueIdentifier:ai,unstable_isNewReconciler:!1},Pi={readContext:oo,useCallback:function(e,t){return li().memoizedState=[e,void 0===t?null:t],e},useContext:oo,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,yi(4,2,xi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return yi(4,2,e,t)},useMemo:function(e,t){var n=li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ni.bind(null,Jo,e),[r.memoizedState,e]},useRef:bi,useState:gi,useDebugValue:Ci,useDeferredValue:function(e){var t=gi(e),n=t[0],r=t[1];return Ei((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=gi(!1),t=e[0];return bi(e=Ai.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=li();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},pi(r,e,t,n)},useOpaqueIdentifier:function(){if(Uo){var e=!1,t=function(e){return{$$typeof:M,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Yr++).toString(36))),Error(i(355))})),n=gi(t)[1];return 0==(2&Jo.mode)&&(Jo.flags|=516,hi(5,(function(){n("r:"+(Yr++).toString(36))}),void 0,null)),t}return gi(t="r:"+(Yr++).toString(36)),t},unstable_isNewReconciler:!1},Ri={readContext:oo,useCallback:Ti,useContext:oo,useEffect:ki,useImperativeHandle:_i,useLayoutEffect:Si,useMemo:Li,useReducer:ci,useRef:vi,useState:function(){return ci(ui)},useDebugValue:Ci,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return ki((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},Ii={readContext:oo,useCallback:Ti,useContext:oo,useEffect:ki,useImperativeHandle:_i,useLayoutEffect:Si,useMemo:Li,useReducer:di,useRef:vi,useState:function(){return di(ui)},useDebugValue:Ci,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return ki((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[vi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},Mi=E.ReactCurrentOwner,Di=!1;function Fi(e,t,n,r){t.child=null===e?To(t,null,n,r):Co(t,e.child,n,r)}function Bi(e,t,n,r,a){n=n.render;var o=t.ref;return ao(t,a),r=ii(e,t,n,r,o,a),null===e||Di?(t.flags|=1,Fi(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function $i(e,t,n,r,a,o){if(null===e){var i=n.type;return"function"!=typeof i||Vs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,a,o))}return i=e.child,0==(a&o)&&(a=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(a,r)&&e.ref===t.ref)?ol(e,t,o):(t.flags|=1,(e=Gs(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,a,o){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(o&a))return t.lanes=e.lanes,ol(e,t,o);0!=(16384&e.flags)&&(Di=!0)}return Zi(e,t,n,r,o)}function Ui(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},ks(t,n);else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},ks(t,e),null;t.memoizedState={baseLanes:0},ks(t,null!==o?o.baseLanes:n)}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,ks(t,r);return Fi(e,t,a,n),t.child}function ji(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Zi(e,t,n,r,a){var o=ha(n)?ma:fa.current;return o=ga(t,o),ao(t,a),n=ii(e,t,n,r,o,a),null===e||Di?(t.flags|=1,Fi(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function Hi(e,t,n,r,a){if(ha(n)){var o=!0;wa(t)}else o=!1;if(ao(t,a),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),yo(t,n,r),Eo(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=oo(u):u=ga(t,u=ha(n)?ma:fa.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&wo(t,i,r,u),io=!1;var f=t.memoizedState;i.state=f,po(t,r,i,a),s=t.memoizedState,l!==r||f!==s||pa.current||io?("function"==typeof c&&(ho(t,n,c,r),s=t.memoizedState),(l=io||vo(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,so(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ka(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=oo(s):s=ga(t,s=ha(n)?ma:fa.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&wo(t,i,r,s),io=!1,f=t.memoizedState,i.state=f,po(t,r,i,a);var m=t.memoizedState;l!==d||f!==m||pa.current||io?("function"==typeof p&&(ho(t,n,p,r),m=t.memoizedState),(u=io||vo(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Vi(e,t,n,r,o,a)}function Vi(e,t,n,r,a,o){ji(e,t);var i=0!=(64&t.flags);if(!r&&!i)return a&&Ea(t,n,!1),ol(e,t,o);r=t.stateNode,Mi.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Co(t,e.child,null,o),t.child=Co(t,null,l,o)):Fi(e,t,l,o),t.memoizedState=r.state,a&&Ea(t,n,!0),t.child}function Gi(e){var t=e.stateNode;t.pendingContext?va(0,t.pendingContext,t.pendingContext!==t.context):t.context&&va(0,t.context,!1),Ro(e,t.containerInfo)}var Wi,qi,Yi,Ki,Xi={dehydrated:null,retryLane:0};function Qi(e,t,n){var r,a=t.pendingProps,o=Fo.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&o)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===a.fallback||!0===a.unstable_avoidThisFallback||(o|=1),ca(Fo,1&o),null===e?(void 0!==a.fallback&&Ho(t),e=a.children,o=a.fallback,i?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,e):"number"==typeof a.unstable_expectedLoadTime?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,t.lanes=33554432,e):((n=Ys({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(a=tl(e,t,a.children,a.fallback,n),i=t.child,o=e.child.memoizedState,i.memoizedState=null===o?{baseLanes:n}:{baseLanes:o.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Xi,a):(n=el(e,t,a.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var a=e.mode,o=e.child;return t={mode:"hidden",children:t},0==(2&a)&&null!==o?(o.childLanes=0,o.pendingProps=t):o=Ys(t,a,0,null),n=qs(n,a,r,null),o.return=e,n.return=e,o.sibling=n,e.child=o,n}function el(e,t,n,r){var a=e.child;return e=a.sibling,n=Gs(a,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,a){var o=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&o)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Gs(i,l),null!==e?r=Gs(e,r):(r=qs(r,o,a,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ro(e.return,t)}function rl(e,t,n,r,a,o){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a,lastEffect:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=a,i.lastEffect=o)}function al(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Fi(e,t,r.children,n),0!=(2&(r=Fo.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(ca(Fo,r),0==(2&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===Bo(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),rl(t,!1,a,n,o,t.lastEffect);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===Bo(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}rl(t,!0,n,null,o,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function ol(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ul|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Gs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Gs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!Uo)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return ha(t.type)&&ba(),null;case 3:return Io(),ua(pa),ua(fa),Yo(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Go(t)?t.flags|=4:r.hydrate||(t.flags|=256)),qi(t),null;case 5:Do(t);var o=Po(Oo.current);if(n=t.type,null!==e&&null!=t.stateNode)Yi(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Po(Ao.current),Go(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Xr]=t,r[Qr]=l,n){case"dialog":Ar("cancel",r),Ar("close",r);break;case"iframe":case"object":case"embed":Ar("load",r);break;case"video":case"audio":for(e=0;e<_r.length;e++)Ar(_r[e],r);break;case"source":Ar("error",r);break;case"img":case"image":case"link":Ar("error",r),Ar("load",r);break;case"details":Ar("toggle",r);break;case"input":ee(r,l),Ar("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Ar("invalid",r);break;case"textarea":se(r,l),Ar("invalid",r)}for(var u in Se(n,l),e=null,l)l.hasOwnProperty(u)&&(o=l[u],"children"===u?"string"==typeof o?r.textContent!==o&&(e=["children",o]):"number"==typeof o&&r.textContent!==""+o&&(e=["children",""+o]):s.hasOwnProperty(u)&&null!=o&&"onScroll"===u&&Ar("scroll",r));switch(n){case"input":K(r),re(r,l,!0);break;case"textarea":K(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=$r)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===o.nodeType?o:o.ownerDocument,e===de.html&&(e=fe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Xr]=t,e[Qr]=r,Wi(e,t,!1,!1),t.stateNode=e,u=xe(n,r),n){case"dialog":Ar("cancel",e),Ar("close",e),o=r;break;case"iframe":case"object":case"embed":Ar("load",e),o=r;break;case"video":case"audio":for(o=0;o<_r.length;o++)Ar(_r[o],e);o=r;break;case"source":Ar("error",e),o=r;break;case"img":case"image":case"link":Ar("error",e),Ar("load",e),o=r;break;case"details":Ar("toggle",e),o=r;break;case"input":ee(e,r),o=J(e,r),Ar("invalid",e);break;case"option":o=oe(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=a({},r,{value:void 0}),Ar("invalid",e);break;case"textarea":se(e,r),o=le(e,r),Ar("invalid",e);break;default:o=r}Se(n,o);var c=o;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&he(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&be(e,d):"number"==typeof d&&be(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Ar("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":K(e),re(e,r,!1);break;case"textarea":K(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=$r)}jr(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ki(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Po(Oo.current),Po(Ao.current),Go(t)?(r=t.stateNode,n=t.memoizedProps,r[Xr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Xr]=t,t.stateNode=r)}return null;case 13:return ua(Fo),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Go(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Fo.current)?0===Bl&&(Bl=3):(0!==Bl&&3!==Bl||(Bl=4),null===Rl||0==(134217727&Ul)&&0==(134217727&jl)||vs(Rl,Ml))),(r||n)&&(t.flags|=4),null);case 4:return Io(),qi(t),null===e&&Or(t.stateNode.containerInfo),null;case 10:return no(t),null;case 19:if(ua(Fo),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Bl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Bo(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return ca(Fo,1&Fo.current|2),t.child}e=e.sibling}null!==r.tail&&ja()>Gl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Bo(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!Uo)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*ja()-r.renderingStartTime>Gl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=ja(),n.sibling=null,t=Fo.current,ca(Fo,l?1&t|2:1&t),n):null;case 23:case 24:return Ss(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:ha(e.type)&&ba();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Io(),ua(pa),ua(fa),Yo(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Do(e),null;case 13:return ua(Fo),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return ua(Fo),null;case 4:return Io(),null;case 10:return no(e),null;case 23:case 24:return Ss(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=G(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Wi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},qi=function(){},Yi=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Po(Ao.current);var i,l=null;switch(n){case"input":o=J(e,o),r=J(e,r),l=[];break;case"option":o=oe(e,o),r=oe(e,r),l=[];break;case"select":o=a({},o,{value:void 0}),r=a({},r,{value:void 0}),l=[];break;case"textarea":o=le(e,o),r=le(e,r),l=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=$r)}for(d in Se(n,r),n=null,o)if(!r.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var u=o[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=o?o[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Ar("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===M?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Ki=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=uo(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Kl||(Kl=!0,Xl=r),cl(0,t)},n}function pl(e,t,n){(n=uo(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return cl(0,t),r(a)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Ql?Ql=new Set([this]):Ql.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function gl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function hl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ka(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Gr(t.stateNode.containerInfo))}throw Error(i(163))}function bl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var a=e;r=a.next,0!=(4&(a=a.tag))&&0!=(1&a)&&(Fs(n,e),Ds(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ka(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&mo(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}mo(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&jr(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function vl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var a=n.memoizedProps.style;a=null!=a&&a.hasOwnProperty("display")?a.display:null,r.style.display=we("display",a)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function yl(e,t){if(Sa&&"function"==typeof Sa.onCommitFiberUnmount)try{Sa.onCommitFiberUnmount(ka,t)}catch(o){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,a=r.destroy;if(r=r.tag,void 0!==a)if(0!=(4&r))Fs(t,n);else{r=t;try{a()}catch(o){zs(r,o)}}n=n.next}while(n!==e)}break;case 1:if(gl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(o){zs(t,o)}break;case 5:gl(t);break;case 4:_l(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function kl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(be(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?Sl(e,n,t):xl(e,n,t)}function Sl(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=$r));else if(4!==r&&null!==(e=e.child))for(Sl(e,t,n),e=e.sibling;null!==e;)Sl(e,t,n),e=e.sibling}function xl(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(xl(e,t,n),e=e.sibling;null!==e;)xl(e,t,n),e=e.sibling}function _l(e,t){for(var n,r,a=t,o=!1;;){if(!o){o=a.return;e:for(;;){if(null===o)throw Error(i(160));switch(n=o.stateNode,o.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}o=o.return}o=!0}if(5===a.tag||6===a.tag){e:for(var l=e,s=a,u=s;;)if(yl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=a.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(a.stateNode)}else if(4===a.tag){if(null!==a.child){n=a.stateNode.containerInfo,r=!0,a.child.return=a,a=a.child;continue}}else if(yl(e,a),null!==a.child){a.child.return=a,a=a.child;continue}if(a===t)break;for(;null===a.sibling;){if(null===a.return||a.return===t)return;4===(a=a.return).tag&&(o=!1)}a.sibling.return=a.return,a=a.sibling}}function Cl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var a=null!==e?e.memoizedProps:r;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[Qr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),xe(e,a),t=xe(e,r),a=0;a<o.length;a+=2){var l=o[a],s=o[a+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?he(n,s):"children"===l?be(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(o=r.value)?ie(n,!!r.multiple,o,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Vl=ja(),vl(t.child,!0)),void Tl(t);case 19:return void Tl(t);case 23:case 24:return void vl(t,null!==t.memoizedState)}throw Error(i(163))}function Tl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=js.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Ll(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Al=Math.ceil,Nl=E.ReactCurrentDispatcher,Ol=E.ReactCurrentOwner,Pl=0,Rl=null,Il=null,Ml=0,Dl=0,Fl=sa(0),Bl=0,$l=null,zl=0,Ul=0,jl=0,Zl=0,Hl=null,Vl=0,Gl=1/0;function Wl(){Gl=ja()+500}var ql,Yl=null,Kl=!1,Xl=null,Ql=null,Jl=!1,es=null,ts=90,ns=[],rs=[],as=null,os=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Pl)?ja():-1!==ls?ls:ls=ja()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Za()?1:2;if(0===ss&&(ss=zl),0!==Ya.transition){0!==us&&(us=null!==Hl?Hl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Za(),0!=(4&Pl)&&98===e?e=$t(12,ss):e=$t(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<os)throw os=0,is=null,Error(i(185));if(null===(e=gs(e,t)))return null;jt(e,t,n),e===Rl&&(jl|=t,4===Bl&&vs(e,Ml));var r=Za();1===t?0!=(8&Pl)&&0==(48&Pl)?ys(e):(hs(e,n),0===Pl&&(Wl(),Wa())):(0==(4&Pl)||98!==r&&99!==r||(null===as?as=new Set([e]):as.add(e)),hs(e,n)),Hl=e}function gs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function hs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,a=e.pingedLanes,o=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Zt(l),u=1<<s,c=o[s];if(-1===c){if(0==(u&r)||0!=(u&a)){c=t,Dt(u);var d=Mt;o[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Ft(e,e===Rl?Ml:0),t=Mt,0===r)null!==n&&(n!==Da&&Ca(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Da&&Ca(n)}15===t?(n=ys.bind(null,e),null===Ba?(Ba=[n],$a=_a(Oa,qa)):Ba.push(n),n=Da):14===t?n=Ga(99,ys.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Ga(n,bs.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function bs(e){if(ls=-1,us=ss=0,0!=(48&Pl))throw Error(i(327));var t=e.callbackNode;if(Ms()&&e.callbackNode!==t)return null;var n=Ft(e,e===Rl?Ml:0);if(0===n)return null;var r=n,a=Pl;Pl|=16;var o=Cs();for(Rl===e&&Ml===r||(Wl(),xs(e,r));;)try{As();break}catch(s){_s(e,s)}if(to(),Nl.current=o,Pl=a,null!==Il?r=0:(Rl=null,Ml=0,r=Bl),0!=(zl&jl))xs(e,0);else if(0!==r){if(2===r&&(Pl|=64,e.hydrate&&(e.hydrate=!1,Gr(e.containerInfo)),0!==(n=Bt(e))&&(r=Ts(e,n))),1===r)throw t=$l,xs(e,0),vs(e,n),hs(e,ja()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ps(e);break;case 3:if(vs(e,n),(62914560&n)===n&&10<(r=Vl+500-ja())){if(0!==Ft(e,0))break;if(((a=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Hr(Ps.bind(null,e),r);break}Ps(e);break;case 4:if(vs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,a=-1;0<n;){var l=31-Zt(n);o=1<<l,(l=r[l])>a&&(a=l),n&=~o}if(n=a,10<(n=(120>(n=ja()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Al(n/1960))-n)){e.timeoutHandle=Hr(Ps.bind(null,e),n);break}Ps(e);break;default:throw Error(i(329))}}return hs(e,ja()),e.callbackNode===t?bs.bind(null,e):null}function vs(e,t){for(t&=~Zl,t&=~jl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Zt(t),r=1<<n;e[n]=-1,t&=~r}}function ys(e){if(0!=(48&Pl))throw Error(i(327));if(Ms(),e===Rl&&0!=(e.expiredLanes&Ml)){var t=Ml,n=Ts(e,t);0!=(zl&jl)&&(n=Ts(e,t=Ft(e,t)))}else n=Ts(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(Pl|=64,e.hydrate&&(e.hydrate=!1,Gr(e.containerInfo)),0!==(t=Bt(e))&&(n=Ts(e,t))),1===n)throw n=$l,xs(e,0),vs(e,t),hs(e,ja()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ps(e),hs(e,ja()),null}function ws(e,t){var n=Pl;Pl|=1;try{return e(t)}finally{0===(Pl=n)&&(Wl(),Wa())}}function Es(e,t){var n=Pl;Pl&=-2,Pl|=8;try{return e(t)}finally{0===(Pl=n)&&(Wl(),Wa())}}function ks(e,t){ca(Fl,Dl),Dl|=t,zl|=t}function Ss(){Dl=Fl.current,ua(Fl)}function xs(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Vr(n)),null!==Il)for(n=Il.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&ba();break;case 3:Io(),ua(pa),ua(fa),Yo();break;case 5:Do(r);break;case 4:Io();break;case 13:case 19:ua(Fo);break;case 10:no(r);break;case 23:case 24:Ss()}n=n.return}Rl=e,Il=Gs(e.current,null),Ml=Dl=zl=t,Bl=0,$l=null,Zl=jl=Ul=0}function _s(e,t){for(;;){var n=Il;try{if(to(),Ko.current=Oi,ni){for(var r=Jo.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}ni=!1}if(Qo=0,ti=ei=Jo=null,ri=!1,Ol.current=null,null===n||null===n.return){Bl=1,$l=t,Il=null;break}e:{var o=e,i=n.return,l=n,s=t;if(t=Ml,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Fo.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var g=f.memoizedProps;p=void 0!==g.fallback&&(!0!==g.unstable_avoidThisFallback||!d)}}if(p){var h=f.updateQueue;if(null===h){var b=new Set;b.add(u),f.updateQueue=b}else h.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var v=uo(-1,1);v.tag=2,co(l,v)}l.lanes|=1;break e}s=void 0,l=t;var y=o.pingCache;if(null===y?(y=o.pingCache=new dl,s=new Set,y.set(u,s)):void 0===(s=y.get(u))&&(s=new Set,y.set(u,s)),!s.has(l)){s.add(l);var w=Us.bind(null,o,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Bl&&(Bl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:o=s,f.flags|=4096,t&=-t,f.lanes|=t,fo(f,fl(0,o,t));break e;case 1:o=s;var E=f.type,k=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==k&&"function"==typeof k.componentDidCatch&&(null===Ql||!Ql.has(k)))){f.flags|=4096,t&=-t,f.lanes|=t,fo(f,pl(f,o,t));break e}}f=f.return}while(null!==f)}Os(n)}catch(S){t=S,Il===n&&null!==n&&(Il=n=n.return);continue}break}}function Cs(){var e=Nl.current;return Nl.current=Oi,null===e?Oi:e}function Ts(e,t){var n=Pl;Pl|=16;var r=Cs();for(Rl===e&&Ml===t||xs(e,t);;)try{Ls();break}catch(a){_s(e,a)}if(to(),Pl=n,Nl.current=r,null!==Il)throw Error(i(261));return Rl=null,Ml=0,Bl}function Ls(){for(;null!==Il;)Ns(Il)}function As(){for(;null!==Il&&!Ta();)Ns(Il)}function Ns(e){var t=ql(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?Os(e):Il=t,Ol.current=null}function Os(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(Il=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||0==(4&n.mode)){for(var r=0,a=n.child;null!==a;)r|=a.lanes|a.childLanes,a=a.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(Il=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Il=t);Il=t=e}while(null!==t);0===Bl&&(Bl=5)}function Ps(e){var t=Za();return Va(99,Rs.bind(null,e,t)),null}function Rs(e,t){do{Ms()}while(null!==es);if(0!=(48&Pl))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,a=r,o=e.pendingLanes&~a;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=a,e.mutableReadLanes&=a,e.entangledLanes&=a,a=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<o;){var u=31-Zt(o),c=1<<u;a[u]=0,l[u]=-1,s[u]=-1,o&=~c}if(null!==as&&0==(24&r)&&as.has(e)&&as.delete(e),e===Rl&&(Il=Rl=null,Ml=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(a=Pl,Pl|=32,Ol.current=null,zr=qt,hr(l=gr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,o=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(C){s=null;break e}var d=0,f=-1,p=-1,m=0,g=0,h=l,b=null;t:for(;;){for(var v;h!==s||0!==o&&3!==h.nodeType||(f=d+o),h!==u||0!==c&&3!==h.nodeType||(p=d+c),3===h.nodeType&&(d+=h.nodeValue.length),null!==(v=h.firstChild);)b=h,h=v;for(;;){if(h===l)break t;if(b===s&&++m===o&&(f=d),b===u&&++g===c&&(p=d),null!==(v=h.nextSibling))break;b=(h=b).parentNode}h=v}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;Ur={focusedElem:l,selectionRange:s},qt=!1,cs=null,ds=!1,Yl=r;do{try{Is()}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);cs=null,Yl=r;do{try{for(l=e;null!==Yl;){var y=Yl.flags;if(16&y&&be(Yl.stateNode,""),128&y){var w=Yl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&y){case 2:kl(Yl),Yl.flags&=-3;break;case 6:kl(Yl),Yl.flags&=-3,Cl(Yl.alternate,Yl);break;case 1024:Yl.flags&=-1025;break;case 1028:Yl.flags&=-1025,Cl(Yl.alternate,Yl);break;case 4:Cl(Yl.alternate,Yl);break;case 8:_l(l,s=Yl);var k=s.alternate;wl(s),null!==k&&wl(k)}Yl=Yl.nextEffect}}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);if(E=Ur,w=gr(),y=E.focusedElem,l=E.selectionRange,w!==y&&y&&y.ownerDocument&&mr(y.ownerDocument.documentElement,y)){null!==l&&hr(y)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(E,y.value.length)):(E=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=y.textContent.length,k=Math.min(l.start,s),l=void 0===l.end?k:Math.min(l.end,s),!E.extend&&k>l&&(s=l,l=k,k=s),s=pr(y,k),o=pr(y,l),s&&o&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==o.node||E.focusOffset!==o.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),k>l?(E.addRange(w),E.extend(o.node,o.offset)):(w.setEnd(o.node,o.offset),E.addRange(w))))),w=[];for(E=y;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(E=w[y]).element.scrollLeft=E.left,E.element.scrollTop=E.top}qt=!!zr,Ur=zr=null,e.current=n,Yl=r;do{try{for(y=e;null!==Yl;){var S=Yl.flags;if(36&S&&bl(y,Yl.alternate,Yl),128&S){w=void 0;var x=Yl.ref;if(null!==x){var _=Yl.stateNode;Yl.tag,w=_,"function"==typeof x?x(w):x.current=w}}Yl=Yl.nextEffect}}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);Yl=null,Fa(),Pl=a}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Yl=r;null!==Yl;)t=Yl.nextEffect,Yl.nextEffect=null,8&Yl.flags&&((S=Yl).sibling=null,S.stateNode=null),Yl=t;if(0===(r=e.pendingLanes)&&(Ql=null),1===r?e===is?os++:(os=0,is=e):os=0,n=n.stateNode,Sa&&"function"==typeof Sa.onCommitFiberRoot)try{Sa.onCommitFiberRoot(ka,n,void 0,64==(64&n.current.flags))}catch(C){}if(hs(e,ja()),Kl)throw Kl=!1,e=Xl,Xl=null,e;return 0!=(8&Pl)||Wa(),null}function Is(){for(;null!==Yl;){var e=Yl.alternate;ds||null===cs||(0!=(8&Yl.flags)?Je(Yl,cs)&&(ds=!0):13===Yl.tag&&Ll(e,Yl)&&Je(Yl,cs)&&(ds=!0));var t=Yl.flags;0!=(256&t)&&hl(e,Yl),0==(512&t)||Jl||(Jl=!0,Ga(97,(function(){return Ms(),null}))),Yl=Yl.nextEffect}}function Ms(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Va(e,Bs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Ga(97,(function(){return Ms(),null})))}function Fs(e,t){rs.push(t,e),Jl||(Jl=!0,Ga(97,(function(){return Ms(),null})))}function Bs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Pl))throw Error(i(331));var t=Pl;Pl|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var a=n[r],o=n[r+1],l=a.destroy;if(a.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){a=n[r],o=n[r+1];try{var s=a.create;a.destroy=s()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Pl=t,Wa(),!0}function $s(e,t,n){co(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=gs(e,1))&&(jt(e,1,t),hs(e,t))}function zs(e,t){if(3===e.tag)$s(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){$s(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Ql||!Ql.has(r))){var a=pl(n,e=ul(t,e),1);if(co(n,a),a=fs(),null!==(n=gs(n,1)))jt(n,1,a),hs(n,a);else if("function"==typeof r.componentDidCatch&&(null===Ql||!Ql.has(r)))try{r.componentDidCatch(t,e)}catch(o){}break}}n=n.return}}function Us(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Rl===e&&(Ml&n)===n&&(4===Bl||3===Bl&&(62914560&Ml)===Ml&&500>ja()-Vl?xs(e,0):Zl|=n),hs(e,t)}function js(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Za()?1:2:(0===ss&&(ss=zl),0===(t=zt(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=gs(e,t))&&(jt(e,t,n),hs(e,n))}function Zs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Hs(e,t,n,r){return new Zs(e,t,n,r)}function Vs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Gs(e,t){var n=e.alternate;return null===n?((n=Hs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,a,o){var l=2;if(r=e,"function"==typeof e)Vs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case x:return qs(n.children,a,o,t);case D:l=8,a|=16;break;case _:l=8,a|=1;break;case C:return(e=Hs(12,n,t,8|a)).elementType=C,e.type=C,e.lanes=o,e;case N:return(e=Hs(13,n,t,a)).type=N,e.elementType=N,e.lanes=o,e;case O:return(e=Hs(19,n,t,a)).elementType=O,e.lanes=o,e;case F:return Ys(n,a,o,t);case B:return(e=Hs(24,n,t,a)).elementType=B,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:l=10;break e;case L:l=9;break e;case A:l=11;break e;case P:l=14;break e;case R:l=16,r=null;break e;case I:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Hs(l,n,t,a)).elementType=e,t.type=r,t.lanes=o,t}function qs(e,t,n,r){return(e=Hs(7,e,r,t)).lanes=n,e}function Ys(e,t,n,r){return(e=Hs(23,e,r,t)).elementType=F,e.lanes=n,e}function Ks(e,t,n){return(e=Hs(6,e,null,t)).lanes=n,e}function Xs(e,t,n){return(t=Hs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Qs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n,r){var a=t.current,o=fs(),l=ps(a);e:if(n){t:{if(Ye(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(ha(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(ha(u)){n=ya(n,u,s);break e}}n=s}else n=da;return null===t.context?t.context=n:t.pendingContext=n,(t=uo(o,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),co(a,t),ms(a,l,o),l}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Qs(e,t,null!=n&&!0===n.hydrate),t=Hs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,lo(t),e[Jr]=n.current,Or(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var a=(t=r[e])._getVersion;a=a(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,a]:n.mutableSourceEagerHydrationData.push(t,a)}this._internalRoot=n}function au(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ou(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o._internalRoot;if("function"==typeof a){var l=a;a=function(){var e=eu(i);l.call(e)}}Js(t,i,e,a)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=o._internalRoot,"function"==typeof a){var s=a;a=function(){var e=eu(i);s.call(e)}}Es((function(){Js(t,i,e,a)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!au(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||pa.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Gi(t),Wo();break;case 5:Mo(t);break;case 1:ha(t.type)&&wa(t);break;case 4:Ro(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var a=t.type._context;ca(Xa,a._currentValue),a._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Qi(e,t,n):(ca(Fo,1&Fo.current),null!==(t=ol(e,t,n))?t.sibling:null);ca(Fo,1&Fo.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return al(e,t,n);t.flags|=64}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),ca(Fo,Fo.current),r)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return ol(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=ga(t,fa.current),ao(t,n),a=ii(null,t,r,e,a,n),t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,ha(r)){var o=!0;wa(t)}else o=!1;t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,lo(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&ho(t,r,l,e),a.updater=bo,t.stateNode=a,a._reactInternals=t,Eo(t,r,e,n),t=Vi(null,t,r,!0,o,n)}else t.tag=0,Fi(null,t,a,n),t=t.child;return t;case 16:a=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=(o=a._init)(a._payload),t.type=a,o=t.tag=function(e){if("function"==typeof e)return Vs(e)?1:0;if(null!=e){if((e=e.$$typeof)===A)return 11;if(e===P)return 14}return 2}(a),e=Ka(a,e),o){case 0:t=Zi(null,t,a,e,n);break e;case 1:t=Hi(null,t,a,e,n);break e;case 11:t=Bi(null,t,a,e,n);break e;case 14:t=$i(null,t,a,Ka(a.type,e),r,n);break e}throw Error(i(306,a,""))}return t;case 0:return r=t.type,a=t.pendingProps,Zi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 1:return r=t.type,a=t.pendingProps,Hi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 3:if(Gi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,a=null!==(a=t.memoizedState)?a.element:null,so(e,t),po(t,r,null,n),(r=t.memoizedState.element)===a)Wo(),t=ol(e,t,n);else{if((o=(a=t.stateNode).hydrate)&&(zo=Wr(t.stateNode.containerInfo.firstChild),$o=t,o=Uo=!0),o){if(null!=(e=a.mutableSourceEagerHydrationData))for(a=0;a<e.length;a+=2)(o=e[a])._workInProgressVersionPrimary=e[a+1],qo.push(o);for(n=To(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Fi(e,t,r,n),Wo();t=t.child}return t;case 5:return Mo(t),null===e&&Ho(t),r=t.type,a=t.pendingProps,o=null!==e?e.memoizedProps:null,l=a.children,Zr(r,a)?l=null:null!==o&&Zr(r,o)&&(t.flags|=16),ji(e,t),Fi(e,t,l,n),t.child;case 6:return null===e&&Ho(t),null;case 13:return Qi(e,t,n);case 4:return Ro(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Co(t,null,r,n):Fi(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,Bi(e,t,r,a=t.elementType===r?a:Ka(r,a),n);case 7:return Fi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,a=t.pendingProps,l=t.memoizedProps,o=a.value;var s=t.type._context;if(ca(Xa,s._currentValue),s._currentValue=o,null!==l)if(s=l.value,0===(o=ur(s,o)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,o):1073741823))){if(l.children===a.children&&!pa.current){t=ol(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&o)){1===s.tag&&((c=uo(-1,n&-n)).tag=2,co(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),ro(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Fi(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=(o=t.pendingProps).children,ao(t,n),r=r(a=oo(a,o.unstable_observedBits)),t.flags|=1,Fi(e,t,r,n),t.child;case 14:return o=Ka(a=t.type,t.pendingProps),$i(e,t,a,o=Ka(a.type,o),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Ka(r,a),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,ha(r)?(e=!0,wa(t)):e=!1,ao(t,n),yo(t,r,a),Eo(t,r,a,n),Vi(null,t,r,!0,e,n);case 19:return al(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Js(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Js(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ms(e,4,fs()),nu(e,4))},tt=function(e){13===e.tag&&(ms(e,67108864,fs()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Ce=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=aa(r);if(!a)throw Error(i(90));X(r),ne(r,a)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Pe=ws,Re=function(e,t,n,r,a){var o=Pl;Pl|=4;try{return Va(98,e.bind(null,t,n,r,a))}finally{0===(Pl=o)&&(Wl(),Wa())}},Ie=function(){0==(49&Pl)&&(function(){if(null!==as){var e=as;as=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,hs(e,ja())}))}Wa()}(),Ms())},Me=function(e,t){var n=Pl;Pl|=2;try{return e(t)}finally{0===(Pl=n)&&(Wl(),Wa())}};var lu={Events:[na,ra,aa,Ne,Oe,Ms,{current:!1}]},su={findFiberByHostInstance:ta,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:su.bundleType,version:su.version,rendererPackageName:su.rendererPackageName,rendererConfig:su.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Qe(e))?null:e.stateNode},findFiberByHostInstance:su.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{ka=cu.inject(uu),Sa=cu}catch(ge){}}t.hydrate=function(e,t,n){if(!au(t))throw Error(i(200));return ou(null,e,t,!0,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!o(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!o(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!o(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>V,ql:()=>J});var r=n(7294),a=n(5697),o=n.n(a),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=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},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map((function(e){return h[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},x=function(e){var t=S(e,h.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},_=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},L=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var a={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var l=o[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][u]&&(a[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var l=o[i],s=f({},r[l],a[l]);r[l]=s}return e}),[]).reverse()},A=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},N=function(e){return Array.isArray(e)?e.join(""):e},O=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},P=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},R=[h.NOSCRIPT,h.SCRIPT,h.STYLE],I=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},M=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},B=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=D(n,a),[r.createElement(h.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=M(n),o=N(t);return a?"<"+e+' data-rh="true" '+a+">"+I(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+I(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return M(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+I(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===R.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},$=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=O(e.metaTags,y),o=O(t,b),i=O(n,v);return{priorityMethods:{toComponent:function(){return[].concat(F(h.META,a.priority),F(h.LINK,o.priority),F(h.SCRIPT,i.priority))},toString:function(){return B(h.META,a.priority,r)+" "+B(h.LINK,o.priority,r)+" "+B(h.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:B(h.BASE,t,r),bodyAttributes:B("bodyAttributes",n,r),htmlAttributes:B("htmlAttributes",a,r),link:B(h.LINK,c,r),meta:B(h.META,d,r),noscript:B(h.NOSCRIPT,o,r),script:B(h.SCRIPT,f,r),style:B(h.STYLE,i,r),title:B(h.TITLE,{title:s,titleAttributes:u},r)}},z=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=$({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},j=r.createContext({}),Z=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),H="undefined"!=typeof document,V=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(j.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);V.canUseDOM=H,V.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},V.defaultProps={context:{}},V.displayName="HelmetProvider";var G=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===a.indexOf(s)&&a.push(s);var c=o.indexOf(s);-1!==c&&o.splice(c,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(h.BODY,e.bodyAttributes),W(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=N(e)),W(h.TITLE,t)}(c,d);var f={baseTag:G(h.BASE,n),linkTags:G(h.LINK,a),metaTags:G(h.META,o),noscriptTags:G(h.NOSCRIPT,i),scriptTags:G(h.SCRIPT,s),styleTags:G(h.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:L(h.LINK,["rel","href"],e),metaTags:L(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:L(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:L(h.SCRIPT,["src","innerHTML"],e),styleTags:L(h.STYLE,["cssText"],e),title:x(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:A(e,"prioritizeSeoTags")});V.canUseDOM?(t=o,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){q(t,(function(){Y=null}))})):(q(t),Y=null)):$&&(a=$(o)),r(a)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:Z.isRequired},K.displayName="HelmetDispatcher";var X=["children"],Q=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(P(this.props,"helmetData"),P(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return f({},a,((t={})[r.type]=i,t.titleAttributes=f({},o),t));case h.BODY:return f({},a,{bodyAttributes:f({},o)});case h.HTML:return f({},a,{htmlAttributes:f({},o)});default:return f({},a,((n={})[r.type]=f({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=g(r,X),l=Object.keys(i).reduce((function(e,t){return e[k[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,o),s){case h.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:l,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,Q),a=f({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof U||(o=new U(o.context,o.instances)),o?r.createElement(K,f({},a,{context:o.value,helmetData:void 0})):r.createElement(j.Consumer,null,(function(e){return r.createElement(K,f({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case o:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case h:case g:case s:return e;default:return t}}case a:return t}}}function k(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=o,t.Lazy=h,t.Memo=g,t.Portal=a,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return k(e)||E(e)===c},t.isConcurrentMode=k,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===o},t.isLazy=function(e){return E(e)===h},t.isMemo=function(e){return E(e)===g},t.isPortal=function(e){return E(e)===a},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=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},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),g=null;function h(){return g||(g=e(m.loader)),g.promise}return u.push(h),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return h()})),f=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),r._loadModule()})),h(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),o(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}o(h,"propTypes",{report:s.func.isRequired}),o(h,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),g.Capture=h,g.preloadAll=function(){return new Promise((function(e,t){b(u).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){b(c).then(e,e)}))},e.exports=g},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6550),a=n(7462),o=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>c,rU:()=>h});var r=n(6550),a=n(5068),o=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=o.forwardRef;void 0===m&&(m=p);var g=m((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,o.createElement("a",c)}));var h=m((function(e,t){var n=e.component,a=void 0===n?g:n,c=e.replace,h=e.to,b=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(h,e.location),e.location),s=r?n.createHref(r):"",g=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(h,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?g.ref=t||b:g.innerRef=b,o.createElement(a,g)}))})),b=function(e){return e},v=o.forwardRef;void 0===v&&(v=b);var y=v((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,g=e.exact,y=e.isActive,w=e.location,E=e.sensitive,k=e.strict,S=e.style,x=e.to,_=e.innerRef,C=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(x,n),n),s=i.pathname,T=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),L=T?(0,r.LX)(n.pathname,{path:T,exact:g,sensitive:E,strict:k}):null,A=!!(y?y(L,n):L),N="function"==typeof m?m(A):m,O="function"==typeof S?S(A):S;A&&(N=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(N,c),O=(0,l.Z)({},O,p));var P=(0,l.Z)({"aria-current":A&&a||null,className:N,style:O,to:i},C);return b!==v?P.ref=t||_:P.innerRef=_,o.createElement(h,P)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>x,F0:()=>y,LX:()=>S,TH:()=>R,k6:()=>P,rs:()=>N,s6:()=>v});var r=n(5068),a=n(7294),o=n(5697),i=n.n(o),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var g=a.createContext||function(e,t){var n,o,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n,r,a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return(t=e.call.apply(e,[this].concat(o))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(i=a)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(r,a):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},a.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},a.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},a.getValue=function(){return this.context[l]?this.context[l].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return u.contextTypes=((o={})[l]=i().object,o),{Provider:s,Consumer:u}},h=function(e){var t=g();return t.displayName=e,t},b=h("Router-History"),v=h("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return a.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var w={},E=1e4,k=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var a=[],o={regexp:d()(e,a,t),keys:a};return k<E&&(r[e]=o,k++),o}(n,{end:o,strict:l,sensitive:u}),a=r.regexp,i=r.keys,s=a.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return o&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var x=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,o=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===a.Children.count(e)}(l)&&(l=null),a.createElement(v.Provider,{value:o},o.match?l?"function"==typeof l?l(o):l:c?a.createElement(c,o):d?d(o):null:"function"==typeof l?l(o):null)}))},t}(a.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,l.Ep)(e)}function L(e){return function(){(0,s.Z)(!1)}}function A(){}a.Component;var N=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(v.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(o.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var O=a.useContext;function P(){return O(b)}function R(){return O(v).location}},9658:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=g&&null!=m&&m!==g,k="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||c,_=b||v;r.push({name:h||o++,prefix:g||"",delimiter:x,optional:S,repeat:k,partial:E,asterisk:!!w,pattern:_?u(_):w?".*":"[^"+s(x)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",l=t||{},s=(a||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(o+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');o+=c.prefix+d}}else o+=c}return o}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),g=i.slice(-m.length)===m;return a||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=o?"$":a&&g?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(p(e[a],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(o(e,n),t,n)}(e,t,n)}},2408:(e,t,n)=>{"use strict";var r=n(7418),a=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;a=d("react.element"),o=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function h(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function b(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},b.prototype=h.prototype;var y=v.prototype=new b;y.constructor=v,r(y,h.prototype),y.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,k={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,n){var r,o={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!k.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(1===s)o.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===o[r]&&(o[r]=s[r]);return{$$typeof:a,type:e,key:i,ref:l,props:o,_owner:w.current}}function x(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}var _=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case a:case o:s=!0}}if(s)return i=i(s=e),e=""===r?"."+C(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(_,"$&/")+"/"),T(i,t,n,"",(function(e){return e}))):null!=i&&(x(i)&&(i=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(_,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+C(l=e[u],u);s+=T(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=T(l=l.value,t,n,c=r+C(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function L(e,t,n){if(null==e)return e;var r=[],a=0;return T(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function A(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var N={current:null};function O(){var e=N.current;if(null===e)throw Error(p(321));return e}var P={ReactCurrentDispatcher:N,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:L,forEach:function(e,t,n){L(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return L(e,(function(){t++})),t},toArray:function(e){return L(e,(function(e){return e}))||[]},only:function(e){if(!x(e))throw Error(p(143));return e}},t.Component=h,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=P,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var o=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!k.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];o.children=u}return{$$typeof:a,type:e.type,key:i,ref:l,props:o,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=x,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return O().useCallback(e,t)},t.useContext=function(e,t){return O().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return O().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return O().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return O().useLayoutEffect(e,t)},t.useMemo=function(e,t){return O().useMemo(e,t)},t.useReducer=function(e,t,n){return O().useReducer(e,t,n)},t.useRef=function(e){return O().useRef(e)},t.useState=function(e){return O().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,a,o;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},a=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},o=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var g=!1,h=null,b=-1,v=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},o=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==h){var e=t.unstable_now();y=e+v;try{h(!0,e)?E.postMessage(null):(g=!1,h=null)}catch(n){throw E.postMessage(null),n}}else g=!1},n=function(e){h=e,g||(g=!0,E.postMessage(null))},r=function(e,n){b=f((function(){e(t.unstable_now())}),n)},a=function(){p(b),b=-1}}function k(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,a=e[r];if(!(void 0!==a&&0<_(a,t)))break e;e[r]=t,e[n]=a,n=r}}function S(e){return void 0===(e=e[0])?null:e}function x(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length;r<a;){var o=2*(r+1)-1,i=e[o],l=o+1,s=e[l];if(void 0!==i&&0>_(i,n))void 0!==s&&0>_(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[o]=n,r=o);else{if(!(void 0!==s&&0>_(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function _(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var C=[],T=[],L=1,A=null,N=3,O=!1,P=!1,R=!1;function I(e){for(var t=S(T);null!==t;){if(null===t.callback)x(T);else{if(!(t.startTime<=e))break;x(T),t.sortIndex=t.expirationTime,k(C,t)}t=S(T)}}function M(e){if(R=!1,I(e),!P)if(null!==S(C))P=!0,n(D);else{var t=S(T);null!==t&&r(M,t.startTime-e)}}function D(e,n){P=!1,R&&(R=!1,a()),O=!0;var o=N;try{for(I(n),A=S(C);null!==A&&(!(A.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=A.callback;if("function"==typeof i){A.callback=null,N=A.priorityLevel;var l=i(A.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?A.callback=l:A===S(C)&&x(C),I(n)}else x(C);A=S(C)}if(null!==A)var s=!0;else{var u=S(T);null!==u&&r(M,u.startTime-n),s=!1}return s}finally{A=null,N=o,O=!1}}var F=o;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){P||O||(P=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return N},t.unstable_getFirstCallbackNode=function(){return S(C)},t.unstable_next=function(e){switch(N){case 1:case 2:case 3:var t=3;break;default:t=N}var n=N;N=t;try{return e()}finally{N=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=F,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=N;N=e;try{return t()}finally{N=n}},t.unstable_scheduleCallback=function(e,o,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:L++,callback:o,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,k(T,e),null===S(C)&&e===S(T)&&(R?a():R=!0,r(M,i-l))):(e.sortIndex=s,k(C,e),P||O||(P=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=N;return function(){var n=N;N=t;try{return e.apply(this,arguments)}finally{N=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<o.length;s++){var u=o[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(a=n?n.call(r,c,d,u):void 0)||void 0===a&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!a(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=o({inst:{value:n,getSnapshot:t}}),a=r[0].inst,c=r[1];return l((function(){a.value=n,a.getSnapshot=t,u(a)&&c({inst:a})}),[e,n,t]),i((function(){return u(a)&&c({inst:a}),e((function(){u(a)&&c({inst:a})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Regression Games",tagline:"Introducing the first full-featured platform for AI, gaming, and tournaments. Build your own AIs and compete!",favicon:"img/favicon.ico",url:"https://docs.regression.gg",baseUrl:"/",organizationName:"Regression-Games",projectName:"RegressionDocs",deploymentBranch:"gh-pages",trailingSlash:!1,onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:{routeBasePath:"/",sidebarPath:"/home/runner/work/RegressionDocs/RegressionDocs/sidebars.js"},blog:{showReadingTime:!0},theme:{customCss:"/home/runner/work/RegressionDocs/RegressionDocs/src/css/custom.css"}}]],themeConfig:{image:"img/docusaurus-social-card.jpg",navbar:{title:"Regression Games",logo:{alt:"Regression Games Logo",src:"img/logo.png"},items:[{type:"docSidebar",sidebarId:"unitySidebar",position:"left",label:"Developer Reference"},{type:"docSidebar",sidebarId:"automatedTesting",position:"left",label:"Experimental Packages"},{type:"doc",docId:"changelog",label:"Changelog",position:"right"},{href:"https://github.com/Regression-Games",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Overview",to:"overview"},{label:"Quickstart",to:"quickstart"}]},{title:"Community",items:[{label:"Discord",href:"https://discord.com/invite/925SYVse2H"},{label:"Twitter",href:"https://twitter.com/RegressionGG"}]},{title:"More",items:[{label:"Blog",href:"https://medium.com/ai-and-games-by-regression-games"},{label:"GitHub",href:"https://github.com/Regression-Games"}]}],copyright:"Copyright \xa9 2024 Regression Games, Inc."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["csharp"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},scripts:[{src:"/js/loadposthog.js",async:!1}],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],themes:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():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},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},3366:(e,t,n)=>{"use strict";function r(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}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=!0,a="Invariant failed";function o(e,t){if(!e){if(r)throw new Error(a);var n="function"==typeof t?t():t,o=n?"".concat(a,": ").concat(n):a;throw new Error(o)}}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/blog-ae5":{"__comp":"a6aa9e1f","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"metadata":"b2b675dd"},"/blog/archive-eb2":{"__comp":"9e4087bc","__context":{"plugin":"148a37a4"},"archive":"b2f554cd"},"/blog/first-blog-post-c66":{"__comp":"ccc49370","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","content":"e273c56f"},"/blog/long-blog-post-c95":{"__comp":"ccc49370","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","content":"73664a40"},"/blog/mdx-blog-post-e29":{"__comp":"ccc49370","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","content":"59362658"},"/blog/tags-612":{"__comp":"01a85c17","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/docusaurus-f84":{"__comp":"6875c492","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"tag":"a80da1cf","listMetadata":"608ae6a4"},"/blog/tags/facebook-72b":{"__comp":"6875c492","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"7661071f"}],"tag":"031793e1","listMetadata":"096bfee4"},"/blog/tags/hello-48d":{"__comp":"6875c492","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"8717b14a"}],"tag":"30a24c52","listMetadata":"66406991"},"/blog/tags/hola-cc1":{"__comp":"6875c492","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","items":[{"content":"925b3f96"}],"tag":"e16015ca","listMetadata":"4c9e35b1"},"/blog/welcome-bd6":{"__comp":"ccc49370","__context":{"plugin":"148a37a4"},"sidebar":"814f3328","content":"d9f32620"},"/markdown-page-e06":{"__comp":"1f391b9e","__context":{"plugin":"14407088"},"content":"393be207"},"/-bb6":{"__comp":"1df93b7f","__context":{"plugin":"14407088"},"config":"5e9f5e1a"},"/-da5":{"__comp":"1be78505","__context":{"plugin":"efcba355"},"versionMetadata":"935f2afb"},"/404-b08":{"__comp":"17896441","content":"d0d95016"},"/authenticating-with-api-keys-483":{"__comp":"17896441","content":"1970a410"},"/automated-testing/creating-custom-components-740":{"__comp":"17896441","content":"af45fd03"},"/automated-testing/getting-started-c37":{"__comp":"17896441","content":"1359ca2f"},"/automated-testing/gpt-assistant-bot-dd7":{"__comp":"17896441","content":"56604baf"},"/automated-testing/overview-e56":{"__comp":"17896441","content":"29cae6e4"},"/changelog-daf":{"__comp":"17896441","content":"735d0569"},"/computer-vision-0f9":{"__comp":"17896441","content":"8f2791df"},"/computer-vision/image-match-df7":{"__comp":"17896441","content":"1ee9a467"},"/computer-vision/object-detection-3a3":{"__comp":"17896441","content":"0a367c1a"},"/computer-vision/text-match-929":{"__comp":"17896441","content":"0e5c35ea"},"/creating-bots/csharp/adaptive-bots-9bd":{"__comp":"17896441","content":"d2b05863"},"/creating-bots/csharp/agent-builder-a00":{"__comp":"17896441","content":"6806b5bc"},"/gameplay-sessions/gameplay-sessions-getting-started-425":{"__comp":"17896441","content":"b220c1b0"},"/gameplay-sessions/gameplay-sessions-reference-fa6":{"__comp":"17896441","content":"87bc41d4"},"/gameplay-sessions/gameplay-sessions-usage-91a":{"__comp":"17896441","content":"2c33d6f6"},"/generic-bots/monkey-bot-1c7":{"__comp":"17896441","content":"13d931f8"},"/overview-224":{"__comp":"17896441","content":"1db64337"},"/pre-made-bots-ae7":{"__comp":"17896441","content":"1fb3fb3e"},"/quickstart-dad":{"__comp":"17896441","content":"74876495"},"/session-insights/client-dashboard-f56":{"__comp":"17896441","content":"f8739703"},"/session-insights/in-editor-replay-2db":{"__comp":"17896441","content":"39f90b1e"},"/tutorials/building-your-first-bot-13c":{"__comp":"17896441","content":"04115efe"},"/tutorials/github-actions-4d2":{"__comp":"17896441","content":"ebe69912"},"/validations/validations-getting-started-3a9":{"__comp":"17896441","content":"2cd4476f"},"/validations/validations-rules-reference-5fe":{"__comp":"17896441","content":"b1406738"},"/validations/validations-scenario-builder-reference-572":{"__comp":"17896441","content":"eadec799"}}')}},e=>{e.O(0,[532],(()=>{return t=9383,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.95f684d1.js.LICENSE.txt b/assets/js/main.7b9cd64a.js.LICENSE.txt similarity index 100% rename from assets/js/main.95f684d1.js.LICENSE.txt rename to assets/js/main.7b9cd64a.js.LICENSE.txt diff --git a/assets/js/runtime~main.b88d0fd0.js b/assets/js/runtime~main.c9b44e16.js similarity index 66% rename from assets/js/runtime~main.b88d0fd0.js rename to assets/js/runtime~main.c9b44e16.js index 98922ff..ff98a88 100644 --- a/assets/js/runtime~main.b88d0fd0.js +++ b/assets/js/runtime~main.c9b44e16.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,r,t,c={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var f=d[e]={exports:{}};return c[e].call(f.exports,f,f.exports,b),f.exports}b.m=c,e=[],b.O=(a,f,r,t)=>{if(!f){var c=1/0;for(i=0;i<e.length;i++){f=e[i][0],r=e[i][1],t=e[i][2];for(var d=!0,o=0;o<f.length;o++)(!1&t||c>=t)&&Object.keys(b.O).every((e=>b.O[e](f[o])))?f.splice(o--,1):(d=!1,t<c&&(c=t));if(d){e.splice(i--,1);var n=r();void 0!==n&&(a=n)}}return a}t=t||0;for(var i=e.length;i>0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[f,r,t]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var t=Object.create(null);b.r(t);var c={};a=a||[null,f({}),f([]),f(f)];for(var d=2&r&&e;"object"==typeof d&&!~a.indexOf(d);d=f(d))Object.getOwnPropertyNames(d).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,b.d(t,c),t},b.d=(e,a)=>{for(var f in a)b.o(a,f)&&!b.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,f)=>(b.f[f](e,a),a)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",110:"66406991",453:"30a24c52",533:"b2b675dd",660:"eadec799",948:"8717b14a",1372:"1db64337",1477:"b2f554cd",1479:"2c33d6f6",1633:"031793e1",1640:"d0d95016",1713:"a7023ddc",1857:"13d931f8",1914:"d9f32620",2216:"f8739703",2267:"59362658",2362:"e273c56f",2535:"814f3328",2808:"39f90b1e",2855:"1fb3fb3e",3069:"0e5c35ea",3085:"1f391b9e",3089:"a6aa9e1f",3197:"1ee9a467",3205:"a80da1cf",3237:"1df93b7f",3413:"b220c1b0",3514:"73664a40",3608:"9e4087bc",4013:"01a85c17",4873:"b1406738",4998:"d2b05863",5049:"74876495",5065:"2cd4476f",5130:"6806b5bc",5508:"af45fd03",5792:"04115efe",6103:"ccc49370",6163:"14407088",6519:"1970a410",6603:"29cae6e4",6834:"56604baf",6938:"608ae6a4",7161:"148a37a4",7178:"096bfee4",7384:"8f2791df",7414:"393be207",7445:"735d0569",7624:"1359ca2f",7918:"17896441",7942:"87bc41d4",8329:"ebe69912",8610:"6875c492",8636:"f4f34a3a",8895:"0a367c1a",8922:"efcba355",9003:"925b3f96",9035:"4c9e35b1",9514:"1be78505",9642:"7661071f",9700:"e16015ca"}[e]||e)+"."+{53:"f0c270bf",110:"e7915820",453:"0b40efde",533:"408ac344",660:"ae24bff3",948:"4b846955",1372:"2675c864",1477:"beda59e7",1479:"8706ce19",1506:"50b230b3",1633:"4d261684",1640:"d6990f68",1713:"f4b99aca",1857:"06616789",1914:"029d97a2",2216:"6f0e5ac3",2267:"7ff35a59",2362:"7c3600cf",2529:"a12640b6",2535:"a8f50e33",2808:"34f9030b",2855:"9e08fea7",3069:"027f2996",3085:"4f0d3eab",3089:"6ae3c350",3197:"cdaca266",3205:"dad8b174",3237:"b6548682",3413:"de4c1f69",3514:"062e4c31",3608:"019cba0d",4013:"b38f7de3",4873:"425e4cc7",4972:"30cc58b4",4998:"c99611c3",5049:"4b1a4773",5065:"43e32dbe",5130:"d21a9b05",5508:"af071028",5792:"e8aeff5d",6103:"7385cc54",6163:"4e7bef33",6519:"cfe016de",6603:"90d10c38",6834:"6b8ba181",6938:"50b8b957",7161:"e6ced549",7178:"31110297",7384:"a174dd16",7414:"7be5359b",7445:"d2da1b08",7624:"ef4cd1f0",7918:"c2e76ad7",7942:"0a0982dd",8329:"98a56a65",8610:"6b63a7c1",8636:"d978a77e",8895:"1a497732",8922:"c01b61ca",9003:"18d788dc",9035:"0c238a9c",9514:"df699618",9642:"e79dbec3",9700:"81020c95"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},t="regression-docs:",b.l=(e,a,f,c)=>{if(r[e])r[e].push(a);else{var d,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==t+f){d=u;break}}d||(o=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,b.nc&&d.setAttribute("nonce",b.nc),d.setAttribute("data-webpack",t+f),d.src=e),r[e]=[a];var s=(a,f)=>{d.onerror=d.onload=null,clearTimeout(l);var t=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),t&&t.forEach((e=>e(f))),a)return a(f)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=s.bind(null,d.onerror),d.onload=s.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={14407088:"6163",17896441:"7918",59362658:"2267",66406991:"110",74876495:"5049","935f2afb":"53","30a24c52":"453",b2b675dd:"533",eadec799:"660","8717b14a":"948","1db64337":"1372",b2f554cd:"1477","2c33d6f6":"1479","031793e1":"1633",d0d95016:"1640",a7023ddc:"1713","13d931f8":"1857",d9f32620:"1914",f8739703:"2216",e273c56f:"2362","814f3328":"2535","39f90b1e":"2808","1fb3fb3e":"2855","0e5c35ea":"3069","1f391b9e":"3085",a6aa9e1f:"3089","1ee9a467":"3197",a80da1cf:"3205","1df93b7f":"3237",b220c1b0:"3413","73664a40":"3514","9e4087bc":"3608","01a85c17":"4013",b1406738:"4873",d2b05863:"4998","2cd4476f":"5065","6806b5bc":"5130",af45fd03:"5508","04115efe":"5792",ccc49370:"6103","1970a410":"6519","29cae6e4":"6603","56604baf":"6834","608ae6a4":"6938","148a37a4":"7161","096bfee4":"7178","8f2791df":"7384","393be207":"7414","735d0569":"7445","1359ca2f":"7624","87bc41d4":"7942",ebe69912:"8329","6875c492":"8610",f4f34a3a:"8636","0a367c1a":"8895",efcba355:"8922","925b3f96":"9003","4c9e35b1":"9035","1be78505":"9514","7661071f":"9642",e16015ca:"9700"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,f)=>{var r=b.o(e,a)?e[a]:void 0;if(0!==r)if(r)f.push(r[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var t=new Promise(((f,t)=>r=e[a]=[f,t]));f.push(r[2]=t);var c=b.p+b.u(a),d=new Error;b.l(c,(f=>{if(b.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var t=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;d.message="Loading chunk "+a+" failed.\n("+t+": "+c+")",d.name="ChunkLoadError",d.type=t,d.request=c,r[1](d)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,f)=>{var r,t,c=f[0],d=f[1],o=f[2],n=0;if(c.some((a=>0!==e[a]))){for(r in d)b.o(d,r)&&(b.m[r]=d[r]);if(o)var i=o(b)}for(a&&a(f);n<c.length;n++)t=c[n],b.o(e,t)&&e[t]&&e[t][0](),e[t]=0;return b.O(i)},f=self.webpackChunkregression_docs=self.webpackChunkregression_docs||[];f.forEach(a.bind(null,0)),f.push=a.bind(null,f.push.bind(f))})()})(); \ No newline at end of file +(()=>{"use strict";var e,a,f,r,c,t={},d={};function b(e){var a=d[e];if(void 0!==a)return a.exports;var f=d[e]={exports:{}};return t[e].call(f.exports,f,f.exports,b),f.exports}b.m=t,e=[],b.O=(a,f,r,c)=>{if(!f){var t=1/0;for(i=0;i<e.length;i++){f=e[i][0],r=e[i][1],c=e[i][2];for(var d=!0,o=0;o<f.length;o++)(!1&c||t>=c)&&Object.keys(b.O).every((e=>b.O[e](f[o])))?f.splice(o--,1):(d=!1,c<t&&(t=c));if(d){e.splice(i--,1);var n=r();void 0!==n&&(a=n)}}return a}c=c||0;for(var i=e.length;i>0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,r,c]},b.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return b.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,b.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);b.r(c);var t={};a=a||[null,f({}),f([]),f(f)];for(var d=2&r&&e;"object"==typeof d&&!~a.indexOf(d);d=f(d))Object.getOwnPropertyNames(d).forEach((a=>t[a]=()=>e[a]));return t.default=()=>e,b.d(c,t),c},b.d=(e,a)=>{for(var f in a)b.o(a,f)&&!b.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((a,f)=>(b.f[f](e,a),a)),[])),b.u=e=>"assets/js/"+({53:"935f2afb",110:"66406991",453:"30a24c52",533:"b2b675dd",660:"eadec799",948:"8717b14a",1372:"1db64337",1477:"b2f554cd",1479:"2c33d6f6",1633:"031793e1",1640:"d0d95016",1713:"a7023ddc",1857:"13d931f8",1914:"d9f32620",2216:"f8739703",2267:"59362658",2362:"e273c56f",2535:"814f3328",2808:"39f90b1e",2855:"1fb3fb3e",3069:"0e5c35ea",3085:"1f391b9e",3089:"a6aa9e1f",3197:"1ee9a467",3205:"a80da1cf",3237:"1df93b7f",3413:"b220c1b0",3514:"73664a40",3608:"9e4087bc",4013:"01a85c17",4873:"b1406738",4998:"d2b05863",5049:"74876495",5065:"2cd4476f",5130:"6806b5bc",5508:"af45fd03",5792:"04115efe",6103:"ccc49370",6163:"14407088",6519:"1970a410",6603:"29cae6e4",6834:"56604baf",6938:"608ae6a4",7161:"148a37a4",7178:"096bfee4",7384:"8f2791df",7414:"393be207",7445:"735d0569",7624:"1359ca2f",7918:"17896441",7942:"87bc41d4",8329:"ebe69912",8610:"6875c492",8636:"f4f34a3a",8895:"0a367c1a",8922:"efcba355",9003:"925b3f96",9035:"4c9e35b1",9514:"1be78505",9642:"7661071f",9700:"e16015ca"}[e]||e)+"."+{53:"609ede5f",110:"e7915820",453:"0b40efde",533:"408ac344",660:"ae24bff3",948:"4b846955",1372:"b2a8d27d",1477:"beda59e7",1479:"8706ce19",1506:"50b230b3",1633:"4d261684",1640:"d6990f68",1713:"f4b99aca",1857:"06616789",1914:"029d97a2",2216:"6f0e5ac3",2267:"7ff35a59",2362:"7c3600cf",2529:"a12640b6",2535:"a8f50e33",2808:"34f9030b",2855:"9e08fea7",3069:"027f2996",3085:"4f0d3eab",3089:"6ae3c350",3197:"cdaca266",3205:"dad8b174",3237:"224599d5",3413:"de4c1f69",3514:"062e4c31",3608:"019cba0d",4013:"b38f7de3",4873:"425e4cc7",4972:"30cc58b4",4998:"c99611c3",5049:"7da9c602",5065:"43e32dbe",5130:"d21a9b05",5508:"af071028",5792:"a166a43b",6103:"7385cc54",6163:"4e7bef33",6519:"cfe016de",6603:"90d10c38",6834:"6b8ba181",6938:"50b8b957",7161:"e6ced549",7178:"31110297",7384:"a174dd16",7414:"7be5359b",7445:"85fea1fa",7624:"ef4cd1f0",7918:"c2e76ad7",7942:"0a0982dd",8329:"98a56a65",8610:"6b63a7c1",8636:"d978a77e",8895:"1a497732",8922:"c01b61ca",9003:"18d788dc",9035:"0c238a9c",9514:"df699618",9642:"e79dbec3",9700:"81020c95"}[e]+".js",b.miniCssF=e=>{},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},c="regression-docs:",b.l=(e,a,f,t)=>{if(r[e])r[e].push(a);else{var d,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==c+f){d=u;break}}d||(o=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,b.nc&&d.setAttribute("nonce",b.nc),d.setAttribute("data-webpack",c+f),d.src=e),r[e]=[a];var s=(a,f)=>{d.onerror=d.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),c&&c.forEach((e=>e(f))),a)return a(f)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=s.bind(null,d.onerror),d.onload=s.bind(null,d.onload),o&&document.head.appendChild(d)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.p="/",b.gca=function(e){return e={14407088:"6163",17896441:"7918",59362658:"2267",66406991:"110",74876495:"5049","935f2afb":"53","30a24c52":"453",b2b675dd:"533",eadec799:"660","8717b14a":"948","1db64337":"1372",b2f554cd:"1477","2c33d6f6":"1479","031793e1":"1633",d0d95016:"1640",a7023ddc:"1713","13d931f8":"1857",d9f32620:"1914",f8739703:"2216",e273c56f:"2362","814f3328":"2535","39f90b1e":"2808","1fb3fb3e":"2855","0e5c35ea":"3069","1f391b9e":"3085",a6aa9e1f:"3089","1ee9a467":"3197",a80da1cf:"3205","1df93b7f":"3237",b220c1b0:"3413","73664a40":"3514","9e4087bc":"3608","01a85c17":"4013",b1406738:"4873",d2b05863:"4998","2cd4476f":"5065","6806b5bc":"5130",af45fd03:"5508","04115efe":"5792",ccc49370:"6103","1970a410":"6519","29cae6e4":"6603","56604baf":"6834","608ae6a4":"6938","148a37a4":"7161","096bfee4":"7178","8f2791df":"7384","393be207":"7414","735d0569":"7445","1359ca2f":"7624","87bc41d4":"7942",ebe69912:"8329","6875c492":"8610",f4f34a3a:"8636","0a367c1a":"8895",efcba355:"8922","925b3f96":"9003","4c9e35b1":"9035","1be78505":"9514","7661071f":"9642",e16015ca:"9700"}[e]||e,b.p+b.u(e)},(()=>{var e={1303:0,532:0};b.f.j=(a,f)=>{var r=b.o(e,a)?e[a]:void 0;if(0!==r)if(r)f.push(r[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>r=e[a]=[f,c]));f.push(r[2]=c);var t=b.p+b.u(a),d=new Error;b.l(t,(f=>{if(b.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var c=f&&("load"===f.type?"missing":f.type),t=f&&f.target&&f.target.src;d.message="Loading chunk "+a+" failed.\n("+c+": "+t+")",d.name="ChunkLoadError",d.type=c,d.request=t,r[1](d)}}),"chunk-"+a,a)}},b.O.j=a=>0===e[a];var a=(a,f)=>{var r,c,t=f[0],d=f[1],o=f[2],n=0;if(t.some((a=>0!==e[a]))){for(r in d)b.o(d,r)&&(b.m[r]=d[r]);if(o)var i=o(b)}for(a&&a(f);n<t.length;n++)c=t[n],b.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return b.O(i)},f=self.webpackChunkregression_docs=self.webpackChunkregression_docs||[];f.forEach(a.bind(null,0)),f.push=a.bind(null,f.push.bind(f))})()})(); \ No newline at end of file diff --git a/authenticating-with-api-keys.html b/authenticating-with-api-keys.html index 9231726..b676304 100644 --- a/authenticating-with-api-keys.html +++ b/authenticating-with-api-keys.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -24,7 +24,7 @@ copy this token and store it in a safe location.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="using-the-api-key">Using the API Key<a href="#using-the-api-key" class="hash-link" aria-label="Direct link to Using the API Key" title="Direct link to Using the API Key"></a></h2><p>Once you have generated an API key, you can use it to authenticate against our API. To do so, you must include the key in the <code>Authorization</code> header of your request. </p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">HEADERS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Authorization: Bearer <API_KEY></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="revoking-api-keys">Revoking API Keys<a href="#revoking-api-keys" class="hash-link" aria-label="Direct link to Revoking API Keys" title="Direct link to Revoking API Keys"></a></h2><p>You can remove API Keys at any time by deleting them from the <a href="https://play.regression.gg/account" target="_blank" rel="noopener noreferrer">account</a> page. Next to each key is a delete icon, which immediately revokes the key.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/validations/validations-rules-reference"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Rules Reference</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/generic-bots/monkey-bot"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Monkey Bot</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#generating-an-api-key" class="table-of-contents__link toc-highlight">Generating an API Key</a></li><li><a href="#using-the-api-key" class="table-of-contents__link toc-highlight">Using the API Key</a></li><li><a href="#revoking-api-keys" class="table-of-contents__link toc-highlight">Revoking API Keys</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/automated-testing/creating-custom-components.html b/automated-testing/creating-custom-components.html index 4d32cd5..87f532b 100644 --- a/automated-testing/creating-custom-components.html +++ b/automated-testing/creating-custom-components.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -45,7 +45,7 @@ So there are several ways to add it to your scene. We recommend creating a Prefab and attaching the Bot component to that prefab:</p><p><img loading="lazy" alt="A Unity Prefab showing the &quot;My Bot (Script)&quot; component added" src="/assets/images/bot-prefab-003a840cd7031d4c552e4224314e7200.png" width="830" height="784" class="img_ev3q"></p><p>Then, you can add that Prefab to the <code>availableBots</code> property on the RegressionGames UI Overlay, which will add it to the dropdown of bots that can be spawned in the UI overlay.</p><p><img loading="lazy" alt="A recording showing the user dragging the &quot;MyBot&quot; prefab on to the &quot;Available Bots&quot; list in the &quot;Overlay Menu&quot; section of a game object" src="/assets/images/recording-add-custom-bot-to-overlay-43e86e9fc7220613d0f4af272654d850.gif" width="640" height="172" class="img_ev3q"></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/automated-testing/gpt-assistant-bot"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">GPT Assistant Bot</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#building-a-custom-discoverer" class="table-of-contents__link toc-highlight">Building a Custom Discoverer</a><ul><li><a href="#what-is-an-entity" class="table-of-contents__link toc-highlight">What is an Entity?</a></li><li><a href="#creating-a-discoverer" class="table-of-contents__link toc-highlight">Creating a Discoverer</a></li><li><a href="#adding-the-discoverer-to-the-scene" class="table-of-contents__link toc-highlight">Adding the discoverer to the scene</a></li></ul></li><li><a href="#building-a-custom-bot" class="table-of-contents__link toc-highlight">Building a Custom Bot</a><ul><li><a href="#adding-your-bot-to-the-scene" class="table-of-contents__link toc-highlight">Adding your Bot to the scene</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/automated-testing/getting-started.html b/automated-testing/getting-started.html index 479cf03..05f8fda 100644 --- a/automated-testing/getting-started.html +++ b/automated-testing/getting-started.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -41,7 +41,7 @@ On the inspector, find the "Automation Recorder" component and click the <strong>View Recordings...</strong> button. The directory in which the recordings are stored will open in your file explorer.</p><p><img loading="lazy" alt="The Automation Recorder component with the &quot;View Recordings...&quot; button" src="/assets/images/view-recordings-button-b34f697cbf0dec407858cf9fd5f506e1.png" width="822" height="178" class="img_ev3q"></p><p><img loading="lazy" alt="The macOS Finder showing the directory containing the recordings" src="/assets/images/recordings-in-finder-eb9230343d09ad47945e26f39a451fea.png" width="1616" height="264" class="img_ev3q"></p><p>Each recording is an <code>.rgrec.zip</code> file. Inside these ZIP files are:</p><ol><li>A <code>recording.json</code> file which contains global metadata about the recording (when it was made, who made it, etc.)</li><li>A series of <code>snapshot.[frameNumber].json</code> files that contain all the state captured for each frame of the recording. Frames with no state changes are not included in the recording, so if a given frame <code>N</code> is missing, it means that the state of the game did not change between frames <code>N-1</code> and <code>N</code>.</li><li>A series of <code>screenshot.[frameNumber].png</code> files that contain a screenshot of the game for each frame that a screenshot was requested. Bots, and your game code, can use an API on the Automation Controller to request a screenshot at any time. For example, the Monkey Bot requests a screenshot for the frame immediately after it clicks on a UI element.</li></ol><p><img loading="lazy" alt="The macOS Finder showing the contents of a recording" src="/assets/images/recording-content-in-finder-9c28664c7180af7ae3ca4a807e22d296.png" width="1630" height="832" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="next-steps">Next steps<a href="#next-steps" class="hash-link" aria-label="Direct link to Next steps" title="Direct link to Next steps"></a></h2><p>From here, you can give the <a href="/automated-testing/gpt-assistant-bot">GPT Assistant Bot</a> a try and go beyond random automation!</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/automated-testing/overview"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Overview</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/automated-testing/gpt-assistant-bot"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">GPT Assistant Bot</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#a-sample-game-to-start-with" class="table-of-contents__link toc-highlight">A sample game to start with</a></li><li><a href="#installing-the-package" class="table-of-contents__link toc-highlight">Installing the package</a></li><li><a href="#adding-the-automation-controller-and-components-to-your-scene" class="table-of-contents__link toc-highlight">Adding the Automation Controller and components to your scene</a></li><li><a href="#adding-entity-discoverers-to-your-scene" class="table-of-contents__link toc-highlight">Adding Entity Discoverers to your scene</a></li><li><a href="#adding-the-overlay-ui" class="table-of-contents__link toc-highlight">Adding the Overlay UI</a></li><li><a href="#running-the-monkey-bot" class="table-of-contents__link toc-highlight">Running the Monkey Bot</a></li><li><a href="#viewing-recordings" class="table-of-contents__link toc-highlight">Viewing recordings</a></li><li><a href="#next-steps" class="table-of-contents__link toc-highlight">Next steps</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/automated-testing/gpt-assistant-bot.html b/automated-testing/gpt-assistant-bot.html index 79e5a4d..8d90d4f 100644 --- a/automated-testing/gpt-assistant-bot.html +++ b/automated-testing/gpt-assistant-bot.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -38,7 +38,7 @@ If you want to stop the bot, you can click the "Stop Bot" button in the UI Overlay, or simply stop your game.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="writing-a-good-goal">Writing a good goal<a href="#writing-a-good-goal" class="hash-link" aria-label="Direct link to Writing a good goal" title="Direct link to Writing a good goal"></a></h2><p>Writing a good goal is important to an effective bot. The GPT Assistant Bot is a very powerful tool, but it's not magic and it takes some work to get good results. Here are some dos and don'ts for writing a good goal:</p><ul><li><strong>DO</strong> reference a very specific end goal. For example "Reach the 'Foo' scene". The Bot knows the name of the active scene and can use that to determine if it has reached the goal.</li><li><strong>DO</strong> reference game objects by name where possible. For example "use the 'IP Start Button' button". The Bot is able to see any Game Object exposed by the Entity Discoverers you have registered in your game as children of the Automation Controller (see the <a href="/automated-testing/getting-started#adding-entity-discoverers-to-your-scene">Getting Started Guide</a> for more information on Entity Discoverers).</li><li><strong>DO</strong> try to reference all the steps the bot will need to take, at a high level. The model will see all the interactables in the scene and needs to be able to determine which ones it should interact with. If you have multiple ways of completing a goal, you should specify which one to use.</li><li><strong>DO</strong> write a short goal. The Bot receives a LOT of context information from the game. The longer your Goal is, the more likely you are to hit context limits in the GPT-4 model.</li><li><strong>DON'T</strong> use this bot for highly timing-sensitive goals and gameplay (for example, jumping a gap in a platfomer). There is significant latency between when the bot sees the scene and when a response is returned from OpenAI. This latency is not consistent and can vary from a few seconds to a few minutes. This is a preview and we're working on ways to avoid the impact of this latency in the future (such as allowing the bot to plan ahead for future actions).</li><li><strong>DON'T</strong> expect perfection on the first try. You'll need to refine your goal a little bit to get the results.</li></ul><p>Some examples of bad prompts and the "better" prompt we recommend:</p><blockquote><p><strong>Bad</strong>: Start a new game on hard.</p><p><strong>Good</strong>: Reach the 'GameWorld' scene by creating a new character and selecting the 'Hard' difficulty level.</p></blockquote><blockquote><p><strong>Bad</strong>: Chop 10 trees</p><p><strong>Good</strong>: Select the 'Axe' tool, then chop 10 trees by locating each tree, walking to it, and hitting it until the tree is destroyed.</p></blockquote><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>Please join our <a href="https://discord.gg/Skafm6uF" target="_blank" rel="noopener noreferrer">Discord</a> to get help writing goals, and share your results!</p></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/automated-testing/getting-started"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Getting Started</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/automated-testing/creating-custom-components"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Custom Bots and Discoverers</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#prerequisites" class="table-of-contents__link toc-highlight">Prerequisites</a></li><li><a href="#adding-openai-credentials-to-your-game" class="table-of-contents__link toc-highlight">Adding OpenAI Credentials to your game</a></li><li><a href="#adding-the-gpt-assistant-bot-to-your-game" class="table-of-contents__link toc-highlight">Adding the GPT Assistant Bot to your game</a></li><li><a href="#setting-a-goal-for-the-gpt-assistant-bot" class="table-of-contents__link toc-highlight">Setting a Goal for the GPT Assistant Bot</a></li><li><a href="#attach-the-bot-to-the-ui-overlay" class="table-of-contents__link toc-highlight">Attach the bot to the UI Overlay</a></li><li><a href="#run-the-bot" class="table-of-contents__link toc-highlight">Run the bot</a></li><li><a href="#writing-a-good-goal" class="table-of-contents__link toc-highlight">Writing a good goal</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/automated-testing/overview.html b/automated-testing/overview.html index 35f0711..7610a41 100644 --- a/automated-testing/overview.html +++ b/automated-testing/overview.html @@ -9,14 +9,14 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" href="/automated-testing/overview">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/automated-testing/getting-started">Getting Started</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/automated-testing/gpt-assistant-bot">GPT Assistant Bot</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/automated-testing/creating-custom-components">Custom Bots and Discoverers</a></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Overview</span><meta itemprop="position" content="1"></li></ul></nav><div class="theme-doc-markdown markdown"><h1>Automated UI Testing for Unity</h1><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>The Automated UI Testing package is currently a preview and we're looking for your feedback! Please submit feedback using our <a href="https://d7y6yysps34.typeform.com/to/o8U6FGtO" target="_blank" rel="noopener noreferrer">feedback form</a>.</p><p>Also, <a href="https://discord.gg/925SYVse2H" target="_blank" rel="noopener noreferrer">join our Discord</a> to share your creations and get help from the community.</p></div></div><iframe width="560" height="315" src="https://www.youtube.com/embed/XMkOYYBkPwE?si=k9tq5YhHT53KG49p" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"></iframe><p>The Regression Games Automated Testing Package for Unity is a set of tools that help you test your game with less code. The package combines several powerful features to help you test your game:</p><ol><li><p>Automatic State Capture and Recording - Regression Games automatically discovers components in your game and allows you to make recordings of their state throughout a gameplay session. These recordings can be analyzed to determine if your game is behaving as expected.</p></li><li><p>Simple Automation Framework - Regression Games provides a simple framework for automating gameplay, and provides built-in automations for common tasks such as navigating menus.</p></li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--next" href="/automated-testing/getting-started"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Getting Started</div></a></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog.html b/blog.html index adad9aa..33fc2e8 100644 --- a/blog.html +++ b/blog.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/welcome">Welcome</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2021-08-26T00:00:00.000Z" itemprop="datePublished">August 26, 2021</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/slorber.png" alt="Sébastien Lorber"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Sébastien Lorber</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus maintainer</small></div></div></div><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/yangshun.png" alt="Yangshun Tay"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Yangshun Tay</span></a></div><small class="avatar__subtitle" itemprop="description">Front End Engineer @ Facebook</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p><a href="https://docusaurus.io/docs/blog" target="_blank" rel="noopener noreferrer">Docusaurus blogging features</a> are powered by the <a href="https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog" target="_blank" rel="noopener noreferrer">blog plugin</a>.</p><p>Simply add Markdown files (or folders) to the <code>blog</code> directory.</p><p>Regular blog authors can be added to <code>authors.yml</code>.</p><p>The blog post date can be extracted from filenames, such as:</p><ul><li><code>2019-05-30-welcome.md</code></li><li><code>2019-05-30-welcome/index.md</code></li></ul><p>A blog post folder can be convenient to co-locate blog post images:</p><p><img loading="lazy" alt="Docusaurus Plushie" src="/assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg" width="1500" height="500" class="img_ev3q"></p><p>The blog supports tags as well!</p><p><strong>And if you don't want a blog</strong>: just delete this directory, and use <code>blog: false</code> in your Docusaurus config.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/facebook">facebook</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hello">hello</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/mdx-blog-post">MDX Blog Post</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2021-08-01T00:00:00.000Z" itemprop="datePublished">August 1, 2021</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/slorber.png" alt="Sébastien Lorber"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Sébastien Lorber</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus maintainer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>Blog posts support <a href="https://docusaurus.io/docs/markdown-features" target="_blank" rel="noopener noreferrer">Docusaurus Markdown features</a>, such as <a href="https://mdxjs.com/" target="_blank" rel="noopener noreferrer">MDX</a>.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>Use the power of React to create interactive blog posts.</p><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token operator" style="color:#393A34"><</span><span class="token plain">button onClick</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=></span><span class="token plain"> </span><span class="token function" style="color:#d73a49">alert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'button clicked!'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">></span><span class="token maybe-class-name">Click</span><span class="token plain"> me</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34"><</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">button</span><span class="token operator" style="color:#393A34">></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><button>Click me!</button></div></div></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/long-blog-post">Long Blog Post</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2019-05-29T00:00:00.000Z" itemprop="datePublished">May 29, 2019</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/endiliey" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/endiliey.png" alt="Endilie Yacop Sucipto"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/endiliey" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Endilie Yacop Sucipto</span></a></div><small class="avatar__subtitle" itemprop="description">Maintainer of Docusaurus</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This is the summary of a very long blog post,</p><p>Use a <code><!--</code> <code>truncate</code> <code>--></code> comment to limit blog post size in the list view.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hello">hello</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Long Blog Post" href="/blog/long-blog-post"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/first-blog-post">First Blog Post</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2019-05-28T00:00:00.000Z" itemprop="datePublished">May 28, 2019</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/wgao19" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/wgao19.png" alt="Gao Wei"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/wgao19" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Gao Wei</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus Core Team</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hola">hola</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/archive.html b/blog/archive.html index 14c7ba0..5547d36 100644 --- a/blog/archive.html +++ b/blog/archive.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><header class="hero hero--primary"><div class="container"><h1 class="hero__title">Archive</h1><p class="hero__subtitle">Archive</p></div></header><main><section class="margin-vert--lg"><div class="container"><div class="row"><div class="col col--4 margin-vert--lg"><h3>2019</h3><ul><li><a href="/blog/long-blog-post">May 29, 2019<!-- --> - <!-- -->Long Blog Post</a></li><li><a href="/blog/first-blog-post">May 28, 2019<!-- --> - <!-- -->First Blog Post</a></li></ul></div><div class="col col--4 margin-vert--lg"><h3>2021</h3><ul><li><a href="/blog/welcome">August 26, 2021<!-- --> - <!-- -->Welcome</a></li><li><a href="/blog/mdx-blog-post">August 1, 2021<!-- --> - <!-- -->MDX Blog Post</a></li></ul></div></div></div></section></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/first-blog-post.html b/blog/first-blog-post.html index 8d5eba6..29f7dd1 100644 --- a/blog/first-blog-post.html +++ b/blog/first-blog-post.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a aria-current="page" class="sidebarItemLink_mo7H sidebarItemLinkActive_I1ZP" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h1 class="title_f1Hy" itemprop="headline">First Blog Post</h1><div class="container_mt6G margin-vert--md"><time datetime="2019-05-28T00:00:00.000Z" itemprop="datePublished">May 28, 2019</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/wgao19" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/wgao19.png" alt="Gao Wei"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/wgao19" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Gao Wei</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus Core Team</small></div></div></div></div></header><div id="__blog-post-container" class="markdown" itemprop="articleBody"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p></div><footer class="row docusaurus-mt-lg blogPostFooterDetailsFull_mRVl"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hola">hola</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/blog/long-blog-post"><div class="pagination-nav__sublabel">Newer Post</div><div class="pagination-nav__label">Long Blog Post</div></a></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/long-blog-post.html b/blog/long-blog-post.html index b648502..7c328a5 100644 --- a/blog/long-blog-post.html +++ b/blog/long-blog-post.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a aria-current="page" class="sidebarItemLink_mo7H sidebarItemLinkActive_I1ZP" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h1 class="title_f1Hy" itemprop="headline">Long Blog Post</h1><div class="container_mt6G margin-vert--md"><time datetime="2019-05-29T00:00:00.000Z" itemprop="datePublished">May 29, 2019</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/endiliey" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/endiliey.png" alt="Endilie Yacop Sucipto"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/endiliey" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Endilie Yacop Sucipto</span></a></div><small class="avatar__subtitle" itemprop="description">Maintainer of Docusaurus</small></div></div></div></div></header><div id="__blog-post-container" class="markdown" itemprop="articleBody"><p>This is the summary of a very long blog post,</p><p>Use a <code><!--</code> <code>truncate</code> <code>--></code> comment to limit blog post size in the list view.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p></div><footer class="row docusaurus-mt-lg blogPostFooterDetailsFull_mRVl"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hello">hello</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/blog/mdx-blog-post"><div class="pagination-nav__sublabel">Newer Post</div><div class="pagination-nav__label">MDX Blog Post</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/blog/first-blog-post"><div class="pagination-nav__sublabel">Older Post</div><div class="pagination-nav__label">First Blog Post</div></a></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/mdx-blog-post.html b/blog/mdx-blog-post.html index 04af435..0ec23e3 100644 --- a/blog/mdx-blog-post.html +++ b/blog/mdx-blog-post.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a aria-current="page" class="sidebarItemLink_mo7H sidebarItemLinkActive_I1ZP" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h1 class="title_f1Hy" itemprop="headline">MDX Blog Post</h1><div class="container_mt6G margin-vert--md"><time datetime="2021-08-01T00:00:00.000Z" itemprop="datePublished">August 1, 2021</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/slorber.png" alt="Sébastien Lorber"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Sébastien Lorber</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus maintainer</small></div></div></div></div></header><div id="__blog-post-container" class="markdown" itemprop="articleBody"><p>Blog posts support <a href="https://docusaurus.io/docs/markdown-features" target="_blank" rel="noopener noreferrer">Docusaurus Markdown features</a>, such as <a href="https://mdxjs.com/" target="_blank" rel="noopener noreferrer">MDX</a>.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>Use the power of React to create interactive blog posts.</p><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token operator" style="color:#393A34"><</span><span class="token plain">button onClick</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=></span><span class="token plain"> </span><span class="token function" style="color:#d73a49">alert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'button clicked!'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">></span><span class="token maybe-class-name">Click</span><span class="token plain"> me</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34"><</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">button</span><span class="token operator" style="color:#393A34">></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><button>Click me!</button></div></div></div><footer class="row docusaurus-mt-lg blogPostFooterDetailsFull_mRVl"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/blog/welcome"><div class="pagination-nav__sublabel">Newer Post</div><div class="pagination-nav__label">Welcome</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/blog/long-blog-post"><div class="pagination-nav__sublabel">Older Post</div><div class="pagination-nav__label">Long Blog Post</div></a></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/tags.html b/blog/tags.html index d1faae1..defcac8 100644 --- a/blog/tags.html +++ b/blog/tags.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><h1>Tags</h1><section class="margin-vert--lg"><article><h2>D</h2><ul class="padding--none"><li class="tag_Nnez"><a class="tag_zVej tagWithCount_h2kH" href="/blog/tags/docusaurus">docusaurus<span>4</span></a></li></ul><hr></article><article><h2>F</h2><ul class="padding--none"><li class="tag_Nnez"><a class="tag_zVej tagWithCount_h2kH" href="/blog/tags/facebook">facebook<span>1</span></a></li></ul><hr></article><article><h2>H</h2><ul class="padding--none"><li class="tag_Nnez"><a class="tag_zVej tagWithCount_h2kH" href="/blog/tags/hello">hello<span>2</span></a></li><li class="tag_Nnez"><a class="tag_zVej tagWithCount_h2kH" href="/blog/tags/hola">hola<span>1</span></a></li></ul><hr></article></section></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/tags/docusaurus.html b/blog/tags/docusaurus.html index 2b8291a..c3b59d3 100644 --- a/blog/tags/docusaurus.html +++ b/blog/tags/docusaurus.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><header class="margin-bottom--xl"><h1>4 posts tagged with "docusaurus"</h1><a href="/blog/tags">View All Tags</a></header><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/welcome">Welcome</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2021-08-26T00:00:00.000Z" itemprop="datePublished">August 26, 2021</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/slorber.png" alt="Sébastien Lorber"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Sébastien Lorber</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus maintainer</small></div></div></div><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/yangshun.png" alt="Yangshun Tay"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Yangshun Tay</span></a></div><small class="avatar__subtitle" itemprop="description">Front End Engineer @ Facebook</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p><a href="https://docusaurus.io/docs/blog" target="_blank" rel="noopener noreferrer">Docusaurus blogging features</a> are powered by the <a href="https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog" target="_blank" rel="noopener noreferrer">blog plugin</a>.</p><p>Simply add Markdown files (or folders) to the <code>blog</code> directory.</p><p>Regular blog authors can be added to <code>authors.yml</code>.</p><p>The blog post date can be extracted from filenames, such as:</p><ul><li><code>2019-05-30-welcome.md</code></li><li><code>2019-05-30-welcome/index.md</code></li></ul><p>A blog post folder can be convenient to co-locate blog post images:</p><p><img loading="lazy" alt="Docusaurus Plushie" src="/assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg" width="1500" height="500" class="img_ev3q"></p><p>The blog supports tags as well!</p><p><strong>And if you don't want a blog</strong>: just delete this directory, and use <code>blog: false</code> in your Docusaurus config.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/facebook">facebook</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hello">hello</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/mdx-blog-post">MDX Blog Post</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2021-08-01T00:00:00.000Z" itemprop="datePublished">August 1, 2021</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/slorber.png" alt="Sébastien Lorber"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Sébastien Lorber</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus maintainer</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>Blog posts support <a href="https://docusaurus.io/docs/markdown-features" target="_blank" rel="noopener noreferrer">Docusaurus Markdown features</a>, such as <a href="https://mdxjs.com/" target="_blank" rel="noopener noreferrer">MDX</a>.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>Use the power of React to create interactive blog posts.</p><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token operator" style="color:#393A34"><</span><span class="token plain">button onClick</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=></span><span class="token plain"> </span><span class="token function" style="color:#d73a49">alert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'button clicked!'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">></span><span class="token maybe-class-name">Click</span><span class="token plain"> me</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34"><</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">button</span><span class="token operator" style="color:#393A34">></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><button>Click me!</button></div></div></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/long-blog-post">Long Blog Post</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2019-05-29T00:00:00.000Z" itemprop="datePublished">May 29, 2019</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/endiliey" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/endiliey.png" alt="Endilie Yacop Sucipto"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/endiliey" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Endilie Yacop Sucipto</span></a></div><small class="avatar__subtitle" itemprop="description">Maintainer of Docusaurus</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This is the summary of a very long blog post,</p><p>Use a <code><!--</code> <code>truncate</code> <code>--></code> comment to limit blog post size in the list view.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hello">hello</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Long Blog Post" href="/blog/long-blog-post"><b>Read More</b></a></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/first-blog-post">First Blog Post</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2019-05-28T00:00:00.000Z" itemprop="datePublished">May 28, 2019</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/wgao19" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/wgao19.png" alt="Gao Wei"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/wgao19" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Gao Wei</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus Core Team</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hola">hola</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/tags/facebook.html b/blog/tags/facebook.html index 8dd5be9..7bf8c1c 100644 --- a/blog/tags/facebook.html +++ b/blog/tags/facebook.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><header class="margin-bottom--xl"><h1>One post tagged with "facebook"</h1><a href="/blog/tags">View All Tags</a></header><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/welcome">Welcome</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2021-08-26T00:00:00.000Z" itemprop="datePublished">August 26, 2021</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/slorber.png" alt="Sébastien Lorber"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Sébastien Lorber</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus maintainer</small></div></div></div><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/yangshun.png" alt="Yangshun Tay"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Yangshun Tay</span></a></div><small class="avatar__subtitle" itemprop="description">Front End Engineer @ Facebook</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p><a href="https://docusaurus.io/docs/blog" target="_blank" rel="noopener noreferrer">Docusaurus blogging features</a> are powered by the <a href="https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog" target="_blank" rel="noopener noreferrer">blog plugin</a>.</p><p>Simply add Markdown files (or folders) to the <code>blog</code> directory.</p><p>Regular blog authors can be added to <code>authors.yml</code>.</p><p>The blog post date can be extracted from filenames, such as:</p><ul><li><code>2019-05-30-welcome.md</code></li><li><code>2019-05-30-welcome/index.md</code></li></ul><p>A blog post folder can be convenient to co-locate blog post images:</p><p><img loading="lazy" alt="Docusaurus Plushie" src="/assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg" width="1500" height="500" class="img_ev3q"></p><p>The blog supports tags as well!</p><p><strong>And if you don't want a blog</strong>: just delete this directory, and use <code>blog: false</code> in your Docusaurus config.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/facebook">facebook</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hello">hello</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/tags/hello.html b/blog/tags/hello.html index 48ce367..1270cb1 100644 --- a/blog/tags/hello.html +++ b/blog/tags/hello.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><header class="margin-bottom--xl"><h1>2 posts tagged with "hello"</h1><a href="/blog/tags">View All Tags</a></header><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/welcome">Welcome</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2021-08-26T00:00:00.000Z" itemprop="datePublished">August 26, 2021</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/slorber.png" alt="Sébastien Lorber"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Sébastien Lorber</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus maintainer</small></div></div></div><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/yangshun.png" alt="Yangshun Tay"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Yangshun Tay</span></a></div><small class="avatar__subtitle" itemprop="description">Front End Engineer @ Facebook</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p><a href="https://docusaurus.io/docs/blog" target="_blank" rel="noopener noreferrer">Docusaurus blogging features</a> are powered by the <a href="https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog" target="_blank" rel="noopener noreferrer">blog plugin</a>.</p><p>Simply add Markdown files (or folders) to the <code>blog</code> directory.</p><p>Regular blog authors can be added to <code>authors.yml</code>.</p><p>The blog post date can be extracted from filenames, such as:</p><ul><li><code>2019-05-30-welcome.md</code></li><li><code>2019-05-30-welcome/index.md</code></li></ul><p>A blog post folder can be convenient to co-locate blog post images:</p><p><img loading="lazy" alt="Docusaurus Plushie" src="/assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg" width="1500" height="500" class="img_ev3q"></p><p>The blog supports tags as well!</p><p><strong>And if you don't want a blog</strong>: just delete this directory, and use <code>blog: false</code> in your Docusaurus config.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/facebook">facebook</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hello">hello</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/long-blog-post">Long Blog Post</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2019-05-29T00:00:00.000Z" itemprop="datePublished">May 29, 2019</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/endiliey" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/endiliey.png" alt="Endilie Yacop Sucipto"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/endiliey" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Endilie Yacop Sucipto</span></a></div><small class="avatar__subtitle" itemprop="description">Maintainer of Docusaurus</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>This is the summary of a very long blog post,</p><p>Use a <code><!--</code> <code>truncate</code> <code>--></code> comment to limit blog post size in the list view.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hello">hello</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Long Blog Post" href="/blog/long-blog-post"><b>Read More</b></a></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/tags/hola.html b/blog/tags/hola.html index 21d8bee..a1cc312 100644 --- a/blog/tags/hola.html +++ b/blog/tags/hola.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><header class="margin-bottom--xl"><h1>One post tagged with "hola"</h1><a href="/blog/tags">View All Tags</a></header><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/first-blog-post">First Blog Post</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2019-05-28T00:00:00.000Z" itemprop="datePublished">May 28, 2019</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/wgao19" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/wgao19.png" alt="Gao Wei"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/wgao19" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Gao Wei</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus Core Team</small></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hola">hola</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/blog/welcome.html b/blog/welcome.html index a77c3e0..a224d1f 100644 --- a/blog/welcome.html +++ b/blog/welcome.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a aria-current="page" class="sidebarItemLink_mo7H sidebarItemLinkActive_I1ZP" href="/blog/welcome">Welcome</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/mdx-blog-post">MDX Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/long-blog-post">Long Blog Post</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/first-blog-post">First Blog Post</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h1 class="title_f1Hy" itemprop="headline">Welcome</h1><div class="container_mt6G margin-vert--md"><time datetime="2021-08-26T00:00:00.000Z" itemprop="datePublished">August 26, 2021</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/slorber.png" alt="Sébastien Lorber"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://sebastienlorber.com" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Sébastien Lorber</span></a></div><small class="avatar__subtitle" itemprop="description">Docusaurus maintainer</small></div></div></div><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo" src="https://github.com/yangshun.png" alt="Yangshun Tay"></a><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="https://github.com/yangshun" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Yangshun Tay</span></a></div><small class="avatar__subtitle" itemprop="description">Front End Engineer @ Facebook</small></div></div></div></div></header><div id="__blog-post-container" class="markdown" itemprop="articleBody"><p><a href="https://docusaurus.io/docs/blog" target="_blank" rel="noopener noreferrer">Docusaurus blogging features</a> are powered by the <a href="https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog" target="_blank" rel="noopener noreferrer">blog plugin</a>.</p><p>Simply add Markdown files (or folders) to the <code>blog</code> directory.</p><p>Regular blog authors can be added to <code>authors.yml</code>.</p><p>The blog post date can be extracted from filenames, such as:</p><ul><li><code>2019-05-30-welcome.md</code></li><li><code>2019-05-30-welcome/index.md</code></li></ul><p>A blog post folder can be convenient to co-locate blog post images:</p><p><img loading="lazy" alt="Docusaurus Plushie" src="/assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg" width="1500" height="500" class="img_ev3q"></p><p>The blog supports tags as well!</p><p><strong>And if you don't want a blog</strong>: just delete this directory, and use <code>blog: false</code> in your Docusaurus config.</p></div><footer class="row docusaurus-mt-lg blogPostFooterDetailsFull_mRVl"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/facebook">facebook</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/hello">hello</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/docusaurus">docusaurus</a></li></ul></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--next" href="/blog/mdx-blog-post"><div class="pagination-nav__sublabel">Older Post</div><div class="pagination-nav__label">MDX Blog Post</div></a></nav></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/changelog.html b/changelog.html index 71936ef..612822a 100644 --- a/changelog.html +++ b/changelog.html @@ -3,26 +3,26 @@ <head> <meta charset="UTF-8"> <meta name="generator" content="Docusaurus v2.4.1"> -<title data-rh="true">Changelog | Regression Games</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://docs.regression.gg/img/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://docs.regression.gg/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://docs.regression.gg/changelog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Changelog | Regression Games"><meta data-rh="true" name="description" content="Release 0.0.27"><meta data-rh="true" property="og:description" content="Release 0.0.27"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.regression.gg/changelog"><link data-rh="true" rel="alternate" href="https://docs.regression.gg/changelog" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.regression.gg/changelog" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Regression Games RSS Feed"> +<title data-rh="true">Changelog | Regression Games</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://docs.regression.gg/img/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://docs.regression.gg/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://docs.regression.gg/changelog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Changelog | Regression Games"><meta data-rh="true" name="description" content="Release 0.0.28"><meta data-rh="true" property="og:description" content="Release 0.0.28"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.regression.gg/changelog"><link data-rh="true" rel="alternate" href="https://docs.regression.gg/changelog" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.regression.gg/changelog" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Regression Games RSS Feed"> <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Regression Games Atom Feed"> <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> -<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Changelog</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0027">Release 0.0.27<a href="#release-0027" class="hash-link" aria-label="Direct link to Release 0.0.27" title="Direct link to Release 0.0.27"></a></h2><p><em>September 9, 2024</em></p><ul><li>Validations can now be run against state contained within the root properties of a Game Object.</li><li>Game logs are now recorded and uploaded as part of a bot sequence run or recording (no UI available yet).</li><li>Performance of data capture during gameplay recording has been improved, especially for ECS-based games.</li><li>Bug fix: Screenshots are now properly captured at the end of a frame.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0026">Release 0.0.26<a href="#release-0026" class="hash-link" aria-label="Direct link to Release 0.0.26" title="Direct link to Release 0.0.26"></a></h2><p><em> August 26, 2024</em></p><ul><li>Interleaved playback of recorded mouse and keyboard events has been improved</li><li>Improved navigation layout on our website</li><li>Bug fix: Scenario builder no longer shows duplicate step options</li><li>Bug fix: Improvements to the display of the Validation Demo walkthrough</li><li>Many experimental features added for an improved overlay experience, bot logic sequencing, and computer vision approaches... stay tuned!</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0025">Release 0.0.25<a href="#release-0025" class="hash-link" aria-label="Direct link to Release 0.0.25" title="Direct link to Release 0.0.25"></a></h2><p><em>August 12, 2024</em></p><ul><li>Performance rules can be created to flag when a playthrough crosses certain FPS thresholds</li><li>Performance information is collected more frequently during gameplay recording</li><li><strong>New Bot</strong> - An action analysis tool adds support for a "monkey bot" that can randomly interact with a game in an efficient manner</li><li>Unity ECS data collection is now supported - validate state information from both ECS and GameObjects</li><li>Improvements to various SDK error messages</li><li>Better support for lower resolution screens</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0024">Release 0.0.24<a href="#release-0024" class="hash-link" aria-label="Direct link to Release 0.0.24" title="Direct link to Release 0.0.24"></a></h2><p><em>This release deployment was skipped and kept internal</em></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0023">Release 0.0.23<a href="#release-0023" class="hash-link" aria-label="Direct link to Release 0.0.23" title="Direct link to Release 0.0.23"></a></h2><p><em>July 1, 2024</em></p><p><strong>New Features</strong></p><ul><li>Try out our validation tool without an account or game! Visit <a href="http://play.regression.gg" target="_blank" rel="noopener noreferrer">play.regression.gg</a> to learn more</li><li>A tutorial is now available for our validation tool, built directly into the website</li><li>The progress of a validation run is now displayed</li><li>Scenarios can now be run from the demo scenario builder page</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Scenario validations now properly start from the start of a recording (the ordering of scenarios no longer matters)</li><li>The validation results now shows the proper gameplay recording within the screenshot scrubber</li><li>Improved performance of input recording within the SDK</li><li>Long-running validation runs no longer timeout</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0022">Release 0.0.22<a href="#release-0022" class="hash-link" aria-label="Direct link to Release 0.0.22" title="Direct link to Release 0.0.22"></a></h2><p><em>June 18, 2024</em></p><p><strong>New Features</strong></p><ul><li>The Unity SDK now supports recording games using the legacy input system and Unity UI.</li><li>New data collection format for improved state display within the scenario builder and validation results page.</li><li>New Bot Segment data format for stitching together various bot types, such as monkey testing bots combined with recordings.</li><li>Bounding boxes show entity locations within the gameplay session web UI for improved debugging.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0021">Release 0.0.21<a href="#release-0021" class="hash-link" aria-label="Direct link to Release 0.0.21" title="Direct link to Release 0.0.21"></a></h2><p><em>June 6, 2024</em></p><p><strong>New SDK Features</strong></p><ul><li>Recordings can now be used programmatically in Unity Test Runner.</li><li>Inputs handled via <code>Input.GetKey()</code> can now be captured and used in replays.</li><li>An animation rigging package is now available within the Unity SDK for data capturing.</li></ul><p><strong>SDK Bug Fixes</strong></p><ul><li>Improvements to error messages for recording playback.</li></ul><p><strong>Website Bug Fixes</strong></p><ul><li>Prevent breakage when storing null or undefined in a Store Step.</li><li>Adjusted height for the recording thumbnail in suite details.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0020">Release 0.0.20<a href="#release-0020" class="hash-link" aria-label="Direct link to Release 0.0.20" title="Direct link to Release 0.0.20"></a></h2><p><em>May 23rd, 2024</em></p><p><strong>New Features</strong></p><ul><li>Memory and CPU information is now captured by gameplay session recording.</li><li>The in-game overlay has an improved layout.</li><li>Gameplay session recordings can now be looped for repeated testing.</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Quickscope <ul><li>Null count values are now allowed for scenario steps that have an optional count.</li><li>Fixed a bug where duplicate scenario names were allowed in a suite.</li><li>Scenarios now maintain their creation order.</li><li>Improved loading of screenshots for a gameplay session.</li></ul></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0019">Release 0.0.19<a href="#release-0019" class="hash-link" aria-label="Direct link to Release 0.0.19" title="Direct link to Release 0.0.19"></a></h2><p><em>May 8th, 2024</em></p><ul><li>Introducing <strong>Quickscope</strong>, a new collection of features made for easy smoke test automation!<ul><li>New features within the SDK for recording a gameplay session and playing it back as an automated test</li><li>A UI for designing functional validation tests from data automatically scraped from your game.</li></ul></li></ul><p>Learn more about this release in our <a href="https://www.regression.gg/post/quickscope-launch?ref=docs.regression.gg" target="_blank" rel="noopener noreferrer">blog post!</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0018">Release 0.0.18<a href="#release-0018" class="hash-link" aria-label="Direct link to Release 0.0.18" title="Direct link to Release 0.0.18"></a></h2><p><em>April 8th, 2024</em></p><p><strong>New Features</strong></p><ul><li>The new UI/UX is now available to all users.</li><li><em>Be on the lookout for a large release at the beginning of May!</em></li></ul><p><strong>Bug Fixes</strong></p><ul><li>Fixed a bug where Agent Builder would use incorrect paths for certain operation systems.</li><li>Fixed a bug where certain redirects were not working on the website.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0017">Release 0.0.17<a href="#release-0017" class="hash-link" aria-label="Direct link to Release 0.0.17" title="Direct link to Release 0.0.17"></a></h2><p><em>February 29, 2024</em></p><p><strong>New Features</strong></p><ul><li>Introducing an <a href="/automated-testing/overview">automated UI testing framework for Unity</a></li><li>An entirely new way of <!-- -->[representing states]<!-- --> requiring less custom integration</li><li>[Rolling Out]<!-- --> New UI design - send us a message for access!</li></ul><p><strong>Bug Fixes</strong></p><ul><li>The SDK is still only usable in the editor, but will no longer interfere with creating production builds. Future support for running the SDK in production builds will be coming at a later date.</li><li>Various UI improvements, such as screen size scaling and link fixes</li></ul><p><strong>Other Notes</strong></p><ul><li>Improved scalability of the bot instance history dashboard</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0016">Release 0.0.16<a href="#release-0016" class="hash-link" aria-label="Direct link to Release 0.0.16" title="Direct link to Release 0.0.16"></a></h2><p><em>December 19, 2023</em></p><p><strong>New Features</strong></p><ul><li>Our new <a href="/quickstart">quickstart guide</a> allows you to have your first bot running in minutes</li><li><code>[RGState]</code> is now allowed on class properties</li><li>Support for raw key press actions using the new Unity Input System, which works great for certain types of bots</li><li>Code generation time has been reduced, and is now automatic</li><li>Default tick rate for bots is now faster</li><li>Logs from local bots are now uploaded and saved for debugging</li><li>Local bots can now be saved onto your Regression Games account</li><li>The current tick number can now be accessed by local bots</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Fixed bug where the username and password would not change within the SDK settings</li><li>Bot loading reliability has been improved</li><li>Better save settings around login passwords</li><li>Stack traces from bots are now clickable and more usable within the Unity console</li><li>Improved / reduced OOM issues with bot replay data</li></ul><p><strong>Other Notes</strong></p><ul><li>Our SSL certs have been updated - make sure to update your SDK to use these new settings</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0015">Release 0.0.15<a href="#release-0015" class="hash-link" aria-label="Direct link to Release 0.0.15" title="Direct link to Release 0.0.15"></a></h2><p><em>November 21, 2023</em></p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>This version is a release preview, and it's <strong>our biggest release yet!</strong> Our product is in beta and we would love for developers to +<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Changelog</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0028">Release 0.0.28<a href="#release-0028" class="hash-link" aria-label="Direct link to Release 0.0.28" title="Direct link to Release 0.0.28"></a></h2><p><em>September 23, 2024</em></p><p><strong>New Features</strong></p><ul><li>Bot Sequences can now be created, edited, and deleted directly from the in-game overlay</li><li>Bot segments that rely on image sources can now load images from paths vs just raw data</li><li>Direct login is no longer supported for the SDK; API keys are now required</li><li>Bot Sequences are now reloaded automatically from disk when played</li><li>Object detection bot segments can now define a confidence threshold (text queries only)</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Improved language and explanations within the website</li><li>Properly handle failing behaviour segments that dont load or timeout</li><li>Use of computer-vision capabilities now requires authentication by setting an API key in the SDK settings</li><li>Sprite rendering within the SDK has been improved</li><li>Fixed a bug where the overlay would throw a null exception when opening for the first time</li><li>Fixed issues causing the game to freeze for a few seconds when starting</li><li>Data for the last segment of a recording is now properly saved</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0027">Release 0.0.27<a href="#release-0027" class="hash-link" aria-label="Direct link to Release 0.0.27" title="Direct link to Release 0.0.27"></a></h2><p><em>September 9, 2024</em></p><ul><li>Validations can now be run against state contained within the root properties of a Game Object.</li><li>Game logs are now recorded and uploaded as part of a bot sequence run or recording (no UI available yet).</li><li>Performance of data capture during gameplay recording has been improved, especially for ECS-based games.</li><li>Bug fix: Screenshots are now properly captured at the end of a frame.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0026">Release 0.0.26<a href="#release-0026" class="hash-link" aria-label="Direct link to Release 0.0.26" title="Direct link to Release 0.0.26"></a></h2><p><em> August 26, 2024</em></p><ul><li>Interleaved playback of recorded mouse and keyboard events has been improved</li><li>Improved navigation layout on our website</li><li>Bug fix: Scenario builder no longer shows duplicate step options</li><li>Bug fix: Improvements to the display of the Validation Demo walkthrough</li><li>Many experimental features added for an improved overlay experience, bot logic sequencing, and computer vision approaches... stay tuned!</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0025">Release 0.0.25<a href="#release-0025" class="hash-link" aria-label="Direct link to Release 0.0.25" title="Direct link to Release 0.0.25"></a></h2><p><em>August 12, 2024</em></p><ul><li>Performance rules can be created to flag when a playthrough crosses certain FPS thresholds</li><li>Performance information is collected more frequently during gameplay recording</li><li><strong>New Bot</strong> - An action analysis tool adds support for a "monkey bot" that can randomly interact with a game in an efficient manner</li><li>Unity ECS data collection is now supported - validate state information from both ECS and GameObjects</li><li>Improvements to various SDK error messages</li><li>Better support for lower resolution screens</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0024">Release 0.0.24<a href="#release-0024" class="hash-link" aria-label="Direct link to Release 0.0.24" title="Direct link to Release 0.0.24"></a></h2><p><em>This release deployment was skipped and kept internal</em></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0023">Release 0.0.23<a href="#release-0023" class="hash-link" aria-label="Direct link to Release 0.0.23" title="Direct link to Release 0.0.23"></a></h2><p><em>July 1, 2024</em></p><p><strong>New Features</strong></p><ul><li>Try out our validation tool without an account or game! Visit <a href="http://play.regression.gg" target="_blank" rel="noopener noreferrer">play.regression.gg</a> to learn more</li><li>A tutorial is now available for our validation tool, built directly into the website</li><li>The progress of a validation run is now displayed</li><li>Scenarios can now be run from the demo scenario builder page</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Scenario validations now properly start from the start of a recording (the ordering of scenarios no longer matters)</li><li>The validation results now shows the proper gameplay recording within the screenshot scrubber</li><li>Improved performance of input recording within the SDK</li><li>Long-running validation runs no longer timeout</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0022">Release 0.0.22<a href="#release-0022" class="hash-link" aria-label="Direct link to Release 0.0.22" title="Direct link to Release 0.0.22"></a></h2><p><em>June 18, 2024</em></p><p><strong>New Features</strong></p><ul><li>The Unity SDK now supports recording games using the legacy input system and Unity UI.</li><li>New data collection format for improved state display within the scenario builder and validation results page.</li><li>New Bot Segment data format for stitching together various bot types, such as monkey testing bots combined with recordings.</li><li>Bounding boxes show entity locations within the gameplay session web UI for improved debugging.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0021">Release 0.0.21<a href="#release-0021" class="hash-link" aria-label="Direct link to Release 0.0.21" title="Direct link to Release 0.0.21"></a></h2><p><em>June 6, 2024</em></p><p><strong>New SDK Features</strong></p><ul><li>Recordings can now be used programmatically in Unity Test Runner.</li><li>Inputs handled via <code>Input.GetKey()</code> can now be captured and used in replays.</li><li>An animation rigging package is now available within the Unity SDK for data capturing.</li></ul><p><strong>SDK Bug Fixes</strong></p><ul><li>Improvements to error messages for recording playback.</li></ul><p><strong>Website Bug Fixes</strong></p><ul><li>Prevent breakage when storing null or undefined in a Store Step.</li><li>Adjusted height for the recording thumbnail in suite details.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0020">Release 0.0.20<a href="#release-0020" class="hash-link" aria-label="Direct link to Release 0.0.20" title="Direct link to Release 0.0.20"></a></h2><p><em>May 23rd, 2024</em></p><p><strong>New Features</strong></p><ul><li>Memory and CPU information is now captured by gameplay session recording.</li><li>The in-game overlay has an improved layout.</li><li>Gameplay session recordings can now be looped for repeated testing.</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Quickscope <ul><li>Null count values are now allowed for scenario steps that have an optional count.</li><li>Fixed a bug where duplicate scenario names were allowed in a suite.</li><li>Scenarios now maintain their creation order.</li><li>Improved loading of screenshots for a gameplay session.</li></ul></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0019">Release 0.0.19<a href="#release-0019" class="hash-link" aria-label="Direct link to Release 0.0.19" title="Direct link to Release 0.0.19"></a></h2><p><em>May 8th, 2024</em></p><ul><li>Introducing <strong>Quickscope</strong>, a new collection of features made for easy smoke test automation!<ul><li>New features within the SDK for recording a gameplay session and playing it back as an automated test</li><li>A UI for designing functional validation tests from data automatically scraped from your game.</li></ul></li></ul><p>Learn more about this release in our <a href="https://www.regression.gg/post/quickscope-launch?ref=docs.regression.gg" target="_blank" rel="noopener noreferrer">blog post!</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0018">Release 0.0.18<a href="#release-0018" class="hash-link" aria-label="Direct link to Release 0.0.18" title="Direct link to Release 0.0.18"></a></h2><p><em>April 8th, 2024</em></p><p><strong>New Features</strong></p><ul><li>The new UI/UX is now available to all users.</li><li><em>Be on the lookout for a large release at the beginning of May!</em></li></ul><p><strong>Bug Fixes</strong></p><ul><li>Fixed a bug where Agent Builder would use incorrect paths for certain operation systems.</li><li>Fixed a bug where certain redirects were not working on the website.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0017">Release 0.0.17<a href="#release-0017" class="hash-link" aria-label="Direct link to Release 0.0.17" title="Direct link to Release 0.0.17"></a></h2><p><em>February 29, 2024</em></p><p><strong>New Features</strong></p><ul><li>Introducing an <a href="/automated-testing/overview">automated UI testing framework for Unity</a></li><li>An entirely new way of <!-- -->[representing states]<!-- --> requiring less custom integration</li><li>[Rolling Out]<!-- --> New UI design - send us a message for access!</li></ul><p><strong>Bug Fixes</strong></p><ul><li>The SDK is still only usable in the editor, but will no longer interfere with creating production builds. Future support for running the SDK in production builds will be coming at a later date.</li><li>Various UI improvements, such as screen size scaling and link fixes</li></ul><p><strong>Other Notes</strong></p><ul><li>Improved scalability of the bot instance history dashboard</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0016">Release 0.0.16<a href="#release-0016" class="hash-link" aria-label="Direct link to Release 0.0.16" title="Direct link to Release 0.0.16"></a></h2><p><em>December 19, 2023</em></p><p><strong>New Features</strong></p><ul><li>Our new <a href="/quickstart">quickstart guide</a> allows you to have your first bot running in minutes</li><li><code>[RGState]</code> is now allowed on class properties</li><li>Support for raw key press actions using the new Unity Input System, which works great for certain types of bots</li><li>Code generation time has been reduced, and is now automatic</li><li>Default tick rate for bots is now faster</li><li>Logs from local bots are now uploaded and saved for debugging</li><li>Local bots can now be saved onto your Regression Games account</li><li>The current tick number can now be accessed by local bots</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Fixed bug where the username and password would not change within the SDK settings</li><li>Bot loading reliability has been improved</li><li>Better save settings around login passwords</li><li>Stack traces from bots are now clickable and more usable within the Unity console</li><li>Improved / reduced OOM issues with bot replay data</li></ul><p><strong>Other Notes</strong></p><ul><li>Our SSL certs have been updated - make sure to update your SDK to use these new settings</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0015">Release 0.0.15<a href="#release-0015" class="hash-link" aria-label="Direct link to Release 0.0.15" title="Direct link to Release 0.0.15"></a></h2><p><em>November 21, 2023</em></p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>This version is a release preview, and it's <strong>our biggest release yet!</strong> Our product is in beta and we would love for developers to try it out and provide feedback! Contact us at <a href="mailto:info@regression.gg" target="_blank" rel="noopener noreferrer">info@regression.gg</a> for dedicated support and access.</p></div></div><p><strong>New Features</strong></p><ul><li>New welcome screen added to the SDK, with docs and <strong>sample scene/bot</strong> options</li><li>Introducing C# bots that run <strong>directly in Unity</strong> (reference materials <a href="/creating-bots/csharp/adaptive-bots">here</a>)</li><li>Introducing <a href="/pre-made-bots"><strong>Bot Marketplace</strong></a> (Beta), which provides ready-to-go bots and integration instructions for those bots</li><li>Introducing <strong>Validation Dashboard</strong> (Beta), which provides an interface to view validation runs for a bot, complete with screenshots, state information, and historical records of previous runs</li><li>Introducing <a href="/creating-bots/csharp/agent-builder"><strong>Agent Builder</strong></a> (Beta), which provides a fast, low-code way to develop bots</li><li>Improved debug utilities like RGGizmos to see what your bot is thinking</li><li>Bots can now be directly synced into your Unity projects</li><li>New tutorials and guides for getting started</li></ul><p><strong>General Improvements</strong></p><ul><li>New homepage dashboard for game developers, showing the latest runs, bots, and guides</li><li>Agent Builder now supports and uses zip file bots by default</li><li>New RGState, RGAction, and RGEntity features for integrating the SDK into your game</li><li>Site has been updated to remove most tournament information and instead focuses on bots for studios</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Fixed an issue where nullable types were not properly generated for RGActions</li><li>Fixed a code generation bug in Firefox</li><li>Fixed a bug where local unity bots could not utilize action formats properly</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0014">Release 0.0.14<a href="#release-0014" class="hash-link" aria-label="Direct link to Release 0.0.14" title="Direct link to Release 0.0.14"></a></h2><p><em>October 10, 2023</em> </p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact us at <a href="mailto:info@regression.gg" target="_blank" rel="noopener noreferrer">info@regression.gg</a> for dedicated support and access.</p></div></div><p><strong>Platform Improvements</strong></p><ul><li>Added better support for choosing between various languages and bot-building tools when creating bots</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Fixed bug with updating bots that are managed via a zip file</li><li>Fixed bug where logs for bots would display duplicated lines</li><li>Fixed issue with default settings for the Getting Started sample</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0013">Release 0.0.13<a href="#release-0013" class="hash-link" aria-label="Direct link to Release 0.0.13" title="Direct link to Release 0.0.13"></a></h2><p><em>September 25, 2023</em></p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact us at <a href="mailto:info@regression.gg" target="_blank" rel="noopener noreferrer">info@regression.gg</a> for dedicated support and access.</p></div></div><p><strong>New Features</strong></p><ul><li>New RGState attribute in our Unity SDK can be used to seamlessly communicate state information to your bots</li><li>Agent validation results are now sent to the Unity SDK and properly cause QA tests to fail if a validation has failed</li><li>The connection status of bots are now shown within the Unity SDK Overlay</li></ul><p><strong>Platform Improvements</strong></p><ul><li>Logs in the Unity SDK have been sanitized to omit sensitive information</li><li>New AIEngine service is available to make instant bots more stable and scalable</li><li>The start time of current and historical bot runs is now visible within the Running Bots dashboard</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Users no longer need a GitHub account to create and use Zip bots</li><li>Fixed an issue where match logs would be retrieved from an incorrect starting index</li><li>Fixed a client bug where documentation would not open from the Running Bots dashboard</li><li>Fixed an issue where Zip bots would not properly start or reload</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0012">Release 0.0.12<a href="#release-0012" class="hash-link" aria-label="Direct link to Release 0.0.12" title="Direct link to Release 0.0.12"></a></h2><p><em>September 11, 2023</em></p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact us at <a href="mailto:info@regression.gg" target="_blank" rel="noopener noreferrer">info@regression.gg</a> for dedicated support and access.</p></div></div><p><strong>New Platform Features</strong></p><ul><li>New <!-- -->[RGAction attribute]<!-- --> within RG Unity SDK to make actions easier to define</li><li><a href="/tutorials/github-actions">GitHub Actions and Unity Test Runner Support</a> - New samples and guides for running bots in GitHub Actions (and other CI/CD systems via <a href="https://game.ci" target="_blank" rel="noopener noreferrer">GameCI</a>)</li><li>UI improvements to Behavior Tree Beta</li><li>Updated defaults for RG Unity SDK to be more user-friendly</li><li>The RG Unity SDK now includes its own font assets for better interoperability</li><li>Links to download Zip bots from dashboard are now available</li></ul><p><strong>Bug fixes</strong></p><ul><li>Fixed issue where the website would freeze in some match loading scenarios</li><li>Fixed broken links in documentation</li><li>Fixed issue where Agent Builder code generation would flicker</li><li>Fixed bug where Unity actions would sometimes be sent to the wrong bots</li><li>Fixed bug where instant bots would not start when the user did not have a linked GitHub account</li></ul><p><strong>Security fixes</strong></p><ul><li>Fixed bug where lobby APIs would reveal email addresses</li></ul><p><strong>Coming Soon</strong></p><ul><li>Continued improvements and additions to the Unity attribute system</li><li>Additional samples and guides for various use cases</li><li>New features for the Agent Builder tool</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-0011">Release 0.0.11<a href="#release-0011" class="hash-link" aria-label="Direct link to Release 0.0.11" title="Direct link to Release 0.0.11"></a></h2><p><em>August 28, 2023</em></p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><p>This version is a release preview. Our product is in beta and we would love for developers to try it out and provide feedback! Contact us at <a href="mailto:info@regression.gg" target="_blank" rel="noopener noreferrer">info@regression.gg</a> for dedicated support and access.</p></div></div><p><strong>New Platform Features</strong></p><ul><li><a href="/404">Agent Builder</a> Beta - Our GPT-enabled agent builder product is live for select players, now with improved validation tools. If you<!-- -->'<!-- -->d like to try it out, let us know!</li><li>Our documentation site is now live! This docs site includes API/SDK references, tutorials, guides, and FAQs for both players and developers.</li><li><a href="/authenticating-with-api-keys">API Keys</a> - developers and players can now create API keys to interact with RG services</li><li>New onboarding flow for players and game developers</li><li>The ID of a bot can now be seen and copied within the Bot Manager</li><li>Zip Bots - Bots uploaded via zip can now be downloaded</li><li>The home page has been redesigned to provide players more information about getting started.</li></ul><p><strong>Unity SDK Features</strong></p><ul><li>An early preview of our <a href="/overview">Unity SDK</a> for building AI agents is now live! Our docs site has a getting started guide - message us for access.</li><li>Developers can now create Unity bots from the Bot Manager</li><li>Logs for bots can now be downloaded - available via API or through the <a href="/session-insights/in-editor-replay">Bot History dashboard</a></li><li>Character configuration for Unity bots is more flexible and customizable</li><li>Validation results for QA testing bots are now saved to Unity Replay files, allowing for viewing the validation directly within Unity</li><li>Default settings for the SDK have been adjusted for increased ease of use</li><li>Added a “Stop All” button for stopping bots from within the Unity game</li></ul><p><strong>Bug Fixes</strong></p><ul><li>Fixed issue where choosing a bot repository via commit would throw an error</li><li>Fixed a bug where bot logs would not show the correct number of lines before clearing</li><li>Fixed issues where Unity bots would not teardown properly</li><li>Fixed a bug where login and registration would sometimes fail</li><li>Feedback button has been moved to a better spot on the screen to avoid hiding other components</li><li>Fixed issue with SSL certs on certain systems</li></ul><p><strong>Migration Notes</strong></p><ul><li>For Unity developers: the namespace for various classes in the Unity SDK have been updated. Please make sure to add the following import declaration -in your files that use classes from Regression Games.</li></ul><div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">using</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">RegressionGames</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Coming Soon</strong></p><ul><li>New attribute-based system for Unity SDK integration. New attributes will permit defining bot actions and state from existing functions and variables within your code.</li><li>CI/CD support - Instructions and examples will be added for running a Quality Assurance Bots in GitHub Actions.</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#release-0027" class="table-of-contents__link toc-highlight">Release 0.0.27</a></li><li><a href="#release-0026" class="table-of-contents__link toc-highlight">Release 0.0.26</a></li><li><a href="#release-0025" class="table-of-contents__link toc-highlight">Release 0.0.25</a></li><li><a href="#release-0024" class="table-of-contents__link toc-highlight">Release 0.0.24</a></li><li><a href="#release-0023" class="table-of-contents__link toc-highlight">Release 0.0.23</a></li><li><a href="#release-0022" class="table-of-contents__link toc-highlight">Release 0.0.22</a></li><li><a href="#release-0021" class="table-of-contents__link toc-highlight">Release 0.0.21</a></li><li><a href="#release-0020" class="table-of-contents__link toc-highlight">Release 0.0.20</a></li><li><a href="#release-0019" class="table-of-contents__link toc-highlight">Release 0.0.19</a></li><li><a href="#release-0018" class="table-of-contents__link toc-highlight">Release 0.0.18</a></li><li><a href="#release-0017" class="table-of-contents__link toc-highlight">Release 0.0.17</a></li><li><a href="#release-0016" class="table-of-contents__link toc-highlight">Release 0.0.16</a></li><li><a href="#release-0015" class="table-of-contents__link toc-highlight">Release 0.0.15</a></li><li><a href="#release-0014" class="table-of-contents__link toc-highlight">Release 0.0.14</a></li><li><a href="#release-0013" class="table-of-contents__link toc-highlight">Release 0.0.13</a></li><li><a href="#release-0012" class="table-of-contents__link toc-highlight">Release 0.0.12</a></li><li><a href="#release-0011" class="table-of-contents__link toc-highlight">Release 0.0.11</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +in your files that use classes from Regression Games.</li></ul><div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">using</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">RegressionGames</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Coming Soon</strong></p><ul><li>New attribute-based system for Unity SDK integration. New attributes will permit defining bot actions and state from existing functions and variables within your code.</li><li>CI/CD support - Instructions and examples will be added for running a Quality Assurance Bots in GitHub Actions.</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#release-0028" class="table-of-contents__link toc-highlight">Release 0.0.28</a></li><li><a href="#release-0027" class="table-of-contents__link toc-highlight">Release 0.0.27</a></li><li><a href="#release-0026" class="table-of-contents__link toc-highlight">Release 0.0.26</a></li><li><a href="#release-0025" class="table-of-contents__link toc-highlight">Release 0.0.25</a></li><li><a href="#release-0024" class="table-of-contents__link toc-highlight">Release 0.0.24</a></li><li><a href="#release-0023" class="table-of-contents__link toc-highlight">Release 0.0.23</a></li><li><a href="#release-0022" class="table-of-contents__link toc-highlight">Release 0.0.22</a></li><li><a href="#release-0021" class="table-of-contents__link toc-highlight">Release 0.0.21</a></li><li><a href="#release-0020" class="table-of-contents__link toc-highlight">Release 0.0.20</a></li><li><a href="#release-0019" class="table-of-contents__link toc-highlight">Release 0.0.19</a></li><li><a href="#release-0018" class="table-of-contents__link toc-highlight">Release 0.0.18</a></li><li><a href="#release-0017" class="table-of-contents__link toc-highlight">Release 0.0.17</a></li><li><a href="#release-0016" class="table-of-contents__link toc-highlight">Release 0.0.16</a></li><li><a href="#release-0015" class="table-of-contents__link toc-highlight">Release 0.0.15</a></li><li><a href="#release-0014" class="table-of-contents__link toc-highlight">Release 0.0.14</a></li><li><a href="#release-0013" class="table-of-contents__link toc-highlight">Release 0.0.13</a></li><li><a href="#release-0012" class="table-of-contents__link toc-highlight">Release 0.0.12</a></li><li><a href="#release-0011" class="table-of-contents__link toc-highlight">Release 0.0.11</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/computer-vision.html b/computer-vision.html index 221859c..27e5820 100644 --- a/computer-vision.html +++ b/computer-vision.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorials/building-your-first-bot">Writing Your First Automated Test</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/gameplay-sessions/gameplay-sessions-getting-started">Gameplay Sessions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/validations/validations-getting-started">Validations</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/authenticating-with-api-keys">Authenticating with API Keys</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/generic-bots/monkey-bot">Generic Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/creating-bots/csharp/adaptive-bots">Custom Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/computer-vision">Computer Vision</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/computer-vision">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision/image-match">CVImage Docs</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision/text-match">CVText Docs</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision/object-detection">Object Detection Docs</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Computer Vision</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Overview</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Computer Vision</h1><p>Our Computer Vision module provides powerful tools to interact with and validate visual elements in your application or game. This functionality is crucial for automated testing, user interface verification, and interactive simulations.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-problems-does-it-solve">What problems does it solve?<a href="#what-problems-does-it-solve" class="hash-link" aria-label="Direct link to What problems does it solve?" title="Direct link to What problems does it solve?"></a></h3><p>Our Computer Vision capabilities allow you to find the existence of visual elements on the screen and either click on them, or use them as end criteria.</p><p>We offer three methods:</p><ol><li><p><strong>Image Match</strong>: Find where the specific image exists on the screen. This method uses a pixel matching based algorithm and is useful when we have the image of the exact asset we are looking for.</p></li><li><p><strong>Text Match</strong>: Find where the specific text exists on the screen. This method uses a optical character recognition based algorithm and is useful when we have the exact text string we are looking for.</p></li><li><p><strong>Object Detection <!-- -->[Experimental]</strong>: Find where the given object exists on the screen. This method uses a deep learning based algorithm and is useful when we know what we are looking for, say a tree, but we don't have the exact pixel match image of the asset we are looking for. This can be because the orientation of the tree in the camera view is dynamic, or we have different types of trees in the scene, rendering a direct pixel match impossible.</p></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-sequence">Example Sequence<a href="#example-sequence" class="hash-link" aria-label="Direct link to Example Sequence" title="Direct link to Example Sequence"></a></h3><p>Here is an example sequence that utilizes all three methods. </p><p><img loading="lazy" alt="The sequence we want to validate." src="/assets/images/desired_outcome-5cdd351d0a266ec607fc198580755547.gif" width="800" height="444" class="img_ev3q"></p><p>In this example we want to test the flow seen above. More specifically we want our test to validate the following steps:</p><ul><li>Select the tank class.</li><li>Verify that the correct model is loaded.</li><li>Select the archer class.</li><li>Verify that the model is loaded.</li><li>Press Ready.</li></ul><p>We can accomplish this with the following Computer Vision sequence:</p><ol><li>Click on the tank class using the <a href="/computer-vision/image-match">Image Match</a> method, with this tank icon as the image query. <em>This will look for the pixel match of the tank icon.</em></li></ol><p><img loading="lazy" alt="The tank icon" src="data:image/jpeg;base64,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" width="140" height="193" class="img_ev3q"></p><ol start="2"><li>Verify that the correct model is loaded by using the <a href="/computer-vision/object-detection">Object Detection</a> method, with this dwarf warrior concept art as the image query. <em>This will first identify the concept art as a <code>Dwarf Warrior</code>, and then it will look for the existence of a <code>Dwarf Warrior</code> on the screen.</em></li></ol><p><img loading="lazy" alt="Dwarf warrior concept art" src="/assets/images/dwarf_warrior_concept_art-cc701a47395d5c90304ca4e459ac009e.jpg" width="200" height="200" class="img_ev3q"></p><ol start="3"><li>Click on the archer class using the <a href="/computer-vision/image-match">Image Match</a> method, with this archer icon as the image query. <em>This will look for the pixel match of the archer icon.</em></li></ol><p><img loading="lazy" alt="The archer icon" src="data:image/jpeg;base64,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" width="122" height="203" class="img_ev3q"></p><ol start="4"><li><p>Verify that the correct model is loaded using the <a href="/computer-vision/object-detection">Object Detection</a> method, with the string <code>Toon Archer</code> as the text query. <em>This will look for the existence of a <code>Toon Archer</code> on the screen.</em></p></li><li><p>Click on the Ready button using the <a href="/computer-vision/text-match">Text Match</a> method, with the string <code>READY</code> as the text query. <em>This will identify all the text on the screen, and then find the text <code>READY</code></em></p></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="see-this-sequence-in-action">See this sequence in action!<a href="#see-this-sequence-in-action" class="hash-link" aria-label="Direct link to See this sequence in action!" title="Direct link to See this sequence in action!"></a></h3><div style="position:relative;padding-bottom:50.40485829959515%;height:0"><iframe src="https://www.loom.com/embed/391d9aba528a4bc18a9b0fae43850177?sid=1abb5f48-cbd3-41ea-bacc-75f686aef115" frameborder="0" style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/creating-bots/csharp/adaptive-bots"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Adaptive Bots</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/computer-vision/image-match"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">CVImage Docs</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#what-problems-does-it-solve" class="table-of-contents__link toc-highlight">What problems does it solve?</a></li><li><a href="#example-sequence" class="table-of-contents__link toc-highlight">Example Sequence</a></li><li><a href="#see-this-sequence-in-action" class="table-of-contents__link toc-highlight">See this sequence in action!</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/computer-vision/image-match.html b/computer-vision/image-match.html index ece3d34..57f5334 100644 --- a/computer-vision/image-match.html +++ b/computer-vision/image-match.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorials/building-your-first-bot">Writing Your First Automated Test</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/gameplay-sessions/gameplay-sessions-getting-started">Gameplay Sessions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/validations/validations-getting-started">Validations</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/authenticating-with-api-keys">Authenticating with API Keys</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/generic-bots/monkey-bot">Generic Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/creating-bots/csharp/adaptive-bots">Custom Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/computer-vision">Computer Vision</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/computer-vision/image-match">CVImage Docs</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision/text-match">CVText Docs</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision/object-detection">Object Detection Docs</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Computer Vision</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">CVImage Docs</span><meta itemprop="position" content="2"></li></ul></nav><div class="theme-doc-markdown markdown"><header><h1>CVImage Docs</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/computer-vision"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Overview</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/computer-vision/text-match"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">CVText Docs</div></a></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/computer-vision/object-detection.html b/computer-vision/object-detection.html index 3223732..c709986 100644 --- a/computer-vision/object-detection.html +++ b/computer-vision/object-detection.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorials/building-your-first-bot">Writing Your First Automated Test</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/gameplay-sessions/gameplay-sessions-getting-started">Gameplay Sessions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/validations/validations-getting-started">Validations</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/authenticating-with-api-keys">Authenticating with API Keys</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/generic-bots/monkey-bot">Generic Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/creating-bots/csharp/adaptive-bots">Custom Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/computer-vision">Computer Vision</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision/image-match">CVImage Docs</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision/text-match">CVText Docs</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/computer-vision/object-detection">Object Detection Docs</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Computer Vision</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Object Detection Docs</span><meta itemprop="position" content="2"></li></ul></nav><div class="theme-doc-markdown markdown"><header><h1>Object Detection Docs</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/computer-vision/text-match"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">CVText Docs</div></a></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/computer-vision/text-match.html b/computer-vision/text-match.html index 317ef3b..0baddea 100644 --- a/computer-vision/text-match.html +++ b/computer-vision/text-match.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorials/building-your-first-bot">Writing Your First Automated Test</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/gameplay-sessions/gameplay-sessions-getting-started">Gameplay Sessions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/validations/validations-getting-started">Validations</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/authenticating-with-api-keys">Authenticating with API Keys</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/generic-bots/monkey-bot">Generic Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/creating-bots/csharp/adaptive-bots">Custom Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/computer-vision">Computer Vision</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision/image-match">CVImage Docs</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/computer-vision/text-match">CVText Docs</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/computer-vision/object-detection">Object Detection Docs</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Computer Vision</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">CVText Docs</span><meta itemprop="position" content="2"></li></ul></nav><div class="theme-doc-markdown markdown"><header><h1>CVText Docs</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/computer-vision/image-match"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">CVImage Docs</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/computer-vision/object-detection"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Object Detection Docs</div></a></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/creating-bots/csharp/adaptive-bots.html b/creating-bots/csharp/adaptive-bots.html index 0980eb9..99ef0c8 100644 --- a/creating-bots/csharp/adaptive-bots.html +++ b/creating-bots/csharp/adaptive-bots.html @@ -9,14 +9,14 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorials/building-your-first-bot">Writing Your First Automated Test</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/gameplay-sessions/gameplay-sessions-getting-started">Gameplay Sessions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/validations/validations-getting-started">Validations</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/authenticating-with-api-keys">Authenticating with API Keys</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/generic-bots/monkey-bot">Generic Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/creating-bots/csharp/adaptive-bots">Custom Bots</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/creating-bots/csharp/adaptive-bots">Adaptive Bots</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/computer-vision">Computer Vision</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Custom Bots</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Adaptive Bots</span><meta itemprop="position" content="2"></li></ul></nav><div class="theme-doc-markdown markdown"><h1>Defining Bots that Adapt to the Game State</h1><p>Defining a Unity Bot in C# is as simple as creating a MonoBehaviour that implements the IRGBot interface. The IRGBot interface has no methods, but is used by the Regression Games SDK to identify bots that can be started from the in game overlay.</p><div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Perform actions on players and NPCs</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">/**</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * Outline of this Bot algorithm. For every update:</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * - If enough time has passed for the bot to process a new update, handle the update.</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * - Select a random nearby player or enemy if one exists</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * - Follow that entity at distance 2f</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * - Perform a skill targeting that entity and position</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> * Note: This bot code works with the Unity multiplayer sample project fork @ https://github.com/Regression-Games/RGBossRoom</span><br></span><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"> */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">SampleBot</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token type-list class-name">MonoBehaviour</span><span class="token type-list punctuation" style="color:#393A34">,</span><span class="token type-list"> </span><span class="token type-list class-name">IRGBot</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name keyword" style="color:#00009f">float</span><span class="token plain"> _lastUpdate </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">1f</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">readonly</span><span class="token plain"> </span><span class="token class-name keyword" style="color:#00009f">float</span><span class="token plain"> _updateEveryXSeconds </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2.0f</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token return-type class-name keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">Update</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token class-name keyword" style="color:#00009f">var</span><span class="token plain"> time </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> Time</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">time</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">time </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> _lastUpdate </span><span class="token operator" style="color:#393A34">></span><span class="token plain"> _updateEveryXSeconds</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token function" style="color:#d73a49">HandleUpdate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">gameObject</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> _lastUpdate </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> time</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token return-type class-name keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">HandleUpdate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">GameObject</span><span class="token plain"> spawnedGameObject</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token class-name keyword" style="color:#00009f">var</span><span class="token plain"> entities </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token generic-method function" style="color:#d73a49">FindObjectsByType</span><span class="token generic-method generic class-name punctuation" style="color:#393A34"><</span><span class="token generic-method generic class-name">ServerCharacter</span><span class="token generic-method generic class-name punctuation" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">FindObjectsSortMode</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">None</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">entities</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Length </span><span class="token operator" style="color:#393A34">></span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// default to friendly ability</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token class-name keyword" style="color:#00009f">var</span><span class="token plain"> skillId </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token class-name">GameObject</span><span class="token plain"> target </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> entities</span><span class="token punctuation" style="color:#393A34">[</span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token constructor-invocation class-name">Random</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">entities</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Length</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">gameObject</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> spawnedGameObject</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-method function" style="color:#d73a49">GetComponent</span><span class="token generic-method generic class-name punctuation" style="color:#393A34"><</span><span class="token generic-method generic class-name">RGFollowObjectAction</span><span class="token generic-method generic class-name punctuation" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">FollowObject</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">target</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">transform</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2f</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">target</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-method function" style="color:#d73a49">GetComponent</span><span class="token generic-method generic class-name punctuation" style="color:#393A34"><</span><span class="token generic-method generic class-name">RGEnemyState</span><span class="token generic-method generic class-name punctuation" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// if enemy.. set ability to 1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> skillId </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token class-name keyword" style="color:#00009f">var</span><span class="token plain"> targetPosition </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> target</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">transform</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">position</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> spawnedGameObject</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-method function" style="color:#d73a49">GetComponent</span><span class="token generic-method generic class-name punctuation" style="color:#393A34"><</span><span class="token generic-method generic class-name">RGPerformSkillAction</span><span class="token generic-method generic class-name punctuation" style="color:#393A34">></span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">PerformSkill</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">skillId</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> target</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">GetInstanceID</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> targetPosition</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> RGDebug</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">LogWarning</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"No entities found..."</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/generic-bots/monkey-bot"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Monkey Bot</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/computer-vision"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Overview</div></a></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/creating-bots/csharp/agent-builder.html b/creating-bots/csharp/agent-builder.html index 561081f..16c07fe 100644 --- a/creating-bots/csharp/agent-builder.html +++ b/creating-bots/csharp/agent-builder.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -68,7 +68,7 @@ You may need to alter your prompt and re-submit it for new output when this happens, or you can fix the output manually.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="validating-code">Validating Code<a href="#validating-code" class="hash-link" aria-label="Direct link to Validating Code" title="Direct link to Validating Code"></a></h3><p>The embedded code editor offers standard syntax highlighting and intelligent code completion features for Regressions Games APIs. To take this a step further, our AI code assistant can analyze code from the editor and provide suggestions for fixing syntax errors, bugs, and inefficiencies. Clicking the "Validate Code" button will cause a text box to appear with the assistant's analysis results.</p><p>Let's give this a try with some code that doesn't properly await one of our async APIs.</p><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">LeafNode</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">extends</span><span class="token plain"> </span><span class="token class-name">TreeNode</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> override </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">execute</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">rg</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">Promise</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">NodeStatus</span><span class="token operator" style="color:#393A34">></span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> bot </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> rg</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getBot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> nearestEnemy </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> rg</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">findNearestEntity</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Enemy"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> bot</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">position</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"enemy"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> nearestEnemy</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> nearestEnemy </span><span class="token operator" style="color:#393A34">?</span><span class="token plain"> NodeStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token constant" style="color:#36acaa">SUCCESS</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> NodeStatus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token constant" style="color:#36acaa">FAILURE</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Clicking the "Validate Code" button should result in a warning that <code>findNearestEntity</code> should be awaited if we want to capture the actual "Enemy" entity.</p><p><img loading="lazy" alt="Validate Code" src="/assets/images/validation-results-unity-e2e2e0eccaa7d71bc502e3a694b5ded9.png" width="3414" height="1640" class="img_ev3q"></p><p>You can close validation results at any time and reopen them by clicking the clipboard icon.</p><p><img loading="lazy" alt="ReOpen Validation Results" src="/assets/images/reopen-validation-results-unity-40318dd7fcf82edaa45c0ca88bc9e367.png" width="1660" height="718" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="saving-your-tree">Saving Your Tree<a href="#saving-your-tree" class="hash-link" aria-label="Direct link to Saving Your Tree" title="Direct link to Saving Your Tree"></a></h2><p>Save your tree early and often! Any changes made to your AI will be lost if you leave the Agent Builder without saving.</p><p><img loading="lazy" alt="Save Your Tree" src="/assets/images/save-tree-54ed26871667603b04f90b1f32d08131.png" width="1592" height="760" class="img_ev3q"></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#what-is-a-behavior-tree" class="table-of-contents__link toc-highlight">What Is a Behavior Tree?</a></li><li><a href="#creating-a-bot" class="table-of-contents__link toc-highlight">Creating a Bot</a></li><li><a href="#loading-your-tree" class="table-of-contents__link toc-highlight">Loading Your Tree</a></li><li><a href="#getting-started-with-the-agent-builder" class="table-of-contents__link toc-highlight">Getting Started with the Agent Builder</a><ul><li><a href="#agent-builder-and-your-game-integration" class="table-of-contents__link toc-highlight">Agent Builder and Your Game Integration</a></li><li><a href="#adding-nodes" class="table-of-contents__link toc-highlight">Adding Nodes</a></li><li><a href="#generating-code" class="table-of-contents__link toc-highlight">Generating Code</a></li><li><a href="#validating-code" class="table-of-contents__link toc-highlight">Validating Code</a></li></ul></li><li><a href="#saving-your-tree" class="table-of-contents__link toc-highlight">Saving Your Tree</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/gameplay-sessions/gameplay-sessions-getting-started.html b/gameplay-sessions/gameplay-sessions-getting-started.html index 66a1d90..7691ea3 100644 --- a/gameplay-sessions/gameplay-sessions-getting-started.html +++ b/gameplay-sessions/gameplay-sessions-getting-started.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -25,7 +25,7 @@ to exclude a GameObject and its children from recorded data.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback"></a></h2><p>We are constantly iterating on and improving our tools! If you'd like to report any limitations, bugs, or if you'd like to request a feature, please fill out <a href="https://d7y6yysps34.typeform.com/to/MYieIsHV" target="_blank" rel="noopener noreferrer">this feedback form.</a></p><p>Learn more about how to use this powerful recording and playback feature by clicking the <strong>Next</strong> button below.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/tutorials/building-your-first-bot"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Writing Your First Automated Test</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/gameplay-sessions/gameplay-sessions-usage"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Using Gameplay Sessions</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#strengths-of-the-gameplay-session-system" class="table-of-contents__link toc-highlight">Strengths of the Gameplay Session system</a></li><li><a href="#feedback" class="table-of-contents__link toc-highlight">Feedback</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/gameplay-sessions/gameplay-sessions-reference.html b/gameplay-sessions/gameplay-sessions-reference.html index 812d456..bcc9e74 100644 --- a/gameplay-sessions/gameplay-sessions-reference.html +++ b/gameplay-sessions/gameplay-sessions-reference.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -35,7 +35,7 @@ Play Mode tests. This class is included in the SDK and can be used to automate the testing of your game.</p><p>To use this class, first add <code>RegressionGames</code> and <code>RegressionGames.TestFramework</code> as references to your test assembly: <img loading="lazy" alt="Test assembly references for Regression Games SDK" src="/assets/images/test_assembly_refs-72f22b7cf9648dcdcc9c22c58c701776.png" width="566" height="218" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="api">API<a href="#api" class="hash-link" aria-label="Direct link to API" title="Direct link to API"></a></h3><div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">namespace</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">RegressionGames</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// <summary></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// Utilities for running tests within the Unity Test Runner using Regression Games features.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// </summary></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">RGTestUtils</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// <summary></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// Waits until a specific scene has been loaded, and asserts that it has been loaded</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// </summary></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// <param name="sceneName">The name of the scene to wait for</param></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// <param name="timeout">The maximum time to wait for the scene to load (in seconds). Defaults to 5.</param></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token return-type class-name">IEnumerator</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">WaitForScene</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name keyword" style="color:#00009f">string</span><span class="token plain"> sceneName</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token class-name keyword" style="color:#00009f">int</span><span class="token plain"> timeout </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// <summary></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// Plays back an existing recording, and then returns the save location of the recording.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// </summary></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// <param name="recordingPath">The path to the recording to play back (the full bot_segments.zip file path)</param></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// <param name="setPlaybackResult">A callback that will be called with the results of this playback</param></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token return-type class-name">IEnumerator</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">StartPlaybackFromFile</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name keyword" style="color:#00009f">string</span><span class="token plain"> recordingPath</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token class-name">Action</span><span class="token class-name punctuation" style="color:#393A34"><</span><span class="token class-name">PlaybackResult</span><span class="token class-name punctuation" style="color:#393A34">></span><span class="token plain"> setPlaybackResult</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Additionally, the <code>PlaybackResult</code> class contains information about the recording playback results, such as the location of the new recording.</p><div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-csharp codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">namespace</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">RegressionGames</span><span class="token namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token namespace" style="opacity:0.7">Types</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token attribute class-name">Serializable</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">PlaybackResult</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// <summary></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// The location that the playback recording is saved to on disk.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/// </summary></span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token class-name keyword" style="color:#00009f">string</span><span class="token plain"> saveLocation</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/gameplay-sessions/gameplay-sessions-usage"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Using Gameplay Sessions</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/validations/validations-getting-started"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Getting Started with Validations</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overview-of-the-schema" class="table-of-contents__link toc-highlight">Overview of the Schema</a><ul><li><a href="#folder-and-file-structure" class="table-of-contents__link toc-highlight">Folder and File Structure</a></li><li><a href="#structure-of-tickjson-files" class="table-of-contents__link toc-highlight">Structure of {tick#}.json Files</a></li><li><a href="#example-of-a-tick-json-file" class="table-of-contents__link toc-highlight">Example of a Tick JSON File</a></li></ul></li><li><a href="#how-performance-information-is-scraped" class="table-of-contents__link toc-highlight">How performance information is scraped</a></li><li><a href="#rgtestutils-class" class="table-of-contents__link toc-highlight">RGTestUtils class</a><ul><li><a href="#api" class="table-of-contents__link toc-highlight">API</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/gameplay-sessions/gameplay-sessions-usage.html b/gameplay-sessions/gameplay-sessions-usage.html index 79155a1..833c989 100644 --- a/gameplay-sessions/gameplay-sessions-usage.html +++ b/gameplay-sessions/gameplay-sessions-usage.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -66,7 +66,7 @@ dictates whether recordings include data from Behaviours attached to a GameObject. Checking this box will include all fields and properties from all Behaviours attached to a GameObject in the recorded state, and unchecking the box will exclude them.</p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Note</div><div class="admonitionContent_S0QG"><p>Recording state from Behaviours may incur an impact on performance.</p></div></div><p><img loading="lazy" alt="Various options for scraping game objects from the scene" src="/assets/images/base_options_finder-6eea987297e16c6761135b23c830926b.png" width="1542" height="668" class="img_ev3q"></p><p>To learn more about the data format and intricacies of this tool, visit the next page for a technical reference.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="configuring-session-replay">Configuring session replay<a href="#configuring-session-replay" class="hash-link" aria-label="Direct link to Configuring session replay" title="Direct link to Configuring session replay"></a></h3><p>When replaying a gameplay session recording, the SDK uses key frame information from the original recording.</p><p>When processing the replay, there are different modes for how the SDK can enforce keyframe detection.</p><ul><li>The default mode is <code>Delta</code> which is tolerant of non-exact UI element transitions by ensuring that tracked UI elements increase/decrease/etc by at least the recorded amount from one tick to the next.</li><li>The other mode is <code>Strict</code> which requires exact match of the objects in the recorded state to the current state. This mode works well for some games, but can fail when objects are created/destroyed based on timed events that don't consistently align on the same frame boundaries.</li></ul><p>This can be configured using the <code>UI Replay Enforcement</code> dropdown of the <code>Replay Data Playback Controller</code> Behaviour. This Behaviour is located on the <code>RGOverlayCanvasV2/Recording Toolbar</code> GameObject.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/gameplay-sessions/gameplay-sessions-getting-started"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Getting Started with Gameplay Sessions</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/gameplay-sessions/gameplay-sessions-reference"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Gameplay Sessions Technical Reference</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#preparing-the-overlay" class="table-of-contents__link toc-highlight">Preparing the Overlay</a></li><li><a href="#recording-gameplay" class="table-of-contents__link toc-highlight">Recording Gameplay</a><ul><li><a href="#loading-a-recording" class="table-of-contents__link toc-highlight">Loading a Recording</a></li><li><a href="#playing-a-recording" class="table-of-contents__link toc-highlight">Playing a Recording</a></li><li><a href="#successful-playback" class="table-of-contents__link toc-highlight">Successful Playback</a></li><li><a href="#loop-counter" class="table-of-contents__link toc-highlight">Loop Counter</a></li><li><a href="#errors-during-playback" class="table-of-contents__link toc-highlight">Errors During Playback</a></li><li><a href="#programmatically-playing-a-recording" class="table-of-contents__link toc-highlight">Programmatically Playing a Recording</a></li></ul></li><li><a href="#advanced-options" class="table-of-contents__link toc-highlight">Advanced Options</a><ul><li><a href="#choosing-an-fps-for-recording" class="table-of-contents__link toc-highlight">Choosing an FPS for recording</a></li><li><a href="#changing-your-recording-location" class="table-of-contents__link toc-highlight">Changing your recording location</a></li><li><a href="#input-threshold-options" class="table-of-contents__link toc-highlight">Input threshold options</a></li><li><a href="#configuring-game-state-collection" class="table-of-contents__link toc-highlight">Configuring game-state collection</a></li><li><a href="#configuring-session-replay" class="table-of-contents__link toc-highlight">Configuring session replay</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/generic-bots/monkey-bot.html b/generic-bots/monkey-bot.html index 3256a62..6a4e375 100644 --- a/generic-bots/monkey-bot.html +++ b/generic-bots/monkey-bot.html @@ -9,15 +9,15 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorials/building-your-first-bot">Writing Your First Automated Test</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/gameplay-sessions/gameplay-sessions-getting-started">Gameplay Sessions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/validations/validations-getting-started">Validations</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/authenticating-with-api-keys">Authenticating with API Keys</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/generic-bots/monkey-bot">Generic Bots</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/generic-bots/monkey-bot">Monkey Bot</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/creating-bots/csharp/adaptive-bots">Custom Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/computer-vision">Computer Vision</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Generic Bots</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Monkey Bot</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Monkey Bot</h1><p><img loading="lazy" alt="Monkey Bot Image" src="/assets/images/monkey-bot-6bf0c7745facf769843209b202be86d1.png" width="1054" height="171" class="img_ev3q"></p><p>The Regression Games SDK has a built-in <strong>Monkey Bot</strong> that automatically determines the applicable keyboard and mouse inputs for the game being tested and randomly performs those actions as the game is running. The SDK allows you to select which of the actions are enabled in order to control/limit the functionality that is exercised by the bot.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage"></a></h2><p>For most games, the Monkey Bot can be quickly configured and deployed. First, the bot actions are configured through the Action Manager panel. Then, the Monkey Bot is started through the Regression Games Bot Manager.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="configuring-bot-actions">Configuring Bot Actions<a href="#configuring-bot-actions" class="hash-link" aria-label="Direct link to Configuring Bot Actions" title="Direct link to Configuring Bot Actions"></a></h3><p>Open the Action Manager panel by navigating to <strong>Regression Games > Configure Bot Actions</strong>. You can dock the panel to make it easier to access.</p><p><img loading="lazy" alt="Configure Bot Actions Menu Item" src="data:image/png;base64,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" width="270" height="118" class="img_ev3q"></p><p>In the panel, press the <strong>Analyze Actions</strong> button. The SDK will automatically analyze the game code and assets to identify all the device inputs that are applicable to the game.</p><p><img loading="lazy" alt="Initial Action Manager Panel" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAg0AAADUCAYAAAAfthBaAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABb1SURBVHhe7d0HjJRFH8fxAQQURFER7AVUVLAXEBUVC/auaFQ0FjTGHguKhchrRWNNVOzG3luMDVSwYMeGBTs2FLGjCMrrd3jmXJcrc3AcB/f9JBtu93l299lnl53f/GeeZ5t07Nhx6u+//x4w33zzhRYtWsS/VX/++uuv0LL7gcU1NVaTRl4XmjVrVlyTpIanSefOnaf+/PPP8coCCywQmjRpEv9W/Zk8eXJo12nN0HziuOIWNTaTW3UI4z8aFZo3b17cIkkNT9PSkGBgmH0MDI2b77+kOUHT4l9JktQIzDPPPOGUU06JF/6ujRkODSuuuGI48sgjwwUXXBAv/M1tkiSp4Wrbtm3o2LFjvCy44ILFrXmatWvXbuCkSZPilXnnnTf+W5Ptt98+HHzwwWGxxRYLV111VXjzzTfDTjvtFDbaaKMwZcqUMGbMmGLN6Z1wwgnhrbfeCn/++Wdxy+zXunXr0LRp0zghcXb4+++/Q5s2bYpr0zv00EPjvu3evXtYc801w/zzzx/Gjh0bpk6dWqwR4pu/++67h6233jp07do1MLn1u+++K5ZWbosttoiP9+677xa31KxVq1ZxGIt91aFDh5hUn3vuuTrbd7xWfP311/HfUn369ImfuU8++aS4Ze7y66+/OhFS0iw3ceLE+D364osvhk8//bS4NU+tKw1UE3beeefi2vTzIHbddddqKw5dunRpcEdoHHjggWGDDTYorjU8K620UnjyySfDfffdF0aMGBHWWmutsNtuuxVLp+1TGtt33nkn3HDDDeHll18O++67b9hwww2LNaZH47T55pvH100IybXnnnuGtddeO/49fvz4cNNNN4UUOusCr7V3797FtX+1b98+9OzZMyy++OLFLZKkGUVomJEOWK0rDfvss0/s7SXdunWLl1L0ml966aXi2n8ROB5//PHYu+Zvelc0gJ07d46957QtlEy23Xbb2PAx5vLVV1+Fli1bxvv8+OOPYY899girrLJKGDduXExNSA1hr169Yi/4s88+i89TumyzzTb7z7IePXrEXvwiiywSe9EfffRRXJdeOI+z5JJLxu2igpKenx4+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++67+PPycyK2/9577w3rrbdecUvNWrZsGdq1a1dcC/EXcq+//vrimqQ5QbMFF1xwYBqvaNu2bfwXzJos/Q8uqW6svvrq8ZSsr7/+elhttdXCG2+8USwJ4bjjjgu//vprOOKII8J2220X5p9//vDuu+/GZcstt1w46KCDYu98s802izOax44dG5dttdVW4fHHHw/77rtvaN++ffj444/j7fz+/dFHHx1GjBgRdtlll7DrrruGjTfeuOLy448/hm+//Tau169fv7D99tuHnj17xtPHV3UOF4YleJ5bbrkl/iz+0KFDiyXTUEFgO6kq8LhvvfVWWGutteJjd+zYMfTo0SM8/fTTYdttt41HbKVtpfrC4/bu3Tt+F40ePTrezvqEFB6P19C1a9fw9ttvhz///DMuP+CAA8Juu+0W78d32SeffBJvl1Q3xo8fHydFwkqDVM9oAF955ZXw8ssvh3XWWae49V80iqeffnoYNGhQ6N69e1hyySXj7ZtvvnkYNmxYOPnkk8NFF10UG9lyL7744n8ek7/5+XoQKq644op4uf/+++MEpxRIDj744PjYp556arjyyivDXnvtFQNLZXjMd955JwYLAkeXLl2KJdMaeIYsBgwYEPr37x8DBo09AenRRx8NL730UjjjjDOKtf+19dZbh9atW8fXduKJJ4YFFlggBqGEoY1bb701Pua4ceNiQADh6ffffw+nnXZa3Gdsyz8dobhMUt3zNNJSPaIRXXXVVcNrr70WJk2aFHvT66+/frF0GsIEfvrpp/Dhhx9WTBa89tprY1Vi6aWXrjgMKv2ITDJmzJjQqlWrsOiii8brNPAECfz222/hhx9+iH/37ds33HzzzbGiSDWAhpeqAz1/hhEIBWxnZQgyNP5gW0u3n8adcMLj4oYbbohVhZqwndwveeKJJ8K6665bXAtxP9HbAduWqqC8JvYH28ov8V166aVxv0maNaw0SPWIBnfixIlx+OGYY46JDXx5aKDxS0oPddp9993DWWedFXvZ9OYJHZWhIWeuAevwWF988UWxZJr9998/PPDAA+Gzzz6L1xdaaKF4IrdevXpVXDgLXPop3FKsu9JKK8WqB9tPw85zpSMpqE4QQEqlAFEd9gOVi4S/S4+sKD1OvBTh5fnnn49DKmeffXbYZ599iiWSZgUrDVI9Ymji9ttvD3fffXe83HnnnWGFFVaI5fjq8NO0NIyU76+55prw0EMPVXnII6GBxpze+8iRI4tbp9ljjz3ikMILL7xQ3BLidR6fSYnpwjyF4cOHF2v8i4Dz7LPPVmw/F6ofaUIkkzvp+ScMF5RWDKoyYcKEWD1JeIxPP/20uFY1wgZDLAypnHTSSXHeR6dOnYqlkuqalQapnjBBkfkJTAyk98/lyy+/jOP95dWGcvTe6X1TqaBBZQJimphUjjF/yvY05GloAgQWGlQaeRpzLssvv3xssJmMyCREGl2egypCGuIoxWPQu0/bz4Xr3AcMRTBZkYmPDBkw8TJNWKTCwutnzkY5hiOYo8EyJodyv6eeeqpYWrVNN900ToJkuwknDFt88803xVJJda1Z27ZtB6ZyqEdPSLMODRy9esbkS/E7LyuvvHJszCn9M2zA/ALQsBMCuHzwwQexesC6o0aNimP3NPY0ypzyndsSzuZKJaK00sCkwdRwpwvDHzwf91144YXDGmusEXvvd91113SNL8MdrMOEyVKsx6GjPM5XX30Vt4nHoXJAiCAkgdfAJMU0p2PFFVeMwyeszzIeh9fHHAvmN6RJmoQkhj3SfmM5QxdvvvlmnMPBvA5CCutQ+UhzHyTVjdKjJ5osu+yyU1NPoPQHqziciy8nSXOeww47LA5BlB7OKUkz4r333quY4+ScBmkuQvAfPHhwnCRpYJBU16qsNPClw/hnVeOmkiRp7kYWYFIyh2KjykoDh1yxYukhX5IkqXFgmgJHRJEHkiorDeB0tqQMg4MkSY0LYaFFixb/OTtstaFBkiQpcSKkJEnKYmiQJElZDA2SJCmLoUGSJGUxNEiSpCyGBkmSlMXQIEmSsjTll+kkSZJqYqVBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlMTRIkqQshgZJkpTF0CBJkrIYGiRJUhZDgyRJymJokCRJWQwNkiQpi6FBkiRlCOH/S/64KeaSh+UAAAAASUVORK5CYII=" width="525" height="212" class="img_ev3q"></p><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Note</div><div class="admonitionContent_S0QG"><p>The automated analysis supports commonly used device input APIs from the Legacy Input Manager, Input System, and Unity UI systems. However, the use of non-standard input handling libraries is not supported. The analysis will normally emit a warning when it is unable to resolve an input.</p></div></div><p>After the analysis completes, you will see each device input associated with the type of component that listens for it. You can select an action to view more details about it. The checkbox next to each action can be unchecked to exclude the action from consideration by the bot. For example, you may want to exclude "Quit", "Pause", or "Exit" keys or buttons that may interfere with the bot's ability to progress through the game.</p><p><img loading="lazy" alt="Final Action Manager Panel" src="/assets/images/action-manager-panel-final-1e33323b05192ef7e47b58c47cb44592.png" width="503" height="773" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="running-the-monkey-bot">Running The Monkey Bot<a href="#running-the-monkey-bot" class="hash-link" aria-label="Direct link to Running The Monkey Bot" title="Direct link to Running The Monkey Bot"></a></h3><p>Once you've decided which actions to include, start the game and navigate to the point where you want random testing to begin. Press the Regression Games logo in the bottom right-hand corner of the game to open the Regression Games Bot Manager. From here, select the <strong>RGMonkeyBot</strong> behavior and press <strong>Start Bot</strong>. The Monkey Bot will now begin to automatically exercise a variety of game functionality. The bot can be stopped at any time by opening the overlay again and pressing the <strong>Delete</strong> or <strong>Stop All</strong> button.</p><p><img loading="lazy" alt="Monkey Bot Demo" src="/assets/images/monkey-bot-demo-6e10b8e488a9fb2f969645e6b8bd79d6.gif" width="501" height="276" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="feedback">Feedback<a href="#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback"></a></h2><p>We are constantly iterating on and improving our tools! If you'd like to report any limitations, bugs, or if you'd like to request a feature, please fill out <a href="https://d7y6yysps34.typeform.com/to/MYieIsHV" target="_blank" rel="noopener noreferrer">this feedback form.</a></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/authenticating-with-api-keys"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Authenticating with API Keys</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/creating-bots/csharp/adaptive-bots"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Adaptive Bots</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#usage" class="table-of-contents__link toc-highlight">Usage</a><ul><li><a href="#configuring-bot-actions" class="table-of-contents__link toc-highlight">Configuring Bot Actions</a></li><li><a href="#running-the-monkey-bot" class="table-of-contents__link toc-highlight">Running The Monkey Bot</a></li></ul></li><li><a href="#feedback" class="table-of-contents__link toc-highlight">Feedback</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/index.html b/index.html index f8ba54e..a3b7175 100644 --- a/index.html +++ b/index.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> -<div id="__docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><header class="hero hero--secondary heroBanner_qdFl"><div class="container" style="text-align:left"><div class="row"><div class="col margin-vert--lg margin-right--md"><h1 class="hero__title">Make better games through automated testing</h1><p class="hero__subtitle">Regression Games helps game developers go from zero to one with automated game testing</p><div class="buttons_AeoN" style="justify-content:left"><a class="button button--primary button--outline button--lg" href="/tutorials/building-your-first-bot">Get Started</a></div><div style="margin-top:16px">Get started immediately by adding the package to Unity:<div style="margin-top:16px;font-size:12px"><pre style="display:inline">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.27</pre></div></div></div><div class="col"><img src="/assets/images/demo-932c14cb4e546042c07e5799665cc0d8.gif" alt="Regression Games" style="border-radius:12px"><div style="color:gray;padding-right:24px;font-style:italic">Demo of our recording and validation features. Automatically extract game state and begin writing functional tests in minutes.</div></div></div></div></header><main><section class="features_t9lD"><div class="container"><div class="row"><div class="col col--4"><div class="text--center"><img class="featureSvg_GfXr" src="/assets/images/ai_1-e765bdc2cfecce91cbd44170e21a6e1c.png"></div><div class="text--center padding-horiz--md"><h3>A Plethora of Features</h3><p>Regression Games is building the best platform for game test automation with replay features, validation libraries, CI/CD integration, and more.</p></div></div><div class="col col--4"><div class="text--center"><img class="featureSvg_GfXr" src="/assets/images/ai (3)-a8825fb481555ca2707f39c89be6dedb.png"></div><div class="text--center padding-horiz--md"><h3>Ease of Integration</h3><p>Ease of integration is one of our top priorities, and it shows. As soon as you add the SDK, data and deep state info is collected, without custom code needed.</p></div></div><div class="col col--4"><div class="text--center"><img class="featureSvg_GfXr" src="/assets/images/ai (2)-19c3966e89df8c194ecd3e781a68cfca.png"></div><div class="text--center padding-horiz--md"><h3>Bot Versatility</h3><p>Regression Games interfaces are built for a variety of teams, even those who may not have code access. Our intuitive functional testing builder allows anyone to make tests.</p></div></div></div></div></section></main><div class="container text--center"><div style="margin-bottom:64px;margin-top:32px;font-size:1.5em;color:grey;font-weight:bold">BACKED BY TIER 1 INVESTORS</div><div class="row"><div class="col col--3"><div class="text--center"><a href="https://nea.com/" target="_blank"><img style="height:60px" src="/assets/images/nea-3a1bcf8f2def3c2af15a50c315f2f176.jpg"></a></div></div><div class="col col--3"><div class="text--center"><a href="https://a16z.com/" target="_blank"><img style="height:100px;margin-top:-20px" src="/assets/images/a16z-137749dc988bf598433d91265cf02959.jpeg"></a></div></div><div class="col col--3"><div class="text--center"><a href="https://roosh.vc/" target="_blank"><img style="height:150px;margin-top:-40px" src="data:image/jpeg;base64,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"></a></div></div><div class="col col--3"><div class="text--center"><a href="https://bbq.capital/" target="_blank"><img style="height:80px;margin-top:-00px" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCADIAMgDASIAAhEBAxEB/8QAHAABAAEFAQEAAAAAAAAAAAAAAAQDBQYHCAEC/8QAGwEBAAIDAQEAAAAAAAAAAAAAAAUGAgMEAQf/2gAMAwEAAhADEAAAAdUi6Q4AAAAAAAAAAAAAAAAAkY4R1090ctqTIm7p8GewAAAAAAAenl1ud/g6vBnEFVQw1I0llni1i2Na5qy4Y+/iftwe+gAAAAMix3J+CJyB8/VS+fg8AAAtGH7Hw6etlpE9awAAAAAJWTYe443Y7CMnr1QuA4IkABa7p8bd+u3vl3+oAAAAAAVKd9tcXao3vkrvr1yyHHrLB4bFYvksZ8y+xzx48NfUvr5vX1UMsgAAAEmNfY2zSoktTPuGMX2LdJyhLDfonFOW6/RJPntwnWG0vk+bQocHr+Q4+LZ9AAAAAdYcn9Jx2/cntdXJKgrntBXFBXFBXFDyQeR+Nez+EJfjhCd4gAAAGx9cfWv3v1hmZ1GWDH0AAADX3IO69KWWODv0AAAAAZV2LwhmUdv7NY9kNdkA89AAAt3EPd/FMxyYsJziAAAAAAlbm0e059jZdwWjt/fti4fY+9O6bwZ3aerNm8DOTb01zN47tAdGAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//EACgQAAEDBAIABgMBAQAAAAAAAAMBAgQABQYwEhMHEBEUFSAxQGAkM//aAAgBAQABBQL+WZHISktp1r409PiGZ+pGt7z0GEIP1LGGapFrcyvx+hCt/HTLhNkI9ijdttsT11z4nezbFuTfRFRyariDpNtDJJHWPchl1XEXZG3x5pI9R5o5Gh7ebdrWK/6CnFjUGSOQn2J/02Rx8BnH1kqOPsJJHzGiq1Y90VtNcj08/wAUq+q6wD7CVJHzHUcfAdHH1kjj5kRytVspPRrkclTCdcbZHHwH5e3/ANHlJHzHHH1j8ux8Mse5MLV1PyXV4ftGXGPbiroHXQOugddA66B10DroHXQOugddA69uKvbirK3I7I9XhdL527Y96DZNke8masCunxuQbM6unxmP60VWrid9bfrTr8TmTFuGzHL8XHrjAnAuUXVcIAbnDnw3W+bsxzJ5OOyLNfod9j6soO2TkO2NKNDNaPE04Ug5rZ5yClgkI5yNSVf7bCS5eJkCOlyzO63I+N51EugVMNGZXnceJH/qv//EADQRAAECAwUFBQcFAAAAAAAAAAECBAADEQUSICExBhMUMFEiQWGRwRAVMkCBsdEkU3Hh8P/aAAgBAwEBPwH5JSkoFVGkcY2/cHnCVomZoNeU9te4d238/wARMmLmm8s19iVqQbyTSGdrkG4484BrmMdpb/cUkD+cVjuyf06/pyHLCS6zUKHrDqzZzbPVPXBImbmamYO7kP7DmMmEl2dT8XhXT+/GGrdbucmRL1VG02y0pk6uS8gcwYcMHDaqlp7PXu9qcgMWz1ne8HqQodhOZ/H1h22Q8kLbzNFCNmLGW1nTXDgZpN0ep/3jG0lnceyKkjtozHqIsGykNLP3c5NSvNQP2jbHYxu2AeWcLgOo7q+n2huxm8UmXMTTFJ+KAaaRePWLxi8YvHrFSYcaDEDdNYBqK4pxqrHKmXMjANcLgaHkJUU6QHB7xHEeEKmKVAnkawtZWc/nv//EACwRAAEDAgQEBgIDAAAAAAAAAAIAAQMEEQUTIDEhIjBBEBIUMkCRQkNRUoH/2gAIAQIBAT8B+E5MPF16iH+7ISEva/SqcQ8vJF9ojI3uT+Ak4vcVT4g7cs32t9dbm5Vom1YdUfpL/OhNSxz77qejkh47toiPLNi6EFaM05RfSkkaIHMuyiijr4/O3AlNAcD2PxbbVX1GRC9t3UUjxGxj2WJVbSgIB34rD6jIms+zqvqM+bhsypI/UXC/MoaU89gNtVc14deHNzE+qQGkFxdELgXlfVRAwxX/AJ11VLncw7p2cXs+nDie5D26EkIS+9kWHD+JJsObuSjpYo9mR4eJPcXsoYRgaw/O/8QAORAAAQICBgcFBgYDAAAAAAAAAQIDABEEISIwYZEQEjEyM0FREyBxgaEFIyRAUuEUQlNgktFicoL/2gAIAQEABj8C/a1lBMbsvON0ZxW2flJmwnrFSZnqe7aSDjE27Q6c/kQt0V8k3MxU51gpUJEX3aq/5u9ZO+PW+CHBqYjZEwZi7mN1Vd9ZPlElWFel0TzTX8ht1k9DG3VV0NwR1vjLl3AHLafWLB8u+rxvcTGGjARiImDIxJ20OoiY7pN5hoxGjE6MIwEVRbziYMxoWcJXuJ0/47dOIjE6bBkOkSXYV6QlscqzdsTQklKlisYxwkfxjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhpyjhoyjhI/jHtDVqAdIqu6XRubbmv5Efa9KlGSQJkw++drq1LzN22lRk3SB2R8eXrevgGTr/uU+e30vJioiEOk/EIsOjHr53jC3EfBBMmlDZPnPG9S+i02anG/qEN0ijrDjSxUbt2jPp1m3BIw/Rl7zSyg3s2/eUdW+ydh+8dpRXJn8zZ3k+N3T3EVp7UifhVfJdYcU04nYpBkYCPaDH4gfqt1Ky2QJUxLKvpesfaJtPNuf6qBiZIHjHvqcwjDXE8oIoja6WvqbCf7hLhpBYCDrJbZqA/uEt0xxNFpgqOtUlfgY1ytIR9U6oXRvZ7oepKqu1Ruo8+Z/df/xAAqEAABAgQDCAIDAAAAAAAAAAABABEhMDFRQXHxECBhgZGhscFA8GDR4f/aAAgBAQABPyH8WpbXaCwLmBEeJkCwG3Afx8QEM9VOQTGxn53Qcc6uqEE/G/TogkxDEfACDpWTDOSdN95mqFBEGdCjhgPmWJmh9FpzPLAwQGACUIlw2aCzxnPBsYlQph5tVzlZTH38BmARmYCQYBegEIhi02GFD7jJnA8aOaeDpxKo3xbPTWp7hTwBVEbGB7hUSF1DBAKEJqF1JDpXG4Swk0C42F5jQDRE7HIi4NjU9w7HACqITU9wp4ExQmA2BAYRqEbL1FjnNaibh2ig32ptiQupge4dpKukjYUzZ8akArcfxS39OpCTWfa0wtNrTa02tNrTa02tNrTa02tNpz9VaYTVAyNEIepYzxhRGS8n1mgmGiMAEerivxD7ljqe3QFX0Ac5oaIlxu93aYMkJDgioQVMHg/hV1tMY4Ppd2PC9BnNfir99SME63MDwbEWljTtpiLEcRVRrDpdizzTeNY/mi3EgIUQwuW90ll1BRgocTtOiNeZBB3BhB59TsncpguHM+yGAU4+MTObcmRASQvuhFYWeC7p9EE6WKYUf9nQ1kROaJAZHusR0OHuQRzkyOG46Bv4q/lX/9oADAMBAAIAAwAAABDzzzzzzzzzzzzzzzzzz/PPzzzzzzzzjRz2x37zzzzzyj73333jzzzzzzy1z333zTzzzzzzetX/AN9e888887+2rUi9888887OMMMMdO888887288888U888888528888o8888888s/es+t88888888888888888888888888888//EACYRAQABAwMCBgMAAAAAAAAAAAERADFhICFBUYEQMHGhwdFAkbH/2gAIAQMBAT8Q/ChAGWKSY9l90ZBGEf55UxApe4+3q7et6lLWWfAmpHIw0c3z9j16mb+tARJHXMmM8Lhg5nHFIjDpcWz8j5O/kHOAr9+vepOOJ8lz+Z0LyAP37eROVwu57duiBQ/ywHflwG7gpNKU4TwiWkZtDCLM0AiiCIu60vCwwMLHhegieDVuZejsW7nHSaGjeDjomRhMlRcWdmxhIB5Gm8lL1k+Q3yhQgYYARE2Q7IFx5Wp9qjfStxLodyLGACaIugy9IN3ezNu+phHqUlyKyqytZWsqkkLSANTgOKAhZ1Ko8a5XBQCR0hHJ5C8ugclK4pdn9UZAmpB+c//EACkRAQABAQYFBAMBAAAAAAAAAAERACAhMUFhwTBRgZGhcdHh8BBAsfH/2gAIAQIBAT8Q/SKlA1qJjyFCyCaM8KY3rn7Pepll1/EmEdKcL4+r/vehAJhbkUicYxjT1pEYbKLJruNzrwDpMcxj81Lw1Dcy/mthB8keAAsDFzjH40rCiE09KNhjDS7U8zR8McHJ/JQDakiyjd6HmKxPlP31pY7gLY3elRCZbs9/C1IryTd6viKlhAXk4JmevegwmGXlBr4tNIZI7b0q42S7CkU5Ad/8tYBSRTgby0LDLefa2Qy/mnRwlnQxPXgBxJ/e9Jbw9Sfaht+9I3avmR5t/wAVdUuUT2vK59sXn+9//8QAKhABAAECBAUDBAMAAAAAAAAAAREAITAxQVFhcYHB8BCRoSBAYOGx0fH/2gAIAQEAAT8Q/FgBbaX8sqJl82yaNk4HuqFUYzhTrKkRRITR+zu5dwbHhd+aERj9NodD6WA40EHovSZzu5Dlp8GnKEQiQjjgqASuhRdHsFuMavDT+MAaBFgW4f7UgBmxYwqXDZZp5j/MNxncQX7jb94x4gR+QsSZnz0oWySuRODhit8wMjQ79cactWbrnHcvVoa2vucNHWhEkuYIEEqJwLfBfb7ByGNeQODmfxwoiWNeF5OvlsDMObySKRlZGHFzvSvl6ijJZppQ8TscNXJqMkSbLnHct9ZBMgz3cWcCOnGh5vUBI9v29IQJ63sVOFNpxNTzalbJK4R51LnkRQeZk+Z0KVyeJzNPoNRAStO5m3ucSIk+37dfSEE9eNTzb0lgjp2x6RWj2/bpUsE9e2KJPLUp1CIlCTqUOapXI9fQZ+EcyzvPTFjBHTjQ839YdA6Y/b49ZwptOJqebVARH6s9EkqWY4q5bJ8b1GAW0lznp196MTdI2lLPZXqYd3NJgiypsa8l7V592rz7tXn3avHu1efdq8+7V592rz7tXn3avPu1Oebn/XXkvamkYpALWAcVhzxVw3hWcD/UxcoUJAJV5BQ8oEZhRw02LEVxHmXDQeKNYMJyB4kBv0XdiAPYvCFxHRp3Uw4EK0NizSYasRKUjBNoXoAMkUvAxBBKDwJ7xoZy0bZKOq0B46hmiRVxMNOTGBLqtEgOiFIWEqQN4OCEnBxVTgVk0J7xGQL2ESKOKZhsdJcthK0XDfwIsypDcVs8cZg7SngJNHUydajccrK3SF5NdQEnJ2b7oqvQKBL1TS4RzAPdrMFquloroUT/AMjnMhlyjO5TWvlX0oSq5xnYGKP5gBdlOSO8MtqW2rZkN7oip/WX+IQWg3AbraSqVVW6v5V//9k="></a></div></div></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<div id="__docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><header class="hero hero--secondary heroBanner_qdFl"><div class="container" style="text-align:left"><div class="row"><div class="col margin-vert--lg margin-right--md"><h1 class="hero__title">Make better games through automated testing</h1><p class="hero__subtitle">Regression Games helps game developers go from zero to one with automated game testing</p><div class="buttons_AeoN" style="justify-content:left"><a class="button button--primary button--outline button--lg" href="/tutorials/building-your-first-bot">Get Started</a></div><div style="margin-top:16px">Get started immediately by adding the package to Unity:<div style="margin-top:16px;font-size:12px"><pre style="display:inline">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.28</pre></div></div></div><div class="col"><img src="/assets/images/demo-932c14cb4e546042c07e5799665cc0d8.gif" alt="Regression Games" style="border-radius:12px"><div style="color:gray;padding-right:24px;font-style:italic">Demo of our recording and validation features. Automatically extract game state and begin writing functional tests in minutes.</div></div></div></div></header><main><section class="features_t9lD"><div class="container"><div class="row"><div class="col col--4"><div class="text--center"><img class="featureSvg_GfXr" src="/assets/images/ai_1-e765bdc2cfecce91cbd44170e21a6e1c.png"></div><div class="text--center padding-horiz--md"><h3>A Plethora of Features</h3><p>Regression Games is building the best platform for game test automation with replay features, validation libraries, CI/CD integration, and more.</p></div></div><div class="col col--4"><div class="text--center"><img class="featureSvg_GfXr" src="/assets/images/ai (3)-a8825fb481555ca2707f39c89be6dedb.png"></div><div class="text--center padding-horiz--md"><h3>Ease of Integration</h3><p>Ease of integration is one of our top priorities, and it shows. As soon as you add the SDK, data and deep state info is collected, without custom code needed.</p></div></div><div class="col col--4"><div class="text--center"><img class="featureSvg_GfXr" src="/assets/images/ai (2)-19c3966e89df8c194ecd3e781a68cfca.png"></div><div class="text--center padding-horiz--md"><h3>Bot Versatility</h3><p>Regression Games interfaces are built for a variety of teams, even those who may not have code access. Our intuitive functional testing builder allows anyone to make tests.</p></div></div></div></div></section></main><div class="container text--center"><div style="margin-bottom:64px;margin-top:32px;font-size:1.5em;color:grey;font-weight:bold">BACKED BY TIER 1 INVESTORS</div><div class="row"><div class="col col--3"><div class="text--center"><a href="https://nea.com/" target="_blank"><img style="height:60px" src="/assets/images/nea-3a1bcf8f2def3c2af15a50c315f2f176.jpg"></a></div></div><div class="col col--3"><div class="text--center"><a href="https://a16z.com/" target="_blank"><img style="height:100px;margin-top:-20px" src="/assets/images/a16z-137749dc988bf598433d91265cf02959.jpeg"></a></div></div><div class="col col--3"><div class="text--center"><a href="https://roosh.vc/" target="_blank"><img style="height:150px;margin-top:-40px" src="data:image/jpeg;base64,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"></a></div></div><div class="col col--3"><div class="text--center"><a href="https://bbq.capital/" target="_blank"><img style="height:80px;margin-top:-00px" src="data:image/jpeg;base64,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zzzzyj73333jzzzzzzy1z333zTzzzzzzetX/AN9e888887+2rUi9888887OMMMMdO888887288888U888888528888o8888888s/es+t88888888888888888888888888888//EACYRAQABAwMCBgMAAAAAAAAAAAERADFhICFBUYEQMHGhwdFAkbH/2gAIAQMBAT8Q/ChAGWKSY9l90ZBGEf55UxApe4+3q7et6lLWWfAmpHIw0c3z9j16mb+tARJHXMmM8Lhg5nHFIjDpcWz8j5O/kHOAr9+vepOOJ8lz+Z0LyAP37eROVwu57duiBQ/ywHflwG7gpNKU4TwiWkZtDCLM0AiiCIu60vCwwMLHhegieDVuZejsW7nHSaGjeDjomRhMlRcWdmxhIB5Gm8lL1k+Q3yhQgYYARE2Q7IFx5Wp9qjfStxLodyLGACaIugy9IN3ezNu+phHqUlyKyqytZWsqkkLSANTgOKAhZ1Ko8a5XBQCR0hHJ5C8ugclK4pdn9UZAmpB+c//EACkRAQABAQYFBAMBAAAAAAAAAAERACAhMUFhwTBRgZGhcdHh8BBAsfH/2gAIAQIBAT8Q/SKlA1qJjyFCyCaM8KY3rn7Pepll1/EmEdKcL4+r/vehAJhbkUicYxjT1pEYbKLJruNzrwDpMcxj81Lw1Dcy/mthB8keAAsDFzjH40rCiE09KNhjDS7U8zR8McHJ/JQDakiyjd6HmKxPlP31pY7gLY3elRCZbs9/C1IryTd6viKlhAXk4JmevegwmGXlBr4tNIZI7b0q42S7CkU5Ad/8tYBSRTgby0LDLefa2Qy/mnRwlnQxPXgBxJ/e9Jbw9Sfaht+9I3avmR5t/wAVdUuUT2vK59sXn+9//8QAKhABAAECBAUDBAMAAAAAAAAAAREAITAxQVFhcYHB8BCRoSBAYOGx0fH/2gAIAQEAAT8Q/FgBbaX8sqJl82yaNk4HuqFUYzhTrKkRRITR+zu5dwbHhd+aERj9NodD6WA40EHovSZzu5Dlp8GnKEQiQjjgqASuhRdHsFuMavDT+MAaBFgW4f7UgBmxYwqXDZZp5j/MNxncQX7jb94x4gR+QsSZnz0oWySuRODhit8wMjQ79cactWbrnHcvVoa2vucNHWhEkuYIEEqJwLfBfb7ByGNeQODmfxwoiWNeF5OvlsDMObySKRlZGHFzvSvl6ijJZppQ8TscNXJqMkSbLnHct9ZBMgz3cWcCOnGh5vUBI9v29IQJ63sVOFNpxNTzalbJK4R51LnkRQeZk+Z0KVyeJzNPoNRAStO5m3ucSIk+37dfSEE9eNTzb0lgjp2x6RWj2/bpUsE9e2KJPLUp1CIlCTqUOapXI9fQZ+EcyzvPTFjBHTjQ839YdA6Y/b49ZwptOJqebVARH6s9EkqWY4q5bJ8b1GAW0lznp196MTdI2lLPZXqYd3NJgiypsa8l7V592rz7tXn3avHu1efdq8+7V592rz7tXn3avPu1Oebn/XXkvamkYpALWAcVhzxVw3hWcD/UxcoUJAJV5BQ8oEZhRw02LEVxHmXDQeKNYMJyB4kBv0XdiAPYvCFxHRp3Uw4EK0NizSYasRKUjBNoXoAMkUvAxBBKDwJ7xoZy0bZKOq0B46hmiRVxMNOTGBLqtEgOiFIWEqQN4OCEnBxVTgVk0J7xGQL2ESKOKZhsdJcthK0XDfwIsypDcVs8cZg7SngJNHUydajccrK3SF5NdQEnJ2b7oqvQKBL1TS4RzAPdrMFquloroUT/AMjnMhlyjO5TWvlX0oSq5xnYGKP5gBdlOSO8MtqW2rZkN7oip/WX+IQWg3AbraSqVVW6v5V//9k="></a></div></div></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/markdown-page.html b/markdown-page.html index dffb192..f1d5f8b 100644 --- a/markdown-page.html +++ b/markdown-page.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Markdown page example</h1><p>You don't need React to write simple standalone pages.</p></article></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/overview.html b/overview.html index 632e6ca..2f4a615 100644 --- a/overview.html +++ b/overview.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -19,8 +19,8 @@ built around these bots.</p><p><img loading="lazy" alt="timeline feature" src="/assets/images/timeline-6aa7e114768fc3f9b776ae9af1d4cfa9.png" width="2636" height="2058" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="availability-assurances">Availability Assurances<a href="#availability-assurances" class="hash-link" aria-label="Direct link to Availability Assurances" title="Direct link to Availability Assurances"></a></h2><p>The Regression Games team offers the following assurances for our initial testing with developers. Additionally, we have a dedicated Discord server for support, and can also create a Slack Connect channel, giving you direct access to our entire team. For access to these channels, send an e-mail to <a href="mailto:aaron@regression.gg" target="_blank" rel="noopener noreferrer">aaron@regression.gg</a>.</p><ul><li>A single account can run at least 10 bots concurrently</li><li>The time from requesting a bot to be started to the time it connects to Unity will take less than 10 seconds if the bot is relying on dependencies that are common to most bots. This does not cover bots that may have lots of library dependencies, which may take longer.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="implemented-features">Implemented Features<a href="#implemented-features" class="hash-link" aria-label="Direct link to Implemented Features" title="Direct link to Implemented Features"></a></h2><p>The table below details and links to documentation for the features implemented on our platform.</p><table><thead><tr><th><strong>Feature</strong></th><th><strong>Description</strong></th><th><strong>Documentation</strong></th></tr></thead><tbody><tr><td>Unity C# SDK</td><td>A C# SDK for implementing bots locally in Unity.</td><td><a href="/creating-bots/csharp/adaptive-bots">Link</a></td></tr><tr><td>Bot Code Generation</td><td>Create bots with low-code tools such as behavior trees powered by GPT.</td><td><a href="/creating-bots/csharp/agent-builder">Link</a></td></tr><tr><td>Platform and Language Agnostic</td><td>Our protocol permits bots to eventually be written in multiple engines and languages.</td><td><em>Docs coming soon</em></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="importing-the-regression-games-unity-bots-package">Importing the Regression Games Unity Bots package<a href="#importing-the-regression-games-unity-bots-package" class="hash-link" aria-label="Direct link to Importing the Regression Games Unity Bots package" title="Direct link to Importing the Regression Games Unity Bots package"></a></h2><p>Our package is available via GitHub <a href="https://github.com/Regression-Games/RGUnityBots" target="_blank" rel="noopener noreferrer">here</a>. Import the repository by clicking <strong>Add package from git URL</strong> in the <strong>Package Manager</strong> window (this window can be opened -in the <strong>Window > Package Manager</strong> menu) and pasting in the following URL.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.27</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Note that this package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them.</li><li>Note that this package installs a dependency of Newtonsoft Json (<a href="https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html" target="_blank" rel="noopener noreferrer">https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html</a>) for serializing/deserializing Json message payloads.</li><li>If your game utilizes Unity's ECS, we now have an extension package available to support it. Install this package after installing the core RGUnityBots package:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots/tree/main/src/gg.regression.unity.bots.ecs#v0.0.27</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">For a full walkthrough on getting started, see the [Building Your First Bot](tutorials/building-your-first-bot) tutorial.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#current-stage-of-the-product" class="table-of-contents__link toc-highlight">Current Stage of the Product</a></li><li><a href="#availability-assurances" class="table-of-contents__link toc-highlight">Availability Assurances</a></li><li><a href="#implemented-features" class="table-of-contents__link toc-highlight">Implemented Features</a></li><li><a href="#importing-the-regression-games-unity-bots-package" class="table-of-contents__link toc-highlight">Importing the Regression Games Unity Bots package</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +in the <strong>Window > Package Manager</strong> menu) and pasting in the following URL.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.28</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Note that this package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them.</li><li>Note that this package installs a dependency of Newtonsoft Json (<a href="https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html" target="_blank" rel="noopener noreferrer">https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html</a>) for serializing/deserializing Json message payloads.</li><li>If your game utilizes Unity's ECS, we now have an extension package available to support it. Install this package after installing the core RGUnityBots package:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots/tree/main/src/gg.regression.unity.bots.ecs#v0.0.28</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">For a full walkthrough on getting started, see the [Building Your First Bot](tutorials/building-your-first-bot) tutorial.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#current-stage-of-the-product" class="table-of-contents__link toc-highlight">Current Stage of the Product</a></li><li><a href="#availability-assurances" class="table-of-contents__link toc-highlight">Availability Assurances</a></li><li><a href="#implemented-features" class="table-of-contents__link toc-highlight">Implemented Features</a></li><li><a href="#importing-the-regression-games-unity-bots-package" class="table-of-contents__link toc-highlight">Importing the Regression Games Unity Bots package</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/pre-made-bots.html b/pre-made-bots.html index 20a3a7e..39ed83d 100644 --- a/pre-made-bots.html +++ b/pre-made-bots.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -22,7 +22,7 @@ details. Fill out a desired name for your bot, and click create. Once on the Bot Manager page, you will see that your bot entry has a reference to the bot it was created it from, so you can always go back and reference the documentation. </p><p>From your bot details, you can always download and upload the bot code via a zip file.</p><p><img loading="lazy" alt="Create a new bot" src="/assets/images/create-bot-18631985af30fd71d2a48b1df00ec8fa.png" width="3342" height="1632" class="img_ev3q"> <img loading="lazy" alt="View the new bot" src="/assets/images/new-bot-f0c09d679aefdf1bb70ffc964ed6e016.png" width="2388" height="1048" class="img_ev3q"></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#learn-about-the-bots-in-the-marketplace" class="table-of-contents__link toc-highlight">Learn About the Bots in the Marketplace</a></li><li><a href="#creating-a-bot-from-a-marketplace-bot" class="table-of-contents__link toc-highlight">Creating a Bot from a Marketplace Bot</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/quickstart.html b/quickstart.html index 25e76e8..d9f2233 100644 --- a/quickstart.html +++ b/quickstart.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -19,7 +19,7 @@ Within your Unity Hub, search for a template called <strong>3D (URP)</strong>, download it if you haven't already, and create a new project from that template.</p><p><img loading="lazy" alt="Create a new project from the 3D URP template" src="/assets/images/urp-e326136087f444fbfb2da78da73a623d.png" width="2024" height="1180" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-2-import-the-regression-games-unity-bots-sdk">Step 2: Import the Regression Games Unity Bots SDK<a href="#step-2-import-the-regression-games-unity-bots-sdk" class="hash-link" aria-label="Direct link to Step 2: Import the Regression Games Unity Bots SDK" title="Direct link to Step 2: Import the Regression Games Unity Bots SDK"></a></h2><p><a href="https://github.com/Regression-Games/RGUnityBots" target="_blank" rel="noopener noreferrer">Our package is available via GitHub</a>. Import the repository by clicking <strong>Add package from git URL</strong> in the <strong>Package Manager</strong> window (this window can be opened -in the <strong>Window > Package Manager</strong> menu) and pasting in the following URL.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.27</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Note that this package uses the new Unity Input System, and will likely ask you to restart the editor - <strong>please select yes to restart</strong>.</li><li>Note that this package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them.</li><li>Note that this package installs a dependency of <a href="https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html" target="_blank" rel="noopener noreferrer">Newtonsoft Json</a> for serializing/deserializing Json message payloads.</li><li>If your game utilizes Unity's ECS, we now have an extension package available to support it. Install this package after installing the core RGUnityBots package:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots/tree/main/src/gg.regression.unity.bots.ecs#v0.0.27</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" alt="Screenshot of the package imported into the project" src="/assets/images/tutorial-1-package-0d2bfbaccdb409a6013aa1de51012636.png" width="2608" height="736" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-3-login-optional-and-load-the-scene">Step 3: Login (optional) and load the scene<a href="#step-3-login-optional-and-load-the-scene" class="hash-link" aria-label="Direct link to Step 3: Login (optional) and load the scene" title="Direct link to Step 3: Login (optional) and load the scene"></a></h2><p>Once the package is imported, a welcome pane will open with the ability to login to Regression Games. Create +in the <strong>Window > Package Manager</strong> menu) and pasting in the following URL.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.28</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Note that this package uses the new Unity Input System, and will likely ask you to restart the editor - <strong>please select yes to restart</strong>.</li><li>Note that this package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them.</li><li>Note that this package installs a dependency of <a href="https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html" target="_blank" rel="noopener noreferrer">Newtonsoft Json</a> for serializing/deserializing Json message payloads.</li><li>If your game utilizes Unity's ECS, we now have an extension package available to support it. Install this package after installing the core RGUnityBots package:</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots.ecs#v0.0.28</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" alt="Screenshot of the package imported into the project" src="/assets/images/tutorial-1-package-0d2bfbaccdb409a6013aa1de51012636.png" width="2608" height="736" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-3-login-optional-and-load-the-scene">Step 3: Login (optional) and load the scene<a href="#step-3-login-optional-and-load-the-scene" class="hash-link" aria-label="Direct link to Step 3: Login (optional) and load the scene" title="Direct link to Step 3: Login (optional) and load the scene"></a></h2><p>Once the package is imported, a welcome pane will open with the ability to login to Regression Games. Create an account to sync your bot and get access to other <a href="/pre-made-bots">ready-to-go bots</a> and our <a href="/creating-bots/csharp/agent-builder">Agent Builder tool</a>, or skip the login (you can access this later from the <strong>Regression Games</strong> > <strong>Getting Started</strong> menu).</p><p><img loading="lazy" alt="Screenshot of the welcome pane" src="/assets/images/signin-78e5d0b29f4546a2b1961355c05ef6b9.png" width="1568" height="1480" class="img_ev3q"></p><p>Once you click continue, you will see a screen that links to documentation and has an option to load a sample scene. Click @@ -27,7 +27,7 @@ will automatically open!</p><p><img loading="lazy" alt="Screenshot of the welcome pane" src="/assets/images/welcome-a15de99713e35e0ec54740015a688a5f.png" width="1564" height="1576" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-4-run-the-bot">Step 4: Run the bot!<a href="#step-4-run-the-bot" class="hash-link" aria-label="Direct link to Step 4: Run the bot!" title="Direct link to Step 4: Run the bot!"></a></h2><p>Once the scene is open, run the scene by clicking play. Once running, click the Regression Games logo in the bottom right, and click "Start Bot" button to start the <code>QuickstartBot</code> that is provided with the scene.</p><p><img loading="lazy" alt="Screenshot of the welcome pane" src="/assets/images/overlay-0040d4f292eaacfba15a56c49870009b.png" width="1978" height="1004" class="img_ev3q"></p><p>You should see the bot move around the platform and attack the enemy!</p><div style="position:relative;padding-bottom:50.40485829959515%;height:0"><iframe src="https://www.loom.com/embed/c4a31389df6742ba9320bf7dc0e91739?sid=336eaf3b-208c-4ea3-a0b3-c6ad3d2d2cee" frameborder="0" style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="next-steps">Next steps<a href="#next-steps" class="hash-link" aria-label="Direct link to Next steps" title="Direct link to Next steps"></a></h2><p>Now that you see a bot in action, you can start building your own! In the next tutorial, you will learn more about the integration patterns and approaches to building bots in Unity using the Regression Games Unity Bots SDK.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#step-1-create-or-open-a-3d-urp-scene" class="table-of-contents__link toc-highlight">Step 1: Create or open a 3D URP scene</a></li><li><a href="#step-2-import-the-regression-games-unity-bots-sdk" class="table-of-contents__link toc-highlight">Step 2: Import the Regression Games Unity Bots SDK</a></li><li><a href="#step-3-login-optional-and-load-the-scene" class="table-of-contents__link toc-highlight">Step 3: Login (optional) and load the scene</a></li><li><a href="#step-4-run-the-bot" class="table-of-contents__link toc-highlight">Step 4: Run the bot!</a></li><li><a href="#next-steps" class="table-of-contents__link toc-highlight">Next steps</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/session-insights/client-dashboard.html b/session-insights/client-dashboard.html index b7555b1..af61cd6 100644 --- a/session-insights/client-dashboard.html +++ b/session-insights/client-dashboard.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -23,7 +23,7 @@ the screenshot will show it at a larger size.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-find-the-validations-page">How To Find The Validations Page<a href="#how-to-find-the-validations-page" class="hash-link" aria-label="Direct link to How To Find The Validations Page" title="Direct link to How To Find The Validations Page"></a></h2><p>Visit the <strong>Running Bots</strong> tab and click on the <strong>History</strong> filter to see a list of your previous bot instances. Navigate to the Validations Page for a bot instance by clicking on the <strong>Go To Validations</strong> button.</p><p><img loading="lazy" alt="Validations Page Via Bot History" src="/assets/images/navigate-from-bot-history-6bde2334d0b56fc0aec9f3f4ce7563e6.png" width="4112" height="1722" class="img_ev3q"></p><p>Visit the <strong>Bot Manager</strong> tab and select a bot whose validations you would like to view. Navigate to the Validations Page for the selected bot by clicking on the <strong>Go To Validations</strong> button in the panel on the right.</p><p><img loading="lazy" alt="Validations Page Via Bot Manager" src="/assets/images/bot-details-preview-f974fefb2853ecb4506d7c1351e7733c.png" width="4112" height="1778" class="img_ev3q"></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#how-to-find-the-validations-page" class="table-of-contents__link toc-highlight">How To Find The Validations Page</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/session-insights/in-editor-replay.html b/session-insights/in-editor-replay.html index cc9517d..3565c07 100644 --- a/session-insights/in-editor-replay.html +++ b/session-insights/in-editor-replay.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a class="navbar__item navbar__link" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Replaying Bot Behaviors in the Unity Editor</h1><p>Bots running on Regression Games save all states observed, all actions sent, and all validations performed for each game tick. This data can be loaded in the Unity editor for visualization and playback in the scene. This feature, combined with our validation framework, allows you to find and debug specific errors within your game.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="downloading-replay-data">Downloading Replay Data<a href="#downloading-replay-data" class="hash-link" aria-label="Direct link to Downloading Replay Data" title="Direct link to Downloading Replay Data"></a></h2><p>At the end of a Bot's lifecycle, the replay data for every game tick processed by that Bot is saved into a single Zip file. This file can be downloaded from the <code>History</code> section of the <code>Running Bots</code> tab in the Regression Games client. Click the <code>Download Replay Data</code> button for the Bot instance you want to download. This will download a file named <code>rg_bot_replay_data-<InstanceId>.zip</code>.</p><p><img loading="lazy" alt="replay data download" src="/assets/images/replay-data-download-7244c00ec2fbe7ba59cf45acbeebbac6.png" width="1154" height="841" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-bot-replay-window">The Bot Replay Window<a href="#the-bot-replay-window" class="hash-link" aria-label="Direct link to The Bot Replay Window" title="Direct link to The Bot Replay Window"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="opening-the-bot-replay-window">Opening The Bot Replay Window<a href="#opening-the-bot-replay-window" class="hash-link" aria-label="Direct link to Opening The Bot Replay Window" title="Direct link to Opening The Bot Replay Window"></a></h3><p>With the Regression Games SDK installed in your Unity Editor Project, you can open the Regression Games <code>Bot Replay Window</code> from the <code>Regression Games</code> menu in the top bar.</p><p><img loading="lazy" alt="rg top menu" src="/assets/images/rg-top-menu-5355ad3a564ae614ac0698edf7004bd6.png" width="796" height="61" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="loading-your-scene">Loading Your Scene<a href="#loading-your-scene" class="hash-link" aria-label="Direct link to Loading Your Scene" title="Direct link to Loading Your Scene"></a></h3><p>The Bot Replay Window will render the game replay state in the currently loaded editor scene. For the best experience, make sure your gameplay scene is loaded in the editor so that all fixed scene assets will be visible and line up with the replay data.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>This replay process will dynamically create objects within the currently loaded scene.</p><p>Don't worry !</p><p>These objects will automatically be removed when running, saving, or building the scene. You may occasionally be prompted to save the scene because it has been changed. It is safe to save; the Bot replay objects will be removed from the scene before the save processes.</p></div></div><p><img loading="lazy" alt="timeline feature" src="/assets/images/timeline-6aa7e114768fc3f9b776ae9af1d4cfa9.png" width="2636" height="2058" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="loading-replay-data">Loading Replay Data<a href="#loading-replay-data" class="hash-link" aria-label="Direct link to Loading Replay Data" title="Direct link to Loading Replay Data"></a></h3><p>The first step in using the Bot Replay Window is loading a replay data Zip file. Click the <code>Bot Replay Zip:</code> button in the top left of the window. This will open a file chooser window. Choose the <code>rg_bot_replay_data-<InstanceId>.zip</code> file you downloaded from the Regression Games Client.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="tick-inspector-controlling-the-current-tick">Tick Inspector: Controlling The Current Tick<a href="#tick-inspector-controlling-the-current-tick" class="hash-link" aria-label="Direct link to Tick Inspector: Controlling The Current Tick" title="Direct link to Tick Inspector: Controlling The Current Tick"></a></h3><p>After loading the file, the data for game ticks recorded by the Bot will be available for playback. </p><p>The tick rate at which the data was recorded is shown, followed by the tick rate for playback. By default, the playback tick rate will match the recorded tick rate, but it can be modified for faster or slower playback.</p><p>The current tick and the total tick count are shown next to buttons for controlling the replay. You can Play the replay which will automatically update the editor at the playback tick rate. You can also manually jump to a specific tick number, or manually step forward or back 1 tick at a time.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="tick-inspector-evaluating-the-current-tick">Tick Inspector: Evaluating The Current Tick<a href="#tick-inspector-evaluating-the-current-tick" class="hash-link" aria-label="Direct link to Tick Inspector: Evaluating The Current Tick" title="Direct link to Tick Inspector: Evaluating The Current Tick"></a></h3><p>For each tick, the Bot Replay Window will show all entities that were tracked as part of the Game State sent to Regression Games. These are sorted alphabetically with any active/enabled entities listed first.</p><p>For each entity in the tick, you can use the checkboxes to enable or disable rendering its information in the scene</p><ul><li>Enable or disable rendering of that entity model</li><li>Enable or disable rendering the path history of that entity</li><li>Enable or disable rendering a targeting circle around that entity</li><li>Enable or disable rendering action information of that entity</li></ul><p>In addition to controlling rendering, the tick inspector also highlights and shows a heart icon for "players" (entities that are controlled by humans or bots).</p><p><img loading="lazy" alt="timeline panel" src="/assets/images/timeline-panel-90a44d2850a37aafedb441ef10de3df8.png" width="2608" height="1188" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="tick-inspector-actions-and-validations">Tick Inspector: Actions And Validations<a href="#tick-inspector-actions-and-validations" class="hash-link" aria-label="Direct link to Tick Inspector: Actions And Validations" title="Direct link to Tick Inspector: Actions And Validations"></a></h3><p>For the entity in the tick representing the Bot Instance that the replay data was recorded from, actions and validations are shown if any were performed in that tick.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="actions">Actions<a href="#actions" class="hash-link" aria-label="Direct link to Actions" title="Direct link to Actions"></a></h4><p>Shows any command(s) that the Bot sent to the game for the current tick. These could be movements, performed abilities, object interactions, etc</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="validations">Validations<a href="#validations" class="hash-link" aria-label="Direct link to Validations" title="Direct link to Validations"></a></h4><p>Shows any validation(s) that the Bot performed on the current tick. These are normally test cases coded into the Bot to validate that the tick data changed as expected based on prior actions or other factors in the game state. See the <a href="/validations/validations-getting-started">validation</a> docs for more information.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="registering-custom-models-for-replay-objects">Registering Custom Models For Replay Objects<a href="#registering-custom-models-for-replay-objects" class="hash-link" aria-label="Direct link to Registering Custom Models For Replay Objects" title="Direct link to Registering Custom Models For Replay Objects"></a></h3><p>When viewing a replay, entities that are dynamically spawned into the scene (not defined in the scene itself) need to be told what model to render with. By default they will load as a pink capsule, but they can be configured with a specific model based on their type.</p><p>When loading a replay zip, the list of entity types to replay model associations will automatically be updated with any missing entities that have <code>isRuntimeObject=true</code>. You can also manually add, edit, or remove associations at any time.</p><p><img loading="lazy" alt="configure replay models" src="/assets/images/configure-replay-models-6e3f74154171a6efbc2e8457e23b3e2a.png" width="970" height="247" class="img_ev3q"></p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>The associations from entity type to replay model are saved in your project as <code>Assets/RegressionGames/Editor/CustomReplayModels.asset</code>.</p><p>You can edit this asset in the inspector directly or by using the <code>Configure Custom Replay Models</code> button in the RG Bot Replay window to open the inspector.</p></div></div><p><img loading="lazy" alt="replay model manager" src="/assets/images/replay-model-manager-88b864e539c1af14f438ad02ad083ada.png" width="412" height="423" class="img_ev3q"></p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_S0QG"><p>While the associations support any GameObject, it is best to associate just the model for your entity.</p><p>The replay does not trigger animations, play sounds, process physics, or evaluate any runtime scripts on your associated object.</p></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#downloading-replay-data" class="table-of-contents__link toc-highlight">Downloading Replay Data</a></li><li><a href="#the-bot-replay-window" class="table-of-contents__link toc-highlight">The Bot Replay Window</a><ul><li><a href="#opening-the-bot-replay-window" class="table-of-contents__link toc-highlight">Opening The Bot Replay Window</a></li><li><a href="#loading-your-scene" class="table-of-contents__link toc-highlight">Loading Your Scene</a></li><li><a href="#loading-replay-data" class="table-of-contents__link toc-highlight">Loading Replay Data</a></li><li><a href="#tick-inspector-controlling-the-current-tick" class="table-of-contents__link toc-highlight">Tick Inspector: Controlling The Current Tick</a></li><li><a href="#tick-inspector-evaluating-the-current-tick" class="table-of-contents__link toc-highlight">Tick Inspector: Evaluating The Current Tick</a></li><li><a href="#tick-inspector-actions-and-validations" class="table-of-contents__link toc-highlight">Tick Inspector: Actions And Validations</a></li><li><a href="#registering-custom-models-for-replay-objects" class="table-of-contents__link toc-highlight">Registering Custom Models For Replay Objects</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/tutorials/building-your-first-bot.html b/tutorials/building-your-first-bot.html index e2672d1..3bb3d52 100644 --- a/tutorials/building-your-first-bot.html +++ b/tutorials/building-your-first-bot.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -21,7 +21,7 @@ more about these limitations in our <a href="/gameplay-sessions/gameplay-sessions-getting-started">Gameplay Session recording docs</a>.</p></div></div><p>Open it within Unity version 2022.3 (visit the <a href="https://unity.com/releases/editor/whats-new/2022.3.27" target="_blank" rel="noopener noreferrer">Unity archive</a> if you can't find that version from Unity Hub). Once the project is loaded, open the <strong>MainMenu</strong> scene within <strong>Assets</strong> > <strong>Scenes</strong> > <strong>MainMenu</strong>.</p><p><img loading="lazy" alt="Screenshot of the playground scene" src="/assets/images/bossroom-e2d90f0cd24bd29720d5f957f472c2e2.png" width="2692" height="1676" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="import-the-regression-games-unity-bots-package">Import the Regression Games Unity Bots package<a href="#import-the-regression-games-unity-bots-package" class="hash-link" aria-label="Direct link to Import the Regression Games Unity Bots package" title="Direct link to Import the Regression Games Unity Bots package"></a></h2><p>You can find <a href="https://github.com/Regression-Games/RGUnityBots" target="_blank" rel="noopener noreferrer">our package on GitHub</a>. Import the package into your Unity project by opening -the <strong>Package Manager</strong> window (<strong>Window</strong> > <strong>Package Manager</strong>) and click <strong>Add package from git URL</strong>. Then, paste the following URL:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.27</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><ul><li>This package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them.</li><li>This package installs a dependency of Newtonsoft Json (<a href="https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html" target="_blank" rel="noopener noreferrer">https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html</a>) for serializing/deserializing Json message payloads.</li><li>If you get a note about Unity's new input system, click <strong>Yes</strong> and allow the editor to restart.</li></ul><p>If your game utilizes Unity's ECS, we now have an extension package available to support it.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots/tree/main/src/gg.regression.unity.bots.ecs#v0.0.27</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Install this package in addition to / after installing the core RGUnityBots package.</p></div></div><p><img loading="lazy" alt="Gif of the package imported into the project" src="/assets/images/installing-sdk-935e0d98a5c03fa57b5bd51d752b4c20.gif" width="1084" height="568" class="img_ev3q"></p><p>After importing the package, you will be greeted by a login screen. Create an account at +the <strong>Package Manager</strong> window (<strong>Window</strong> > <strong>Package Manager</strong>) and click <strong>Add package from git URL</strong>. Then, paste the following URL:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots#v0.0.28</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-info alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_S0QG"><ul><li>This package utilizes TextMeshPro. If you are prompted by Unity to add TextMeshPro assets to your project, please add them.</li><li>This package installs a dependency of Newtonsoft Json (<a href="https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html" target="_blank" rel="noopener noreferrer">https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.1/manual/index.html</a>) for serializing/deserializing Json message payloads.</li><li>If you get a note about Unity's new input system, click <strong>Yes</strong> and allow the editor to restart.</li></ul><p>If your game utilizes Unity's ECS, we now have an extension package available to support it.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">https://github.com/Regression-Games/RGUnityBots.git?path=src/gg.regression.unity.bots.ecs#v0.0.28</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Install this package in addition to / after installing the core RGUnityBots package.</p></div></div><p><img loading="lazy" alt="Gif of the package imported into the project" src="/assets/images/installing-sdk-935e0d98a5c03fa57b5bd51d752b4c20.gif" width="1084" height="568" class="img_ev3q"></p><p>After importing the package, you will be greeted by a login screen. Create an account at <a href="https://play.regression.gg" target="_blank" rel="noopener noreferrer">https://play.regression.gg</a> and login to Unity with your account credentials. If you need to login again in the future, you can enter your login info by visiting the <strong>Regression Games</strong> > <strong>Getting Started</strong> menu.</p><p><img loading="lazy" alt="Screenshot of the package imported into the project" src="/assets/images/welcome_3-bbd5b9fb049a87d0719c924bf62625ce.png" width="3456" height="2160" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="restart-unity-and-your-ide">Restart Unity and your IDE<a href="#restart-unity-and-your-ide" class="hash-link" aria-label="Direct link to Restart Unity and your IDE" title="Direct link to Restart Unity and your IDE"></a></h2><p>After installing the Regression Games Unity Bots package and its dependencies into Unity, please restart Unity and your code editor (e.g. Rider or Visual Studio). Without this step, Unity and your code editor may not properly @@ -61,7 +61,7 @@ during this tutorial, or want to brainstorm how to get the most of this tool, please <a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer">join our active Discord community.</a>. We are excited to make the best automation tools for game QA, and would love your feedback!</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--next" href="/gameplay-sessions/gameplay-sessions-getting-started"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Getting Started with Gameplay Sessions</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#optional-download-a-sample-game" class="table-of-contents__link toc-highlight">(Optional) Download a sample game</a></li><li><a href="#import-the-regression-games-unity-bots-package" class="table-of-contents__link toc-highlight">Import the Regression Games Unity Bots package</a></li><li><a href="#restart-unity-and-your-ide" class="table-of-contents__link toc-highlight">Restart Unity and your IDE</a></li><li><a href="#record-a-gameplay-session" class="table-of-contents__link toc-highlight">Record a gameplay session</a><ul><li><a href="#add-the-rgoverlaycanvas" class="table-of-contents__link toc-highlight">Add the RGOverlayCanvas</a></li><li><a href="#record-a-gameplay-session-as-an-automated-test" class="table-of-contents__link toc-highlight">Record a gameplay session as an automated test</a></li></ul></li><li><a href="#create-a-validation-suite" class="table-of-contents__link toc-highlight">Create a Validation Suite</a><ul><li><a href="#creating-the-test-scenario" class="table-of-contents__link toc-highlight">Creating the test scenario</a></li><li><a href="#run-the-validation-suite-on-new-automated-runs" class="table-of-contents__link toc-highlight">Run the Validation Suite on new automated runs</a></li></ul></li><li><a href="#next-steps" class="table-of-contents__link toc-highlight">Next Steps</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/tutorials/github-actions.html b/tutorials/github-actions.html index 987b375..bf06f4c 100644 --- a/tutorials/github-actions.html +++ b/tutorials/github-actions.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -58,7 +58,7 @@ contain output from your bot-code. You can also download in-game replay data which can be loaded in the Unity Editor to watch the movements and actions of each bot, as well as analyze the validations they performed. See the <a href="/session-insights/in-editor-replay">In-Editor Replay</a> for instructions on how to load replay data.</p><p><img loading="lazy" alt="Downloads" src="/assets/images/downloads-270c21c7aea240e44ab8ff8618773a58.png" width="3456" height="1932" class="img_ev3q"></p><p><img loading="lazy" alt="The timeline feature" src="/assets/images/timeline-b9df49b0048c7d9cc781e966840bd718.png" width="2212" height="1432" class="img_ev3q"></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#add-github-actions-workflow-files" class="table-of-contents__link toc-highlight">Add GitHub Actions Workflow Files</a><ul><li><a href="#create-a-new-branch-in-your-project" class="table-of-contents__link toc-highlight">Create a New Branch in Your Project</a></li><li><a href="#follow-the-steps-on-gameci-to-activate-a-unity-license" class="table-of-contents__link toc-highlight">Follow the Steps on GameCI to Activate a Unity License</a></li><li><a href="#add-the-workflow-file-to-your-project" class="table-of-contents__link toc-highlight">Add the Workflow File to Your Project</a></li></ul></li><li><a href="#configure-github-actions" class="table-of-contents__link toc-highlight">Configure GitHub Actions</a></li><li><a href="#add-a-test-to-your-unity-project" class="table-of-contents__link toc-highlight">Add a Test to Your Unity Project</a><ul><li><a href="#add-your-scenes-to-your-build" class="table-of-contents__link toc-highlight">Add Your Scenes to Your Build</a></li><li><a href="#configure-test-runner-for-your-project" class="table-of-contents__link toc-highlight">Configure Test Runner for Your Project</a></li><li><a href="#create-an-rgbottests-file-to-run-your-bot" class="table-of-contents__link toc-highlight">Create an <code>RGBotTests</code> File to Run Your Bot</a></li><li><a href="#test-it-out-with-an-existing-bot" class="table-of-contents__link toc-highlight">Test it out with an Existing Bot</a></li></ul></li><li><a href="#pushing-your-changes" class="table-of-contents__link toc-highlight">Pushing Your Changes</a></li><li><a href="#viewing-test-results" class="table-of-contents__link toc-highlight">Viewing Test Results</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/validations/validations-getting-started.html b/validations/validations-getting-started.html index 007f1d7..56e7485 100644 --- a/validations/validations-getting-started.html +++ b/validations/validations-getting-started.html @@ -9,13 +9,13 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorials/building-your-first-bot">Writing Your First Automated Test</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/gameplay-sessions/gameplay-sessions-getting-started">Gameplay Sessions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/validations/validations-getting-started">Validations</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/validations/validations-getting-started">Getting Started with Validations</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/validations/validations-scenario-builder-reference">Scenario Builder Reference</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/validations/validations-rules-reference">Rules Reference</a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/authenticating-with-api-keys">Authenticating with API Keys</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/generic-bots/monkey-bot">Generic Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/creating-bots/csharp/adaptive-bots">Custom Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/computer-vision">Computer Vision</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Validations</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Getting Started with Validations</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Validations</h1><p><img loading="lazy" alt="Screenshot of a scenario" src="/assets/images/scenario-example-953908b828688e3ed49136a05e81193e.png" width="3244" height="1924" class="img_ev3q"></p><p><strong>Validations</strong> are used to assert states within your game. You can create Validation Scenarios using our Scenario Builder, and then run them against a gameplay recording to ensure that your game is behaving as expected. You can also create Validation Rules to assert specific criteria about your game, such as the average frames per second during a gameplay recording.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="validation-suites">Validation Suites<a href="#validation-suites" class="hash-link" aria-label="Direct link to Validation Suites" title="Direct link to Validation Suites"></a></h2><p><strong>Validation Suites</strong> are a collection of Scenarios and Rules that you want to run together. You can create a Suite starting with a name and description. At the core of a Suite is its Base Gameplay Recording. This recording is a gameplay session recording used to create the Scenarios and Rules that will be run, and the inputs used during the recording will be used when running the scenarios.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="sharing-suites">Sharing Suites<a href="#sharing-suites" class="hash-link" aria-label="Direct link to Sharing Suites" title="Direct link to Sharing Suites"></a></h3><p>Validation Suites can be shared with other Regression Games users, in a read-only mode. If a Suite is shared with you, you can view the Suite and its Scenarios, but you cannot edit the Suite, its Scenarios, or its Rules.</p><p><img loading="lazy" alt="Screenshot of a scenario" src="/assets/images/share-d850b84eace983d03ce797921d6c1cba.png" width="3394" height="1902" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="scenario-builder">Scenario Builder<a href="#scenario-builder" class="hash-link" aria-label="Direct link to Scenario Builder" title="Direct link to Scenario Builder"></a></h2><p><strong>Scenarios</strong> are composed of steps that can be asserted throughout a gameplay recording. You can wait for specific mouse or keyboard events, check for specific game objects, or even check for specific values in the game state. The available options when creating Scenarios are drawn from the Base Gameplay Recording associated with a Suite.</p><p>Along with Scenario steps, you can also view the state, and view a screenshot, at each tick during the recording. This can help you understand the state of the game at each point in time, and can also help create the Scenarios you want to run.</p><p><img loading="lazy" alt="Building a Scenario" src="/assets/images/building-a-scenario-d9eacc1aad1dbf1487857aa0aff3be87.png" width="1588" height="846" class="img_ev3q"></p><p>Check out the <a href="/validations/validations-scenario-builder-reference">full Scenario Builder reference</a> for more details </p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rules">Rules<a href="#rules" class="hash-link" aria-label="Direct link to Rules" title="Direct link to Rules"></a></h2><p><strong>Rules</strong> are used to assert that the gameplay recording meets specific criteria, such as the average frames per second during the recording. When viewing a specific Validation Suite, you can add Rules to the Suite that will be asserted each time the Suite is run.</p><p>Rules can be added to a Suite by clicking the "Create Rule" button on the Suite's page. You can then select the Rule type you want to add, and configure the Rule's parameters. After adding a Rule to a Suite, you can always edit it later.</p><p><img loading="lazy" alt="Creating a Validation Rule" src="/assets/images/create-validation-rule-277eed739aa5dbdb8272727e800a75b0.png" width="1722" height="742" class="img_ev3q"></p><p>Check out the <a href="/validations/validations-rules-reference">full Rules reference</a> for more details</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="running-validations">Running Validations<a href="#running-validations" class="hash-link" aria-label="Direct link to Running Validations" title="Direct link to Running Validations"></a></h2><p>You can either run <strong>all</strong> of the Scenarios within a Suite, or trial run an individual Scenario. To run a Suite, click the "Run Suite" button, and select a Gameplay Session to test against. When the Suite is finished running, you can view the results of each Scenario and Rule within the Suite on the Test Runs page.</p><p>To trial run an individual Scenario, click the "Run Scenario" button within the Scenario's menu. The Scenario's results will be shown in a dialog, and will not be persisted.</p><p><img loading="lazy" alt="Screenshot of a scenario" src="/assets/images/run-scenario-66214adfa78107a7f74a7a0b566e41e9.png" width="1530" height="726" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="viewing-results">Viewing Results<a href="#viewing-results" class="hash-link" aria-label="Direct link to Viewing Results" title="Direct link to Viewing Results"></a></h2><p>To access the results of your Suite, navigate to the Test Runs page. Here you can see the results of each Scenario and Rule within a Suite. You can also view the results of a Scenario's steps, and the state of the game at each tick during the Scenario.</p><p><img loading="lazy" alt="Screenshot of a scenario" src="/assets/images/suite-run-details-dcfbb59a8e3c82c94743184c4bed1ab0.png" width="3312" height="2340" class="img_ev3q"></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/gameplay-sessions/gameplay-sessions-reference"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Gameplay Sessions Technical Reference</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/validations/validations-scenario-builder-reference"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Scenario Builder Reference</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#validation-suites" class="table-of-contents__link toc-highlight">Validation Suites</a><ul><li><a href="#sharing-suites" class="table-of-contents__link toc-highlight">Sharing Suites</a></li></ul></li><li><a href="#scenario-builder" class="table-of-contents__link toc-highlight">Scenario Builder</a></li><li><a href="#rules" class="table-of-contents__link toc-highlight">Rules</a></li><li><a href="#running-validations" class="table-of-contents__link toc-highlight">Running Validations</a></li><li><a href="#viewing-results" class="table-of-contents__link toc-highlight">Viewing Results</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/validations/validations-rules-reference.html b/validations/validations-rules-reference.html index 9c06156..7795563 100644 --- a/validations/validations-rules-reference.html +++ b/validations/validations-rules-reference.html @@ -9,14 +9,14 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Regression Games Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Regression Games</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/tutorials/building-your-first-bot">Developer Reference</a><a class="navbar__item navbar__link" href="/automated-testing/overview">Experimental Packages</a></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/changelog">Changelog</a><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/tutorials/building-your-first-bot">Writing Your First Automated Test</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/gameplay-sessions/gameplay-sessions-getting-started">Gameplay Sessions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/validations/validations-getting-started">Validations</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/validations/validations-getting-started">Getting Started with Validations</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/validations/validations-scenario-builder-reference">Scenario Builder Reference</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/validations/validations-rules-reference">Rules Reference</a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/authenticating-with-api-keys">Authenticating with API Keys</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/generic-bots/monkey-bot">Generic Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/creating-bots/csharp/adaptive-bots">Custom Bots</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/computer-vision">Computer Vision</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Validations</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Rules Reference</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Rules Reference</h1><p>Rules can be asserted when running a Validation Suite against a gameplay recording, to ensure that the recording meets specific criteria. We provide a set of rule types that can be used to construct assertions based on various performance metrics. For each tick in the gameplay recording, all Rules are evaluated. If a Rule is violated the Validation Run will display a warning for that Rule.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rule-types">Rule Types<a href="#rule-types" class="hash-link" aria-label="Direct link to Rule Types" title="Direct link to Rule Types"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="frames-per-second-with-percentile">Frames Per Second (with percentile)<a href="#frames-per-second-with-percentile" class="hash-link" aria-label="Direct link to Frames Per Second (with percentile)" title="Direct link to Frames Per Second (with percentile)"></a></h3><p>Assert that the frames per second of the gameplay recording do not fall below a threshold, within a specified percentile.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="average-frames-per-second">Average Frames Per Second<a href="#average-frames-per-second" class="hash-link" aria-label="Direct link to Average Frames Per Second" title="Direct link to Average Frames Per Second"></a></h3><p>Assert that the average frames per second of the gameplay recording does not fall below a threshold. This average is computed across all frames in a gameplay recording.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="maximum-frame-time">Maximum Frame Time<a href="#maximum-frame-time" class="hash-link" aria-label="Direct link to Maximum Frame Time" title="Direct link to Maximum Frame Time"></a></h3><p>Assert that the maximum frame time of the gameplay recording does not exceed a threshold. Frame time is the amount of time spent calculating and rendering a frame, and is measured in milliseconds. If a single frame exceeds the specified threshold, the rule will be violated.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/validations/validations-scenario-builder-reference"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Scenario Builder Reference</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/authenticating-with-api-keys"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Authenticating with API Keys</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#rule-types" class="table-of-contents__link toc-highlight">Rule Types</a><ul><li><a href="#frames-per-second-with-percentile" class="table-of-contents__link toc-highlight">Frames Per Second (with percentile)</a></li><li><a href="#average-frames-per-second" class="table-of-contents__link toc-highlight">Average Frames Per Second</a></li><li><a href="#maximum-frame-time" class="table-of-contents__link toc-highlight">Maximum Frame Time</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file diff --git a/validations/validations-scenario-builder-reference.html b/validations/validations-scenario-builder-reference.html index d9e51f7..bc4a828 100644 --- a/validations/validations-scenario-builder-reference.html +++ b/validations/validations-scenario-builder-reference.html @@ -9,8 +9,8 @@ <script src="/js/loadposthog.js"></script><link rel="stylesheet" href="/assets/css/styles.5fc48449.css"> -<link rel="preload" href="/assets/js/runtime~main.b88d0fd0.js" as="script"> -<link rel="preload" href="/assets/js/main.95f684d1.js" as="script"> +<link rel="preload" href="/assets/js/runtime~main.c9b44e16.js" as="script"> +<link rel="preload" href="/assets/js/main.7b9cd64a.js" as="script"> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> @@ -18,7 +18,7 @@ if a particular scenario fails, the following scenarios will still be executed. Each scenario always starts at the tick that the last scenario left off at.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-types">Step Types<a href="#step-types" class="hash-link" aria-label="Direct link to Step Types" title="Direct link to Step Types"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="wait-for-scene">Wait for Scene<a href="#wait-for-scene" class="hash-link" aria-label="Direct link to Wait for Scene" title="Direct link to Wait for Scene"></a></h3><p>Wait for a specific scene to be loaded to be loaded or unloaded.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="wait-for-key">Wait for Key<a href="#wait-for-key" class="hash-link" aria-label="Direct link to Wait for Key" title="Direct link to Wait for Key"></a></h3><p>Wait for one or more keys to be pressed or released.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="wait-for-mouse">Wait for Mouse<a href="#wait-for-mouse" class="hash-link" aria-label="Direct link to Wait for Mouse" title="Direct link to Wait for Mouse"></a></h3><p>Wait for a mouse button to be pressed or released.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="wait-for-existence">Wait for Existence<a href="#wait-for-existence" class="hash-link" aria-label="Direct link to Wait for Existence" title="Direct link to Wait for Existence"></a></h3><p>Wait for a specified number of game objects, of a specific type, to exist or not exist.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="wait-for-state">Wait for State<a href="#wait-for-state" class="hash-link" aria-label="Direct link to Wait for State" title="Direct link to Wait for State"></a></h3><p>Wait for a specified number of game objects, of a specific type, to have state values that match a comparison. This comparison can either be a manually input value, or a stored value from a previous step.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="store-value">Store Value<a href="#store-value" class="hash-link" aria-label="Direct link to Store Value" title="Direct link to Store Value"></a></h3><p>Store a game object's state value to be used in later steps. Note that the value and entity must be present when this step is executed, so be sure to place this step after a step that asserts the existence of the entity.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/validations/validations-getting-started"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Getting Started with Validations</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/validations/validations-rules-reference"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Rules Reference</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#step-types" class="table-of-contents__link toc-highlight">Step Types</a><ul><li><a href="#wait-for-scene" class="table-of-contents__link toc-highlight">Wait for Scene</a></li><li><a href="#wait-for-key" class="table-of-contents__link toc-highlight">Wait for Key</a></li><li><a href="#wait-for-mouse" class="table-of-contents__link toc-highlight">Wait for Mouse</a></li><li><a href="#wait-for-existence" class="table-of-contents__link toc-highlight">Wait for Existence</a></li><li><a href="#wait-for-state" class="table-of-contents__link toc-highlight">Wait for State</a></li><li><a href="#store-value" class="table-of-contents__link toc-highlight">Store Value</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/quickstart">Quickstart</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/925SYVse2H" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/RegressionGG" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://medium.com/ai-and-games-by-regression-games" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li><li class="footer__item"><a href="https://github.com/Regression-Games" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><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"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Regression Games, Inc.</div></div></div></footer></div> -<script src="/assets/js/runtime~main.b88d0fd0.js"></script> -<script src="/assets/js/main.95f684d1.js"></script> +<script src="/assets/js/runtime~main.c9b44e16.js"></script> +<script src="/assets/js/main.7b9cd64a.js"></script> </body> </html> \ No newline at end of file