<!doctype html><html lang="en"><head>
<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/websocket/versions/2026.6.18-2863e0a2cea783089ab6d9cd7ffac6283b336c90/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/ui-copilot/versions/2026.8.7-f565ddb50cff9d012669e5f4865000a535e97883/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/track-exp/versions/2026.7.7-cf66015a4f40edc5b417479a2a92aa3720b5c56f/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/session-manager/versions/2026.6.19-bff17069c03d22599ed3a11c61c08863b5c29072/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/flippers/versions/2026.6.29-6cbd3a3d3317d997fa1e89fcc9d24fc66747423f/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/seashell/versions/2026.8.5-1f280546ce9be91144d8e22ba1249866eac6acc0/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/permissions/versions/2026.7.31-2f10e4af603223866a97536c7e405788fa12d9a1/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/current-user/versions/2026.8.4-549234d1d5f7f0e84476ed8399cc808ab81dd378/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/navigation/versions/2026.7.30-73183068a2001d02c19b03136b4b2a45241eae9f/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/current-context-urn/versions/2026.6.18-2863e0a2cea783089ab6d9cd7ffac6283b336c90/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/graphql-client/versions/2026.7.7-472bb80ec552dddbd99f0e3ab5fb9b0d64e8923f/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/walrus/versions/2026.8.7-4174db8d4e160dce13b764abe0db60ce08cd6073/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/message-bus/versions/2026.7.27-0077d3cb9ad7dbeff521b825e41721bb2a046c92/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/error-boundary/versions/2026.6.18-2863e0a2cea783089ab6d9cd7ffac6283b336c90/remoteEntry.js">

<link rel="preload" as="script" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/registration-next/versions/2026.7.31-4b130651f331a89d8265c94fa88e59e869d30d7a/remoteEntry.js">
<script>window.__LR_GLOBAL_APP_NAME__ = "registration-next";</script>
<title>DigitalOcean</title><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><link rel="preconnect" href="https://ui-cdn.digitalocean-ui.com"/><link rel="preconnect" href="https://www.google-analytics.com"/><link rel="preconnect" href="https://www.gravatar.com"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/><link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@300;400;500;600;700&family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap" onload="this.rel='stylesheet'" crossorigin="anonymous"/><link rel="shortcut icon" href="/favicon.png"/><link rel="manifest" href="/manifest.json"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><meta property="og:url" content="https://www.digitalocean.com/"/><meta property="og:title" content="DigitalOcean — The developer cloud"/><meta property="og:site_name" content="DigitalOcean"/><meta property="og:image" content="https://www.digitalocean.com/_next/static/media/social-share-default.e8530e9e.jpeg"/><meta property="og:type" content="website"/><meta property="og:description" content="Helping millions of developers easily build, test, manage, and  scale applications of any size — faster than ever before."/><meta name="description" content="Helping millions of developers easily build, test, manage, and scale applications of any size — faster than ever before."/><meta name="twitter:card" content="summary"/><meta name="twitter:site" content="@DigitalOcean"/><meta name="twitter:creator" content="@DigitalOcean"/><link rel="preload" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/lobster-roll-host/assets/sentry.673b95ac984cb71c89eabf90df057f49eee898a8d585abf28ef86384d00c26fc.js" as="script"><link rel="prefetch" crossorigin="anonymous" href="https://ui-cdn.digitalocean-ui.com/federation/lobster-roll-host/assets/main.016a3d02d9b27462e972dc9d00664fdec9f3953040b60eb0863eee1a60636a52.js" as="script"><script>try{let e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="c458c572-7b63-4080-b141-7cd8a42fe430",e._sentryDebugIdIdentifier="sentry-dbid-c458c572-7b63-4080-b141-7cd8a42fe430")}catch(e){}{let e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e._sentryModuleMetadata=e._sentryModuleMetadata||{},e._sentryModuleMetadata[(new e.Error).stack]=Object.assign({},e._sentryModuleMetadata[(new e.Error).stack],{"_sentryBundlerPluginAppKey:lobster-roll":!0,dsn:"https://c269b31502512cd4929fd58446e6dd47@o1109393.ingest.us.sentry.io/4508853294006272",name:"lobster-roll-host"})}(()=>{"use strict";var e,t,r,s,n={"./src/client/runtime.ts":(e,t,r)=>{var s,n,o,a,i,c,d,l,u,h=function(e,t,r,s){if("a"===r&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?s:"a"===r?s.call(e):s?s.value:t.get(e)},f=function(e,t,r,s,n){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?n.call(e,r):n?n.value=r:t.set(e,r),r};class p{constructor(){s.set(this,new WeakMap)}getOrCompute(e,t,r){let n=h(this,s,"f").get(t);n||(n=new WeakMap,h(this,s,"f").set(t,n));let o=n.get(e);return o||(o=r(e,t.data),n.set(e,o)),o}}s=new WeakMap;class m{constructor(){n.add(this),o.set(this,void 0),a.set(this,[]),i.set(this,new p),c.set(this,new Set),l.set(this,(()=>{let e,t;const r=new Promise(((r,s)=>{e=e=>{n.resolution={status:"resolved",data:e},r(e),h(this,u,"f").call(this)},t=e=>{n.resolution={status:"rejected",data:e},s(e),h(this,u,"f").call(this)}}));r.catch(console.error);const s=()=>{const e=()=>{switch(n.resolution.status){case"pending":case"resolved":return n.resolution.data;case"rejected":throw n.resolution.data}},t=r.then(e,e);return t.catch(console.error),t},n={get promise(){return s()},resolve:e,reject:t,resolution:{status:"pending",get data(){return s()}}};return n})),u.set(this,(()=>{for(const e of h(this,c,"f"))e()})),f(this,o,h(this,l,"f").call(this),"f")}subscribe(e){return h(this,c,"f").add(e),()=>h(this,c,"f").delete(e)}resolve(e,t={}){const{force:r=!1}=t,s=h(this,o,"f");("pending"===s.resolution.status||r)&&s.resolve(e)}reject(e,t={}){const{force:r=!1}=t,s=h(this,o,"f");("pending"===s.resolution.status||r)&&s.reject(e)}use(e={}){const t=this.toResolution(e);if("resolved"!==t.status)throw t.data;return t.data}addLayer(e){const t=h(this,l,"f").call(this),r={state:t,key:e.key,merge:e.merge,priority:e.priority},s=e.loader();s instanceof Promise?s.then((e=>t.resolve(e))).catch((e=>{const r=e instanceof Error?e:new Error(String(e));t.reject(r)})):t.resolve(s);let n=[...h(this,a,"f")];return n.find((e=>e.key===r.key))?n=n.map((e=>e.key===r.key?r:e)):n.push(r),f(this,a,n.sort(((e,t)=>e.priority-t.priority)),"f"),!1!==e.notify&&h(this,u,"f").call(this),this.toPromise()}toResolution(e={}){const{excludeLayers:t=[]}=e,r=h(this,o,"f");if("rejected"===r.resolution.status)return r.resolution;if("pending"===r.resolution.status)return{status:"pending",data:this.toPromise()};let s=r.resolution.data;const n=h(this,a,"f").filter((e=>!t.includes(e.key)));for(const e of n){if("rejected"===e.state.resolution.status)return e.state.resolution;if("pending"===e.state.resolution.status)return{status:"pending",data:this.toPromise()};s=h(this,i,"f").getOrCompute(s,e.state.resolution,e.merge)}return{status:"resolved",data:s}}toPromise(e={}){const{excludeLayers:t=[]}=e,r=h(this,o,"f"),s=h(this,a,"f").filter((e=>!t.includes(e.key))),c=r.promise.then((async e=>{for(const t of s){const r=await h(this,n,"m",d).call(this,t);e=h(this,i,"f").getOrCompute(e,r,t.merge)}return e}));return c.catch(console.error),c}debug(e){const t={pending:"darkorange",resolved:"seagreen",rejected:"crimson"};function r(e,r){"pending"!==r.status?(console.group(`%c${e} (${r.status})`,`color:${t[r.status]}`),console.group("data"),console.log(JSON.stringify(r.data,null,2)),console.groupEnd(),console.groupEnd()):console.log(`%c${e} (${r.status})`,`color:${t[r.status]}`)}r(e,h(this,o,"f").resolution),console.group("layers");for(const e of h(this,a,"f"))r(e.key,e.state.resolution);console.groupEnd()}}o=new WeakMap,a=new WeakMap,i=new WeakMap,c=new WeakMap,l=new WeakMap,u=new WeakMap,n=new WeakSet,d=async function e(t){const r=t.state.resolution;switch(r.status){case"pending":return t.state.promise.then((()=>h(this,n,"m",e).call(this,t)),(()=>h(this,n,"m",e).call(this,t)));case"rejected":throw r.data;case"resolved":return r}};var b,g,w,y,_=function(e,t,r,s){if("a"===r&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?s:"a"===r?s.call(e):s?s.value:t.get(e)};class v{constructor(){b.add(this),g.set(this,new Map)}static parallel(e,t){const r=[],s=[];for(const n of e)try{r.push(t(n))}catch(e){if(!(e instanceof Promise))throw e;s.push(e)}if(s.length>0)throw Promise.allSettled(s);return r}init(e){_(this,g,"f").has(e)||_(this,g,"f").set(e,new m)}get(e,t={}){return!_(this,g,"f").has(e)&&t.loader&&(this.init(e),t.loader().then((t=>this.resolve(e,t))).catch((t=>{const r=t instanceof Error?t:new Error(String(t));this.reject(e,r)}))),_(this,b,"m",w).call(this,e).toPromise({excludeLayers:t.excludeLayers})}use(e,t={}){return!_(this,g,"f").has(e)&&t.loader&&(this.init(e),t.loader().then((t=>this.resolve(e,t))).catch((t=>{const r=t instanceof Error?t:new Error(String(t));this.reject(e,r)}))),_(this,b,"m",w).call(this,e).use({excludeLayers:t.excludeLayers})}subscribe(e,t){return _(this,b,"m",y).call(this,e).subscribe(t)}resolve(e,t,r={}){_(this,g,"f").has(e)||_(this,g,"f").set(e,new m),_(this,b,"m",w).call(this,e).resolve(t,r)}reject(e,t,r={}){_(this,g,"f").has(e)||_(this,g,"f").set(e,new m),_(this,b,"m",w).call(this,e).reject(t,r)}layer(e,t){return _(this,b,"m",y).call(this,e).addLayer(t)}reset(){_(this,g,"f").clear()}entries(){return[..._(this,g,"f").entries()].map((([e,t])=>[e,t]))}async*asyncEntries(){for(const e of _(this,g,"f").keys()){const t=await this.get(e);yield[e,t]}}}function j(e){return"[object Object]"===Object.prototype.toString.call(e)}g=new WeakMap,b=new WeakSet,w=function(e){try{return _(this,b,"m",y).call(this,e)}catch{const t=new m;return t.reject(new Error(`Key "${String(e)}" not found`)),t}},y=function(e){const t=_(this,g,"f").get(e);if(!t)throw new Error(`Key "${String(e)}" not found`);return t};const x="[Lobster Roll]";function E(e){console.warn(x,e)}function k(e){return Promise.reject(S(e))}function S(e){return new Error(`${x} ${e}`)}function $(e){return j(e)&&"string"==typeof e.id&&"string"==typeof e.remoteEntryUrl}function O(e){var t,r,s;return(t=e.current).dependencies??(t.dependencies={}),(r=e.current).flippers??(r.flippers={}),void 0===e.next?e.next=e.current:$(e.next)||(E(`Ignoring invalid data: next version must be a valid version but received "${JSON.stringify(e.next)}"`),e.next=e.current),j(s=e.rollout)&&"number"==typeof s.percentage?e.rollout.percentage<0?e.rollout.percentage=0:e.rollout.percentage>100&&(e.rollout.percentage=100):e.rollout={percentage:0},e}var P,M,T,R,W,C,L,N,B,U=function(e,t,r,s){if("a"===r&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?s:"a"===r?s.call(e):s?s.value:t.get(e)};const I="__LR__thresholds",z="__LR__overrides",D=/^dev:(?<port>\d+)$/,J=/^\d+\.\d+\.\d+/,F=/0\.0\.0-pre-/;function A(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#39;").replace(/"/g,"&quot;")}class V{constructor(e){P.add(this),M.set(this,new v),this.captureException=e.captureException}register(e,t){if("string"!=typeof e)return E(`Failed to register library: name must be a string but received "${e}"`),!1;if(!j(r=t)||!$(r.current))return E(`Failed to register library: manifest must be a valid manifest but received "${JSON.stringify(t)}`),!1;var r;const s=O(t);return U(this,P,"m",C).call(this,e,{manifest:Promise.resolve(s)}),!0}async load(e){return"string"!=typeof e?k(`Failed to load library: name must be a string but received "${e}"`):A(e)!==e?k(`Failed to load library: name must not contain any HTML but received "${e}"`):(await U(this,P,"m",C).call(this,e)).remoteEntry}async getCache(){const e={};for await(const[t,r]of U(this,M,"f").asyncEntries())e[t]=r;return e}async debug(){const e=await this.getCache(),t=Object.entries(e).map((([e,t])=>[e,{activeVersion:t.version.id,currentVersion:t.manifest.current.id,nextVersion:t.manifest.next.id,rollout:t.manifest.rollout.percentage,threshold:t.threshold}]));console.table(Object.fromEntries(t))}use(e){return U(this,M,"f").use(e,{loader:()=>U(this,P,"m",L).call(this,e)})}applyOverrides(){const e=function(e){const t={};for(const r in e){const s=e[r];"string"==typeof s&&(t[A(r)]=A(s))}return t}({...U(this,P,"m",T).call(this),...this.fetchGlobalOverrides()});U(this,P,"m",R).call(this,e);let t={};for(const r in e){const s=e[r];if("clear"===s){delete e[r],U(this,P,"m",R).call(this,e);continue}if("current"===s){t[r]={type:"threshold",value:s},U(this,P,"m",C).call(this,r,{threshold:Promise.resolve(101)});continue}if("next"===s){t[r]={type:"threshold",value:s},U(this,P,"m",C).call(this,r,{threshold:Promise.resolve(0)});continue}const n=s.match(D);if(n){const{port:e}=n.groups;if(!e)continue;const s=this.fetchLocalDevManifest(r,e).then(O);t[r]={type:"dev",value:`dev:${e}`},U(this,P,"m",C).call(this,r,{manifest:s})}else if(J.test(s)){const e=F.test(s)?"preview":"version",n=this.fetchRemoteManifestByVersion(r,s).then(O);t[r]={type:e,value:s},U(this,P,"m",C).call(this,r,{manifest:n})}}return this.displayOverrides(t),{hasOverrides:Object.keys(t).length>0}}freeze(){return{load:this.load.bind(this),register:this.register.bind(this),getCache:this.getCache.bind(this),use:this.use.bind(this)}}}M=new WeakMap,P=new WeakSet,T=function(){try{const e=this.sessionStorage.getItem(z)??"{}",t=JSON.parse(e);if(!j(t))return this.sessionStorage.setItem(z,"{}"),{};for(const e in t)"string"==typeof t[e]||delete t[e];return t}catch{try{this.sessionStorage.setItem(z,"{}")}catch{}return{}}},R=function(e){try{this.sessionStorage.setItem(z,JSON.stringify(e))}catch{}},W=function e(t,r,s=this.localStorage){var n,o;try{const a=s.getItem(I)??"{}",i=JSON.parse(a);if(!j(i))return s.setItem(I,"{}"),U(this,P,"m",e).call(this,t,r,s);for(const e in i){const t=i[e];if(j(t))for(const r in t){const s=t[r];j(o=s)&&"number"==typeof o.value&&"number"==typeof o.expires&&!isNaN(o.value)&&!isNaN(o.expires)&&o.value<=100&&o.value>=1&&!this.thresholdIsExpired(s)||delete i[e][r]}else delete i[e]}return i[t]??(i[t]={}),(n=i[t])[r]??(n[r]=this.createRandomThreshold()),s.setItem(I,JSON.stringify(i)),i[t][r].value}catch{try{s.setItem(I,"{}")}catch{}return s===this.sessionStorage?101:U(this,P,"m",e).call(this,t,r,this.sessionStorage)}},C=function(e,t={}){return U(this,M,"f").get(e,{loader:()=>U(this,P,"m",L).call(this,e,t)})},L=async function(e,t={}){let r,s,n,o;return r=t.manifest?await t.manifest:await U(this,P,"m",N).call(this,e),s=t.threshold?await t.threshold:U(this,P,"m",W).call(this,e,r.current.id),n=t.version?await t.version:s>r.rollout.percentage?r.current:r.next,o=t.remoteEntry?await t.remoteEntry:await U(this,P,"m",B).call(this,e,n.remoteEntryUrl),{manifest:r,threshold:s,version:n,remoteEntry:o}},N=function(e){const t=Math.floor(Date.now()/12e4).toString(36);return this.fetchCurrentRemoteManifest(e).catch((async()=>(await this.captureException(new Error("Failed to fetch manifest.json"),"warning",{name:e}),this.fetchCurrentRemoteManifest(e,t)))).catch((async()=>(await this.captureException(new Error("Failed to fetch manifest.json"),"error",{name:e,param:t}),this.fallbackManifest(e,t)))).then(O)},B=function(e,t){const r=new URL(t),s=t=>async()=>(await this.captureException(new Error("Failed to fetch remoteEntry.js"),(e=>{switch(e){case 1:return"warning";case 2:case 3:return"error";default:return"fatal"}})(t),{name:e,remoteEntryUrl:r.toString()}),r.searchParams.set("retry",String(t)),this.fetchRemoteEntry(e,r.toString()));return this.fetchRemoteEntry(e,r.toString()).catch(s(1)).catch(s(2)).catch(s(3)).then((t=>{return j(s=t)&&"function"==typeof s.get&&"function"==typeof s.init?t:(this.captureException(new Error("Invalid remote entry received"),"fatal",{name:e,remoteEntryUrl:r.toString(),response:t}),k(`Failed to load remote entry for "${e}": remote entry must be a valid WebpackRemoteEntry but received "${JSON.stringify(t)}"`));var s}))};class G extends V{constructor(e){super(e),this.sessionStorage=sessionStorage,this.localStorage=localStorage,this.localhostUrl=e.localhostUrl,this.productionUrl=e.productionUrl}fetchGlobalOverrides(){const e=new URLSearchParams(window.location.search),t={};for(const[r,s]of e)r.endsWith("-version")&&(t[r.replace("-version","")]=s);return t}createRandomThreshold(){return{value:Math.ceil(100*Math.random()),expires:Date.now()+6048e5}}thresholdIsExpired(e){return e.expires<Date.now()}fetchLocalDevManifest(e,t){const r=`${this.localhostUrl}:${t}/versions/dev/manifest.json`;return fetch(r).then((e=>e.json())).then((e=>({current:e})))}fetchRemoteManifestByVersion(e,t){let r=`${this.productionUrl}/${e}/versions/${t}/manifest.json`;return fetch(r).then((e=>e.json())).then((e=>({current:e})))}async fetchCurrentRemoteManifest(e,t){let r=`${this.productionUrl}/${e}/runtime/manifest.json`;return t&&(r+=`?${t}`),fetch(r).then((e=>e.json()))}fetchRemoteEntry(e,t){const r=`__LR__${e}`;return new Promise(((s,n)=>{const o=document.createElement("script");o.src=t,o.async=!0,this.productionUrl!==window.location.origin&&(o.crossOrigin="anonymous"),o.onload=()=>{const e=window[r];s(e)},o.onerror=()=>{document.head.removeChild(o);let r=`Failed to load module "${e}" from "${t}"`;t.startsWith(this.localhostUrl)&&(r+="\n\nDid you forget to start your development server?"),n(new Error(r))},document.head.appendChild(o)}))}fallbackManifest(e,t){return{current:{id:"fallback",remoteEntryUrl:`${this.productionUrl}/${e}/fallback/remoteEntry.js?${t}`,dependencies:{},flippers:{}}}}displayOverrides(e){const t=new URL(window.location.href);for(const[e,r]of t.searchParams)e.endsWith("-version")&&"clear"===r&&t.searchParams.delete(e);window.history.replaceState({},"",t.toString()),0!==Object.keys(e).length&&r.e("lobster-roll-runtime_build_browser-overrides_js").then(r.bind(r,"../lobster-roll-runtime/build/browser-overrides.js")).then((t=>t.displayBrowserOverrides(e)))}}class q extends v{debug(){for(const[e,t]of this.entries())t.debug(e)}freeze(){return Object.freeze({init:this.init.bind(this),get:this.get.bind(this),subscribe:this.subscribe.bind(this),use:this.use.bind(this),resolve:this.resolve.bind(this),reject:this.reject.bind(this),layer:this.layer.bind(this)})}}class H{constructor(e,t,r){this.dependencyStore=e,this.dataBridge=t,this.messageBus=r}async debug(){console.clear(),console.group("%c🦞 lobster-roll debug 🦞","font-weight: bold; font-size: 20px; color: tomato; background: white; padding: 5px 10px; border-radius: 1px;"),console.log('%cRuntime version: "d2d34ee3eac053faa635de556dbaea6fc4dbe921"',"margin-left: 4px; font-weight: bold; color: white; background: crimson; padding: 5px 10px; border-radius: 1px;"),console.log('%cRuntime environment: "production"',"margin-left: 4px; font-weight: bold; color: white; background: goldenrod; padding: 5px 10px; border-radius: 1px;"),console.groupCollapsed("%cDependencies","font-weight: bold; color: white; background: seagreen; padding: 5px 10px; border-radius: 1px;"),await this.dependencyStore.debug(),console.groupEnd(),console.groupCollapsed("%cData Bridge","font-weight: bold; color: white; background: darkorange; padding: 5px 10px; border-radius: 1px;"),await this.dataBridge.debug(),console.groupEnd(),console.groupCollapsed("%cEvents","font-weight: bold; color: white; background: royalblue; padding: 5px 10px; border-radius: 1px;"),await this.messageBus.debug(),console.groupEnd()}freeze(){return this.debug.bind(this)}}const K=/(?<name>[a-zA-Z0-9-]+)-version/;var Y,Z,Q,X,ee,te,re,se,ne,oe=function(e,t,r,s,n){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?n.call(e,r):n?n.value=r:t.set(e,r),r},ae=function(e,t,r,s){if("a"===r&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?s:"a"===r?s.call(e):s?s.value:t.get(e)};let ie=1;class ce{constructor(e){Y.add(this),Z.set(this,new Map),Q.set(this,[]),X.set(this,!1),ee.set(this,void 0),oe(this,ee,e.captureException,"f")}bind(e){if(ae(this,Z,"f").has(e))throw new Error(`Event bus key "${e}" is already bound.`);const t={key:e,processedEvents:[],subscribers:new Set};return ae(this,Z,"f").set(e,t),{emit:e=>ae(this,Y,"m",te).call(this,t,e),subscribe:e=>ae(this,Y,"m",re).call(this,t,e),events:()=>ae(this,Y,"m",se).call(this,t)}}async events(){const e=[];for(const t of ae(this,Z,"f").values()){const r=ae(this,Y,"m",se).call(this,t).then((e=>[t.key,e]));e.push(r)}const t=await Promise.all(e);return Object.fromEntries(t)}async debug(){let e=!1;for(const t of ae(this,Z,"f").values()){e=!0,console.groupCollapsed(t.key);for(const e of t.processedEvents.slice().reverse())console.log(JSON.stringify(e));console.groupEnd()}e||console.log("No events emitted yet.")}reset(){for(const e of ae(this,Z,"f").values())e.processedEvents=[],e.subscribers.clear();oe(this,Q,[],"f"),oe(this,X,!1,"f"),ie=1}freeze(){return Object.freeze({bind:this.bind.bind(this)})}}Z=new WeakMap,Q=new WeakMap,X=new WeakMap,ee=new WeakMap,Y=new WeakSet,te=function(e,t){const r=(e=>Object.freeze({id:ie++,timestamp:Date.now(),data:e}))(t);let s=()=>{};const n=new Promise((e=>{s=e})),o={binding:e,event:r,promise:n,completed:()=>(e.processedEvents.push(r),e.processedEvents.length>100&&e.processedEvents.shift(),o.completed=()=>{},s())};return ae(this,Q,"f").push(o),ae(this,X,"f")||(oe(this,X,!0,"f"),ae(this,Y,"m",ne).call(this)),n},re=function(e,t){return e.subscribers.add(t),()=>e.subscribers.delete(t)},se=function(e){const t=ae(this,Q,"f").filter((t=>t.binding===e)).map((e=>e.promise));return Promise.all(t).then((()=>e.processedEvents.map((e=>e.data))))},ne=function(){for(oe(this,X,!1,"f");ae(this,Q,"f").length>0;){const e=ae(this,Q,"f").shift();if(!e)break;const{binding:t,event:r,completed:s}=e;for(const e of t.subscribers){const s=ie;let n;try{n=e(r.data)}catch(e){const s=e instanceof Error?e:new Error(String(e));ae(this,ee,"f").call(this,s,"error",{event:t.key,data:r.data}),E(`Event bus subscriber for "${t.key}" threw an error: ${e}`)}if(n instanceof Promise){const e=`Event bus subscriber for "${t.key}" is an async function. This should be avoided as it can lead to uncaught errors.`;ae(this,ee,"f").call(this,S(e),"warning",{event:t.key,data:r.data}),E(e)}if(s!==ie){const e=`Event bus subscriber for "${t.key}" emitted an event. This should be avoided as it can lead to an infinite loop.`;ae(this,ee,"f").call(this,S(e),"warning",{event:t.key,data:r.data}),E(e)}}s()}};class de extends Error{constructor(e,t,r={}){super(`[${t}] ${e}`),this.code=t,this.extra=r}}var le,ue,he=function(e,t,r,s){if("a"===r&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?s:"a"===r?s.call(e):s?s.value:t.get(e)};const fe="performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0";class pe{constructor(e){le.set(this,void 0),ue.set(this,[]),function(e,t,r,s,n){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===s?n.call(e,r):n?n.value=r:t.set(e,r)}(this,le,e,"f")}push(e,t,r={}){const{timeout:s=5e3}=r,n=performance.now();let o;const a=new Promise(((t,r)=>{o=setTimeout((()=>{const t=new de(`Data bridge wait for "${e}" timed out after ${s}ms`,"data-bridge-timeout",{name:e});return pe.errorReporter(t),r(t)}),s)})),i=Promise.resolve(t()).catch((t=>{const r=new de(`Data bridge for "${e}" failed: ${t}`,"data-bridge-rejected",{name:e});return pe.errorReporter(r),Promise.reject(r)})).finally((()=>{clearTimeout(o)}));he(this,le,"f").call(this,["<script>",`window.__LR__.dataBridge.init(${JSON.stringify(e)});`,`performance.mark("data-bridge-init-${e}", {}, ${fe});`,"<\/script>"].join(""));const c=Promise.race([a,i]).then((t=>he(this,le,"f").call(this,["<script>",`window.__LR__.dataBridge.resolve(${JSON.stringify(e)}, ${JSON.stringify(t)});`,`performance.mark("data-bridge-complete-${e}", {}, ${fe} + ${performance.now()-n});`,`performance.measure("data-bridge-time-${e}", "data-bridge-init-${e}", "data-bridge-complete-${e}");`,"<\/script>"].join(""))),(t=>he(this,le,"f").call(this,["<script>",`window.__LR__.dataBridge.reject(${JSON.stringify(e)}, new Error(${JSON.stringify(t.message)}));`,`performance.mark("data-bridge-complete-${e}", {}, ${fe} + ${performance.now()-n});`,`performance.measure("data-bridge-time-${e}", "data-bridge-init-${e}", "data-bridge-complete-${e}");`,"<\/script>"].join(""))));he(this,ue,"f").push(c)}allSettled(){return Promise.allSettled(he(this,ue,"f"))}}le=new WeakMap,ue=new WeakMap,pe.errorReporter=()=>{};const me=atob("aHR0cHM6Ly9sb2NhbGRldi5pbnRlcm5hbC5kaWdpdGFsb2NlYW4uY29t"),be=new class{constructor(e){this.dependencyStore=new G(e),this.dataBridge=new q,this.messageBus=new ce({captureException:e.captureException}),this.debugger=new H(this.dependencyStore,this.dataBridge,this.messageBus)}applyOverrides(){return this.dependencyStore.applyOverrides()}freeze(e=(e=>{const t=new URL(e),{hostname:r,searchParams:s}=t;for(const e of s.keys())if(K.test(e))return"development";return r.startsWith("localhost")||r.startsWith("localdev.")?"development":r.startsWith("cloud.s2r1.")||r.startsWith("devcloud-amd.")?"staging":r.startsWith("cloud.")||r.startsWith("devcloud.amd.")?"production":"unknown"})(window.location.href)){return Object.freeze({environment:e,dependencies:this.dependencyStore.freeze(),dataBridge:this.dataBridge.freeze(),messageBus:this.messageBus.freeze(),debug:this.debugger.freeze()})}}({localhostUrl:me,productionUrl:"https://ui-cdn.digitalocean-ui.com/federation",async captureException(e,t,s={}){await r.e("src_client_sentry_bootstrap_ts").then(r.bind(r,"./src/client/sentry.bootstrap.ts")).then((r=>{r.captureException(e,{level:t,extra:s,contexts:{microfrontend:{dsn:"https://cb89305d5f41879d4bd42578af7aa2fe@o1109393.ingest.us.sentry.io/4508082240684032",release:"d2d34ee3eac053faa635de556dbaea6fc4dbe921"}}})}))}}),{hasOverrides:ge}=be.applyOverrides(),we=ge?"development":void 0;window.__LR__=be.freeze(we)}},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}};return n[e](r,r.exports,a),r.exports}a.m=n,a.c=o,a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((t,r)=>(a.f[r](e,t),t)),[])),a.u=e=>"assets/"+e+"."+{"vendors-node_modules_sentry_react_build_esm_index_js":"209cfa4786a99ce31f065882ae842bffc227213cede4aaeb414ff52f05918f7a","vendors-node_modules_react-dom_index_js":"1eafa809654b724f4eb088a70465bb37a5e3955391e2acae8b97f1a2748dcbed","vendors-node_modules_history_index_js":"16996fb4d95792f09ea6635f89147f21120995539aa89013c04b274e4362e0d5","node_modules_react-router-dom_index_js":"b9ff97789f98c900e264709b6833f9a6a8668fe52ba9eddb39b08d13af63e5ac","vendors-node_modules_react-router_index_js":"eb3fd65213ffc2034496e9cf65393c03b88cf49280d750088b675c6c8f8c8edd","node_modules_react_jsx-runtime_js":"79b28fcaf33574195aaf7646a20997311cb483adfb05e37fb186027237d0622e","node_modules_react_index_js-_8af10":"c786dbf1743366f584640ece39983fafafa85bbd4094e71a0297c982166f654a",src_client_sentry_bootstrap_ts:"37bdda2dfe7ce6be6f042083283b354247d0d3cc86094d867cc0630fcd3439a3","lobster-roll-runtime_build_browser-overrides_js":"47492ced31c09d97d445270ecc3a474c87dd366bcbd354c2d187718a57102261","node_modules_react_index_js-_8af11":"574f875065582e9cd1916c296921fd7f02c5b3eef76e9a9113c8893600f69d96"}[e]+".js",a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="@do/lobster-roll-host:",a.l=(r,s,n,o)=>{if(e[r])e[r].push(s);else{var i,c;if(void 0!==n)for(var d=document.getElementsByTagName("script"),l=0;l<d.length;l++){var u=d[l];if(u.getAttribute("src")==r||u.getAttribute("data-webpack")==t+n){i=u;break}}i||(c=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.setAttribute("data-webpack",t+n),i.src=r,0!==i.src.indexOf(window.location.origin+"/")&&(i.crossOrigin="anonymous")),e[r]=[s];var h=(t,s)=>{i.onerror=i.onload=null,clearTimeout(f);var n=e[r];if(delete e[r],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach((e=>e(s))),t)return t(s)},f=setTimeout(h.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=h.bind(null,i.onerror),i.onload=h.bind(null,i.onload),c&&document.head.appendChild(i)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r={},s={},a.f.remotes=(e,t)=>{a.o(r,e)&&r[e].forEach((e=>{var r=a.R;r||(r=[]);var n=s[e];if(!(r.indexOf(n)>=0)){if(r.push(n),n.p)return t.push(n.p);var o=t=>{t||(t=new Error("Container missing")),"string"==typeof t.message&&(t.message+='\nwhile loading "'+n[1]+'" from '+n[2]),a.m[e]=()=>{throw t},n.p=0},i=(e,r,s,a,i,c)=>{try{var d=e(r,s);if(!d||!d.then)return i(d,a,c);var l=d.then((e=>i(e,a)),o);if(!c)return l;t.push(n.p=l)}catch(e){o(e)}},c=(e,t,s)=>i(t.get,n[1],r,0,d,s),d=t=>{n.p=1,a.m[e]=e=>{e.exports=t()}};i(a,n[2],0,0,((e,t,r)=>e?i(a.I,n[0],0,e,c,r):o()),1)}}))},(()=>{a.S={};var e={},t={};a.I=(r,s)=>{s||(s=[]);var n=t[r];if(n||(n=t[r]={}),!(s.indexOf(n)>=0)){if(s.push(n),e[r])return e[r];a.o(a.S,r)||(a.S[r]={});var o=a.S[r],i="@do/lobster-roll-host",c=(e,t,r,s)=>{var n=o[e]=o[e]||{},a=n[t];(!a||!a.loaded&&(!s!=!a.eager?s:i>a.from))&&(n[t]={get:r,from:i,eager:!!s})},d=[];return"default"===r&&(c("@sentry/react","0",(()=>Promise.all([a.e("vendors-node_modules_sentry_react_build_esm_index_js"),a.e("webpack_sharing_consume_default_react_react-_67f7")]).then((()=>()=>a("./node_modules/@sentry/react/build/esm/index.js"))))),c("react-dom","17.0.2",(()=>Promise.all([a.e("vendors-node_modules_react-dom_index_js"),a.e("webpack_sharing_consume_default_react_react-_d91f")]).then((()=>()=>a("./node_modules/react-dom/index.js"))))),c("react-router-dom","6.2.2",(()=>Promise.all([a.e("vendors-node_modules_history_index_js"),a.e("webpack_sharing_consume_default_react_react-_fd84"),a.e("node_modules_react-router-dom_index_js")]).then((()=>()=>a("./node_modules/react-router-dom/index.js"))))),c("react-router","6.2.2",(()=>Promise.all([a.e("vendors-node_modules_react-router_index_js"),a.e("vendors-node_modules_history_index_js"),a.e("webpack_sharing_consume_default_react_react-_fd84")]).then((()=>()=>a("./node_modules/react-router/index.js"))))),c("react/jsx-runtime","17.0.2",(()=>a.e("node_modules_react_jsx-runtime_js").then((()=>()=>a("./node_modules/react/jsx-runtime.js"))))),c("react","17.0.2",(()=>a.e("node_modules_react_index_js-_8af10").then((()=>()=>a("./node_modules/react/index.js")))))),e[r]=d.length?Promise.all(d).then((()=>e[r]=1)):1}}})(),a.p="https://ui-cdn.digitalocean-ui.com/federation/lobster-roll-host/",(()=>{var e=e=>{var t=e=>e.split(".").map((e=>+e==e?+e:e)),r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),s=r[1]?t(r[1]):[];return r[2]&&(s.length++,s.push.apply(s,t(r[2]))),r[3]&&(s.push([]),s.push.apply(s,t(r[3]))),s},t=e=>{var r=e[0],s="";if(1===e.length)return"*";if(r+.5){s+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,o=1;o<e.length;o++)n--,s+="u"==(typeof(i=e[o]))[0]?"-":(n>0?".":"")+(n=2,i);return s}var a=[];for(o=1;o<e.length;o++){var i=e[o];a.push(0===i?"not("+c()+")":1===i?"("+c()+" || "+c()+")":2===i?a.pop()+" "+a.pop():t(i))}return c();function c(){return a.pop().replace(/^\((.+)\)$/,"$1")}},r=(t,s)=>{if(0 in t){s=e(s);var n=t[0],o=n<0;o&&(n=-n-1);for(var a=0,i=1,c=!0;;i++,a++){var d,l,u=i<t.length?(typeof t[i])[0]:"";if(a>=s.length||"o"==(l=(typeof(d=s[a]))[0]))return!c||("u"==u?i>n&&!o:""==u!=o);if("u"==l){if(!c||"u"!=u)return!1}else if(c)if(u==l)if(i<=n){if(d!=t[i])return!1}else{if(o?d>t[i]:d<t[i])return!1;d!=t[i]&&(c=!1)}else if("s"!=u&&"n"!=u){if(o||i<=n)return!1;c=!1,i--}else{if(i<=n||l<u!=o)return!1;c=!1}else"s"!=u&&"n"!=u&&(c=!1,i--)}}var h=[],f=h.pop.bind(h);for(a=1;a<t.length;a++){var p=t[a];h.push(1==p?f()|f():2==p?f()&f():p?r(p,s):!f())}return!!f()},s=(e,t)=>e&&a.o(e,t),n=e=>(e.loaded=1,e.get()),o=(t,r,s)=>{var n=s?(e=>Object.keys(e).reduce(((t,r)=>(e[r].eager&&(t[r]=e[r]),t)),{}))(t[r]):t[r];return Object.keys(n).reduce(((t,r)=>!t||!n[t].loaded&&((t,r)=>{t=e(t),r=e(r);for(var s=0;;){if(s>=t.length)return s<r.length&&"u"!=(typeof r[s])[0];var n=t[s],o=(typeof n)[0];if(s>=r.length)return"u"==o;var a=r[s],i=(typeof a)[0];if(o!=i)return"o"==o&&"n"==i||"s"==i||"u"==o;if("o"!=o&&"u"!=o&&n!=a)return n<a;s++}})(t,r)?r:t),0)},i=e=>function(t,r,s,n,o){var i=a.I(t);return i&&i.then&&!s?i.then(e.bind(e,t,a.S[t],r,!1,n,o)):e(t,a.S[t],r,s,n,o)},c=(e,t,r)=>r?r():((e,t)=>(e=>{throw new Error(e)})("Shared module "+t+" doesn't exist in shared scope "+e))(e,t),d=i(((e,t,r,a,i)=>{if(!s(t,r))return c(e,r,i);var d=o(t,r,a);return n(t[r][d])})),l=i(((e,a,i,d,l,u)=>{if(!s(a,i))return c(e,i,u);var h,f=o(a,i,d);return r(l,f)||(h=((e,r,s,n)=>"Unsatisfied version "+s+" from "+(s&&e[r][s].from)+" of shared singleton module "+r+" (required "+t(n)+")")(a,i,f,l),"undefined"!=typeof console&&console.warn&&console.warn(h)),n(a[i][f])})),u={},h={"webpack/sharing/consume/default/react/react?67f7":()=>l("default","react",!1,[,[1,19],[1,18],[1,17],[1,16,14,0],1,1,1],(()=>a.e("node_modules_react_index_js-_8af10").then((()=>()=>a("./node_modules/react/index.js"))))),"webpack/sharing/consume/default/react/react?d91f":()=>l("default","react",!1,[4,17,0,2],(()=>a.e("node_modules_react_index_js-_8af11").then((()=>()=>a("./node_modules/react/index.js"))))),"webpack/sharing/consume/default/react/react?fd84":()=>l("default","react",!1,[0,16,8],(()=>a.e("node_modules_react_index_js-_8af10").then((()=>()=>a("./node_modules/react/index.js"))))),"webpack/sharing/consume/default/react-router/react-router":()=>l("default","react-router",!1,[4,6,2,2],(()=>a.e("vendors-node_modules_react-router_index_js").then((()=>()=>a("./node_modules/react-router/index.js"))))),"webpack/sharing/consume/default/react/react?9896":()=>d("default","react",!1,(()=>a.e("node_modules_react_index_js-_8af11").then((()=>()=>a("./node_modules/react/index.js"))))),"webpack/sharing/consume/default/@sentry/react/@sentry/react":()=>d("default","@sentry/react",!1,(()=>Promise.all([a.e("vendors-node_modules_sentry_react_build_esm_index_js"),a.e("webpack_sharing_consume_default_react_react-_67f7")]).then((()=>()=>a("./node_modules/@sentry/react/build/esm/index.js")))))},f={"webpack_sharing_consume_default_react_react-_67f7":["webpack/sharing/consume/default/react/react?67f7"],"webpack_sharing_consume_default_react_react-_d91f":["webpack/sharing/consume/default/react/react?d91f"],"webpack_sharing_consume_default_react_react-_fd84":["webpack/sharing/consume/default/react/react?fd84"],"node_modules_react-router-dom_index_js":["webpack/sharing/consume/default/react-router/react-router"],"node_modules_react_jsx-runtime_js":["webpack/sharing/consume/default/react/react?9896"],src_client_sentry_bootstrap_ts:["webpack/sharing/consume/default/@sentry/react/@sentry/react"]},p={};a.f.consumes=(e,t)=>{a.o(f,e)&&f[e].forEach((e=>{if(a.o(u,e))return t.push(u[e]);if(!p[e]){var r=t=>{u[e]=0,a.m[e]=r=>{delete a.c[e],r.exports=t()}};p[e]=!0;var s=t=>{delete u[e],a.m[e]=r=>{throw delete a.c[e],t}};try{var n=h[e]();n.then?t.push(u[e]=n.then(r).catch(s)):r(n)}catch(e){s(e)}}}))}})(),(()=>{var e={runtime:0};a.f.j=(t,r)=>{var s=a.o(e,t)?e[t]:void 0;if(0!==s)if(s)r.push(s[2]);else if(/^webpack_sharing_consume_default_react_react\-_(67f7|d91f|fd84)$/.test(t))e[t]=0;else{var n=new Promise(((r,n)=>s=e[t]=[r,n]));r.push(s[2]=n);var o=a.p+a.u(t),i=new Error;a.l(o,(r=>{if(a.o(e,t)&&(0!==(s=e[t])&&(e[t]=void 0),s)){var n=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;i.message="Loading chunk "+t+" failed.\n("+n+": "+o+")",i.name="ChunkLoadError",i.type=n,i.request=o,s[1](i)}}),"chunk-"+t,t)}};var t=(t,r)=>{var s,n,[o,i,c]=r,d=0;if(o.some((t=>0!==e[t]))){for(s in i)a.o(i,s)&&(a.m[s]=i[s]);c&&c(a)}for(t&&t(r);d<o.length;d++)n=o[d],a.o(e,n)&&e[n]&&e[n][0](),e[n]=0},r=self.webpackChunk_do_lobster_roll_host=self.webpackChunk_do_lobster_roll_host||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),a("./src/client/runtime.ts")})();</script><script crossorigin="anonymous" src="https://ui-cdn.digitalocean-ui.com/federation/lobster-roll-host/assets/sentry.673b95ac984cb71c89eabf90df057f49eee898a8d585abf28ef86384d00c26fc.js"></script><script src="https://assets.digitalocean.com/prism/prism.js" async></script>
<script>window.__LR__.dataBridge.init("user-context");performance.mark("data-bridge-init-user-context", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0);</script>

<script>window.__LR__.dataBridge.init("error-context");performance.mark("data-bridge-init-error-context", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0);</script>

<script>window.__LR__.dataBridge.init("flippers");performance.mark("data-bridge-init-flippers", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0);</script>

<script>window.__LR__.dataBridge.init("flippersV2");performance.mark("data-bridge-init-flippersV2", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0);</script>

<script>window.__LR__.dataBridge.init("permissions");performance.mark("data-bridge-init-permissions", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0);</script>

<script>window.__LR__.dependencies.register("websocket", {"current":{"id":"2026.6.18-2863e0a2cea783089ab6d9cd7ffac6283b336c90","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/websocket/versions/2026.6.18-2863e0a2cea783089ab6d9cd7ffac6283b336c90/remoteEntry.js","dependencies":{"graphql-client":{}},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("ui-copilot", {"current":{"id":"2026.8.7-f565ddb50cff9d012669e5f4865000a535e97883","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/ui-copilot/versions/2026.8.7-f565ddb50cff9d012669e5f4865000a535e97883/remoteEntry.js","dependencies":{"current-user":{},"error-boundary":{},"flippers":{},"graphql-client":{},"message-bus":{},"walrus":{}},"flippers":{"ui_copilot_entry_button":{},"ui_copilot_post_migration":{}}}});</script>

<script>window.__LR__.dependencies.register("track-exp", {"current":{"id":"2026.7.7-cf66015a4f40edc5b417479a2a92aa3720b5c56f","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/track-exp/versions/2026.7.7-cf66015a4f40edc5b417479a2a92aa3720b5c56f/remoteEntry.js","dependencies":{"current-user":{},"flippers":{},"message-bus":{}},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("session-manager", {"current":{"id":"2026.6.19-bff17069c03d22599ed3a11c61c08863b5c29072","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/session-manager/versions/2026.6.19-bff17069c03d22599ed3a11c61c08863b5c29072/remoteEntry.js","dependencies":{"current-user":{}},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("flippers", {"current":{"id":"2026.6.29-6cbd3a3d3317d997fa1e89fcc9d24fc66747423f","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/flippers/versions/2026.6.29-6cbd3a3d3317d997fa1e89fcc9d24fc66747423f/remoteEntry.js","dependencies":{},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("seashell", {"current":{"id":"2026.8.5-1f280546ce9be91144d8e22ba1249866eac6acc0","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/seashell/versions/2026.8.5-1f280546ce9be91144d8e22ba1249866eac6acc0/remoteEntry.js","dependencies":{"current-user":{},"error-boundary":{},"flippers":{},"graphql-client":{},"message-bus":{},"navigation":{},"permissions":{},"session-manager":{},"track-exp":{},"ui-copilot":{},"walrus":{},"websocket":{}},"flippers":{"amd_no_paywall":{},"read_only_mode":{},"managed_nfs_global_release_ui":{},"ui_watchdeck":{},"ui_total_security":{},"bare_metal_gpu_ui":{},"spaces_ui_cold_tier":{},"ui_observability":{},"genai_intelligent_inference":{},"genai_model_studio":{},"genai_si_observability":{},"questionnaire_service_dual_read_enabled":{},"inference_hub_show_model_services_tab":{},"inference_hub_show_explore_models_tab":{},"inference_hub_show_model_finetuning_tab":{},"inference_hub_show_batch_inference":{},"ui_vectordb":{},"ui_kbaas":{},"insights_v2_private_preview":{},"retheme_toggle":{},"retheme_toggle_dev":{},"show_openharness_app":{},"feedback_system_show_left_nav":{},"feedback_system_show_evaluations":{},"feedback_system_show_simulation":{},"show_signals_on_left_nav":{},"genai_tools_catalog":{},"ui-microdroplets-v2":{}}}});</script>

<script>window.__LR__.dependencies.register("permissions", {"current":{"id":"2026.7.31-2f10e4af603223866a97536c7e405788fa12d9a1","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/permissions/versions/2026.7.31-2f10e4af603223866a97536c7e405788fa12d9a1/remoteEntry.js","dependencies":{"current-context-urn":{}},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("current-user", {"current":{"id":"2026.8.4-549234d1d5f7f0e84476ed8399cc808ab81dd378","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/current-user/versions/2026.8.4-549234d1d5f7f0e84476ed8399cc808ab81dd378/remoteEntry.js","dependencies":{},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("navigation", {"current":{"id":"2026.7.30-73183068a2001d02c19b03136b4b2a45241eae9f","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/navigation/versions/2026.7.30-73183068a2001d02c19b03136b4b2a45241eae9f/remoteEntry.js","dependencies":{"current-user":{},"permissions":{}},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("current-context-urn", {"current":{"id":"2026.6.18-2863e0a2cea783089ab6d9cd7ffac6283b336c90","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/current-context-urn/versions/2026.6.18-2863e0a2cea783089ab6d9cd7ffac6283b336c90/remoteEntry.js","dependencies":{},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("graphql-client", {"current":{"id":"2026.7.7-472bb80ec552dddbd99f0e3ab5fb9b0d64e8923f","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/graphql-client/versions/2026.7.7-472bb80ec552dddbd99f0e3ab5fb9b0d64e8923f/remoteEntry.js","dependencies":{"current-context-urn":{},"message-bus":{}},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("walrus", {"current":{"id":"2026.8.7-4174db8d4e160dce13b764abe0db60ce08cd6073","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/walrus/versions/2026.8.7-4174db8d4e160dce13b764abe0db60ce08cd6073/remoteEntry.js","dependencies":{},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("message-bus", {"current":{"id":"2026.7.27-0077d3cb9ad7dbeff521b825e41721bb2a046c92","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/message-bus/versions/2026.7.27-0077d3cb9ad7dbeff521b825e41721bb2a046c92/remoteEntry.js","dependencies":{},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("error-boundary", {"current":{"id":"2026.6.18-2863e0a2cea783089ab6d9cd7ffac6283b336c90","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/error-boundary/versions/2026.6.18-2863e0a2cea783089ab6d9cd7ffac6283b336c90/remoteEntry.js","dependencies":{"message-bus":{},"walrus":{}},"flippers":{}}});</script>

<script>window.__LR__.dependencies.register("registration-next", {"current":{"id":"2026.7.31-4b130651f331a89d8265c94fa88e59e869d30d7a","remoteEntryUrl":"https://ui-cdn.digitalocean-ui.com/federation/registration-next/versions/2026.7.31-4b130651f331a89d8265c94fa88e59e869d30d7a/remoteEntry.js","dependencies":{"error-boundary":{},"graphql-client":{},"message-bus":{},"navigation":{},"seashell":{},"session-manager":{},"walrus":{}},"flippers":{}}});</script>
</head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script async crossorigin="anonymous" src="https://ui-cdn.digitalocean-ui.com/federation/lobster-roll-host/assets/main.016a3d02d9b27462e972dc9d00664fdec9f3953040b60eb0863eee1a60636a52.js"></script>
<script>window.__LR__.dataBridge.resolve("user-context", {"data":{"status":"unauthenticated"}});performance.mark("data-bridge-complete-user-context", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0 + 0.478271484375);performance.measure("data-bridge-time-user-context", "data-bridge-init-user-context", "data-bridge-complete-user-context");</script>

<script>window.__LR__.dataBridge.resolve("error-context", {"meta":{"errorCodes":{"ErrorBoundary":"error-boundary"},"reportUrl":{"path":"/client-api/error-reports/:applicationName/:errorCode","keys":{"applicationName":":applicationName","errorCode":":errorCode"}}}});performance.mark("data-bridge-complete-error-context", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0 + 0.45078277587890625);performance.measure("data-bridge-time-error-context", "data-bridge-init-error-context", "data-bridge-complete-error-context");</script>

<script>window.__LR__.dataBridge.resolve("flippers", {"data":{"ui_copilot_entry_button":false,"ui_copilot_post_migration":false,"amd_no_paywall":false,"read_only_mode":false,"managed_nfs_global_release_ui":false,"ui_watchdeck":false,"ui_total_security":false,"bare_metal_gpu_ui":false,"spaces_ui_cold_tier":false,"ui_observability":false,"genai_intelligent_inference":false,"genai_model_studio":false,"genai_si_observability":false,"questionnaire_service_dual_read_enabled":false,"inference_hub_show_model_services_tab":false,"inference_hub_show_explore_models_tab":false,"inference_hub_show_model_finetuning_tab":false,"inference_hub_show_batch_inference":false,"ui_vectordb":false,"ui_kbaas":false,"insights_v2_private_preview":false,"retheme_toggle":false,"retheme_toggle_dev":false,"show_openharness_app":false,"feedback_system_show_left_nav":false,"feedback_system_show_evaluations":false,"feedback_system_show_simulation":false,"show_signals_on_left_nav":false,"genai_tools_catalog":false,"ui-microdroplets-v2":false},"meta":{"fetchTemplate":{"path":"/client-api/flippers/:flipperName","key":":flipperName"}}});performance.mark("data-bridge-complete-flippers", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0 + 0.624267578125);performance.measure("data-bridge-time-flippers", "data-bridge-init-flippers", "data-bridge-complete-flippers");</script>

<script>window.__LR__.dataBridge.resolve("flippersV2", {"data":{"urn":{}},"meta":{"serverFlippers":["ui_copilot_entry_button","ui_copilot_post_migration","amd_no_paywall","read_only_mode","managed_nfs_global_release_ui","ui_watchdeck","ui_total_security","bare_metal_gpu_ui","spaces_ui_cold_tier","ui_observability","genai_intelligent_inference","genai_model_studio","genai_si_observability","questionnaire_service_dual_read_enabled","inference_hub_show_model_services_tab","inference_hub_show_explore_models_tab","inference_hub_show_model_finetuning_tab","inference_hub_show_batch_inference","ui_vectordb","ui_kbaas","insights_v2_private_preview","retheme_toggle","retheme_toggle_dev","show_openharness_app","feedback_system_show_left_nav","feedback_system_show_evaluations","feedback_system_show_simulation","show_signals_on_left_nav","genai_tools_catalog","ui-microdroplets-v2"],"fetchTemplate":{"path":"/client-api/flippers/:flipperName","key":":flipperName"},"fetchAllTemplate":{"path":"/client-api/applications/:appName/flippers","key":":appName"}}});performance.mark("data-bridge-complete-flippersV2", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0 + 0.5789108276367188);performance.measure("data-bridge-time-flippersV2", "data-bridge-init-flippersV2", "data-bridge-complete-flippersV2");</script>

<script>window.__LR__.dataBridge.resolve("permissions", {"data":{"urn":{}},"meta":{"fetchAllTemplate":{"path":"/client-api/permissions"}}});performance.mark("data-bridge-complete-permissions", {}, performance.getEntriesByType('navigation').map(e => e.responseStart)[0] || 0 + 0.5981826782226562);performance.measure("data-bridge-time-permissions", "data-bridge-init-permissions", "data-bridge-complete-permissions");</script>
<script>window.dataLayer = [{ marketoId: "production" }];
      (function (w, d, s, l, i) {
        w[l] = w[l] || [];
        w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" });
        var f = d.getElementsByTagName(s)[0],
          j = d.createElement(s),
          dl = l != "dataLayer" ? "&l=" + l : "";
        j.async = true;
        j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
        f.parentNode.insertBefore(j, f);
      })(window, document, "script", "dataLayer", "GTM-KHWBBT");</script></body></html>