diff --git a/.output/nitro.json b/.output/nitro.json index f8c05e567bd093d867de6bf1ea317217980890a9..3e3ce8de43e41a650b666dd6f13b9cd54dcb2349 100644 --- a/.output/nitro.json +++ b/.output/nitro.json @@ -1,5 +1,5 @@ { - "date": "2025-03-10T07:50:29.655Z", + "date": "2025-03-12T06:02:50.534Z", "preset": "node-server", "framework": { "name": "nitro", diff --git a/.output/public/assets/@agoose77-mGnNv_bd.js b/.output/public/assets/@agoose77-mGnNv_bd.js new file mode 100644 index 0000000000000000000000000000000000000000..7b291f6a67c364e945b0b497c6a40bc3edea8b78 --- /dev/null +++ b/.output/public/assets/@agoose77-mGnNv_bd.js @@ -0,0 +1 @@ +import{m as e}from"./mermaid-B98QzgAP.js";import"./dayjs-DOPU4UI6.js";import"./@braintree-DgpeZQRe.js";import"./d3-transition-swcnLnsT.js";import"./d3-zoom-D4Vc87xO.js";import"./dompurify-B5jhUdWW.js";import"./dagre-d3-es-FtH4B9px.js";function t(t,r){e.initialize(Object.assign({securityLevel:"loose"},r));let i=t.renderer.rules.fence;t.renderer.rules.fence=function(t,r,n,m,s){let d=t[r],o=d.info.trim(),a=o?function(e){return e.split(/\s+/g)[0]}(o):"";if(-1===["mermaid","{mermaid}"].indexOf(a))return void 0!==i?i(t,r,n,m,s):"";let l="",c=[];const u=document.createElement("div");document.body.appendChild(u);try{const t="mermaid-container";e.mermaidAPI.render(t,d.content,(e=>{let r=document.getElementById(t);null!==r&&c.push(["style",`max-width:${r.style.maxWidth};max-height:${r.style.maxHeight}`]),l=e}),u)}catch(p){return`
${p}
`}finally{u.remove()}return c.push(["src",`data:image/svg+xml,${encodeURIComponent(l)}`]),``}}export{t as m}; diff --git a/.output/public/assets/@wdns-P0uM2sk1.js b/.output/public/assets/@wdns-P0uM2sk1.js new file mode 100644 index 0000000000000000000000000000000000000000..9bcddf059a4d74911bbe942c183e12f89c060984 --- /dev/null +++ b/.output/public/assets/@wdns-P0uM2sk1.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./highlight.js-Ds8M-WS2.js","./@babel-D5ZMb8W9.js","./core-js-pure-ZQ_YVJtv.js","./prismjs-BGP89_QJ.js"])))=>i.map(i=>d[i]); +import{W as a}from"./ua-parser-js-9pz7LJLQ.js";import{l as n,m as l,p as t,i as o,a as i,q as s,f as e,u as h,v as c,w as r,x as g,o as b,y as u,z as v,A as j,B as p,C as d,D as m,E as k,F as y,G as f,H as w,I as x,J as _}from"./@vue-DsZlmJIP.js";const q={},z=function(a,n,l){let t=Promise.resolve();if(n&&n.length>0){const a=document.getElementsByTagName("link"),o=document.querySelector("meta[property=csp-nonce]"),i=(null==o?void 0:o.nonce)||(null==o?void 0:o.getAttribute("nonce"));t=Promise.allSettled(n.map((n=>{if(n=function(a,n){return new URL(a,n).href}(n,l),n in q)return;q[n]=!0;const t=n.endsWith(".css"),o=t?'[rel="stylesheet"]':"";if(!!l)for(let l=a.length-1;l>=0;l--){const o=a[l];if(o.href===n&&(!t||"stylesheet"===o.rel))return}else if(document.querySelector(`link[href="${n}"]${o}`))return;const s=document.createElement("link");return s.rel=t?"stylesheet":"modulepreload",t||(s.as="script"),s.crossOrigin="",s.href=n,i&&s.setAttribute("nonce",i),document.head.appendChild(s),t?new Promise(((a,l)=>{s.addEventListener("load",a),s.addEventListener("error",(()=>l(new Error(`Unable to preload CSS for ${n}`))))})):void 0})))}function o(a){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=a,window.dispatchEvent(n),!n.defaultPrevented)throw a}return t.then((n=>{for(const a of n||[])"rejected"===a.status&&o(a.reason);return a().catch(o)}))},C="v-code-block";function T(a){return""===a||"prism"===a?"default":a}function $(a){return a?"highlightjs":"prism"}const S=a=>{const{str:n,unit:l="px"}=a;if(null!=n&&""!==n&&void 0!==n)return+n?`${Number(n)}${l}`:String(n)},B=[j("path",{d:"M224 0c-35.3 0-64 28.7-64 64V288c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H224zM64 160c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H288c35.3 0 64-28.7 64-64V384H288v64H64V224h64V160H64z"},null,-1)],D=[j("path",{d:"M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7 425.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"},null,-1)],F=[j("path",{d:"M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z"},null,-1)],E=n({__name:"StatusIcons",props:{icon:{type:String,required:!0}},setup:a=>(n,l)=>"copy"===a.icon?(u(),c("svg",k({key:0},n.$attrs,{viewBox:"0 0 512 512",xmlns:"http://www.w3.org/2000/svg"}),B,16)):"success"===a.icon?(u(),c("svg",k({key:1},n.$attrs,{viewBox:"0 0 512 512",xmlns:"http://www.w3.org/2000/svg"}),D,16)):"failed"===a.icon?(u(),c("svg",k({key:2},n.$attrs,{viewBox:"0 0 320 512",xmlns:"http://www.w3.org/2000/svg"}),F,16)):v("",!0)});function A(a){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}const M={class:"v-code-block--button-copy"},N={class:"v-code-block--button-run"},W={class:"v-code-block--code"},P=["textContent"],L=["innerHTML"],H=(a=>{const n=a.__vccOpts||a;for(const[l,t]of[["__scopeId","data-v-51ec5829"]])n[l]=t;return n})(n({__name:"VCodeBlock",props:l({browserWindow:{type:Boolean},cssPath:{},code:{},codeBlockRadius:{},copyButton:{type:Boolean},copyIcons:{type:Boolean},copyTab:{type:Boolean},copyFailedText:{},copyText:{},copySuccessText:{},floatingTabs:{type:Boolean},globalOptions:{type:Boolean},height:{},highlightjs:{type:Boolean},indent:{},label:{},lang:{},languages:{},maxHeight:{},persistentCopyButton:{type:Boolean},prismjs:{type:Boolean},prismPlugin:{type:Boolean},runTab:{type:Boolean},runText:{},tabGap:{},tabs:{type:Boolean},theme:{type:[String,Boolean]}},{browserWindow:!1,cssPath:void 0,code:"",codeBlockRadius:"0.5rem",copyButton:!0,copyIcons:!0,copyTab:!0,copyFailedText:"Copy failed!",copyText:"Copy Code",copySuccessText:"Copied!",floatingTabs:!0,height:"auto",highlightjs:!1,indent:2,label:"",lang:"javascript",maxHeight:"auto",persistentCopyButton:!1,prismjs:!1,prismPlugin:!1,runTab:!1,runText:"Run",tabGap:"0.25rem",tabs:!1,theme:"neon-bunny"}),emits:["run","update:copy-status"],setup(n,{emit:l}){const q=l,B=t(),D=o(V,{}),F=n,H=i({...F,...D});let I,R;const O=i(null),G=i("copy"),U=i(""),J=i(!1),Y=i(!1),K=i(!1),Q=i("https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.8.0/build/styles"),X=i("https://cdn.jsdelivr.net/gh/PrismJS/prism@1.29.0/themes"),Z=i("https://cdn.jsdelivr.net/gh/PrismJS/prism-themes@1.9.0/themes"),aa=i(""),na=i(""),la=i(""),{copyButton:ta,copyIcons:oa,copyTab:ia,label:sa,runTab:ea,tabs:ha}=s(H.value),ca=e((()=>{let a="";return H.value.highlightjs&&(a=aa.value),H.value.prismjs&&H.value.prismPlugin&&(a=O.value),a})),ra=e((()=>(a=>{const{isMobile:n,isPrism:l}=a;return{[`${C}`]:!0,[`${C}-mb-5`]:!0,[`${C}--mobile`]:h(n),[`${C}--prismjs`]:h(l),[`${C}--highlightjs`]:!h(l)}})({isMobile:K,isPrism:H.value.prismjs}))),ga=e((()=>(a=>{const{copyStatus:n,isMobile:l,persistentCopyButton:t}=a;return{[`${C}--code-copy-button`]:!0,[`${C}--code-copy-button-mobile`]:h(l),[`${C}--code-copy-button-persist`]:h(t),[`${C}--code-copy-button-status-${h(n)}`]:!0}})({copyStatus:G,isMobile:K,persistentCopyButton:H.value.persistentCopyButton}))),ba=e((()=>(a=>{const{copyStatus:n,highlightjs:l,useTheme:t}=a,o=$(h(l)),i=T(h(t));return{[`${C}--button-copy-icon-status-${h(n)}`]:!0,[`${C}--me-1`]:!0,[`${C}--tab-${o}-${i}-icon-status-${h(n)}`]:!0,[`${C}--tab-${o}-${i}-icon`]:!0}})({copyStatus:G,highlightjs:H.value.highlightjs,useTheme:la}))),ua=e((()=>(a=>{const{isMobile:n}=a;return{[`${C}--label`]:!0,[`${C}--label-mobile`]:h(n)}})({isMobile:K}))),va=e((()=>(a=>{const{highlightjs:n,useTheme:l}=a,t=$(h(n)),o=T(h(l));return{[`${C}--tab-${o}`]:!0,[`${C}--tab-${t}-${o}`]:!0}})({highlightjs:H.value.highlightjs,useTheme:la}))),ja=e((()=>(a=>{const{isLoading:n,useTheme:l}=a,t={width:"coy"===h(l)&&!1===h(n)?"100%":""};return"coy"===h(l)&&(t.padding="1em"),t})({isLoading:Y,useTheme:la}))),pa=e((()=>(a=>{const{floatingTabs:n,tabGap:l}=a;return{bottom:n?"1px":"0",gap:S({str:h(l)})||"0px"}})({floatingTabs:H.value.floatingTabs,tabGap:H.value.tabGap}))),da=e((()=>(a=>{const{copyTab:n,height:l,maxHeight:t,radius:o,runTab:i,tabs:s,useTheme:e}=a,c=h(o);let r=`${c} 0 ${c} ${c} !important`;return h(s)&&(h(n)||h(i))||(r=c),{borderRadius:r,display:"funky"!==h(e)?"flex":"block",height:S({str:h(l)}),maxHeight:S({str:h(t)}),overflow:"auto"}})({copyTab:ia.value,height:H.value.height,maxHeight:H.value.maxHeight,radius:H.value.codeBlockRadius,runTab:ea.value,tabs:ha.value,useTheme:la}))),ma=e((()=>(a=>{const{tabGap:n}=a;return{gap:S({str:h(n)})||"0px"}})({tabGap:H.value.tabGap})));function ka(){if(!H.value.prismjs&&!H.value.highlightjs)throw new Error("[vue-code-block]: You must set either the prismjs or highlightjs props.");if(H.value.prismjs&&H.value.highlightjs)throw new Error("[vue-code-block]: You cannot have both prismjs and highlightjs props set at the same time.");if(H.value.highlightjs&&H.value.prismPlugin)throw new Error("[vue-code-block]: Highlight.js does not support PrismJS plugins. Unexpected results may occur. Remove the `prism-plugin` prop from the vue-code-block component.")}function ya(){J.value||(J.value=!0,navigator.clipboard.writeText(O.value).then((()=>{U.value=H.value.copySuccessText,G.value="success",q("update:copy-status",G.value)}),(a=>{U.value=H.value.copyFailedText,G.value="failed",q("update:copy-status",G.value)})),setTimeout((()=>{U.value=H.value.copyText,G.value="copy",q("update:copy-status",G.value),J.value=!1}),3e3))}function fa(){let a="";const n=H.value.highlightjs?"highlightjs":"prism",l=document.getElementsByTagName("head")[0],t=document.createElement("style"),o=document.body.getAttribute("data-v-code-block-theme");let i=`v-code-block--theme-${la.value}-${n}`,s=!0,e=!0,h="",c="";if(i=xa(n,i),o===la.value||o===i||"boolean"==typeof la.value)return;switch(document.body.setAttribute("data-v-code-block-theme",i),t.setAttribute("type","text/css"),t.setAttribute("data-theme-id",i),t.setAttribute("data-theme","v-code-block--theme-sheet"),la.value){case"neon-bunny":a='/**\n\t* MIT License\n\t* Copyright (c) 2023 WebDevNerdStuff\n\t* WebDevNerdStuff Neon Bunny\n\t* VSCode Theme: https://marketplace.visualstudio.com/items?itemName=WebDevNerdStuff.neon-bunny\n\t*/\n\t:root{--neon-bunny-blue-light: #2492ff;--neon-bunny-blue: #0b93ff;--neon-bunny-gray-lighter: #aaa;--neon-bunny-gray: #7f817e;--neon-bunny-green-darker-darker: #008b05;--neon-bunny-green-darker: #2bb71d;--neon-bunny-green-light: #2bb71d;--neon-bunny-green-neon: #0aff04;--neon-bunny-green: #00d205;--neon-bunny-lime-lighter: #c3e88d;--neon-bunny-lime: #b2ff02;--neon-bunny-magenta: #df00df;--neon-bunny-neon-green: #00ff00;--neon-bunny-orange: #e58100;--neon-bunny-peach-darker: #ffb46a;--neon-bunny-peach-light: #ffe4a6;--neon-bunny-peach: #ffcb6b;--neon-bunny-pink: #ff1190;--neon-bunny-purple-light-dim: #c792ea;--neon-bunny-purple-light: #d285cc;--neon-bunny-purple: #ea03ff;--neon-bunny-red: #ff3229;--neon-bunny-salmon: #ff6f5b;--neon-bunny-teal: #80fcff;--neon-bunny-white: #fff;--neon-bunny-yellow: #fef611;--neon-bunny-atrule: var(--neon-bunny-peach);--neon-bunny-attr-name: var(--neon-bunny-purple-light-dim);--neon-bunny-attr-value: var(--neon-bunny-peach);--neon-bunny-boolean: var(--neon-bunny-blue-light);--neon-bunny-builtin: var(--neon-bunny-purple);--neon-bunny-cdata: var(--neon-bunny-gray);--neon-bunny-char: var(--neon-bunny-pink);--neon-bunny-class-name: var(--neon-bunny-peach);--neon-bunny-comment: var(--neon-bunny-gray);--neon-bunny-constant: var(--neon-bunny-green-darker);--neon-bunny-deleted: var(--neon-bunny-red);--neon-bunny-entity: var(--neon-bunny-peach);--neon-bunny-function: var(--neon-bunny-green-neon);--neon-bunny-important: var(--neon-bunny-red);--neon-bunny-inserted: var(--neon-bunny-lime-lighter);--neon-bunny-keyword: var(--neon-bunny-blue);--neon-bunny-namespace: var(--neon-bunny-peach);--neon-bunny-number: var(--neon-bunny-white);--neon-bunny-operator: var(--neon-bunny-blue-light);--neon-bunny-prolog: var(--neon-bunny-gray);--neon-bunny-property: var(--neon-bunny-pink);--neon-bunny-punctuation: var(--neon-bunny-blue);--neon-bunny-regex: var(--neon-bunny-peach-light);--neon-bunny-string: var(--neon-bunny-green-darker);--neon-bunny-symbol: var(--neon-bunny-pink);--neon-bunny-tag: var(--neon-bunny-blue-light);--neon-bunny-url: var(--neon-bunny-orange);--neon-bunny-variable: var(--neon-bunny-green-darker);--neon-bunny-html-attr-name: var(--neon-bunny-green);--neon-bunny-html-attr-value-punctuation: var(--neon-bunny-peach-darker);--neon-bunny-html-attr-value: var(--neon-bunny-peach-darker);--neon-bunny-css-atrule-rule: var(--neon-bunny-blue);--neon-bunny-css-atrule: var(--neon-bunny-white);--neon-bunny-css-function: var(--neon-bunny-orange);--neon-bunny-css-property: var(--neon-bunny-pink);--neon-bunny-css-punctuation: var(--neon-bunny-white);--neon-bunny-css-selector: var(--neon-bunny-lime);--neon-bunny-css-string: var(--neon-bunny-green-light);--neon-bunny-css: var(--neon-bunny-purple-light-dim);--neon-bunny-js-keyword: var(--neon-bunny-blue);--neon-bunny-js-literal-property: var(--neon-bunny-neon-green);--neon-bunny-js-operator: var(--neon-bunny-blue-light);--neon-bunny-js-punctuation: var(--neon-bunny-white);--neon-bunny-js-string: var(--neon-bunny-green-darker-darker);--neon-bunny-js-template-string-string: var(--neon-bunny-green-darker-darker);--neon-bunny-js: var(--neon-bunny-green-darker);--neon-bunny-php-boolean: var(--neon-bunny-blue);--neon-bunny-php-class-name-definition-class-name: var(--neon-bunny-magenta);--neon-bunny-php-class-name-return-type: var(--neon-bunny-gray-lighter);--neon-bunny-php-class-name: var(--neon-bunny-teal);--neon-bunny-php-double-quote-string: var(--neon-bunny-salmon);--neon-bunny-php-function: var(--neon-bunny-green-neon);--neon-bunny-php-keyword-type-hint: var(--neon-bunny-gray-lighter);--neon-bunny-php-keyword: var(--neon-bunny-blue);--neon-bunny-php-operator: var(--neon-bunny-purple);--neon-bunny-php-package: var(--neon-bunny-peach);--neon-bunny-php-property: var(--neon-bunny-purple-light);--neon-bunny-php-punctuation: var(--neon-bunny-white);--neon-bunny-php-single-quote-string: var(--neon-bunny-yellow);--neon-bunny-php-variable: var(--neon-bunny-purple-light)}code[class*=language-],pre[class*=language-]{-moz-hyphens:none;-moz-tab-size:4;-ms-hyphens:none;-o-tab-size:4;-webkit-hyphens:none;color:var(--neon-bunny-white);font-family:Consolas,Monaco,"Andale Mono","Ubuntu Mono",monospace;font-size:1em;hyphens:none;line-height:1.5;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal;word-wrap:normal}code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection{background:rgba(29,59,83,.99);text-shadow:none}code[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-]::selection,pre[class*=language-] ::selection{background:rgba(255,255,255,.0823529412);text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{background:#000;color:#fff;margin:.5em 0;overflow:auto;padding:1em}:not(pre)>code[class*=language-]{background:#000;color:#fff;border-radius:.3em;padding:.1em;white-space:normal}.token.atrule{color:var(--neon-bunny-atrule)}.token.attr-name{color:var(--neon-bunny-attr-name)}.token.attr-value{color:var(--neon-bunny-attr-value)}.token.bold{font-weight:bold}.token.boolean{color:var(--neon-bunny-boolean)}.token.builtin{color:var(--neon-bunny-builtin)}.token.cdata{color:var(--neon-bunny-cdata);font-style:italic}.token.char{color:var(--neon-bunny-char)}.token.class-name{color:var(--neon-bunny-class-name)}.token.comment{color:var(--neon-bunny-comment);font-style:italic}.token.constant{color:var(--neon-bunny-constant)}.token.deleted{color:var(--neon-bunny-deleted)}.token.entity{color:var(--neon-bunny-entity)}.token.function{color:var(--neon-bunny-function)}.token.important{color:var(--neon-bunny-important);font-style:italic}.token.inserted{color:var(--neon-bunny-inserted)}.token.italic{font-style:italic}.token.keyword{color:var(--neon-bunny-keyword)}.token.number{color:var(--neon-bunny-number)}.token.operator{color:var(--neon-bunny-operator)}.token.prolog{color:var(--neon-bunny-prolog);font-style:italic}.token.property{color:var(--neon-bunny-property)}.token.punctuation{color:var(--neon-bunny-punctuation)}.token.regex{color:var(--neon-bunny-regex)}.token.string{color:var(--neon-bunny-string)}.token.symbol{color:var(--neon-bunny-symbol)}.token.tag{color:var(--neon-bunny-tag)}.token.url{color:var(--neon-bunny-url);text-decoration:underline}.token.variable{color:var(--neon-bunny-variable)}.namespace{color:var(--neon-bunny-namespace)}.language-html .token.attr-name{color:var(--neon-bunny-html-attr-name)}.language-html .token.attr-value{color:var(--neon-bunny-html-attr-value)}.language-html .token.attr-value .token.punctuation{color:var(--neon-bunny-html-attr-value-punctuation)}.language-css{color:var(--neon-bunny-css) !important}.language-css .token.atrule{color:var(--neon-bunny-css-atrule)}.language-css .token.atrule .token.rule{color:var(--neon-bunny-css-atrule-rule)}.language-css .token.function{color:var(--neon-bunny-css-function)}.language-css .token.property{color:var(--neon-bunny-css-property)}.language-css .token.punctuation{color:var(--neon-bunny-css-punctuation)}.language-css .token.selector{color:var(--neon-bunny-css-selector)}.language-css .token.string{color:var(--neon-bunny-css-string);font-style:italic}.style .token.string{color:var(--neon-bunny-css-string);font-style:italic}.language-javascript,.language-js{color:var(--neon-bunny-js) !important;font-style:italic}.language-javascript span,.language-js span{font-style:normal}.language-javascript .token.keyword,.language-js .token.keyword{color:var(--neon-bunny-js-keyword)}.language-javascript .token.literal-property.property,.language-js .token.literal-property.property{color:var(--neon-bunny-js-literal-property);font-style:italic}.language-javascript .token.operator,.language-js .token.operator{color:var(--neon-bunny-js-operator);font-style:italic}.language-javascript .token.punctuation,.language-js .token.punctuation{color:var(--neon-bunny-js-punctuation)}.language-javascript .token.template-string .token.string,.language-js .token.template-string .token.string{color:var(--neon-bunny-js-template-string-string)}.language-php .token.boolean{color:var(--neon-bunny-boolean)}.language-php .token.class-name{color:var(--neon-bunny-php-class-name)}.language-php .token.class-name-definition.class-name{color:var(--neon-bunny-php-class-name-definition-class-name)}.language-php .token.class-name.return-type{color:var(--neon-bunny-php-class-name-return-type);font-style:italic}.language-php .token.function{color:var(--neon-bunny-php-function)}.language-php .token.keyword{color:var(--neon-bunny-php-keyword)}.language-php .token.keyword.type-hint{color:var(--neon-bunny-php-keyword-type-hint);font-style:italic}.language-php .token.operator{color:var(--neon-bunny-php-operator)}.language-php .token.package{color:var(--neon-bunny-php-package)}.language-php .token.property{color:var(--neon-bunny-php-property)}.language-php .token.punctuation{color:var(--neon-bunny-php-punctuation)}.language-php .token.string.double-quoted-string{color:var(--neon-bunny-php-double-quote-string)}.language-php .token.string.single-quoted-string{color:var(--neon-bunny-php-single-quote-string)}.language-php .token.variable{color:var(--neon-bunny-php-variable)}\n',e=!1,s=!1,"highlightjs"===n&&(a='/**\n\t* MIT License\n\t* Copyright (c) 2023 WebDevNerdStuff\n\t* WebDevNerdStuff Neon Bunny\n\t* VSCode Theme: https://marketplace.visualstudio.com/items?itemName=WebDevNerdStuff.neon-bunny\n\t*/\n\t:root{--neon-bunny-blue-darker: #276AFF;--neon-bunny-blue-light-faded: #a5a8ff;--neon-bunny-blue-light: #2492ff;--neon-bunny-blue: #0b93ff;--neon-bunny-gray-lighter: #aaa;--neon-bunny-gray: #7f817e;--neon-bunny-green-darker-darker: #008b05;--neon-bunny-green-darker: #2bb71d;--neon-bunny-green-light: #2bb71d;--neon-bunny-green-neon: #0aff04;--neon-bunny-green: #00d205;--neon-bunny-lime-lighter: #c3e88d;--neon-bunny-lime: #b2ff02;--neon-bunny-magenta-neon: #FF25D9;--neon-bunny-magenta: #df00df;--neon-bunny-neon-green: #00ff00;--neon-bunny-orange-lighter: #ff8d04;--neon-bunny-orange: #e58100;--neon-bunny-peach-darker: #ffb46a;--neon-bunny-peach-light: #ffe4a6;--neon-bunny-peach: #ffcb6b;--neon-bunny-pink: #ff1190;--neon-bunny-purple-light-dim: #c792ea;--neon-bunny-purple-light: #d285cc;--neon-bunny-purple: #ea03ff;--neon-bunny-red: #ff3229;--neon-bunny-salmon: #ff6f5b;--neon-bunny-teal: #80fcff;--neon-bunny-white: #fff;--neon-bunny-yellow-light-faded: #ffe3b8;--neon-bunny-yellow: #fef611;--neon-bunny-builtin: var(--neon-bunny-purple);--neon-bunny-char: var(--neon-bunny-pink);--neon-bunny-class: var(--neon-bunny-magenta);--neon-bunny-comment: var(--neon-bunny-gray);--neon-bunny-doctag: var(--neon-bunny-blue-light);--neon-bunny-keyword: var(--neon-bunny-blue);--neon-bunny-literal: var(--neon-bunny-blue-light);--neon-bunny-number: var(--neon-bunny-white);--neon-bunny-operator: var(--neon-bunny-blue-light);--neon-bunny-params: var(--neon-bunny-green-darker);--neon-bunny-property: var(--neon-bunny-blue-light-faded);--neon-bunny-punctuation: var(--neon-bunny-blue);--neon-bunny-regex: var(--neon-bunny-peach-light);--neon-bunny-string: var(--neon-bunny-peach-darker);--neon-bunny-subst: var(--neon-bunny-green-darker);--neon-bunny-symbol: var(--neon-bunny-pink);--neon-bunny-title-class-inherited: var(--neon-bunny-green-darker);--neon-bunny-title-class: var(--neon-bunny-green-neon);--neon-bunny-title-function-invoke: var(--neon-bunny-green-darker);--neon-bunny-title-function: var(--neon-bunny-green-neon);--neon-bunny-title: var(--neon-bunny-green-darker);--neon-bunny-type: var(--neon-bunny-pink);--neon-bunny-variable-constant: var(--neon-bunny-green-darker);--neon-bunny-variable-language: var(--neon-bunny-blue-light);--neon-bunny-variable: var(--neon-bunny-green-darker);--neon-bunny-meta-keyword: var(--neon-bunny-green);--neon-bunny-meta-prompt: var(--neon-bunny-blue-light);--neon-bunny-meta-string: var(--neon-bunny-blue-light);--neon-bunny-meta: var(--neon-bunny-blue-light);--neon-bunny-attr: var(--neon-bunny-green);--neon-bunny-attribute: var(--neon-bunny-green);--neon-bunny-name: var(--neon-bunny-blue-light);--neon-bunny-section: var(--neon-bunny-green);--neon-bunny-tag-attr: var(--neon-bunny-blue-light);--neon-bunny-tag: var(--neon-bunny-blue-light);--neon-bunny-bullet: var(--neon-bunny-white);--neon-bunny-code: var(--neon-bunny-white);--neon-bunny-emphasis: var(--neon-bunny-white);--neon-bunny-formula: var(--neon-bunny-white);--neon-bunny-link: var(--neon-bunny-orange);--neon-bunny-quote: var(--neon-bunny-white);--neon-bunny-strong: var(--neon-bunny-white);--neon-bunny-css-selector-id: var(--neon-bunny-green);--neon-bunny-selector-attr: var(--neon-bunny-purple-light-dim);--neon-bunny-selector-class: var(--neon-bunny-lime);--neon-bunny-selector-id: var(--neon-bunny-lime);--neon-bunny-selector-pseudo: var(--neon-bunny-purple-light-dim);--neon-bunny-selector-tag: var(--neon-bunny-white);--neon-bunny-selector: var(--neon-bunny-lime);--neon-bunny-addition: var(--neon-bunny-green-neon);--neon-bunny-deletion: var(--neon-bunny-red);--neon-bunny-html-tag-attr: var(--neon-bunny-green);--neon-bunny-css: var(--neon-bunny-purple-light-dim);--neon-bunny-css-builtin: var(--neon-bunny-orange);--neon-bunny-css-meta: var(--neon-bunny-red);--neon-bunny-css-attribute: var(--neon-bunny-pink);--neon-bunny-json-punctuation: var(--neon-bunny-white);--neon-bunny-js: var(--neon-bunny-green-darker);--neon-bunny-js-params-variable-language: var(--neon-bunny-green-darker);--neon-bunny-js-title-class: var(--neon-bunny-orange-lighter);--neon-bunny-js-variable-language: var(--neon-bunny-pink);--neon-bunny-php: var(--neon-bunny-blue-light);--neon-bunny-php-class-keyword: var(--neon-bunny-blue-darker);--neon-bunny-php-class-title: var(--neon-bunny-magenta);--neon-bunny-php-function-title: var(--neon-bunny-green-neon);--neon-bunny-php-keyword: var(--neon-bunny-blue-darker);--neon-bunny-php-params-variable: var(--neon-bunny-green-darker);--neon-bunny-php-params: var(--neon-bunny-gray-lighter);--neon-bunny-php-string: var(--neon-bunny-yellow);--neon-bunny-php-title-class: var(--neon-bunny-gray-lighter);--neon-bunny-php-title-function-invoke: var(--neon-bunny-green-neon);--neon-bunny-php-title: var(--neon-bunny-peach);--neon-bunny-php-variable: var(--neon-bunny-purple-light);--neon-bunny-php-meta: var(--neon-bunny-red)}pre code.hljs{display:block;overflow-x:auto;padding:1em}code[class*=language-],pre[class*=language-]{-moz-hyphens:none;-moz-tab-size:4;-ms-hyphens:none;-o-tab-size:4;-webkit-hyphens:none;color:var(--neon-bunny-white);font-family:Consolas,Monaco,"Andale Mono","Ubuntu Mono",monospace;hyphens:none;line-height:1.5;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal;word-wrap:normal}code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection{background:rgba(29,59,83,.99);text-shadow:none}code[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-]::selection,pre[class*=language-] ::selection{background:rgba(255,255,255,.0823529412);text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{background:#000;color:#fff;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-]{background:#000;color:#fff;border-radius:.3em;padding:.1em;white-space:normal}.hljs-built_in{color:var(--neon-bunny-builtin)}.hljs-char{color:var(--neon-bunny-char)}.hljs-comment{color:var(--neon-bunny-comment);font-style:italic}.hljs-doctag{color:var(--neon-bunny-doctag)}.hljs-keyword{color:var(--neon-bunny-keyword)}.hljs-literal{color:var(--neon-bunny-literal)}.hljs-number{color:var(--neon-bunny-number)}.hljs-operator{color:var(--neon-bunny-operator)}.hljs-params{color:var(--neon-bunny-params);font-style:italic}.hljs-property{color:var(--neon-bunny-property)}.hljs-punctuation{color:var(--neon-bunny-punctuation)}.hljs-regexp{color:var(--neon-bunny-regex)}.hljs-string{color:var(--neon-bunny-string)}.hljs-subst{color:var(--neon-bunny-subst)}.hljs-symbol{color:var(--neon-bunny-symbol)}.hljs-title{color:var(--neon-bunny-title)}.hljs-title.class_{color:var(--neon-bunny-title-class)}.hljs-title.class_.inherited__{color:var(--neon-bunny-title-class-inherited)}.hljs-title.function_{color:var(--neon-bunny-title-function)}.hljs-title.function_.invoke__{color:var(--neon-bunny-title-function-invoke)}.hljs-type{color:var(--neon-bunny-type)}.hljs-variable{color:var(--neon-bunny-variable)}.hljs-variable.constant_{color:var(--neon-bunny-variable-constant)}.hljs-variable.language_{color:var(--neon-bunny-variable-language)}.hljs-meta{color:var(--neon-bunny-meta)}.hljs-meta.prompt_{color:var(--neon-bunny-meta-prompt)}.hljs-meta.keyword_{color:var(--neon-bunny-meta-keyword)}.hljs-meta.string_{color:var(--neon-bunny-meta-string)}.hljs-attr{color:var(--neon-bunny-attr)}.hljs-attribute{color:var(--neon-bunny-attribute)}.hljs-name{color:var(--neon-bunny-name)}.hljs-section{color:var(--neon-bunny-section)}.hljs-tag{color:var(--neon-bunny-tag)}.hljs-tag .hljs-attr{color:var(--neon-bunny-tag-attr)}.hljs-bullet{color:var(--neon-bunny-bullet)}.hljs-code{color:var(--neon-bunny-code)}.hljs-emphasis{color:var(--neon-bunny-emphasis);font-style:italic}.hljs-formula{color:var(--neon-bunny-formula)}.hljs-link{color:var(--neon-bunny-link)}.hljs-quote{color:var(--neon-bunny-quote)}.hljs-strong{color:var(--neon-bunny-strong);font-weight:bold}.hljs-selector{color:var(--neon-bunny-selector)}.hljs-selector-attr{color:var(--neon-bunny-selector-attr)}.hljs-selector-class{color:var(--neon-bunny-selector-class)}.hljs-selector-id{color:var(--neon-bunny-selector-id)}.hljs-selector-pseudo{color:var(--neon-bunny-selector-pseudo)}.hljs-selector-tag{color:var(--neon-bunny-selector-tag)}.hljs-addition{color:var(--neon-bunny-addition)}.hljs-deletion{color:var(--neon-bunny-deletion)}.hljs.language-html .hljs-tag .hljs-attr,.hljs .language-html .hljs-tag .hljs-attr{color:var(--neon-bunny-html-tag-attr)}.hljs.language-css,.hljs .language-css{color:var(--neon-bunny-css)}.hljs.language-css .hljs-built_in,.hljs .language-css .hljs-built_in{color:var(--neon-bunny-css-builtin)}.hljs.language-css .hljs-char,.hljs .language-css .hljs-char{color:var(--neon-bunny-char)}.hljs.language-css .hljs-comment,.hljs .language-css .hljs-comment{color:var(--neon-bunny-comment)}.hljs.language-css .hljs-doctag,.hljs .language-css .hljs-doctag{color:var(--neon-bunny-doctag)}.hljs.language-css .hljs-keyword,.hljs .language-css .hljs-keyword{color:var(--neon-bunny-keyword)}.hljs.language-css .hljs-literal,.hljs .language-css .hljs-literal{color:var(--neon-bunny-literal)}.hljs.language-css .hljs-number,.hljs .language-css .hljs-number{color:var(--neon-bunny-number)}.hljs.language-css .hljs-operator,.hljs .language-css .hljs-operator{color:var(--neon-bunny-operator)}.hljs.language-css .hljs-params,.hljs .language-css .hljs-params{color:var(--neon-bunny-params);font-style:italic}.hljs.language-css .hljs-property,.hljs .language-css .hljs-property{color:var(--neon-bunny-property)}.hljs.language-css .hljs-punctuation,.hljs .language-css .hljs-punctuation{color:var(--neon-bunny-punctuation)}.hljs.language-css .hljs-regexp,.hljs .language-css .hljs-regexp{color:var(--neon-bunny-regex)}.hljs.language-css .hljs-string,.hljs .language-css .hljs-string{color:var(--neon-bunny-string)}.hljs.language-css .hljs-subst,.hljs .language-css .hljs-subst{color:var(--neon-bunny-subst)}.hljs.language-css .hljs-symbol,.hljs .language-css .hljs-symbol{color:var(--neon-bunny-symbol)}.hljs.language-css .hljs-title,.hljs .language-css .hljs-title{color:var(--neon-bunny-title)}.hljs.language-css .hljs-title.class_,.hljs .language-css .hljs-title.class_{color:var(--neon-bunny-title-class)}.hljs.language-css .hljs-title.class_.inherited__,.hljs .language-css .hljs-title.class_.inherited__{color:var(--neon-bunny-title-class-inherited)}.hljs.language-css .hljs-title.function_,.hljs .language-css .hljs-title.function_{color:var(--neon-bunny-title-function)}.hljs.language-css .hljs-title.function_.invoke__,.hljs .language-css .hljs-title.function_.invoke__{color:var(--neon-bunny-title-function-invoke)}.hljs.language-css .hljs-type,.hljs .language-css .hljs-type{color:var(--neon-bunny-type)}.hljs.language-css .hljs-variable,.hljs .language-css .hljs-variable{color:var(--neon-bunny-variable)}.hljs.language-css .hljs-variable.constant_,.hljs .language-css .hljs-variable.constant_{color:var(--neon-bunny-variable-constant)}.hljs.language-css .hljs-variable.language_,.hljs .language-css .hljs-variable.language_{color:var(--neon-bunny-variable-language)}.hljs.language-css .hljs-meta,.hljs .language-css .hljs-meta{color:var(--neon-bunny-css-meta)}.hljs.language-css .hljs-meta.prompt_,.hljs .language-css .hljs-meta.prompt_{color:var(--neon-bunny-meta-prompt)}.hljs.language-css .hljs-meta.keyword_,.hljs .language-css .hljs-meta.keyword_{color:var(--neon-bunny-meta-keyword)}.hljs.language-css .hljs-meta.string_,.hljs .language-css .hljs-meta.string_{color:var(--neon-bunny-meta-string)}.hljs.language-css .hljs-attr,.hljs .language-css .hljs-attr{color:var(--neon-bunny-attr)}.hljs.language-css .hljs-attribute,.hljs .language-css .hljs-attribute{color:var(--neon-bunny-css-attribute)}.hljs.language-css .hljs-name,.hljs .language-css .hljs-name{color:var(--neon-bunny-name)}.hljs.language-css .hljs-section,.hljs .language-css .hljs-section{color:var(--neon-bunny-section)}.hljs.language-css .hljs-tag,.hljs .language-css .hljs-tag{color:var(--neon-bunny-tag)}.hljs.language-css .hljs-bullet,.hljs .language-css .hljs-bullet{color:var(--neon-bunny-bullet)}.hljs.language-css .hljs-code,.hljs .language-css .hljs-code{color:var(--neon-bunny-code)}.hljs.language-css .hljs-emphasis,.hljs .language-css .hljs-emphasis{color:var(--neon-bunny-emphasis);font-style:italic}.hljs.language-css .hljs-formula,.hljs .language-css .hljs-formula{color:var(--neon-bunny-formula)}.hljs.language-css .hljs-link,.hljs .language-css .hljs-link{color:var(--neon-bunny-link)}.hljs.language-css .hljs-quote,.hljs .language-css .hljs-quote{color:var(--neon-bunny-quote)}.hljs.language-css .hljs-strong,.hljs .language-css .hljs-strong{color:var(--neon-bunny-strong);font-weight:bold}.hljs.language-css .hljs-selector,.hljs .language-css .hljs-selector{color:var(--neon-bunny-selector)}.hljs.language-css .hljs-selector-attr,.hljs .language-css .hljs-selector-attr{color:var(--neon-bunny-selector-attr)}.hljs.language-css .hljs-selector-class,.hljs .language-css .hljs-selector-class{color:var(--neon-bunny-selector-class)}.hljs.language-css .hljs-selector-id,.hljs .language-css .hljs-selector-id{color:var(--neon-bunny-css-selector-id)}.hljs.language-css .hljs-selector-pseudo,.hljs .language-css .hljs-selector-pseudo{color:var(--neon-bunny-selector-pseudo)}.hljs.language-css .hljs-selector-tag,.hljs .language-css .hljs-selector-tag{color:var(--neon-bunny-selector-tag)}.hljs.language-css .hljs-addition,.hljs .language-css .hljs-addition{color:var(--neon-bunny-addition)}.hljs.language-css .hljs-deletion,.hljs .language-css .hljs-deletion{color:var(--neon-bunny-deletion)}.hljs.language-json .hljs-punctuation,.hljs .language-json .hljs-punctuation{color:var(--neon-bunny-json-punctuation)}.hljs.language-javascript,.hljs.language-js,.hljs .language-javascript,.hljs .language-js{color:var(--neon-bunny-js)}.hljs.language-javascript .hljs-built_in,.hljs.language-js .hljs-built_in,.hljs .language-javascript .hljs-built_in,.hljs .language-js .hljs-built_in{color:var(--neon-bunny-builtin)}.hljs.language-javascript .hljs-char,.hljs.language-js .hljs-char,.hljs .language-javascript .hljs-char,.hljs .language-js .hljs-char{color:var(--neon-bunny-char)}.hljs.language-javascript .hljs-comment,.hljs.language-js .hljs-comment,.hljs .language-javascript .hljs-comment,.hljs .language-js .hljs-comment{color:var(--neon-bunny-comment)}.hljs.language-javascript .hljs-doctag,.hljs.language-js .hljs-doctag,.hljs .language-javascript .hljs-doctag,.hljs .language-js .hljs-doctag{color:var(--neon-bunny-doctag)}.hljs.language-javascript .hljs-keyword,.hljs.language-js .hljs-keyword,.hljs .language-javascript .hljs-keyword,.hljs .language-js .hljs-keyword{color:var(--neon-bunny-keyword)}.hljs.language-javascript .hljs-literal,.hljs.language-js .hljs-literal,.hljs .language-javascript .hljs-literal,.hljs .language-js .hljs-literal{color:var(--neon-bunny-literal)}.hljs.language-javascript .hljs-number,.hljs.language-js .hljs-number,.hljs .language-javascript .hljs-number,.hljs .language-js .hljs-number{color:var(--neon-bunny-number)}.hljs.language-javascript .hljs-operator,.hljs.language-js .hljs-operator,.hljs .language-javascript .hljs-operator,.hljs .language-js .hljs-operator{color:var(--neon-bunny-operator)}.hljs.language-javascript .hljs-params,.hljs.language-js .hljs-params,.hljs .language-javascript .hljs-params,.hljs .language-js .hljs-params{color:var(--neon-bunny-params);font-style:italic}.hljs.language-javascript .hljs-params .hljs-variable.language_,.hljs.language-js .hljs-params .hljs-variable.language_,.hljs .language-javascript .hljs-params .hljs-variable.language_,.hljs .language-js .hljs-params .hljs-variable.language_{color:var(--neon-bunny-js-params-variable-language)}.hljs.language-javascript .hljs-property,.hljs.language-js .hljs-property,.hljs .language-javascript .hljs-property,.hljs .language-js .hljs-property{color:var(--neon-bunny-property)}.hljs.language-javascript .hljs-punctuation,.hljs.language-js .hljs-punctuation,.hljs .language-javascript .hljs-punctuation,.hljs .language-js .hljs-punctuation{color:var(--neon-bunny-punctuation)}.hljs.language-javascript .hljs-regexp,.hljs.language-js .hljs-regexp,.hljs .language-javascript .hljs-regexp,.hljs .language-js .hljs-regexp{color:var(--neon-bunny-regex)}.hljs.language-javascript .hljs-string,.hljs.language-js .hljs-string,.hljs .language-javascript .hljs-string,.hljs .language-js .hljs-string{color:var(--neon-bunny-string)}.hljs.language-javascript .hljs-subst,.hljs.language-js .hljs-subst,.hljs .language-javascript .hljs-subst,.hljs .language-js .hljs-subst{color:var(--neon-bunny-subst)}.hljs.language-javascript .hljs-symbol,.hljs.language-js .hljs-symbol,.hljs .language-javascript .hljs-symbol,.hljs .language-js .hljs-symbol{color:var(--neon-bunny-symbol)}.hljs.language-javascript .hljs-title,.hljs.language-js .hljs-title,.hljs .language-javascript .hljs-title,.hljs .language-js .hljs-title{color:var(--neon-bunny-title)}.hljs.language-javascript .hljs-title.class_,.hljs.language-js .hljs-title.class_,.hljs .language-javascript .hljs-title.class_,.hljs .language-js .hljs-title.class_{color:var(--neon-bunny-js-title-class)}.hljs.language-javascript .hljs-title.class_.inherited__,.hljs.language-js .hljs-title.class_.inherited__,.hljs .language-javascript .hljs-title.class_.inherited__,.hljs .language-js .hljs-title.class_.inherited__{color:var(--neon-bunny-title-class-inherited)}.hljs.language-javascript .hljs-title.function_,.hljs.language-js .hljs-title.function_,.hljs .language-javascript .hljs-title.function_,.hljs .language-js .hljs-title.function_{color:var(--neon-bunny-title-function)}.hljs.language-javascript .hljs-title.function_.invoke__,.hljs.language-js .hljs-title.function_.invoke__,.hljs .language-javascript .hljs-title.function_.invoke__,.hljs .language-js .hljs-title.function_.invoke__{color:var(--neon-bunny-title-function-invoke)}.hljs.language-javascript .hljs-type,.hljs.language-js .hljs-type,.hljs .language-javascript .hljs-type,.hljs .language-js .hljs-type{color:var(--neon-bunny-type)}.hljs.language-javascript .hljs-variable,.hljs.language-js .hljs-variable,.hljs .language-javascript .hljs-variable,.hljs .language-js .hljs-variable{color:var(--neon-bunny-variable)}.hljs.language-javascript .hljs-variable.constant_,.hljs.language-js .hljs-variable.constant_,.hljs .language-javascript .hljs-variable.constant_,.hljs .language-js .hljs-variable.constant_{color:var(--neon-bunny-variable-constant)}.hljs.language-javascript .hljs-variable.language_,.hljs.language-js .hljs-variable.language_,.hljs .language-javascript .hljs-variable.language_,.hljs .language-js .hljs-variable.language_{color:var(--neon-bunny-js-variable-language)}.hljs.language-javascript .hljs-meta,.hljs.language-js .hljs-meta,.hljs .language-javascript .hljs-meta,.hljs .language-js .hljs-meta{color:var(--neon-bunny-meta)}.hljs.language-javascript .hljs-meta.prompt_,.hljs.language-js .hljs-meta.prompt_,.hljs .language-javascript .hljs-meta.prompt_,.hljs .language-js .hljs-meta.prompt_{color:var(--neon-bunny-meta-prompt)}.hljs.language-javascript .hljs-meta.keyword_,.hljs.language-js .hljs-meta.keyword_,.hljs .language-javascript .hljs-meta.keyword_,.hljs .language-js .hljs-meta.keyword_{color:var(--neon-bunny-meta-keyword)}.hljs.language-javascript .hljs-meta.string_,.hljs.language-js .hljs-meta.string_,.hljs .language-javascript .hljs-meta.string_,.hljs .language-js .hljs-meta.string_{color:var(--neon-bunny-meta-string)}.hljs.language-javascript .hljs-attr,.hljs.language-js .hljs-attr,.hljs .language-javascript .hljs-attr,.hljs .language-js .hljs-attr{color:var(--neon-bunny-attr)}.hljs.language-javascript .hljs-attribute,.hljs.language-js .hljs-attribute,.hljs .language-javascript .hljs-attribute,.hljs .language-js .hljs-attribute{color:var(--neon-bunny-attribute)}.hljs.language-javascript .hljs-name,.hljs.language-js .hljs-name,.hljs .language-javascript .hljs-name,.hljs .language-js .hljs-name{color:var(--neon-bunny-name)}.hljs.language-javascript .hljs-section,.hljs.language-js .hljs-section,.hljs .language-javascript .hljs-section,.hljs .language-js .hljs-section{color:var(--neon-bunny-section)}.hljs.language-javascript .hljs-tag,.hljs.language-js .hljs-tag,.hljs .language-javascript .hljs-tag,.hljs .language-js .hljs-tag{color:var(--neon-bunny-tag)}.hljs.language-javascript .hljs-bullet,.hljs.language-js .hljs-bullet,.hljs .language-javascript .hljs-bullet,.hljs .language-js .hljs-bullet{color:var(--neon-bunny-bullet)}.hljs.language-javascript .hljs-code,.hljs.language-js .hljs-code,.hljs .language-javascript .hljs-code,.hljs .language-js .hljs-code{color:var(--neon-bunny-code)}.hljs.language-javascript .hljs-emphasis,.hljs.language-js .hljs-emphasis,.hljs .language-javascript .hljs-emphasis,.hljs .language-js .hljs-emphasis{color:var(--neon-bunny-emphasis);font-style:italic}.hljs.language-javascript .hljs-formula,.hljs.language-js .hljs-formula,.hljs .language-javascript .hljs-formula,.hljs .language-js .hljs-formula{color:var(--neon-bunny-formula)}.hljs.language-javascript .hljs-link,.hljs.language-js .hljs-link,.hljs .language-javascript .hljs-link,.hljs .language-js .hljs-link{color:var(--neon-bunny-link)}.hljs.language-javascript .hljs-quote,.hljs.language-js .hljs-quote,.hljs .language-javascript .hljs-quote,.hljs .language-js .hljs-quote{color:var(--neon-bunny-quote)}.hljs.language-javascript .hljs-strong,.hljs.language-js .hljs-strong,.hljs .language-javascript .hljs-strong,.hljs .language-js .hljs-strong{color:var(--neon-bunny-strong);font-weight:bold}.hljs.language-javascript .hljs-selector,.hljs.language-js .hljs-selector,.hljs .language-javascript .hljs-selector,.hljs .language-js .hljs-selector{color:var(--neon-bunny-selector)}.hljs.language-javascript .hljs-selector-attr,.hljs.language-js .hljs-selector-attr,.hljs .language-javascript .hljs-selector-attr,.hljs .language-js .hljs-selector-attr{color:var(--neon-bunny-selector-attr)}.hljs.language-javascript .hljs-selector-class,.hljs.language-js .hljs-selector-class,.hljs .language-javascript .hljs-selector-class,.hljs .language-js .hljs-selector-class{color:var(--neon-bunny-selector-class)}.hljs.language-javascript .hljs-selector-id,.hljs.language-js .hljs-selector-id,.hljs .language-javascript .hljs-selector-id,.hljs .language-js .hljs-selector-id{color:var(--neon-bunny-selector-id)}.hljs.language-javascript .hljs-selector-pseudo,.hljs.language-js .hljs-selector-pseudo,.hljs .language-javascript .hljs-selector-pseudo,.hljs .language-js .hljs-selector-pseudo{color:var(--neon-bunny-selector-pseudo)}.hljs.language-javascript .hljs-selector-tag,.hljs.language-js .hljs-selector-tag,.hljs .language-javascript .hljs-selector-tag,.hljs .language-js .hljs-selector-tag{color:var(--neon-bunny-selector-tag)}.hljs.language-javascript .hljs-addition,.hljs.language-js .hljs-addition,.hljs .language-javascript .hljs-addition,.hljs .language-js .hljs-addition{color:var(--neon-bunny-addition)}.hljs.language-javascript .hljs-deletion,.hljs.language-js .hljs-deletion,.hljs .language-javascript .hljs-deletion,.hljs .language-js .hljs-deletion{color:var(--neon-bunny-deletion)}.hljs.language-php,.hljs .language-php{color:var(--neon-bunny-php)}.hljs.language-php .hljs-built_in,.hljs .language-php .hljs-built_in{color:var(--neon-bunny-builtin)}.hljs.language-php .hljs-char,.hljs .language-php .hljs-char{color:var(--neon-bunny-char)}.hljs.language-php .hljs-class .hljs-title,.hljs .language-php .hljs-class .hljs-title{color:var(--neon-bunny-php-class-title) !important}.hljs.language-php .hljs-class .hljs-keyword,.hljs .language-php .hljs-class .hljs-keyword{color:var(--neon-bunny-php-class-keyword)}.hljs.language-php .hljs-comment,.hljs .language-php .hljs-comment{color:var(--neon-bunny-comment)}.hljs.language-php .hljs-doctag,.hljs .language-php .hljs-doctag{color:var(--neon-bunny-doctag)}.hljs.language-php .hljs-function .hljs-title,.hljs .language-php .hljs-function .hljs-title{color:var(--neon-bunny-php-function-title)}.hljs.language-php .hljs-keyword,.hljs .language-php .hljs-keyword{color:var(--neon-bunny-php-keyword)}.hljs.language-php .hljs-literal,.hljs .language-php .hljs-literal{color:var(--neon-bunny-literal)}.hljs.language-php .hljs-number,.hljs .language-php .hljs-number{color:var(--neon-bunny-number)}.hljs.language-php .hljs-operator,.hljs .language-php .hljs-operator{color:var(--neon-bunny-operator)}.hljs.language-php .hljs-params,.hljs .language-php .hljs-params{color:var(--neon-bunny-php-params);font-style:italic}.hljs.language-php .hljs-params .hljs-variable,.hljs .language-php .hljs-params .hljs-variable{color:var(--neon-bunny-php-params-variable)}.hljs.language-php .hljs-property,.hljs .language-php .hljs-property{color:var(--neon-bunny-property)}.hljs.language-php .hljs-punctuation,.hljs .language-php .hljs-punctuation{color:var(--neon-bunny-punctuation)}.hljs.language-php .hljs-regexp,.hljs .language-php .hljs-regexp{color:var(--neon-bunny-regex)}.hljs.language-php .hljs-string,.hljs .language-php .hljs-string{color:var(--neon-bunny-php-string)}.hljs.language-php .hljs-subst,.hljs .language-php .hljs-subst{color:var(--neon-bunny-subst)}.hljs.language-php .hljs-symbol,.hljs .language-php .hljs-symbol{color:var(--neon-bunny-symbol)}.hljs.language-php .hljs-title,.hljs .language-php .hljs-title{color:var(--neon-bunny-php-title)}.hljs.language-php .hljs-title.class_,.hljs .language-php .hljs-title.class_{color:var(--neon-bunny-php-title-class);font-style:italic}.hljs.language-php .hljs-title.class_.inherited__,.hljs .language-php .hljs-title.class_.inherited__{color:var(--neon-bunny-title-class-inherited)}.hljs.language-php .hljs-title.function_,.hljs .language-php .hljs-title.function_{color:var(--neon-bunny-title-function)}.hljs.language-php .hljs-title.function_.invoke__,.hljs .language-php .hljs-title.function_.invoke__{color:var(--neon-bunny-php-title-function-invoke)}.hljs.language-php .hljs-type,.hljs .language-php .hljs-type{color:var(--neon-bunny-type)}.hljs.language-php .hljs-variable,.hljs .language-php .hljs-variable{color:var(--neon-bunny-php-variable)}.hljs.language-php .hljs-variable.constant_,.hljs .language-php .hljs-variable.constant_{color:var(--neon-bunny-variable-constant)}.hljs.language-php .hljs-variable.language_,.hljs .language-php .hljs-variable.language_{color:var(--neon-bunny-variable-language)}.hljs.language-php .hljs-meta,.hljs .language-php .hljs-meta{color:var(--neon-bunny-php-meta)}.hljs.language-php .hljs-meta.prompt_,.hljs .language-php .hljs-meta.prompt_{color:var(--neon-bunny-meta-prompt)}.hljs.language-php .hljs-meta.keyword_,.hljs .language-php .hljs-meta.keyword_{color:var(--neon-bunny-meta-keyword)}.hljs.language-php .hljs-meta.string_,.hljs .language-php .hljs-meta.string_{color:var(--neon-bunny-meta-string)}.hljs.language-php .hljs-attr,.hljs .language-php .hljs-attr{color:var(--neon-bunny-attr)}.hljs.language-php .hljs-attribute,.hljs .language-php .hljs-attribute{color:var(--neon-bunny-attribute)}.hljs.language-php .hljs-name,.hljs .language-php .hljs-name{color:var(--neon-bunny-name)}.hljs.language-php .hljs-section,.hljs .language-php .hljs-section{color:var(--neon-bunny-section)}.hljs.language-php .hljs-tag,.hljs .language-php .hljs-tag{color:var(--neon-bunny-tag)}.hljs.language-php .hljs-bullet,.hljs .language-php .hljs-bullet{color:var(--neon-bunny-bullet)}.hljs.language-php .hljs-code,.hljs .language-php .hljs-code{color:var(--neon-bunny-code)}.hljs.language-php .hljs-emphasis,.hljs .language-php .hljs-emphasis{color:var(--neon-bunny-emphasis);font-style:italic}.hljs.language-php .hljs-formula,.hljs .language-php .hljs-formula{color:var(--neon-bunny-formula)}.hljs.language-php .hljs-link,.hljs .language-php .hljs-link{color:var(--neon-bunny-link)}.hljs.language-php .hljs-quote,.hljs .language-php .hljs-quote{color:var(--neon-bunny-quote)}.hljs.language-php .hljs-strong,.hljs .language-php .hljs-strong{color:var(--neon-bunny-strong);font-weight:bold}.hljs.language-php .hljs-selector,.hljs .language-php .hljs-selector{color:var(--neon-bunny-selector)}.hljs.language-php .hljs-selector-attr,.hljs .language-php .hljs-selector-attr{color:var(--neon-bunny-selector-attr)}.hljs.language-php .hljs-selector-class,.hljs .language-php .hljs-selector-class{color:var(--neon-bunny-selector-class)}.hljs.language-php .hljs-selector-id,.hljs .language-php .hljs-selector-id{color:var(--neon-bunny-selector-id)}.hljs.language-php .hljs-selector-pseudo,.hljs .language-php .hljs-selector-pseudo{color:var(--neon-bunny-selector-pseudo)}.hljs.language-php .hljs-selector-tag,.hljs .language-php .hljs-selector-tag{color:var(--neon-bunny-selector-tag)}.hljs.language-php .hljs-addition,.hljs .language-php .hljs-addition{color:var(--neon-bunny-addition)}.hljs.language-php .hljs-deletion,.hljs .language-php .hljs-deletion{color:var(--neon-bunny-deletion)}\n');break;case"neon-bunny-carrot":a='/**\n\t* MIT License\n\t* Copyright (c) 2023 WebDevNerdStuff\n\t* WebDevNerdStuff Neon Bunny Carrot Theme\n\t* VSCode Theme: https://marketplace.visualstudio.com/items?itemName=WebDevNerdStuff.neon-bunny\n\t*/\n\t:root{--neon-bunny-blue-light: #2492ff;--neon-bunny-blue: #0b93ff;--neon-bunny-gray: #7f817e;--neon-bunny-green-darker-darker: #008b05;--neon-bunny-green-darker: #2bb71d;--neon-bunny-green-light: #7cd47d;--neon-bunny-green: #00d205;--neon-bunny-lime: #c3e88d;--neon-bunny-magenta: #dd00ff;--neon-bunny-orange-darker: #e58100;--neon-bunny-orange-light: #ffc266;--neon-bunny-orange: #ff9900;--neon-bunny-peach-light: #ffe4a6;--neon-bunny-peach: #ffcb6b;--neon-bunny-pink: #ff1190;--neon-bunny-purple-light-dim: #c792ea;--neon-bunny-purple-light: #da96df;--neon-bunny-purple: #ea03ff;--neon-bunny-red: #ff5370;--neon-bunny-teal: #00EEFF;--neon-bunny-white: #fff;--neon-bunny-yellow-light: #ffffa2;--neon-bunny-yellow: #ffff00;--neon-bunny-atrule: var(--neon-bunny-peach);--neon-bunny-attr-name: var(--neon-bunny-purple-light-dim);--neon-bunny-attr-value: var(--neon-bunny-peach);--neon-bunny-boolean: var(--neon-bunny-purple-light);--neon-bunny-builtin: var(--neon-bunny-purple);--neon-bunny-cdata: var(--neon-bunny-gray);--neon-bunny-char: var(--neon-bunny-pink);--neon-bunny-class-name: var(--neon-bunny-peach);--neon-bunny-comment: var(--neon-bunny-gray);--neon-bunny-constant: var(--neon-bunny-green-darker);--neon-bunny-deleted: var(--neon-bunny-red);--neon-bunny-entity: var(--neon-bunny-peach);--neon-bunny-function: var(--neon-bunny-orange-light);--neon-bunny-important: var(--neon-bunny-pink);--neon-bunny-inserted: var(--neon-bunny-lime);--neon-bunny-keyword: var(--neon-bunny-purple-light);--neon-bunny-namespace: var(--neon-bunny-peach);--neon-bunny-number: var(--neon-bunny-white);--neon-bunny-operator: var(--neon-bunny-orange);--neon-bunny-prolog: var(--neon-bunny-gray);--neon-bunny-property: var(--neon-bunny-orange-light);--neon-bunny-punctuation: var(--neon-bunny-orange);--neon-bunny-regex: var(--neon-bunny-peach-light);--neon-bunny-string: var(--neon-bunny-green-light);--neon-bunny-symbol: var(--neon-bunny-orange-light);--neon-bunny-tag: var(--neon-bunny-orange);--neon-bunny-url: var(--neon-bunny-orange-darker);--neon-bunny-variable: var(--neon-bunny-orange);--neon-bunny-html-attr-name: var(--neon-bunny-orange-light);--neon-bunny-html-attr-value-punctuation: var(--neon-bunny-green);--neon-bunny-html-attr-value: var(--neon-bunny-green);--neon-bunny-css-atrule-rule: var(--neon-bunny-blue);--neon-bunny-css-atrule: var(--neon-bunny-white);--neon-bunny-css-function: var(--neon-bunny-orange-darker);--neon-bunny-css-property: var(--neon-bunny-pink);--neon-bunny-css-punctuation: var(--neon-bunny-white);--neon-bunny-css-selector: var(--neon-bunny-yellow);--neon-bunny-css-string: var(--neon-bunny-green-light);--neon-bunny-css: var(--neon-bunny-teal);--neon-bunny-js-keyword: var(--neon-bunny-magenta);--neon-bunny-js-literal-property: var(--neon-bunny-orange);--neon-bunny-js-operator: var(--neon-bunny-blue-light);--neon-bunny-js-punctuation: var(--neon-bunny-white);--neon-bunny-js-string: var(--neon-bunny-green-darker-darker);--neon-bunny-js-template-string-string: var(--neon-bunny-green-darker-darker);--neon-bunny-js: var(--neon-bunny-orange);--neon-bunny-php-boolean: var(--neon-bunny-purple-light);--neon-bunny-php-class-name-return-type: var(--neon-bunny-yellow);--neon-bunny-php-class-name: var(--neon-bunny-yellow);--neon-bunny-php-double-quote-string: var(--neon-bunny-green);--neon-bunny-php-function: var(--neon-bunny-orange-light);--neon-bunny-php-keyword: var(--neon-bunny-magenta);--neon-bunny-php-keyword-type-hint: var(--neon-bunny-magenta);--neon-bunny-php-class-name-definition-class-name: var(--neon-bunny-yellow);--neon-bunny-php-operator: var(--neon-bunny-yellow-light);--neon-bunny-php-package: var(--neon-bunny-yellow);--neon-bunny-php-property: var(--neon-bunny-orange);--neon-bunny-php-punctuation: var(--neon-bunny-white);--neon-bunny-php-single-quote-string: var(--neon-bunny-green-light);--neon-bunny-php-variable: var(--neon-bunny-orange)}code[class*=language-],pre[class*=language-]{-moz-hyphens:none;-moz-tab-size:4;-ms-hyphens:none;-o-tab-size:4;-webkit-hyphens:none;color:var(--neon-bunny-white);font-family:Consolas,Monaco,"Andale Mono","Ubuntu Mono",monospace;font-size:1em;hyphens:none;line-height:1.5;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal;word-wrap:normal}code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection{background:rgba(29,59,83,.99);text-shadow:none}code[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-]::selection,pre[class*=language-] ::selection{background:rgba(255,255,255,.0823529412);text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{background:#000;color:#fff;margin:.5em 0;overflow:auto;padding:1em}:not(pre)>code[class*=language-]{background:#000;color:#fff;border-radius:.3em;padding:.1em;white-space:normal}.token.atrule{color:var(--neon-bunny-atrule)}.token.attr-name{color:var(--neon-bunny-attr-name)}.token.attr-value{color:var(--neon-bunny-attr-value)}.token.bold{font-weight:bold}.token.boolean{color:var(--neon-bunny-boolean)}.token.builtin{color:var(--neon-bunny-builtin)}.token.cdata{color:var(--neon-bunny-cdata);font-style:italic}.token.char{color:var(--neon-bunny-char)}.token.class-name{color:var(--neon-bunny-class-name)}.token.constant{color:var(--neon-bunny-constant)}.token.comment{color:var(--neon-bunny-comment);font-style:italic}.token.deleted{color:var(--neon-bunny-deleted)}.token.entity{color:var(--neon-bunny-entity)}.token.function{color:var(--neon-bunny-function)}.token.important{color:var(--neon-bunny-important);font-style:italic}.token.inserted{color:var(--neon-bunny-inserted)}.token.italic{font-style:italic}.token.keyword{color:var(--neon-bunny-keyword)}.token.number{color:var(--neon-bunny-number)}.token.operator{color:var(--neon-bunny-operator)}.token.prolog{color:var(--neon-bunny-prolog);font-style:italic}.token.property{color:var(--neon-bunny-property)}.token.punctuation{color:var(--neon-bunny-punctuation)}.token.regex{color:var(--neon-bunny-regex)}.token.string{color:var(--neon-bunny-string)}.token.symbol{color:var(--neon-bunny-symbol)}.token.tag{color:var(--neon-bunny-tag)}.token.url{color:var(--neon-bunny-url);text-decoration:underline}.token.variable{color:var(--neon-bunny-variable)}.namespace{color:var(--neon-bunny-namespace)}.language-html .token .attr-name{color:var(--neon-bunny-html-attr-name)}.language-html .token.attr-value{color:var(--neon-bunny-html-attr-value)}.language-html .token.attr-value.punctuation{color:var(--neon-bunny-html-attr-value-punctuation)}.language-css{color:var(--neon-bunny-css) !important}.language-css .token.atrule{color:var(--neon-bunny-css-atrule)}.language-css .token.atrule .token.rule{color:var(--neon-bunny-css-atrule-rule)}.language-css .token.function{color:var(--neon-bunny-css-function)}.language-css .token.property{color:var(--neon-bunny-css-property)}.language-css .token.punctuation{color:var(--neon-bunny-css-punctuation)}.language-css .token.selector{color:var(--neon-bunny-css-selector)}.language-css .token.string{color:var(--neon-bunny-css-string);font-style:italic}.style .token.string{color:var(--neon-bunny-css-string);font-style:italic}.language-javascript,.language-js{color:var(--neon-bunny-js) !important;font-style:italic}.language-javascript span,.language-js span{font-style:normal}.language-javascript .token.keyword,.language-js .token.keyword{color:var(--neon-bunny-js-keyword)}.language-javascript .token.literal-property.property,.language-js .token.literal-property.property{color:var(--neon-bunny-js-literal-property);font-style:italic}.language-javascript .token.operator,.language-js .token.operator{color:var(--neon-bunny-js-operator);font-style:italic}.language-javascript .token.punctuation,.language-js .token.punctuation{color:var(--neon-bunny-js-punctuation)}.language-javascript .token.template-string.string,.language-js .token.template-string.string{color:var(--neon-bunny-js-template-string-string)}.language-php .token.boolean{color:var(--neon-bunny-boolean)}.language-php .token.class-name{color:var(--neon-bunny-php-class-name)}.language-php .token.class-name-definition.class-name{color:var(--neon-bunny-php-class-name-definition-class-name)}.language-php .token.class-name .return-type{color:var(--neon-bunny-php-class-name-return-type)}.language-php .token.function{color:var(--neon-bunny-php-function);text-decoration:underline}.language-php .token.keyword{color:var(--neon-bunny-php-keyword)}.language-php .token.keyword.type-hint{color:var(--neon-bunny-php-keyword-type-hint)}.language-php .token.operator{color:var(--neon-bunny-php-operator)}.language-php .token.package{color:var(--neon-bunny-php-package)}.language-php .token.property{color:var(--neon-bunny-php-property)}.language-php .token.punctuation{color:var(--neon-bunny-php-punctuation)}.language-php .token.string.double-quoted-string{color:var(--neon-bunny-php-double-quote-string)}.language-php .token.string.single-quoted-string{color:var(--neon-bunny-php-single-quote-string)}.language-php .token.variable{color:var(--neon-bunny-php-variable)}\n',e=!1,s=!1,"highlightjs"===n&&(a='/**\n\t* MIT License\n\t* Copyright (c) 2023 WebDevNerdStuff\n\t* WebDevNerdStuff Neon Bunny Carrot Theme\n\t* VSCode Theme: https://marketplace.visualstudio.com/items?itemName=WebDevNerdStuff.neon-bunny\n\t*/\n\t:root{--neon-bunny-blue-light: #2492ff;--neon-bunny-blue: #0b93ff;--neon-bunny-gray: #7f817e;--neon-bunny-green-darker-darker: #008b05;--neon-bunny-green-darker: #2bb71d;--neon-bunny-green-light: #7cd47d;--neon-bunny-green: #00d205;--neon-bunny-lime: #c3e88d;--neon-bunny-magenta: #dd00ff;--neon-bunny-orange-darker: #e58100;--neon-bunny-orange-light: #ffc266;--neon-bunny-orange-lighter: #ff8d04;--neon-bunny-orange: #ff9900;--neon-bunny-peach-light: #ffe4a6;--neon-bunny-peach: #ffcb6b;--neon-bunny-pink: #ff1190;--neon-bunny-purple-light-dim: #c792ea;--neon-bunny-purple-light: #da96df;--neon-bunny-purple: #ea03ff;--neon-bunny-red: #ff5370;--neon-bunny-teal: #00EEFF;--neon-bunny-white: #fff;--neon-bunny-yellow-light: #ffffa2;--neon-bunny-yellow-light-faded: #ffe3b8;--neon-bunny-yellow: #ffff00;--neon-bunny-builtin: var(--neon-bunny-purple);--neon-bunny-char: var(--neon-bunny-pink);--neon-bunny-class: var(--neon-bunny-magenta);--neon-bunny-comment: var(--neon-bunny-gray);--neon-bunny-doctag: var(--neon-bunny-blue-light);--neon-bunny-keyword: var(--neon-bunny-magenta);--neon-bunny-literal: var(--neon-bunny-purple-light);--neon-bunny-number: var(--neon-bunny-white);--neon-bunny-operator: var(--neon-bunny-blue-light);--neon-bunny-params: var(--neon-bunny-orange);--neon-bunny-property: var(--neon-bunny-yellow-light-faded);--neon-bunny-punctuation: var(--neon-bunny-blue);--neon-bunny-regex: var(--neon-bunny-peach-light);--neon-bunny-string: var(--neon-bunny-green);--neon-bunny-subst: var(--neon-bunny-green-darker);--neon-bunny-symbol: var(--neon-bunny-pink);--neon-bunny-title-class-inherited: var(--neon-bunny-orange);--neon-bunny-title-class: var(--neon-bunny-green-neon);--neon-bunny-title-function-invoke: var(--neon-bunny-orange);--neon-bunny-title-function: var(--neon-bunny-orange-light);--neon-bunny-title: var(--neon-bunny-orange);--neon-bunny-type: var(--neon-bunny-pink);--neon-bunny-variable-constant: var(--neon-bunny-green-darker);--neon-bunny-variable-language: var(--neon-bunny-orange);--neon-bunny-variable: var(--neon-bunny-green-darker);--neon-bunny-meta-keyword: var(--neon-bunny-purple-light);--neon-bunny-meta-prompt: var(--neon-bunny-orange);--neon-bunny-meta-string: var(--neon-bunny-orange);--neon-bunny-meta: var(--neon-bunny-orange);--neon-bunny-attr: var(--neon-bunny-orange);--neon-bunny-attribute: var(---neon-bunny-orange);--neon-bunny-name: var(--neon-bunny-orange);--neon-bunny-section: var(--neon-bunny-orange);--neon-bunny-tag-attr: var(--neon-bunny-orange-light);--neon-bunny-tag: var(--neon-bunny-orange);--neon-bunny-bullet: var(--neon-bunny-white);--neon-bunny-code: var(--neon-bunny-white);--neon-bunny-emphasis: var(--neon-bunny-white);--neon-bunny-formula: var(--neon-bunny-white);--neon-bunny-link: var(--neon-bunny-orange);--neon-bunny-quote: var(--neon-bunny-white);--neon-bunny-strong: var(--neon-bunny-white);--neon-bunny-css-selector-id: var(--neon-bunny-green);--neon-bunny-selector-attr: var(--neon-bunny-orange);--neon-bunny-selector-class: var(--neon-bunny-yellow);--neon-bunny-selector-id: var(--neon-bunny-selector);--neon-bunny-selector-pseudo: var(--neon-bunny-orange);--neon-bunny-selector-tag: var(--neon-bunny-white);--neon-bunny-selector: var(--neon-bunny-lime);--neon-bunny-addition: var(--neon-bunny-green-neon);--neon-bunny-deletion: var(--neon-bunny-red);--neon-bunny-html-tag-attr: var(--neon-bunny-orange-light);--neon-bunny-css: var(--neon-bunny-teal);--neon-bunny-css-builtin: var(--neon-bunny-orange);--neon-bunny-css-meta: var(--neon-bunny-red);--neon-bunny-css-attribute: var(--neon-bunny-pink);--neon-bunny-json-punctuation: var(--neon-bunny-white);--neon-bunny-js: var(--neon-bunny-orange);--neon-bunny-js-params-variable-language: var(--neon-bunny-orange);--neon-bunny-js-title-class: var(--neon-bunny-orange-lighter);--neon-bunny-js-variable-language: var(--neon-bunny-yellow);--neon-bunny-php: var(--neon-bunny-white);--neon-bunny-php-class-keyword: var(--neon-bunny-pink);--neon-bunny-php-class-title: var(--neon-bunny-yellow);--neon-bunny-php-function-title: var(--neon-bunny-orange-light);--neon-bunny-php-keyword: var(--neon-bunny-magenta);--neon-bunny-php-params-variable: var(--neon-bunny-green-darker);--neon-bunny-php-params: var(--neon-bunny-yellow);--neon-bunny-php-string: var(--neon-bunny-green-light);--neon-bunny-php-title-class: var(--neon-bunny-yellow);--neon-bunny-php-title-function-invoke: var(--neon-bunny-orange-light);--neon-bunny-php-title: var(--neon-bunny-white);--neon-bunny-php-variable: var(--neon-bunny-orange);--neon-bunny-php-meta: var(--neon-bunny-pink)}pre code.hljs{display:block;overflow-x:auto;padding:1em}code[class*=language-],pre[class*=language-]{-moz-hyphens:none;-moz-tab-size:4;-ms-hyphens:none;-o-tab-size:4;-webkit-hyphens:none;color:var(--neon-bunny-white);font-family:Consolas,Monaco,"Andale Mono","Ubuntu Mono",monospace;hyphens:none;line-height:1.5;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal;word-wrap:normal}code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection{background:rgba(29,59,83,.99);text-shadow:none}code[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-]::selection,pre[class*=language-] ::selection{background:rgba(255,255,255,.0823529412);text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{background:#000;color:#fff;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-]{background:#000;color:#fff;border-radius:.3em;padding:.1em;white-space:normal}.hljs-built_in{color:var(--neon-bunny-builtin)}.hljs-char{color:var(--neon-bunny-char)}.hljs-comment{color:var(--neon-bunny-comment);font-style:italic}.hljs-doctag{color:var(--neon-bunny-doctag)}.hljs-keyword{color:var(--neon-bunny-keyword)}.hljs-literal{color:var(--neon-bunny-literal)}.hljs-number{color:var(--neon-bunny-number)}.hljs-operator{color:var(--neon-bunny-operator)}.hljs-params{color:var(--neon-bunny-params)}.hljs-property{color:var(--neon-bunny-property)}.hljs-punctuation{color:var(--neon-bunny-punctuation)}.hljs-regexp{color:var(--neon-bunny-regex)}.hljs-string{color:var(--neon-bunny-string)}.hljs-subst{color:var(--neon-bunny-subst)}.hljs-symbol{color:var(--neon-bunny-symbol)}.hljs-title{color:var(--neon-bunny-title)}.hljs-title.class_{color:var(--neon-bunny-title-class)}.hljs-title.class_.inherited__{color:var(--neon-bunny-title-class-inherited)}.hljs-title.function_{color:var(--neon-bunny-title-function);text-decoration:underline}.hljs-title.function_.invoke__{color:var(--neon-bunny-title-function-invoke)}.hljs-type{color:var(--neon-bunny-type)}.hljs-variable{color:var(--neon-bunny-variable)}.hljs-variable.constant_{color:var(--neon-bunny-variable-constant)}.hljs-variable.language_{color:var(--neon-bunny-variable-language);font-style:italic}.hljs-meta{color:var(--neon-bunny-meta)}.hljs-meta.prompt_{color:var(--neon-bunny-meta-prompt)}.hljs-meta.keyword_{color:var(--neon-bunny-meta-keyword)}.hljs-meta.string_{color:var(--neon-bunny-meta-string)}.hljs-attr{color:var(--neon-bunny-attr)}.hljs-attribute{color:var(--neon-bunny-attribute)}.hljs-name{color:var(--neon-bunny-name)}.hljs-section{color:var(--neon-bunny-section)}.hljs-tag{color:var(--neon-bunny-tag)}.hljs-tag .hljs-attr{color:var(--neon-bunny-tag-attr)}.hljs-bullet{color:var(--neon-bunny-bullet)}.hljs-code{color:var(--neon-bunny-code)}.hljs-emphasis{color:var(--neon-bunny-emphasis);font-style:italic}.hljs-formula{color:var(--neon-bunny-formula)}.hljs-link{color:var(--neon-bunny-link)}.hljs-quote{color:var(--neon-bunny-quote)}.hljs-strong{color:var(--neon-bunny-strong);font-weight:bold}.hljs-selector{color:var(--neon-bunny-selector)}.hljs-selector-attr{color:var(--neon-bunny-selector-attr)}.hljs-selector-class{color:var(--neon-bunny-selector-class)}.hljs-selector-id{color:var(--neon-bunny-selector-id)}.hljs-selector-pseudo{color:var(--neon-bunny-selector-pseudo)}.hljs-selector-tag{color:var(--neon-bunny-selector-tag)}.hljs-addition{color:var(--neon-bunny-addition)}.hljs-deletion{color:var(--neon-bunny-deletion)}.hljs.language-html .hljs-tag .hljs-attr,.hljs .language-html .hljs-tag .hljs-attr{color:var(--neon-bunny-html-tag-attr)}.hljs.language-css,.hljs .language-css{color:var(--neon-bunny-css)}.hljs.language-css .hljs-built_in,.hljs .language-css .hljs-built_in{color:var(--neon-bunny-css-builtin)}.hljs.language-css .hljs-char,.hljs .language-css .hljs-char{color:var(--neon-bunny-char)}.hljs.language-css .hljs-comment,.hljs .language-css .hljs-comment{color:var(--neon-bunny-comment)}.hljs.language-css .hljs-doctag,.hljs .language-css .hljs-doctag{color:var(--neon-bunny-doctag)}.hljs.language-css .hljs-keyword,.hljs .language-css .hljs-keyword{color:var(--neon-bunny-keyword)}.hljs.language-css .hljs-literal,.hljs .language-css .hljs-literal{color:var(--neon-bunny-literal)}.hljs.language-css .hljs-number,.hljs .language-css .hljs-number{color:var(--neon-bunny-number)}.hljs.language-css .hljs-operator,.hljs .language-css .hljs-operator{color:var(--neon-bunny-operator)}.hljs.language-css .hljs-params,.hljs .language-css .hljs-params{color:var(--neon-bunny-params);font-style:italic}.hljs.language-css .hljs-property,.hljs .language-css .hljs-property{color:var(--neon-bunny-property)}.hljs.language-css .hljs-punctuation,.hljs .language-css .hljs-punctuation{color:var(--neon-bunny-punctuation)}.hljs.language-css .hljs-regexp,.hljs .language-css .hljs-regexp{color:var(--neon-bunny-regex)}.hljs.language-css .hljs-string,.hljs .language-css .hljs-string{color:var(--neon-bunny-string)}.hljs.language-css .hljs-subst,.hljs .language-css .hljs-subst{color:var(--neon-bunny-subst)}.hljs.language-css .hljs-symbol,.hljs .language-css .hljs-symbol{color:var(--neon-bunny-symbol)}.hljs.language-css .hljs-title,.hljs .language-css .hljs-title{color:var(--neon-bunny-title)}.hljs.language-css .hljs-title.class_,.hljs .language-css .hljs-title.class_{color:var(--neon-bunny-title-class)}.hljs.language-css .hljs-title.class_.inherited__,.hljs .language-css .hljs-title.class_.inherited__{color:var(--neon-bunny-title-class-inherited)}.hljs.language-css .hljs-title.function_,.hljs .language-css .hljs-title.function_{color:var(--neon-bunny-title-function)}.hljs.language-css .hljs-title.function_.invoke__,.hljs .language-css .hljs-title.function_.invoke__{color:var(--neon-bunny-title-function-invoke)}.hljs.language-css .hljs-type,.hljs .language-css .hljs-type{color:var(--neon-bunny-type)}.hljs.language-css .hljs-variable,.hljs .language-css .hljs-variable{color:var(--neon-bunny-variable)}.hljs.language-css .hljs-variable.constant_,.hljs .language-css .hljs-variable.constant_{color:var(--neon-bunny-variable-constant)}.hljs.language-css .hljs-variable.language_,.hljs .language-css .hljs-variable.language_{color:var(--neon-bunny-variable-language)}.hljs.language-css .hljs-meta,.hljs .language-css .hljs-meta{color:var(--neon-bunny-css-meta)}.hljs.language-css .hljs-meta.prompt_,.hljs .language-css .hljs-meta.prompt_{color:var(--neon-bunny-meta-prompt)}.hljs.language-css .hljs-meta.keyword_,.hljs .language-css .hljs-meta.keyword_{color:var(--neon-bunny-meta-keyword)}.hljs.language-css .hljs-meta.string_,.hljs .language-css .hljs-meta.string_{color:var(--neon-bunny-meta-string)}.hljs.language-css .hljs-attr,.hljs .language-css .hljs-attr{color:var(--neon-bunny-attr)}.hljs.language-css .hljs-attribute,.hljs .language-css .hljs-attribute{color:var(--neon-bunny-css-attribute)}.hljs.language-css .hljs-name,.hljs .language-css .hljs-name{color:var(--neon-bunny-name)}.hljs.language-css .hljs-section,.hljs .language-css .hljs-section{color:var(--neon-bunny-section)}.hljs.language-css .hljs-tag,.hljs .language-css .hljs-tag{color:var(--neon-bunny-tag)}.hljs.language-css .hljs-bullet,.hljs .language-css .hljs-bullet{color:var(--neon-bunny-bullet)}.hljs.language-css .hljs-code,.hljs .language-css .hljs-code{color:var(--neon-bunny-code)}.hljs.language-css .hljs-emphasis,.hljs .language-css .hljs-emphasis{color:var(--neon-bunny-emphasis);font-style:italic}.hljs.language-css .hljs-formula,.hljs .language-css .hljs-formula{color:var(--neon-bunny-formula)}.hljs.language-css .hljs-link,.hljs .language-css .hljs-link{color:var(--neon-bunny-link)}.hljs.language-css .hljs-quote,.hljs .language-css .hljs-quote{color:var(--neon-bunny-quote)}.hljs.language-css .hljs-strong,.hljs .language-css .hljs-strong{color:var(--neon-bunny-strong);font-weight:bold}.hljs.language-css .hljs-selector,.hljs .language-css .hljs-selector{color:var(--neon-bunny-selector)}.hljs.language-css .hljs-selector-attr,.hljs .language-css .hljs-selector-attr{color:var(--neon-bunny-selector-attr)}.hljs.language-css .hljs-selector-class,.hljs .language-css .hljs-selector-class{color:var(--neon-bunny-selector-class)}.hljs.language-css .hljs-selector-id,.hljs .language-css .hljs-selector-id{color:var(--neon-bunny-css-selector-id)}.hljs.language-css .hljs-selector-pseudo,.hljs .language-css .hljs-selector-pseudo{color:var(--neon-bunny-selector-pseudo)}.hljs.language-css .hljs-selector-tag,.hljs .language-css .hljs-selector-tag{color:var(--neon-bunny-selector-tag)}.hljs.language-css .hljs-addition,.hljs .language-css .hljs-addition{color:var(--neon-bunny-addition)}.hljs.language-css .hljs-deletion,.hljs .language-css .hljs-deletion{color:var(--neon-bunny-deletion)}.hljs.language-json .hljs-punctuation,.hljs .language-json .hljs-punctuation{color:var(--neon-bunny-json-punctuation)}.hljs.language-javascript,.hljs.language-js,.hljs .language-javascript,.hljs .language-js{color:var(--neon-bunny-js)}.hljs.language-javascript .hljs-built_in,.hljs.language-js .hljs-built_in,.hljs .language-javascript .hljs-built_in,.hljs .language-js .hljs-built_in{color:var(--neon-bunny-builtin)}.hljs.language-javascript .hljs-char,.hljs.language-js .hljs-char,.hljs .language-javascript .hljs-char,.hljs .language-js .hljs-char{color:var(--neon-bunny-char)}.hljs.language-javascript .hljs-comment,.hljs.language-js .hljs-comment,.hljs .language-javascript .hljs-comment,.hljs .language-js .hljs-comment{color:var(--neon-bunny-comment)}.hljs.language-javascript .hljs-doctag,.hljs.language-js .hljs-doctag,.hljs .language-javascript .hljs-doctag,.hljs .language-js .hljs-doctag{color:var(--neon-bunny-doctag)}.hljs.language-javascript .hljs-keyword,.hljs.language-js .hljs-keyword,.hljs .language-javascript .hljs-keyword,.hljs .language-js .hljs-keyword{color:var(--neon-bunny-keyword)}.hljs.language-javascript .hljs-literal,.hljs.language-js .hljs-literal,.hljs .language-javascript .hljs-literal,.hljs .language-js .hljs-literal{color:var(--neon-bunny-literal)}.hljs.language-javascript .hljs-number,.hljs.language-js .hljs-number,.hljs .language-javascript .hljs-number,.hljs .language-js .hljs-number{color:var(--neon-bunny-number)}.hljs.language-javascript .hljs-operator,.hljs.language-js .hljs-operator,.hljs .language-javascript .hljs-operator,.hljs .language-js .hljs-operator{color:var(--neon-bunny-operator)}.hljs.language-javascript .hljs-params,.hljs.language-js .hljs-params,.hljs .language-javascript .hljs-params,.hljs .language-js .hljs-params{color:var(--neon-bunny-params);font-style:italic}.hljs.language-javascript .hljs-params .hljs-variable.language_,.hljs.language-js .hljs-params .hljs-variable.language_,.hljs .language-javascript .hljs-params .hljs-variable.language_,.hljs .language-js .hljs-params .hljs-variable.language_{color:var(--neon-bunny-js-params-variable-language)}.hljs.language-javascript .hljs-property,.hljs.language-js .hljs-property,.hljs .language-javascript .hljs-property,.hljs .language-js .hljs-property{color:var(--neon-bunny-property)}.hljs.language-javascript .hljs-punctuation,.hljs.language-js .hljs-punctuation,.hljs .language-javascript .hljs-punctuation,.hljs .language-js .hljs-punctuation{color:var(--neon-bunny-punctuation)}.hljs.language-javascript .hljs-regexp,.hljs.language-js .hljs-regexp,.hljs .language-javascript .hljs-regexp,.hljs .language-js .hljs-regexp{color:var(--neon-bunny-regex)}.hljs.language-javascript .hljs-string,.hljs.language-js .hljs-string,.hljs .language-javascript .hljs-string,.hljs .language-js .hljs-string{color:var(--neon-bunny-string)}.hljs.language-javascript .hljs-subst,.hljs.language-js .hljs-subst,.hljs .language-javascript .hljs-subst,.hljs .language-js .hljs-subst{color:var(--neon-bunny-subst)}.hljs.language-javascript .hljs-symbol,.hljs.language-js .hljs-symbol,.hljs .language-javascript .hljs-symbol,.hljs .language-js .hljs-symbol{color:var(--neon-bunny-symbol)}.hljs.language-javascript .hljs-title,.hljs.language-js .hljs-title,.hljs .language-javascript .hljs-title,.hljs .language-js .hljs-title{color:var(--neon-bunny-title)}.hljs.language-javascript .hljs-title.class_,.hljs.language-js .hljs-title.class_,.hljs .language-javascript .hljs-title.class_,.hljs .language-js .hljs-title.class_{color:var(--neon-bunny-js-title-class)}.hljs.language-javascript .hljs-title.class_.inherited__,.hljs.language-js .hljs-title.class_.inherited__,.hljs .language-javascript .hljs-title.class_.inherited__,.hljs .language-js .hljs-title.class_.inherited__{color:var(--neon-bunny-title-class-inherited)}.hljs.language-javascript .hljs-title.function_,.hljs.language-js .hljs-title.function_,.hljs .language-javascript .hljs-title.function_,.hljs .language-js .hljs-title.function_{color:var(--neon-bunny-title-function)}.hljs.language-javascript .hljs-title.function_.invoke__,.hljs.language-js .hljs-title.function_.invoke__,.hljs .language-javascript .hljs-title.function_.invoke__,.hljs .language-js .hljs-title.function_.invoke__{color:var(--neon-bunny-title-function-invoke)}.hljs.language-javascript .hljs-type,.hljs.language-js .hljs-type,.hljs .language-javascript .hljs-type,.hljs .language-js .hljs-type{color:var(--neon-bunny-type)}.hljs.language-javascript .hljs-variable,.hljs.language-js .hljs-variable,.hljs .language-javascript .hljs-variable,.hljs .language-js .hljs-variable{color:var(--neon-bunny-variable)}.hljs.language-javascript .hljs-variable.constant_,.hljs.language-js .hljs-variable.constant_,.hljs .language-javascript .hljs-variable.constant_,.hljs .language-js .hljs-variable.constant_{color:var(--neon-bunny-variable-constant)}.hljs.language-javascript .hljs-variable.language_,.hljs.language-js .hljs-variable.language_,.hljs .language-javascript .hljs-variable.language_,.hljs .language-js .hljs-variable.language_{color:var(--neon-bunny-js-variable-language)}.hljs.language-javascript .hljs-meta,.hljs.language-js .hljs-meta,.hljs .language-javascript .hljs-meta,.hljs .language-js .hljs-meta{color:var(--neon-bunny-meta)}.hljs.language-javascript .hljs-meta.prompt_,.hljs.language-js .hljs-meta.prompt_,.hljs .language-javascript .hljs-meta.prompt_,.hljs .language-js .hljs-meta.prompt_{color:var(--neon-bunny-meta-prompt)}.hljs.language-javascript .hljs-meta.keyword_,.hljs.language-js .hljs-meta.keyword_,.hljs .language-javascript .hljs-meta.keyword_,.hljs .language-js .hljs-meta.keyword_{color:var(--neon-bunny-meta-keyword)}.hljs.language-javascript .hljs-meta.string_,.hljs.language-js .hljs-meta.string_,.hljs .language-javascript .hljs-meta.string_,.hljs .language-js .hljs-meta.string_{color:var(--neon-bunny-meta-string)}.hljs.language-javascript .hljs-attr,.hljs.language-js .hljs-attr,.hljs .language-javascript .hljs-attr,.hljs .language-js .hljs-attr{color:var(--neon-bunny-attr)}.hljs.language-javascript .hljs-attribute,.hljs.language-js .hljs-attribute,.hljs .language-javascript .hljs-attribute,.hljs .language-js .hljs-attribute{color:var(--neon-bunny-attribute)}.hljs.language-javascript .hljs-name,.hljs.language-js .hljs-name,.hljs .language-javascript .hljs-name,.hljs .language-js .hljs-name{color:var(--neon-bunny-name)}.hljs.language-javascript .hljs-section,.hljs.language-js .hljs-section,.hljs .language-javascript .hljs-section,.hljs .language-js .hljs-section{color:var(--neon-bunny-section)}.hljs.language-javascript .hljs-tag,.hljs.language-js .hljs-tag,.hljs .language-javascript .hljs-tag,.hljs .language-js .hljs-tag{color:var(--neon-bunny-tag)}.hljs.language-javascript .hljs-bullet,.hljs.language-js .hljs-bullet,.hljs .language-javascript .hljs-bullet,.hljs .language-js .hljs-bullet{color:var(--neon-bunny-bullet)}.hljs.language-javascript .hljs-code,.hljs.language-js .hljs-code,.hljs .language-javascript .hljs-code,.hljs .language-js .hljs-code{color:var(--neon-bunny-code)}.hljs.language-javascript .hljs-emphasis,.hljs.language-js .hljs-emphasis,.hljs .language-javascript .hljs-emphasis,.hljs .language-js .hljs-emphasis{color:var(--neon-bunny-emphasis);font-style:italic}.hljs.language-javascript .hljs-formula,.hljs.language-js .hljs-formula,.hljs .language-javascript .hljs-formula,.hljs .language-js .hljs-formula{color:var(--neon-bunny-formula)}.hljs.language-javascript .hljs-link,.hljs.language-js .hljs-link,.hljs .language-javascript .hljs-link,.hljs .language-js .hljs-link{color:var(--neon-bunny-link)}.hljs.language-javascript .hljs-quote,.hljs.language-js .hljs-quote,.hljs .language-javascript .hljs-quote,.hljs .language-js .hljs-quote{color:var(--neon-bunny-quote)}.hljs.language-javascript .hljs-strong,.hljs.language-js .hljs-strong,.hljs .language-javascript .hljs-strong,.hljs .language-js .hljs-strong{color:var(--neon-bunny-strong);font-weight:bold}.hljs.language-javascript .hljs-selector,.hljs.language-js .hljs-selector,.hljs .language-javascript .hljs-selector,.hljs .language-js .hljs-selector{color:var(--neon-bunny-selector)}.hljs.language-javascript .hljs-selector-attr,.hljs.language-js .hljs-selector-attr,.hljs .language-javascript .hljs-selector-attr,.hljs .language-js .hljs-selector-attr{color:var(--neon-bunny-selector-attr)}.hljs.language-javascript .hljs-selector-class,.hljs.language-js .hljs-selector-class,.hljs .language-javascript .hljs-selector-class,.hljs .language-js .hljs-selector-class{color:var(--neon-bunny-selector-class)}.hljs.language-javascript .hljs-selector-id,.hljs.language-js .hljs-selector-id,.hljs .language-javascript .hljs-selector-id,.hljs .language-js .hljs-selector-id{color:var(--neon-bunny-selector-id)}.hljs.language-javascript .hljs-selector-pseudo,.hljs.language-js .hljs-selector-pseudo,.hljs .language-javascript .hljs-selector-pseudo,.hljs .language-js .hljs-selector-pseudo{color:var(--neon-bunny-selector-pseudo)}.hljs.language-javascript .hljs-selector-tag,.hljs.language-js .hljs-selector-tag,.hljs .language-javascript .hljs-selector-tag,.hljs .language-js .hljs-selector-tag{color:var(--neon-bunny-selector-tag)}.hljs.language-javascript .hljs-addition,.hljs.language-js .hljs-addition,.hljs .language-javascript .hljs-addition,.hljs .language-js .hljs-addition{color:var(--neon-bunny-addition)}.hljs.language-javascript .hljs-deletion,.hljs.language-js .hljs-deletion,.hljs .language-javascript .hljs-deletion,.hljs .language-js .hljs-deletion{color:var(--neon-bunny-deletion)}.hljs.language-php,.hljs .language-php{color:var(--neon-bunny-php)}.hljs.language-php .hljs-built_in,.hljs .language-php .hljs-built_in{color:var(--neon-bunny-builtin)}.hljs.language-php .hljs-char,.hljs .language-php .hljs-char{color:var(--neon-bunny-char)}.hljs.language-php .hljs-class .hljs-title,.hljs .language-php .hljs-class .hljs-title{color:var(--neon-bunny-php-class-title) !important}.hljs.language-php .hljs-class .hljs-keyword,.hljs .language-php .hljs-class .hljs-keyword{color:var(--neon-bunny-php-class-keyword)}.hljs.language-php .hljs-comment,.hljs .language-php .hljs-comment{color:var(--neon-bunny-comment)}.hljs.language-php .hljs-doctag,.hljs .language-php .hljs-doctag{color:var(--neon-bunny-doctag)}.hljs.language-php .hljs-function .hljs-title,.hljs .language-php .hljs-function .hljs-title{color:var(--neon-bunny-php-function-title)}.hljs.language-php .hljs-keyword,.hljs .language-php .hljs-keyword{color:var(--neon-bunny-php-keyword)}.hljs.language-php .hljs-literal,.hljs .language-php .hljs-literal{color:var(--neon-bunny-literal)}.hljs.language-php .hljs-number,.hljs .language-php .hljs-number{color:var(--neon-bunny-number)}.hljs.language-php .hljs-operator,.hljs .language-php .hljs-operator{color:var(--neon-bunny-operator)}.hljs.language-php .hljs-params,.hljs .language-php .hljs-params{color:var(--neon-bunny-php-params)}.hljs.language-php .hljs-params .hljs-variable,.hljs .language-php .hljs-params .hljs-variable{color:var(--neon-bunny-php-params-variable)}.hljs.language-php .hljs-property,.hljs .language-php .hljs-property{color:var(--neon-bunny-property)}.hljs.language-php .hljs-punctuation,.hljs .language-php .hljs-punctuation{color:var(--neon-bunny-punctuation)}.hljs.language-php .hljs-regexp,.hljs .language-php .hljs-regexp{color:var(--neon-bunny-regex)}.hljs.language-php .hljs-string,.hljs .language-php .hljs-string{color:var(--neon-bunny-php-string)}.hljs.language-php .hljs-subst,.hljs .language-php .hljs-subst{color:var(--neon-bunny-subst)}.hljs.language-php .hljs-symbol,.hljs .language-php .hljs-symbol{color:var(--neon-bunny-symbol)}.hljs.language-php .hljs-title,.hljs .language-php .hljs-title{color:var(--neon-bunny-php-title)}.hljs.language-php .hljs-title.class_,.hljs .language-php .hljs-title.class_{color:var(--neon-bunny-php-title-class)}.hljs.language-php .hljs-title.class_.inherited__,.hljs .language-php .hljs-title.class_.inherited__{color:var(--neon-bunny-title-class-inherited)}.hljs.language-php .hljs-title.function_,.hljs .language-php .hljs-title.function_{color:var(--neon-bunny-title-function)}.hljs.language-php .hljs-title.function_.invoke__,.hljs .language-php .hljs-title.function_.invoke__{color:var(--neon-bunny-php-title-function-invoke)}.hljs.language-php .hljs-type,.hljs .language-php .hljs-type{color:var(--neon-bunny-type)}.hljs.language-php .hljs-variable,.hljs .language-php .hljs-variable{color:var(--neon-bunny-php-variable)}.hljs.language-php .hljs-variable.constant_,.hljs .language-php .hljs-variable.constant_{color:var(--neon-bunny-variable-constant)}.hljs.language-php .hljs-variable.language_,.hljs .language-php .hljs-variable.language_{color:var(--neon-bunny-variable-language)}.hljs.language-php .hljs-meta,.hljs .language-php .hljs-meta{color:var(--neon-bunny-php-meta)}.hljs.language-php .hljs-meta.prompt_,.hljs .language-php .hljs-meta.prompt_{color:var(--neon-bunny-meta-prompt)}.hljs.language-php .hljs-meta.keyword_,.hljs .language-php .hljs-meta.keyword_{color:var(--neon-bunny-meta-keyword)}.hljs.language-php .hljs-meta.string_,.hljs .language-php .hljs-meta.string_{color:var(--neon-bunny-meta-string)}.hljs.language-php .hljs-attr,.hljs .language-php .hljs-attr{color:var(--neon-bunny-attr)}.hljs.language-php .hljs-attribute,.hljs .language-php .hljs-attribute{color:var(--neon-bunny-attribute)}.hljs.language-php .hljs-name,.hljs .language-php .hljs-name{color:var(--neon-bunny-name)}.hljs.language-php .hljs-section,.hljs .language-php .hljs-section{color:var(--neon-bunny-section)}.hljs.language-php .hljs-tag,.hljs .language-php .hljs-tag{color:var(--neon-bunny-tag)}.hljs.language-php .hljs-bullet,.hljs .language-php .hljs-bullet{color:var(--neon-bunny-bullet)}.hljs.language-php .hljs-code,.hljs .language-php .hljs-code{color:var(--neon-bunny-code)}.hljs.language-php .hljs-emphasis,.hljs .language-php .hljs-emphasis{color:var(--neon-bunny-emphasis);font-style:italic}.hljs.language-php .hljs-formula,.hljs .language-php .hljs-formula{color:var(--neon-bunny-formula)}.hljs.language-php .hljs-link,.hljs .language-php .hljs-link{color:var(--neon-bunny-link)}.hljs.language-php .hljs-quote,.hljs .language-php .hljs-quote{color:var(--neon-bunny-quote)}.hljs.language-php .hljs-strong,.hljs .language-php .hljs-strong{color:var(--neon-bunny-strong);font-weight:bold}.hljs.language-php .hljs-selector,.hljs .language-php .hljs-selector{color:var(--neon-bunny-selector)}.hljs.language-php .hljs-selector-attr,.hljs .language-php .hljs-selector-attr{color:var(--neon-bunny-selector-attr)}.hljs.language-php .hljs-selector-class,.hljs .language-php .hljs-selector-class{color:var(--neon-bunny-selector-class)}.hljs.language-php .hljs-selector-id,.hljs .language-php .hljs-selector-id{color:var(--neon-bunny-selector-id)}.hljs.language-php .hljs-selector-pseudo,.hljs .language-php .hljs-selector-pseudo{color:var(--neon-bunny-selector-pseudo)}.hljs.language-php .hljs-selector-tag,.hljs .language-php .hljs-selector-tag{color:var(--neon-bunny-selector-tag)}.hljs.language-php .hljs-addition,.hljs .language-php .hljs-addition{color:var(--neon-bunny-addition)}.hljs.language-php .hljs-deletion,.hljs .language-php .hljs-deletion{color:var(--neon-bunny-deletion)}\n')}if(!e&&!s)return _a(),t.appendChild(document.createTextNode(a)),void l.appendChild(t);const r=xa(n,la.value);if(void 0!==H.value.cssPath)c=H.value.cssPath;else switch(n){case"highlightjs":h=`${r}.min.css`,c=`${Q.value}/${h}`;break;case"prism":h=`${r}.css`,c="default"===la.value?`${X.value}/prism.css`:la.value.includes("themes-")?`${Z.value}/${h}`:`${X.value}/prism-${h}`;break;default:h=""}Y.value=!0,fetch(c).then((a=>a.text())).then((a=>{_a(),t.appendChild(document.createTextNode(a)),l.appendChild(t),Y.value=!1})).catch((a=>{H.value.highlightjs}))}function wa(){const n=a().device;K.value="mobile"===n.type}function xa(a,n,l=!1){let t=n;return"prism"===a&&(t=t.replace("themes-","prism-"),t=t.replace("prism-prism-","prism-"),t=t.replace("theme-prism-","theme-"),l&&(t=t.replace("prism-prism-",""),t=t.replace("prism-",""))),"highlightjs"===a&&(t=t.replace("base16-","base16/")),t}function _a(){const a=document.querySelectorAll('[data-theme="v-code-block--theme-sheet"]');a.length>0&&a.forEach((a=>{a.remove()}))}function qa(){(function(){if("json"===H.value.lang){const a=H.value.code.toString();return function(a){try{return JSON.parse(a),!0}catch{return!1}}(a)?void(O.value=JSON.stringify(JSON.parse(a),null,H.value.indent)):(H.value.lang="text",void(O.value=a))}O.value=H.value.code})(),H.value.highlightjs&&z((()=>import("./highlight.js-Ds8M-WS2.js").then((a=>a.i))),__vite__mapDeps([0,1,2]),import.meta.url).then((a=>{I=a.default,I.registerLanguage("plain",A),aa.value=I.highlight(O.value,{language:H.value.lang}).value})).catch((a=>{})),H.value.prismjs&&z((()=>import("./prismjs-BGP89_QJ.js").then((a=>a.p))),__vite__mapDeps([3,1,2]),import.meta.url).then((a=>{R=a.default,aa.value=R.highlight(O.value,R.languages[H.value.lang],H.value.lang)})).catch((a=>{}))}function za(){q("run")}return r(F,(()=>{H.value={...F,...D},H.value.code&&qa(),(H.value.theme||H.value.prismjs||H.value.highlightjs)&&(ka(),la.value=H.value.theme,fa()),H.value.copyText&&(U.value=H.value.copyText),H.value.runText&&(na.value=H.value.runText)})),g((()=>{U.value=H.value.copyText,na.value=H.value.runText,ka()})),b((()=>{la.value=H.value.theme,fa(),wa(),qa()})),window.addEventListener("orientationchange",(()=>{wa()})),(a,n)=>(u(),c("div",{class:x(h(ra))},[h(sa)||h(ha)||h(B).label||h(B).tabs?(u(),c("div",{key:0,class:"v-code-block--header",style:p(h(pa))},[j("div",{class:x(["v-code-block--label v-code-block--pb-1",h(ua)])},[h(B).label?d(a.$slots,"label",m(k({key:0},{copyCode:ya,copyStatus:h(G),runCode:za})),void 0,!0):(u(),c(y,{key:1},[f(w(h(sa)),1)],64))],2),j("div",{class:"v-code-block--tabs",style:p(h(ma))},[h(B).tabs?d(a.$slots,"tabs",m(k({key:0},{copyCode:ya,copyStatus:h(G),runCode:za})),void 0,!0):(u(),c(y,{key:1},[h(ia)&&h(ha)?(u(),c("div",{key:0,class:x(["v-code-block--tab",h(va)]),onClick:ya},[j("div",M,[h(oa)?(u(),_(E,{key:0,class:x(["v-code-block--button-copy-icon",h(ba)]),icon:h(G)},null,8,["class","icon"])):v("",!0),f(" "+w(h(U)),1)])],2)):v("",!0),h(ea)&&h(ha)&&!h(K)?(u(),c("div",{key:1,class:x(["v-code-block--tab v-code-block--tab-run",h(va)]),onClick:za},[j("div",N,w(h(na)),1)],2)):v("",!0)],64))],4)],4)):v("",!0),j("div",W,[j("div",{class:x(["v-code-block--code-copy-button",h(ga)]),onClick:ya},[h(B).copyButton?d(a.$slots,"copyButton",m(k({key:0},{copyStatus:h(G)})),void 0,!0):(u(),c(y,{key:1},[h(ta)?(u(),_(E,{key:0,class:x(["v-code-block--button-copy-icon",h(ba)]),icon:h(G)},null,8,["class","icon"])):v("",!0)],64))],2),j("pre",k(a.$attrs,{class:`language-${h(H).lang}`,style:h(da)}),[f("\t\t"),a.prismPlugin?(u(),c("code",{key:0,class:x(`language-${h(H).lang} ${h(H).browserWindow?"v-code-block--code-browser":""} ${h(H).highlightjs?"hljs":""}`),style:p(h(ja)),textContent:w(h(ca))},null,14,P)):(u(),c("code",{key:1,class:x(`language-${h(H).lang} ${h(H).browserWindow?"v-code-block--code-browser":""} ${h(H).highlightjs?"hljs":""}`),style:p(h(ja)),innerHTML:h(aa)},null,14,L)),f("\n\t")],16)])],2))}}));Object.freeze(Object.defineProperty({__proto__:null,default:H},Symbol.toStringTag,{value:"Module"}));const V=Symbol();!function(){try{if(typeof document<"u"){var a=document.createElement("style");a.appendChild(document.createTextNode(':root{--v-cb-blue: 206 80% 39%;--v-cb-blue-hex: #146eb4;--v-cb-blue-rgb: 20, 110, 180;--v-cb-primary: var(--v-cb-blue);--v-cb-primary-hex: var(--v-cb-blue-hex);--v-cb-primary-rgb: var(--v-cb-blue-rgb);--v-cb-green: 120 61% 34%;--v-cb-green-hex: #228b22;--v-cb-green-rgb: 34, 139, 34;--v-cb-success: var(--v-cb-green);--v-cb-success-hex: var(--v-cb-green-hex);--v-cb-success-rgb: var(--v-cb-green-rgb);--v-cb-red: 0 68% 42%;--v-cb-red-hex: #b22222;--v-cb-red-rgb: 178, 34, 34;--v-cb-danger: var(--v-cb-red);--v-cb-danger-hex: var(--v-cb-red-hex);--v-cb-danger-rgb: var(--v-cb-red-rgb);--v-cb-tab-neon-bunny-bkg: 0 0% 0%;--v-cb-tab-neon-bunny-text: 0 0% 100%;--v-cb-tab-neon-bunny-icon: 207 100% 52%;--v-cb-tab-neon-bunny-icon-success: 119 100% 51%;--v-cb-tab-neon-bunny-icon-failed: 3 100% 58%;--v-cb-tab-neon-bunny-carrot-bkg: 0 0% 0%;--v-cb-tab-neon-bunny-carrot-text: 0 0% 100%;--v-cb-tab-neon-bunny-carrot-icon: 292 100% 50%;--v-cb-tab-neon-bunny-carrot-icon-success: 119 100% 51%;--v-cb-tab-neon-bunny-carrot-icon-failed: 3 100% 58%;--v-cb-tab-prism-coy-bkg: 205 59% 50%;--v-cb-tab-prism-coy-text: 0 0% 0%;--v-cb-tab-prism-coy-icon: 195 76% 41%;--v-cb-tab-prism-coy-icon-success: 80 100% 30%;--v-cb-tab-prism-coy-icon-failed: 0 64% 48%;--v-cb-tab-prism-dark-bkg: 30 20% 25%;--v-cb-tab-prism-dark-text: 0 0% 100%;--v-cb-tab-prism-dark-border: 30 20% 40%;--v-cb-tab-prism-dark-icon: 40 90% 60%;--v-cb-tab-prism-dark-icon-success: 75 70% 60%;--v-cb-tab-prism-dark-icon-failed: 0 100% 50%;--v-cb-tab-prism-default-bkg: 24 20% 95%;--v-cb-tab-prism-default-text: 0 0% 0%;--v-cb-tab-prism-default-icon: 198 100% 33%;--v-cb-tab-prism-default-icon-success: 80 100% 30%;--v-cb-tab-prism-default-icon-failed: 348 68% 58%;--v-cb-tab-prism-funky-bkg: 0 0% 80%;--v-cb-tab-prism-funky-text: 0 0% 100%;--v-cb-tab-prism-funky-dark: 0 0% 0%;--v-cb-tab-prism-funky-icon: 328 100% 54%;--v-cb-tab-prism-funky-icon-success: 80 61% 50%;--v-cb-tab-prism-funky-icon-failed: 0 100% 50%;--v-cb-tab-prism-okaidia-bkg: 70 8% 15%;--v-cb-tab-prism-okaidia-text: 0 0% 100%;--v-cb-tab-prism-okaidia-icon: 190 81% 67%;--v-cb-tab-prism-okaidia-icon-success: 80 76% 53%;--v-cb-tab-prism-okaidia-icon-failed: 338 95% 56%;--v-cb-tab-prism-solarizedlight-bkg: 44 87% 94%;--v-cb-tab-prism-solarizedlight-text: 196 13% 45%;--v-cb-tab-prism-solarizedlight-icon: 175 59% 40%;--v-cb-tab-prism-solarizedlight-icon-success: 68 100% 30%;--v-cb-tab-prism-solarizedlight-icon-failed: 18 80% 44%;--v-cb-tab-prism-tomorrow-bkg: 0 0% 18%;--v-cb-tab-prism-tomorrow-text: 0 0% 80%;--v-cb-tab-prism-tomorrow-icon: 299 34% 70%;--v-cb-tab-prism-tomorrow-icon-success: 143 39% 64%;--v-cb-tab-prism-tomorrow-icon-failed: 358 65% 68%;--v-cb-tab-prism-twilight-bkg: 0 0% 8%;--v-cb-tab-prism-twilight-text: 0 0% 80%;--v-cb-tab-prism-twilight-border: 0 0% 33%;--v-cb-tab-prism-twilight-icon: 53 89% 79%;--v-cb-tab-prism-twilight-icon-success: 76 21% 52%;--v-cb-tab-prism-twilight-icon-failed: 14 58% 55%;--v-cb-tab-prism-themes-night-owl: 207 95% 8%;--v-cb-tab-prism-themes-night-owl-text: 217 34% 88%;--v-cb-tab-prism-themes-night-owl-icon: 169 56% 68%;--v-cb-tab-prism-themes-night-owl-icon-success: 84 62% 63%;--v-cb-tab-prism-themes-night-owl-icon-failed: 350 100% 67%;--v-cb-tab-highlightjs-a11y-dark-bkg: 0 0% 17%;--v-cb-tab-highlightjs-a11y-dark-text: 60 30% 96%;--v-cb-tab-highlightjs-a11y-dark-icon: 180 100% 44%;--v-cb-tab-highlightjs-a11y-dark-icon-success: 80 75% 55%;--v-cb-tab-highlightjs-a11y-dark-icon-failed: 17 100% 74%;--v-cb-tab-highlightjs-a11y-light-bkg: 0 0% 100%;--v-cb-tab-highlightjs-a11y-light-text: 0 0% 33%;--v-cb-tab-highlightjs-a11y-light-icon: 280 60% 39%;--v-cb-tab-highlightjs-a11y-light-icon-success: 120 100% 25%;--v-cb-tab-highlightjs-a11y-light-icon-failed: 2 80% 47%;--v-cb-tab-highlightjs-agate-bkg: 0 0% 20%;--v-cb-tab-highlightjs-agate-text: 0 0% 100%;--v-cb-tab-highlightjs-agate-icon: 197 93% 83%;--v-cb-tab-highlightjs-agate-icon-success: 136 53% 66%;--v-cb-tab-highlightjs-agate-icon-failed: 0 56% 61%;--v-cb-tab-highlightjs-an-old-hope-bkg: 228 8% 12%;--v-cb-tab-highlightjs-an-old-hope-text: 219 13% 78%;--v-cb-tab-highlightjs-an-old-hope-icon: 195 63% 58%;--v-cb-tab-highlightjs-an-old-hope-icon-success: 116 75% 62%;--v-cb-tab-highlightjs-an-old-hope-icon-failed: 352 81% 58%;--v-cb-tab-highlightjs-androidstudio-bkg: 210 7% 17%;--v-cb-tab-highlightjs-androidstudio-text: 211 20% 72%;--v-cb-tab-highlightjs-androidstudio-icon: 206 38% 57%;--v-cb-tab-highlightjs-androidstudio-icon-success: 108 28% 46%;--v-cb-tab-highlightjs-androidstudio-icon-failed: 27 61% 50%;--v-cb-tab-highlightjs-arduino-light-bkg: 0 0% 100%;--v-cb-tab-highlightjs-arduino-light-text: 198 11% 30%;--v-cb-tab-highlightjs-arduino-light-icon: 182 100% 31%;--v-cb-tab-highlightjs-arduino-light-icon-success: 182 100% 19%;--v-cb-tab-highlightjs-arduino-light-icon-failed: 24 100% 41%;--v-cb-tab-highlightjs-arta-bkg: 0 0% 13%;--v-cb-tab-highlightjs-arta-text: 0 0% 67%;--v-cb-tab-highlightjs-arta-icon: 202 85% 56%;--v-cb-tab-highlightjs-arta-icon-success: 150 100% 40%;--v-cb-tab-highlightjs-arta-icon-failed: 330 83% 40%;--v-cb-tab-highlightjs-ascetic-bkg: 0 0% 100%;--v-cb-tab-highlightjs-ascetic-text: 0 0% 0%;--v-cb-tab-highlightjs-ascetic-icon: 0 0% 53%;--v-cb-tab-highlightjs-ascetic-icon-success: var(--v-cb-success);--v-cb-tab-highlightjs-ascetic-icon-failed: var(--v-cb-failed);--v-cb-tab-highlightjs-atom-one-dark-reasonable-bkg: 220 13% 18%;--v-cb-tab-highlightjs-atom-one-dark-reasonable-text: 219 14% 71%;--v-cb-tab-highlightjs-atom-one-dark-reasonable-icon: 29 54% 61%;--v-cb-tab-highlightjs-atom-one-dark-reasonable-icon-success: 80 76% 53%;--v-cb-tab-highlightjs-atom-one-dark-reasonable-icon-failed: 338 95% 56%;--v-cb-tab-highlightjs-atom-one-dark-bkg: 220 13% 18%;--v-cb-tab-highlightjs-atom-one-dark-text: 219 14% 71%;--v-cb-tab-highlightjs-atom-one-dark-icon: 29 54% 61%;--v-cb-tab-highlightjs-atom-one-dark-icon-success: 95 38% 62%;--v-cb-tab-highlightjs-atom-one-dark-icon-failed: 355 65% 65%;--v-cb-tab-highlightjs-atom-one-light-bkg: 0 0% 98%;--v-cb-tab-highlightjs-atom-one-light-text: 228 8% 24%;--v-cb-tab-highlightjs-atom-one-light-icon: 41 99% 30%;--v-cb-tab-highlightjs-atom-one-light-icon-success: 119 34% 47%;--v-cb-tab-highlightjs-atom-one-light-icon-failed: 5 74% 59%;--v-cb-tab-highlightjs-base16-onedark-bkg: 220 13% 18%;--v-cb-tab-highlightjs-base16-onedark-text: 219 14% 71%;--v-cb-tab-highlightjs-base16-onedark-icon: 207 82% 66%;--v-cb-tab-highlightjs-base16-onedark-icon-success: 95 38% 62%;--v-cb-tab-highlightjs-base16-onedark-icon-failed: 5 48% 51%;--v-cb-tab-highlightjs-brown-paper-bkg: 35 22% 64%;--v-cb-tab-highlightjs-brown-paper-bkg-img: url(brown-papersq.png);--v-cb-tab-highlightjs-brown-paper-text: 233 32% 31%;--v-cb-tab-highlightjs-brown-paper-icon: 207 100% 30%;--v-cb-tab-highlightjs-brown-paper-icon-success: var(--v-cb-success);--v-cb-tab-highlightjs-brown-paper-icon-failed: 359 60% 31%;--v-cb-tab-highlightjs-codepen-embed-bkg: 0 0% 13%;--v-cb-tab-highlightjs-codepen-embed-text: 0 0% 100%;--v-cb-tab-highlightjs-codepen-embed-icon: 300 10% 57%;--v-cb-tab-highlightjs-codepen-embed-icon-success: 76 20% 52%;--v-cb-tab-highlightjs-codepen-embed-icon-failed: var(--v-cb-failed);--v-cb-tab-highlightjs-color-brewer-bkg: 0 0% 100%;--v-cb-tab-highlightjs-color-brewer-text: 0 0% 0%;--v-cb-tab-highlightjs-color-brewer-icon: 205 59% 47%;--v-cb-tab-highlightjs-color-brewer-icon-success: 138 54% 42%;--v-cb-tab-highlightjs-color-brewer-icon-failed: 20 89% 48%;--v-cb-tab-highlightjs-dark-bkg: 0 0% 19%;--v-cb-tab-highlightjs-dark-text: 0 0% 87%;--v-cb-tab-highlightjs-dark-icon: 0 56% 70%;--v-cb-tab-highlightjs-dark-icon-success: var(--v-cb-success);--v-cb-tab-highlightjs-dark-icon-failed: var(--v-cb-failed);--v-cb-tab-highlightjs-default-bkg: 0 0% 95%;--v-cb-tab-highlightjs-default-text: 0 0% 27%;--v-cb-tab-highlightjs-default-icon: 0 0% 27%;--v-cb-tab-highlightjs-default-icon-success: 90 100% 23%;--v-cb-tab-highlightjs-default-icon-failed: 0 100% 27%;--v-cb-tab-highlightjs-devibeans-bkg: 0 0% 0%;--v-cb-tab-highlightjs-devibeans-text: 23 4% 62%;--v-cb-tab-highlightjs-devibeans-icon: 207 89% 68%;--v-cb-tab-highlightjs-devibeans-icon-success: 95 49% 36%;--v-cb-tab-highlightjs-devibeans-icon-failed: 1 83% 63%;--v-cb-tab-highlightjs-docco-bkg: 240 100% 99%;--v-cb-tab-highlightjs-docco-text: 0 0% 0%;--v-cb-tab-highlightjs-docco-icon: 195 100% 35%;--v-cb-tab-highlightjs-docco-icon-success: 150 43% 44%;--v-cb-tab-highlightjs-docco-icon-failed: 17 64% 36%;--v-cb-tab-highlightjs-far-bkg: 240 100% 25%;--v-cb-tab-highlightjs-far-text: 180 100% 50%;--v-cb-tab-highlightjs-far-icon: 60 100% 50%;--v-cb-tab-highlightjs-far-icon-success: 120 100% 50%;--v-cb-tab-highlightjs-far-icon-failed: 0 100% 50%;--v-cb-tab-highlightjs-felipec-bkg: 240 6% 13%;--v-cb-tab-highlightjs-felipec-text: 240 6% 87%;--v-cb-tab-highlightjs-felipec-icon: 210 75% 75%;--v-cb-tab-highlightjs-felipec-icon-success: 120 75% 75%;--v-cb-tab-highlightjs-felipec-icon-failed: 0 75% 75%;--v-cb-tab-highlightjs-foundation-bkg: 0 0% 93%;--v-cb-tab-highlightjs-foundation-text: 0 0% 0%;--v-cb-tab-highlightjs-foundation-icon: 180 100% 30%;--v-cb-tab-highlightjs-foundation-icon-success: 345 86% 47%;--v-cb-tab-highlightjs-foundation-icon-failed: 120 100% 23%;--v-cb-tab-highlightjs-github-dark-dimmed-bkg: 215 15% 16%;--v-cb-tab-highlightjs-github-dark-dimmed-text: 210 19% 73%;--v-cb-tab-highlightjs-github-dark-dimmed-icon: 207 100% 79%;--v-cb-tab-highlightjs-github-dark-dimmed-icon-success: 119 52% 70%;--v-cb-tab-highlightjs-github-dark-dimmed-icon-failed: 359 66% 28%;--v-cb-tab-highlightjs-github-dark-bkg: 216 28% 7%;--v-cb-tab-highlightjs-github-dark-text: 210 17% 82%;--v-cb-tab-highlightjs-github-dark-icon: 208 100% 74%;--v-cb-tab-highlightjs-github-dark-icon-success: 125 69% 70%;--v-cb-tab-highlightjs-github-dark-icon-failed: 4 100% 72%;--v-cb-tab-highlightjs-github-bkg: 0 0% 100%;--v-cb-tab-highlightjs-github-text: 210 12% 16%;--v-cb-tab-highlightjs-github-icon: 212 100% 39%;--v-cb-tab-highlightjs-github-icon-success: 134 60% 33%;--v-cb-tab-highlightjs-github-icon-failed: 354 66% 54%;--v-cb-tab-highlightjs-gml-bkg: 0 0% 13%;--v-cb-tab-highlightjs-gml-text: 0 0% 75%;--v-cb-tab-highlightjs-gml-icon: 60 100% 50%;--v-cb-tab-highlightjs-gml-icon-success: 121 73% 62%;--v-cb-tab-highlightjs-gml-icon-failed: 0 100% 75%;--v-cb-tab-highlightjs-googlecode-bkg: 0 0% 100%;--v-cb-tab-highlightjs-googlecode-text: 0 0% 0%;--v-cb-tab-highlightjs-googlecode-icon: 180 100% 20%;--v-cb-tab-highlightjs-googlecode-icon-success: 120 100% 27%;--v-cb-tab-highlightjs-googlecode-icon-failed: 0 100% 27%;--v-cb-tab-highlightjs-gradient-dark-bkg: 279 58% 34%;--v-cb-tab-highlightjs-gradient-dark-bkg-gradient: linear-gradient(160deg, #652487 0, #443ac3 35%, #0174b7 68%, #04988e 100%);--v-cb-tab-highlightjs-gradient-dark-text: 266 15% 91%;--v-cb-tab-highlightjs-gradient-dark-icon: 199 100% 61%;--v-cb-tab-highlightjs-gradient-dark-icon-success: 75 100% 81%;--v-cb-tab-highlightjs-gradient-dark-icon-failed: 29 100% 63%;--v-cb-tab-highlightjs-gradient-light-bkg: 293 100% 90%;--v-cb-tab-highlightjs-gradient-light-bkg-gradient: linear-gradient(295deg, #f9ccff 0, #e6bbf9 11%, #9ec6f9 32%, #55e6ee 60%, #91f5d1 74%, #f9ffbf 98%);--v-cb-tab-highlightjs-gradient-light-text: 256 94% 26%;--v-cb-tab-highlightjs-gradient-light-icon: 199 64% 41%;--v-cb-tab-highlightjs-gradient-light-icon-success: 149 93% 38%;--v-cb-tab-highlightjs-gradient-light-icon-failed: 19 98% 25%;--v-cb-tab-highlightjs-grayscale-bkg: 0 0% 100%;--v-cb-tab-highlightjs-grayscale-text: 0 0% 20%;--v-cb-tab-highlightjs-grayscale-icon: 0 0% 20%;--v-cb-tab-highlightjs-grayscale-icon-success: 0 0% 20%;--v-cb-tab-highlightjs-grayscale-icon-failed: 0 0% 20%;--v-cb-tab-highlightjs-hybrid-bkg: 210 6% 12%;--v-cb-tab-highlightjs-hybrid-text: 140 3% 78%;--v-cb-tab-highlightjs-hybrid-icon: 208 32% 63%;--v-cb-tab-highlightjs-hybrid-icon-success: 66 39% 57%;--v-cb-tab-highlightjs-hybrid-icon-failed: 0 50% 60%;--v-cb-tab-highlightjs-idea-bkg: 0 0% 100%;--v-cb-tab-highlightjs-idea-text: 0 0% 0%;--v-cb-tab-highlightjs-idea-icon: 240 100% 25%;--v-cb-tab-highlightjs-idea-icon-success: 120 60% 83%;--v-cb-tab-highlightjs-idea-icon-failed: 10 100% 87%;--v-cb-tab-highlightjs-intellij-light-bkg: 0 0% 100%;--v-cb-tab-highlightjs-intellij-light-text: 223 100% 35%;--v-cb-tab-highlightjs-intellij-light-icon: 294 80% 32%;--v-cb-tab-highlightjs-intellij-light-icon-success: 129 91% 26%;--v-cb-tab-highlightjs-intellij-light-icon-failed: var(--v-cb-failed);--v-cb-tab-highlightjs-ir-black-bkg: 0 0% 0%;--v-cb-tab-highlightjs-ir-black-text: 0 0% 97%;--v-cb-tab-highlightjs-ir-black-icon: 209 98% 79%;--v-cb-tab-highlightjs-ir-black-icon-success: 93 100% 69%;--v-cb-tab-highlightjs-ir-black-icon-failed: 301 100% 73%;--v-cb-tab-highlightjs-isbl-editor-dark-bkg: 0 0% 25%;--v-cb-tab-highlightjs-isbl-editor-dark-text: 0 0% 94%;--v-cb-tab-highlightjs-isbl-editor-dark-icon: 0 0% 94%;--v-cb-tab-highlightjs-isbl-editor-dark-icon-success: 90 100% 23%;--v-cb-tab-highlightjs-isbl-editor-dark-icon-failed: 13 76% 50%;--v-cb-tab-highlightjs-isbl-editor-light-bkg: 0 0% 100%;--v-cb-tab-highlightjs-isbl-editor-light-text: 0 0% 0%;--v-cb-tab-highlightjs-isbl-editor-light-icon: 240 100% 25%;--v-cb-tab-highlightjs-isbl-editor-light-icon-success: 90 100% 23%;--v-cb-tab-highlightjs-isbl-editor-light-icon-failed: 11 100% 49%;--v-cb-tab-highlightjs-kimbie-dark-bkg: 35 39% 10%;--v-cb-tab-highlightjs-kimbie-dark-text: 32 47% 68%;--v-cb-tab-highlightjs-kimbie-dark-icon: 356 19% 50%;--v-cb-tab-highlightjs-kimbie-dark-icon-success: 74 35% 45%;--v-cb-tab-highlightjs-kimbie-dark-icon-failed: 349 70% 54%;--v-cb-tab-highlightjs-kimbie-light-bkg: 35 83% 91%;--v-cb-tab-highlightjs-kimbie-light-text: 30 37% 38%;--v-cb-tab-highlightjs-kimbie-light-icon: 32 92% 58%;--v-cb-tab-highlightjs-kimbie-light-icon-success: 74 35% 45%;--v-cb-tab-highlightjs-kimbie-light-icon-failed: 349 70% 54%;--v-cb-tab-highlightjs-lightfair-bkg: 0 0% 100%;--v-cb-tab-highlightjs-lightfair-text: 0 0% 27%;--v-cb-tab-highlightjs-lightfair-icon: 217 89% 61%;--v-cb-tab-highlightjs-lightfair-icon-success: 180 69% 46%;--v-cb-tab-highlightjs-lightfair-icon-failed: 0 41% 56%;--v-cb-tab-highlightjs-lioshi-bkg: 0 0% 19%;--v-cb-tab-highlightjs-lioshi-text: 140 3% 78%;--v-cb-tab-highlightjs-lioshi-icon: 304 24% 66%;--v-cb-tab-highlightjs-lioshi-icon-success: 66 39% 57%;--v-cb-tab-highlightjs-lioshi-icon-failed: 0 50% 60%;--v-cb-tab-highlightjs-magula-bkg: 0 0% 96%;--v-cb-tab-highlightjs-magula-text: 0 0% 0%;--v-cb-tab-highlightjs-magula-icon: 240 100% 25%;--v-cb-tab-highlightjs-magula-icon-success: 120 100% 17%;--v-cb-tab-highlightjs-magula-icon-failed: 0 100% 27%;--v-cb-tab-highlightjs-mono-blue-bkg: 213 27% 94%;--v-cb-tab-highlightjs-mono-blue-text: 214 100% 11%;--v-cb-tab-highlightjs-mono-blue-icon: 215 100% 34%;--v-cb-tab-highlightjs-mono-blue-icon-success: var(--v-cb-success);--v-cb-tab-highlightjs-mono-blue-icon-failed: var(--v-cb-failed);--v-cb-tab-highlightjs-monokai-sublime-bkg: 72 7% 13%;--v-cb-tab-highlightjs-monokai-sublime-text: 60 30% 96%;--v-cb-tab-highlightjs-monokai-sublime-icon: 54 70% 68%;--v-cb-tab-highlightjs-monokai-sublime-icon-success: 80 76% 53%;--v-cb-tab-highlightjs-monokai-sublime-icon-failed: 338 95% 56%;--v-cb-tab-highlightjs-monokai-bkg: 70 8% 15%;--v-cb-tab-highlightjs-monokai-text: 0 0% 87%;--v-cb-tab-highlightjs-monokai-icon: 0 0% 87%;--v-cb-tab-highlightjs-monokai-icon-success: 80 76% 53%;--v-cb-tab-highlightjs-monokai-icon-failed: 338 95% 56%;--v-cb-tab-highlightjs-night-owl-bkg: 207 95% 8%;--v-cb-tab-highlightjs-night-owl-text: 217 34% 88%;--v-cb-tab-highlightjs-night-owl-icon: 276 68% 75%;--v-cb-tab-highlightjs-night-owl-icon-success: 84 62% 63%;--v-cb-tab-highlightjs-night-owl-icon-failed: 350 100% 67%;--v-cb-tab-highlightjs-nnfx-dark-bkg: 0 0% 20%;--v-cb-tab-highlightjs-nnfx-dark-text: 0 0% 100%;--v-cb-tab-highlightjs-nnfx-dark-icon: 270 50% 60%;--v-cb-tab-highlightjs-nnfx-dark-icon-success: 90 50% 60%;--v-cb-tab-highlightjs-nnfx-dark-icon-failed: 18 100% 43%;--v-cb-tab-highlightjs-nnfx-light-bkg: 0 0% 100%;--v-cb-tab-highlightjs-nnfx-light-text: 0 0% 0%;--v-cb-tab-highlightjs-nnfx-light-icon: 240 100% 50%;--v-cb-tab-highlightjs-nnfx-light-icon-success: 120 100% 23%;--v-cb-tab-highlightjs-nnfx-light-icon-failed: 120 100% 48%;--v-cb-tab-highlightjs-nord-bkg: 220 16% 22%;--v-cb-tab-highlightjs-nord-text: 210 34% 63%;--v-cb-tab-highlightjs-nord-icon: 179 25% 65%;--v-cb-tab-highlightjs-nord-icon-success: 92 28% 65%;--v-cb-tab-highlightjs-nord-icon-failed: 14 51% 63%;--v-cb-tab-highlightjs-obsidian-bkg: 210 7% 17%;--v-cb-tab-highlightjs-obsidian-text: 210 7% 89%;--v-cb-tab-highlightjs-obsidian-icon: 210 32% 55%;--v-cb-tab-highlightjs-obsidian-icon-success: 162 26% 64%;--v-cb-tab-highlightjs-obsidian-icon-failed: 30 100% 46%;--v-cb-tab-highlightjs-panda-syntax-dark-bkg: 200 3% 17%;--v-cb-tab-highlightjs-panda-syntax-dark-text: 0 0% 90%;--v-cb-tab-highlightjs-panda-syntax-dark-icon: 207 94% 62%;--v-cb-tab-highlightjs-panda-syntax-dark-icon-success: 171 95% 54%;--v-cb-tab-highlightjs-panda-syntax-dark-icon-failed: 342 100% 65%;--v-cb-tab-highlightjs-panda-syntax-light-bkg: 0 0% 90%;--v-cb-tab-highlightjs-panda-syntax-light-text: 200 3% 17%;--v-cb-tab-highlightjs-panda-syntax-light-icon: 207 57% 50%;--v-cb-tab-highlightjs-panda-syntax-light-icon-success: 171 81% 27%;--v-cb-tab-highlightjs-panda-syntax-light-icon-failed: 324 70% 50%;--v-cb-tab-highlightjs-paraiso-dark-bkg: 304 22% 15%;--v-cb-tab-highlightjs-paraiso-dark-text: 23 4% 62%;--v-cb-tab-highlightjs-paraiso-dark-icon: 45 99% 55%;--v-cb-tab-highlightjs-paraiso-dark-icon-success: 153 43% 50%;--v-cb-tab-highlightjs-paraiso-dark-icon-failed: 5 83% 64%;--v-cb-tab-highlightjs-paraiso-light-bkg: 69 24% 89%;--v-cb-tab-highlightjs-paraiso-light-text: 314 9% 28%;--v-cb-tab-highlightjs-paraiso-light-icon: 45 99% 55%;--v-cb-tab-highlightjs-paraiso-light-icon-success: 153 43% 50%;--v-cb-tab-highlightjs-paraiso-light-icon-failed: 5 83% 64%;--v-cb-tab-highlightjs-pojoaque-bkg: 72 11% 9%;--v-cb-tab-highlightjs-pojoaque-bkg-img: url(pojoaque.jpg) left top;--v-cb-tab-highlightjs-pojoaque-text: 50 52% 71%;--v-cb-tab-highlightjs-pojoaque-icon: 36 100% 62%;--v-cb-tab-highlightjs-pojoaque-icon-success: 149 32% 41%;--v-cb-tab-highlightjs-pojoaque-icon-failed: 1 71% 52%;--v-cb-tab-highlightjs-purebasic-bkg: 60 100% 94%;--v-cb-tab-highlightjs-purebasic-text: 0 0% 0%;--v-cb-tab-highlightjs-purebasic-icon: 210 100% 50%;--v-cb-tab-highlightjs-purebasic-icon-success: 180 100% 33%;--v-cb-tab-highlightjs-purebasic-icon-failed: 327 32% 43%;--v-cb-tab-highlightjs-qtcreator-dark-bkg: 0 0% 0%;--v-cb-tab-highlightjs-qtcreator-dark-text: 0 0% 67%;--v-cb-tab-highlightjs-qtcreator-dark-icon: 240 100% 77%;--v-cb-tab-highlightjs-qtcreator-dark-icon-success: var(--v-cb-success);--v-cb-tab-highlightjs-qtcreator-dark-icon-failed: 0 100% 67%;--v-cb-tab-highlightjs-qtcreator-light-bkg: 0 0% 100%;--v-cb-tab-highlightjs-qtcreator-light-text: 0 0% 0%;--v-cb-tab-highlightjs-qtcreator-light-icon: 240 100% 25%;--v-cb-tab-highlightjs-qtcreator-light-icon-success: 60 100% 25%;--v-cb-tab-highlightjs-qtcreator-light-icon-failed: 0 100% 25%;--v-cb-tab-highlightjs-rainbow-bkg: 180 1% 28%;--v-cb-tab-highlightjs-rainbow-text: 210 21% 85%;--v-cb-tab-highlightjs-rainbow-icon: 208 32% 63%;--v-cb-tab-highlightjs-rainbow-icon-success: 66 39% 57%;--v-cb-tab-highlightjs-rainbow-icon-failed: 1 71% 52%;--v-cb-tab-highlightjs-routeros-bkg: 0 0% 94%;--v-cb-tab-highlightjs-routeros-text: 0 0% 27%;--v-cb-tab-highlightjs-routeros-icon: 200 66% 36%;--v-cb-tab-highlightjs-routeros-icon-success: 115 100% 30%;--v-cb-tab-highlightjs-routeros-icon-failed: 0 100% 27%;--v-cb-tab-highlightjs-school-book-bkg: 59 79% 83%;--v-cb-tab-highlightjs-school-book-text: 84 62% 22%;--v-cb-tab-highlightjs-school-book-icon: 207 100% 30%;--v-cb-tab-highlightjs-school-book-icon-success: var(--v-cb-success);--v-cb-tab-highlightjs-school-book-icon-failed: 355 97% 46%;--v-cb-tab-highlightjs-shades-of-purple-bkg: 243 34% 25%;--v-cb-tab-highlightjs-shades-of-purple-text: 248 100% 94%;--v-cb-tab-highlightjs-shades-of-purple-icon: 38 100% 49%;--v-cb-tab-highlightjs-shades-of-purple-icon-success: 102 83% 45%;--v-cb-tab-highlightjs-shades-of-purple-icon-failed: 344 94% 69%;--v-cb-tab-highlightjs-srcery-bkg: 40 6% 10%;--v-cb-tab-highlightjs-srcery-text: 39 90% 88%;--v-cb-tab-highlightjs-srcery-icon: 41 96% 57%;--v-cb-tab-highlightjs-srcery-icon-success: 76 55% 48%;--v-cb-tab-highlightjs-srcery-icon-failed: 2 86% 55%;--v-cb-tab-highlightjs-stackoverflow-dark-bkg: 0 2% 11%;--v-cb-tab-highlightjs-stackoverflow-dark-text: 0 0% 100%;--v-cb-tab-highlightjs-stackoverflow-dark-icon: 207 42% 67%;--v-cb-tab-highlightjs-stackoverflow-dark-icon-success: 66 39% 57%;--v-cb-tab-highlightjs-stackoverflow-dark-icon-failed: 357 62% 66%;--v-cb-tab-highlightjs-stackoverflow-light-bkg: 0 0% 96%;--v-cb-tab-highlightjs-stackoverflow-light-text: 210 8% 20%;--v-cb-tab-highlightjs-stackoverflow-light-icon: 205 99% 29%;--v-cb-tab-highlightjs-stackoverflow-light-icon-success: 140 41% 31%;--v-cb-tab-highlightjs-stackoverflow-light-icon-failed: 360 62% 46%;--v-cb-tab-highlightjs-sunburst-bkg: 0 0% 0%;--v-cb-tab-highlightjs-sunburst-text: 0 0% 97%;--v-cb-tab-highlightjs-sunburst-icon: 214 100% 77%;--v-cb-tab-highlightjs-sunburst-icon-success: 101 45% 47%;--v-cb-tab-highlightjs-sunburst-icon-failed: 18 68% 64%;--v-cb-tab-highlightjs-tokyo-night-dark-bkg: 235 19% 13%;--v-cb-tab-highlightjs-tokyo-night-dark-text: 227 35% 71%;--v-cb-tab-highlightjs-tokyo-night-dark-icon: 261 85% 79%;--v-cb-tab-highlightjs-tokyo-night-dark-icon-success: 89 51% 61%;--v-cb-tab-highlightjs-tokyo-night-dark-icon-failed: 349 89% 72%;--v-cb-tab-highlightjs-tokyo-night-light-bkg: 230 8% 85%;--v-cb-tab-highlightjs-tokyo-night-light-text: 230 12% 38%;--v-cb-tab-highlightjs-tokyo-night-light-icon: 218 45% 37%;--v-cb-tab-highlightjs-tokyo-night-light-icon-success: 89 32% 28%;--v-cb-tab-highlightjs-tokyo-night-light-icon-failed: 348 35% 41%;--v-cb-tab-highlightjs-tomorrow-night-blue-bkg: 213 100% 16%;--v-cb-tab-highlightjs-tomorrow-night-blue-text: 0 0% 100%;--v-cb-tab-highlightjs-tomorrow-night-blue-icon: 282 100% 87%;--v-cb-tab-highlightjs-tomorrow-night-blue-icon-success: 87 72% 80%;--v-cb-tab-highlightjs-tomorrow-night-blue-icon-failed: 356 100% 81%;--v-cb-tab-highlightjs-tomorrow-night-bright-bkg: 0 0% 0%;--v-cb-tab-highlightjs-tomorrow-night-bright-text: 0 0% 92%;--v-cb-tab-highlightjs-tomorrow-night-bright-icon: 281 45% 72%;--v-cb-tab-highlightjs-tomorrow-night-bright-icon-success: 68 55% 54%;--v-cb-tab-highlightjs-tomorrow-night-bright-icon-failed: 358 62% 57%;--v-cb-tab-highlightjs-vs-bkg: 0 0% 100%;--v-cb-tab-highlightjs-vs-text: 0 0% 0%;--v-cb-tab-highlightjs-vs-icon: 240 100% 50%;--v-cb-tab-highlightjs-vs-icon-success: 120 100% 25%;--v-cb-tab-highlightjs-vs-icon-failed: 0 100% 50%;--v-cb-tab-highlightjs-vs2015-bkg: 0 0% 12%;--v-cb-tab-highlightjs-vs2015-text: 0 0% 86%;--v-cb-tab-highlightjs-vs2015-icon: 207 61% 59%;--v-cb-tab-highlightjs-vs2015-icon-success: 112 38% 47%;--v-cb-tab-highlightjs-vs2015-icon-failed: 0 0% 0%;--v-cb-tab-highlightjs-xcode-bkg: 0 0% 100%;--v-cb-tab-highlightjs-xcode-text: 0 0% 0%;--v-cb-tab-highlightjs-xcode-icon: 240 100% 53%;--v-cb-tab-highlightjs-xcode-icon-success: 120 100% 23%;--v-cb-tab-highlightjs-xcode-icon-failed: 1 80% 43%;--v-cb-tab-highlightjs-xt256-bkg: 0 0% 0%;--v-cb-tab-highlightjs-xt256-text: 0 0% 92%;--v-cb-tab-highlightjs-xt256-icon: 240 100% 50%;--v-cb-tab-highlightjs-xt256-icon-success: 120 100% 50%;--v-cb-tab-highlightjs-xt256-icon-failed: 0 100% 50%}.v-code-block{display:block;max-width:100%}.v-code-block--header{align-items:end;display:flex;justify-content:space-between;overflow:visible;position:relative;width:100%}.v-code-block--label{overflow:auto}.v-code-block--tabs{align-items:end;display:flex;justify-content:flex-end}.v-code-block--tab{align-items:center;border-radius:5px 5px 0 0;cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;padding:5px 15px;text-align:center;transition:background-color .35s ease;white-space:nowrap;width:fit-content}.v-code-block--tab svg{height:.85rem;width:.85rem}.v-code-block--code{position:relative;z-index:1}.v-code-block--code pre,.v-code-block--code pre[class*=language-]{margin-top:0}.v-code-block--code pre[class*=language-]:before,.v-code-block--code pre[class*=language-]:after{bottom:.95em}.v-code-block--code pre code{width:100%}.v-code-block--code-browser:before{background-image:url(\'data:image/svg+xml;utf8, \');background-position:.5em .5em;background-repeat:no-repeat;content:"";display:block;padding-right:10em;padding-top:3rem;width:100%}.v-code-block--code:hover .v-code-block--code-copy-button{opacity:1}.v-code-block--code-copy-button{align-items:center;color:#ccc;cursor:pointer;display:flex;fill:#ccc;height:1.5em;justify-content:center;opacity:0;position:absolute;right:.9rem;top:.7rem;transition:opacity .2s ease-in-out;width:auto;z-index:2}.v-code-block--code-copy-button:hover{opacity:1}.v-code-block--code-copy-button-persist{opacity:.5}.v-code-block--code-copy-button svg{height:1rem;width:1rem}.v-code-block--tab-prism-funky{background:url(\'data:image/svg+xml;charset=utf-8,%0D%0A%0D%0A%0D%0A<%2Fsvg>\');background-size:1em 1em}.v-code-block--tab-prism-neon-bunny,.v-code-block--tab-highlightjs-neon-bunny{background-color:hsl(var(--v-cb-tab-neon-bunny-bkg)/100%)!important;color:hsl(var(--v-cb-tab-neon-bunny-text))!important}.v-code-block--tab-prism-neon-bunny:hover,.v-code-block--tab-highlightjs-neon-bunny:hover{background-color:hsl(var(--v-cb-tab-neon-bunny-bkg)/50%)!important}.v-code-block--tab-prism-neon-bunny-icon,.v-code-block--tab-highlightjs-neon-bunny-icon{color:hsl(var(--v-cb-tab-neon-bunny-icon))!important;fill:hsl(var(--v-cb-tab-neon-bunny-icon))!important}.v-code-block--tab-prism-neon-bunny-icon-status-success,.v-code-block--tab-highlightjs-neon-bunny-icon-status-success{color:hsl(var(--v-cb-tab-neon-bunny-icon-success))!important;fill:hsl(var(--v-cb-tab-neon-bunny-icon-success))!important}.v-code-block--tab-prism-neon-bunny-icon-status-failed,.v-code-block--tab-highlightjs-neon-bunny-icon-status-failed{color:hsl(var(--v-cb-tab-neon-bunny-icon-failed))!important;fill:hsl(var(--v-cb-tab-neon-bunny-icon-failed))!important}.v-code-block--tab-prism-neon-bunny>div,.v-code-block--tab-highlightjs-neon-bunny>div{color:hsl(var(--v-cb-tab-neon-bunny-text))}.v-code-block--tab-prism-neon-bunny-carrot,.v-code-block--tab-highlightjs-neon-bunny-carrot{background-color:hsl(var(--v-cb-tab-neon-bunny-carrot-bkg)/100%)!important;color:hsl(var(--v-cb-tab-neon-bunny-carrot-text))!important}.v-code-block--tab-prism-neon-bunny-carrot:hover,.v-code-block--tab-highlightjs-neon-bunny-carrot:hover{background-color:hsl(var(--v-cb-tab-neon-bunny-carrot-bkg)/50%)!important}.v-code-block--tab-prism-neon-bunny-carrot-icon,.v-code-block--tab-highlightjs-neon-bunny-carrot-icon{color:hsl(var(--v-cb-tab-neon-bunny-carrot-icon))!important;fill:hsl(var(--v-cb-tab-neon-bunny-carrot-icon))!important}.v-code-block--tab-prism-neon-bunny-carrot-icon-status-success,.v-code-block--tab-highlightjs-neon-bunny-carrot-icon-status-success{color:hsl(var(--v-cb-tab-neon-bunny-carrot-icon-success))!important;fill:hsl(var(--v-cb-tab-neon-bunny-carrot-icon-success))!important}.v-code-block--tab-prism-neon-bunny-carrot-icon-status-failed,.v-code-block--tab-highlightjs-neon-bunny-carrot-icon-status-failed{color:hsl(var(--v-cb-tab-neon-bunny-carrot-icon-failed))!important;fill:hsl(var(--v-cb-tab-neon-bunny-carrot-icon-failed))!important}.v-code-block--tab-prism-neon-bunny-carrot>div,.v-code-block--tab-highlightjs-neon-bunny-carrot>div{color:hsl(var(--v-cb-tab-neon-bunny-carrot-text))}.v-code-block--tab-prism-coy{background-color:hsl(var(--v-cb-tab-prism-coy-bkg)/10%)!important;border-left:5px solid hsl(var(--v-cb-tab-prism-coy-bkg));border-radius:0}.v-code-block--tab-prism-coy:hover{background-color:hsl(var(--v-cb-tab-prism-coy-bkg)/20%)!important}.v-code-block--tab-prism-coy-icon{color:hsl(var(--v-cb-tab-prism-coy-icon))!important;fill:hsl(var(--v-cb-tab-prism-coy-icon))!important}.v-code-block--tab-prism-coy-icon-status-success{color:hsl(var(--v-cb-tab-prism-coy-icon-success))!important;fill:hsl(var(--v-cb-tab-prism-coy-icon-success))!important}.v-code-block--tab-prism-coy-icon-status-failed{color:hsl(var(--v-cb-tab-prism-coy-icon-failed))!important;fill:hsl(var(--v-cb-tab-prism-coy-icon-failed))!important}.v-code-block--tab-prism-coy>div{color:hsl(var(--v-cb-tab-prism-coy-text))}.v-code-block--tab-prism-dark{background-color:hsl(var(--v-cb-tab-prism-dark-bkg)/100%)!important;border-color:hsl(var(--v-cb-tab-prism-dark-border));border-style:solid;border-width:.3em .3em 0}.v-code-block--tab-prism-dark:hover{background-color:hsl(var(--v-cb-tab-prism-dark-border)/50%)!important}.v-code-block--tab-prism-dark-icon{color:hsl(var(--v-cb-tab-prism-dark-icon))!important;fill:hsl(var(--v-cb-tab-prism-dark-icon))!important}.v-code-block--tab-prism-dark-icon-status-success{color:hsl(var(--v-cb-tab-prism-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-prism-dark-icon-success))!important}.v-code-block--tab-prism-dark-icon-status-failed{color:hsl(var(--v-cb-tab-prism-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-prism-dark-icon-failed))!important}.v-code-block--tab-prism-dark>div{color:hsl(var(--v-cb-tab-prism-dark-text))}.v-code-block--tab-prism-default{background-color:hsl(var(--v-cb-tab-prism-default-bkg)/100%)!important}.v-code-block--tab-prism-default:hover{background-color:hsl(var(--v-cb-tab-prism-default-bkg)/50%)!important}.v-code-block--tab-prism-default-icon{color:hsl(var(--v-cb-tab-prism-default-icon))!important;fill:hsl(var(--v-cb-tab-prism-default-icon))!important}.v-code-block--tab-prism-default-icon-status-success{color:hsl(var(--v-cb-tab-prism-default-icon-success))!important;fill:hsl(var(--v-cb-tab-prism-default-icon-success))!important}.v-code-block--tab-prism-default-icon-status-failed{color:hsl(var(--v-cb-tab-prism-default-icon-failed))!important;fill:hsl(var(--v-cb-tab-prism-default-icon-failed))!important}.v-code-block--tab-prism-default>div{color:hsl(var(--v-cb-tab-prism-default-text))}.v-code-block--tab-prism-funky{background:url(\'data:image/svg+xml;charset=utf-8,%0D%0A%0D%0A%0D%0A<%2Fsvg>\');background-size:1em 1em}.v-code-block--tab-prism-funky:hover{background-color:hsl(var(--v-cb-tab-prism-funky-bkg))!important}.v-code-block--tab-prism-funky-icon{color:hsl(var(--v-cb-tab-prism-funky-icon))!important;fill:hsl(var(--v-cb-tab-prism-funky-icon))!important}.v-code-block--tab-prism-funky-icon-status-success{color:hsl(var(--v-cb-tab-prism-funky-icon-success))!important;fill:hsl(var(--v-cb-tab-prism-funky-icon-success))!important}.v-code-block--tab-prism-funky-icon-status-failed{color:hsl(var(--v-cb-tab-prism-funky-icon-failed))!important;fill:hsl(var(--v-cb-tab-prism-funky-icon-failed))!important}.v-code-block--tab-prism-funky>div{background-color:hsl(var(--v-cb-tab-prism-funky-dark))!important;color:hsl(var(--v-cb-tab-prism-funky-text))}.v-code-block--tab-prism-okaidia{background-color:hsl(var(--v-cb-tab-prism-okaidia-bkg)/100%)!important}.v-code-block--tab-prism-okaidia:hover{background-color:hsl(var(--v-cb-tab-prism-okaidia-bkg)/50%)!important}.v-code-block--tab-prism-okaidia-icon{color:hsl(var(--v-cb-tab-prism-okaidia-icon))!important;fill:hsl(var(--v-cb-tab-prism-okaidia-icon))!important}.v-code-block--tab-prism-okaidia-icon-status-success{color:hsl(var(--v-cb-tab-prism-okaidia-icon-success))!important;fill:hsl(var(--v-cb-tab-prism-okaidia-icon-success))!important}.v-code-block--tab-prism-okaidia-icon-status-failed{color:hsl(var(--v-cb-tab-prism-okaidia-icon-failed))!important;fill:hsl(var(--v-cb-tab-prism-okaidia-icon-failed))!important}.v-code-block--tab-prism-okaidia>div{color:hsl(var(--v-cb-tab-prism-okaidia-text))}.v-code-block--tab-prism-solarizedlight{background-color:hsl(var(--v-cb-tab-prism-solarizedlight-bkg)/100%)!important}.v-code-block--tab-prism-solarizedlight:hover{background-color:hsl(var(--v-cb-tab-prism-solarizedlight-bkg)/50%)!important}.v-code-block--tab-prism-solarizedlight-icon{color:hsl(var(--v-cb-tab-prism-solarizedlight-icon))!important;fill:hsl(var(--v-cb-tab-prism-solarizedlight-icon))!important}.v-code-block--tab-prism-solarizedlight-icon-status-success{color:hsl(var(--v-cb-tab-prism-solarizedlight-icon-success))!important;fill:hsl(var(--v-cb-tab-prism-solarizedlight-icon-success))!important}.v-code-block--tab-prism-solarizedlight-icon-status-failed{color:hsl(var(--v-cb-tab-prism-solarizedlight-icon-failed))!important;fill:hsl(var(--v-cb-tab-prism-solarizedlight-icon-failed))!important}.v-code-block--tab-prism-solarizedlight>div{color:hsl(var(--v-cb-tab-prism-solarizedlight-text))}.v-code-block--tab-prism-tomorrow{background-color:hsl(var(--v-cb-tab-prism-tomorrow-bkg)/100%)!important}.v-code-block--tab-prism-tomorrow:hover{background-color:hsl(var(--v-cb-tab-prism-tomorrow-bkg)/50%)!important}.v-code-block--tab-prism-tomorrow-icon{color:hsl(var(--v-cb-tab-prism-tomorrow-icon))!important;fill:hsl(var(--v-cb-tab-prism-tomorrow-icon))!important}.v-code-block--tab-prism-tomorrow-icon-status-success{color:hsl(var(--v-cb-tab-prism-tomorrow-icon-success))!important;fill:hsl(var(--v-cb-tab-prism-tomorrow-icon-success))!important}.v-code-block--tab-prism-tomorrow-icon-status-failed{color:hsl(var(--v-cb-tab-prism-tomorrow-icon-failed))!important;fill:hsl(var(--v-cb-tab-prism-tomorrow-icon-failed))!important}.v-code-block--tab-prism-tomorrow>div{color:hsl(var(--v-cb-tab-prism-tomorrow-text))}.v-code-block--tab-prism-twilight{background-color:hsl(var(--v-cb-tab-prism-twilight-bkg)/100%)!important;border-color:hsl(var(--v-cb-tab-prism-twilight-border));border-style:solid;border-width:.3em .3em 0}.v-code-block--tab-prism-twilight:hover{background-color:hsl(var(--v-cb-tab-prism-twilight-bkg)/50%)!important}.v-code-block--tab-prism-twilight-icon{color:hsl(var(--v-cb-tab-prism-twilight-icon))!important;fill:hsl(var(--v-cb-tab-prism-twilight-icon))!important}.v-code-block--tab-prism-twilight-icon-status-success{color:hsl(var(--v-cb-tab-prism-twilight-icon-success))!important;fill:hsl(var(--v-cb-tab-prism-twilight-icon-success))!important}.v-code-block--tab-prism-twilight-icon-status-failed{color:hsl(var(--v-cb-tab-prism-twilight-icon-failed))!important;fill:hsl(var(--v-cb-tab-prism-twilight-icon-failed))!important}.v-code-block--tab-prism-twilight>div{color:hsl(var(--v-cb-tab-prism-twilight-text))}.v-code-block--tab-prism-themes-night-owl{background-color:hsl(var(--v-cb-tab-prism-themes-night-owl)/100%)!important}.v-code-block--tab-prism-themes-night-owl:hover{background-color:hsl(var(--v-cb-tab-prism-themes-night-owl)/50%)!important}.v-code-block--tab-prism-themes-night-owl-icon{color:hsl(var(--v-cb-tab-prism-themes-night-owl-icon))!important;fill:hsl(var(--v-cb-tab-prism-themes-night-owl-icon))!important}.v-code-block--tab-prism-themes-night-owl-icon-status-success{color:hsl(var(--v-cb-tab-prism-themes-night-owl-icon-success))!important;fill:hsl(var(--v-cb-tab-prism-themes-night-owl-icon-success))!important}.v-code-block--tab-prism-themes-night-owl-icon-status-failed{color:hsl(var(--v-cb-tab-prism-themes-night-owl-icon-failed))!important;fill:hsl(var(--v-cb-tab-prism-themes-night-owl-icon-failed))!important}.v-code-block--tab-prism-themes-night-owl>div{color:hsl(var(--v-cb-tab-prism-themes-night-owl-text))}.v-code-block--tab-highlightjs-brown-paper{background-color:var(--v-cb-tab-highlightjs-brown-paper-bkg);background-image:var(--v-cb-tab-highlightjs-brown-paper-bkg-img)}.v-code-block--tab-highlightjs-brown-paper:hover{background-color:hsl(var(--v-cb-tab-highlightjs-brown-paper-bkg))!important}.v-code-block--tab-highlightjs-brown-paper-icon{color:hsl(var(--v-cb-tab-highlightjs-brown-paper-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-brown-paper-icon))!important}.v-code-block--tab-highlightjs-brown-paper-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-brown-paper-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-brown-paper-icon-success))!important}.v-code-block--tab-highlightjs-brown-paper-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-brown-paper-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-brown-paper-icon-failed))!important}.v-code-block--tab-highlightjs-brown-paper>div{color:hsl(var(--v-cb-tab-highlightjs-brown-paper-text))}.v-code-block--tab-highlightjs-gradient-dark{background:var(--v-cb-tab-highlightjs-gradient-dark-bkg-gradient);background-color:var(--v-cb-tab-highlightjs-gradient-dark-bkg)}.v-code-block--tab-highlightjs-gradient-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-gradient-dark-bkg))!important}.v-code-block--tab-highlightjs-gradient-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-gradient-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-gradient-dark-icon))!important}.v-code-block--tab-highlightjs-gradient-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-gradient-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-gradient-dark-icon-success))!important}.v-code-block--tab-highlightjs-gradient-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-gradient-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-gradient-dark-icon-failed))!important}.v-code-block--tab-highlightjs-gradient-dark>div{color:hsl(var(--v-cb-tab-highlightjs-gradient-dark-text))}.v-code-block--tab-highlightjs-gradient-light{background:var(--v-cb-tab-highlightjs-gradient-light-bkg-gradient);background-color:var(--v-cb-tab-highlightjs-gradient-light-bkg)}.v-code-block--tab-highlightjs-gradient-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-gradient-light-bkg))!important}.v-code-block--tab-highlightjs-gradient-light-icon{color:hsl(var(--v-cb-tab-highlightjs-gradient-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-gradient-light-icon))!important}.v-code-block--tab-highlightjs-gradient-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-gradient-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-gradient-light-icon-success))!important}.v-code-block--tab-highlightjs-gradient-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-gradient-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-gradient-light-icon-failed))!important}.v-code-block--tab-highlightjs-gradient-light>div{color:hsl(var(--v-cb-tab-highlightjs-gradient-light-text))}.v-code-block--tab-highlightjs-pojoaque{background:var(--v-cb-tab-highlightjs-pojoaque-bkg-img);background-color:var(--v-cb-tab-highlightjs-pojoaque-bkg)}.v-code-block--tab-highlightjs-pojoaque:hover{background-color:hsl(var(--v-cb-tab-highlightjs-pojoaque-bkg))!important}.v-code-block--tab-highlightjs-pojoaque-icon{color:hsl(var(--v-cb-tab-highlightjs-pojoaque-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-pojoaque-icon))!important}.v-code-block--tab-highlightjs-pojoaque-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-pojoaque-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-v-icon-success))!important}.v-code-block--tab-highlightjs-pojoaque-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-pojoaque-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-pojoaque-icon-failed))!important}.v-code-block--tab-highlightjs-pojoaque>div{color:hsl(var(--v-cb-tab-highlightjs-pojoaque-text))}.v-code-block--tab-highlightjs-default{background-color:hsl(var(--v-cb-tab-highlightjs-default-bkg)/100%)!important}.v-code-block--tab-highlightjs-default:hover{background-color:hsl(var(--v-cb-tab-highlightjs-default-bkg)/50%)!important}.v-code-block--tab-highlightjs-default-icon{color:hsl(var(--v-cb-tab-highlightjs-default-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-default-icon))!important}.v-code-block--tab-highlightjs-default-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-default-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-default-icon-success))!important}.v-code-block--tab-highlightjs-default-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-default-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-default-icon-failed))!important}.v-code-block--tab-highlightjs-default>div{color:hsl(var(--v-cb-tab-highlightjs-default-text))}.v-code-block--tab-highlightjs-a11y-dark{background-color:hsl(var(--v-cb-tab-highlightjs-a11y-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-a11y-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-a11y-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-a11y-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-a11y-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-a11y-dark-icon))!important}.v-code-block--tab-highlightjs-a11y-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-a11y-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-a11y-dark-icon-success))!important}.v-code-block--tab-highlightjs-a11y-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-a11y-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-a11y-dark-icon-failed))!important}.v-code-block--tab-highlightjs-a11y-dark>div{color:hsl(var(--v-cb-tab-highlightjs-a11y-dark-text))}.v-code-block--tab-highlightjs-a11y-light{background-color:hsl(var(--v-cb-tab-highlightjs-a11y-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-a11y-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-a11y-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-a11y-light-icon{color:hsl(var(--v-cb-tab-highlightjs-a11y-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-a11y-light-icon))!important}.v-code-block--tab-highlightjs-a11y-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-a11y-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-a11y-light-icon-success))!important}.v-code-block--tab-highlightjs-a11y-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-a11y-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-a11y-light-icon-failed))!important}.v-code-block--tab-highlightjs-a11y-light>div{color:hsl(var(--v-cb-tab-highlightjs-a11y-light-text))}.v-code-block--tab-highlightjs-agate{background-color:hsl(var(--v-cb-tab-highlightjs-agate-bkg)/100%)!important}.v-code-block--tab-highlightjs-agate:hover{background-color:hsl(var(--v-cb-tab-highlightjs-agate-bkg)/50%)!important}.v-code-block--tab-highlightjs-agate-icon{color:hsl(var(--v-cb-tab-highlightjs-agate-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-agate-icon))!important}.v-code-block--tab-highlightjs-agate-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-agate-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-agate-icon-success))!important}.v-code-block--tab-highlightjs-agate-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-agate-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-agate-icon-failed))!important}.v-code-block--tab-highlightjs-agate>div{color:hsl(var(--v-cb-tab-highlightjs-agate-text))}.v-code-block--tab-highlightjs-an-old-hope{background-color:hsl(var(--v-cb-tab-highlightjs-an-old-hope-bkg)/100%)!important}.v-code-block--tab-highlightjs-an-old-hope:hover{background-color:hsl(var(--v-cb-tab-highlightjs-an-old-hope-bkg)/50%)!important}.v-code-block--tab-highlightjs-an-old-hope-icon{color:hsl(var(--v-cb-tab-highlightjs-an-old-hope-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-an-old-hope-icon))!important}.v-code-block--tab-highlightjs-an-old-hope-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-an-old-hope-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-an-old-hope-icon-success))!important}.v-code-block--tab-highlightjs-an-old-hope-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-an-old-hope-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-an-old-hope-icon-failed))!important}.v-code-block--tab-highlightjs-an-old-hope>div{color:hsl(var(--v-cb-tab-highlightjs-an-old-hope-text))}.v-code-block--tab-highlightjs-androidstudio{background-color:hsl(var(--v-cb-tab-highlightjs-androidstudio-bkg)/100%)!important}.v-code-block--tab-highlightjs-androidstudio:hover{background-color:hsl(var(--v-cb-tab-highlightjs-androidstudio-bkg)/50%)!important}.v-code-block--tab-highlightjs-androidstudio-icon{color:hsl(var(--v-cb-tab-highlightjs-androidstudio-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-androidstudio-icon))!important}.v-code-block--tab-highlightjs-androidstudio-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-androidstudio-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-androidstudio-icon-success))!important}.v-code-block--tab-highlightjs-androidstudio-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-androidstudio-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-androidstudio-icon-failed))!important}.v-code-block--tab-highlightjs-androidstudio>div{color:hsl(var(--v-cb-tab-highlightjs-androidstudio-text))}.v-code-block--tab-highlightjs-arduino-light{background-color:hsl(var(--v-cb-tab-highlightjs-arduino-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-arduino-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-arduino-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-arduino-light-icon{color:hsl(var(--v-cb-tab-highlightjs-arduino-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-arduino-light-icon))!important}.v-code-block--tab-highlightjs-arduino-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-arduino-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-arduino-light-icon-success))!important}.v-code-block--tab-highlightjs-arduino-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-arduino-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-arduino-light-icon-failed))!important}.v-code-block--tab-highlightjs-arduino-light>div{color:hsl(var(--v-cb-tab-highlightjs-arduino-light-text))}.v-code-block--tab-highlightjs-arta{background-color:hsl(var(--v-cb-tab-highlightjs-arta-bkg)/100%)!important}.v-code-block--tab-highlightjs-arta:hover{background-color:hsl(var(--v-cb-tab-highlightjs-arta-bkg)/50%)!important}.v-code-block--tab-highlightjs-arta-icon{color:hsl(var(--v-cb-tab-highlightjs-arta-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-arta-icon))!important}.v-code-block--tab-highlightjs-arta-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-arta-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-arta-icon-success))!important}.v-code-block--tab-highlightjs-arta-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-arta-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-arta-icon-failed))!important}.v-code-block--tab-highlightjs-arta>div{color:hsl(var(--v-cb-tab-highlightjs-arta-text))}.v-code-block--tab-highlightjs-ascetic{background-color:hsl(var(--v-cb-tab-highlightjs-ascetic-bkg)/100%)!important}.v-code-block--tab-highlightjs-ascetic:hover{background-color:hsl(var(--v-cb-tab-highlightjs-ascetic-bkg)/50%)!important}.v-code-block--tab-highlightjs-ascetic-icon{color:hsl(var(--v-cb-tab-highlightjs-ascetic-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-ascetic-icon))!important}.v-code-block--tab-highlightjs-ascetic-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-ascetic-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-ascetic-icon-success))!important}.v-code-block--tab-highlightjs-ascetic-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-ascetic-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-ascetic-icon-failed))!important}.v-code-block--tab-highlightjs-ascetic>div{color:hsl(var(--v-cb-tab-highlightjs-ascetic-text))}.v-code-block--tab-highlightjs-atom-one-dark-reasonable{background-color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-reasonable-bkg)/100%)!important}.v-code-block--tab-highlightjs-atom-one-dark-reasonable:hover{background-color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-reasonable-bkg)/50%)!important}.v-code-block--tab-highlightjs-atom-one-dark-reasonable-icon{color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-reasonable-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-reasonable-icon))!important}.v-code-block--tab-highlightjs-atom-one-dark-reasonable-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-reasonable-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-reasonable-icon-success))!important}.v-code-block--tab-highlightjs-atom-one-dark-reasonable-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-reasonable-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-reasonable-icon-failed))!important}.v-code-block--tab-highlightjs-atom-one-dark-reasonable>div{color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-reasonable-text))}.v-code-block--tab-highlightjs-atom-one-dark{background-color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-atom-one-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-atom-one-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-icon))!important}.v-code-block--tab-highlightjs-atom-one-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-icon-success))!important}.v-code-block--tab-highlightjs-atom-one-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-icon-failed))!important}.v-code-block--tab-highlightjs-atom-one-dark>div{color:hsl(var(--v-cb-tab-highlightjs-atom-one-dark-text))}.v-code-block--tab-highlightjs-atom-one-light{background-color:hsl(var(--v-cb-tab-highlightjs-atom-one-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-atom-one-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-atom-one-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-atom-one-light-icon{color:hsl(var(--v-cb-tab-highlightjs-atom-one-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-atom-one-light-icon))!important}.v-code-block--tab-highlightjs-atom-one-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-atom-one-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-atom-one-light-icon-success))!important}.v-code-block--tab-highlightjs-atom-one-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-atom-one-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-atom-one-light-icon-failed))!important}.v-code-block--tab-highlightjs-atom-one-light>div{color:hsl(var(--v-cb-tab-highlightjs-atom-one-light-text))}.v-code-block--tab-highlightjs-codepen-embed{background-color:hsl(var(--v-cb-tab-highlightjs-codepen-embed-bkg)/100%)!important}.v-code-block--tab-highlightjs-codepen-embed:hover{background-color:hsl(var(--v-cb-tab-highlightjs-codepen-embed-bkg)/50%)!important}.v-code-block--tab-highlightjs-codepen-embed-icon{color:hsl(var(--v-cb-tab-highlightjs-codepen-embed-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-codepen-embed-icon))!important}.v-code-block--tab-highlightjs-codepen-embed-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-codepen-embed-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-codepen-embed-icon-success))!important}.v-code-block--tab-highlightjs-codepen-embed-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-codepen-embed-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-codepen-embed-icon-failed))!important}.v-code-block--tab-highlightjs-codepen-embed>div{color:hsl(var(--v-cb-tab-highlightjs-codepen-embed-text))}.v-code-block--tab-highlightjs-color-brewer{background-color:hsl(var(--v-cb-tab-highlightjs-color-brewer-bkg)/100%)!important}.v-code-block--tab-highlightjs-color-brewer:hover{background-color:hsl(var(--v-cb-tab-highlightjs-color-brewer-bkg)/50%)!important}.v-code-block--tab-highlightjs-color-brewer-icon{color:hsl(var(--v-cb-tab-highlightjs-color-brewer-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-color-brewer-icon))!important}.v-code-block--tab-highlightjs-color-brewer-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-color-brewer-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-color-brewer-icon-success))!important}.v-code-block--tab-highlightjs-color-brewer-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-color-brewer-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-color-brewer-icon-failed))!important}.v-code-block--tab-highlightjs-color-brewer>div{color:hsl(var(--v-cb-tab-highlightjs-color-brewer-text))}.v-code-block--tab-highlightjs-dark{background-color:hsl(var(--v-cb-tab-highlightjs-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-dark-icon))!important}.v-code-block--tab-highlightjs-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-dark-icon-success))!important}.v-code-block--tab-highlightjs-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-dark-icon-failed))!important}.v-code-block--tab-highlightjs-dark>div{color:hsl(var(--v-cb-tab-highlightjs-dark-text))}.v-code-block--tab-highlightjs-devibeans{background-color:hsl(var(--v-cb-tab-highlightjs-devibeans-bkg)/100%)!important}.v-code-block--tab-highlightjs-devibeans:hover{background-color:hsl(var(--v-cb-tab-highlightjs-devibeans-bkg)/50%)!important}.v-code-block--tab-highlightjs-devibeans-icon{color:hsl(var(--v-cb-tab-highlightjs-devibeans-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-devibeans-icon))!important}.v-code-block--tab-highlightjs-devibeans-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-devibeans-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-devibeans-icon-success))!important}.v-code-block--tab-highlightjs-devibeans-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-devibeans-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-devibeans-icon-failed))!important}.v-code-block--tab-highlightjs-devibeans>div{color:hsl(var(--v-cb-tab-highlightjs-devibeans-text))}.v-code-block--tab-highlightjs-docco{background-color:hsl(var(--v-cb-tab-highlightjs-docco-bkg)/100%)!important}.v-code-block--tab-highlightjs-docco:hover{background-color:hsl(var(--v-cb-tab-highlightjs-docco-bkg)/50%)!important}.v-code-block--tab-highlightjs-docco-icon{color:hsl(var(--v-cb-tab-highlightjs-docco-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-docco-icon))!important}.v-code-block--tab-highlightjs-docco-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-docco-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-docco-icon-success))!important}.v-code-block--tab-highlightjs-docco-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-docco-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-docco-icon-failed))!important}.v-code-block--tab-highlightjs-docco>div{color:hsl(var(--v-cb-tab-highlightjs-docco-text))}.v-code-block--tab-highlightjs-far{background-color:hsl(var(--v-cb-tab-highlightjs-far-bkg)/100%)!important}.v-code-block--tab-highlightjs-far:hover{background-color:hsl(var(--v-cb-tab-highlightjs-far-bkg)/50%)!important}.v-code-block--tab-highlightjs-far-icon{color:hsl(var(--v-cb-tab-highlightjs-far-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-far-icon))!important}.v-code-block--tab-highlightjs-far-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-far-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-far-icon-success))!important}.v-code-block--tab-highlightjs-far-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-far-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-far-icon-failed))!important}.v-code-block--tab-highlightjs-far>div{color:hsl(var(--v-cb-tab-highlightjs-far-text))}.v-code-block--tab-highlightjs-felipec{background-color:hsl(var(--v-cb-tab-highlightjs-felipec-bkg)/100%)!important}.v-code-block--tab-highlightjs-felipec:hover{background-color:hsl(var(--v-cb-tab-highlightjs-felipec-bkg)/50%)!important}.v-code-block--tab-highlightjs-felipec-icon{color:hsl(var(--v-cb-tab-highlightjs-felipec-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-felipec-icon))!important}.v-code-block--tab-highlightjs-felipec-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-felipec-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-felipec-icon-success))!important}.v-code-block--tab-highlightjs-felipec-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-felipec-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-felipec-icon-failed))!important}.v-code-block--tab-highlightjs-felipec>div{color:hsl(var(--v-cb-tab-highlightjs-felipec-text))}.v-code-block--tab-highlightjs-foundation{background-color:hsl(var(--v-cb-tab-highlightjs-foundation-bkg)/100%)!important}.v-code-block--tab-highlightjs-foundation:hover{background-color:hsl(var(--v-cb-tab-highlightjs-foundation-bkg)/50%)!important}.v-code-block--tab-highlightjs-foundation-icon{color:hsl(var(--v-cb-tab-highlightjs-foundation-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-foundation-icon))!important}.v-code-block--tab-highlightjs-foundation-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-foundation-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-foundation-icon-success))!important}.v-code-block--tab-highlightjs-foundation-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-foundation-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-foundation-icon-failed))!important}.v-code-block--tab-highlightjs-foundation>div{color:hsl(var(--v-cb-tab-highlightjs-foundation-text))}.v-code-block--tab-highlightjs-github-dark-dimmed{background-color:hsl(var(--v-cb-tab-highlightjs-github-dark-dimmed-bkg)/100%)!important}.v-code-block--tab-highlightjs-github-dark-dimmed:hover{background-color:hsl(var(--v-cb-tab-highlightjs-github-dark-dimmed-bkg)/50%)!important}.v-code-block--tab-highlightjs-github-dark-dimmed-icon{color:hsl(var(--v-cb-tab-highlightjs-github-dark-dimmed-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-github-dark-dimmed-icon))!important}.v-code-block--tab-highlightjs-github-dark-dimmed-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-github-dark-dimmed-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-github-dark-dimmed-icon-success))!important}.v-code-block--tab-highlightjs-github-dark-dimmed-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-github-dark-dimmed-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-github-dark-dimmed-icon-failed))!important}.v-code-block--tab-highlightjs-github-dark-dimmed>div{color:hsl(var(--v-cb-tab-highlightjs-github-dark-dimmed-text))}.v-code-block--tab-highlightjs-github-dark{background-color:hsl(var(--v-cb-tab-highlightjs-github-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-github-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-github-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-github-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-github-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-github-dark-icon))!important}.v-code-block--tab-highlightjs-github-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-github-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-github-dark-icon-success))!important}.v-code-block--tab-highlightjs-github-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-github-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-github-dark-icon-failed))!important}.v-code-block--tab-highlightjs-github-dark>div{color:hsl(var(--v-cb-tab-highlightjs-github-dark-text))}.v-code-block--tab-highlightjs-github{background-color:hsl(var(--v-cb-tab-highlightjs-github-bkg)/100%)!important}.v-code-block--tab-highlightjs-github:hover{background-color:hsl(var(--v-cb-tab-highlightjs-github-bkg)/50%)!important}.v-code-block--tab-highlightjs-github-icon{color:hsl(var(--v-cb-tab-highlightjs-github-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-github-icon))!important}.v-code-block--tab-highlightjs-github-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-github-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-github-icon-success))!important}.v-code-block--tab-highlightjs-github-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-github-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-github-icon-failed))!important}.v-code-block--tab-highlightjs-github>div{color:hsl(var(--v-cb-tab-highlightjs-github-text))}.v-code-block--tab-highlightjs-gml{background-color:hsl(var(--v-cb-tab-highlightjs-gml-bkg)/100%)!important}.v-code-block--tab-highlightjs-gml:hover{background-color:hsl(var(--v-cb-tab-highlightjs-gml-bkg)/50%)!important}.v-code-block--tab-highlightjs-gml-icon{color:hsl(var(--v-cb-tab-highlightjs-gml-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-gml-icon))!important}.v-code-block--tab-highlightjs-gml-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-gml-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-gml-icon-success))!important}.v-code-block--tab-highlightjs-gml-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-gml-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-gml-icon-failed))!important}.v-code-block--tab-highlightjs-gml>div{color:hsl(var(--v-cb-tab-highlightjs-gml-text))}.v-code-block--tab-highlightjs-googlecode{background-color:hsl(var(--v-cb-tab-highlightjs-googlecode-bkg)/100%)!important}.v-code-block--tab-highlightjs-googlecode:hover{background-color:hsl(var(--v-cb-tab-highlightjs-googlecode-bkg)/50%)!important}.v-code-block--tab-highlightjs-googlecode-icon{color:hsl(var(--v-cb-tab-highlightjs-googlecode-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-googlecode-icon))!important}.v-code-block--tab-highlightjs-googlecode-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-googlecode-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-googlecode-icon-success))!important}.v-code-block--tab-highlightjs-googlecode-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-googlecode-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-googlecode-icon-failed))!important}.v-code-block--tab-highlightjs-googlecode>div{color:hsl(var(--v-cb-tab-highlightjs-googlecode-text))}.v-code-block--tab-highlightjs-grayscale{background-color:hsl(var(--v-cb-tab-highlightjs-grayscale-bkg)/100%)!important}.v-code-block--tab-highlightjs-grayscale:hover{background-color:hsl(var(--v-cb-tab-highlightjs-grayscale-bkg)/50%)!important}.v-code-block--tab-highlightjs-grayscale-icon{color:hsl(var(--v-cb-tab-highlightjs-grayscale-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-grayscale-icon))!important}.v-code-block--tab-highlightjs-grayscale-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-grayscale-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-grayscale-icon-success))!important}.v-code-block--tab-highlightjs-grayscale-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-grayscale-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-grayscale-icon-failed))!important}.v-code-block--tab-highlightjs-grayscale>div{color:hsl(var(--v-cb-tab-highlightjs-grayscale-text))}.v-code-block--tab-highlightjs-hybrid{background-color:hsl(var(--v-cb-tab-highlightjs-hybrid-bkg)/100%)!important}.v-code-block--tab-highlightjs-hybrid:hover{background-color:hsl(var(--v-cb-tab-highlightjs-hybrid-bkg)/50%)!important}.v-code-block--tab-highlightjs-hybrid-icon{color:hsl(var(--v-cb-tab-highlightjs-hybrid-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-hybrid-icon))!important}.v-code-block--tab-highlightjs-hybrid-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-hybrid-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-hybrid-icon-success))!important}.v-code-block--tab-highlightjs-hybrid-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-hybrid-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-hybrid-icon-failed))!important}.v-code-block--tab-highlightjs-hybrid>div{color:hsl(var(--v-cb-tab-highlightjs-hybrid-text))}.v-code-block--tab-highlightjs-idea{background-color:hsl(var(--v-cb-tab-highlightjs-idea-bkg)/100%)!important}.v-code-block--tab-highlightjs-idea:hover{background-color:hsl(var(--v-cb-tab-highlightjs-idea-bkg)/50%)!important}.v-code-block--tab-highlightjs-idea-icon{color:hsl(var(--v-cb-tab-highlightjs-idea-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-idea-icon))!important}.v-code-block--tab-highlightjs-idea-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-idea-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-idea-icon-success))!important}.v-code-block--tab-highlightjs-idea-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-idea-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-idea-icon-failed))!important}.v-code-block--tab-highlightjs-idea>div{color:hsl(var(--v-cb-tab-highlightjs-idea-text))}.v-code-block--tab-highlightjs-intellij-light{background-color:hsl(var(--v-cb-tab-highlightjs-intellij-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-intellij-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-intellij-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-intellij-light-icon{color:hsl(var(--v-cb-tab-highlightjs-intellij-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-intellij-light-icon))!important}.v-code-block--tab-highlightjs-intellij-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-intellij-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-intellij-light-icon-success))!important}.v-code-block--tab-highlightjs-intellij-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-intellij-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-intellij-light-icon-failed))!important}.v-code-block--tab-highlightjs-intellij-light>div{color:hsl(var(--v-cb-tab-highlightjs-intellij-light-text))}.v-code-block--tab-highlightjs-ir-black{background-color:hsl(var(--v-cb-tab-highlightjs-ir-black-bkg)/100%)!important}.v-code-block--tab-highlightjs-ir-black:hover{background-color:hsl(var(--v-cb-tab-highlightjs-ir-black-bkg)/50%)!important}.v-code-block--tab-highlightjs-ir-black-icon{color:hsl(var(--v-cb-tab-highlightjs-ir-black-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-ir-black-icon))!important}.v-code-block--tab-highlightjs-ir-black-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-ir-black-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-ir-black-icon-success))!important}.v-code-block--tab-highlightjs-ir-black-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-ir-black-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-ir-black-icon-failed))!important}.v-code-block--tab-highlightjs-ir-black>div{color:hsl(var(--v-cb-tab-highlightjs-ir-black-text))}.v-code-block--tab-highlightjs-isbl-editor-dark{background-color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-isbl-editor-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-isbl-editor-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-isbl-editor-dark-icon))!important}.v-code-block--tab-highlightjs-isbl-editor-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-isbl-editor-dark-icon-success))!important}.v-code-block--tab-highlightjs-isbl-editor-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-isbl-editor-dark-icon-failed))!important}.v-code-block--tab-highlightjs-isbl-editor-dark>div{color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-dark-text))}.v-code-block--tab-highlightjs-isbl-editor-light{background-color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-isbl-editor-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-isbl-editor-light-icon{color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-isbl-editor-light-icon))!important}.v-code-block--tab-highlightjs-isbl-editor-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-isbl-editor-light-icon-success))!important}.v-code-block--tab-highlightjs-isbl-editor-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-isbl-editor-light-icon-failed))!important}.v-code-block--tab-highlightjs-isbl-editor-light>div{color:hsl(var(--v-cb-tab-highlightjs-isbl-editor-light-text))}.v-code-block--tab-highlightjs-kimbie-dark{background-color:hsl(var(--v-cb-tab-highlightjs-kimbie-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-kimbie-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-kimbie-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-kimbie-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-kimbie-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-kimbie-dark-icon))!important}.v-code-block--tab-highlightjs-kimbie-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-kimbie-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-kimbie-dark-icon-success))!important}.v-code-block--tab-highlightjs-kimbie-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-kimbie-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-kimbie-dark-icon-failed))!important}.v-code-block--tab-highlightjs-kimbie-dark>div{color:hsl(var(--v-cb-tab-highlightjs-kimbie-dark-text))}.v-code-block--tab-highlightjs-kimbie-light{background-color:hsl(var(--v-cb-tab-highlightjs-kimbie-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-kimbie-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-kimbie-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-kimbie-light-icon{color:hsl(var(--v-cb-tab-highlightjs-kimbie-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-kimbie-light-icon))!important}.v-code-block--tab-highlightjs-kimbie-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-kimbie-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-kimbie-light-icon-success))!important}.v-code-block--tab-highlightjs-kimbie-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-kimbie-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-kimbie-light-icon-failed))!important}.v-code-block--tab-highlightjs-kimbie-light>div{color:hsl(var(--v-cb-tab-highlightjs-kimbie-light-text))}.v-code-block--tab-highlightjs-lightfair{background-color:hsl(var(--v-cb-tab-highlightjs-lightfair-bkg)/100%)!important}.v-code-block--tab-highlightjs-lightfair:hover{background-color:hsl(var(--v-cb-tab-highlightjs-lightfair-bkg)/50%)!important}.v-code-block--tab-highlightjs-lightfair-icon{color:hsl(var(--v-cb-tab-highlightjs-lightfair-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-lightfair-icon))!important}.v-code-block--tab-highlightjs-lightfair-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-lightfair-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-lightfair-icon-success))!important}.v-code-block--tab-highlightjs-lightfair-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-lightfair-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-lightfair-icon-failed))!important}.v-code-block--tab-highlightjs-lightfair>div{color:hsl(var(--v-cb-tab-highlightjs-lightfair-text))}.v-code-block--tab-highlightjs-lioshi{background-color:hsl(var(--v-cb-tab-highlightjs-lioshi-bkg)/100%)!important}.v-code-block--tab-highlightjs-lioshi:hover{background-color:hsl(var(--v-cb-tab-highlightjs-lioshi-bkg)/50%)!important}.v-code-block--tab-highlightjs-lioshi-icon{color:hsl(var(--v-cb-tab-highlightjs-lioshi-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-lioshi-icon))!important}.v-code-block--tab-highlightjs-lioshi-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-lioshi-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-lioshi-icon-success))!important}.v-code-block--tab-highlightjs-lioshi-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-lioshi-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-lioshi-icon-failed))!important}.v-code-block--tab-highlightjs-lioshi>div{color:hsl(var(--v-cb-tab-highlightjs-lioshi-text))}.v-code-block--tab-highlightjs-magula{background-color:hsl(var(--v-cb-tab-highlightjs-magula-bkg)/100%)!important}.v-code-block--tab-highlightjs-magula:hover{background-color:hsl(var(--v-cb-tab-highlightjs-magula-bkg)/50%)!important}.v-code-block--tab-highlightjs-magula-icon{color:hsl(var(--v-cb-tab-highlightjs-magula-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-magula-icon))!important}.v-code-block--tab-highlightjs-magula-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-magula-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-magula-icon-success))!important}.v-code-block--tab-highlightjs-magula-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-magula-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-magula-icon-failed))!important}.v-code-block--tab-highlightjs-magula>div{color:hsl(var(--v-cb-tab-highlightjs-magula-text))}.v-code-block--tab-highlightjs-mono-blue{background-color:hsl(var(--v-cb-tab-highlightjs-mono-blue-bkg)/100%)!important}.v-code-block--tab-highlightjs-mono-blue:hover{background-color:hsl(var(--v-cb-tab-highlightjs-mono-blue-bkg)/50%)!important}.v-code-block--tab-highlightjs-mono-blue-icon{color:hsl(var(--v-cb-tab-highlightjs-mono-blue-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-mono-blue-icon))!important}.v-code-block--tab-highlightjs-mono-blue-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-mono-blue-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-mono-blue-icon-success))!important}.v-code-block--tab-highlightjs-mono-blue-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-mono-blue-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-mono-blue-icon-failed))!important}.v-code-block--tab-highlightjs-mono-blue>div{color:hsl(var(--v-cb-tab-highlightjs-mono-blue-text))}.v-code-block--tab-highlightjs-monokai-sublime{background-color:hsl(var(--v-cb-tab-highlightjs-monokai-sublime-bkg)/100%)!important}.v-code-block--tab-highlightjs-monokai-sublime:hover{background-color:hsl(var(--v-cb-tab-highlightjs-monokai-sublime-bkg)/50%)!important}.v-code-block--tab-highlightjs-monokai-sublime-icon{color:hsl(var(--v-cb-tab-highlightjs-monokai-sublime-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-monokai-sublime-icon))!important}.v-code-block--tab-highlightjs-monokai-sublime-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-monokai-sublime-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-monokai-sublime-icon-success))!important}.v-code-block--tab-highlightjs-monokai-sublime-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-monokai-sublime-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-monokai-sublime-icon-failed))!important}.v-code-block--tab-highlightjs-monokai-sublime>div{color:hsl(var(--v-cb-tab-highlightjs-monokai-sublime-text))}.v-code-block--tab-highlightjs-monokai{background-color:hsl(var(--v-cb-tab-highlightjs-monokai-bkg)/100%)!important}.v-code-block--tab-highlightjs-monokai:hover{background-color:hsl(var(--v-cb-tab-highlightjs-monokai-bkg)/50%)!important}.v-code-block--tab-highlightjs-monokai-icon{color:hsl(var(--v-cb-tab-highlightjs-monokai-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-monokai-icon))!important}.v-code-block--tab-highlightjs-monokai-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-monokai-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-monokai-icon-success))!important}.v-code-block--tab-highlightjs-monokai-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-monokai-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-monokai-icon-failed))!important}.v-code-block--tab-highlightjs-monokai>div{color:hsl(var(--v-cb-tab-highlightjs-monokai-text))}.v-code-block--tab-highlightjs-night-owl{background-color:hsl(var(--v-cb-tab-highlightjs-night-owl-bkg)/100%)!important}.v-code-block--tab-highlightjs-night-owl:hover{background-color:hsl(var(--v-cb-tab-highlightjs-night-owl-bkg)/50%)!important}.v-code-block--tab-highlightjs-night-owl-icon{color:hsl(var(--v-cb-tab-highlightjs-night-owl-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-night-owl-icon))!important}.v-code-block--tab-highlightjs-night-owl-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-night-owl-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-night-owl-icon-success))!important}.v-code-block--tab-highlightjs-night-owl-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-night-owl-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-night-owl-icon-failed))!important}.v-code-block--tab-highlightjs-night-owl>div{color:hsl(var(--v-cb-tab-highlightjs-night-owl-text))}.v-code-block--tab-highlightjs-nnfx-dark{background-color:hsl(var(--v-cb-tab-highlightjs-nnfx-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-nnfx-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-nnfx-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-nnfx-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-nnfx-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-nnfx-dark-icon))!important}.v-code-block--tab-highlightjs-nnfx-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-nnfx-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-nnfx-dark-icon-success))!important}.v-code-block--tab-highlightjs-nnfx-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-nnfx-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-nnfx-dark-icon-failed))!important}.v-code-block--tab-highlightjs-nnfx-dark>div{color:hsl(var(--v-cb-tab-highlightjs-nnfx-dark-text))}.v-code-block--tab-highlightjs-nnfx-light{background-color:hsl(var(--v-cb-tab-highlightjs-nnfx-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-nnfx-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-nnfx-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-nnfx-light-icon{color:hsl(var(--v-cb-tab-highlightjs-nnfx-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-nnfx-light-icon))!important}.v-code-block--tab-highlightjs-nnfx-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-nnfx-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-nnfx-light-icon-success))!important}.v-code-block--tab-highlightjs-nnfx-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-nnfx-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-nnfx-light-icon-failed))!important}.v-code-block--tab-highlightjs-nnfx-light>div{color:hsl(var(--v-cb-tab-highlightjs-nnfx-light-text))}.v-code-block--tab-highlightjs-nord{background-color:hsl(var(--v-cb-tab-highlightjs-nord-bkg)/100%)!important}.v-code-block--tab-highlightjs-nord:hover{background-color:hsl(var(--v-cb-tab-highlightjs-nord-bkg)/50%)!important}.v-code-block--tab-highlightjs-nord-icon{color:hsl(var(--v-cb-tab-highlightjs-nord-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-nord-icon))!important}.v-code-block--tab-highlightjs-nord-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-nord-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-nord-icon-success))!important}.v-code-block--tab-highlightjs-nord-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-nord-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-nord-icon-failed))!important}.v-code-block--tab-highlightjs-nord>div{color:hsl(var(--v-cb-tab-highlightjs-nord-text))}.v-code-block--tab-highlightjs-obsidian{background-color:hsl(var(--v-cb-tab-highlightjs-obsidian-bkg)/100%)!important}.v-code-block--tab-highlightjs-obsidian:hover{background-color:hsl(var(--v-cb-tab-highlightjs-obsidian-bkg)/50%)!important}.v-code-block--tab-highlightjs-obsidian-icon{color:hsl(var(--v-cb-tab-highlightjs-obsidian-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-obsidian-icon))!important}.v-code-block--tab-highlightjs-obsidian-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-obsidian-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-obsidian-icon-success))!important}.v-code-block--tab-highlightjs-obsidian-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-obsidian-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-obsidian-icon-failed))!important}.v-code-block--tab-highlightjs-obsidian>div{color:hsl(var(--v-cb-tab-highlightjs-obsidian-text))}.v-code-block--tab-highlightjs-panda-syntax-dark{background-color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-panda-syntax-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-panda-syntax-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-panda-syntax-dark-icon))!important}.v-code-block--tab-highlightjs-panda-syntax-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-panda-syntax-dark-icon-success))!important}.v-code-block--tab-highlightjs-panda-syntax-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-panda-syntax-dark-icon-failed))!important}.v-code-block--tab-highlightjs-panda-syntax-dark>div{color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-dark-text))}.v-code-block--tab-highlightjs-panda-syntax-light{background-color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-panda-syntax-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-panda-syntax-light-icon{color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-panda-syntax-light-icon))!important}.v-code-block--tab-highlightjs-panda-syntax-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-panda-syntax-light-icon-success))!important}.v-code-block--tab-highlightjs-panda-syntax-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-panda-syntax-light-icon-failed))!important}.v-code-block--tab-highlightjs-panda-syntax-light>div{color:hsl(var(--v-cb-tab-highlightjs-panda-syntax-light-text))}.v-code-block--tab-highlightjs-paraiso-dark{background-color:hsl(var(--v-cb-tab-highlightjs-paraiso-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-paraiso-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-paraiso-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-paraiso-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-paraiso-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-paraiso-dark-icon))!important}.v-code-block--tab-highlightjs-paraiso-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-paraiso-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-paraiso-dark-icon-success))!important}.v-code-block--tab-highlightjs-paraiso-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-paraiso-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-paraiso-dark-icon-failed))!important}.v-code-block--tab-highlightjs-paraiso-dark>div{color:hsl(var(--v-cb-tab-highlightjs-paraiso-dark-text))}.v-code-block--tab-highlightjs-paraiso-light{background-color:hsl(var(--v-cb-tab-highlightjs-paraiso-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-paraiso-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-paraiso-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-paraiso-light-icon{color:hsl(var(--v-cb-tab-highlightjs-paraiso-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-paraiso-light-icon))!important}.v-code-block--tab-highlightjs-paraiso-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-paraiso-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-paraiso-light-icon-success))!important}.v-code-block--tab-highlightjs-paraiso-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-paraiso-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-paraiso-light-icon-failed))!important}.v-code-block--tab-highlightjs-paraiso-light>div{color:hsl(var(--v-cb-tab-highlightjs-paraiso-light-text))}.v-code-block--tab-highlightjs-purebasic{background-color:hsl(var(--v-cb-tab-highlightjs-purebasic-bkg)/100%)!important}.v-code-block--tab-highlightjs-purebasic:hover{background-color:hsl(var(--v-cb-tab-highlightjs-purebasic-bkg)/50%)!important}.v-code-block--tab-highlightjs-purebasic-icon{color:hsl(var(--v-cb-tab-highlightjs-purebasic-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-purebasic-icon))!important}.v-code-block--tab-highlightjs-purebasic-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-purebasic-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-purebasic-icon-success))!important}.v-code-block--tab-highlightjs-purebasic-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-purebasic-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-purebasic-icon-failed))!important}.v-code-block--tab-highlightjs-purebasic>div{color:hsl(var(--v-cb-tab-highlightjs-purebasic-text))}.v-code-block--tab-highlightjs-qtcreator-dark{background-color:hsl(var(--v-cb-tab-highlightjs-qtcreator-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-qtcreator-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-qtcreator-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-qtcreator-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-qtcreator-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-qtcreator-dark-icon))!important}.v-code-block--tab-highlightjs-qtcreator-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-qtcreator-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-qtcreator-dark-icon-success))!important}.v-code-block--tab-highlightjs-qtcreator-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-qtcreator-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-qtcreator-dark-icon-failed))!important}.v-code-block--tab-highlightjs-qtcreator-dark>div{color:hsl(var(--v-cb-tab-highlightjs-qtcreator-dark-text))}.v-code-block--tab-highlightjs-qtcreator-light{background-color:hsl(var(--v-cb-tab-highlightjs-qtcreator-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-qtcreator-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-qtcreator-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-qtcreator-light-icon{color:hsl(var(--v-cb-tab-highlightjs-qtcreator-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-qtcreator-light-icon))!important}.v-code-block--tab-highlightjs-qtcreator-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-qtcreator-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-qtcreator-light-icon-success))!important}.v-code-block--tab-highlightjs-qtcreator-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-qtcreator-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-qtcreator-light-icon-failed))!important}.v-code-block--tab-highlightjs-qtcreator-light>div{color:hsl(var(--v-cb-tab-highlightjs-qtcreator-light-text))}.v-code-block--tab-highlightjs-rainbow{background-color:hsl(var(--v-cb-tab-highlightjs-rainbow-bkg)/100%)!important}.v-code-block--tab-highlightjs-rainbow:hover{background-color:hsl(var(--v-cb-tab-highlightjs-rainbow-bkg)/50%)!important}.v-code-block--tab-highlightjs-rainbow-icon{color:hsl(var(--v-cb-tab-highlightjs-rainbow-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-rainbow-icon))!important}.v-code-block--tab-highlightjs-rainbow-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-rainbow-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-rainbow-icon-success))!important}.v-code-block--tab-highlightjs-rainbow-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-rainbow-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-rainbow-icon-failed))!important}.v-code-block--tab-highlightjs-rainbow>div{color:hsl(var(--v-cb-tab-highlightjs-rainbow-text))}.v-code-block--tab-highlightjs-routeros{background-color:hsl(var(--v-cb-tab-highlightjs-routeros-bkg)/100%)!important}.v-code-block--tab-highlightjs-routeros:hover{background-color:hsl(var(--v-cb-tab-highlightjs-routeros-bkg)/50%)!important}.v-code-block--tab-highlightjs-routeros-icon{color:hsl(var(--v-cb-tab-highlightjs-routeros-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-routeros-icon))!important}.v-code-block--tab-highlightjs-routeros-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-routeros-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-routeros-icon-success))!important}.v-code-block--tab-highlightjs-routeros-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-routeros-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-routeros-icon-failed))!important}.v-code-block--tab-highlightjs-routeros>div{color:hsl(var(--v-cb-tab-highlightjs-routeros-text))}.v-code-block--tab-highlightjs-school-book{background-color:hsl(var(--v-cb-tab-highlightjs-school-book-bkg)/100%)!important}.v-code-block--tab-highlightjs-school-book:hover{background-color:hsl(var(--v-cb-tab-highlightjs-school-book-bkg)/50%)!important}.v-code-block--tab-highlightjs-school-book-icon{color:hsl(var(--v-cb-tab-highlightjs-school-book-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-school-book-icon))!important}.v-code-block--tab-highlightjs-school-book-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-school-book-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-school-book-icon-success))!important}.v-code-block--tab-highlightjs-school-book-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-school-book-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-school-book-icon-failed))!important}.v-code-block--tab-highlightjs-school-book>div{color:hsl(var(--v-cb-tab-highlightjs-school-book-text))}.v-code-block--tab-highlightjs-shades-of-purple{background-color:hsl(var(--v-cb-tab-highlightjs-shades-of-purple-bkg)/100%)!important}.v-code-block--tab-highlightjs-shades-of-purple:hover{background-color:hsl(var(--v-cb-tab-highlightjs-shades-of-purple-bkg)/50%)!important}.v-code-block--tab-highlightjs-shades-of-purple-icon{color:hsl(var(--v-cb-tab-highlightjs-shades-of-purple-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-shades-of-purple-icon))!important}.v-code-block--tab-highlightjs-shades-of-purple-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-shades-of-purple-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-shades-of-purple-icon-success))!important}.v-code-block--tab-highlightjs-shades-of-purple-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-shades-of-purple-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-shades-of-purple-icon-failed))!important}.v-code-block--tab-highlightjs-shades-of-purple>div{color:hsl(var(--v-cb-tab-highlightjs-shades-of-purple-text))}.v-code-block--tab-highlightjs-srcery{background-color:hsl(var(--v-cb-tab-highlightjs-srcery-bkg)/100%)!important}.v-code-block--tab-highlightjs-srcery:hover{background-color:hsl(var(--v-cb-tab-highlightjs-srcery-bkg)/50%)!important}.v-code-block--tab-highlightjs-srcery-icon{color:hsl(var(--v-cb-tab-highlightjs-srcery-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-srcery-icon))!important}.v-code-block--tab-highlightjs-srcery-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-srcery-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-srcery-icon-success))!important}.v-code-block--tab-highlightjs-srcery-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-srcery-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-srcery-icon-failed))!important}.v-code-block--tab-highlightjs-srcery>div{color:hsl(var(--v-cb-tab-highlightjs-srcery-text))}.v-code-block--tab-highlightjs-stackoverflow-dark{background-color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-stackoverflow-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-stackoverflow-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-stackoverflow-dark-icon))!important}.v-code-block--tab-highlightjs-stackoverflow-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-stackoverflow-dark-icon-success))!important}.v-code-block--tab-highlightjs-stackoverflow-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-stackoverflow-dark-icon-failed))!important}.v-code-block--tab-highlightjs-stackoverflow-dark>div{color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-dark-text))}.v-code-block--tab-highlightjs-stackoverflow-light{background-color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-stackoverflow-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-stackoverflow-light-icon{color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-stackoverflow-light-icon))!important}.v-code-block--tab-highlightjs-stackoverflow-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-stackoverflow-light-icon-success))!important}.v-code-block--tab-highlightjs-stackoverflow-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-stackoverflow-light-icon-failed))!important}.v-code-block--tab-highlightjs-stackoverflow-light>div{color:hsl(var(--v-cb-tab-highlightjs-stackoverflow-light-text))}.v-code-block--tab-highlightjs-sunburst{background-color:hsl(var(--v-cb-tab-highlightjs-sunburst-bkg)/100%)!important}.v-code-block--tab-highlightjs-sunburst:hover{background-color:hsl(var(--v-cb-tab-highlightjs-sunburst-bkg)/50%)!important}.v-code-block--tab-highlightjs-sunburst-icon{color:hsl(var(--v-cb-tab-highlightjs-sunburst-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-sunburst-icon))!important}.v-code-block--tab-highlightjs-sunburst-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-sunburst-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-sunburst-icon-success))!important}.v-code-block--tab-highlightjs-sunburst-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-sunburst-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-sunburst-icon-failed))!important}.v-code-block--tab-highlightjs-sunburst>div{color:hsl(var(--v-cb-tab-highlightjs-sunburst-text))}.v-code-block--tab-highlightjs-tokyo-night-dark{background-color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-dark-bkg)/100%)!important}.v-code-block--tab-highlightjs-tokyo-night-dark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-dark-bkg)/50%)!important}.v-code-block--tab-highlightjs-tokyo-night-dark-icon{color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-dark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-tokyo-night-dark-icon))!important}.v-code-block--tab-highlightjs-tokyo-night-dark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-dark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-tokyo-night-dark-icon-success))!important}.v-code-block--tab-highlightjs-tokyo-night-dark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-dark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-tokyo-night-dark-icon-failed))!important}.v-code-block--tab-highlightjs-tokyo-night-dark>div{color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-dark-text))}.v-code-block--tab-highlightjs-tokyo-night-light{background-color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-light-bkg)/100%)!important}.v-code-block--tab-highlightjs-tokyo-night-light:hover{background-color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-light-bkg)/50%)!important}.v-code-block--tab-highlightjs-tokyo-night-light-icon{color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-light-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-tokyo-night-light-icon))!important}.v-code-block--tab-highlightjs-tokyo-night-light-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-light-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-tokyo-night-light-icon-success))!important}.v-code-block--tab-highlightjs-tokyo-night-light-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-light-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-tokyo-night-light-icon-failed))!important}.v-code-block--tab-highlightjs-tokyo-night-light>div{color:hsl(var(--v-cb-tab-highlightjs-tokyo-night-light-text))}.v-code-block--tab-highlightjs-tomorrow-night-blue{background-color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-blue-bkg)/100%)!important}.v-code-block--tab-highlightjs-tomorrow-night-blue:hover{background-color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-blue-bkg)/50%)!important}.v-code-block--tab-highlightjs-tomorrow-night-blue-icon{color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-blue-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-blue-icon))!important}.v-code-block--tab-highlightjs-tomorrow-night-blue-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-blue-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-blue-icon-success))!important}.v-code-block--tab-highlightjs-tomorrow-night-blue-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-blue-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-blue-icon-failed))!important}.v-code-block--tab-highlightjs-tomorrow-night-blue>div{color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-blue-text))}.v-code-block--tab-highlightjs-tomorrow-night-bright{background-color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-bright-bkg)/100%)!important}.v-code-block--tab-highlightjs-tomorrow-night-bright:hover{background-color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-bright-bkg)/50%)!important}.v-code-block--tab-highlightjs-tomorrow-night-bright-icon{color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-bright-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-bright-icon))!important}.v-code-block--tab-highlightjs-tomorrow-night-bright-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-bright-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-bright-icon-success))!important}.v-code-block--tab-highlightjs-tomorrow-night-bright-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-bright-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-bright-icon-failed))!important}.v-code-block--tab-highlightjs-tomorrow-night-bright>div{color:hsl(var(--v-cb-tab-highlightjs-tomorrow-night-bright-text))}.v-code-block--tab-highlightjs-vs{background-color:hsl(var(--v-cb-tab-highlightjs-vs-bkg)/100%)!important}.v-code-block--tab-highlightjs-vs:hover{background-color:hsl(var(--v-cb-tab-highlightjs-vs-bkg)/50%)!important}.v-code-block--tab-highlightjs-vs-icon{color:hsl(var(--v-cb-tab-highlightjs-vs-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-vs-icon))!important}.v-code-block--tab-highlightjs-vs-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-vs-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-vs-icon-success))!important}.v-code-block--tab-highlightjs-vs-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-vs-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-vs-icon-failed))!important}.v-code-block--tab-highlightjs-vs>div{color:hsl(var(--v-cb-tab-highlightjs-vs-text))}.v-code-block--tab-highlightjs-vs2015{background-color:hsl(var(--v-cb-tab-highlightjs-vs2015-bkg)/100%)!important}.v-code-block--tab-highlightjs-vs2015:hover{background-color:hsl(var(--v-cb-tab-highlightjs-vs2015-bkg)/50%)!important}.v-code-block--tab-highlightjs-vs2015-icon{color:hsl(var(--v-cb-tab-highlightjs-vs2015-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-vs2015-icon))!important}.v-code-block--tab-highlightjs-vs2015-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-vs2015-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-vs2015-icon-success))!important}.v-code-block--tab-highlightjs-vs2015-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-vs2015-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-vs2015-icon-failed))!important}.v-code-block--tab-highlightjs-vs2015>div{color:hsl(var(--v-cb-tab-highlightjs-vs2015-text))}.v-code-block--tab-highlightjs-xcode{background-color:hsl(var(--v-cb-tab-highlightjs-xcode-bkg)/100%)!important}.v-code-block--tab-highlightjs-xcode:hover{background-color:hsl(var(--v-cb-tab-highlightjs-xcode-bkg)/50%)!important}.v-code-block--tab-highlightjs-xcode-icon{color:hsl(var(--v-cb-tab-highlightjs-xcode-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-xcode-icon))!important}.v-code-block--tab-highlightjs-xcode-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-xcode-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-xcode-icon-success))!important}.v-code-block--tab-highlightjs-xcode-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-xcode-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-xcode-icon-failed))!important}.v-code-block--tab-highlightjs-xcode>div{color:hsl(var(--v-cb-tab-highlightjs-xcode-text))}.v-code-block--tab-highlightjs-xt256{background-color:hsl(var(--v-cb-tab-highlightjs-xt256-bkg)/100%)!important}.v-code-block--tab-highlightjs-xt256:hover{background-color:hsl(var(--v-cb-tab-highlightjs-xt256-bkg)/50%)!important}.v-code-block--tab-highlightjs-xt256-icon{color:hsl(var(--v-cb-tab-highlightjs-xt256-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-xt256-icon))!important}.v-code-block--tab-highlightjs-xt256-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-xt256-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-xt256-icon-success))!important}.v-code-block--tab-highlightjs-xt256-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-xt256-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-xt256-icon-failed))!important}.v-code-block--tab-highlightjs-xt256>div{color:hsl(var(--v-cb-tab-highlightjs-xt256-text))}.v-code-block--tab-highlightjs-base16-onedark{background-color:hsl(var(--v-cb-tab-highlightjs-base16-onedark-bkg)/100%)!important}.v-code-block--tab-highlightjs-base16-onedark:hover{background-color:hsl(var(--v-cb-tab-highlightjs-base16-onedark-bkg)/50%)!important}.v-code-block--tab-highlightjs-base16-onedark-icon{color:hsl(var(--v-cb-tab-highlightjs-base16-onedark-icon))!important;fill:hsl(var(--v-cb-tab-highlightjs-base16-onedark-icon))!important}.v-code-block--tab-highlightjs-base16-onedark-icon-status-success{color:hsl(var(--v-cb-tab-highlightjs-base16-onedark-icon-success))!important;fill:hsl(var(--v-cb-tab-highlightjs-base16-onedark-icon-success))!important}.v-code-block--tab-highlightjs-base16-onedark-icon-status-failed{color:hsl(var(--v-cb-tab-highlightjs-base16-onedark-icon-failed))!important;fill:hsl(var(--v-cb-tab-highlightjs-base16-onedark-icon-failed))!important}.v-code-block--tab-highlightjs-base16-onedark>div{color:hsl(var(--v-cb-tab-highlightjs-base16-onedark-text))}.v-code-block--mt-1{margin-top:.25rem!important}.v-code-block--me-1{margin-right:.25rem!important}.v-code-block--mb-1{margin-bottom:.25rem!important}.v-code-block--ms-1{margin-left:.25rem!important}.v-code-block--pt-1{padding-top:.25rem!important}.v-code-block--pe-1{padding-right:.25rem!important}.v-code-block--pb-1{padding-bottom:.25rem!important}.v-code-block--ps-1{padding-left:.25rem!important}.v-code-block--mt-2{margin-top:.5rem!important}.v-code-block--me-2{margin-right:.5rem!important}.v-code-block--mb-2{margin-bottom:.5rem!important}.v-code-block--ms-2{margin-left:.5rem!important}.v-code-block--pt-2{padding-top:.5rem!important}.v-code-block--pe-2{padding-right:.5rem!important}.v-code-block--pb-2{padding-bottom:.5rem!important}.v-code-block--ps-2{padding-left:.5rem!important}.v-code-block--mt-3{margin-top:.75rem!important}.v-code-block--me-3{margin-right:.75rem!important}.v-code-block--mb-3{margin-bottom:.75rem!important}.v-code-block--ms-3{margin-left:.75rem!important}.v-code-block--pt-3{padding-top:.75rem!important}.v-code-block--pe-3{padding-right:.75rem!important}.v-code-block--pb-3{padding-bottom:.75rem!important}.v-code-block--ps-3{padding-left:.75rem!important}.v-code-block--mt-4{margin-top:1rem!important}.v-code-block--me-4{margin-right:1rem!important}.v-code-block--mb-4{margin-bottom:1rem!important}.v-code-block--ms-4{margin-left:1rem!important}.v-code-block--pt-4{padding-top:1rem!important}.v-code-block--pe-4{padding-right:1rem!important}.v-code-block--pb-4{padding-bottom:1rem!important}.v-code-block--ps-4{padding-left:1rem!important}.v-code-block--mt-5{margin-top:1.25rem!important}.v-code-block--me-5{margin-right:1.25rem!important}.v-code-block--mb-5{margin-bottom:1.25rem!important}.v-code-block--ms-5{margin-left:1.25rem!important}.v-code-block--pt-5{padding-top:1.25rem!important}.v-code-block--pe-5{padding-right:1.25rem!important}.v-code-block--pb-5{padding-bottom:1.25rem!important}.v-code-block--ps-5{padding-left:1.25rem!important}.v-code-block---label-mobile input,.v-code-block---label-mobile select,.v-code-block---label-mobile textarea{display:none}.v-code-block[data-v-51ec5829]{display:block;max-width:100%}.v-code-block--header[data-v-51ec5829]{align-items:end;display:flex;justify-content:space-between;overflow:visible;position:relative;width:100%}.v-code-block--label[data-v-51ec5829]{overflow:auto}.v-code-block--tabs[data-v-51ec5829]{align-items:end;display:flex;justify-content:flex-end}.v-code-block--tab[data-v-51ec5829]{align-items:center;border-radius:5px 5px 0 0;cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;padding:5px 15px;text-align:center;transition:background-color .35s ease;white-space:nowrap;width:fit-content}.v-code-block--tab svg[data-v-51ec5829]{height:.85rem;width:.85rem}.v-code-block--code[data-v-51ec5829]{position:relative;z-index:1}.v-code-block--code pre[data-v-51ec5829],.v-code-block--code pre[class*=language-][data-v-51ec5829]{margin-top:0}.v-code-block--code pre[class*=language-][data-v-51ec5829]:before,.v-code-block--code pre[class*=language-][data-v-51ec5829]:after{bottom:.95em}.v-code-block--code pre code[data-v-51ec5829]{width:100%}.v-code-block--code-browser[data-v-51ec5829]:before{background-image:url(\'data:image/svg+xml;utf8, \');background-position:.5em .5em;background-repeat:no-repeat;content:"";display:block;padding-right:10em;padding-top:3rem;width:100%}.v-code-block--code:hover .v-code-block--code-copy-button[data-v-51ec5829]{opacity:1}.v-code-block--code-copy-button[data-v-51ec5829]{align-items:center;color:#ccc;cursor:pointer;display:flex;fill:#ccc;height:1.5em;justify-content:center;opacity:0;position:absolute;right:.9rem;top:.7rem;transition:opacity .2s ease-in-out;width:auto;z-index:2}.v-code-block--code-copy-button[data-v-51ec5829]:hover{opacity:1}.v-code-block--code-copy-button-persist[data-v-51ec5829]{opacity:.5}.v-code-block--code-copy-button svg[data-v-51ec5829]{height:1rem;width:1rem}')),document.head.appendChild(a)}}catch(n){}}();export{H as U,z as _}; diff --git a/.output/public/assets/CodeBlocks.vue_vue_type_style_index_0_lang-DWS4lyNS.js b/.output/public/assets/CodeBlocks.vue_vue_type_style_index_0_lang-DWS4lyNS.js new file mode 100644 index 0000000000000000000000000000000000000000..2b5125302c0244d875d664093c3a8dbb83c69e99 --- /dev/null +++ b/.output/public/assets/CodeBlocks.vue_vue_type_style_index_0_lang-DWS4lyNS.js @@ -0,0 +1 @@ +import{l as e,a as t,f as a,a0 as l,v as n,y as s,ad as o,B as i,A as c,z as r,R as u,F as d,ab as p,aa as m,G as v,H as f,u as g,J as h,a1 as x,n as y,K as w,w as b,ah as _,o as k}from"./@vue-DsZlmJIP.js";import{b as C,t as j,_ as B}from"./global-BveI--BU.js";import{m as $}from"./markdown-DPs5ApTw.js";import{f as S,b as R}from"./fetch-2coGNStX.js";import{c as z,E,s as T,d as V,j as A,K as M,m as q,f as O,Y as D,Z as U,_ as I}from"./tdesign-vue-next-DsCOKp3d.js";import{Z as L,a5 as P,c as H,af as K,ad as Y,v as F,k as J}from"./tdesign-icons-vue-next-Dn30dVUK.js";import{v as Z}from"./uuid-_R2nDvl_.js";import{a as G}from"./main-zbluuG_-.js";import{a as N}from"./ChatInput.vue_vue_type_style_index_0_lang-CF8t52ZG.js";import{U as W}from"./@wdns-P0uM2sk1.js";const Q={class:"flex flex-row items-center p-2"},X={key:0,class:"flex flex-col gap-2 p-2"},ee={class:"max-h-32 bg-color-page overflow-auto whitespace-pre-line no-scrollbar p-2"},te=["innerHTML"],ae={class:"flex flex-row justify-end gap-2"},le={key:1,class:"flex flex-col gap-2 p-2"},ne={key:0,class:"max-h-32 bg-color-page overflow-auto whitespace-pre-line no-scrollbar p-2"},se={class:"flex flex-grow items-center gap-2 relative"},oe={key:2,class:"flex flex-col gap-2 p-2"},ie={key:0,class:"max-h-32 bg-color-page overflow-auto whitespace-pre-line no-scrollbar p-2"},ce={class:"max-h-72 no-scrollbar overflow-auto bordered p-2 shadow-sm"},re=e({__name:"ToolBar",props:{parent:Object},setup(e,{expose:w}){const b=C(),_=G(),k=e,B=t({top:"0px",left:"0px"}),D=t(!1),U=t(null),I=t(!1),Y=t(!1),F=t(""),J=t(""),N=()=>{D.value=!1,I.value=!1},W=()=>{const e=window.getSelection();navigator.clipboard.writeText(e.toString()),N(),O.success(j("components.toolBar.copySuccessMsg"))},re=()=>{navigator.clipboard.writeText(F.value),N(),O.success(j("components.toolBar.copySuccessMsg"))},ue=a((()=>b.toolBarButtons.filter((e=>e.name&&e.show)))),de=(e,t)=>{const{e:a}=t;if("Enter"===a.key){if(a.shiftKey)return;a.preventDefault(),ge()}};let pe="",me=null,ve="";const fe=()=>{je(),Y.value=!0,me=window.getSelection(),ve=me.toString()},ge=async()=>{const e=ve,t=J.value;pe=t.includes("{{text}}")?t.replace("{{text}}",e):e?e+"\r\n"+t:t,Y.value=!1,await he()};async function he(){const e=k.parent,t=U.value.getBoundingClientRect().left-e.getBoundingClientRect().left;je(),I.value=!0,y((()=>{const a=me.getRangeAt(0).getBoundingClientRect(),l=e.getBoundingClientRect(),n=U.value.getBoundingClientRect();let s=t;const o=l.width-n.width;s>o&&(s=o),s<0&&(s=0),B.value={top:a.top+e.scrollTop-l.top-52+"px",left:`${s}px`}})),await xe()}const xe=async()=>{b.assistModel?(F.value=j("components.toolBar.handing"),await S(pe,(e=>{F.value=e}))):O.error(j("components.toolBar.noAssistModel"))},ye=t(!1),we=async()=>{je(),ye.value=!0,ve=window.getSelection().toString()},be=t(""),_e=_.list,ke=async()=>{ye.value=!1;const e=ve,t={id:Z(),title:e,time:(new Date).getTime(),conversationId:"",conversationName:"",conversationAvatar:"",chats:[],notes:[ve]};if(_.add(t),O.success(j("pages.conversation.favorite_success")),b.assistModel){const a=j("pages.conversation.extract_core_conversation",{question:e,answer:""});await R(a,(e=>{t.title=e,t.title=t.title.replaceAll("###",""),t.title=t.title.trim(),_.update(t)}))}},Ce=async()=>{if(ye.value=!1,!be)return;const e=_e.find((e=>e.id==be.value));e.notes.push(ve),_.update(e),O.success(j("pages.conversation.favorite_success"))},je=()=>{I.value=!1,Y.value=!1,J.value="",ye.value=!1,be.value=""};return w({showToolbox:()=>{const e=window.getSelection();e.toString().trim()&&(D.value=!0,je(),y((()=>{const t=e.getRangeAt(0).getBoundingClientRect(),a=k.parent,l=a.getBoundingClientRect(),n=U.value.getBoundingClientRect();let s=t.left+t.width/2-n.width/2+a.scrollLeft-l.left;const o=l.width-n.width;s>o&&(s=o),s<0&&(s=0);let i=t.top+a.scrollTop-l.top-52;const c=a.scrollTop;i{const a=z,y=E,w=T,b=M,_=q,k=A,C=V;return l((s(),n("div",{ref_key:"selectToolbox",ref:U,style:i(B.value),class:"z-50 absolute bg-color-container bordered rounded-xl shadow-md flex flex-col max-w-80",onMouseup:t[2]||(t[2]=o((()=>{}),["stop"])),onMousedown:t[3]||(t[3]=o((()=>{}),["stop"]))},[c("div",Q,[(s(!0),n(d,null,p(ue.value,(e=>(s(),n(d,null,[u(a,{onClick:t=>(async e=>{me=window.getSelection(),ve=me.toString(),pe=e.prompt.replace("{{text}}",ve),await he()})(e),size:"small",variant:"text"},{default:m((()=>[v(f(e.name),1)])),_:2},1032,["onClick"]),u(y,{layout:"vertical"})],64)))),256)),u(a,{size:"small",variant:"text",onClick:fe},{default:m((()=>[v(f(e.$t("components.toolBar.dialog")),1)])),_:1}),u(y,{layout:"vertical"}),u(a,{size:"small",variant:"text",onClick:we},{default:m((()=>[v(f(e.$t("components.toolBar.faviorite")),1)])),_:1}),u(y,{layout:"vertical"}),u(a,{size:"small",variant:"text",onClick:W},{default:m((()=>[v(f(e.$t("components.toolBar.copy")),1)])),_:1})]),I.value?(s(),n("div",X,[c("pre",ee," "+f(g(pe)),1),c("div",{class:"markdown-body",innerHTML:g($).render(F.value)},null,8,te),c("div",ae,[u(a,{size:"small",variant:"outline",onClick:xe},{default:m((()=>[u(g(L),{slot:"icon"})])),_:1}),u(a,{size:"small",variant:"outline",onClick:re},{default:m((()=>[u(g(P),{slot:"icon"})])),_:1}),u(a,{size:"small",variant:"outline",onClick:N},{default:m((()=>[u(g(H),{slot:"icon"})])),_:1})])])):r("",!0),Y.value?(s(),n("div",le,[g(ve).trim()?(s(),n("pre",ne," "+f(g(ve).trim()),1)):r("",!0),c("div",se,[u(w,{modelValue:J.value,"onUpdate:modelValue":t[0]||(t[0]=e=>J.value=e),onKeypress:de},null,8,["modelValue"]),u(a,{size:"small",shape:"circle",variant:"outline",onClick:ge,class:"absolute bottom-1 right-1"},{default:m((()=>[u(g(K),{slot:"icon"})])),_:1})])])):r("",!0),ye.value?(s(),n("div",oe,[g(ve).trim()?(s(),n("pre",ie," "+f(g(ve).trim()),1)):r("",!0),c("div",ce,[u(C,{modelValue:be.value,"onUpdate:modelValue":t[1]||(t[1]=e=>be.value=e)},{default:m((()=>[u(k,{gutter:[16,16]},{default:m((()=>[(s(!0),n(d,null,p(g(_e),(e=>(s(),h(_,{span:12},{default:m((()=>[u(b,{value:e.id,class:"grid grid-flow-col auto-cols-max align-middle fav-radio fav-radio-toolbar"},{default:m((()=>[v(f(e.title),1)])),_:2},1032,["value"])])),_:2},1024)))),256))])),_:1})])),_:1},8,["modelValue"])]),u(a,{onClick:Ce,theme:"default",variant:"outline"},{default:m((()=>t[4]||(t[4]=[v("添加到笔记")]))),_:1}),u(a,{onClick:ke,theme:"default",variant:"outline"},{default:m((()=>t[5]||(t[5]=[v("创建新的笔记")]))),_:1})])):r("",!0)],36)),[[x,D.value]])}}}),ue={class:"markdown-body"},de={class:"think-process"},pe={class:"flex justify-start mt-2 gap-5"},me={key:0,class:"tdesign-image-viewer-wrapper flex-wrap gap-6"},ve={key:0,class:"tdesign-image-viewer__error tdesign-image-viewer__ui-image tdesign-image-viewer__base"},fe={class:"tdesign-image-viewer__error--content"},ge={class:"tdesign-image-viewer__ui-image tdesign-image-viewer__base"},he=["src","onError"],xe=["onClick"],ye={class:"absolute left-1 top-1 max-w-[75%]"},we=["title"],be=B(e({__name:"AssistantContent",props:{content:{type:Object},isEditing:{type:Boolean,default:!1}},emits:["save","cancel"],setup(e,{emit:o}){const i=w([!1,!1,!1,!1]),k=w([!1,!1,!1,!1]),C=e,j=a((()=>$.render(C.content.text))),B=a((()=>C.content.images.map((e=>e.content||e.url)))),S=o,R=t(C.content.text),E=()=>{S("save",R.value)},V=()=>{R.value=C.content.text,S("cancel")},A=(e,t)=>{},M=t(null);return b((()=>C.isEditing),(e=>{e&&(R.value=C.content.text,y((()=>{M.value.$el.querySelector("textarea").focus()})))})),(t,a)=>{const o=T,y=z,w=D;return s(),n(d,null,[l(c("div",ue,[l(c("details",null,[c("summary",null,f(e.content.text?"查看 AI 思考过程":"思考中..."),1),c("div",de,f(e.content.think),1)],512),[[x,e.content.think]]),_([e.content.text],(()=>l((s(),n("div",{innerHTML:j.value},null,8,["innerHTML"])),[[x,e.content.text]])),a,0)],512),[[x,(e.content.text||e.content.think)&&!e.isEditing]]),l(c("div",null,[u(o,{ref_key:"textareaRef",ref:M,modelValue:R.value,"onUpdate:modelValue":a[1]||(a[1]=e=>R.value=e),autosize:{minRows:5,maxRows:20},onBlur:A},null,8,["modelValue"]),c("div",pe,[u(y,{size:"large",shape:"circle",variant:"text",onClick:V},{default:m((()=>[u(g(H),{slot:"icon"})])),_:1}),u(y,{size:"large",shape:"circle",variant:"text",onClick:E},{default:m((()=>[u(g(Y),{slot:"icon"})])),_:1})])],512),[[x,e.content.text&&e.isEditing]]),B.value.length>0?(s(),n("div",me,[(s(!0),n(d,null,p(C.content.images,((e,t)=>(s(),n("div",{key:t,class:"min-w-44 min-h-44"},[k[t]?(s(),n("div",ve,[c("div",fe,[u(g(F),{name:"image-error",size:"2em"}),a[2]||(a[2]=c("div",null,"图片无法显示",-1))])])):(s(),h(w,{key:1,visible:i[t],images:B.value,"default-index":t,"close-on-overlay":"",onClose:e=>(e=>{i[e]=!1})(t)},{trigger:m((()=>[c("div",ge,[c("img",{alt:"test",src:e.content||e.url,class:"tdesign-image-viewer__ui-image--img",onError:e=>(e=>{k[e]=!0})(t)},null,40,he),c("div",{class:"tdesign-image-viewer__ui-image--hover",onClick:e=>(e=>{i[e]=!0})(t)},[c("span",null,[u(g(J),{size:"1.4em"}),a[3]||(a[3]=v(" 预览 "))])],8,xe),c("div",ye,[c("div",{class:"text-black bg-white bg-opacity-75 p-1 rounded-2xl text-xs truncate",title:e.model},f(e.model),9,we)])])])),_:2},1032,["visible","images","default-index","onClose"]))])))),128))])):r("",!0)],64)}}}),[["__scopeId","data-v-f89b45ec"]]),_e={key:0,class:"whitespace-pre-wrap break-words"},ke={key:1},Ce={class:"flex justify-end mt-2 gap-5"},je=e({__name:"UserContent",props:{content:{type:Object},isEditing:{type:Boolean,default:!1}},emits:["save","cancel"],setup(e,{emit:l}){const o=e,i=a((()=>[...o.content.files,...o.content.images])),p=l,v=t(o.content.text),h=()=>{p("save",v.value)},x=()=>{v.value=o.content.text,p("cancel")},w=(e,t)=>{},_=t(null);return b((()=>o.isEditing),(e=>{e&&(v.value=o.content.text,y((()=>{_.value.$el.querySelector("textarea").focus()})))})),(t,a)=>{const l=T,o=z;return s(),n(d,null,[u(N,{files:i.value,showCloseButton:!1,class:"mb-2"},null,8,["files"]),e.isEditing?r("",!0):(s(),n("div",_e,f(e.content.text),1)),e.isEditing?(s(),n("div",ke,[u(l,{ref_key:"textareaRef",ref:_,modelValue:v.value,"onUpdate:modelValue":a[0]||(a[0]=e=>v.value=e),autosize:{minRows:2,maxRows:20},onBlur:w},null,8,["modelValue"]),c("div",Ce,[u(o,{size:"large",shape:"circle",variant:"text",onClick:x},{default:m((()=>[u(g(H),{slot:"icon"})])),_:1}),u(o,{size:"large",shape:"circle",variant:"text",onClick:h},{default:m((()=>[u(g(Y),{slot:"icon"})])),_:1})])])):r("",!0)],64)}}}),Be=e({__name:"CodeRenderer",props:{blocks:{type:Array,required:!0}},setup(e){const l=e,o=t(),i=a((()=>l.blocks.every((e=>e.complete))));const c=a((()=>{var e,t,a,n,s,o;if(!i.value)return"";const c=(null==(e=l.blocks.find((e=>"html"===e.language)))?void 0:e.code)||"",{head:r,body:u}=function(e){const t=e.match(/]*>([\s\S]*?)<\/head>/i),a=e.match(/]*>([\s\S]*?)<\/body>/i);return{head:t?t[1].trim():"",body:a?a[1].trim():""}}(c),d=(null==(t=l.blocks.find((e=>"css"===e.language)))?void 0:t.code)||"",p=(null==(a=l.blocks.find((e=>"js"===e.language||"javascript"===e.language||"typescript"===e.language)))?void 0:a.code)||"";null==(n=l.blocks.find((e=>"typescript"===e.language)))||n.code;const m=(null==(s=l.blocks.find((e=>"jsx"===e.language)))?void 0:s.code)||"",v=(null==(o=l.blocks.find((e=>"vue"===e.language)))?void 0:o.code)||"";if(m){const e=m.match(/export default (\w+);/),t=e?e[1]:null;return`\n \n \n \n \n \n \n + @@ -33,7 +33,7 @@ - + diff --git a/.output/public/popup.html b/.output/public/popup.html index 9c5e43f117864b162fc89e573ddd2a20675b75d7..ab915b299059fabbae52395ba92d6cccbc25914a 100644 --- a/.output/public/popup.html +++ b/.output/public/popup.html @@ -3,7 +3,7 @@ Popup - + @@ -37,8 +37,8 @@ - - + + @@ -57,7 +57,7 @@ - + @@ -71,9 +71,9 @@ - - - + + + diff --git a/.output/public/sw.js b/.output/public/sw.js index d43c348c3073348f4b01fa56f9c15f48174e21c2..8264ac72630b2228282175c3c388ce32b11d88e3 100644 --- a/.output/public/sw.js +++ b/.output/public/sw.js @@ -1,5 +1,5 @@ // 缓存名称 - 更改版本号可以强制更新缓存 -const CACHE_NAME = 'app-cache-v1741593019927'; +const CACHE_NAME = 'app-cache-v1741759359524'; const ASSETS_PATTERN = /\/assets\//; // 需要缓存的资源列表 const urlsToCache = [ diff --git a/.output/server/chunks/nitro/nitro.mjs b/.output/server/chunks/nitro/nitro.mjs index f771f5a1d275ce8314dee5056af1947804774636..c42ef69c2b44fdbae009088638097469f1602974 100644 --- a/.output/server/chunks/nitro/nitro.mjs +++ b/.output/server/chunks/nitro/nitro.mjs @@ -1 +1 @@ -import e from"node:process";globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:e.env};import t,{Server as s}from"node:http";import a,{Server as c}from"node:https";import{EventEmitter as l}from"node:events";import{Buffer as u}from"node:buffer";import{promises as d,existsSync as h}from"node:fs";import{fileURLToPath as f}from"node:url";import{resolve as m,dirname as g,join as v}from"node:path";import{createHash as j}from"node:crypto";const T=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,_=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,x=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function jsonParseTransform(e,t){if(!("__proto__"===e||"constructor"===e&&t&&"object"==typeof t&&"prototype"in t))return t;!function(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}(e)}function destr(e,t={}){if("string"!=typeof e)return e;const s=e.trim();if('"'===e[0]&&e.endsWith('"')&&!e.includes("\\"))return s.slice(1,-1);if(s.length<=9){const e=s.toLowerCase();if("true"===e)return!0;if("false"===e)return!1;if("undefined"===e)return;if("null"===e)return null;if("nan"===e)return Number.NaN;if("infinity"===e)return Number.POSITIVE_INFINITY;if("-infinity"===e)return Number.NEGATIVE_INFINITY}if(!x.test(e)){if(t.strict)throw new SyntaxError("[destr] Invalid JSON");return e}try{if(T.test(e)||_.test(e)){if(t.strict)throw new Error("[destr] Possible prototype pollution");return JSON.parse(e,jsonParseTransform)}return JSON.parse(e)}catch(s){if(t.strict)throw s;return e}}const z=/#/g,R=/&/g,k=/\//g,C=/=/g,Z=/\+/g,B=/%5e/gi,E=/%60/gi,K=/%7c/gi,N=/%20/gi,I=/%2f/gi;function encodeQueryValue(e){return(t="string"==typeof e?e:JSON.stringify(e),encodeURI(""+t).replace(K,"|")).replace(Z,"%2B").replace(N,"+").replace(z,"%23").replace(R,"%26").replace(E,"`").replace(B,"^").replace(k,"%2F");var t}function encodeQueryKey(e){return encodeQueryValue(e).replace(C,"%3D")}function decode(e=""){try{return decodeURIComponent(""+e)}catch{return""+e}}function decodeQueryValue(e){return decode(e.replace(Z," "))}function parseQuery(e=""){const t={};"?"===e[0]&&(e=e.slice(1));for(const s of e.split("&")){const e=s.match(/([^=]+)=?(.*)/)||[];if(e.length<2)continue;const a=decode(e[1].replace(Z," "));if("__proto__"===a||"constructor"===a)continue;const c=decodeQueryValue(e[2]||"");void 0===t[a]?t[a]=c:Array.isArray(t[a])?t[a].push(c):t[a]=[t[a],c]}return t}function stringifyQuery(e){return Object.keys(e).filter((t=>void 0!==e[t])).map((t=>function(e,t){return"number"!=typeof t&&"boolean"!=typeof t||(t=String(t)),t?Array.isArray(t)?t.map((t=>`${encodeQueryKey(e)}=${encodeQueryValue(t)}`)).join("&"):`${encodeQueryKey(e)}=${encodeQueryValue(t)}`:encodeQueryKey(e)}(t,e[t]))).filter(Boolean).join("&")}const H=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,O=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,M=/^([/\\]\s*){2,}[^/\\]/,D=/^\.?\//;function hasProtocol(e,t={}){return"boolean"==typeof t&&(t={acceptRelative:t}),t.strict?H.test(e):O.test(e)||!!t.acceptRelative&&M.test(e)}function withoutTrailingSlash(e="",t){return(function(e=""){return e.endsWith("/")}(e)?e.slice(0,-1):e)||"/"}function withTrailingSlash(e="",t){return e.endsWith("/")?e:e+"/"}function withLeadingSlash(e=""){return function(e=""){return e.startsWith("/")}(e)?e:"/"+e}function withoutBase(e,t){if(isEmptyURL(t))return e;const s=withoutTrailingSlash(t);if(!e.startsWith(s))return e;const a=e.slice(s.length);return"/"===a[0]?a:"/"+a}function withQuery(e,t){const s=parseURL(e),a={...parseQuery(s.search),...t};return s.search=stringifyQuery(a),function(e){const t=e.pathname||"",s=e.search?(e.search.startsWith("?")?"":"?")+e.search:"",a=e.hash||"",c=e.auth?e.auth+"@":"",l=e.host||"",u=e.protocol||e[q]?(e.protocol||"")+"//":"";return u+c+l+t+s+a}(s)}function getQuery$1(e){return parseQuery(parseURL(e).search)}function isEmptyURL(e){return!e||"/"===e}function joinURL(e,...t){let s=e||"";for(const e of t.filter((e=>function(e){return e&&"/"!==e}(e))))if(s){const t=e.replace(D,"");s=withTrailingSlash(s)+t}else s=e;return s}const q=Symbol.for("ufo:protocolRelative");function parseURL(e="",t){const s=e.match(/^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i);if(s){const[,e,t=""]=s;return{protocol:e.toLowerCase(),pathname:t,href:e+t,auth:"",host:"",search:"",hash:""}}if(!hasProtocol(e,{acceptRelative:!0}))return parsePath(e);const[,a="",c,l=""]=e.replace(/\\/g,"/").match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/)||[];let[,u="",d=""]=l.match(/([^#/?]*)(.*)?/)||[];"file:"===a&&(d=d.replace(/\/(?=[A-Za-z]:)/,""));const{pathname:h,search:f,hash:m}=parsePath(d);return{protocol:a.toLowerCase(),auth:c?c.slice(0,Math.max(0,c.length-1)):"",host:u,pathname:h,search:f,hash:m,[q]:!a}}function parsePath(e=""){const[t="",s="",a=""]=(e.match(/([^#?]*)(\?[^#]*)?(#.*)?/)||[]).splice(1);return{pathname:t,search:s,hash:a}}const P=0,X=1,L=2;function createRouter$1(e={}){const t={options:e,rootNode:createRadixNode(),staticRoutesMap:{}},normalizeTrailingSlash=t=>e.strictTrailingSlash?t:t.replace(/\/$/,"")||"/";if(e.routes)for(const s in e.routes)insert(t,normalizeTrailingSlash(s),e.routes[s]);return{ctx:t,lookup:e=>function(e,t){const s=e.staticRoutesMap[t];if(s)return s.data;const a=t.split("/"),c={};let l=!1,u=null,d=e.rootNode,h=null;for(let e=0;e1){const t=a.length-e;d=d.placeholderChildren.find((e=>e.maxDepth===t))||null}else d=d.placeholderChildren[0]||null;if(!d)break;d.paramName&&(c[d.paramName]=t),l=!0}else d=s}null!==d&&null!==d.data||null===u||(d=u,c[d.paramName||"_"]=h,l=!0);if(!d)return null;if(l)return{...d.data,params:l?c:void 0};return d.data}(t,normalizeTrailingSlash(e)),insert:(e,s)=>insert(t,normalizeTrailingSlash(e),s),remove:e=>function(e,t){let s=!1;const a=t.split("/");let c=e.rootNode;for(const e of a)if(c=c.children.get(e),!c)return s;if(c.data){const e=a.at(-1)||"";c.data=null,0===Object.keys(c.children).length&&c.parent&&(c.parent.children.delete(e),c.parent.wildcardChildNode=null,c.parent.placeholderChildren=[]),s=!0}return s}(t,normalizeTrailingSlash(e))}}function insert(e,t,s){let a=!0;const c=t.split("/");let l=e.rootNode,u=0;const d=[l];for(const e of c){let t;if(t=l.children.get(e))l=t;else{const s=getNodeType(e);t=createRadixNode({type:s,parent:l}),l.children.set(e,t),s===L?(t.paramName="*"===e?"_"+u++:e.slice(1),l.placeholderChildren.push(t),a=!1):s===X&&(l.wildcardChildNode=t,t.paramName=e.slice(3)||"_",a=!1),d.push(t),l=t}}for(const[e,t]of d.entries())t.maxDepth=Math.max(d.length-e,t.maxDepth||0);return l.data=s,!0===a&&(e.staticRoutesMap[t]=l),l}function createRadixNode(e={}){return{type:e.type||P,maxDepth:0,parent:e.parent||null,children:new Map,data:e.data||null,paramName:e.paramName||null,wildcardChildNode:null,placeholderChildren:[]}}function getNodeType(e){return e.startsWith("**")?X:":"===e[0]||"*"===e?L:P}function toRouteMatcher(e){return function(e,t){return{ctx:{table:e},matchAll:s=>_matchRoutes(s,e,t)}}(_routerNodeToTable("",e.ctx.rootNode),e.ctx.options.strictTrailingSlash)}function _matchRoutes(e,t,s){!0!==s&&e.endsWith("/")&&(e=e.slice(0,-1)||"/");const a=[];for(const[s,c]of _sortRoutesMap(t.wildcard))(e===s||e.startsWith(s+"/"))&&a.push(c);for(const[s,c]of _sortRoutesMap(t.dynamic))if(e.startsWith(s+"/")){const t="/"+e.slice(s.length).split("/").splice(2).join("/");a.push(..._matchRoutes(t,c))}const c=t.static.get(e);return c&&a.push(c),a.filter(Boolean)}function _sortRoutesMap(e){return[...e.entries()].sort(((e,t)=>e[0].length-t[0].length))}function _routerNodeToTable(e,t){const s={static:new Map,wildcard:new Map,dynamic:new Map};return function _addNode(e,t){if(e)if(t.type!==P||e.includes("*")||e.includes(":")){if(t.type===X)s.wildcard.set(e.replace("/**",""),t.data);else if(t.type===L){const a=_routerNodeToTable("",t);return t.data&&a.static.set("/",t.data),void s.dynamic.set(e.replace(/\/\*|\/:\w+/,""),a)}}else t.data&&s.static.set(e,t.data);for(const[s,a]of t.children.entries())_addNode(`${e}/${s}`.replace("//","/"),a)}(e,t),s}function isPlainObject(e){if(null===e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&(!(Symbol.iterator in e)&&(!(Symbol.toStringTag in e)||"[object Module]"===Object.prototype.toString.call(e)))}function _defu(e,t,s=".",a){if(!isPlainObject(t))return _defu(e,{},s,a);const c=Object.assign({},t);for(const t in e){if("__proto__"===t||"constructor"===t)continue;const l=e[t];null!=l&&(a&&a(c,t,l,s)||(Array.isArray(l)&&Array.isArray(c[t])?c[t]=[...l,...c[t]]:isPlainObject(l)&&isPlainObject(c[t])?c[t]=_defu(l,c[t],(s?`${s}.`:"")+t.toString(),a):c[t]=l))}return c}function createDefu(e){return(...t)=>t.reduce(((t,s)=>_defu(t,s,"",e)),{})}const U=createDefu(),F=createDefu(((e,t,s)=>{if(void 0!==e[t]&&"function"==typeof s)return e[t]=s(e[t]),!0}));function o(e){throw new Error(`${e} is not implemented yet!`)}let W=class i extends l{__unenv__={};readableEncoding=null;readableEnded=!0;readableFlowing=!1;readableHighWaterMark=0;readableLength=0;readableObjectMode=!1;readableAborted=!1;readableDidRead=!1;closed=!1;errored=null;readable=!1;destroyed=!1;static from(e,t){return new i(t)}constructor(e){super()}_read(e){}read(e){}setEncoding(e){return this}pause(){return this}resume(){return this}isPaused(){return!0}unpipe(e){return this}unshift(e,t){}wrap(e){return this}push(e,t){return!1}_destroy(e,t){this.removeAllListeners()}destroy(e){return this.destroyed=!0,this._destroy(e),this}pipe(e,t){return{}}compose(e,t){throw new Error("Method not implemented.")}[Symbol.asyncDispose](){return this.destroy(),Promise.resolve()}async*[Symbol.asyncIterator](){throw o("Readable.asyncIterator")}iterator(e){throw o("Readable.iterator")}map(e,t){throw o("Readable.map")}filter(e,t){throw o("Readable.filter")}forEach(e,t){throw o("Readable.forEach")}reduce(e,t,s){throw o("Readable.reduce")}find(e,t){throw o("Readable.find")}findIndex(e,t){throw o("Readable.findIndex")}some(e,t){throw o("Readable.some")}toArray(e){throw o("Readable.toArray")}every(e,t){throw o("Readable.every")}flatMap(e,t){throw o("Readable.flatMap")}drop(e,t){throw o("Readable.drop")}take(e,t){throw o("Readable.take")}asIndexedPairs(e){throw o("Readable.asIndexedPairs")}},G=class extends l{__unenv__={};writable=!0;writableEnded=!1;writableFinished=!1;writableHighWaterMark=0;writableLength=0;writableObjectMode=!1;writableCorked=0;closed=!1;errored=null;writableNeedDrain=!1;destroyed=!1;_data;_encoding="utf8";constructor(e){super()}pipe(e,t){return{}}_write(e,t,s){if(this.writableEnded)s&&s();else{if(void 0===this._data)this._data=e;else{const s="string"==typeof this._data?u.from(this._data,this._encoding||t||"utf8"):this._data,a="string"==typeof e?u.from(e,t||this._encoding||"utf8"):e;this._data=u.concat([s,a])}this._encoding=t,s&&s()}}_writev(e,t){}_destroy(e,t){}_final(e){}write(e,t,s){const a="string"==typeof t?this._encoding:"utf8",c="function"==typeof t?t:"function"==typeof s?s:void 0;return this._write(e,a,c),!0}setDefaultEncoding(e){return this}end(e,t,s){const a="function"==typeof e?e:"function"==typeof t?t:"function"==typeof s?s:void 0;if(this.writableEnded)return a&&a(),this;const c=e===a?void 0:e;if(c){const e=t===a?void 0:t;this.write(c,e,a)}return this.writableEnded=!0,this.writableFinished=!0,this.emit("close"),this.emit("finish"),this}cork(){}uncork(){}destroy(e){return this.destroyed=!0,delete this._data,this.removeAllListeners(),this}compose(e,t){throw new Error("Method not implemented.")}};const J=class{allowHalfOpen=!0;_destroy;constructor(e=new W,t=new G){Object.assign(this,e),Object.assign(this,t),this._destroy=function(...e){return function(...t){for(const s of e)s(...t)}}(e._destroy,t._destroy)}};const Q=(Object.assign(J.prototype,W.prototype),Object.assign(J.prototype,G.prototype),J);class A extends Q{__unenv__={};bufferSize=0;bytesRead=0;bytesWritten=0;connecting=!1;destroyed=!1;pending=!1;localAddress="";localPort=0;remoteAddress="";remoteFamily="";remotePort=0;autoSelectFamilyAttemptedAddresses=[];readyState="readOnly";constructor(e){super()}write(e,t,s){return!1}connect(e,t,s){return this}end(e,t,s){return this}setEncoding(e){return this}pause(){return this}resume(){return this}setTimeout(e,t){return this}setNoDelay(e){return this}setKeepAlive(e,t){return this}address(){return{}}unref(){return this}ref(){return this}destroySoon(){this.destroy()}resetAndDestroy(){const e=new Error("ERR_SOCKET_CLOSED");return e.code="ERR_SOCKET_CLOSED",this.destroy(e),this}}class y extends W{aborted=!1;httpVersion="1.1";httpVersionMajor=1;httpVersionMinor=1;complete=!0;connection;socket;headers={};trailers={};method="GET";url="/";statusCode=200;statusMessage="";closed=!1;errored=null;readable=!1;constructor(e){super(),this.socket=this.connection=e||new A}get rawHeaders(){const e=this.headers,t=[];for(const s in e)if(Array.isArray(e[s]))for(const a of e[s])t.push(s,a);else t.push(s,e[s]);return t}get rawTrailers(){return[]}setTimeout(e,t){return this}get headersDistinct(){return p(this.headers)}get trailersDistinct(){return p(this.trailers)}}function p(e){const t={};for(const[s,a]of Object.entries(e))s&&(t[s]=(Array.isArray(a)?a:[a]).filter(Boolean));return t}class w extends G{statusCode=200;statusMessage="";upgrading=!1;chunkedEncoding=!1;shouldKeepAlive=!1;useChunkedEncodingByDefault=!1;sendDate=!1;finished=!1;headersSent=!1;strictContentLength=!1;connection=null;socket=null;req;_headers={};constructor(e){super(),this.req=e}assignSocket(e){e._httpMessage=this,this.socket=e,this.connection=e,this.emit("socket",e),this._flush()}_flush(){this.flushHeaders()}detachSocket(e){}writeContinue(e){}writeHead(e,t,s){e&&(this.statusCode=e),"string"==typeof t&&(this.statusMessage=t,t=void 0);const a=s||t;if(a&&!Array.isArray(a))for(const e in a)this.setHeader(e,a[e]);return this.headersSent=!0,this}writeProcessing(){}setTimeout(e,t){return this}appendHeader(e,t){e=e.toLowerCase();const s=this._headers[e],a=[...Array.isArray(s)?s:[s],...Array.isArray(t)?t:[t]].filter(Boolean);return this._headers[e]=a.length>1?a:a[0],this}setHeader(e,t){return this._headers[e.toLowerCase()]=t,this}setHeaders(e){for(const[t,s]of Object.entries(e))this.setHeader(t,s);return this}getHeader(e){return this._headers[e.toLowerCase()]}getHeaders(){return this._headers}getHeaderNames(){return Object.keys(this._headers)}hasHeader(e){return e.toLowerCase()in this._headers}removeHeader(e){delete this._headers[e.toLowerCase()]}addTrailers(e){}flushHeaders(){}writeEarlyHints(e,t){"function"==typeof t&&t()}}const V=(()=>{const n=function(){};return n.prototype=Object.create(null),n})();function S(e={}){if(e instanceof Headers)return e;const t=new Headers;for(const[s,a]of Object.entries(e))if(void 0!==a){if(Array.isArray(a)){for(const e of a)t.append(s,String(e));continue}t.set(s,String(a))}return t}const $=new Set([101,204,205,304]);async function b(e,t){const s=new y,a=new w(s);let c;if(s.url=t.url?.toString()||"/",!s.url.startsWith("/")){const e=new URL(s.url);c=e.host,s.url=e.pathname+e.search+e.hash}s.method=t.method||"GET",s.headers=function(e={}){const t=new V,s=Array.isArray(e)||function(e){return"function"==typeof e?.entries}(e)?e:Object.entries(e);for(const[e,a]of s)if(a){if(void 0===t[e]){t[e]=a;continue}t[e]=[...Array.isArray(t[e])?t[e]:[t[e]],...Array.isArray(a)?a:[a]]}return t}(t.headers||{}),s.headers.host||(s.headers.host=t.host||c||"localhost"),s.connection.encrypted=s.connection.encrypted||"https"===t.protocol,s.body=t.body||null,s.__unenv__=t.context,await e(s,a);let l=a._data;($.has(a.statusCode)||"HEAD"===s.method.toUpperCase())&&(l=null,delete a._headers["content-length"]);const u={status:a.statusCode,statusText:a.statusMessage,headers:a._headers,body:l};return s.destroy(),a.destroy(),u}function hasProp(e,t){try{return t in e}catch{return!1}}class H3Error extends Error{static __h3_error__=!0;statusCode=500;fatal=!1;unhandled=!1;statusMessage;data;cause;constructor(e,t={}){super(e,t),t.cause&&!this.cause&&(this.cause=t.cause)}toJSON(){const e={message:this.message,statusCode:sanitizeStatusCode(this.statusCode,500)};return this.statusMessage&&(e.statusMessage=sanitizeStatusMessage(this.statusMessage)),void 0!==this.data&&(e.data=this.data),e}}function createError$1(e){if("string"==typeof e)return new H3Error(e);if(isError(e))return e;const t=new H3Error(e.message??e.statusMessage??"",{cause:e.cause||e});if(hasProp(e,"stack"))try{Object.defineProperty(t,"stack",{get:()=>e.stack})}catch{try{t.stack=e.stack}catch{}}if(e.data&&(t.data=e.data),e.statusCode?t.statusCode=sanitizeStatusCode(e.statusCode,t.statusCode):e.status&&(t.statusCode=sanitizeStatusCode(e.status,t.statusCode)),e.statusMessage?t.statusMessage=e.statusMessage:e.statusText&&(t.statusMessage=e.statusText),t.statusMessage){const e=t.statusMessage;sanitizeStatusMessage(t.statusMessage)!==e&&console.warn("[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default.")}return void 0!==e.fatal&&(t.fatal=e.fatal),void 0!==e.unhandled&&(t.unhandled=e.unhandled),t}function isError(e){return!0===e?.constructor?.__h3_error__}function getQuery(e){return getQuery$1(e.path||"")}function getRequestHeaders(e){const t={};for(const s in e.node.req.headers){const a=e.node.req.headers[s];t[s]=Array.isArray(a)?a.filter(Boolean).join(", "):a}return t}const Y=getRequestHeaders;function getRequestHeader(e,t){return getRequestHeaders(e)[t.toLowerCase()]}function getRequestURL(e,t={}){const s=function(e,t={}){if(t.xForwardedHost){const t=e.node.req.headers["x-forwarded-host"];if(t)return t}return e.node.req.headers.host||"localhost"}(e,t),a=function(e,t={}){return!1!==t.xForwardedProto&&"https"===e.node.req.headers["x-forwarded-proto"]||e.node.req.connection?.encrypted?"https":"http"}(e,t),c=(e.node.req.originalUrl||e.path).replace(/^[/\\]+/g,"/");return new URL(c,`${a}://${s}`)}const ee=Symbol.for("h3RawBody"),te=Symbol.for("h3ParsedBody"),se=["PATCH","POST","PUT","DELETE"];function readRawBody(e,t="utf8"){!function(e,t){if(!function(e,t){if("string"==typeof t){if(e.method===t)return!0}else if(t.includes(e.method))return!0;return!1}(e,t))throw createError$1({statusCode:405,statusMessage:"HTTP method is not allowed."})}(e,se);const s=e._requestBody||e.web?.request?.body||e.node.req[ee]||e.node.req.rawBody||e.node.req.body;if(s){const e=Promise.resolve(s).then((e=>Buffer.isBuffer(e)?e:"function"==typeof e.pipeTo?new Promise(((t,s)=>{const a=[];e.pipeTo(new WritableStream({write(e){a.push(e)},close(){t(Buffer.concat(a))},abort(e){s(e)}})).catch(s)})):"function"==typeof e.pipe?new Promise(((t,s)=>{const a=[];e.on("data",(e=>{a.push(e)})).on("end",(()=>{t(Buffer.concat(a))})).on("error",s)})):e.constructor===Object?Buffer.from(JSON.stringify(e)):e instanceof URLSearchParams?Buffer.from(e.toString()):Buffer.from(e)));return t?e.then((e=>e.toString(t))):e}if(!Number.parseInt(e.node.req.headers["content-length"]||"")&&!String(e.node.req.headers["transfer-encoding"]??"").split(",").map((e=>e.trim())).filter(Boolean).includes("chunked"))return Promise.resolve(void 0);const a=e.node.req[ee]=new Promise(((t,s)=>{const a=[];e.node.req.on("error",(e=>{s(e)})).on("data",(e=>{a.push(e)})).on("end",(()=>{t(Buffer.concat(a))}))}));return t?a.then((e=>e.toString(t))):a}async function readBody(e,t={}){const s=e.node.req;if(hasProp(s,te))return s[te];const a=s.headers["content-type"]||"",c=await readRawBody(e);let l;return l="application/json"===a?_parseJSON(c,t.strict??!0):a.startsWith("application/x-www-form-urlencoded")?function(e){const t=new URLSearchParams(e),s=Object.create(null);for(const[e,a]of t.entries())hasProp(s,e)?(Array.isArray(s[e])||(s[e]=[s[e]]),s[e].push(a)):s[e]=a;return s}(c):a.startsWith("text/")?c:_parseJSON(c,t.strict??!1),s[te]=l,l}function _parseJSON(e="",t){if(e)try{return destr(e,{strict:t})}catch{throw createError$1({statusCode:400,statusMessage:"Bad Request",message:"Invalid JSON body"})}}function handleCacheHeaders(e,t){const s=["public",...t.cacheControls||[]];let a=!1;if(void 0!==t.maxAge&&s.push("max-age="+ +t.maxAge,"s-maxage="+ +t.maxAge),t.modifiedTime){const s=new Date(t.modifiedTime),c=e.node.req.headers["if-modified-since"];e.node.res.setHeader("last-modified",s.toUTCString()),c&&new Date(c)>=t.modifiedTime&&(a=!0)}if(t.etag){e.node.res.setHeader("etag",t.etag);e.node.req.headers["if-none-match"]===t.etag&&(a=!0)}return e.node.res.setHeader("cache-control",s.join(", ")),!!a&&(e.node.res.statusCode=304,e.handled||e.node.res.end(),!0)}const ae={html:"text/html",json:"application/json"},re=/[^\u0009\u0020-\u007E]/g;function sanitizeStatusMessage(e=""){return e.replace(re,"")}function sanitizeStatusCode(e,t=200){return e?("string"==typeof e&&(e=Number.parseInt(e,10)),e<100||e>999?t:e):t}function splitCookiesString(e){if(Array.isArray(e))return e.flatMap((e=>splitCookiesString(e)));if("string"!=typeof e)return[];const t=[];let s,a,c,l,u,d=0;const skipWhitespace=()=>{for(;d=e.length)&&t.push(e.slice(s))}return t}const oe="undefined"==typeof setImmediate?e=>e():setImmediate;function send(e,t,s){return s&&function(e,t){t&&304!==e.node.res.statusCode&&!e.node.res.getHeader("content-type")&&e.node.res.setHeader("content-type",t)}(e,s),new Promise((s=>{oe((()=>{e.handled||e.node.res.end(t),s()}))}))}function setResponseStatus(e,t,s){t&&(e.node.res.statusCode=sanitizeStatusCode(t,e.node.res.statusCode)),s&&(e.node.res.statusMessage=sanitizeStatusMessage(s))}function getResponseHeader(e,t){return e.node.res.getHeader(t)}function setResponseHeaders(e,t){for(const[s,a]of Object.entries(t))e.node.res.setHeader(s,a)}const ie=setResponseHeaders;function setResponseHeader(e,t,s){e.node.res.setHeader(t,s)}function sendStream(e,t){if(!t||"object"!=typeof t)throw new Error("[h3] Invalid stream provided.");if(e.node.res._data=t,!e.node.res.socket)return e._handled=!0,Promise.resolve();if(hasProp(t,"pipeTo")&&"function"==typeof t.pipeTo)return t.pipeTo(new WritableStream({write(t){e.node.res.write(t)}})).then((()=>{e.node.res.end()}));if(hasProp(t,"pipe")&&"function"==typeof t.pipe)return new Promise(((s,a)=>{t.pipe(e.node.res),t.on&&(t.on("end",(()=>{e.node.res.end(),s()})),t.on("error",(e=>{a(e)}))),e.node.res.on("close",(()=>{t.abort&&t.abort()}))}));throw new Error("[h3] Invalid or incompatible stream provided.")}function sendWebResponse(e,t){for(const[s,a]of t.headers)"set-cookie"===s?e.node.res.appendHeader(s,splitCookiesString(a)):e.node.res.setHeader(s,a);if(t.status&&(e.node.res.statusCode=sanitizeStatusCode(t.status,e.node.res.statusCode)),t.statusText&&(e.node.res.statusMessage=sanitizeStatusMessage(t.statusText)),t.redirected&&e.node.res.setHeader("location",t.url),t.body)return sendStream(e,t.body);e.node.res.end()}const ne=new Set(["PATCH","POST","PUT","DELETE"]),ce=new Set(["transfer-encoding","accept-encoding","connection","keep-alive","upgrade","expect","host","accept"]);async function proxyRequest(e,t,s={}){let a,c;ne.has(e.method)&&(s.streamRequest?(a=function(e){if(!se.includes(e.method))return;const t=e.web?.request?.body||e._requestBody;return t||(ee in e.node.req||"rawBody"in e.node.req||"body"in e.node.req||"__unenv__"in e.node.req?new ReadableStream({async start(t){const s=await readRawBody(e,!1);s&&t.enqueue(s),t.close()}}):new ReadableStream({start:t=>{e.node.req.on("data",(e=>{t.enqueue(e)})),e.node.req.on("end",(()=>{t.close()})),e.node.req.on("error",(e=>{t.error(e)}))}}))}(e),c="half"):a=await readRawBody(e,!1).catch((()=>{})));const l=s.fetchOptions?.method||e.method,u=function(e,...t){const s=t.filter(Boolean);if(0===s.length)return e;const a=new Headers(e);for(const e of s)for(const[t,s]of Object.entries(e))void 0!==s&&a.set(t,s);return a}(getProxyRequestHeaders(e,{host:t.startsWith("/")}),s.fetchOptions?.headers,s.headers);return async function(e,t,s={}){let a;try{a=await _getFetch(s.fetch)(t,{headers:s.headers,ignoreResponseError:!0,...s.fetchOptions})}catch(e){throw createError$1({status:502,statusMessage:"Bad Gateway",cause:e})}e.node.res.statusCode=sanitizeStatusCode(a.status,e.node.res.statusCode),e.node.res.statusMessage=sanitizeStatusMessage(a.statusText);const c=[];for(const[t,s]of a.headers.entries())"content-encoding"!==t&&"content-length"!==t&&("set-cookie"!==t?e.node.res.setHeader(t,s):c.push(...splitCookiesString(s)));c.length>0&&e.node.res.setHeader("set-cookie",c.map((e=>(s.cookieDomainRewrite&&(e=rewriteCookieProperty(e,s.cookieDomainRewrite,"domain")),s.cookiePathRewrite&&(e=rewriteCookieProperty(e,s.cookiePathRewrite,"path")),e))));s.onResponse&&await s.onResponse(e,a);if(void 0!==a._data)return a._data;if(e.handled)return;if(!1===s.sendStream){const t=new Uint8Array(await a.arrayBuffer());return e.node.res.end(t)}if(a.body)for await(const t of a.body)e.node.res.write(t);return e.node.res.end()}(e,t,{...s,fetchOptions:{method:l,body:a,duplex:c,...s.fetchOptions,headers:u}})}function getProxyRequestHeaders(e,t){const s=Object.create(null),a=getRequestHeaders(e);for(const e in a)(!ce.has(e)||"host"===e&&t?.host)&&(s[e]=a[e]);return s}function fetchWithEvent(e,t,s,a){return _getFetch(a?.fetch)(t,{...s,context:s?.context||e.context,headers:{...getProxyRequestHeaders(e,{host:"string"==typeof t&&t.startsWith("/")}),...s?.headers}})}function _getFetch(e){if(e)return e;if(globalThis.fetch)return globalThis.fetch;throw new Error("fetch is not available. Try importing `node-fetch-native/polyfill` for Node.js.")}function rewriteCookieProperty(e,t,s){const a="string"==typeof t?{"*":t}:t;return e.replace(new RegExp(`(;\\s*${s}=)([^;]+)`,"gi"),((e,t,s)=>{let c;if(s in a)c=a[s];else{if(!("*"in a))return e;c=a["*"]}return c?t+c:""}))}class H3Event{__is_event__=!0;node;web;context={};_method;_path;_headers;_requestBody;_handled=!1;_onBeforeResponseCalled;_onAfterResponseCalled;constructor(e,t){this.node={req:e,res:t}}get method(){return this._method||(this._method=(this.node.req.method||"GET").toUpperCase()),this._method}get path(){return this._path||this.node.req.url||"/"}get headers(){return this._headers||(this._headers=function(e){const t=new Headers;for(const[s,a]of Object.entries(e))if(Array.isArray(a))for(const e of a)t.append(s,e);else a&&t.set(s,a);return t}(this.node.req.headers)),this._headers}get handled(){return this._handled||this.node.res.writableEnded||this.node.res.headersSent}respondWith(e){return Promise.resolve(e).then((e=>sendWebResponse(this,e)))}toString(){return`[${this.method}] ${this.path}`}toJSON(){return this.toString()}get req(){return this.node.req}get res(){return this.node.res}}function isEvent(e){return hasProp(e,"__is_event__")}function createEvent(e,t){return new H3Event(e,t)}function defineEventHandler(e){if("function"==typeof e)return e.__is_handler__=!0,e;const t={onRequest:_normalizeArray(e.onRequest),onBeforeResponse:_normalizeArray(e.onBeforeResponse)},_handler=s=>async function(e,t,s){if(s.onRequest)for(const t of s.onRequest)if(await t(e),e.handled)return;const a=await t(e),c={body:a};if(s.onBeforeResponse)for(const t of s.onBeforeResponse)await t(e,c);return c.body}(s,e.handler,t);return _handler.__is_handler__=!0,_handler.__resolve__=e.handler.__resolve__,_handler.__websocket__=e.websocket,_handler}function _normalizeArray(e){return e?Array.isArray(e)?e:[e]:void 0}const pe=defineEventHandler;function isEventHandler(e){return hasProp(e,"__is_handler__")}function toEventHandler(e,t,s){return isEventHandler(e)||console.warn("[h3] Implicit event handler conversion is deprecated. Use `eventHandler()` or `fromNodeMiddleware()` to define event handlers.",s&&"/"!==s?`\n Route: ${s}`:"",`\n Handler: ${e}`),e}const lazyEventHandler=function(e){let t,s;const resolveHandler=()=>s?Promise.resolve(s):(t||(t=Promise.resolve(e()).then((e=>{const t=e.default||e;if("function"!=typeof t)throw new TypeError("Invalid lazy handler result. It should be a function:",t);return s={handler:toEventHandler(e.default||e)},s}))),t),a=pe((e=>s?s.handler(e):resolveHandler().then((t=>t.handler(e)))));return a.__resolve__=resolveHandler,a};function createApp(e={}){const t=[],s=function(e,t){const s=t.debug?2:void 0;return pe((async a=>{a.node.req.originalUrl=a.node.req.originalUrl||a.node.req.url||"/";const c=a._path||a.node.req.url||"/";let l;t.onRequest&&await t.onRequest(a);for(const u of e){if(u.route.length>1){if(!c.startsWith(u.route))continue;l=c.slice(u.route.length)||"/"}else l=c;if(u.match&&!u.match(l,a))continue;a._path=l,a.node.req.url=l;const e=await u.handler(a),d=void 0===e?void 0:await e;if(void 0!==d){const e={body:d};return t.onBeforeResponse&&(a._onBeforeResponseCalled=!0,await t.onBeforeResponse(a,e)),await handleHandlerResponse(a,e.body,s),void(t.onAfterResponse&&(a._onAfterResponseCalled=!0,await t.onAfterResponse(a,e)))}if(a.handled)return void(t.onAfterResponse&&(a._onAfterResponseCalled=!0,await t.onAfterResponse(a,void 0)))}if(!a.handled)throw createError$1({statusCode:404,statusMessage:`Cannot find any path matching ${a.path||"/"}.`});t.onAfterResponse&&(a._onAfterResponseCalled=!0,await t.onAfterResponse(a,void 0))}))}(t,e),a=function(e){return async t=>{let s;for(const a of e){if("/"===a.route&&!a.handler.__resolve__)continue;if(!t.startsWith(a.route))continue;if(s=t.slice(a.route.length)||"/",a.match&&!a.match(s,void 0))continue;let e={route:a.route,handler:a.handler};if(e.handler.__resolve__){const t=await e.handler.__resolve__(s);if(!t)continue;e={...e,...t,route:joinURL(e.route||"/",t.route||"/")}}return e}}}(t);s.__resolve__=a;const c=function(e){let t;return()=>(t||(t=e()),t)}((()=>{return t=a,{...e.websocket,async resolve(e){const s=e.request?.url||e.url||"/",{pathname:a}="string"==typeof s?parseURL(s):s,c=await t(a);return c?.handler?.__websocket__||{}}};var t})),l={use:(e,t,s)=>use(l,e,t,s),resolve:a,handler:s,stack:t,options:e,get websocket(){return c()}};return l}function use(e,t,s,a){if(Array.isArray(t))for(const c of t)use(e,c,s,a);else if(Array.isArray(s))for(const c of s)use(e,t,c,a);else"string"==typeof t?e.stack.push(normalizeLayer({...a,route:t,handler:s})):"function"==typeof t?e.stack.push(normalizeLayer({...s,handler:t})):e.stack.push(normalizeLayer({...t}));return e}function normalizeLayer(e){let t=e.handler;return t.handler&&(t=t.handler),e.lazy?t=lazyEventHandler(t):isEventHandler(t)||(t=toEventHandler(t,0,e.route)),{route:withoutTrailingSlash(e.route),match:e.match,handler:t}}function handleHandlerResponse(e,t,s){if(null===t)return function(e,t){if(e.handled)return;t||200===e.node.res.statusCode||(t=e.node.res.statusCode);const s=sanitizeStatusCode(t,204);204===s&&e.node.res.removeHeader("content-length"),e.node.res.writeHead(s),e.node.res.end()}(e);if(t){if(a=t,"undefined"!=typeof Response&&a instanceof Response)return sendWebResponse(e,t);if(function(e){if(!e||"object"!=typeof e)return!1;if("function"==typeof e.pipe){if("function"==typeof e._read)return!0;if("function"==typeof e.abort)return!0}return"function"==typeof e.pipeTo}(t))return sendStream(e,t);if(t.buffer)return send(e,t);if(t.arrayBuffer&&"function"==typeof t.arrayBuffer)return t.arrayBuffer().then((s=>send(e,Buffer.from(s),t.type)));if(t instanceof Error)throw createError$1(t);if("function"==typeof t.end)return!0}var a;const c=typeof t;if("string"===c)return send(e,t,ae.html);if("object"===c||"boolean"===c||"number"===c)return send(e,JSON.stringify(t,void 0,s),ae.json);if("bigint"===c)return send(e,t.toString(),ae.json);throw createError$1({statusCode:500,statusMessage:`[h3] Cannot send ${c} as response.`})}const le=["connect","delete","get","head","options","post","put","trace","patch"];function toNodeListener(e){return async function(t,s){const a=createEvent(t,s);try{await e.handler(a)}catch(t){const s=createError$1(t);if(isError(t)||(s.unhandled=!0),setResponseStatus(a,s.statusCode,s.statusMessage),e.options.onError&&await e.options.onError(s,a),a.handled)return;(s.unhandled||s.fatal)&&console.error("[h3]",s.fatal?"[fatal]":"[unhandled]",s),e.options.onBeforeResponse&&!a._onBeforeResponseCalled&&await e.options.onBeforeResponse(a,{body:s}),await function(e,t,s){if(e.handled)return;const a=isError(t)?t:createError$1(t),c={statusCode:a.statusCode,statusMessage:a.statusMessage,stack:[],data:a.data};if(s&&(c.stack=(a.stack||"").split("\n").map((e=>e.trim()))),e.handled)return;setResponseStatus(e,Number.parseInt(a.statusCode),a.statusMessage),e.node.res.setHeader("content-type",ae.json),e.node.res.end(JSON.stringify(c,void 0,2))}(a,s,!!e.options.debug),e.options.onAfterResponse&&!a._onAfterResponseCalled&&await e.options.onAfterResponse(a,{body:s})}}}function flatHooks(e,t={},s){for(const a in e){const c=e[a],l=s?`${s}:${a}`:a;"object"==typeof c&&null!==c?flatHooks(c,t,l):"function"==typeof c&&(t[l]=c)}return t}const ue={run:e=>e()},de=void 0!==console.createTask?console.createTask:()=>ue;function serialTaskCaller(e,t){const s=t.shift(),a=de(s);return e.reduce(((e,s)=>e.then((()=>a.run((()=>s(...t)))))),Promise.resolve())}function parallelTaskCaller(e,t){const s=t.shift(),a=de(s);return Promise.all(e.map((e=>a.run((()=>e(...t))))))}function callEachWith(e,t){for(const s of[...e])s(t)}class Hookable{constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(e,t,s={}){if(!e||"function"!=typeof t)return()=>{};const a=e;let c;for(;this._deprecatedHooks[e];)c=this._deprecatedHooks[e],e=c.to;if(c&&!s.allowDeprecated){let e=c.message;e||(e=`${a} hook has been deprecated`+(c.to?`, please use ${c.to}`:"")),this._deprecatedMessages||(this._deprecatedMessages=new Set),this._deprecatedMessages.has(e)||(console.warn(e),this._deprecatedMessages.add(e))}if(!t.name)try{Object.defineProperty(t,"name",{get:()=>"_"+e.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{}return this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{t&&(this.removeHook(e,t),t=void 0)}}hookOnce(e,t){let s,_function=(...e)=>("function"==typeof s&&s(),s=void 0,_function=void 0,t(...e));return s=this.hook(e,_function),s}removeHook(e,t){if(this._hooks[e]){const s=this._hooks[e].indexOf(t);-1!==s&&this._hooks[e].splice(s,1),0===this._hooks[e].length&&delete this._hooks[e]}}deprecateHook(e,t){this._deprecatedHooks[e]="string"==typeof t?{to:t}:t;const s=this._hooks[e]||[];delete this._hooks[e];for(const t of s)this.hook(e,t)}deprecateHooks(e){Object.assign(this._deprecatedHooks,e);for(const t in e)this.deprecateHook(t,e[t])}addHooks(e){const t=flatHooks(e),s=Object.keys(t).map((e=>this.hook(e,t[e])));return()=>{for(const e of s.splice(0,s.length))e()}}removeHooks(e){const t=flatHooks(e);for(const e in t)this.removeHook(e,t[e])}removeAllHooks(){for(const e in this._hooks)delete this._hooks[e]}callHook(e,...t){return t.unshift(e),this.callHookWith(serialTaskCaller,e,...t)}callHookParallel(e,...t){return t.unshift(e),this.callHookWith(parallelTaskCaller,e,...t)}callHookWith(e,t,...s){const a=this._before||this._after?{name:t,args:s,context:{}}:void 0;this._before&&callEachWith(this._before,a);const c=e(t in this._hooks?[...this._hooks[t]]:[],s);return c instanceof Promise?c.finally((()=>{this._after&&a&&callEachWith(this._after,a)})):(this._after&&a&&callEachWith(this._after,a),c)}beforeEach(e){return this._before=this._before||[],this._before.push(e),()=>{if(void 0!==this._before){const t=this._before.indexOf(e);-1!==t&&this._before.splice(t,1)}}}afterEach(e){return this._after=this._after||[],this._after.push(e),()=>{if(void 0!==this._after){const t=this._after.indexOf(e);-1!==t&&this._after.splice(t,1)}}}}const he=globalThis.Headers,fe=globalThis.AbortController,me=globalThis.fetch||(()=>{throw new Error("[node-fetch-native] Failed to fetch: `globalThis.fetch` is not available!")});class FetchError extends Error{constructor(e,t){super(e,t),this.name="FetchError",t?.cause&&!this.cause&&(this.cause=t.cause)}}const ge=new Set(Object.freeze(["PATCH","POST","PUT","DELETE"]));function isPayloadMethod(e="GET"){return ge.has(e.toUpperCase())}const ye=new Set(["image/svg","application/xml","application/xhtml","application/html"]),ve=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function resolveFetchOptions(e,t,s,a){const c=function(e,t,s){if(!t)return new s(e);const a=new s(t);if(e)for(const[t,c]of Symbol.iterator in e||Array.isArray(e)?e:new s(e))a.set(t,c);return a}(t?.headers??e?.headers,s?.headers,a);let l;return(s?.query||s?.params||t?.params||t?.query)&&(l={...s?.params,...s?.query,...t?.params,...t?.query}),{...s,...t,query:l,params:l,headers:c}}async function callHooks(e,t){if(t)if(Array.isArray(t))for(const s of t)await s(e);else await t(e)}const we=new Set([408,409,425,429,500,502,503,504]),be=new Set([101,204,205,304]);function createFetch(e={}){const{fetch:t=globalThis.fetch,Headers:s=globalThis.Headers,AbortController:a=globalThis.AbortController}=e;async function onError(e){const t=e.error&&"AbortError"===e.error.name&&!e.options.timeout||!1;if(!1!==e.options.retry&&!t){let t;t="number"==typeof e.options.retry?e.options.retry:isPayloadMethod(e.options.method)?0:1;const s=e.response&&e.response.status||500;if(t>0&&(Array.isArray(e.options.retryStatusCodes)?e.options.retryStatusCodes.includes(s):we.has(s))){const s="function"==typeof e.options.retryDelay?e.options.retryDelay(e):e.options.retryDelay||0;return s>0&&await new Promise((e=>setTimeout(e,s))),$fetchRaw(e.request,{...e.options,retry:t-1})}}const s=function(e){const t=e.error?.message||e.error?.toString()||"",s=e.request?.method||e.options?.method||"GET",a=e.request?.url||String(e.request)||"/",c=`[${s}] ${JSON.stringify(a)}`,l=e.response?`${e.response.status} ${e.response.statusText}`:"",u=new FetchError(`${c}: ${l}${t?` ${t}`:""}`,e.error?{cause:e.error}:void 0);for(const t of["request","options","response"])Object.defineProperty(u,t,{get:()=>e[t]});for(const[t,s]of[["data","_data"],["status","status"],["statusCode","status"],["statusText","statusText"],["statusMessage","statusText"]])Object.defineProperty(u,t,{get:()=>e.response&&e.response[s]});return u}(e);throw Error.captureStackTrace&&Error.captureStackTrace(s,$fetchRaw),s}const $fetchRaw=async function(c,l={}){const u={request:c,options:resolveFetchOptions(c,l,e.defaults,s),response:void 0,error:void 0};let d;if(u.options.method&&(u.options.method=u.options.method.toUpperCase()),u.options.onRequest&&await callHooks(u,u.options.onRequest),"string"==typeof u.request&&(u.options.baseURL&&(u.request=function(e,t){if(isEmptyURL(t)||hasProtocol(e))return e;const s=withoutTrailingSlash(t);return e.startsWith(s)?e:joinURL(s,e)}(u.request,u.options.baseURL)),u.options.query&&(u.request=withQuery(u.request,u.options.query),delete u.options.query),"query"in u.options&&delete u.options.query,"params"in u.options&&delete u.options.params),u.options.body&&isPayloadMethod(u.options.method)&&(!function(e){if(void 0===e)return!1;const t=typeof e;return"string"===t||"number"===t||"boolean"===t||null===t||"object"===t&&(!!Array.isArray(e)||!e.buffer&&(e.constructor&&"Object"===e.constructor.name||"function"==typeof e.toJSON))}(u.options.body)?("pipeTo"in u.options.body&&"function"==typeof u.options.body.pipeTo||"function"==typeof u.options.body.pipe)&&("duplex"in u.options||(u.options.duplex="half")):(u.options.body="string"==typeof u.options.body?u.options.body:JSON.stringify(u.options.body),u.options.headers=new s(u.options.headers||{}),u.options.headers.has("content-type")||u.options.headers.set("content-type","application/json"),u.options.headers.has("accept")||u.options.headers.set("accept","application/json"))),!u.options.signal&&u.options.timeout){const e=new a;d=setTimeout((()=>{const t=new Error("[TimeoutError]: The operation was aborted due to timeout");t.name="TimeoutError",t.code=23,e.abort(t)}),u.options.timeout),u.options.signal=e.signal}try{u.response=await t(u.request,u.options)}catch(e){return u.error=e,u.options.onRequestError&&await callHooks(u,u.options.onRequestError),await onError(u)}finally{d&&clearTimeout(d)}if((u.response.body||u.response._bodyInit)&&!be.has(u.response.status)&&"HEAD"!==u.options.method){const e=(u.options.parseResponse?"json":u.options.responseType)||function(e=""){if(!e)return"json";const t=e.split(";").shift()||"";return ve.test(t)?"json":ye.has(t)||t.startsWith("text/")?"text":"blob"}(u.response.headers.get("content-type")||"");switch(e){case"json":{const e=await u.response.text(),t=u.options.parseResponse||destr;u.response._data=t(e);break}case"stream":u.response._data=u.response.body||u.response._bodyInit;break;default:u.response._data=await u.response[e]()}}return u.options.onResponse&&await callHooks(u,u.options.onResponse),!u.options.ignoreResponseError&&u.response.status>=400&&u.response.status<600?(u.options.onResponseError&&await callHooks(u,u.options.onResponseError),await onError(u)):u.response},$fetch=async function(e,t){return(await $fetchRaw(e,t))._data};return $fetch.raw=$fetchRaw,$fetch.native=(...e)=>t(...e),$fetch.create=(t={},s={})=>createFetch({...e,...s,defaults:{...e.defaults,...s.defaults,...t}}),$fetch}const je=globalThis.fetch?(...e)=>globalThis.fetch(...e):function(){if(!JSON.parse(e.env.FETCH_KEEP_ALIVE||"false"))return me;const s={keepAlive:!0},c=new t.Agent(s),l=new a.Agent(s),u={agent:e=>"http:"===e.protocol?c:l};return function(e,t){return me(e,{...u,...t})}}(),Te=globalThis.Headers||he,_e=globalThis.AbortController||fe,xe=createFetch({fetch:je,Headers:Te,AbortController:_e});function defaultHandler(e,t,s){const a=e.unhandled||e.fatal,c=e.statusCode||500,l=e.statusMessage||"Server Error",u=getRequestURL(t,{xForwardedHost:!0,xForwardedProto:!0});if(404===c){const e="/";if(/^\/[^/]/.test(e)&&!u.pathname.startsWith(e)){return{status:302,statusText:"Found",headers:{location:`${e}${u.pathname.slice(1)}${u.search}`},body:"Redirecting..."}}}if(a&&!s?.silent){const s=[e.unhandled&&"[unhandled]",e.fatal&&"[fatal]"].filter(Boolean).join(" ");console.error(`[request error] ${s} [${t.method}] ${u}\n`,e)}const d={"content-type":"application/json","x-content-type-options":"nosniff","x-frame-options":"DENY","referrer-policy":"no-referrer","content-security-policy":"script-src 'none'; frame-ancestors 'none';"};setResponseStatus(t,c,l),404!==c&&getResponseHeader(t,"cache-control")||(d["cache-control"]="no-cache");return{status:c,statusText:l,headers:d,body:{error:!0,url:u.href,statusCode:c,statusMessage:l,message:a?"Server Error":e.message,data:a?void 0:e.data}}}const ze=[function(e,t){const s=defaultHandler(e,t);return setResponseHeaders(t,s.headers),setResponseStatus(t,s.status,s.statusText),send(t,JSON.stringify(s.body,null,2))}];const Re=[],ke={"/index.html":{type:"text/html; charset=utf-8",etag:'"ca4-0j0msq03ttJDJCXCYuxwYQXNwPY"',mtime:"2025-03-10T07:50:22.628Z",size:3236,path:"../public/index.html"},"/logo.png":{type:"image/png",etag:'"146c-vbv340mQ6WdpZBtCqwFRw74KQuc"',mtime:"2025-03-10T07:50:22.628Z",size:5228,path:"../public/logo.png"},"/manifest.webmanifest":{type:"application/manifest+json",etag:'"2fd-zWkiHcrpBX6ARjw8dVUGeqhPPmc"',mtime:"2025-03-10T07:50:22.628Z",size:765,path:"../public/manifest.webmanifest"},"/popup.html":{type:"text/html; charset=utf-8",etag:'"184d-v08s76SDNXvhDRTSNRMqfB6nCWI"',mtime:"2025-03-10T07:50:22.628Z",size:6221,path:"../public/popup.html"},"/pwa-196x196.png":{type:"image/png",etag:'"1eb7-p6q5vh3QYAEsrZYyk7SBkrshKtE"',mtime:"2025-03-10T07:50:22.628Z",size:7863,path:"../public/pwa-196x196.png"},"/pwa-256x256.png":{type:"image/png",etag:'"2713-9NzNvaCAwa1EQO5RcbhcoOjZAK4"',mtime:"2025-03-10T07:50:22.628Z",size:10003,path:"../public/pwa-256x256.png"},"/pwa-512x512.png":{type:"image/png",etag:'"6bf3-7vwlcGNRgCNfmMJg9y1nkg29W/Y"',mtime:"2025-03-10T07:50:22.628Z",size:27635,path:"../public/pwa-512x512.png"},"/sw.js":{type:"text/javascript; charset=utf-8",etag:'"bdd-9ClrYBCQdLbbndKds5nM4lDupSU"',mtime:"2025-03-10T07:50:22.628Z",size:3037,path:"../public/sw.js"},"/swagger/LICENSE":{type:"text/plain; charset=utf-8",etag:'"2c5e-K4uBUimqimHkg/tLoFiLi2xJGJA"',mtime:"2025-03-10T07:50:22.585Z",size:11358,path:"../public/swagger/LICENSE"},"/swagger/NOTICE":{type:"text/plain; charset=utf-8",etag:'"37-0n8Fhwk9uv718DEoBFAYAHxrqZ8"',mtime:"2025-03-10T07:50:22.607Z",size:55,path:"../public/swagger/NOTICE"},"/swagger/README.md":{type:"text/markdown; charset=utf-8",etag:'"6be-eQ4mvDl95ct54H1v8dasMT5BJwQ"',mtime:"2025-03-10T07:50:22.607Z",size:1726,path:"../public/swagger/README.md"},"/swagger/absolute-path.js":{type:"text/javascript; charset=utf-8",etag:'"212-J+QveHG7rDiOFdNzZCZDqcDOK+M"',mtime:"2025-03-10T07:50:22.608Z",size:530,path:"../public/swagger/absolute-path.js"},"/swagger/favicon-16x16.png":{type:"image/png",etag:'"299-P/Ck0KVN5edEo4I0mCIWWmtplO0"',mtime:"2025-03-10T07:50:22.608Z",size:665,path:"../public/swagger/favicon-16x16.png"},"/swagger/favicon-32x32.png":{type:"image/png",etag:'"274-jKULWQGffxfGW3fqT5ChsaRqwLY"',mtime:"2025-03-10T07:50:22.608Z",size:628,path:"../public/swagger/favicon-32x32.png"},"/swagger/index.css":{type:"text/css; charset=utf-8",etag:'"ca-cVhpBjOPaUIKpM8dNJT+6MUz8Ro"',mtime:"2025-03-10T07:50:22.608Z",size:202,path:"../public/swagger/index.css"},"/swagger/index.html":{type:"text/html; charset=utf-8",etag:'"2de-1EOW5JSXowvBRBqUcXZxJSLvf2M"',mtime:"2025-03-10T07:50:22.608Z",size:734,path:"../public/swagger/index.html"},"/swagger/index.js":{type:"text/javascript; charset=utf-8",etag:'"32d-GIZCZQ6FP1cqjHGRuiG/HV4bPls"',mtime:"2025-03-10T07:50:22.608Z",size:813,path:"../public/swagger/index.js"},"/swagger/oauth2-redirect.html":{type:"text/html; charset=utf-8",etag:'"a9b-4dCYXMgAc9mtJO1U4TUJArG0ZRw"',mtime:"2025-03-10T07:50:22.608Z",size:2715,path:"../public/swagger/oauth2-redirect.html"},"/swagger/package.json":{type:"application/json",etag:'"22f-pgoet2ouXTR1MMELLM9UMW0OVUQ"',mtime:"2025-03-10T07:50:22.609Z",size:559,path:"../public/swagger/package.json"},"/swagger/swagger-initializer.js":{type:"text/javascript; charset=utf-8",etag:'"29a-zW3E63PXRtQnB3CBmSCmAsl3emI"',mtime:"2025-03-10T07:50:22.609Z",size:666,path:"../public/swagger/swagger-initializer.js"},"/swagger/swagger-ui-bundle.js":{type:"text/javascript; charset=utf-8",etag:'"165fd4-pYLRc3QLnwTnl7OBjXKk8Xedow8"',mtime:"2025-03-10T07:50:22.615Z",size:1466324,path:"../public/swagger/swagger-ui-bundle.js"},"/swagger/swagger-ui-bundle.js.map":{type:"application/json",etag:'"1d4f6e-EdZwAI/8NHP9DkSgVRmzrlnheWM"',mtime:"2025-03-10T07:50:22.616Z",size:1920878,path:"../public/swagger/swagger-ui-bundle.js.map"},"/swagger/swagger-ui-es-bundle-core.js":{type:"text/javascript; charset=utf-8",etag:'"732f0-8ze7BhcR9BN81cnJ42Po8aECNTc"',mtime:"2025-03-10T07:50:22.611Z",size:471792,path:"../public/swagger/swagger-ui-es-bundle-core.js"},"/swagger/swagger-ui-es-bundle-core.js.map":{type:"application/json",etag:'"189eb6-7jWUWBNcVregNHrTt6Ua2xzMAJs"',mtime:"2025-03-10T07:50:22.615Z",size:1613494,path:"../public/swagger/swagger-ui-es-bundle-core.js.map"},"/swagger/swagger-ui-es-bundle.js":{type:"text/javascript; charset=utf-8",etag:'"165ede-8ItyH4p3gifNtaFKdYO37Rwl+R4"',mtime:"2025-03-10T07:50:22.621Z",size:1466078,path:"../public/swagger/swagger-ui-es-bundle.js"},"/swagger/swagger-ui-es-bundle.js.map":{type:"application/json",etag:'"1d2e65-gxP1cBHxZIolETVmnp6JQCmZz/o"',mtime:"2025-03-10T07:50:22.627Z",size:1912421,path:"../public/swagger/swagger-ui-es-bundle.js.map"},"/swagger/swagger-ui-standalone-preset.js":{type:"text/javascript; charset=utf-8",etag:'"37f67-l61kMpt56I/qm8hhdmzV/7yVnVw"',mtime:"2025-03-10T07:50:22.621Z",size:229223,path:"../public/swagger/swagger-ui-standalone-preset.js"},"/swagger/swagger-ui-standalone-preset.js.map":{type:"application/json",etag:'"50934-V3RjXs1XH6csGCSTQuOjPfev+7U"',mtime:"2025-03-10T07:50:22.622Z",size:330036,path:"../public/swagger/swagger-ui-standalone-preset.js.map"},"/swagger/swagger-ui.css":{type:"text/css; charset=utf-8",etag:'"25d69-gcCiVU2QIynmcXRFWlwruVby+qE"',mtime:"2025-03-10T07:50:22.624Z",size:154985,path:"../public/swagger/swagger-ui.css"},"/swagger/swagger-ui.css.map":{type:"application/json",etag:'"3f31a-cM+Jfbp4KhhTJ6lBw8OgFePuvkk"',mtime:"2025-03-10T07:50:22.624Z",size:258842,path:"../public/swagger/swagger-ui.css.map"},"/swagger/swagger-ui.js":{type:"text/javascript; charset=utf-8",etag:'"55236-VKwJmOdR13bM4UKKqz/8O7u/758"',mtime:"2025-03-10T07:50:22.626Z",size:348726,path:"../public/swagger/swagger-ui.js"},"/swagger/swagger-ui.js.map":{type:"application/json",etag:'"12526b-9N/Azn20bX0am77tLtO0mJAf+js"',mtime:"2025-03-10T07:50:22.630Z",size:1200747,path:"../public/swagger/swagger-ui.js.map"},"/assets/@agoose77-BobwiAX6.js":{type:"text/javascript; charset=utf-8",etag:'"3f8-yBknuHsnnaHXGEpEijGsJOtBdAo"',mtime:"2025-03-10T07:50:22.583Z",size:1016,path:"../public/assets/@agoose77-BobwiAX6.js"},"/assets/@babel-D5ZMb8W9.js":{type:"text/javascript; charset=utf-8",etag:'"db1-m5rnV2WS84lNP3qks8hx1iOLDYA"',mtime:"2025-03-10T07:50:22.585Z",size:3505,path:"../public/assets/@babel-D5ZMb8W9.js"},"/assets/@braintree-DgpeZQRe.js":{type:"text/javascript; charset=utf-8",etag:'"2a4-2K8KNVdkUaQ04A8o43R6GWDlpco"',mtime:"2025-03-10T07:50:22.585Z",size:676,path:"../public/assets/@braintree-DgpeZQRe.js"},"/assets/@dicebear-JcnEMRoc.js":{type:"text/javascript; charset=utf-8",etag:'"e69c6-YtVovg5a+LyAi23aDuwID4it3CI"',mtime:"2025-03-10T07:50:22.586Z",size:944582,path:"../public/assets/@dicebear-JcnEMRoc.js"},"/assets/@intlify-eboPrqDD.js":{type:"text/javascript; charset=utf-8",etag:'"82de-iBGY7LJDbsKntsZIQgnNE8kD4lw"',mtime:"2025-03-10T07:50:22.586Z",size:33502,path:"../public/assets/@intlify-eboPrqDD.js"},"/assets/@material-C_XhzpVg.js":{type:"text/javascript; charset=utf-8",etag:'"40cb-64INX7fQdl6f/siGMXz+LIXUno4"',mtime:"2025-03-10T07:50:22.589Z",size:16587,path:"../public/assets/@material-C_XhzpVg.js"},"/assets/@mozilla-BD532_dh.js":{type:"text/javascript; charset=utf-8",etag:'"b077-4sHQRvCwJRi7Ty345BizX8pKvHg"',mtime:"2025-03-10T07:50:22.587Z",size:45175,path:"../public/assets/@mozilla-BD532_dh.js"},"/assets/@popperjs-B4tvfKWZ.js":{type:"text/javascript; charset=utf-8",etag:'"4f78-Lyps+KUWR9d3YKiyQV8FsmXX5DY"',mtime:"2025-03-10T07:50:22.589Z",size:20344,path:"../public/assets/@popperjs-B4tvfKWZ.js"},"/assets/@traptitech-BPk2gen6.js":{type:"text/javascript; charset=utf-8",etag:'"91b-OUSV/bSR4ygVDXuI3mxrW0a847Y"',mtime:"2025-03-10T07:50:22.591Z",size:2331,path:"../public/assets/@traptitech-BPk2gen6.js"},"/assets/@vue-DsZlmJIP.js":{type:"text/javascript; charset=utf-8",etag:'"32d51-LSKgHa+KyuXG0hwuJnHDKqVTogs"',mtime:"2025-03-10T07:50:22.587Z",size:208209,path:"../public/assets/@vue-DsZlmJIP.js"},"/assets/@vueuse-Cn3Nsuq9.js":{type:"text/javascript; charset=utf-8",etag:'"2176-yFWz1Hcf9d9yOMGut7UfRmETQmA"',mtime:"2025-03-10T07:50:22.587Z",size:8566,path:"../public/assets/@vueuse-Cn3Nsuq9.js"},"/assets/@wdns-D9-j-vRb.js":{type:"text/javascript; charset=utf-8",etag:'"30b48-UCuM/3NcxpPwVmHRAwuBrwDDC94"',mtime:"2025-03-10T07:50:22.587Z",size:199496,path:"../public/assets/@wdns-D9-j-vRb.js"},"/assets/ChatInput-BMuO6hgs.css":{type:"text/css; charset=utf-8",etag:'"186-rCUycStrOY1FSp1LM5EdmoDU818"',mtime:"2025-03-10T07:50:22.588Z",size:390,path:"../public/assets/ChatInput-BMuO6hgs.css"},"/assets/ChatInput.vue_vue_type_style_index_0_lang-CF8t52ZG.js":{type:"text/javascript; charset=utf-8",etag:'"2aed-/DW5EwMxB6yP9jJ5WqNCvlK+5ks"',mtime:"2025-03-10T07:50:22.588Z",size:10989,path:"../public/assets/ChatInput.vue_vue_type_style_index_0_lang-CF8t52ZG.js"},"/assets/CodeBlocks-Cek-iqBx.css":{type:"text/css; charset=utf-8",etag:'"c99-JkJoeIng8xT00xL6m+LJ+/R5x30"',mtime:"2025-03-10T07:50:22.588Z",size:3225,path:"../public/assets/CodeBlocks-Cek-iqBx.css"},"/assets/CodeBlocks.vue_vue_type_style_index_0_lang-_VdwPj4y.js":{type:"text/javascript; charset=utf-8",etag:'"3f09-KXlUqFXuLV9+kqmBtWOXlSiPATk"',mtime:"2025-03-10T07:50:22.588Z",size:16137,path:"../public/assets/CodeBlocks.vue_vue_type_style_index_0_lang-_VdwPj4y.js"},"/assets/FrameContent-BXoZjZi-.js":{type:"text/javascript; charset=utf-8",etag:'"6aa-rwRkfhkAOHTmtIesvkjxAVazLTI"',mtime:"2025-03-10T07:50:22.588Z",size:1706,path:"../public/assets/FrameContent-BXoZjZi-.js"},"/assets/FrameContent-CUoI637t.css":{type:"text/css; charset=utf-8",etag:'"fb-6QJbV1XyCjCNz5MaOnPi8ahEGDo"',mtime:"2025-03-10T07:50:22.588Z",size:251,path:"../public/assets/FrameContent-CUoI637t.css"},"/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2":{type:"font/woff2",etag:'"6dac-NElHQ3Nv2nVxl9FvzGpuGnkxfIY"',mtime:"2025-03-10T07:50:22.588Z",size:28076,path:"../public/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2"},"/assets/KaTeX_AMS-Regular-DMm9YOAa.woff":{type:"font/woff",etag:'"82ec-ma2i3jIA55UUPWOSMsNESwgBgjU"',mtime:"2025-03-10T07:50:22.588Z",size:33516,path:"../public/assets/KaTeX_AMS-Regular-DMm9YOAa.woff"},"/assets/KaTeX_AMS-Regular-DRggAlZN.ttf":{type:"font/ttf",etag:'"f890-Hf0O5uMPihwjmZ2dll24cAtany4"',mtime:"2025-03-10T07:50:22.590Z",size:63632,path:"../public/assets/KaTeX_AMS-Regular-DRggAlZN.ttf"},"/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf":{type:"font/ttf",etag:'"3050-j6tziha6j7fnACoHXwNqRVpFxug"',mtime:"2025-03-10T07:50:22.593Z",size:12368,path:"../public/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf"},"/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff":{type:"font/woff",etag:'"1e24-3SOsD7CsRpsGJEhep41wD2NhQgM"',mtime:"2025-03-10T07:50:22.589Z",size:7716,path:"../public/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff"},"/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2":{type:"font/woff2",etag:'"1b00-W/pJysRs0derE1E4jTfBGvWbphU"',mtime:"2025-03-10T07:50:22.589Z",size:6912,path:"../public/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2"},"/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff":{type:"font/woff",etag:'"1de8-Gm85vXDJt0cTB431991hCPm604s"',mtime:"2025-03-10T07:50:22.589Z",size:7656,path:"../public/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff"},"/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2":{type:"font/woff2",etag:'"1afc-n4B34LOKKQzZt7E2sKwpyDdegaY"',mtime:"2025-03-10T07:50:22.589Z",size:6908,path:"../public/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2"},"/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf":{type:"font/ttf",etag:'"3038-JvJqE+an0KabSPYqzTGoGWvOf24"',mtime:"2025-03-10T07:50:22.589Z",size:12344,path:"../public/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf"},"/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf":{type:"font/ttf",etag:'"4c80-TgjdADgxJOfNlpcMyw++NcnvqqM"',mtime:"2025-03-10T07:50:22.589Z",size:19584,path:"../public/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf"},"/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff":{type:"font/woff",etag:'"33f0-W7r9UB8mIhlCavfyDBEDu0tzJZI"',mtime:"2025-03-10T07:50:22.590Z",size:13296,path:"../public/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff"},"/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2":{type:"font/woff2",etag:'"2c54-+Y+JJy7KEa5BdnLFmg+qaoiAWok"',mtime:"2025-03-10T07:50:22.590Z",size:11348,path:"../public/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2"},"/assets/KaTeX_Fraktur-Regular-CB_wures.ttf":{type:"font/ttf",etag:'"4c74-F9tAiC3V8UBiXyjdlMQwReGJPpg"',mtime:"2025-03-10T07:50:22.590Z",size:19572,path:"../public/assets/KaTeX_Fraktur-Regular-CB_wures.ttf"},"/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2":{type:"font/woff2",etag:'"2c34-pXZMbieE0CggwLkECJ8/rHmL5Po"',mtime:"2025-03-10T07:50:22.590Z",size:11316,path:"../public/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2"},"/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff":{type:"font/woff",etag:'"3398-b3VjdjYPCBW0SGL1f3let8HNTbI"',mtime:"2025-03-10T07:50:22.590Z",size:13208,path:"../public/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff"},"/assets/KaTeX_Main-Bold-Cx986IdX.woff2":{type:"font/woff2",etag:'"62ec-MQUKGxsSP7LFnK0fdLff+Q3rj84"',mtime:"2025-03-10T07:50:22.590Z",size:25324,path:"../public/assets/KaTeX_Main-Bold-Cx986IdX.woff2"},"/assets/KaTeX_Main-Bold-Jm3AIy58.woff":{type:"font/woff",etag:'"74d8-9po2JQ6ubooCFzqZCapihCi6IGA"',mtime:"2025-03-10T07:50:22.590Z",size:29912,path:"../public/assets/KaTeX_Main-Bold-Jm3AIy58.woff"},"/assets/KaTeX_Main-Bold-waoOVXN0.ttf":{type:"font/ttf",etag:'"c888-QTqz3D/DpXUidbriyuZ+tY8rMvA"',mtime:"2025-03-10T07:50:22.590Z",size:51336,path:"../public/assets/KaTeX_Main-Bold-waoOVXN0.ttf"},"/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2":{type:"font/woff2",etag:'"418c-pKSQW4sSb5/9VT0hpyoMJOlIA0U"',mtime:"2025-03-10T07:50:22.590Z",size:16780,path:"../public/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2"},"/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf":{type:"font/ttf",etag:'"80c8-umRk5EL9UK73Z4kkug8tlYHruwc"',mtime:"2025-03-10T07:50:22.590Z",size:32968,path:"../public/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf"},"/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff":{type:"font/woff",etag:'"4bd4-A4u9yIh6lzCtlBR/xXxv9N+0hBE"',mtime:"2025-03-10T07:50:22.590Z",size:19412,path:"../public/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff"},"/assets/KaTeX_Main-Italic-3WenGoN9.ttf":{type:"font/ttf",etag:'"832c-HVZoorlK59vu/dfNaNmP6dWCXgc"',mtime:"2025-03-10T07:50:22.590Z",size:33580,path:"../public/assets/KaTeX_Main-Italic-3WenGoN9.ttf"},"/assets/KaTeX_Main-Italic-BMLOBm91.woff":{type:"font/woff",etag:'"4cdc-fIWJITvHAD4sIzS1HKQVKFiYer0"',mtime:"2025-03-10T07:50:22.590Z",size:19676,path:"../public/assets/KaTeX_Main-Italic-BMLOBm91.woff"},"/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2":{type:"font/woff2",etag:'"425c-ybK1/9LyeqXGtvm6QaeytOZhAtM"',mtime:"2025-03-10T07:50:22.590Z",size:16988,path:"../public/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2"},"/assets/KaTeX_Main-Regular-B22Nviop.woff2":{type:"font/woff2",etag:'"66a0-yIQIbCXOyFWBYLICb5Bu99o1cKw"',mtime:"2025-03-10T07:50:22.590Z",size:26272,path:"../public/assets/KaTeX_Main-Regular-B22Nviop.woff2"},"/assets/KaTeX_Main-Regular-Dr94JaBh.woff":{type:"font/woff",etag:'"7834-/crlS6HUY17oWlRizByX5SHP1RU"',mtime:"2025-03-10T07:50:22.590Z",size:30772,path:"../public/assets/KaTeX_Main-Regular-Dr94JaBh.woff"},"/assets/KaTeX_Main-Regular-ypZvNtVU.ttf":{type:"font/ttf",etag:'"d14c-h0TbbvjDCePchfG76YBSCti3v9Q"',mtime:"2025-03-10T07:50:22.590Z",size:53580,path:"../public/assets/KaTeX_Main-Regular-ypZvNtVU.ttf"},"/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf":{type:"font/ttf",etag:'"79dc-6AzEwjLSB192KlLUa+tP+9N6Xxo"',mtime:"2025-03-10T07:50:22.591Z",size:31196,path:"../public/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf"},"/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2":{type:"font/woff2",etag:'"4010-j8udLeZaxxoMT92YYXPbcwWS7Yo"',mtime:"2025-03-10T07:50:22.591Z",size:16400,path:"../public/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2"},"/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff":{type:"font/woff",etag:'"48ec-1U5kgNbUBGxqVhmqODuqWXH7igw"',mtime:"2025-03-10T07:50:22.591Z",size:18668,path:"../public/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff"},"/assets/KaTeX_Math-Italic-DA0__PXp.woff":{type:"font/woff",etag:'"493c-HBtIc54ctL4T3djAvCed3oUb26A"',mtime:"2025-03-10T07:50:22.591Z",size:18748,path:"../public/assets/KaTeX_Math-Italic-DA0__PXp.woff"},"/assets/KaTeX_Math-Italic-flOr_0UB.ttf":{type:"font/ttf",etag:'"7a4c-npoQ2Ppa2Iyez6SQKt3U2SWAsrw"',mtime:"2025-03-10T07:50:22.591Z",size:31308,path:"../public/assets/KaTeX_Math-Italic-flOr_0UB.ttf"},"/assets/KaTeX_Math-Italic-t53AETM-.woff2":{type:"font/woff2",etag:'"4038-20iD0M/5XstcA0EOMoOnN8Ue1gQ"',mtime:"2025-03-10T07:50:22.591Z",size:16440,path:"../public/assets/KaTeX_Math-Italic-t53AETM-.woff2"},"/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf":{type:"font/ttf",etag:'"5fb8-ILRfU0a2htUsRFdFOT0XB7uI7B0"',mtime:"2025-03-10T07:50:22.597Z",size:24504,path:"../public/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf"},"/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2":{type:"font/woff2",etag:'"2fb8-iG5heXpSXUqvzgqvV0FP366huHM"',mtime:"2025-03-10T07:50:22.591Z",size:12216,path:"../public/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2"},"/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff":{type:"font/woff",etag:'"3848-or7dyKPU0IAo1wd3btvU0k8uwPw"',mtime:"2025-03-10T07:50:22.591Z",size:14408,path:"../public/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff"},"/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2":{type:"font/woff2",etag:'"2efc-PV+jyzCfjYO03L3SdyXycPYPPus"',mtime:"2025-03-10T07:50:22.591Z",size:12028,path:"../public/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2"},"/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff":{type:"font/woff",etag:'"3720-dWSjZrdv2DcEHCS+70xVgKWt1A4"',mtime:"2025-03-10T07:50:22.592Z",size:14112,path:"../public/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff"},"/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf":{type:"font/ttf",etag:'"575c-mR+9wDFouxSkRHz6PlFfCabs/tw"',mtime:"2025-03-10T07:50:22.592Z",size:22364,path:"../public/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf"},"/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf":{type:"font/ttf",etag:'"4bec-So4XoMtYqCKN1EF/vRuJnkHasEU"',mtime:"2025-03-10T07:50:22.592Z",size:19436,path:"../public/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf"},"/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff":{type:"font/woff",etag:'"301c-gEYQ9MsuLq2WlLjaLshOzo0Jw40"',mtime:"2025-03-10T07:50:22.592Z",size:12316,path:"../public/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff"},"/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2":{type:"font/woff2",etag:'"2868-5F1fT0p/L/PcqfzMLxSOeB4j8pI"',mtime:"2025-03-10T07:50:22.592Z",size:10344,path:"../public/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2"},"/assets/KaTeX_Script-Regular-C5JkGWo-.ttf":{type:"font/ttf",etag:'"4108-xvZ12oGtKcvySyz3cPeVtNosZI4"',mtime:"2025-03-10T07:50:22.592Z",size:16648,path:"../public/assets/KaTeX_Script-Regular-C5JkGWo-.ttf"},"/assets/KaTeX_Script-Regular-D3wIWfF6.woff2":{type:"font/woff2",etag:'"25ac-Y7gJWfH8Voma4hugy7zTmmywg5A"',mtime:"2025-03-10T07:50:22.592Z",size:9644,path:"../public/assets/KaTeX_Script-Regular-D3wIWfF6.woff2"},"/assets/KaTeX_Script-Regular-D5yQViql.woff":{type:"font/woff",etag:'"295c-agXNyk8fcIXmB9w4vt71V1P4b9g"',mtime:"2025-03-10T07:50:22.592Z",size:10588,path:"../public/assets/KaTeX_Script-Regular-D5yQViql.woff"},"/assets/KaTeX_Size1-Regular-C195tn64.woff":{type:"font/woff",etag:'"1960-rv5mdKVlM2J8c5zXiWOY8USH4Bw"',mtime:"2025-03-10T07:50:22.593Z",size:6496,path:"../public/assets/KaTeX_Size1-Regular-C195tn64.woff"},"/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf":{type:"font/ttf",etag:'"2fc4-MoC6y8sSRZcf4BAXtHTHbDN8EMk"',mtime:"2025-03-10T07:50:22.593Z",size:12228,path:"../public/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf"},"/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2":{type:"font/woff2",etag:'"155c-V/pZmXShvAs31fDlzIYCMC8CtXM"',mtime:"2025-03-10T07:50:22.593Z",size:5468,path:"../public/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2"},"/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf":{type:"font/ttf",etag:'"2cf4-+vc/8+eVGE5UMWZv+v64qg4og00"',mtime:"2025-03-10T07:50:22.593Z",size:11508,path:"../public/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf"},"/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2":{type:"font/woff2",etag:'"1458-7hhxNjSjvoyZcnaAhVKrGVpZj0M"',mtime:"2025-03-10T07:50:22.593Z",size:5208,path:"../public/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2"},"/assets/KaTeX_Size2-Regular-oD1tc_U0.woff":{type:"font/woff",etag:'"182c-RmmP8YGb0ngm/V0txLpOH2PKzfQ"',mtime:"2025-03-10T07:50:22.593Z",size:6188,path:"../public/assets/KaTeX_Size2-Regular-oD1tc_U0.woff"},"/assets/KaTeX_Size3-Regular-CTq5MqoE.woff":{type:"font/woff",etag:'"1144-HaGQWm0dm8q5KwWd9ytSjepwi8s"',mtime:"2025-03-10T07:50:22.593Z",size:4420,path:"../public/assets/KaTeX_Size3-Regular-CTq5MqoE.woff"},"/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf":{type:"font/ttf",etag:'"1da4-MCphsuzfgtOeZ4D0K9B+5M5nuNU"',mtime:"2025-03-10T07:50:22.594Z",size:7588,path:"../public/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf"},"/assets/KaTeX_Size4-Regular-BF-4gkZK.woff":{type:"font/woff",etag:'"175c-j93bg1E+wiYjHr7gUHnsRfwBNXg"',mtime:"2025-03-10T07:50:22.593Z",size:5980,path:"../public/assets/KaTeX_Size4-Regular-BF-4gkZK.woff"},"/assets/KaTeX_Size4-Regular-DWFBv043.ttf":{type:"font/ttf",etag:'"287c-PY2d1YoDt6RtSX9XYeYNi4RKUZk"',mtime:"2025-03-10T07:50:22.593Z",size:10364,path:"../public/assets/KaTeX_Size4-Regular-DWFBv043.ttf"},"/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2":{type:"font/woff2",etag:'"1340-m+0X+5LyZQUB4imGLEDGQH4cVSg"',mtime:"2025-03-10T07:50:22.593Z",size:4928,path:"../public/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2"},"/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff":{type:"font/woff",etag:'"3e9c-9ecp+k/0ZvwH4MerGXmtcMRfpdU"',mtime:"2025-03-10T07:50:22.593Z",size:16028,path:"../public/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff"},"/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2":{type:"font/woff2",etag:'"3500-egiIP//GlYxxzAGnWguZzKPktHU"',mtime:"2025-03-10T07:50:22.593Z",size:13568,path:"../public/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2"},"/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf":{type:"font/ttf",etag:'"6ba4-YpuZ+vGNl1KfIaGxAYCT5gvNBY8"',mtime:"2025-03-10T07:50:22.593Z",size:27556,path:"../public/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf"},"/assets/about-D4hEieAK.js":{type:"text/javascript; charset=utf-8",etag:'"37e-sDBCJMdJgHU2y3R8eG8i7Mtuze0"',mtime:"2025-03-10T07:50:22.593Z",size:894,path:"../public/assets/about-D4hEieAK.js"},"/assets/app-_ksMLlTy.js":{type:"text/javascript; charset=utf-8",etag:'"1a-F1ebt5luQF+ilw3nh0acHjD0L2E"',mtime:"2025-03-10T07:50:22.594Z",size:26,path:"../public/assets/app-_ksMLlTy.js"},"/assets/assets-t-logo-CxwPZnhN.png":{type:"image/png",etag:'"146c-vbv340mQ6WdpZBtCqwFRw74KQuc"',mtime:"2025-03-10T07:50:22.594Z",size:5228,path:"../public/assets/assets-t-logo-CxwPZnhN.png"},"/assets/avatar.vue_vue_type_script_setup_true_lang-jav6E5Ln.js":{type:"text/javascript; charset=utf-8",etag:'"440-Moq3TP1IN+wubx/ykd6mB2BoxEU"',mtime:"2025-03-10T07:50:22.594Z",size:1088,path:"../public/assets/avatar.vue_vue_type_script_setup_true_lang-jav6E5Ln.js"},"/assets/bezier-easing-7-TbLOHs.js":{type:"text/javascript; charset=utf-8",etag:'"3ea-pHE/xelcSgzrVsNtgBk+OqH+Xj4"',mtime:"2025-03-10T07:50:22.594Z",size:1002,path:"../public/assets/bezier-easing-7-TbLOHs.js"},"/assets/changelog-CmzmwycZ.js":{type:"text/javascript; charset=utf-8",etag:'"386-NGHI9iQV79UEVQk5pk3qbVXaGGc"',mtime:"2025-03-10T07:50:22.594Z",size:902,path:"../public/assets/changelog-CmzmwycZ.js"},"/assets/chat-Cg_gpPLS.css":{type:"text/css; charset=utf-8",etag:'"2c8-m/xtY2/Rayw0YtUqtAP/B3y7mKI"',mtime:"2025-03-10T07:50:22.594Z",size:712,path:"../public/assets/chat-Cg_gpPLS.css"},"/assets/chat-DpK0NeK3.js":{type:"text/javascript; charset=utf-8",etag:'"a59d-HKg7x/ODk6trsxAGRdF1RxqC0WA"',mtime:"2025-03-10T07:50:22.594Z",size:42397,path:"../public/assets/chat-DpK0NeK3.js"},"/assets/chroma-js-C-7CTB41.js":{type:"text/javascript; charset=utf-8",etag:'"a4e8-BKSC/g+/lzzx+QBliVb61lyiqq0"',mtime:"2025-03-10T07:50:22.596Z",size:42216,path:"../public/assets/chroma-js-C-7CTB41.js"},"/assets/content-BEC9IjhC.js":{type:"text/javascript; charset=utf-8",etag:'"3302-ZdEjWzQSVoF/4QoKXrn4gIzBlOM"',mtime:"2025-03-10T07:50:22.594Z",size:13058,path:"../public/assets/content-BEC9IjhC.js"},"/assets/content-CXerDfC_.css":{type:"text/css; charset=utf-8",etag:'"cb-1a+zqFn+hrqgGCN6Yif45aPXz90"',mtime:"2025-03-10T07:50:22.594Z",size:203,path:"../public/assets/content-CXerDfC_.css"},"/assets/core-js-pure-ZQ_YVJtv.js":{type:"text/javascript; charset=utf-8",etag:'"dec5-SA29E6fuprNV7OZq/tNr3STPP3Y"',mtime:"2025-03-10T07:50:22.594Z",size:57029,path:"../public/assets/core-js-pure-ZQ_YVJtv.js"},"/assets/cose-base-kQthUiMK.js":{type:"text/javascript; charset=utf-8",etag:'"4d11-UT667dn6bngYS8t0/u8gyfXlRNg"',mtime:"2025-03-10T07:50:22.594Z",size:19729,path:"../public/assets/cose-base-kQthUiMK.js"},"/assets/cytoscape-D84qPEQv.js":{type:"text/javascript; charset=utf-8",etag:'"6aceb-twNoBNmdF1VRBrOy3FSAzpskH50"',mtime:"2025-03-10T07:50:22.595Z",size:437483,path:"../public/assets/cytoscape-D84qPEQv.js"},"/assets/cytoscape-cose-bilkent-CoOmxuE9.js":{type:"text/javascript; charset=utf-8",etag:'"1e01-+ynP4kmVP6qIQ4YrSjV1/OLlaxc"',mtime:"2025-03-10T07:50:22.594Z",size:7681,path:"../public/assets/cytoscape-cose-bilkent-CoOmxuE9.js"},"/assets/d3-BW2GlWy8.js":{type:"text/javascript; charset=utf-8",etag:'"43-ZxqrbLk8FxHOK3GAVGBLaB9Ogso"',mtime:"2025-03-10T07:50:22.594Z",size:67,path:"../public/assets/d3-BW2GlWy8.js"},"/assets/d3-array-B0evfIyH.js":{type:"text/javascript; charset=utf-8",etag:'"7c1-lh6nd7cnYPm4Z/Jc03/2yAvj/Q8"',mtime:"2025-03-10T07:50:22.595Z",size:1985,path:"../public/assets/d3-array-B0evfIyH.js"},"/assets/d3-axis-pCwzqJ1S.js":{type:"text/javascript; charset=utf-8",etag:'"a79-FCk1dt/st3l2+muUJKrURh1ezMQ"',mtime:"2025-03-10T07:50:22.595Z",size:2681,path:"../public/assets/d3-axis-pCwzqJ1S.js"},"/assets/d3-brush-CAg10rWz.js":{type:"text/javascript; charset=utf-8",etag:'"25-WEegomVt8cuqScRFVAKG+JZEyho"',mtime:"2025-03-10T07:50:22.595Z",size:37,path:"../public/assets/d3-brush-CAg10rWz.js"},"/assets/d3-chord-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.595Z",size:1,path:"../public/assets/d3-chord-l0sNRNKZ.js"},"/assets/d3-color-D5ULnJIe.js":{type:"text/javascript; charset=utf-8",etag:'"23d9-9TMj/QP5dJtBT9As692nhYTIsZQ"',mtime:"2025-03-10T07:50:22.595Z",size:9177,path:"../public/assets/d3-color-D5ULnJIe.js"},"/assets/d3-contour-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.595Z",size:1,path:"../public/assets/d3-contour-l0sNRNKZ.js"},"/assets/d3-delaunay-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.595Z",size:1,path:"../public/assets/d3-delaunay-l0sNRNKZ.js"},"/assets/d3-dispatch-Chq_f_hl.js":{type:"text/javascript; charset=utf-8",etag:'"5ee-F7Y5WoYj59TMjfuZNv+jI2mpRbs"',mtime:"2025-03-10T07:50:22.595Z",size:1518,path:"../public/assets/d3-dispatch-Chq_f_hl.js"},"/assets/d3-drag-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.595Z",size:1,path:"../public/assets/d3-drag-l0sNRNKZ.js"},"/assets/d3-dsv-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.595Z",size:1,path:"../public/assets/d3-dsv-l0sNRNKZ.js"},"/assets/d3-ease-Cx6bG2vu.js":{type:"text/javascript; charset=utf-8",etag:'"45-VSWuH+b+NX8BgT3wmUO1g6B+Sf0"',mtime:"2025-03-10T07:50:22.595Z",size:69,path:"../public/assets/d3-ease-Cx6bG2vu.js"},"/assets/d3-fetch-XwboCDHR.js":{type:"text/javascript; charset=utf-8",etag:'"e3-prUwJVQ8U8YKc1tkPn7FeWtV+Kc"',mtime:"2025-03-10T07:50:22.595Z",size:227,path:"../public/assets/d3-fetch-XwboCDHR.js"},"/assets/d3-force-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.595Z",size:1,path:"../public/assets/d3-force-l0sNRNKZ.js"},"/assets/d3-format-C0lSXcPg.js":{type:"text/javascript; charset=utf-8",etag:'"1257-qKkScJcj4Fl1NtigmeM93+tlHLk"',mtime:"2025-03-10T07:50:22.595Z",size:4695,path:"../public/assets/d3-format-C0lSXcPg.js"},"/assets/d3-geo-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.596Z",size:1,path:"../public/assets/d3-geo-l0sNRNKZ.js"},"/assets/d3-hierarchy-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.599Z",size:1,path:"../public/assets/d3-hierarchy-l0sNRNKZ.js"},"/assets/d3-interpolate-Ct9kki6l.js":{type:"text/javascript; charset=utf-8",etag:'"10f8-ifxeguZgXlAAUCPyA9oa40V8LGk"',mtime:"2025-03-10T07:50:22.596Z",size:4344,path:"../public/assets/d3-interpolate-Ct9kki6l.js"},"/assets/d3-path-QSrLXsQ3.js":{type:"text/javascript; charset=utf-8",etag:'"804-y1a+1saOIZNeasBFa5tQrRqTySQ"',mtime:"2025-03-10T07:50:22.596Z",size:2052,path:"../public/assets/d3-path-QSrLXsQ3.js"},"/assets/d3-polygon-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.596Z",size:1,path:"../public/assets/d3-polygon-l0sNRNKZ.js"},"/assets/d3-quadtree-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.596Z",size:1,path:"../public/assets/d3-quadtree-l0sNRNKZ.js"},"/assets/d3-random-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.596Z",size:1,path:"../public/assets/d3-random-l0sNRNKZ.js"},"/assets/d3-scale-CjTvl_Qo.js":{type:"text/javascript; charset=utf-8",etag:'"11d8-kyXJzNNfgKHeAfH+qjnpYm197vE"',mtime:"2025-03-10T07:50:22.596Z",size:4568,path:"../public/assets/d3-scale-CjTvl_Qo.js"},"/assets/d3-scale-chromatic-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.596Z",size:1,path:"../public/assets/d3-scale-chromatic-l0sNRNKZ.js"},"/assets/d3-selection-G65jBFUY.js":{type:"text/javascript; charset=utf-8",etag:'"2f15-eEvtPZsFKx7JXdBMJ55bOpTcfAw"',mtime:"2025-03-10T07:50:22.596Z",size:12053,path:"../public/assets/d3-selection-G65jBFUY.js"},"/assets/d3-shape-C1TbtrGg.js":{type:"text/javascript; charset=utf-8",etag:'"5261-9tBH29zF9ZExRfaKO7bHMqFDFuQ"',mtime:"2025-03-10T07:50:22.596Z",size:21089,path:"../public/assets/d3-shape-C1TbtrGg.js"},"/assets/d3-time-CebKitJR.js":{type:"text/javascript; charset=utf-8",etag:'"1222-3pkot1fWhqHWZMa2qSs3BkF9lL0"',mtime:"2025-03-10T07:50:22.596Z",size:4642,path:"../public/assets/d3-time-CebKitJR.js"},"/assets/d3-time-format-D74OpZq4.js":{type:"text/javascript; charset=utf-8",etag:'"2292-O21RYzliBtwhUPxv0FWchRbHKuc"',mtime:"2025-03-10T07:50:22.596Z",size:8850,path:"../public/assets/d3-time-format-D74OpZq4.js"},"/assets/d3-timer-keMr1twq.js":{type:"text/javascript; charset=utf-8",etag:'"537-WnI8bA05aAnVcNPRJEZjZkmy08Y"',mtime:"2025-03-10T07:50:22.597Z",size:1335,path:"../public/assets/d3-timer-keMr1twq.js"},"/assets/d3-transition-swcnLnsT.js":{type:"text/javascript; charset=utf-8",etag:'"2aaf-q7TE85J+4pZAQUA2T4b6TZz5IDg"',mtime:"2025-03-10T07:50:22.597Z",size:10927,path:"../public/assets/d3-transition-swcnLnsT.js"},"/assets/d3-zoom-D4Vc87xO.js":{type:"text/javascript; charset=utf-8",etag:'"361-uR4XFeeODwXI4cGDTE0Kqu2LjTs"',mtime:"2025-03-10T07:50:22.597Z",size:865,path:"../public/assets/d3-zoom-D4Vc87xO.js"},"/assets/dagre-d3-es-FtH4B9px.js":{type:"text/javascript; charset=utf-8",etag:'"a4aa-AcKlUACb9MwJu8Y6Z5ucF2t06bA"',mtime:"2025-03-10T07:50:22.597Z",size:42154,path:"../public/assets/dagre-d3-es-FtH4B9px.js"},"/assets/dayjs-DOPU4UI6.js":{type:"text/javascript; charset=utf-8",etag:'"30c7-yIc2o8GypKflPbUp+Uk5+2o/1S0"',mtime:"2025-03-10T07:50:22.601Z",size:12487,path:"../public/assets/dayjs-DOPU4UI6.js"},"/assets/deep-pick-omit-DP_A4OSP.js":{type:"text/javascript; charset=utf-8",etag:'"466-wFXV9OVC9OUGEpNVO9d8tzbfJLU"',mtime:"2025-03-10T07:50:22.597Z",size:1126,path:"../public/assets/deep-pick-omit-DP_A4OSP.js"},"/assets/delaunator-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.597Z",size:1,path:"../public/assets/delaunator-l0sNRNKZ.js"},"/assets/destr-ClW9AvhW.js":{type:"text/javascript; charset=utf-8",etag:'"4b4-8lJ1jag+LQf5/nWIUeOkVDYVj7k"',mtime:"2025-03-10T07:50:22.597Z",size:1204,path:"../public/assets/destr-ClW9AvhW.js"},"/assets/dompurify-B5jhUdWW.js":{type:"text/javascript; charset=utf-8",etag:'"56f0-MmX4JF7TA2APkAmPt8f2XSj9ZMM"',mtime:"2025-03-10T07:50:22.597Z",size:22256,path:"../public/assets/dompurify-B5jhUdWW.js"},"/assets/elkjs-CmFeGg_o.js":{type:"text/javascript; charset=utf-8",etag:'"1569d8-YXvQUOJhlMHyVhODApdOwfT74HQ"',mtime:"2025-03-10T07:50:22.601Z",size:1403352,path:"../public/assets/elkjs-CmFeGg_o.js"},"/assets/entities-D7HTx9ov.js":{type:"text/javascript; charset=utf-8",etag:'"8cae-ASJCRYrcmU+X49L4kRiJyNXyMgM"',mtime:"2025-03-10T07:50:22.597Z",size:36014,path:"../public/assets/entities-D7HTx9ov.js"},"/assets/eventsource-parser-BEY8Dpg-.js":{type:"text/javascript; charset=utf-8",etag:'"78d-1kISaZniRhxEqUKs4j1TXan4FZU"',mtime:"2025-03-10T07:50:22.597Z",size:1933,path:"../public/assets/eventsource-parser-BEY8Dpg-.js"},"/assets/fetch-2coGNStX.js":{type:"text/javascript; charset=utf-8",etag:'"257c-PbKz27+fee3hGDMHoV5hvGGxZU4"',mtime:"2025-03-10T07:50:22.597Z",size:9596,path:"../public/assets/fetch-2coGNStX.js"},"/assets/global-BveI--BU.js":{type:"text/javascript; charset=utf-8",etag:'"1ae39-TrfQEd1RSvey1xsE+ryDgZHhzU0"',mtime:"2025-03-10T07:50:22.598Z",size:110137,path:"../public/assets/global-BveI--BU.js"},"/assets/help-Dm0-B9za.js":{type:"text/javascript; charset=utf-8",etag:'"435-PYVFPJdukEJhlFkl5rLHePxD3NQ"',mtime:"2025-03-10T07:50:22.598Z",size:1077,path:"../public/assets/help-Dm0-B9za.js"},"/assets/highlight.js-D808sSCE.js":{type:"text/javascript; charset=utf-8",etag:'"f87c0-z1dr++4jSOfiyg+cCXDdCIHWo84"',mtime:"2025-03-10T07:50:22.599Z",size:1017792,path:"../public/assets/highlight.js-D808sSCE.js"},"/assets/index-95k7BxTB.js":{type:"text/javascript; charset=utf-8",etag:'"4d03-6fH2IoRnC+uJ/r+kIsu7wDoqXPI"',mtime:"2025-03-10T07:50:22.599Z",size:19715,path:"../public/assets/index-95k7BxTB.js"},"/assets/index-BPfFXn2Y.js":{type:"text/javascript; charset=utf-8",etag:'"486-dwfkYHB2uaxYs9abUdk+PRJLhnI"',mtime:"2025-03-10T07:50:22.599Z",size:1158,path:"../public/assets/index-BPfFXn2Y.js"},"/assets/index-Bkgha_95.js":{type:"text/javascript; charset=utf-8",etag:'"8e9-ImRcstJ0DciFMB+iqTrZYbxdTaE"',mtime:"2025-03-10T07:50:22.599Z",size:2281,path:"../public/assets/index-Bkgha_95.js"},"/assets/index-D1zmU2Dr.js":{type:"text/javascript; charset=utf-8",etag:'"1aa3-GmHy9tUt1+6d5wRghbNvvfi0Xao"',mtime:"2025-03-10T07:50:22.599Z",size:6819,path:"../public/assets/index-D1zmU2Dr.js"},"/assets/index-D2Ob5JL6.js":{type:"text/javascript; charset=utf-8",etag:'"5047-meUA52Rd2o0uJmuXLLIjXzmiCP0"',mtime:"2025-03-10T07:50:22.599Z",size:20551,path:"../public/assets/index-D2Ob5JL6.js"},"/assets/index-DWphMrS1.css":{type:"text/css; charset=utf-8",etag:'"321-j2DbWq2xzTMni/ogD59SBddlPSk"',mtime:"2025-03-10T07:50:22.599Z",size:801,path:"../public/assets/index-DWphMrS1.css"},"/assets/index-Dc0PR0S6.js":{type:"text/javascript; charset=utf-8",etag:'"4c0b-o/U0xZviepGBPevNBlknAz2A32Q"',mtime:"2025-03-10T07:50:22.599Z",size:19467,path:"../public/assets/index-Dc0PR0S6.js"},"/assets/index-ORrpXopg.css":{type:"text/css; charset=utf-8",etag:'"7c6-Ki/5cmbQX18Q5PFnvQhSmbCRr2I"',mtime:"2025-03-10T07:50:22.599Z",size:1990,path:"../public/assets/index-ORrpXopg.css"},"/assets/internmap-B8oPgqVZ.js":{type:"text/javascript; charset=utf-8",etag:'"27c-RCk4//XL2PAg7MGLIGsuL5G/iVA"',mtime:"2025-03-10T07:50:22.599Z",size:636,path:"../public/assets/internmap-B8oPgqVZ.js"},"/assets/katex-BY7yyeOs.js":{type:"text/javascript; charset=utf-8",etag:'"48f29-yE+XlPP/x0i46yjVZ04Vycymhxo"',mtime:"2025-03-10T07:50:22.600Z",size:298793,path:"../public/assets/katex-BY7yyeOs.js"},"/assets/khroma-Ca6ZlOUT.js":{type:"text/javascript; charset=utf-8",etag:'"2838-02b9ktMKU0Uxp0K8C5BMb6HcW6c"',mtime:"2025-03-10T07:50:22.600Z",size:10296,path:"../public/assets/khroma-Ca6ZlOUT.js"},"/assets/layout-base-DqRk0Tgc.js":{type:"text/javascript; charset=utf-8",etag:'"c95c-QXvDmtW4EQAldMUKpzDvTr5mAOo"',mtime:"2025-03-10T07:50:22.600Z",size:51548,path:"../public/assets/layout-base-DqRk0Tgc.js"},"/assets/linkify-it-LcVOBuC5.js":{type:"text/javascript; charset=utf-8",etag:'"2506-igm5x3jZkI/ZvzTnBp6IrKPmoBA"',mtime:"2025-03-10T07:50:22.600Z",size:9478,path:"../public/assets/linkify-it-LcVOBuC5.js"},"/assets/lodash-Cky9m9r7.js":{type:"text/javascript; charset=utf-8",etag:'"54bf-tSRlmjFhHAwLSON24PW0fhDSJX4"',mtime:"2025-03-10T07:50:22.600Z",size:21695,path:"../public/assets/lodash-Cky9m9r7.js"},"/assets/lodash-es-BkU_-LF8.js":{type:"text/javascript; charset=utf-8",etag:'"8a6c-8JAJCN+mYv5zz3fbJt43gO8sjUk"',mtime:"2025-03-10T07:50:22.600Z",size:35436,path:"../public/assets/lodash-es-BkU_-LF8.js"},"/assets/lyihub-zLFv36Ly.js":{type:"text/javascript; charset=utf-8",etag:'"69f-YBlH+nb7V6SSmdlgZ/sY0ZlzZi0"',mtime:"2025-03-10T07:50:22.600Z",size:1695,path:"../public/assets/lyihub-zLFv36Ly.js"},"/assets/main-Cq0QqgF1.js":{type:"text/javascript; charset=utf-8",etag:'"a442-EHA1nLlQ7Vs/x8Q3DvhRNQie8a8"',mtime:"2025-03-10T07:50:22.600Z",size:42050,path:"../public/assets/main-Cq0QqgF1.js"},"/assets/main-MqSRl-Mr.css":{type:"text/css; charset=utf-8",etag:'"13827-4A7YG+bIz4tBwZ0llBtXRo6HKPA"',mtime:"2025-03-10T07:50:22.600Z",size:79911,path:"../public/assets/main-MqSRl-Mr.css"},"/assets/mammoth-5Ncu60I4.js":{type:"text/javascript; charset=utf-8",etag:'"7b619-cajaSUiFMtGwRafGgExVWuyUKSE"',mtime:"2025-03-10T07:50:22.601Z",size:505369,path:"../public/assets/mammoth-5Ncu60I4.js"},"/assets/markdown-BDUNgehj.js":{type:"text/javascript; charset=utf-8",etag:'"b84-BzUg1QwHlvLRHfZG1ceVHaIt7yo"',mtime:"2025-03-10T07:50:22.601Z",size:2948,path:"../public/assets/markdown-BDUNgehj.js"},"/assets/markdown-it-C8SkdHr7.js":{type:"text/javascript; charset=utf-8",etag:'"cda3-zpScLmZqW/cDrwLrLVUAUYiQoHs"',mtime:"2025-03-10T07:50:22.601Z",size:52643,path:"../public/assets/markdown-it-C8SkdHr7.js"},"/assets/markdown-it-highlightjs-BAFrfncF.js":{type:"text/javascript; charset=utf-8",etag:'"f01-RWtv1UDqbq0uVzG417Vc58xeVpo"',mtime:"2025-03-10T07:50:22.601Z",size:3841,path:"../public/assets/markdown-it-highlightjs-BAFrfncF.js"},"/assets/markdown-it-link-attributes-UnOqz_aA.js":{type:"text/javascript; charset=utf-8",etag:'"2d3-VxM3ssgtJXgKPms7TB/9jPhrvis"',mtime:"2025-03-10T07:50:22.602Z",size:723,path:"../public/assets/markdown-it-link-attributes-UnOqz_aA.js"},"/assets/mdurl-CDXpswLz.js":{type:"text/javascript; charset=utf-8",etag:'"12cf-J5d0Ip4EtRRuSMx8vOSdC2oRS/8"',mtime:"2025-03-10T07:50:22.602Z",size:4815,path:"../public/assets/mdurl-CDXpswLz.js"},"/assets/mermaid-DeEJK8dE.js":{type:"text/javascript; charset=utf-8",etag:'"bb1d0-FmIcLZyV65oK06O8gQ5FFZdCjwE"',mtime:"2025-03-10T07:50:22.602Z",size:766416,path:"../public/assets/mermaid-DeEJK8dE.js"},"/assets/mitt-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.602Z",size:1,path:"../public/assets/mitt-l0sNRNKZ.js"},"/assets/pdf.worker.min-yatZIOMy.mjs":{type:"text/javascript; charset=utf-8",etag:'"14fe5e-iGC1A5RKrS0JublO5W5Pq4QUymk"',mtime:"2025-03-10T07:50:22.603Z",size:1375838,path:"../public/assets/pdf.worker.min-yatZIOMy.mjs"},"/assets/pdfjs-dist-8WFUNQXM.js":{type:"text/javascript; charset=utf-8",etag:'"58a06-0WybHzP7c1zhxZq4K1wRJpetRUE"',mtime:"2025-03-10T07:50:22.603Z",size:363014,path:"../public/assets/pdfjs-dist-8WFUNQXM.js"},"/assets/pinia-jKJ-xldK.js":{type:"text/javascript; charset=utf-8",etag:'"f70-gW7l/xy9ggie2kSlx69DpowcHbY"',mtime:"2025-03-10T07:50:22.603Z",size:3952,path:"../public/assets/pinia-jKJ-xldK.js"},"/assets/pinia-plugin-persistedstate-DyrI1rJI.js":{type:"text/javascript; charset=utf-8",etag:'"51c-IOUPIS/vvyLw3e9LnNGq2zZMnec"',mtime:"2025-03-10T07:50:22.603Z",size:1308,path:"../public/assets/pinia-plugin-persistedstate-DyrI1rJI.js"},"/assets/popup-CAYf2pdU.css":{type:"text/css; charset=utf-8",etag:'"12f64-gEiNKOoqNatL6ssOkchPPR9hBTo"',mtime:"2025-03-10T07:50:22.603Z",size:77668,path:"../public/assets/popup-CAYf2pdU.css"},"/assets/popup-qR97ujNm.js":{type:"text/javascript; charset=utf-8",etag:'"1934-R87xHgy8v5ilQm+82nRSBflzBp4"',mtime:"2025-03-10T07:50:22.603Z",size:6452,path:"../public/assets/popup-qR97ujNm.js"},"/assets/prismjs-hpMNzOsE.js":{type:"text/javascript; charset=utf-8",etag:'"9725-E5UnHAfaPhXte3KxheuDug9V0c4"',mtime:"2025-03-10T07:50:22.603Z",size:38693,path:"../public/assets/prismjs-hpMNzOsE.js"},"/assets/punycode.js-Bmr3cAX8.js":{type:"text/javascript; charset=utf-8",etag:'"a7a-RevZlCPWj1eXNcvfzcrSkpPYyuI"',mtime:"2025-03-10T07:50:22.604Z",size:2682,path:"../public/assets/punycode.js-Bmr3cAX8.js"},"/assets/robust-predicates-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.604Z",size:1,path:"../public/assets/robust-predicates-l0sNRNKZ.js"},"/assets/sambanova-35TLgnML.webp":{type:"image/webp",etag:'"415c-sMenaeQGBb9K2dKKno4v8gu8CQg"',mtime:"2025-03-10T07:50:22.604Z",size:16732,path:"../public/assets/sambanova-35TLgnML.webp"},"/assets/scraper.worker-C5ikRwpu.js":{type:"text/javascript; charset=utf-8",etag:'"268-Onu+45h7Y6Bc+D4LCl5TM9ow9wE"',mtime:"2025-03-10T07:50:22.604Z",size:616,path:"../public/assets/scraper.worker-C5ikRwpu.js"},"/assets/sortablejs-DGtSoqI-.js":{type:"text/javascript; charset=utf-8",etag:'"91fb-Wnf2wx603CaDXVaZ0wcbhkJbip0"',mtime:"2025-03-10T07:50:22.604Z",size:37371,path:"../public/assets/sortablejs-DGtSoqI-.js"},"/assets/stylis-Cl7w7uv3.js":{type:"text/javascript; charset=utf-8",etag:'"1010-9iehLy9lKGajUZMFLPzb9lFBWH0"',mtime:"2025-03-10T07:50:22.604Z",size:4112,path:"../public/assets/stylis-Cl7w7uv3.js"},"/assets/tdesign-icons-vue-next-BGgy7GQY.css":{type:"text/css; charset=utf-8",etag:'"17f-FqFjP97SFRNBmlj13OeywzL2DCU"',mtime:"2025-03-10T07:50:22.604Z",size:383,path:"../public/assets/tdesign-icons-vue-next-BGgy7GQY.css"},"/assets/tdesign-icons-vue-next-Dn30dVUK.js":{type:"text/javascript; charset=utf-8",etag:'"161b1-K/VF7BzQyen6eeTxOP1NHVbJy24"',mtime:"2025-03-10T07:50:22.604Z",size:90545,path:"../public/assets/tdesign-icons-vue-next-Dn30dVUK.js"},"/assets/tdesign-vue-next-C9LLy99s.css":{type:"text/css; charset=utf-8",etag:'"68195-8St2oS/UGV3gyhtNDTSTZzejtvw"',mtime:"2025-03-10T07:50:22.605Z",size:426389,path:"../public/assets/tdesign-vue-next-C9LLy99s.css"},"/assets/tdesign-vue-next-DsCOKp3d.js":{type:"text/javascript; charset=utf-8",etag:'"9a039-8ZvPTatO67ErlWVuHRpOLfKR8pE"',mtime:"2025-03-10T07:50:22.605Z",size:630841,path:"../public/assets/tdesign-vue-next-DsCOKp3d.js"},"/assets/ts-dedent-CttZBlkd.js":{type:"text/javascript; charset=utf-8",etag:'"310-K/ipHYQTgvDUEOcQGwOf0IHACMc"',mtime:"2025-03-10T07:50:22.605Z",size:784,path:"../public/assets/ts-dedent-CttZBlkd.js"},"/assets/tvision-color-Dyv1XgcL.js":{type:"text/javascript; charset=utf-8",etag:'"49d1-wmlHjAlQK5c5vUotbIzdAgrJtPg"',mtime:"2025-03-10T07:50:22.605Z",size:18897,path:"../public/assets/tvision-color-Dyv1XgcL.js"},"/assets/ua-parser-js-9pz7LJLQ.js":{type:"text/javascript; charset=utf-8",etag:'"5472-2XuMJfUpTGwaa3pGGmtV7TV1qik"',mtime:"2025-03-10T07:50:22.605Z",size:21618,path:"../public/assets/ua-parser-js-9pz7LJLQ.js"},"/assets/uc.micro-CLkLCS2f.js":{type:"text/javascript; charset=utf-8",etag:'"144d-0zVa29qj407Bu05HPuwvHgQ4+8c"',mtime:"2025-03-10T07:50:22.605Z",size:5197,path:"../public/assets/uc.micro-CLkLCS2f.js"},"/assets/uuid-_R2nDvl_.js":{type:"text/javascript; charset=utf-8",etag:'"3a1-Em826+EaiFJxMLWvplFS7Y7rsAM"',mtime:"2025-03-10T07:50:22.605Z",size:929,path:"../public/assets/uuid-_R2nDvl_.js"},"/assets/vue-DVRmszIO.js":{type:"text/javascript; charset=utf-8",etag:'"3d3-aUKPsYlHPaFdiXk4vJu/t9PkdvU"',mtime:"2025-03-10T07:50:22.605Z",size:979,path:"../public/assets/vue-DVRmszIO.js"},"/assets/vue-demi-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-10T07:50:22.605Z",size:1,path:"../public/assets/vue-demi-l0sNRNKZ.js"},"/assets/vue-i18n-Dmk40Gks.js":{type:"text/javascript; charset=utf-8",etag:'"54cc-Cl4bSXS3PS2gqDOpPa2JP4Zf/EI"',mtime:"2025-03-10T07:50:22.606Z",size:21708,path:"../public/assets/vue-i18n-Dmk40Gks.js"},"/assets/vue-router-Be5-2oBH.js":{type:"text/javascript; charset=utf-8",etag:'"6a11-hn3a/ObFmfkc/JFSIDmNXt3009I"',mtime:"2025-03-10T07:50:22.606Z",size:27153,path:"../public/assets/vue-router-Be5-2oBH.js"},"/assets/vuedraggable-K5Gqz8r2.js":{type:"text/javascript; charset=utf-8",etag:'"18985-Nv4moCFL7Orr64eynuDyBTSzazE"',mtime:"2025-03-10T07:50:22.606Z",size:100741,path:"../public/assets/vuedraggable-K5Gqz8r2.js"},"/assets/xlsx-DB6BMndo.js":{type:"text/javascript; charset=utf-8",etag:'"6044e-9tu+0UThAPzrLx9iSXWZ+kfemGA"',mtime:"2025-03-10T07:50:22.606Z",size:394318,path:"../public/assets/xlsx-DB6BMndo.js"}},Ce=/^[A-Za-z]:\//;function normalizeWindowsPath(e=""){return e?e.replace(/\\/g,"/").replace(Ce,(e=>e.toUpperCase())):e}const Se=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,Ze=/^[A-Za-z]:$/;const isAbsolute=function(e){return Se.test(e)};function readAsset(t){const s=function(e){const t=normalizeWindowsPath(e).replace(/\/$/,"").split("/").slice(0,-1);return 1===t.length&&Ze.test(t[0])&&(t[0]+="/"),t.join("/")||(isAbsolute(e)?"/":".")}(f(globalThis._importMeta_.url));return d.readFile(function(...t){let s="",a=!1;for(let c=(t=t.map((e=>normalizeWindowsPath(e)))).length-1;c>=-1&&!a;c--){const l=c>=0?t[c]:void 0!==e&&"function"==typeof e.cwd?e.cwd().replace(/\\/g,"/"):"/";l&&0!==l.length&&(s=`${l}/${s}`,a=isAbsolute(l))}return s=function(e,t){let s="",a=0,c=-1,l=0,u=null;for(let d=0;d<=e.length;++d){if(d2){const e=s.lastIndexOf("/");-1===e?(s="",a=0):(s=s.slice(0,e),a=s.length-1-s.lastIndexOf("/")),c=d,l=0;continue}if(s.length>0){s="",a=0,c=d,l=0;continue}}t&&(s+=s.length>0?"/..":"..",a=2)}else s.length>0?s+=`/${e.slice(c+1,d)}`:s=e.slice(c+1,d),a=d-c-1;c=d,l=0}else"."===u&&-1!==l?++l:l=-1}return s}(s,!a),a&&!isAbsolute(s)?`/${s}`:s.length>0?s:"."}(s,ke[t].path))}const Be={};function getAsset(e){return ke[e]}const Ae=new Set(["HEAD","GET"]),Ee={gzip:".gz",br:".br"},Ke=pe((e=>{if(e.method&&!Ae.has(e.method))return;let t=decode(withLeadingSlash(withoutTrailingSlash(parseURL(e.path).pathname)).replace(I,"%252F"));let s;const a=[...String(getRequestHeader(e,"accept-encoding")||"").split(",").map((e=>Ee[e.trim()])).filter(Boolean).sort(),""];a.length>1&&function(e,t,s){let a=e.node.res.getHeader(t);a?(Array.isArray(a)||(a=[a.toString()]),e.node.res.setHeader(t,[...a,s])):e.node.res.setHeader(t,s)}(e,"Vary","Accept-Encoding");for(const e of a)for(const a of[t+e,joinURL(t,"index.html"+e)]){const e=getAsset(a);if(e){s=e,t=a;break}}if(!s){if(function(e=""){if(ke[e])return!0;for(const t in Be)if(e.startsWith(t))return!0;return!1}(t))throw function(e,t){e.node.res.removeHeader(t)}(e,"Cache-Control"),createError$1({statusMessage:"Cannot find static asset "+t,statusCode:404});return}if(getRequestHeader(e,"if-none-match")===s.etag)return setResponseStatus(e,304,"Not Modified"),"";const c=getRequestHeader(e,"if-modified-since"),l=new Date(s.mtime);return c&&s.mtime&&new Date(c)>=l?(setResponseStatus(e,304,"Not Modified"),""):(s.type&&!getResponseHeader(e,"Content-Type")&&setResponseHeader(e,"Content-Type",s.type),s.etag&&!getResponseHeader(e,"ETag")&&setResponseHeader(e,"ETag",s.etag),s.mtime&&!getResponseHeader(e,"Last-Modified")&&setResponseHeader(e,"Last-Modified",l.toUTCString()),s.encoding&&!getResponseHeader(e,"Content-Encoding")&&setResponseHeader(e,"Content-Encoding",s.encoding),s.size>0&&!getResponseHeader(e,"Content-Length")&&setResponseHeader(e,"Content-Length",s.size),readAsset(t))})),Ne=[{route:"",handler:Ke,lazy:!1,middleware:!0,method:void 0},{route:"",handler:defineEventHandler((t=>{t.context.cloudflare&&(e.env=t.context.cloudflare.env)})),lazy:!1,middleware:!0,method:void 0},{route:"",handler:defineEventHandler((e=>{if("OPTIONS"===e.node.req.method)return e.node.res.setHeader("Access-Control-Allow-Origin","*"),e.node.res.setHeader("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.node.res.setHeader("Access-Control-Allow-Headers","*"),e.node.res.setHeader("Access-Control-Max-Age","86400"),e.node.res.statusCode=204,void e.node.res.end();e.node.res.setHeader("Access-Control-Allow-Origin","*"),e.node.res.setHeader("Access-Control-Expose-Headers","*")})),lazy:!1,middleware:!0,method:void 0},{route:"/api/**",handler:()=>import("../routes/api/_..._.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/app/**",handler:()=>import("../routes/app/_..._.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/cache/clear",handler:()=>import("../routes/cache/clear.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/config",handler:()=>import("../routes/index.get.mjs"),lazy:!0,middleware:!1,method:"get"},{route:"/config",handler:()=>import("../routes/index.post.mjs"),lazy:!0,middleware:!1,method:"post"},{route:"/crawler",handler:()=>import("../routes/crawler.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/cursor/code",handler:()=>import("../routes/cursor/code.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/cursor/token",handler:()=>import("../routes/cursor/token.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/github/code",handler:()=>import("../routes/github/code.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/github/token",handler:()=>import("../routes/github/token.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/google/access_token",handler:()=>import("../routes/google/access_token.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/google/code",handler:()=>import("../routes/google/code.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/health",handler:()=>import("../routes/health.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/openai/**",handler:()=>import("../routes/openai/_..._.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/openapi.json",handler:()=>import("../routes/openapi.json.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/search",handler:()=>import("../routes/search.mjs"),lazy:!0,middleware:!1,method:void 0}];function asyncCall(e,...t){try{return(s=e(...t))&&"function"==typeof s.then?s:Promise.resolve(s)}catch(e){return Promise.reject(e)}var s}function stringify(e){if(function(e){const t=typeof e;return null===e||"object"!==t&&"function"!==t}(e))return String(e);if(function(e){const t=Object.getPrototypeOf(e);return!t||t.isPrototypeOf(Object)}(e)||Array.isArray(e))return JSON.stringify(e);if("function"==typeof e.toJSON)return stringify(e.toJSON());throw new Error("[unstorage] Cannot stringify value!")}const Ie="base64:";function serializeRaw(e){return"string"==typeof e?e:Ie+function(e){if(globalThis.Buffer)return Buffer.from(e).toString("base64");return globalThis.btoa(String.fromCodePoint(...e))}(e)}function deserializeRaw(e){return"string"!=typeof e?e:e.startsWith(Ie)?function(e){if(globalThis.Buffer)return Buffer.from(e,"base64");return Uint8Array.from(globalThis.atob(e),(e=>e.codePointAt(0)))}(e.slice(7)):e}const He=["has","hasItem","get","getItem","getItemRaw","set","setItem","setItemRaw","del","remove","removeItem","getMeta","setMeta","removeMeta","getKeys","clear","mount","unmount"];function normalizeKey$2(e){return e&&e.split("?")[0]?.replace(/[/\\]/g,":").replace(/:+/g,":").replace(/^:|:$/g,"")||""}function joinKeys$1(...e){return normalizeKey$2(e.join(":"))}function normalizeBaseKey(e){return(e=normalizeKey$2(e))?e+":":""}const memory=()=>{const e=new Map;return{name:"memory",getInstance:()=>e,hasItem:t=>e.has(t),getItem:t=>e.get(t)??null,getItemRaw:t=>e.get(t)??null,setItem(t,s){e.set(t,s)},setItemRaw(t,s){e.set(t,s)},removeItem(t){e.delete(t)},getKeys:()=>[...e.keys()],clear(){e.clear()},dispose(){e.clear()}}};function createStorage(e={}){const t={mounts:{"":e.driver||memory()},mountpoints:[""],watching:!1,watchListeners:[],unwatch:{}},getMount=e=>{for(const s of t.mountpoints)if(e.startsWith(s))return{base:s,relativeKey:e.slice(s.length),driver:t.mounts[s]};return{base:"",relativeKey:e,driver:t.mounts[""]}},getMounts=(e,s)=>t.mountpoints.filter((t=>t.startsWith(e)||s&&e.startsWith(t))).map((s=>({relativeBase:e.length>s.length?e.slice(s.length):void 0,mountpoint:s,driver:t.mounts[s]}))),onChange=(e,s)=>{if(t.watching){s=normalizeKey$2(s);for(const a of t.watchListeners)a(e,s)}},stopWatch=async()=>{if(t.watching){for(const e in t.unwatch)await t.unwatch[e]();t.unwatch={},t.watching=!1}},runBatch=(e,t,s)=>{const a=new Map,getBatch=e=>{let t=a.get(e.base);return t||(t={driver:e.driver,base:e.base,items:[]},a.set(e.base,t)),t};for(const s of e){const e="string"==typeof s,a=normalizeKey$2(e?s:s.key),c=e?void 0:s.value,l=e||!s.options?t:{...t,...s.options},u=getMount(a);getBatch(u).items.push({key:a,value:c,relativeKey:u.relativeKey,options:l})}return Promise.all([...a.values()].map((e=>s(e)))).then((e=>e.flat()))},s={hasItem(e,t={}){e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e);return asyncCall(a.hasItem,s,t)},getItem(e,t={}){e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e);return asyncCall(a.getItem,s,t).then((e=>destr(e)))},getItems:(e,t={})=>runBatch(e,t,(e=>e.driver.getItems?asyncCall(e.driver.getItems,e.items.map((e=>({key:e.relativeKey,options:e.options}))),t).then((t=>t.map((t=>({key:joinKeys$1(e.base,t.key),value:destr(t.value)}))))):Promise.all(e.items.map((t=>asyncCall(e.driver.getItem,t.relativeKey,t.options).then((e=>({key:t.key,value:destr(e)})))))))),getItemRaw(e,t={}){e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e);return a.getItemRaw?asyncCall(a.getItemRaw,s,t):asyncCall(a.getItem,s,t).then((e=>deserializeRaw(e)))},async setItem(e,t,a={}){if(void 0===t)return s.removeItem(e);e=normalizeKey$2(e);const{relativeKey:c,driver:l}=getMount(e);l.setItem&&(await asyncCall(l.setItem,c,stringify(t),a),l.watch||onChange("update",e))},async setItems(e,t){await runBatch(e,t,(async e=>{if(e.driver.setItems)return asyncCall(e.driver.setItems,e.items.map((e=>({key:e.relativeKey,value:stringify(e.value),options:e.options}))),t);e.driver.setItem&&await Promise.all(e.items.map((t=>asyncCall(e.driver.setItem,t.relativeKey,stringify(t.value),t.options))))}))},async setItemRaw(e,t,a={}){if(void 0===t)return s.removeItem(e,a);e=normalizeKey$2(e);const{relativeKey:c,driver:l}=getMount(e);if(l.setItemRaw)await asyncCall(l.setItemRaw,c,t,a);else{if(!l.setItem)return;await asyncCall(l.setItem,c,serializeRaw(t),a)}l.watch||onChange("update",e)},async removeItem(e,t={}){"boolean"==typeof t&&(t={removeMeta:t}),e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e);a.removeItem&&(await asyncCall(a.removeItem,s,t),(t.removeMeta||t.removeMata)&&await asyncCall(a.removeItem,s+"$",t),a.watch||onChange("remove",e))},async getMeta(e,t={}){"boolean"==typeof t&&(t={nativeOnly:t}),e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e),c=Object.create(null);if(a.getMeta&&Object.assign(c,await asyncCall(a.getMeta,s,t)),!t.nativeOnly){const e=await asyncCall(a.getItem,s+"$",t).then((e=>destr(e)));e&&"object"==typeof e&&("string"==typeof e.atime&&(e.atime=new Date(e.atime)),"string"==typeof e.mtime&&(e.mtime=new Date(e.mtime)),Object.assign(c,e))}return c},setMeta(e,t,s={}){return this.setItem(e+"$",t,s)},removeMeta(e,t={}){return this.removeItem(e+"$",t)},async getKeys(e,t={}){e=normalizeBaseKey(e);const s=getMounts(e,!0);let a=[];const c=[];let l=!0;for(const e of s){e.driver.flags?.maxDepth||(l=!1);const s=await asyncCall(e.driver.getKeys,e.relativeBase,t);for(const t of s){const s=e.mountpoint+normalizeKey$2(t);a.some((e=>s.startsWith(e)))||c.push(s)}a=[e.mountpoint,...a.filter((t=>!t.startsWith(e.mountpoint)))]}const u=void 0!==t.maxDepth&&!l;return c.filter((s=>(!u||function(e,t){if(void 0===t)return!0;let s=0,a=e.indexOf(":");for(;a>-1;)s++,a=e.indexOf(":",a+1);return s<=t}(s,t.maxDepth))&&function(e,t){return t?e.startsWith(t)&&"$"!==e[e.length-1]:"$"!==e[e.length-1]}(s,e)))},async clear(e,t={}){e=normalizeBaseKey(e),await Promise.all(getMounts(e,!1).map((async e=>{if(e.driver.clear)return asyncCall(e.driver.clear,e.relativeBase,t);if(e.driver.removeItem){const s=await e.driver.getKeys(e.relativeBase||"",t);return Promise.all(s.map((s=>e.driver.removeItem(s,t))))}})))},async dispose(){await Promise.all(Object.values(t.mounts).map((e=>dispose(e))))},watch:async e=>(await(async()=>{if(!t.watching){t.watching=!0;for(const e in t.mounts)t.unwatch[e]=await watch(t.mounts[e],onChange,e)}})(),t.watchListeners.push(e),async()=>{t.watchListeners=t.watchListeners.filter((t=>t!==e)),0===t.watchListeners.length&&await stopWatch()}),async unwatch(){t.watchListeners=[],await stopWatch()},mount(e,a){if((e=normalizeBaseKey(e))&&t.mounts[e])throw new Error(`already mounted at ${e}`);return e&&(t.mountpoints.push(e),t.mountpoints.sort(((e,t)=>t.length-e.length))),t.mounts[e]=a,t.watching&&Promise.resolve(watch(a,onChange,e)).then((s=>{t.unwatch[e]=s})).catch(console.error),s},async unmount(e,s=!0){(e=normalizeBaseKey(e))&&t.mounts[e]&&(t.watching&&e in t.unwatch&&(t.unwatch[e]?.(),delete t.unwatch[e]),s&&await dispose(t.mounts[e]),t.mountpoints=t.mountpoints.filter((t=>t!==e)),delete t.mounts[e])},getMount(e=""){e=normalizeKey$2(e)+":";const t=getMount(e);return{driver:t.driver,base:t.base}},getMounts(e="",t={}){e=normalizeKey$2(e);return getMounts(e,t.parents).map((e=>({driver:e.driver,base:e.mountpoint})))},keys:(e,t={})=>s.getKeys(e,t),get:(e,t={})=>s.getItem(e,t),set:(e,t,a={})=>s.setItem(e,t,a),has:(e,t={})=>s.hasItem(e,t),del:(e,t={})=>s.removeItem(e,t),remove:(e,t={})=>s.removeItem(e,t)};return s}function watch(e,t,s){return e.watch?e.watch(((e,a)=>t(e,s+a))):()=>{}}async function dispose(e){"function"==typeof e.dispose&&await asyncCall(e.dispose)}const Oe={"server:sha3_wasm_bg.7b9ca65ddd.wasm":{import:()=>import("../raw/sha3_wasm_bg.7b9ca65ddd.mjs").then((e=>e.default||e)),meta:{type:"application/wasm",etag:'"67f4-HA9hIZkJpnMfafDJeYUwPEld3vA"',mtime:"2025-03-10T07:45:31.349Z"}}},normalizeKey$1=function(e){return e&&e.split("?")[0]?.replace(/[/\\]/g,":").replace(/:+/g,":").replace(/^:|:$/g,"")||""},Me={getKeys:()=>Promise.resolve(Object.keys(Oe)),hasItem:e=>(e=normalizeKey$1(e),Promise.resolve(e in Oe)),getItem:e=>(e=normalizeKey$1(e),Promise.resolve(Oe[e]?Oe[e].import():null)),getMeta:e=>(e=normalizeKey$1(e),Promise.resolve(Oe[e]?Oe[e].meta:{}))};function defineDriver(e){return e}function joinKeys(...e){return e.map((e=>function(e,t=":"){return e?e.replace(/[:/\\]/g,t).replace(/^[:/\\]|[:/\\]$/g,""):""}(e))).filter(Boolean).join(":")}function createError(e,t,s){const a=new Error(`[unstorage] [${e}] ${t}`,s);return Error.captureStackTrace&&Error.captureStackTrace(a,createError),a}function createRequiredError(e,t){return Array.isArray(t)?createError(e,`Missing some of the required options ${t.map((e=>"`"+e+"`")).join(", ")}`):createError(e,`Missing required option \`${t}\`.`)}function ignoreNotfound(e){return"ENOENT"===e.code||"EISDIR"===e.code?null:e}function ignoreExists(e){return"EEXIST"===e.code?null:e}async function writeFile(e,t,s){return await ensuredir(g(e)),d.writeFile(e,t,s)}function readFile(e,t){return d.readFile(e,t).catch(ignoreNotfound)}function readdir(e){return d.readdir(e,{withFileTypes:!0}).catch(ignoreNotfound).then((e=>e||[]))}async function ensuredir(e){h(e)||(await ensuredir(g(e)).catch(ignoreExists),await d.mkdir(e).catch(ignoreExists))}async function readdirRecursive(e,t,s){if(t&&t(e))return[];const a=await readdir(e),c=[];return await Promise.all(a.map((async a=>{const l=m(e,a.name);if(a.isDirectory()){if(void 0===s||s>0){const e=await readdirRecursive(l,t,void 0===s?void 0:s-1);c.push(...e.map((e=>a.name+"/"+e)))}}else t&&t(a.name)||c.push(a.name)}))),c}async function rmRecursive(e){const t=await readdir(e);await Promise.all(t.map((t=>{const s=m(e,t.name);return t.isDirectory()?rmRecursive(s).then((()=>d.rmdir(s))):d.unlink(s)})))}const De=/\.\.:|\.\.$/,qe="fs-lite",unstorage_47drivers_47fs_45lite=(e={})=>{if(!e.base)throw createRequiredError(qe,"base");e.base=m(e.base);const r=t=>{if(De.test(t))throw createError(qe,`Invalid key: ${JSON.stringify(t)}. It should not contain .. segments`);return v(e.base,t.replace(/:/g,"/"))};return{name:qe,options:e,flags:{maxDepth:!0},hasItem:e=>h(r(e)),getItem:e=>readFile(r(e),"utf8"),getItemRaw:e=>readFile(r(e)),async getMeta(e){const{atime:t,mtime:s,size:a,birthtime:c,ctime:l}=await d.stat(r(e)).catch((()=>({})));return{atime:t,mtime:s,size:a,birthtime:c,ctime:l}},setItem(t,s){if(!e.readOnly)return writeFile(r(t),s,"utf8")},setItemRaw(t,s){if(!e.readOnly)return writeFile(r(t),s)},removeItem(t){if(!e.readOnly)return function(e){return d.unlink(e).catch(ignoreNotfound)}(r(t))},getKeys:(t,s)=>readdirRecursive(r("."),e.ignore,s?.maxDepth),async clear(){e.readOnly||e.noClear||await rmRecursive(r("."))}}},Pe=createStorage({});function useStorage(e=""){return e?function(e,t){if(!(t=normalizeBaseKey(t)))return e;const s={...e};for(const a of He)s[a]=(s="",...c)=>e[a](t+s,...c);return s.getKeys=(s="",...a)=>e.getKeys(t+s,...a).then((e=>e.map((e=>e.slice(t.length))))),s}(Pe,e):Pe}Pe.mount("/assets",Me),Pe.mount("data",unstorage_47drivers_47fs_45lite({driver:"fsLite",base:"./.data/kv"}));const Xe=globalThis.process?.getBuiltinModule?.("crypto")?.hash,Le="sha256",Ue="base64url";function hash(e){return function(e){if(Xe)return Xe(Le,e,Ue);const t=j(Le).update(e);return globalThis.process?.versions?.webcontainer?t.digest().toString(Ue):t.digest(Ue)}("string"==typeof e?e:function(e){const t=new Hasher;return t.dispatch(e),t.buff}(e)).replace(/[-_]/g,"").slice(0,10)}class Hasher{buff="";#e=new Map;write(e){this.buff+=e}dispatch(e){return this[null===e?"null":typeof e](e)}object(e){if(e&&"function"==typeof e.toJSON)return this.object(e.toJSON());const t=Object.prototype.toString.call(e);let s="";const a=t.length;s=a<10?"unknown:["+t+"]":t.slice(8,a-1),s=s.toLowerCase();let c=null;if(void 0!==(c=this.#e.get(e)))return this.dispatch("[CIRCULAR:"+c+"]");if(this.#e.set(e,this.#e.size),"undefined"!=typeof Buffer&&Buffer.isBuffer&&Buffer.isBuffer(e))return this.write("buffer:"),this.write(e.toString("utf8"));if("object"!==s&&"function"!==s&&"asyncfunction"!==s)this[s]?this[s](e):this.unknown(e,s);else{const t=Object.keys(e).sort(),s=[];this.write("object:"+(t.length+s.length)+":");const dispatchForKey=t=>{this.dispatch(t),this.write(":"),this.dispatch(e[t]),this.write(",")};for(const e of t)dispatchForKey(e);for(const e of s)dispatchForKey(e)}}array(e,t){if(t=void 0!==t&&t,this.write("array:"+e.length+":"),!t||e.length<=1){for(const t of e)this.dispatch(t);return}const s=new Map,a=e.map((e=>{const t=new Hasher;t.dispatch(e);for(const[e,a]of t.#e)s.set(e,a);return t.toString()}));return this.#e=s,a.sort(),this.array(a,!1)}date(e){return this.write("date:"+e.toJSON())}symbol(e){return this.write("symbol:"+e.toString())}unknown(e,t){if(this.write(t),e)return this.write(":"),e&&"function"==typeof e.entries?this.array([...e.entries()],!0):void 0}error(e){return this.write("error:"+e.toString())}boolean(e){return this.write("bool:"+e)}string(e){this.write("string:"+e.length+":"),this.write(e)}function(e){this.write("fn:"),!function(e){if("function"!=typeof e)return!1;return Function.prototype.toString.call(e).slice(-We)===Fe}(e)?this.dispatch(e.toString()):this.dispatch("[native]")}number(e){return this.write("number:"+e)}null(){return this.write("Null")}undefined(){return this.write("Undefined")}regexp(e){return this.write("regex:"+e.toString())}arraybuffer(e){return this.write("arraybuffer:"),this.dispatch(new Uint8Array(e))}url(e){return this.write("url:"+e.toString())}map(e){this.write("map:");const t=[...e];return this.array(t,!1)}set(e){this.write("set:");const t=[...e];return this.array(t,!1)}bigint(e){return this.write("bigint:"+e.toString())}}for(const e of["uint8array","uint8clampedarray","unt8array","uint16array","unt16array","uint32array","unt32array","float32array","float64array"])Hasher.prototype[e]=function(t){return this.write(e+":"),this.array([...t],!1)};const Fe="[native code] }",We=Fe.length;function defineCachedFunction(e,t={}){t={name:"_",base:"/cache",swr:!0,maxAge:1,...t};const s={},a=t.group||"nitro/functions",c=t.name||e.name||"_",l=t.integrity||hash([e,t]),u=t.validate||(e=>void 0!==e.value);return async(...d)=>{if(await(t.shouldBypassCache?.(...d)))return e(...d);const h=await(t.getKey||getKey)(...d),f=await(t.shouldInvalidateCache?.(...d)),m=await async function(e,d,h,f){const m=[t.base,a,c,e+".json"].filter(Boolean).join(":").replace(/:\/$/,":index");let g=await useStorage().getItem(m).catch((e=>{console.error("[cache] Cache read error.",e),useNitroApp().captureError(e,{event:f,tags:["cache"]})}))||{};if("object"!=typeof g){g={};const e=new Error("Malformed data read from cache.");console.error("[cache]",e),useNitroApp().captureError(e,{event:f,tags:["cache"]})}const v=1e3*(t.maxAge??0);v&&(g.expires=Date.now()+v);const j=h||g.integrity!==l||v&&Date.now()-(g.mtime||0)>v||!1===u(g),T=j?(async()=>{const a=s[e];a||(void 0!==g.value&&(t.staleMaxAge||0)>=0&&!1===t.swr&&(g.value=void 0,g.integrity=void 0,g.mtime=void 0,g.expires=void 0),s[e]=Promise.resolve(d()));try{g.value=await s[e]}catch(t){throw a||delete s[e],t}if(!a&&(g.mtime=Date.now(),g.integrity=l,delete s[e],!1!==u(g))){let e;t.maxAge&&!t.swr&&(e={ttl:t.maxAge});const s=useStorage().setItem(m,g,e).catch((e=>{console.error("[cache] Cache write error.",e),useNitroApp().captureError(e,{event:f,tags:["cache"]})}));f?.waitUntil&&f.waitUntil(s)}})():Promise.resolve();return void 0===g.value?await T:j&&f&&f.waitUntil&&f.waitUntil(T),t.swr&&!1!==u(g)?(T.catch((e=>{console.error("[cache] SWR handler error.",e),useNitroApp().captureError(e,{event:f,tags:["cache"]})})),g):T.then((()=>g))}(h,(()=>e(...d)),f,d[0]&&isEvent(d[0])?d[0]:void 0);let g=m.value;return t.transform&&(g=await t.transform(m,...d)||g),g}}function getKey(...e){return e.length>0?hash(e):""}function escapeKey(e){return String(e).replace(/\W/g,"")}function cloneWithProxy(e,t){return new Proxy(e,{get:(e,s,a)=>s in t?t[s]:Reflect.get(e,s,a),set:(e,s,a,c)=>s in t?(t[s]=a,!0):Reflect.set(e,s,a,c)})}const cachedEventHandler=function(e,t={name:"_",base:"/cache",swr:!0,maxAge:1}){const s=(t.varies||[]).filter(Boolean).map((e=>e.toLowerCase())).sort(),a={...t,getKey:async e=>{const a=await(t.getKey?.(e));if(a)return escapeKey(a);const c=e.node.req.originalUrl||e.node.req.url||e.path;let l;try{l=escapeKey(decodeURI(parseURL(c).pathname)).slice(0,16)||"index"}catch{l="-"}return[`${l}.${hash(c)}`,...s.map((t=>[t,e.node.req.headers[t]])).map((([e,t])=>`${escapeKey(e)}.${hash(t)}`))].join(":")},validate:e=>!!e.value&&(!(e.value.code>=400)&&(void 0!==e.value.body&&("undefined"!==e.value.headers.etag&&"undefined"!==e.value.headers["last-modified"]))),group:t.group||"nitro/handlers",integrity:t.integrity||hash([e,t])},c=function(e,t={}){return defineCachedFunction(e,t)}((async c=>{const l={};for(const e of s){const t=c.node.req.headers[e];void 0!==t&&(l[e]=t)}const u=cloneWithProxy(c.node.req,{headers:l}),d={};let h;const f=createEvent(u,cloneWithProxy(c.node.res,{statusCode:200,writableEnded:!1,writableFinished:!1,headersSent:!1,closed:!1,getHeader:e=>d[e],setHeader(e,t){return d[e]=t,this},getHeaderNames:()=>Object.keys(d),hasHeader:e=>e in d,removeHeader(e){delete d[e]},getHeaders:()=>d,end(e,t,s){return"string"==typeof e&&(h=e),"function"==typeof t&&t(),"function"==typeof s&&s(),this},write:(e,t,s)=>("string"==typeof e&&(h=e),"function"==typeof t&&t(void 0),"function"==typeof s&&s(),!0),writeHead(e,t){if(this.statusCode=e,t){if(Array.isArray(t)||"string"==typeof t)throw new TypeError("Raw headers is not supported.");for(const e in t){const s=t[e];void 0!==s&&this.setHeader(e,s)}}return this}}));f.fetch=(e,t)=>fetchWithEvent(f,e,t,{fetch:useNitroApp().localFetch}),f.$fetch=(e,t)=>fetchWithEvent(f,e,t,{fetch:globalThis.$fetch}),f.waitUntil=c.waitUntil,f.context=c.context,f.context.cache={options:a};const m=await e(f)||h,g=f.node.res.getHeaders();g.etag=String(g.Etag||g.etag||`W/"${hash(m)}"`),g["last-modified"]=String(g["Last-Modified"]||g["last-modified"]||(new Date).toUTCString());const v=[];t.swr?(t.maxAge&&v.push(`s-maxage=${t.maxAge}`),t.staleMaxAge?v.push(`stale-while-revalidate=${t.staleMaxAge}`):v.push("stale-while-revalidate")):t.maxAge&&v.push(`max-age=${t.maxAge}`),v.length>0&&(g["cache-control"]=v.join(", "));return{code:f.node.res.statusCode,headers:g,body:m}}),a);return defineEventHandler((async s=>{if(t.headersOnly){if(handleCacheHeaders(s,{maxAge:t.maxAge}))return;return e(s)}const a=await c(s);if(s.node.res.headersSent||s.node.res.writableEnded)return a.body;if(!handleCacheHeaders(s,{modifiedTime:new Date(a.headers["last-modified"]),etag:a.headers.etag,maxAge:t.maxAge})){s.node.res.statusCode=a.code;for(const e in a.headers){const t=a.headers[e];"set-cookie"===e?s.node.res.appendHeader(e,splitCookiesString(t)):void 0!==t&&s.node.res.setHeader(e,t)}return a.body}}))};function klona(e){if("object"!=typeof e)return e;var t,s,a=Object.prototype.toString.call(e);if("[object Object]"===a){if(e.constructor!==Object&&"function"==typeof e.constructor)for(t in s=new e.constructor,e)e.hasOwnProperty(t)&&s[t]!==e[t]&&(s[t]=klona(e[t]));else for(t in s={},e)"__proto__"===t?Object.defineProperty(s,t,{value:klona(e[t]),configurable:!0,enumerable:!0,writable:!0}):s[t]=klona(e[t]);return s}if("[object Array]"===a){for(t=e.length,s=Array(t);t--;)s[t]=klona(e[t]);return s}return"[object Set]"===a?(s=new Set,e.forEach((function(e){s.add(klona(e))})),s):"[object Map]"===a?(s=new Map,e.forEach((function(e,t){s.set(klona(t),klona(e))})),s):"[object Date]"===a?new Date(+e):"[object RegExp]"===a?((s=new RegExp(e.source,e.flags)).lastIndex=e.lastIndex,s):"[object DataView]"===a?new e.constructor(klona(e.buffer)):"[object ArrayBuffer]"===a?e.slice(0):"Array]"===a.slice(-6)?new e.constructor(e):e}const Ge=F({}),Je=/\d/,Qe=["-","_","/","."];function isUppercase(e=""){if(!Je.test(e))return e!==e.toLowerCase()}function kebabCase(e,t){return e?(Array.isArray(e)?e:function(e){const t=Qe,s=[];if(!e||"string"!=typeof e)return s;let a,c,l="";for(const u of e){const e=t.includes(u);if(!0===e){s.push(l),l="",a=void 0;continue}const d=isUppercase(u);if(!1===c){if(!1===a&&!0===d){s.push(l),l=u,a=d;continue}if(!0===a&&!1===d&&l.length>1){const e=l.at(-1);s.push(l.slice(0,Math.max(0,l.length-1))),l=e+u,a=d;continue}}l+=u,a=d,c=e}return s.push(l),s}(e)).map((e=>e.toLowerCase())).join(t):""}function getEnv(t,s){const a=(c=t,kebabCase(c||"","_")).toUpperCase();var c;return destr(e.env[s.prefix+a]??e.env[s.altPrefix+a])}function _isObject(e){return"object"==typeof e&&!Array.isArray(e)}const Ve=/\{\{([^{}]*)\}\}/g;const $e={app:{baseURL:"/"},nitro:{routeRules:{"/*/**":{cors:!0,headers:{"access-control-allow-origin":"*","access-control-allow-methods":"*","access-control-allow-headers":"*","access-control-max-age":"0","Access-Control-Allow-Methods":"GET,HEAD,PUT,PATCH,POST,DELETE","Access-Control-Allow-Origin":"*","Access-Control-Allow-Credentials":"true","Access-Control-Allow-Headers":"*","Access-Control-Expose-Headers":"*"}}}},models:[{title:"OpenAI ChatGPT",route:"/openai/chatgpt",provider:"openai",apiBase:"https://api.openai.com/v1/chat/completions",model:"gpt-3.5-turbo"},{title:"OpenAI ChatGPT",route:"/app/chatgpt",provider:"openai",apiBase:"https://api.openai.com/v1/chat/completions",model:"gpt-3.5-turbo"},{title:"OpenAI ChatGPT",route:"/api/chatgpt",provider:"openai",apiBase:"https://api.openai.com/v1/chat/completions",model:"gpt-3.5-turbo"},{title:"Groq",route:"/openai/groq",provider:"openai",apiBase:"https://api.groq.com/openai/v1/chat/completions",model:"llama3-70b-8192"},{title:"Groq",route:"/app/groq",provider:"openai",apiBase:"https://api.groq.com/openai/v1/chat/completions",model:"llama3-70b-8192"},{title:"Groq",route:"/api/groq",provider:"openai",apiBase:"https://api.groq.com/openai/v1/chat/completions",model:"llama3-70b-8192"},{title:"OpenAI qwen",route:"/openai/qwen",provider:"openai",apiBase:"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",model:"qwen-turbo"},{title:"OpenAI qwen",route:"/app/qwen",provider:"openai",apiBase:"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",model:"qwen-turbo"},{title:"OpenAI qwen",route:"/api/qwen",provider:"openai",apiBase:"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",model:"qwen-turbo"},{title:"doubao",route:"/openai/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"doubao",route:"/app/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"doubao",route:"/api/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"GLM",route:"/openai/glm",provider:"openai",apiBase:"https://open.bigmodel.cn/api/paas/v4/chat/completions",model:"glm-4"},{title:"GLM",route:"/app/glm",provider:"openai",apiBase:"https://open.bigmodel.cn/api/paas/v4/chat/completions",model:"glm-4"},{title:"GLM",route:"/api/glm",provider:"openai",apiBase:"https://open.bigmodel.cn/api/paas/v4/chat/completions",model:"glm-4"},{title:"YI",route:"/openai/yi",provider:"openai",apiBase:"https://api.lingyiwanwu.com/v1/chat/completions",model:""},{title:"YI",route:"/app/yi",provider:"openai",apiBase:"https://api.lingyiwanwu.com/v1/chat/completions",model:""},{title:"YI",route:"/api/yi",provider:"openai",apiBase:"https://api.lingyiwanwu.com/v1/chat/completions",model:""},{title:"豆包",route:"/openai/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"豆包",route:"/app/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"豆包",route:"/api/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"百川",route:"/openai/baichuan",provider:"openai",apiBase:"https://api.baichuan-ai.com/v1/chat/completions",model:"Baichuan4"},{title:"百川",route:"/app/baichuan",provider:"openai",apiBase:"https://api.baichuan-ai.com/v1/chat/completions",model:"Baichuan4"},{title:"百川",route:"/api/baichuan",provider:"openai",apiBase:"https://api.baichuan-ai.com/v1/chat/completions",model:"Baichuan4"},{title:"minimax",route:"/openai/minimax",provider:"openai",apiBase:"https://api.minimax.chat/v1/text/chatcompletion_v2",model:"abab6.5-chat"},{title:"minimax",route:"/app/minimax",provider:"openai",apiBase:"https://api.minimax.chat/v1/text/chatcompletion_v2",model:"abab6.5-chat"},{title:"minimax",route:"/api/minimax",provider:"openai",apiBase:"https://api.minimax.chat/v1/text/chatcompletion_v2",model:"abab6.5-chat"},{title:"mistral",route:"/openai/mistral",provider:"openai",apiBase:"https://api.mistral.ai/v1/chat/completions",model:"mistral-small-latest"},{title:"mistral",route:"/app/mistral",provider:"openai",apiBase:"https://api.mistral.ai/v1/chat/completions",model:"mistral-small-latest"},{title:"mistral",route:"/api/mistral",provider:"openai",apiBase:"https://api.mistral.ai/v1/chat/completions",model:"mistral-small-latest"},{title:"mistral code",route:"/openai/mistral-code",provider:"openai",apiBase:"https://codestral.mistral.ai/v1/chat/completions",model:"codestral-latest"},{title:"mistral code",route:"/app/mistral-code",provider:"openai",apiBase:"https://codestral.mistral.ai/v1/chat/completions",model:"codestral-latest"},{title:"mistral code",route:"/api/mistral-code",provider:"openai",apiBase:"https://codestral.mistral.ai/v1/chat/completions",model:"codestral-latest"},{title:"moonshot",route:"/openai/moonshot",provider:"openai",apiBase:"https://api.moonshot.cn/v1/chat/completions",model:"moonshot-v1-8k"},{title:"moonshot",route:"/app/moonshot",provider:"openai",apiBase:"https://api.moonshot.cn/v1/chat/completions",model:"moonshot-v1-8k"},{title:"moonshot",route:"/api/moonshot",provider:"openai",apiBase:"https://api.moonshot.cn/v1/chat/completions",model:"moonshot-v1-8k"},{title:"spark-api-open",route:"/openai/spark-api-open",provider:"openai",apiBase:"https://spark-api-open.xf-yun.com/v1/chat/completions",model:"general"},{title:"spark-api-open",route:"/app/spark-api-open",provider:"openai",apiBase:"https://spark-api-open.xf-yun.com/v1/chat/completions",model:"general"},{title:"spark-api-open",route:"/api/spark-api-open",provider:"openai",apiBase:"https://spark-api-open.xf-yun.com/v1/chat/completions",model:"general"},{title:"fireworks",route:"/openai/fireworks",provider:"openai",apiBase:"https://api.fireworks.ai/inference/v1/chat/completions",model:"accounts/fireworks/models/llama-v3p1-405b-instruct"},{title:"fireworks",route:"/app/fireworks",provider:"openai",apiBase:"https://api.fireworks.ai/inference/v1/chat/completions",model:"accounts/fireworks/models/llama-v3p1-405b-instruct"},{title:"fireworks",route:"/api/fireworks",provider:"openai",apiBase:"https://api.fireworks.ai/inference/v1/chat/completions",model:"accounts/fireworks/models/llama-v3p1-405b-instruct"},{title:"x",route:"/openai/x",provider:"openai",apiBase:"https://api.x.ai/v1/chat/completions",model:"grok-2-1212"},{title:"x",route:"/app/x",provider:"openai",apiBase:"https://api.x.ai/v1/chat/completions",model:"grok-2-1212"},{title:"x",route:"/api/x",provider:"openai",apiBase:"https://api.x.ai/v1/chat/completions",model:"grok-2-1212"},{title:"azure",route:"/openai/azure",provider:"azure",model:"gpt-3.5-turbo"},{title:"azure",route:"/app/azure",provider:"azure",model:"gpt-3.5-turbo"},{title:"azure",route:"/api/azure",provider:"azure",model:"gpt-3.5-turbo"},{title:"coze_cn_api",route:"/openai/cozecn",provider:"coze",apiBase:"https://api.coze.cn/v3/chat",model:""},{title:"coze_cn_api",route:"/app/cozecn",provider:"coze",apiBase:"https://api.coze.cn/v3/chat",model:""},{title:"coze_cn_api",route:"/api/cozecn",provider:"coze",apiBase:"https://api.coze.cn/v3/chat",model:""},{title:"coze_com_api",route:"/openai/cozecom",provider:"coze",apiBase:"https://api.coze.com/v3/chat",model:""},{title:"coze_com_api",route:"/app/cozecom",provider:"coze",apiBase:"https://api.coze.com/v3/chat",model:""},{title:"coze_com_api",route:"/api/cozecom",provider:"coze",apiBase:"https://api.coze.com/v3/chat",model:""},{title:"coze.com",route:"/openai/coze-com",provider:"coze_com",model:""},{title:"coze.com",route:"/app/coze-com",provider:"coze_com",model:""},{title:"coze.com",route:"/api/coze-com",provider:"coze_com",model:""},{title:"coze.cn",route:"/openai/coze-cn",provider:"coze_cn",model:""},{title:"coze.cn",route:"/app/coze-cn",provider:"coze_cn",model:""},{title:"coze.cn",route:"/api/coze-cn",provider:"coze_cn",model:""},{title:"deepseek",route:"/openai/deepseek",provider:"deepseek",model:"deepseek-chat"},{title:"deepseek",route:"/app/deepseek",provider:"deepseek",model:"deepseek-chat"},{title:"deepseek",route:"/api/deepseek",provider:"deepseek",model:"deepseek-chat"},{title:"GitHub Copilot",route:"/openai/github-copilot",provider:"github_copilot",model:"gpt-4"},{title:"GitHub Copilot",route:"/app/github-copilot",provider:"github_copilot",model:"gpt-4"},{title:"GitHub Copilot",route:"/api/github-copilot",provider:"github_copilot",model:"gpt-4"},{title:"chatglm.cn",route:"/openai/chatglm",provider:"chatglm",model:"65940acff94777010aa6b796"},{title:"chatglm.cn",route:"/app/chatglm",provider:"chatglm",model:"65940acff94777010aa6b796"},{title:"chatglm.cn",route:"/api/chatglm",provider:"chatglm",model:"65940acff94777010aa6b796"},{title:"通译千问",route:"/openai/tongyi",provider:"tongyi",model:""},{title:"通译千问",route:"/app/tongyi",provider:"tongyi",model:""},{title:"通译千问",route:"/api/tongyi",provider:"tongyi",model:""},{title:"万知",route:"/openai/wanzhi",provider:"wanzhi",model:"LING"},{title:"万知",route:"/app/wanzhi",provider:"wanzhi",model:"LING"},{title:"万知",route:"/api/wanzhi",provider:"wanzhi",model:"LING"},{title:"huggingface",route:"/openai/huggingface",provider:"huggingface",model:""},{title:"huggingface",route:"/app/huggingface",provider:"huggingface",model:""},{title:"huggingface",route:"/api/huggingface",provider:"huggingface",model:""},{title:"ernie",route:"/openai/ernie",provider:"ernie",model:""},{title:"ernie",route:"/app/ernie",provider:"ernie",model:""},{title:"ernie",route:"/api/ernie",provider:"ernie",model:""},{title:"hunyuan",route:"/openai/hunyuan",provider:"hunyuan",model:""},{title:"hunyuan",route:"/app/hunyuan",provider:"hunyuan",model:""},{title:"hunyuan",route:"/api/hunyuan",provider:"hunyuan",model:""},{title:"vercel",route:"/openai/vercel",provider:"vercel",model:""},{title:"vercel",route:"/app/vercel",provider:"vercel",model:""},{title:"vercel",route:"/api/vercel",provider:"vercel",model:""},{title:"lmsys",route:"/openai/lmsys",provider:"lmsys",model:""},{title:"lmsys",route:"/app/lmsys",provider:"lmsys",model:""},{title:"lmsys",route:"/api/lmsys",provider:"lmsys",model:""},{title:"spark",route:"/openai/spark",provider:"spark",model:""},{title:"spark",route:"/app/spark",provider:"spark",model:""},{title:"spark",route:"/api/spark",provider:"spark",model:""},{title:"cloudflare",route:"/openai/cloudflare",provider:"cloudflare",model:""},{title:"cloudflare",route:"/app/cloudflare",provider:"cloudflare",model:""},{title:"cloudflare",route:"/api/cloudflare",provider:"cloudflare",model:""},{title:"mistral.ai",route:"/openai/mistral-ai",provider:"mistral_ai",model:""},{title:"mistral.ai",route:"/app/mistral-ai",provider:"mistral_ai",model:""},{title:"mistral.ai",route:"/api/mistral-ai",provider:"mistral_ai",model:""},{title:"claude",route:"/openai/claude",provider:"claude",model:""},{title:"claude",route:"/app/claude",provider:"claude",model:""},{title:"claude",route:"/api/claude",provider:"claude",model:""},{title:"anthropic",route:"/openai/anthropic",provider:"anthropic",model:""},{title:"anthropic",route:"/app/anthropic",provider:"anthropic",model:""},{title:"anthropic",route:"/api/anthropic",provider:"anthropic",model:""},{title:"cohere",route:"/openai/cohere",provider:"cohere",model:""},{title:"cohere",route:"/app/cohere",provider:"cohere",model:""},{title:"cohere",route:"/api/cohere",provider:"cohere",model:""},{title:"gemini",route:"/openai/gemini",provider:"gemini",model:"gemini-1.5-flash"},{title:"gemini",route:"/app/gemini",provider:"gemini",model:"gemini-1.5-flash"},{title:"gemini",route:"/api/gemini",provider:"gemini",model:"gemini-1.5-flash"},{title:"kimi",route:"/openai/kimi",provider:"kimi",model:""},{title:"kimi",route:"/app/kimi",provider:"kimi",model:""},{title:"kimi",route:"/api/kimi",provider:"kimi",model:""},{title:"gemini vertex",route:"/openai/gemini-vertex",provider:"gemini_vertex",model:""},{title:"gemini vertex",route:"/app/gemini-vertex",provider:"gemini_vertex",model:""},{title:"gemini vertex",route:"/api/gemini-vertex",provider:"gemini_vertex",model:""},{title:"anthropic vertex",route:"/openai/anthropic-vertex",provider:"anthropic_vertex",model:""},{title:"anthropic vertex",route:"/app/anthropic-vertex",provider:"anthropic_vertex",model:""},{title:"anthropic vertex",route:"/api/anthropic-vertex",provider:"anthropic_vertex",model:""},{title:"mistralai vertex",route:"/openai/mistralai-vertex",provider:"mistralai_vertex",model:""},{title:"mistralai vertex",route:"/app/mistralai-vertex",provider:"mistralai_vertex",model:""},{title:"mistralai vertex",route:"/api/mistralai-vertex",provider:"mistralai_vertex",model:""},{title:"openai vertex",route:"/openai/openai-vertex",provider:"openai_vertex",model:""},{title:"openai vertex",route:"/app/openai-vertex",provider:"openai_vertex",model:""},{title:"openai vertex",route:"/api/openai-vertex",provider:"openai_vertex",model:""},{title:"chatgpt.com",route:"/openai/chatgpt-com",provider:"chatgpt",model:"auto"},{title:"chatgpt.com",route:"/app/chatgpt-com",provider:"chatgpt",model:"auto"},{title:"chatgpt.com",route:"/api/chatgpt-com",provider:"chatgpt",model:"auto"},{title:"lyihub.com",route:"/openai/lyihub",provider:"lyihub",model:""},{title:"lyihub.com",route:"/app/lyihub",provider:"lyihub",model:""},{title:"lyihub.com",route:"/api/lyihub",provider:"lyihub",model:""},{title:"deepinfra",route:"/openai/deepinfra",provider:"deepinfra",model:""},{title:"deepinfra",route:"/app/deepinfra",provider:"deepinfra",model:""},{title:"deepinfra",route:"/api/deepinfra",provider:"deepinfra",model:""},{title:"replicate",route:"/openai/replicate",provider:"replicate",model:""},{title:"replicate",route:"/app/replicate",provider:"replicate",model:""},{title:"replicate",route:"/api/replicate",provider:"replicate",model:""},{title:"vecmul",route:"/openai/vecmul",provider:"vecmul",model:""},{title:"vecmul",route:"/app/vecmul",provider:"vecmul",model:""},{title:"vecmul",route:"/api/vecmul",provider:"vecmul",model:""},{title:"magai",route:"/openai/magai",provider:"magai",model:""},{title:"magai",route:"/app/magai",provider:"magai",model:""},{title:"magai",route:"/api/magai",provider:"magai",model:""},{title:"blackbox",route:"/openai/blackbox",provider:"blackbox",model:""},{title:"blackbox",route:"/app/blackbox",provider:"blackbox",model:""},{title:"blackbox",route:"/api/blackbox",provider:"blackbox",model:""},{title:"cursor",route:"/openai/cursor",provider:"cursor",model:""},{title:"cursor",route:"/app/cursor",provider:"cursor",model:""},{title:"cursor",route:"/api/cursor",provider:"cursor",model:""},{title:"zed",route:"/openai/zed",provider:"zed",model:""},{title:"zed",route:"/app/zed",provider:"zed",model:""},{title:"zed",route:"/api/zed",provider:"zed",model:""},{title:"pieces",route:"/openai/pieces",provider:"pieces",model:""},{title:"pieces",route:"/app/pieces",provider:"pieces",model:""},{title:"pieces",route:"/api/pieces",provider:"pieces",model:""},{title:"qodo",route:"/openai/qodo",provider:"qodo",model:""},{title:"qodo",route:"/app/qodo",provider:"qodo",model:""},{title:"qodo",route:"/api/qodo",provider:"qodo",model:""},{title:"genspark",route:"/openai/genspark",provider:"genspark",model:""},{title:"genspark",route:"/app/genspark",provider:"genspark",model:""},{title:"genspark",route:"/api/genspark",provider:"genspark",model:""},{title:"deepseek.com",route:"/openai/deepseek-com",provider:"deepseek_com",model:"deepseek-chat"},{title:"deepseek.com",route:"/app/deepseek-com",provider:"deepseek_com",model:"deepseek-chat"},{title:"deepseek.com",route:"/api/deepseek-com",provider:"deepseek_com",model:"deepseek-chat"},{title:"qwenlm",route:"/openai/qwenlm",provider:"qwenlm",model:""},{title:"qwenlm",route:"/app/qwenlm",provider:"qwenlm",model:""},{title:"qwenlm",route:"/api/qwenlm",provider:"qwenlm",model:""},{title:"genspark.image",route:"/openai/genspark-image",provider:"genspark_image",model:""},{title:"genspark.image",route:"/app/genspark-image",provider:"genspark_image",model:""},{title:"genspark.image",route:"/api/genspark-image",provider:"genspark_image",model:""},{title:"imagefx",route:"/openai/imagefx",provider:"imagefx",model:""},{title:"imagefx",route:"/app/imagefx",provider:"imagefx",model:""},{title:"imagefx",route:"/api/imagefx",provider:"imagefx",model:""},{title:"bing.image",route:"/openai/bing-image",provider:"bing_image",model:""},{title:"bing.image",route:"/app/bing-image",provider:"bing_image",model:""},{title:"bing.image",route:"/api/bing-image",provider:"bing_image",model:""},{title:"siliconflow.image",route:"/openai/siliconflow-image",provider:"siliconflow_image",model:""},{title:"siliconflow.image",route:"/app/siliconflow-image",provider:"siliconflow_image",model:""},{title:"siliconflow.image",route:"/api/siliconflow-image",provider:"siliconflow_image",model:""},{title:"cloudflare.image",route:"/openai/cloudflare-image",provider:"cloudflare_image",model:""},{title:"cloudflare.image",route:"/app/cloudflare-image",provider:"cloudflare_image",model:""},{title:"cloudflare.image",route:"/api/cloudflare-image",provider:"cloudflare_image",model:""},{title:"designer",route:"/openai/designer",provider:"designer",model:""},{title:"designer",route:"/app/designer",provider:"designer",model:""},{title:"designer",route:"/api/designer",provider:"designer",model:""},{title:"grok",route:"/openai/grok",provider:"grok",model:""},{title:"grok",route:"/app/grok",provider:"grok",model:""},{title:"grok",route:"/api/grok",provider:"grok",model:""},{title:"n",route:"/openai/n",provider:"n",model:""},{title:"n",route:"/app/n",provider:"n",model:""},{title:"n",route:"/api/n",provider:"n",model:""},{title:"firefly",route:"/openai/firefly",provider:"firefly",model:""},{title:"firefly",route:"/app/firefly",provider:"firefly",model:""},{title:"firefly",route:"/api/firefly",provider:"firefly",model:""},{title:"yuanbao",route:"/openai/yuanbao",provider:"yuanbao",model:""},{title:"yuanbao",route:"/app/yuanbao",provider:"yuanbao",model:""},{title:"yuanbao",route:"/api/yuanbao",provider:"yuanbao",model:""}]},Ye={prefix:"NITRO_",altPrefix:$e.nitro.envPrefix??e.env.NITRO_ENV_PREFIX??"_",envExpansion:$e.nitro.envExpansion??e.env.NITRO_ENV_EXPANSION??!1},et=_deepFreeze(function applyEnv(t,s,a=""){for(const c in t){const l=a?`${a}_${c}`:c,u=getEnv(l,s);_isObject(t[c])?_isObject(u)?(t[c]={...t[c],...u},applyEnv(t[c],s,l)):void 0===u?applyEnv(t[c],s,l):t[c]=u??t[c]:t[c]=u??t[c],s.envExpansion&&"string"==typeof t[c]&&(t[c]=t[c].replace(Ve,((t,s)=>e.env[s]||t)))}return t}(klona($e),Ye));function useRuntimeConfig(e){return et}function _deepFreeze(e){const t=Object.getOwnPropertyNames(e);for(const s of t){const t=e[s];t&&"object"==typeof t&&_deepFreeze(t)}return Object.freeze(e)}_deepFreeze(klona(Ge)),new Proxy(Object.create(null),{get:(e,t)=>{console.warn("Please use `useRuntimeConfig()` instead of accessing config directly.");const s=useRuntimeConfig();if(t in s)return s[t]}});const tt="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{},st="__unctx__",at=tt[st]||(tt[st]=function(e={}){const t={};return{get:(s,a={})=>(t[s]||(t[s]=function(e={}){let t,s=!1;const checkConflict=e=>{if(t&&t!==e)throw new Error("Context conflict")};let a;if(e.asyncContext){const t=e.AsyncLocalStorage||globalThis.AsyncLocalStorage;t?a=new t:console.warn("[unctx] `AsyncLocalStorage` is not provided.")}const _getCurrentInstance=()=>{if(a){const e=a.getStore();if(void 0!==e)return e}return t};return{use:()=>{const e=_getCurrentInstance();if(void 0===e)throw new Error("Context is not available");return e},tryUse:()=>_getCurrentInstance(),set:(e,a)=>{a||checkConflict(e),t=e,s=!0},unset:()=>{t=void 0,s=!1},call:(e,c)=>{checkConflict(e),t=e;try{return a?a.run(e,c):c()}finally{s||(t=void 0)}},async callAsync(e,c){t=e;const onRestore=()=>{t=e},onLeave=()=>t===e?onRestore:void 0;ot.add(onLeave);try{const l=a?a.run(e,c):c();return s||(t=void 0),await l}finally{ot.delete(onLeave)}}}}({...e,...a})),t[s])}}()),rt="__unctx_async_handlers__",ot=tt[rt]||(tt[rt]=new Set);((e,t={})=>{at.get(e,t)})("nitro-app",{asyncContext:void 0,AsyncLocalStorage:void 0});const it=toRouteMatcher(createRouter$1({routes:useRuntimeConfig().nitro.routeRules}));function createRouteRulesHandler(e){return pe((t=>{const s=function(e){e.context._nitro=e.context._nitro||{},e.context._nitro.routeRules||(e.context._nitro.routeRules=getRouteRulesForPath(withoutBase(e.path.split("?")[0],useRuntimeConfig().app.baseURL)));return e.context._nitro.routeRules}(t);if(s.headers&&ie(t,s.headers),s.redirect){let e=s.redirect.to;if(e.endsWith("/**")){let a=t.path;const c=s.redirect._redirectStripBase;c&&(a=withoutBase(a,c)),e=joinURL(e.slice(0,-3),a)}else if(t.path.includes("?")){e=withQuery(e,getQuery$1(t.path))}return function(e,t,s=302){return e.node.res.statusCode=sanitizeStatusCode(s,e.node.res.statusCode),e.node.res.setHeader("location",t),send(e,``,ae.html)}(t,e,s.redirect.statusCode)}if(s.proxy){let a=s.proxy.to;if(a.endsWith("/**")){let e=t.path;const c=s.proxy._proxyStripBase;c&&(e=withoutBase(e,c)),a=joinURL(a.slice(0,-3),e)}else if(t.path.includes("?")){a=withQuery(a,getQuery$1(t.path))}return proxyRequest(t,a,{fetch:e.localFetch,...s.proxy})}}))}function getRouteRulesForPath(e){return U({},...it.matchAll(e).reverse())}function _captureError(e,t){console.error(`[${t}]`,e),useNitroApp().captureError(e,{tags:[t]})}function joinHeaders(e){return Array.isArray(e)?e.join(", "):String(e)}function normalizeCookieHeader(e=""){return splitCookiesString(joinHeaders(e))}function normalizeCookieHeaders(e){const t=new Headers;for(const[s,a]of e)if("set-cookie"===s)for(const e of normalizeCookieHeader(a))t.append("set-cookie",e);else t.set(s,joinHeaders(a));return t}const nt=function(){const e=useRuntimeConfig(),t=new Hookable,captureError=(e,s={})=>{const a=t.callHookParallel("error",e,s).catch((e=>{console.error("Error while capturing another error",e)}));if(s.event&&isEvent(s.event)){const t=s.event.context.nitro?.errors;t&&t.push({error:e,context:s}),s.event.waitUntil&&s.event.waitUntil(a)}},s=createApp({debug:destr(!1),onError:(e,t)=>(captureError(e,{event:t,tags:["request"]}),async function(e,t){for(const s of ze)try{if(await s(e,t,{defaultHandler:defaultHandler}),t.handled)return}catch(e){console.error(e)}}(e,t)),onRequest:async e=>{e.context.nitro=e.context.nitro||{errors:[]};const t=e.node.req?.__unenv__;t&&Object.assign(e.context,t),e.fetch=(t,s)=>fetchWithEvent(e,t,s,{fetch:localFetch}),e.$fetch=(t,s)=>fetchWithEvent(e,t,s,{fetch:l}),e.waitUntil=s=>{e.context.nitro._waitUntilPromises||(e.context.nitro._waitUntilPromises=[]),e.context.nitro._waitUntilPromises.push(s),t?.waitUntil&&t.waitUntil(s)},e.captureError=(t,s)=>{captureError(t,{event:e,...s})},await nt.hooks.callHook("request",e).catch((t=>{captureError(t,{event:e,tags:["request"]})}))},onBeforeResponse:async(e,t)=>{await nt.hooks.callHook("beforeResponse",e,t).catch((t=>{captureError(t,{event:e,tags:["request","response"]})}))},onAfterResponse:async(e,t)=>{await nt.hooks.callHook("afterResponse",e,t).catch((t=>{captureError(t,{event:e,tags:["request","response"]})}))}}),a=function(e={}){const t=createRouter$1({}),s={};let a;const c={},addRoute=(e,a,l)=>{let u=s[e];if(u||(s[e]=u={path:e,handlers:{}},t.insert(e,u)),Array.isArray(l))for(const t of l)addRoute(e,a,t);else u.handlers[l]=toEventHandler(a,0,e);return c};c.use=c.add=(e,t,s)=>addRoute(e,t,s||"all");for(const e of le)c[e]=(t,s)=>c.add(t,s,e);const matchHandler=(e="/",s="get")=>{const c=e.indexOf("?");-1!==c&&(e=e.slice(0,Math.max(0,c)));const l=t.lookup(e);if(!l||!l.handlers)return{error:createError$1({statusCode:404,name:"Not Found",statusMessage:`Cannot find any route matching ${e||"/"}.`})};let u=l.handlers[s]||l.handlers.all;if(!u){a||(a=toRouteMatcher(t));const c=a.matchAll(e).reverse();for(const e of c){if(e.handlers[s]){u=e.handlers[s],l.handlers[s]=l.handlers[s]||u;break}if(e.handlers.all){u=e.handlers.all,l.handlers.all=l.handlers.all||u;break}}}return u?{matched:l,handler:u}:{error:createError$1({statusCode:405,name:"Method Not Allowed",statusMessage:`Method ${s} is not allowed on this route.`})}},l=e.preemptive||e.preemtive;return c.handler=pe((e=>{const t=matchHandler(e.path,e.method.toLowerCase());if("error"in t){if(l)throw t.error;return}e.context.matchedRoute=t.matched;const s=t.matched.params||{};return e.context.params=s,Promise.resolve(t.handler(e)).then((e=>void 0===e&&l?null:e))})),c.handler.__resolve__=async e=>{e=withLeadingSlash(e);const t=matchHandler(e);if("error"in t)return;let s={route:t.matched.path,handler:t.handler};if(t.handler.__resolve__){const a=await t.handler.__resolve__(e);if(!a)return;s={...s,...a}}return s},c}({preemptive:!0}),c=toNodeListener(s),localFetch=(e,t)=>e.toString().startsWith("/")?async function(e,t,s={}){try{const a=await b(e,{url:t,...s});return new Response(a.body,{status:a.status,statusText:a.statusText,headers:S(a.headers)})}catch(e){return new Response(e.toString(),{status:Number.parseInt(e.statusCode||e.code)||500,statusText:e.statusText})}}(c,e,t).then((e=>function(e){return e.headers.has("set-cookie")?new Response(e.body,{status:e.status,statusText:e.statusText,headers:normalizeCookieHeaders(e.headers)}):e}(e))):globalThis.fetch(e,t),l=createFetch({fetch:localFetch,Headers:Te,defaults:{baseURL:e.app.baseURL}});globalThis.$fetch=l,s.use(createRouteRulesHandler({localFetch:localFetch}));for(const t of Ne){let c=t.lazy?lazyEventHandler(t.handler):t.handler;if(t.middleware||!t.route){const a=(e.app.baseURL+(t.route||"/")).replace(/\/+/g,"/");s.use(a,c)}else{const e=getRouteRulesForPath(t.route.replace(/:\w+|\*\*/g,"_"));e.cache&&(c=cachedEventHandler(c,{group:"nitro/routes",...e.cache})),a.use(t.route,c,t.method)}}return s.use(e.app.baseURL,a.handler),{hooks:t,h3App:s,router:a,localCall:e=>b(c,e),localFetch:localFetch,captureError:captureError}}();function useNitroApp(){return nt}!function(e){for(const t of Re)try{t(e)}catch(t){throw e.captureError(t,{tags:["plugin"]}),t}}(nt);function GracefulShutdown(s,a){a=a||{};const c=Object.assign({signals:"SIGINT SIGTERM",timeout:3e4,development:!1,forceExit:!0,onShutdown:e=>Promise.resolve(e),preShutdown:e=>Promise.resolve(e)},a);let l=!1;const u={};let d=0;const h={};let f=0,m=!1,g=!1;const v=c.signals.split(" ").map((e=>e.trim())).filter((e=>e.length>0)),j=function(){let e=!1;return(t,s,a)=>{function call(){if(!e)return e=!0,Reflect.apply(a,this,arguments)}for(const e of s)t.on(e,call)}}();function destroy(e,s=!1){(e._isIdle&&l||s)&&(e.destroy(),e.server instanceof t.Server?delete u[e._connectionId]:delete h[e._connectionId])}function destroyAllConnections(e=!1){for(const t of Object.keys(u)){const s=u[t],a=s._httpMessage;a&&!e?a.headersSent||a.setHeader("connection","close"):destroy(s)}for(const t of Object.keys(h)){const s=h[t],a=s._httpMessage;a&&!e?a.headersSent||a.setHeader("connection","close"):destroy(s)}}function shutdown(t){if(c.development)return e.exit(0);function waitForReadyToShutDown(e){if(0===e)return c.timeout,Promise.resolve(!0);return 0===Object.keys(u).length&&0===Object.keys(h).length?Promise.resolve(!1):new Promise((t=>{setTimeout((()=>{t(waitForReadyToShutDown(e-1))}),250)}))}return l?Promise.resolve():c.preShutdown(t).then((()=>{l=!0,destroyAllConnections(),new Promise(((e,t)=>{s.close((s=>s?t(s):e(!0)))}))})).then((()=>waitForReadyToShutDown(c.timeout?Math.round(c.timeout/250):0))).then((e=>(e&&destroyAllConnections(e),c.onShutdown(t)))).then((function(){return g||(g=!0,c.finally&&function(e){const t=Object.prototype.toString.call(e);return/^\[object\s([A-Za-z]+)?Function]$/.test(t)}(c.finally)&&c.finally()),Promise.resolve()})).catch((e=>{const t="string"==typeof e?e:JSON.stringify(e);throw m=!0,t}))}return j(e,v,(t=>{shutdown(t).then((()=>{c.forceExit&&e.exit(m?1:0)})).catch((t=>{e.exit(1)}))})),s.on("request",((e,t)=>{e.socket._isIdle=!1,l&&!t.headersSent&&t.setHeader("connection","close"),t.on("finish",(()=>{e.socket._isIdle=!0,destroy(e.socket)}))})),s.on("connection",(e=>{if(l)e.destroy();else{const t=d++;e._isIdle=!0,e._connectionId=t,u[t]=e,e.once("close",(()=>{delete u[e._connectionId]}))}})),s.on("secureConnection",(e=>{if(l)e.destroy();else{const t=f++;e._isIdle=!0,e._connectionId=t,h[t]=e,e.once("close",(()=>{delete h[e._connectionId]}))}})),e.on("close",(()=>{})),function(){return shutdown("manual")}}const ct=e.env.NITRO_SSL_CERT,pt=e.env.NITRO_SSL_KEY,lt=useNitroApp(),ut=ct&&pt?new c({key:pt,cert:ct},toNodeListener(lt.h3App)):new s(toNodeListener(lt.h3App)),dt=destr(e.env.NITRO_PORT||e.env.PORT)||3e3,ht=e.env.NITRO_HOST||e.env.HOST,ft=e.env.NITRO_UNIX_SOCKET,mt=ut.listen(ft?{path:ft}:{port:dt,host:ht},(t=>{t&&(console.error(t),e.exit(1));const s=ct&&pt?"https":"http",a=mt.address();if("string"==typeof a)return void console.log(`Listening on unix socket ${a}`);const c=(useRuntimeConfig().app.baseURL||"").replace(/\/$/,""),l=`${s}://${"IPv6"===a.family?`[${a.address}]`:a.address}:${a.port}${c}`;console.log(`Listening on ${l}`)}));e.on("unhandledRejection",(e=>_captureError(e,"unhandledRejection"))),e.on("uncaughtException",(e=>_captureError(e,"uncaughtException"))),function(t,s){const a={disabled:!!e.env.NITRO_SHUTDOWN_DISABLED,signals:(e.env.NITRO_SHUTDOWN_SIGNALS||"SIGTERM SIGINT").split(" ").map((e=>e.trim())),timeout:Number.parseInt(e.env.NITRO_SHUTDOWN_TIMEOUT||"",10)||3e4,forceExit:!e.env.NITRO_SHUTDOWN_NO_FORCE_EXIT};a.disabled||GracefulShutdown(t,{signals:a.signals.join(" "),timeout:a.timeout,forceExit:a.forceExit,onShutdown:async()=>{await new Promise((e=>{const t=setTimeout((()=>{console.warn("Graceful shutdown timeout, force exiting..."),e()}),a.timeout);s.hooks.callHook("close").catch((e=>{console.error(e)})).finally((()=>{clearTimeout(t),e()}))}))}})}(mt,lt);const gt={};export{xe as $,Y as a,getQuery as b,useStorage as c,defineEventHandler as d,createError as e,defineDriver as f,getRequestURL as g,createRequiredError as h,createStorage as i,joinKeys as j,gt as n,readBody as r,useRuntimeConfig as u}; +import e from"node:process";globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:e.env};import t,{Server as s}from"node:http";import a,{Server as c}from"node:https";import{EventEmitter as l}from"node:events";import{Buffer as u}from"node:buffer";import{promises as d,existsSync as h}from"node:fs";import{fileURLToPath as f}from"node:url";import{resolve as m,dirname as g,join as v}from"node:path";import{createHash as j}from"node:crypto";const T=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,_=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,x=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function jsonParseTransform(e,t){if(!("__proto__"===e||"constructor"===e&&t&&"object"==typeof t&&"prototype"in t))return t;!function(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}(e)}function destr(e,t={}){if("string"!=typeof e)return e;const s=e.trim();if('"'===e[0]&&e.endsWith('"')&&!e.includes("\\"))return s.slice(1,-1);if(s.length<=9){const e=s.toLowerCase();if("true"===e)return!0;if("false"===e)return!1;if("undefined"===e)return;if("null"===e)return null;if("nan"===e)return Number.NaN;if("infinity"===e)return Number.POSITIVE_INFINITY;if("-infinity"===e)return Number.NEGATIVE_INFINITY}if(!x.test(e)){if(t.strict)throw new SyntaxError("[destr] Invalid JSON");return e}try{if(T.test(e)||_.test(e)){if(t.strict)throw new Error("[destr] Possible prototype pollution");return JSON.parse(e,jsonParseTransform)}return JSON.parse(e)}catch(s){if(t.strict)throw s;return e}}const z=/#/g,R=/&/g,k=/\//g,C=/=/g,Z=/\+/g,B=/%5e/gi,K=/%60/gi,E=/%7c/gi,N=/%20/gi,I=/%2f/gi;function encodeQueryValue(e){return(t="string"==typeof e?e:JSON.stringify(e),encodeURI(""+t).replace(E,"|")).replace(Z,"%2B").replace(N,"+").replace(z,"%23").replace(R,"%26").replace(K,"`").replace(B,"^").replace(k,"%2F");var t}function encodeQueryKey(e){return encodeQueryValue(e).replace(C,"%3D")}function decode(e=""){try{return decodeURIComponent(""+e)}catch{return""+e}}function decodeQueryValue(e){return decode(e.replace(Z," "))}function parseQuery(e=""){const t={};"?"===e[0]&&(e=e.slice(1));for(const s of e.split("&")){const e=s.match(/([^=]+)=?(.*)/)||[];if(e.length<2)continue;const a=decode(e[1].replace(Z," "));if("__proto__"===a||"constructor"===a)continue;const c=decodeQueryValue(e[2]||"");void 0===t[a]?t[a]=c:Array.isArray(t[a])?t[a].push(c):t[a]=[t[a],c]}return t}function stringifyQuery(e){return Object.keys(e).filter((t=>void 0!==e[t])).map((t=>function(e,t){return"number"!=typeof t&&"boolean"!=typeof t||(t=String(t)),t?Array.isArray(t)?t.map((t=>`${encodeQueryKey(e)}=${encodeQueryValue(t)}`)).join("&"):`${encodeQueryKey(e)}=${encodeQueryValue(t)}`:encodeQueryKey(e)}(t,e[t]))).filter(Boolean).join("&")}const M=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,H=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,O=/^([/\\]\s*){2,}[^/\\]/,P=/^\.?\//;function hasProtocol(e,t={}){return"boolean"==typeof t&&(t={acceptRelative:t}),t.strict?M.test(e):H.test(e)||!!t.acceptRelative&&O.test(e)}function withoutTrailingSlash(e="",t){return(function(e=""){return e.endsWith("/")}(e)?e.slice(0,-1):e)||"/"}function withTrailingSlash(e="",t){return e.endsWith("/")?e:e+"/"}function withLeadingSlash(e=""){return function(e=""){return e.startsWith("/")}(e)?e:"/"+e}function withoutBase(e,t){if(isEmptyURL(t))return e;const s=withoutTrailingSlash(t);if(!e.startsWith(s))return e;const a=e.slice(s.length);return"/"===a[0]?a:"/"+a}function withQuery(e,t){const s=parseURL(e),a={...parseQuery(s.search),...t};return s.search=stringifyQuery(a),function(e){const t=e.pathname||"",s=e.search?(e.search.startsWith("?")?"":"?")+e.search:"",a=e.hash||"",c=e.auth?e.auth+"@":"",l=e.host||"",u=e.protocol||e[D]?(e.protocol||"")+"//":"";return u+c+l+t+s+a}(s)}function getQuery$1(e){return parseQuery(parseURL(e).search)}function isEmptyURL(e){return!e||"/"===e}function joinURL(e,...t){let s=e||"";for(const e of t.filter((e=>function(e){return e&&"/"!==e}(e))))if(s){const t=e.replace(P,"");s=withTrailingSlash(s)+t}else s=e;return s}const D=Symbol.for("ufo:protocolRelative");function parseURL(e="",t){const s=e.match(/^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i);if(s){const[,e,t=""]=s;return{protocol:e.toLowerCase(),pathname:t,href:e+t,auth:"",host:"",search:"",hash:""}}if(!hasProtocol(e,{acceptRelative:!0}))return parsePath(e);const[,a="",c,l=""]=e.replace(/\\/g,"/").match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/)||[];let[,u="",d=""]=l.match(/([^#/?]*)(.*)?/)||[];"file:"===a&&(d=d.replace(/\/(?=[A-Za-z]:)/,""));const{pathname:h,search:f,hash:m}=parsePath(d);return{protocol:a.toLowerCase(),auth:c?c.slice(0,Math.max(0,c.length-1)):"",host:u,pathname:h,search:f,hash:m,[D]:!a}}function parsePath(e=""){const[t="",s="",a=""]=(e.match(/([^#?]*)(\?[^#]*)?(#.*)?/)||[]).splice(1);return{pathname:t,search:s,hash:a}}const q=0,X=1,L=2;function createRouter$1(e={}){const t={options:e,rootNode:createRadixNode(),staticRoutesMap:{}},normalizeTrailingSlash=t=>e.strictTrailingSlash?t:t.replace(/\/$/,"")||"/";if(e.routes)for(const s in e.routes)insert(t,normalizeTrailingSlash(s),e.routes[s]);return{ctx:t,lookup:e=>function(e,t){const s=e.staticRoutesMap[t];if(s)return s.data;const a=t.split("/"),c={};let l=!1,u=null,d=e.rootNode,h=null;for(let e=0;e1){const t=a.length-e;d=d.placeholderChildren.find((e=>e.maxDepth===t))||null}else d=d.placeholderChildren[0]||null;if(!d)break;d.paramName&&(c[d.paramName]=t),l=!0}else d=s}null!==d&&null!==d.data||null===u||(d=u,c[d.paramName||"_"]=h,l=!0);if(!d)return null;if(l)return{...d.data,params:l?c:void 0};return d.data}(t,normalizeTrailingSlash(e)),insert:(e,s)=>insert(t,normalizeTrailingSlash(e),s),remove:e=>function(e,t){let s=!1;const a=t.split("/");let c=e.rootNode;for(const e of a)if(c=c.children.get(e),!c)return s;if(c.data){const e=a.at(-1)||"";c.data=null,0===Object.keys(c.children).length&&c.parent&&(c.parent.children.delete(e),c.parent.wildcardChildNode=null,c.parent.placeholderChildren=[]),s=!0}return s}(t,normalizeTrailingSlash(e))}}function insert(e,t,s){let a=!0;const c=t.split("/");let l=e.rootNode,u=0;const d=[l];for(const e of c){let t;if(t=l.children.get(e))l=t;else{const s=getNodeType(e);t=createRadixNode({type:s,parent:l}),l.children.set(e,t),s===L?(t.paramName="*"===e?"_"+u++:e.slice(1),l.placeholderChildren.push(t),a=!1):s===X&&(l.wildcardChildNode=t,t.paramName=e.slice(3)||"_",a=!1),d.push(t),l=t}}for(const[e,t]of d.entries())t.maxDepth=Math.max(d.length-e,t.maxDepth||0);return l.data=s,!0===a&&(e.staticRoutesMap[t]=l),l}function createRadixNode(e={}){return{type:e.type||q,maxDepth:0,parent:e.parent||null,children:new Map,data:e.data||null,paramName:e.paramName||null,wildcardChildNode:null,placeholderChildren:[]}}function getNodeType(e){return e.startsWith("**")?X:":"===e[0]||"*"===e?L:q}function toRouteMatcher(e){return function(e,t){return{ctx:{table:e},matchAll:s=>_matchRoutes(s,e,t)}}(_routerNodeToTable("",e.ctx.rootNode),e.ctx.options.strictTrailingSlash)}function _matchRoutes(e,t,s){!0!==s&&e.endsWith("/")&&(e=e.slice(0,-1)||"/");const a=[];for(const[s,c]of _sortRoutesMap(t.wildcard))(e===s||e.startsWith(s+"/"))&&a.push(c);for(const[s,c]of _sortRoutesMap(t.dynamic))if(e.startsWith(s+"/")){const t="/"+e.slice(s.length).split("/").splice(2).join("/");a.push(..._matchRoutes(t,c))}const c=t.static.get(e);return c&&a.push(c),a.filter(Boolean)}function _sortRoutesMap(e){return[...e.entries()].sort(((e,t)=>e[0].length-t[0].length))}function _routerNodeToTable(e,t){const s={static:new Map,wildcard:new Map,dynamic:new Map};return function _addNode(e,t){if(e)if(t.type!==q||e.includes("*")||e.includes(":")){if(t.type===X)s.wildcard.set(e.replace("/**",""),t.data);else if(t.type===L){const a=_routerNodeToTable("",t);return t.data&&a.static.set("/",t.data),void s.dynamic.set(e.replace(/\/\*|\/:\w+/,""),a)}}else t.data&&s.static.set(e,t.data);for(const[s,a]of t.children.entries())_addNode(`${e}/${s}`.replace("//","/"),a)}(e,t),s}function isPlainObject(e){if(null===e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&(!(Symbol.iterator in e)&&(!(Symbol.toStringTag in e)||"[object Module]"===Object.prototype.toString.call(e)))}function _defu(e,t,s=".",a){if(!isPlainObject(t))return _defu(e,{},s,a);const c=Object.assign({},t);for(const t in e){if("__proto__"===t||"constructor"===t)continue;const l=e[t];null!=l&&(a&&a(c,t,l,s)||(Array.isArray(l)&&Array.isArray(c[t])?c[t]=[...l,...c[t]]:isPlainObject(l)&&isPlainObject(c[t])?c[t]=_defu(l,c[t],(s?`${s}.`:"")+t.toString(),a):c[t]=l))}return c}function createDefu(e){return(...t)=>t.reduce(((t,s)=>_defu(t,s,"",e)),{})}const U=createDefu(),W=createDefu(((e,t,s)=>{if(void 0!==e[t]&&"function"==typeof s)return e[t]=s(e[t]),!0}));function o(e){throw new Error(`${e} is not implemented yet!`)}let F=class i extends l{__unenv__={};readableEncoding=null;readableEnded=!0;readableFlowing=!1;readableHighWaterMark=0;readableLength=0;readableObjectMode=!1;readableAborted=!1;readableDidRead=!1;closed=!1;errored=null;readable=!1;destroyed=!1;static from(e,t){return new i(t)}constructor(e){super()}_read(e){}read(e){}setEncoding(e){return this}pause(){return this}resume(){return this}isPaused(){return!0}unpipe(e){return this}unshift(e,t){}wrap(e){return this}push(e,t){return!1}_destroy(e,t){this.removeAllListeners()}destroy(e){return this.destroyed=!0,this._destroy(e),this}pipe(e,t){return{}}compose(e,t){throw new Error("Method not implemented.")}[Symbol.asyncDispose](){return this.destroy(),Promise.resolve()}async*[Symbol.asyncIterator](){throw o("Readable.asyncIterator")}iterator(e){throw o("Readable.iterator")}map(e,t){throw o("Readable.map")}filter(e,t){throw o("Readable.filter")}forEach(e,t){throw o("Readable.forEach")}reduce(e,t,s){throw o("Readable.reduce")}find(e,t){throw o("Readable.find")}findIndex(e,t){throw o("Readable.findIndex")}some(e,t){throw o("Readable.some")}toArray(e){throw o("Readable.toArray")}every(e,t){throw o("Readable.every")}flatMap(e,t){throw o("Readable.flatMap")}drop(e,t){throw o("Readable.drop")}take(e,t){throw o("Readable.take")}asIndexedPairs(e){throw o("Readable.asIndexedPairs")}},G=class extends l{__unenv__={};writable=!0;writableEnded=!1;writableFinished=!1;writableHighWaterMark=0;writableLength=0;writableObjectMode=!1;writableCorked=0;closed=!1;errored=null;writableNeedDrain=!1;destroyed=!1;_data;_encoding="utf8";constructor(e){super()}pipe(e,t){return{}}_write(e,t,s){if(this.writableEnded)s&&s();else{if(void 0===this._data)this._data=e;else{const s="string"==typeof this._data?u.from(this._data,this._encoding||t||"utf8"):this._data,a="string"==typeof e?u.from(e,t||this._encoding||"utf8"):e;this._data=u.concat([s,a])}this._encoding=t,s&&s()}}_writev(e,t){}_destroy(e,t){}_final(e){}write(e,t,s){const a="string"==typeof t?this._encoding:"utf8",c="function"==typeof t?t:"function"==typeof s?s:void 0;return this._write(e,a,c),!0}setDefaultEncoding(e){return this}end(e,t,s){const a="function"==typeof e?e:"function"==typeof t?t:"function"==typeof s?s:void 0;if(this.writableEnded)return a&&a(),this;const c=e===a?void 0:e;if(c){const e=t===a?void 0:t;this.write(c,e,a)}return this.writableEnded=!0,this.writableFinished=!0,this.emit("close"),this.emit("finish"),this}cork(){}uncork(){}destroy(e){return this.destroyed=!0,delete this._data,this.removeAllListeners(),this}compose(e,t){throw new Error("Method not implemented.")}};const J=class{allowHalfOpen=!0;_destroy;constructor(e=new F,t=new G){Object.assign(this,e),Object.assign(this,t),this._destroy=function(...e){return function(...t){for(const s of e)s(...t)}}(e._destroy,t._destroy)}};const Q=(Object.assign(J.prototype,F.prototype),Object.assign(J.prototype,G.prototype),J);class A extends Q{__unenv__={};bufferSize=0;bytesRead=0;bytesWritten=0;connecting=!1;destroyed=!1;pending=!1;localAddress="";localPort=0;remoteAddress="";remoteFamily="";remotePort=0;autoSelectFamilyAttemptedAddresses=[];readyState="readOnly";constructor(e){super()}write(e,t,s){return!1}connect(e,t,s){return this}end(e,t,s){return this}setEncoding(e){return this}pause(){return this}resume(){return this}setTimeout(e,t){return this}setNoDelay(e){return this}setKeepAlive(e,t){return this}address(){return{}}unref(){return this}ref(){return this}destroySoon(){this.destroy()}resetAndDestroy(){const e=new Error("ERR_SOCKET_CLOSED");return e.code="ERR_SOCKET_CLOSED",this.destroy(e),this}}class y extends F{aborted=!1;httpVersion="1.1";httpVersionMajor=1;httpVersionMinor=1;complete=!0;connection;socket;headers={};trailers={};method="GET";url="/";statusCode=200;statusMessage="";closed=!1;errored=null;readable=!1;constructor(e){super(),this.socket=this.connection=e||new A}get rawHeaders(){const e=this.headers,t=[];for(const s in e)if(Array.isArray(e[s]))for(const a of e[s])t.push(s,a);else t.push(s,e[s]);return t}get rawTrailers(){return[]}setTimeout(e,t){return this}get headersDistinct(){return p(this.headers)}get trailersDistinct(){return p(this.trailers)}}function p(e){const t={};for(const[s,a]of Object.entries(e))s&&(t[s]=(Array.isArray(a)?a:[a]).filter(Boolean));return t}class w extends G{statusCode=200;statusMessage="";upgrading=!1;chunkedEncoding=!1;shouldKeepAlive=!1;useChunkedEncodingByDefault=!1;sendDate=!1;finished=!1;headersSent=!1;strictContentLength=!1;connection=null;socket=null;req;_headers={};constructor(e){super(),this.req=e}assignSocket(e){e._httpMessage=this,this.socket=e,this.connection=e,this.emit("socket",e),this._flush()}_flush(){this.flushHeaders()}detachSocket(e){}writeContinue(e){}writeHead(e,t,s){e&&(this.statusCode=e),"string"==typeof t&&(this.statusMessage=t,t=void 0);const a=s||t;if(a&&!Array.isArray(a))for(const e in a)this.setHeader(e,a[e]);return this.headersSent=!0,this}writeProcessing(){}setTimeout(e,t){return this}appendHeader(e,t){e=e.toLowerCase();const s=this._headers[e],a=[...Array.isArray(s)?s:[s],...Array.isArray(t)?t:[t]].filter(Boolean);return this._headers[e]=a.length>1?a:a[0],this}setHeader(e,t){return this._headers[e.toLowerCase()]=t,this}setHeaders(e){for(const[t,s]of Object.entries(e))this.setHeader(t,s);return this}getHeader(e){return this._headers[e.toLowerCase()]}getHeaders(){return this._headers}getHeaderNames(){return Object.keys(this._headers)}hasHeader(e){return e.toLowerCase()in this._headers}removeHeader(e){delete this._headers[e.toLowerCase()]}addTrailers(e){}flushHeaders(){}writeEarlyHints(e,t){"function"==typeof t&&t()}}const V=(()=>{const n=function(){};return n.prototype=Object.create(null),n})();function S(e={}){if(e instanceof Headers)return e;const t=new Headers;for(const[s,a]of Object.entries(e))if(void 0!==a){if(Array.isArray(a)){for(const e of a)t.append(s,String(e));continue}t.set(s,String(a))}return t}const $=new Set([101,204,205,304]);async function b(e,t){const s=new y,a=new w(s);let c;if(s.url=t.url?.toString()||"/",!s.url.startsWith("/")){const e=new URL(s.url);c=e.host,s.url=e.pathname+e.search+e.hash}s.method=t.method||"GET",s.headers=function(e={}){const t=new V,s=Array.isArray(e)||function(e){return"function"==typeof e?.entries}(e)?e:Object.entries(e);for(const[e,a]of s)if(a){if(void 0===t[e]){t[e]=a;continue}t[e]=[...Array.isArray(t[e])?t[e]:[t[e]],...Array.isArray(a)?a:[a]]}return t}(t.headers||{}),s.headers.host||(s.headers.host=t.host||c||"localhost"),s.connection.encrypted=s.connection.encrypted||"https"===t.protocol,s.body=t.body||null,s.__unenv__=t.context,await e(s,a);let l=a._data;($.has(a.statusCode)||"HEAD"===s.method.toUpperCase())&&(l=null,delete a._headers["content-length"]);const u={status:a.statusCode,statusText:a.statusMessage,headers:a._headers,body:l};return s.destroy(),a.destroy(),u}function hasProp(e,t){try{return t in e}catch{return!1}}class H3Error extends Error{static __h3_error__=!0;statusCode=500;fatal=!1;unhandled=!1;statusMessage;data;cause;constructor(e,t={}){super(e,t),t.cause&&!this.cause&&(this.cause=t.cause)}toJSON(){const e={message:this.message,statusCode:sanitizeStatusCode(this.statusCode,500)};return this.statusMessage&&(e.statusMessage=sanitizeStatusMessage(this.statusMessage)),void 0!==this.data&&(e.data=this.data),e}}function createError$1(e){if("string"==typeof e)return new H3Error(e);if(isError(e))return e;const t=new H3Error(e.message??e.statusMessage??"",{cause:e.cause||e});if(hasProp(e,"stack"))try{Object.defineProperty(t,"stack",{get:()=>e.stack})}catch{try{t.stack=e.stack}catch{}}if(e.data&&(t.data=e.data),e.statusCode?t.statusCode=sanitizeStatusCode(e.statusCode,t.statusCode):e.status&&(t.statusCode=sanitizeStatusCode(e.status,t.statusCode)),e.statusMessage?t.statusMessage=e.statusMessage:e.statusText&&(t.statusMessage=e.statusText),t.statusMessage){const e=t.statusMessage;sanitizeStatusMessage(t.statusMessage)!==e&&console.warn("[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default.")}return void 0!==e.fatal&&(t.fatal=e.fatal),void 0!==e.unhandled&&(t.unhandled=e.unhandled),t}function isError(e){return!0===e?.constructor?.__h3_error__}function getQuery(e){return getQuery$1(e.path||"")}function getRequestHeaders(e){const t={};for(const s in e.node.req.headers){const a=e.node.req.headers[s];t[s]=Array.isArray(a)?a.filter(Boolean).join(", "):a}return t}const Y=getRequestHeaders;function getRequestHeader(e,t){return getRequestHeaders(e)[t.toLowerCase()]}function getRequestURL(e,t={}){const s=function(e,t={}){if(t.xForwardedHost){const t=e.node.req.headers["x-forwarded-host"];if(t)return t}return e.node.req.headers.host||"localhost"}(e,t),a=function(e,t={}){return!1!==t.xForwardedProto&&"https"===e.node.req.headers["x-forwarded-proto"]||e.node.req.connection?.encrypted?"https":"http"}(e,t),c=(e.node.req.originalUrl||e.path).replace(/^[/\\]+/g,"/");return new URL(c,`${a}://${s}`)}const ee=Symbol.for("h3RawBody"),te=Symbol.for("h3ParsedBody"),se=["PATCH","POST","PUT","DELETE"];function readRawBody(e,t="utf8"){!function(e,t){if(!function(e,t){if("string"==typeof t){if(e.method===t)return!0}else if(t.includes(e.method))return!0;return!1}(e,t))throw createError$1({statusCode:405,statusMessage:"HTTP method is not allowed."})}(e,se);const s=e._requestBody||e.web?.request?.body||e.node.req[ee]||e.node.req.rawBody||e.node.req.body;if(s){const e=Promise.resolve(s).then((e=>Buffer.isBuffer(e)?e:"function"==typeof e.pipeTo?new Promise(((t,s)=>{const a=[];e.pipeTo(new WritableStream({write(e){a.push(e)},close(){t(Buffer.concat(a))},abort(e){s(e)}})).catch(s)})):"function"==typeof e.pipe?new Promise(((t,s)=>{const a=[];e.on("data",(e=>{a.push(e)})).on("end",(()=>{t(Buffer.concat(a))})).on("error",s)})):e.constructor===Object?Buffer.from(JSON.stringify(e)):e instanceof URLSearchParams?Buffer.from(e.toString()):Buffer.from(e)));return t?e.then((e=>e.toString(t))):e}if(!Number.parseInt(e.node.req.headers["content-length"]||"")&&!String(e.node.req.headers["transfer-encoding"]??"").split(",").map((e=>e.trim())).filter(Boolean).includes("chunked"))return Promise.resolve(void 0);const a=e.node.req[ee]=new Promise(((t,s)=>{const a=[];e.node.req.on("error",(e=>{s(e)})).on("data",(e=>{a.push(e)})).on("end",(()=>{t(Buffer.concat(a))}))}));return t?a.then((e=>e.toString(t))):a}async function readBody(e,t={}){const s=e.node.req;if(hasProp(s,te))return s[te];const a=s.headers["content-type"]||"",c=await readRawBody(e);let l;return l="application/json"===a?_parseJSON(c,t.strict??!0):a.startsWith("application/x-www-form-urlencoded")?function(e){const t=new URLSearchParams(e),s=Object.create(null);for(const[e,a]of t.entries())hasProp(s,e)?(Array.isArray(s[e])||(s[e]=[s[e]]),s[e].push(a)):s[e]=a;return s}(c):a.startsWith("text/")?c:_parseJSON(c,t.strict??!1),s[te]=l,l}function _parseJSON(e="",t){if(e)try{return destr(e,{strict:t})}catch{throw createError$1({statusCode:400,statusMessage:"Bad Request",message:"Invalid JSON body"})}}function handleCacheHeaders(e,t){const s=["public",...t.cacheControls||[]];let a=!1;if(void 0!==t.maxAge&&s.push("max-age="+ +t.maxAge,"s-maxage="+ +t.maxAge),t.modifiedTime){const s=new Date(t.modifiedTime),c=e.node.req.headers["if-modified-since"];e.node.res.setHeader("last-modified",s.toUTCString()),c&&new Date(c)>=t.modifiedTime&&(a=!0)}if(t.etag){e.node.res.setHeader("etag",t.etag);e.node.req.headers["if-none-match"]===t.etag&&(a=!0)}return e.node.res.setHeader("cache-control",s.join(", ")),!!a&&(e.node.res.statusCode=304,e.handled||e.node.res.end(),!0)}const ae={html:"text/html",json:"application/json"},re=/[^\u0009\u0020-\u007E]/g;function sanitizeStatusMessage(e=""){return e.replace(re,"")}function sanitizeStatusCode(e,t=200){return e?("string"==typeof e&&(e=Number.parseInt(e,10)),e<100||e>999?t:e):t}function splitCookiesString(e){if(Array.isArray(e))return e.flatMap((e=>splitCookiesString(e)));if("string"!=typeof e)return[];const t=[];let s,a,c,l,u,d=0;const skipWhitespace=()=>{for(;d=e.length)&&t.push(e.slice(s))}return t}const oe="undefined"==typeof setImmediate?e=>e():setImmediate;function send(e,t,s){return s&&function(e,t){t&&304!==e.node.res.statusCode&&!e.node.res.getHeader("content-type")&&e.node.res.setHeader("content-type",t)}(e,s),new Promise((s=>{oe((()=>{e.handled||e.node.res.end(t),s()}))}))}function setResponseStatus(e,t,s){t&&(e.node.res.statusCode=sanitizeStatusCode(t,e.node.res.statusCode)),s&&(e.node.res.statusMessage=sanitizeStatusMessage(s))}function getResponseHeader(e,t){return e.node.res.getHeader(t)}function setResponseHeaders(e,t){for(const[s,a]of Object.entries(t))e.node.res.setHeader(s,a)}const ie=setResponseHeaders;function setResponseHeader(e,t,s){e.node.res.setHeader(t,s)}function sendStream(e,t){if(!t||"object"!=typeof t)throw new Error("[h3] Invalid stream provided.");if(e.node.res._data=t,!e.node.res.socket)return e._handled=!0,Promise.resolve();if(hasProp(t,"pipeTo")&&"function"==typeof t.pipeTo)return t.pipeTo(new WritableStream({write(t){e.node.res.write(t)}})).then((()=>{e.node.res.end()}));if(hasProp(t,"pipe")&&"function"==typeof t.pipe)return new Promise(((s,a)=>{t.pipe(e.node.res),t.on&&(t.on("end",(()=>{e.node.res.end(),s()})),t.on("error",(e=>{a(e)}))),e.node.res.on("close",(()=>{t.abort&&t.abort()}))}));throw new Error("[h3] Invalid or incompatible stream provided.")}function sendWebResponse(e,t){for(const[s,a]of t.headers)"set-cookie"===s?e.node.res.appendHeader(s,splitCookiesString(a)):e.node.res.setHeader(s,a);if(t.status&&(e.node.res.statusCode=sanitizeStatusCode(t.status,e.node.res.statusCode)),t.statusText&&(e.node.res.statusMessage=sanitizeStatusMessage(t.statusText)),t.redirected&&e.node.res.setHeader("location",t.url),t.body)return sendStream(e,t.body);e.node.res.end()}const ne=new Set(["PATCH","POST","PUT","DELETE"]),ce=new Set(["transfer-encoding","accept-encoding","connection","keep-alive","upgrade","expect","host","accept"]);async function proxyRequest(e,t,s={}){let a,c;ne.has(e.method)&&(s.streamRequest?(a=function(e){if(!se.includes(e.method))return;const t=e.web?.request?.body||e._requestBody;return t||(ee in e.node.req||"rawBody"in e.node.req||"body"in e.node.req||"__unenv__"in e.node.req?new ReadableStream({async start(t){const s=await readRawBody(e,!1);s&&t.enqueue(s),t.close()}}):new ReadableStream({start:t=>{e.node.req.on("data",(e=>{t.enqueue(e)})),e.node.req.on("end",(()=>{t.close()})),e.node.req.on("error",(e=>{t.error(e)}))}}))}(e),c="half"):a=await readRawBody(e,!1).catch((()=>{})));const l=s.fetchOptions?.method||e.method,u=function(e,...t){const s=t.filter(Boolean);if(0===s.length)return e;const a=new Headers(e);for(const e of s)for(const[t,s]of Object.entries(e))void 0!==s&&a.set(t,s);return a}(getProxyRequestHeaders(e,{host:t.startsWith("/")}),s.fetchOptions?.headers,s.headers);return async function(e,t,s={}){let a;try{a=await _getFetch(s.fetch)(t,{headers:s.headers,ignoreResponseError:!0,...s.fetchOptions})}catch(e){throw createError$1({status:502,statusMessage:"Bad Gateway",cause:e})}e.node.res.statusCode=sanitizeStatusCode(a.status,e.node.res.statusCode),e.node.res.statusMessage=sanitizeStatusMessage(a.statusText);const c=[];for(const[t,s]of a.headers.entries())"content-encoding"!==t&&"content-length"!==t&&("set-cookie"!==t?e.node.res.setHeader(t,s):c.push(...splitCookiesString(s)));c.length>0&&e.node.res.setHeader("set-cookie",c.map((e=>(s.cookieDomainRewrite&&(e=rewriteCookieProperty(e,s.cookieDomainRewrite,"domain")),s.cookiePathRewrite&&(e=rewriteCookieProperty(e,s.cookiePathRewrite,"path")),e))));s.onResponse&&await s.onResponse(e,a);if(void 0!==a._data)return a._data;if(e.handled)return;if(!1===s.sendStream){const t=new Uint8Array(await a.arrayBuffer());return e.node.res.end(t)}if(a.body)for await(const t of a.body)e.node.res.write(t);return e.node.res.end()}(e,t,{...s,fetchOptions:{method:l,body:a,duplex:c,...s.fetchOptions,headers:u}})}function getProxyRequestHeaders(e,t){const s=Object.create(null),a=getRequestHeaders(e);for(const e in a)(!ce.has(e)||"host"===e&&t?.host)&&(s[e]=a[e]);return s}function fetchWithEvent(e,t,s,a){return _getFetch(a?.fetch)(t,{...s,context:s?.context||e.context,headers:{...getProxyRequestHeaders(e,{host:"string"==typeof t&&t.startsWith("/")}),...s?.headers}})}function _getFetch(e){if(e)return e;if(globalThis.fetch)return globalThis.fetch;throw new Error("fetch is not available. Try importing `node-fetch-native/polyfill` for Node.js.")}function rewriteCookieProperty(e,t,s){const a="string"==typeof t?{"*":t}:t;return e.replace(new RegExp(`(;\\s*${s}=)([^;]+)`,"gi"),((e,t,s)=>{let c;if(s in a)c=a[s];else{if(!("*"in a))return e;c=a["*"]}return c?t+c:""}))}class H3Event{__is_event__=!0;node;web;context={};_method;_path;_headers;_requestBody;_handled=!1;_onBeforeResponseCalled;_onAfterResponseCalled;constructor(e,t){this.node={req:e,res:t}}get method(){return this._method||(this._method=(this.node.req.method||"GET").toUpperCase()),this._method}get path(){return this._path||this.node.req.url||"/"}get headers(){return this._headers||(this._headers=function(e){const t=new Headers;for(const[s,a]of Object.entries(e))if(Array.isArray(a))for(const e of a)t.append(s,e);else a&&t.set(s,a);return t}(this.node.req.headers)),this._headers}get handled(){return this._handled||this.node.res.writableEnded||this.node.res.headersSent}respondWith(e){return Promise.resolve(e).then((e=>sendWebResponse(this,e)))}toString(){return`[${this.method}] ${this.path}`}toJSON(){return this.toString()}get req(){return this.node.req}get res(){return this.node.res}}function isEvent(e){return hasProp(e,"__is_event__")}function createEvent(e,t){return new H3Event(e,t)}function defineEventHandler(e){if("function"==typeof e)return e.__is_handler__=!0,e;const t={onRequest:_normalizeArray(e.onRequest),onBeforeResponse:_normalizeArray(e.onBeforeResponse)},_handler=s=>async function(e,t,s){if(s.onRequest)for(const t of s.onRequest)if(await t(e),e.handled)return;const a=await t(e),c={body:a};if(s.onBeforeResponse)for(const t of s.onBeforeResponse)await t(e,c);return c.body}(s,e.handler,t);return _handler.__is_handler__=!0,_handler.__resolve__=e.handler.__resolve__,_handler.__websocket__=e.websocket,_handler}function _normalizeArray(e){return e?Array.isArray(e)?e:[e]:void 0}const pe=defineEventHandler;function isEventHandler(e){return hasProp(e,"__is_handler__")}function toEventHandler(e,t,s){return isEventHandler(e)||console.warn("[h3] Implicit event handler conversion is deprecated. Use `eventHandler()` or `fromNodeMiddleware()` to define event handlers.",s&&"/"!==s?`\n Route: ${s}`:"",`\n Handler: ${e}`),e}const lazyEventHandler=function(e){let t,s;const resolveHandler=()=>s?Promise.resolve(s):(t||(t=Promise.resolve(e()).then((e=>{const t=e.default||e;if("function"!=typeof t)throw new TypeError("Invalid lazy handler result. It should be a function:",t);return s={handler:toEventHandler(e.default||e)},s}))),t),a=pe((e=>s?s.handler(e):resolveHandler().then((t=>t.handler(e)))));return a.__resolve__=resolveHandler,a};function createApp(e={}){const t=[],s=function(e,t){const s=t.debug?2:void 0;return pe((async a=>{a.node.req.originalUrl=a.node.req.originalUrl||a.node.req.url||"/";const c=a._path||a.node.req.url||"/";let l;t.onRequest&&await t.onRequest(a);for(const u of e){if(u.route.length>1){if(!c.startsWith(u.route))continue;l=c.slice(u.route.length)||"/"}else l=c;if(u.match&&!u.match(l,a))continue;a._path=l,a.node.req.url=l;const e=await u.handler(a),d=void 0===e?void 0:await e;if(void 0!==d){const e={body:d};return t.onBeforeResponse&&(a._onBeforeResponseCalled=!0,await t.onBeforeResponse(a,e)),await handleHandlerResponse(a,e.body,s),void(t.onAfterResponse&&(a._onAfterResponseCalled=!0,await t.onAfterResponse(a,e)))}if(a.handled)return void(t.onAfterResponse&&(a._onAfterResponseCalled=!0,await t.onAfterResponse(a,void 0)))}if(!a.handled)throw createError$1({statusCode:404,statusMessage:`Cannot find any path matching ${a.path||"/"}.`});t.onAfterResponse&&(a._onAfterResponseCalled=!0,await t.onAfterResponse(a,void 0))}))}(t,e),a=function(e){return async t=>{let s;for(const a of e){if("/"===a.route&&!a.handler.__resolve__)continue;if(!t.startsWith(a.route))continue;if(s=t.slice(a.route.length)||"/",a.match&&!a.match(s,void 0))continue;let e={route:a.route,handler:a.handler};if(e.handler.__resolve__){const t=await e.handler.__resolve__(s);if(!t)continue;e={...e,...t,route:joinURL(e.route||"/",t.route||"/")}}return e}}}(t);s.__resolve__=a;const c=function(e){let t;return()=>(t||(t=e()),t)}((()=>{return t=a,{...e.websocket,async resolve(e){const s=e.request?.url||e.url||"/",{pathname:a}="string"==typeof s?parseURL(s):s,c=await t(a);return c?.handler?.__websocket__||{}}};var t})),l={use:(e,t,s)=>use(l,e,t,s),resolve:a,handler:s,stack:t,options:e,get websocket(){return c()}};return l}function use(e,t,s,a){if(Array.isArray(t))for(const c of t)use(e,c,s,a);else if(Array.isArray(s))for(const c of s)use(e,t,c,a);else"string"==typeof t?e.stack.push(normalizeLayer({...a,route:t,handler:s})):"function"==typeof t?e.stack.push(normalizeLayer({...s,handler:t})):e.stack.push(normalizeLayer({...t}));return e}function normalizeLayer(e){let t=e.handler;return t.handler&&(t=t.handler),e.lazy?t=lazyEventHandler(t):isEventHandler(t)||(t=toEventHandler(t,0,e.route)),{route:withoutTrailingSlash(e.route),match:e.match,handler:t}}function handleHandlerResponse(e,t,s){if(null===t)return function(e,t){if(e.handled)return;t||200===e.node.res.statusCode||(t=e.node.res.statusCode);const s=sanitizeStatusCode(t,204);204===s&&e.node.res.removeHeader("content-length"),e.node.res.writeHead(s),e.node.res.end()}(e);if(t){if(a=t,"undefined"!=typeof Response&&a instanceof Response)return sendWebResponse(e,t);if(function(e){if(!e||"object"!=typeof e)return!1;if("function"==typeof e.pipe){if("function"==typeof e._read)return!0;if("function"==typeof e.abort)return!0}return"function"==typeof e.pipeTo}(t))return sendStream(e,t);if(t.buffer)return send(e,t);if(t.arrayBuffer&&"function"==typeof t.arrayBuffer)return t.arrayBuffer().then((s=>send(e,Buffer.from(s),t.type)));if(t instanceof Error)throw createError$1(t);if("function"==typeof t.end)return!0}var a;const c=typeof t;if("string"===c)return send(e,t,ae.html);if("object"===c||"boolean"===c||"number"===c)return send(e,JSON.stringify(t,void 0,s),ae.json);if("bigint"===c)return send(e,t.toString(),ae.json);throw createError$1({statusCode:500,statusMessage:`[h3] Cannot send ${c} as response.`})}const le=["connect","delete","get","head","options","post","put","trace","patch"];function toNodeListener(e){return async function(t,s){const a=createEvent(t,s);try{await e.handler(a)}catch(t){const s=createError$1(t);if(isError(t)||(s.unhandled=!0),setResponseStatus(a,s.statusCode,s.statusMessage),e.options.onError&&await e.options.onError(s,a),a.handled)return;(s.unhandled||s.fatal)&&console.error("[h3]",s.fatal?"[fatal]":"[unhandled]",s),e.options.onBeforeResponse&&!a._onBeforeResponseCalled&&await e.options.onBeforeResponse(a,{body:s}),await function(e,t,s){if(e.handled)return;const a=isError(t)?t:createError$1(t),c={statusCode:a.statusCode,statusMessage:a.statusMessage,stack:[],data:a.data};if(s&&(c.stack=(a.stack||"").split("\n").map((e=>e.trim()))),e.handled)return;setResponseStatus(e,Number.parseInt(a.statusCode),a.statusMessage),e.node.res.setHeader("content-type",ae.json),e.node.res.end(JSON.stringify(c,void 0,2))}(a,s,!!e.options.debug),e.options.onAfterResponse&&!a._onAfterResponseCalled&&await e.options.onAfterResponse(a,{body:s})}}}function flatHooks(e,t={},s){for(const a in e){const c=e[a],l=s?`${s}:${a}`:a;"object"==typeof c&&null!==c?flatHooks(c,t,l):"function"==typeof c&&(t[l]=c)}return t}const ue={run:e=>e()},de=void 0!==console.createTask?console.createTask:()=>ue;function serialTaskCaller(e,t){const s=t.shift(),a=de(s);return e.reduce(((e,s)=>e.then((()=>a.run((()=>s(...t)))))),Promise.resolve())}function parallelTaskCaller(e,t){const s=t.shift(),a=de(s);return Promise.all(e.map((e=>a.run((()=>e(...t))))))}function callEachWith(e,t){for(const s of[...e])s(t)}class Hookable{constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(e,t,s={}){if(!e||"function"!=typeof t)return()=>{};const a=e;let c;for(;this._deprecatedHooks[e];)c=this._deprecatedHooks[e],e=c.to;if(c&&!s.allowDeprecated){let e=c.message;e||(e=`${a} hook has been deprecated`+(c.to?`, please use ${c.to}`:"")),this._deprecatedMessages||(this._deprecatedMessages=new Set),this._deprecatedMessages.has(e)||(console.warn(e),this._deprecatedMessages.add(e))}if(!t.name)try{Object.defineProperty(t,"name",{get:()=>"_"+e.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{}return this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{t&&(this.removeHook(e,t),t=void 0)}}hookOnce(e,t){let s,_function=(...e)=>("function"==typeof s&&s(),s=void 0,_function=void 0,t(...e));return s=this.hook(e,_function),s}removeHook(e,t){if(this._hooks[e]){const s=this._hooks[e].indexOf(t);-1!==s&&this._hooks[e].splice(s,1),0===this._hooks[e].length&&delete this._hooks[e]}}deprecateHook(e,t){this._deprecatedHooks[e]="string"==typeof t?{to:t}:t;const s=this._hooks[e]||[];delete this._hooks[e];for(const t of s)this.hook(e,t)}deprecateHooks(e){Object.assign(this._deprecatedHooks,e);for(const t in e)this.deprecateHook(t,e[t])}addHooks(e){const t=flatHooks(e),s=Object.keys(t).map((e=>this.hook(e,t[e])));return()=>{for(const e of s.splice(0,s.length))e()}}removeHooks(e){const t=flatHooks(e);for(const e in t)this.removeHook(e,t[e])}removeAllHooks(){for(const e in this._hooks)delete this._hooks[e]}callHook(e,...t){return t.unshift(e),this.callHookWith(serialTaskCaller,e,...t)}callHookParallel(e,...t){return t.unshift(e),this.callHookWith(parallelTaskCaller,e,...t)}callHookWith(e,t,...s){const a=this._before||this._after?{name:t,args:s,context:{}}:void 0;this._before&&callEachWith(this._before,a);const c=e(t in this._hooks?[...this._hooks[t]]:[],s);return c instanceof Promise?c.finally((()=>{this._after&&a&&callEachWith(this._after,a)})):(this._after&&a&&callEachWith(this._after,a),c)}beforeEach(e){return this._before=this._before||[],this._before.push(e),()=>{if(void 0!==this._before){const t=this._before.indexOf(e);-1!==t&&this._before.splice(t,1)}}}afterEach(e){return this._after=this._after||[],this._after.push(e),()=>{if(void 0!==this._after){const t=this._after.indexOf(e);-1!==t&&this._after.splice(t,1)}}}}const he=globalThis.Headers,fe=globalThis.AbortController,me=globalThis.fetch||(()=>{throw new Error("[node-fetch-native] Failed to fetch: `globalThis.fetch` is not available!")});class FetchError extends Error{constructor(e,t){super(e,t),this.name="FetchError",t?.cause&&!this.cause&&(this.cause=t.cause)}}const ge=new Set(Object.freeze(["PATCH","POST","PUT","DELETE"]));function isPayloadMethod(e="GET"){return ge.has(e.toUpperCase())}const ye=new Set(["image/svg","application/xml","application/xhtml","application/html"]),ve=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function resolveFetchOptions(e,t,s,a){const c=function(e,t,s){if(!t)return new s(e);const a=new s(t);if(e)for(const[t,c]of Symbol.iterator in e||Array.isArray(e)?e:new s(e))a.set(t,c);return a}(t?.headers??e?.headers,s?.headers,a);let l;return(s?.query||s?.params||t?.params||t?.query)&&(l={...s?.params,...s?.query,...t?.params,...t?.query}),{...s,...t,query:l,params:l,headers:c}}async function callHooks(e,t){if(t)if(Array.isArray(t))for(const s of t)await s(e);else await t(e)}const we=new Set([408,409,425,429,500,502,503,504]),be=new Set([101,204,205,304]);function createFetch(e={}){const{fetch:t=globalThis.fetch,Headers:s=globalThis.Headers,AbortController:a=globalThis.AbortController}=e;async function onError(e){const t=e.error&&"AbortError"===e.error.name&&!e.options.timeout||!1;if(!1!==e.options.retry&&!t){let t;t="number"==typeof e.options.retry?e.options.retry:isPayloadMethod(e.options.method)?0:1;const s=e.response&&e.response.status||500;if(t>0&&(Array.isArray(e.options.retryStatusCodes)?e.options.retryStatusCodes.includes(s):we.has(s))){const s="function"==typeof e.options.retryDelay?e.options.retryDelay(e):e.options.retryDelay||0;return s>0&&await new Promise((e=>setTimeout(e,s))),$fetchRaw(e.request,{...e.options,retry:t-1})}}const s=function(e){const t=e.error?.message||e.error?.toString()||"",s=e.request?.method||e.options?.method||"GET",a=e.request?.url||String(e.request)||"/",c=`[${s}] ${JSON.stringify(a)}`,l=e.response?`${e.response.status} ${e.response.statusText}`:"",u=new FetchError(`${c}: ${l}${t?` ${t}`:""}`,e.error?{cause:e.error}:void 0);for(const t of["request","options","response"])Object.defineProperty(u,t,{get:()=>e[t]});for(const[t,s]of[["data","_data"],["status","status"],["statusCode","status"],["statusText","statusText"],["statusMessage","statusText"]])Object.defineProperty(u,t,{get:()=>e.response&&e.response[s]});return u}(e);throw Error.captureStackTrace&&Error.captureStackTrace(s,$fetchRaw),s}const $fetchRaw=async function(c,l={}){const u={request:c,options:resolveFetchOptions(c,l,e.defaults,s),response:void 0,error:void 0};let d;if(u.options.method&&(u.options.method=u.options.method.toUpperCase()),u.options.onRequest&&await callHooks(u,u.options.onRequest),"string"==typeof u.request&&(u.options.baseURL&&(u.request=function(e,t){if(isEmptyURL(t)||hasProtocol(e))return e;const s=withoutTrailingSlash(t);return e.startsWith(s)?e:joinURL(s,e)}(u.request,u.options.baseURL)),u.options.query&&(u.request=withQuery(u.request,u.options.query),delete u.options.query),"query"in u.options&&delete u.options.query,"params"in u.options&&delete u.options.params),u.options.body&&isPayloadMethod(u.options.method)&&(!function(e){if(void 0===e)return!1;const t=typeof e;return"string"===t||"number"===t||"boolean"===t||null===t||"object"===t&&(!!Array.isArray(e)||!e.buffer&&(e.constructor&&"Object"===e.constructor.name||"function"==typeof e.toJSON))}(u.options.body)?("pipeTo"in u.options.body&&"function"==typeof u.options.body.pipeTo||"function"==typeof u.options.body.pipe)&&("duplex"in u.options||(u.options.duplex="half")):(u.options.body="string"==typeof u.options.body?u.options.body:JSON.stringify(u.options.body),u.options.headers=new s(u.options.headers||{}),u.options.headers.has("content-type")||u.options.headers.set("content-type","application/json"),u.options.headers.has("accept")||u.options.headers.set("accept","application/json"))),!u.options.signal&&u.options.timeout){const e=new a;d=setTimeout((()=>{const t=new Error("[TimeoutError]: The operation was aborted due to timeout");t.name="TimeoutError",t.code=23,e.abort(t)}),u.options.timeout),u.options.signal=e.signal}try{u.response=await t(u.request,u.options)}catch(e){return u.error=e,u.options.onRequestError&&await callHooks(u,u.options.onRequestError),await onError(u)}finally{d&&clearTimeout(d)}if((u.response.body||u.response._bodyInit)&&!be.has(u.response.status)&&"HEAD"!==u.options.method){const e=(u.options.parseResponse?"json":u.options.responseType)||function(e=""){if(!e)return"json";const t=e.split(";").shift()||"";return ve.test(t)?"json":ye.has(t)||t.startsWith("text/")?"text":"blob"}(u.response.headers.get("content-type")||"");switch(e){case"json":{const e=await u.response.text(),t=u.options.parseResponse||destr;u.response._data=t(e);break}case"stream":u.response._data=u.response.body||u.response._bodyInit;break;default:u.response._data=await u.response[e]()}}return u.options.onResponse&&await callHooks(u,u.options.onResponse),!u.options.ignoreResponseError&&u.response.status>=400&&u.response.status<600?(u.options.onResponseError&&await callHooks(u,u.options.onResponseError),await onError(u)):u.response},$fetch=async function(e,t){return(await $fetchRaw(e,t))._data};return $fetch.raw=$fetchRaw,$fetch.native=(...e)=>t(...e),$fetch.create=(t={},s={})=>createFetch({...e,...s,defaults:{...e.defaults,...s.defaults,...t}}),$fetch}const je=globalThis.fetch?(...e)=>globalThis.fetch(...e):function(){if(!JSON.parse(e.env.FETCH_KEEP_ALIVE||"false"))return me;const s={keepAlive:!0},c=new t.Agent(s),l=new a.Agent(s),u={agent:e=>"http:"===e.protocol?c:l};return function(e,t){return me(e,{...u,...t})}}(),Te=globalThis.Headers||he,_e=globalThis.AbortController||fe,xe=createFetch({fetch:je,Headers:Te,AbortController:_e});function defaultHandler(e,t,s){const a=e.unhandled||e.fatal,c=e.statusCode||500,l=e.statusMessage||"Server Error",u=getRequestURL(t,{xForwardedHost:!0,xForwardedProto:!0});if(404===c){const e="/";if(/^\/[^/]/.test(e)&&!u.pathname.startsWith(e)){return{status:302,statusText:"Found",headers:{location:`${e}${u.pathname.slice(1)}${u.search}`},body:"Redirecting..."}}}if(a&&!s?.silent){const s=[e.unhandled&&"[unhandled]",e.fatal&&"[fatal]"].filter(Boolean).join(" ");console.error(`[request error] ${s} [${t.method}] ${u}\n`,e)}const d={"content-type":"application/json","x-content-type-options":"nosniff","x-frame-options":"DENY","referrer-policy":"no-referrer","content-security-policy":"script-src 'none'; frame-ancestors 'none';"};setResponseStatus(t,c,l),404!==c&&getResponseHeader(t,"cache-control")||(d["cache-control"]="no-cache");return{status:c,statusText:l,headers:d,body:{error:!0,url:u.href,statusCode:c,statusMessage:l,message:a?"Server Error":e.message,data:a?void 0:e.data}}}const ze=[function(e,t){const s=defaultHandler(e,t);return setResponseHeaders(t,s.headers),setResponseStatus(t,s.status,s.statusText),send(t,JSON.stringify(s.body,null,2))}];const Re=[],ke={"/index.html":{type:"text/html; charset=utf-8",etag:'"ca4-rqtMgo5/WwgBUR+/nkWlcKcCVqw"',mtime:"2025-03-12T06:02:42.428Z",size:3236,path:"../public/index.html"},"/logo.png":{type:"image/png",etag:'"146c-vbv340mQ6WdpZBtCqwFRw74KQuc"',mtime:"2025-03-12T06:02:42.429Z",size:5228,path:"../public/logo.png"},"/manifest.webmanifest":{type:"application/manifest+json",etag:'"2fd-zWkiHcrpBX6ARjw8dVUGeqhPPmc"',mtime:"2025-03-12T06:02:42.429Z",size:765,path:"../public/manifest.webmanifest"},"/popup.html":{type:"text/html; charset=utf-8",etag:'"184d-vSF63klyS6Ja55WZHTREX8Rg1LE"',mtime:"2025-03-12T06:02:42.429Z",size:6221,path:"../public/popup.html"},"/pwa-196x196.png":{type:"image/png",etag:'"1eb7-p6q5vh3QYAEsrZYyk7SBkrshKtE"',mtime:"2025-03-12T06:02:42.429Z",size:7863,path:"../public/pwa-196x196.png"},"/pwa-256x256.png":{type:"image/png",etag:'"2713-9NzNvaCAwa1EQO5RcbhcoOjZAK4"',mtime:"2025-03-12T06:02:42.431Z",size:10003,path:"../public/pwa-256x256.png"},"/pwa-512x512.png":{type:"image/png",etag:'"6bf3-7vwlcGNRgCNfmMJg9y1nkg29W/Y"',mtime:"2025-03-12T06:02:42.431Z",size:27635,path:"../public/pwa-512x512.png"},"/sw.js":{type:"text/javascript; charset=utf-8",etag:'"bdd-J3/EexPkcLcncWD4jr2ptLCG6R8"',mtime:"2025-03-12T06:02:42.431Z",size:3037,path:"../public/sw.js"},"/assets/@agoose77-mGnNv_bd.js":{type:"text/javascript; charset=utf-8",etag:'"3f8-kkRJV/0Bx7CKjIxD8kcFvTRBpkU"',mtime:"2025-03-12T06:02:42.367Z",size:1016,path:"../public/assets/@agoose77-mGnNv_bd.js"},"/assets/@babel-D5ZMb8W9.js":{type:"text/javascript; charset=utf-8",etag:'"db1-m5rnV2WS84lNP3qks8hx1iOLDYA"',mtime:"2025-03-12T06:02:42.379Z",size:3505,path:"../public/assets/@babel-D5ZMb8W9.js"},"/assets/@braintree-DgpeZQRe.js":{type:"text/javascript; charset=utf-8",etag:'"2a4-2K8KNVdkUaQ04A8o43R6GWDlpco"',mtime:"2025-03-12T06:02:42.379Z",size:676,path:"../public/assets/@braintree-DgpeZQRe.js"},"/assets/@dicebear-JcnEMRoc.js":{type:"text/javascript; charset=utf-8",etag:'"e69c6-YtVovg5a+LyAi23aDuwID4it3CI"',mtime:"2025-03-12T06:02:42.383Z",size:944582,path:"../public/assets/@dicebear-JcnEMRoc.js"},"/assets/@intlify-eboPrqDD.js":{type:"text/javascript; charset=utf-8",etag:'"82de-iBGY7LJDbsKntsZIQgnNE8kD4lw"',mtime:"2025-03-12T06:02:42.379Z",size:33502,path:"../public/assets/@intlify-eboPrqDD.js"},"/assets/@material-C_XhzpVg.js":{type:"text/javascript; charset=utf-8",etag:'"40cb-64INX7fQdl6f/siGMXz+LIXUno4"',mtime:"2025-03-12T06:02:42.380Z",size:16587,path:"../public/assets/@material-C_XhzpVg.js"},"/assets/@mozilla-BD532_dh.js":{type:"text/javascript; charset=utf-8",etag:'"b077-4sHQRvCwJRi7Ty345BizX8pKvHg"',mtime:"2025-03-12T06:02:42.380Z",size:45175,path:"../public/assets/@mozilla-BD532_dh.js"},"/assets/@popperjs-B4tvfKWZ.js":{type:"text/javascript; charset=utf-8",etag:'"4f78-Lyps+KUWR9d3YKiyQV8FsmXX5DY"',mtime:"2025-03-12T06:02:42.380Z",size:20344,path:"../public/assets/@popperjs-B4tvfKWZ.js"},"/assets/@traptitech-BPk2gen6.js":{type:"text/javascript; charset=utf-8",etag:'"91b-OUSV/bSR4ygVDXuI3mxrW0a847Y"',mtime:"2025-03-12T06:02:42.380Z",size:2331,path:"../public/assets/@traptitech-BPk2gen6.js"},"/assets/@vue-DsZlmJIP.js":{type:"text/javascript; charset=utf-8",etag:'"32d51-LSKgHa+KyuXG0hwuJnHDKqVTogs"',mtime:"2025-03-12T06:02:42.381Z",size:208209,path:"../public/assets/@vue-DsZlmJIP.js"},"/assets/@vueuse-Cn3Nsuq9.js":{type:"text/javascript; charset=utf-8",etag:'"2176-yFWz1Hcf9d9yOMGut7UfRmETQmA"',mtime:"2025-03-12T06:02:42.381Z",size:8566,path:"../public/assets/@vueuse-Cn3Nsuq9.js"},"/assets/@wdns-P0uM2sk1.js":{type:"text/javascript; charset=utf-8",etag:'"30b48-Lmz7xEmxkogDAZhlEJKtKXPPSRw"',mtime:"2025-03-12T06:02:42.381Z",size:199496,path:"../public/assets/@wdns-P0uM2sk1.js"},"/assets/ChatInput-BMuO6hgs.css":{type:"text/css; charset=utf-8",etag:'"186-rCUycStrOY1FSp1LM5EdmoDU818"',mtime:"2025-03-12T06:02:42.381Z",size:390,path:"../public/assets/ChatInput-BMuO6hgs.css"},"/assets/ChatInput.vue_vue_type_style_index_0_lang-CF8t52ZG.js":{type:"text/javascript; charset=utf-8",etag:'"2aed-/DW5EwMxB6yP9jJ5WqNCvlK+5ks"',mtime:"2025-03-12T06:02:42.381Z",size:10989,path:"../public/assets/ChatInput.vue_vue_type_style_index_0_lang-CF8t52ZG.js"},"/assets/CodeBlocks-Cek-iqBx.css":{type:"text/css; charset=utf-8",etag:'"c99-JkJoeIng8xT00xL6m+LJ+/R5x30"',mtime:"2025-03-12T06:02:42.381Z",size:3225,path:"../public/assets/CodeBlocks-Cek-iqBx.css"},"/assets/CodeBlocks.vue_vue_type_style_index_0_lang-DWS4lyNS.js":{type:"text/javascript; charset=utf-8",etag:'"3f09-a/Cmt5Pb6l778d98ZoCPKWHKc9g"',mtime:"2025-03-12T06:02:42.383Z",size:16137,path:"../public/assets/CodeBlocks.vue_vue_type_style_index_0_lang-DWS4lyNS.js"},"/assets/FrameContent-BXoZjZi-.js":{type:"text/javascript; charset=utf-8",etag:'"6aa-rwRkfhkAOHTmtIesvkjxAVazLTI"',mtime:"2025-03-12T06:02:42.384Z",size:1706,path:"../public/assets/FrameContent-BXoZjZi-.js"},"/assets/FrameContent-CUoI637t.css":{type:"text/css; charset=utf-8",etag:'"fb-6QJbV1XyCjCNz5MaOnPi8ahEGDo"',mtime:"2025-03-12T06:02:42.384Z",size:251,path:"../public/assets/FrameContent-CUoI637t.css"},"/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2":{type:"font/woff2",etag:'"6dac-NElHQ3Nv2nVxl9FvzGpuGnkxfIY"',mtime:"2025-03-12T06:02:42.383Z",size:28076,path:"../public/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2"},"/assets/KaTeX_AMS-Regular-DMm9YOAa.woff":{type:"font/woff",etag:'"82ec-ma2i3jIA55UUPWOSMsNESwgBgjU"',mtime:"2025-03-12T06:02:42.383Z",size:33516,path:"../public/assets/KaTeX_AMS-Regular-DMm9YOAa.woff"},"/assets/KaTeX_AMS-Regular-DRggAlZN.ttf":{type:"font/ttf",etag:'"f890-Hf0O5uMPihwjmZ2dll24cAtany4"',mtime:"2025-03-12T06:02:42.383Z",size:63632,path:"../public/assets/KaTeX_AMS-Regular-DRggAlZN.ttf"},"/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf":{type:"font/ttf",etag:'"3050-j6tziha6j7fnACoHXwNqRVpFxug"',mtime:"2025-03-12T06:02:42.384Z",size:12368,path:"../public/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf"},"/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff":{type:"font/woff",etag:'"1e24-3SOsD7CsRpsGJEhep41wD2NhQgM"',mtime:"2025-03-12T06:02:42.384Z",size:7716,path:"../public/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff"},"/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2":{type:"font/woff2",etag:'"1b00-W/pJysRs0derE1E4jTfBGvWbphU"',mtime:"2025-03-12T06:02:42.384Z",size:6912,path:"../public/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2"},"/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff":{type:"font/woff",etag:'"1de8-Gm85vXDJt0cTB431991hCPm604s"',mtime:"2025-03-12T06:02:42.384Z",size:7656,path:"../public/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff"},"/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2":{type:"font/woff2",etag:'"1afc-n4B34LOKKQzZt7E2sKwpyDdegaY"',mtime:"2025-03-12T06:02:42.384Z",size:6908,path:"../public/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2"},"/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf":{type:"font/ttf",etag:'"3038-JvJqE+an0KabSPYqzTGoGWvOf24"',mtime:"2025-03-12T06:02:42.384Z",size:12344,path:"../public/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf"},"/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf":{type:"font/ttf",etag:'"4c80-TgjdADgxJOfNlpcMyw++NcnvqqM"',mtime:"2025-03-12T06:02:42.384Z",size:19584,path:"../public/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf"},"/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff":{type:"font/woff",etag:'"33f0-W7r9UB8mIhlCavfyDBEDu0tzJZI"',mtime:"2025-03-12T06:02:42.384Z",size:13296,path:"../public/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff"},"/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2":{type:"font/woff2",etag:'"2c54-+Y+JJy7KEa5BdnLFmg+qaoiAWok"',mtime:"2025-03-12T06:02:42.384Z",size:11348,path:"../public/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2"},"/assets/KaTeX_Fraktur-Regular-CB_wures.ttf":{type:"font/ttf",etag:'"4c74-F9tAiC3V8UBiXyjdlMQwReGJPpg"',mtime:"2025-03-12T06:02:42.384Z",size:19572,path:"../public/assets/KaTeX_Fraktur-Regular-CB_wures.ttf"},"/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2":{type:"font/woff2",etag:'"2c34-pXZMbieE0CggwLkECJ8/rHmL5Po"',mtime:"2025-03-12T06:02:42.385Z",size:11316,path:"../public/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2"},"/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff":{type:"font/woff",etag:'"3398-b3VjdjYPCBW0SGL1f3let8HNTbI"',mtime:"2025-03-12T06:02:42.385Z",size:13208,path:"../public/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff"},"/assets/KaTeX_Main-Bold-Cx986IdX.woff2":{type:"font/woff2",etag:'"62ec-MQUKGxsSP7LFnK0fdLff+Q3rj84"',mtime:"2025-03-12T06:02:42.385Z",size:25324,path:"../public/assets/KaTeX_Main-Bold-Cx986IdX.woff2"},"/assets/KaTeX_Main-Bold-Jm3AIy58.woff":{type:"font/woff",etag:'"74d8-9po2JQ6ubooCFzqZCapihCi6IGA"',mtime:"2025-03-12T06:02:42.385Z",size:29912,path:"../public/assets/KaTeX_Main-Bold-Jm3AIy58.woff"},"/assets/KaTeX_Main-Bold-waoOVXN0.ttf":{type:"font/ttf",etag:'"c888-QTqz3D/DpXUidbriyuZ+tY8rMvA"',mtime:"2025-03-12T06:02:42.385Z",size:51336,path:"../public/assets/KaTeX_Main-Bold-waoOVXN0.ttf"},"/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2":{type:"font/woff2",etag:'"418c-pKSQW4sSb5/9VT0hpyoMJOlIA0U"',mtime:"2025-03-12T06:02:42.386Z",size:16780,path:"../public/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2"},"/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf":{type:"font/ttf",etag:'"80c8-umRk5EL9UK73Z4kkug8tlYHruwc"',mtime:"2025-03-12T06:02:42.386Z",size:32968,path:"../public/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf"},"/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff":{type:"font/woff",etag:'"4bd4-A4u9yIh6lzCtlBR/xXxv9N+0hBE"',mtime:"2025-03-12T06:02:42.386Z",size:19412,path:"../public/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff"},"/assets/KaTeX_Main-Italic-3WenGoN9.ttf":{type:"font/ttf",etag:'"832c-HVZoorlK59vu/dfNaNmP6dWCXgc"',mtime:"2025-03-12T06:02:42.386Z",size:33580,path:"../public/assets/KaTeX_Main-Italic-3WenGoN9.ttf"},"/assets/KaTeX_Main-Italic-BMLOBm91.woff":{type:"font/woff",etag:'"4cdc-fIWJITvHAD4sIzS1HKQVKFiYer0"',mtime:"2025-03-12T06:02:42.386Z",size:19676,path:"../public/assets/KaTeX_Main-Italic-BMLOBm91.woff"},"/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2":{type:"font/woff2",etag:'"425c-ybK1/9LyeqXGtvm6QaeytOZhAtM"',mtime:"2025-03-12T06:02:42.386Z",size:16988,path:"../public/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2"},"/assets/KaTeX_Main-Regular-B22Nviop.woff2":{type:"font/woff2",etag:'"66a0-yIQIbCXOyFWBYLICb5Bu99o1cKw"',mtime:"2025-03-12T06:02:42.386Z",size:26272,path:"../public/assets/KaTeX_Main-Regular-B22Nviop.woff2"},"/assets/KaTeX_Main-Regular-Dr94JaBh.woff":{type:"font/woff",etag:'"7834-/crlS6HUY17oWlRizByX5SHP1RU"',mtime:"2025-03-12T06:02:42.386Z",size:30772,path:"../public/assets/KaTeX_Main-Regular-Dr94JaBh.woff"},"/assets/KaTeX_Main-Regular-ypZvNtVU.ttf":{type:"font/ttf",etag:'"d14c-h0TbbvjDCePchfG76YBSCti3v9Q"',mtime:"2025-03-12T06:02:42.387Z",size:53580,path:"../public/assets/KaTeX_Main-Regular-ypZvNtVU.ttf"},"/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf":{type:"font/ttf",etag:'"79dc-6AzEwjLSB192KlLUa+tP+9N6Xxo"',mtime:"2025-03-12T06:02:42.387Z",size:31196,path:"../public/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf"},"/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2":{type:"font/woff2",etag:'"4010-j8udLeZaxxoMT92YYXPbcwWS7Yo"',mtime:"2025-03-12T06:02:42.387Z",size:16400,path:"../public/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2"},"/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff":{type:"font/woff",etag:'"48ec-1U5kgNbUBGxqVhmqODuqWXH7igw"',mtime:"2025-03-12T06:02:42.387Z",size:18668,path:"../public/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff"},"/assets/KaTeX_Math-Italic-DA0__PXp.woff":{type:"font/woff",etag:'"493c-HBtIc54ctL4T3djAvCed3oUb26A"',mtime:"2025-03-12T06:02:42.387Z",size:18748,path:"../public/assets/KaTeX_Math-Italic-DA0__PXp.woff"},"/assets/KaTeX_Math-Italic-flOr_0UB.ttf":{type:"font/ttf",etag:'"7a4c-npoQ2Ppa2Iyez6SQKt3U2SWAsrw"',mtime:"2025-03-12T06:02:42.393Z",size:31308,path:"../public/assets/KaTeX_Math-Italic-flOr_0UB.ttf"},"/assets/KaTeX_Math-Italic-t53AETM-.woff2":{type:"font/woff2",etag:'"4038-20iD0M/5XstcA0EOMoOnN8Ue1gQ"',mtime:"2025-03-12T06:02:42.387Z",size:16440,path:"../public/assets/KaTeX_Math-Italic-t53AETM-.woff2"},"/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf":{type:"font/ttf",etag:'"5fb8-ILRfU0a2htUsRFdFOT0XB7uI7B0"',mtime:"2025-03-12T06:02:42.387Z",size:24504,path:"../public/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf"},"/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2":{type:"font/woff2",etag:'"2fb8-iG5heXpSXUqvzgqvV0FP366huHM"',mtime:"2025-03-12T06:02:42.387Z",size:12216,path:"../public/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2"},"/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff":{type:"font/woff",etag:'"3848-or7dyKPU0IAo1wd3btvU0k8uwPw"',mtime:"2025-03-12T06:02:42.387Z",size:14408,path:"../public/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff"},"/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2":{type:"font/woff2",etag:'"2efc-PV+jyzCfjYO03L3SdyXycPYPPus"',mtime:"2025-03-12T06:02:42.387Z",size:12028,path:"../public/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2"},"/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff":{type:"font/woff",etag:'"3720-dWSjZrdv2DcEHCS+70xVgKWt1A4"',mtime:"2025-03-12T06:02:42.387Z",size:14112,path:"../public/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff"},"/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf":{type:"font/ttf",etag:'"575c-mR+9wDFouxSkRHz6PlFfCabs/tw"',mtime:"2025-03-12T06:02:42.388Z",size:22364,path:"../public/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf"},"/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf":{type:"font/ttf",etag:'"4bec-So4XoMtYqCKN1EF/vRuJnkHasEU"',mtime:"2025-03-12T06:02:42.388Z",size:19436,path:"../public/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf"},"/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff":{type:"font/woff",etag:'"301c-gEYQ9MsuLq2WlLjaLshOzo0Jw40"',mtime:"2025-03-12T06:02:42.388Z",size:12316,path:"../public/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff"},"/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2":{type:"font/woff2",etag:'"2868-5F1fT0p/L/PcqfzMLxSOeB4j8pI"',mtime:"2025-03-12T06:02:42.388Z",size:10344,path:"../public/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2"},"/assets/KaTeX_Script-Regular-C5JkGWo-.ttf":{type:"font/ttf",etag:'"4108-xvZ12oGtKcvySyz3cPeVtNosZI4"',mtime:"2025-03-12T06:02:42.388Z",size:16648,path:"../public/assets/KaTeX_Script-Regular-C5JkGWo-.ttf"},"/assets/KaTeX_Script-Regular-D3wIWfF6.woff2":{type:"font/woff2",etag:'"25ac-Y7gJWfH8Voma4hugy7zTmmywg5A"',mtime:"2025-03-12T06:02:42.388Z",size:9644,path:"../public/assets/KaTeX_Script-Regular-D3wIWfF6.woff2"},"/assets/KaTeX_Script-Regular-D5yQViql.woff":{type:"font/woff",etag:'"295c-agXNyk8fcIXmB9w4vt71V1P4b9g"',mtime:"2025-03-12T06:02:42.388Z",size:10588,path:"../public/assets/KaTeX_Script-Regular-D5yQViql.woff"},"/assets/KaTeX_Size1-Regular-C195tn64.woff":{type:"font/woff",etag:'"1960-rv5mdKVlM2J8c5zXiWOY8USH4Bw"',mtime:"2025-03-12T06:02:42.388Z",size:6496,path:"../public/assets/KaTeX_Size1-Regular-C195tn64.woff"},"/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf":{type:"font/ttf",etag:'"2fc4-MoC6y8sSRZcf4BAXtHTHbDN8EMk"',mtime:"2025-03-12T06:02:42.388Z",size:12228,path:"../public/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf"},"/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2":{type:"font/woff2",etag:'"155c-V/pZmXShvAs31fDlzIYCMC8CtXM"',mtime:"2025-03-12T06:02:42.388Z",size:5468,path:"../public/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2"},"/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf":{type:"font/ttf",etag:'"2cf4-+vc/8+eVGE5UMWZv+v64qg4og00"',mtime:"2025-03-12T06:02:42.388Z",size:11508,path:"../public/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf"},"/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2":{type:"font/woff2",etag:'"1458-7hhxNjSjvoyZcnaAhVKrGVpZj0M"',mtime:"2025-03-12T06:02:42.388Z",size:5208,path:"../public/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2"},"/assets/KaTeX_Size2-Regular-oD1tc_U0.woff":{type:"font/woff",etag:'"182c-RmmP8YGb0ngm/V0txLpOH2PKzfQ"',mtime:"2025-03-12T06:02:42.389Z",size:6188,path:"../public/assets/KaTeX_Size2-Regular-oD1tc_U0.woff"},"/assets/KaTeX_Size3-Regular-CTq5MqoE.woff":{type:"font/woff",etag:'"1144-HaGQWm0dm8q5KwWd9ytSjepwi8s"',mtime:"2025-03-12T06:02:42.389Z",size:4420,path:"../public/assets/KaTeX_Size3-Regular-CTq5MqoE.woff"},"/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf":{type:"font/ttf",etag:'"1da4-MCphsuzfgtOeZ4D0K9B+5M5nuNU"',mtime:"2025-03-12T06:02:42.389Z",size:7588,path:"../public/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf"},"/assets/KaTeX_Size4-Regular-BF-4gkZK.woff":{type:"font/woff",etag:'"175c-j93bg1E+wiYjHr7gUHnsRfwBNXg"',mtime:"2025-03-12T06:02:42.389Z",size:5980,path:"../public/assets/KaTeX_Size4-Regular-BF-4gkZK.woff"},"/assets/KaTeX_Size4-Regular-DWFBv043.ttf":{type:"font/ttf",etag:'"287c-PY2d1YoDt6RtSX9XYeYNi4RKUZk"',mtime:"2025-03-12T06:02:42.389Z",size:10364,path:"../public/assets/KaTeX_Size4-Regular-DWFBv043.ttf"},"/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2":{type:"font/woff2",etag:'"1340-m+0X+5LyZQUB4imGLEDGQH4cVSg"',mtime:"2025-03-12T06:02:42.389Z",size:4928,path:"../public/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2"},"/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff":{type:"font/woff",etag:'"3e9c-9ecp+k/0ZvwH4MerGXmtcMRfpdU"',mtime:"2025-03-12T06:02:42.389Z",size:16028,path:"../public/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff"},"/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2":{type:"font/woff2",etag:'"3500-egiIP//GlYxxzAGnWguZzKPktHU"',mtime:"2025-03-12T06:02:42.389Z",size:13568,path:"../public/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2"},"/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf":{type:"font/ttf",etag:'"6ba4-YpuZ+vGNl1KfIaGxAYCT5gvNBY8"',mtime:"2025-03-12T06:02:42.390Z",size:27556,path:"../public/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf"},"/assets/about-D4hEieAK.js":{type:"text/javascript; charset=utf-8",etag:'"37e-sDBCJMdJgHU2y3R8eG8i7Mtuze0"',mtime:"2025-03-12T06:02:42.390Z",size:894,path:"../public/assets/about-D4hEieAK.js"},"/assets/app-_ksMLlTy.js":{type:"text/javascript; charset=utf-8",etag:'"1a-F1ebt5luQF+ilw3nh0acHjD0L2E"',mtime:"2025-03-12T06:02:42.389Z",size:26,path:"../public/assets/app-_ksMLlTy.js"},"/assets/assets-t-logo-CxwPZnhN.png":{type:"image/png",etag:'"146c-vbv340mQ6WdpZBtCqwFRw74KQuc"',mtime:"2025-03-12T06:02:42.389Z",size:5228,path:"../public/assets/assets-t-logo-CxwPZnhN.png"},"/assets/avatar.vue_vue_type_script_setup_true_lang-jav6E5Ln.js":{type:"text/javascript; charset=utf-8",etag:'"440-Moq3TP1IN+wubx/ykd6mB2BoxEU"',mtime:"2025-03-12T06:02:42.392Z",size:1088,path:"../public/assets/avatar.vue_vue_type_script_setup_true_lang-jav6E5Ln.js"},"/assets/bezier-easing-7-TbLOHs.js":{type:"text/javascript; charset=utf-8",etag:'"3ea-pHE/xelcSgzrVsNtgBk+OqH+Xj4"',mtime:"2025-03-12T06:02:42.390Z",size:1002,path:"../public/assets/bezier-easing-7-TbLOHs.js"},"/assets/changelog-CmzmwycZ.js":{type:"text/javascript; charset=utf-8",etag:'"386-NGHI9iQV79UEVQk5pk3qbVXaGGc"',mtime:"2025-03-12T06:02:42.390Z",size:902,path:"../public/assets/changelog-CmzmwycZ.js"},"/assets/chat-BW5Qhkmv.js":{type:"text/javascript; charset=utf-8",etag:'"a59d-Rv0GSXhwd55jZVG8c1piUVAYPd0"',mtime:"2025-03-12T06:02:42.390Z",size:42397,path:"../public/assets/chat-BW5Qhkmv.js"},"/assets/chat-Cg_gpPLS.css":{type:"text/css; charset=utf-8",etag:'"2c8-m/xtY2/Rayw0YtUqtAP/B3y7mKI"',mtime:"2025-03-12T06:02:42.390Z",size:712,path:"../public/assets/chat-Cg_gpPLS.css"},"/assets/chroma-js-C-7CTB41.js":{type:"text/javascript; charset=utf-8",etag:'"a4e8-BKSC/g+/lzzx+QBliVb61lyiqq0"',mtime:"2025-03-12T06:02:42.390Z",size:42216,path:"../public/assets/chroma-js-C-7CTB41.js"},"/assets/content-CMwtYO4S.js":{type:"text/javascript; charset=utf-8",etag:'"3302-r+S4NjrCc8FCex4Xv2O2ZR5wkS0"',mtime:"2025-03-12T06:02:42.390Z",size:13058,path:"../public/assets/content-CMwtYO4S.js"},"/assets/content-CXerDfC_.css":{type:"text/css; charset=utf-8",etag:'"cb-1a+zqFn+hrqgGCN6Yif45aPXz90"',mtime:"2025-03-12T06:02:42.390Z",size:203,path:"../public/assets/content-CXerDfC_.css"},"/assets/core-js-pure-ZQ_YVJtv.js":{type:"text/javascript; charset=utf-8",etag:'"dec5-SA29E6fuprNV7OZq/tNr3STPP3Y"',mtime:"2025-03-12T06:02:42.391Z",size:57029,path:"../public/assets/core-js-pure-ZQ_YVJtv.js"},"/assets/cose-base-kQthUiMK.js":{type:"text/javascript; charset=utf-8",etag:'"4d11-UT667dn6bngYS8t0/u8gyfXlRNg"',mtime:"2025-03-12T06:02:42.391Z",size:19729,path:"../public/assets/cose-base-kQthUiMK.js"},"/assets/cytoscape-D84qPEQv.js":{type:"text/javascript; charset=utf-8",etag:'"6aceb-twNoBNmdF1VRBrOy3FSAzpskH50"',mtime:"2025-03-12T06:02:42.391Z",size:437483,path:"../public/assets/cytoscape-D84qPEQv.js"},"/assets/cytoscape-cose-bilkent-CoOmxuE9.js":{type:"text/javascript; charset=utf-8",etag:'"1e01-+ynP4kmVP6qIQ4YrSjV1/OLlaxc"',mtime:"2025-03-12T06:02:42.391Z",size:7681,path:"../public/assets/cytoscape-cose-bilkent-CoOmxuE9.js"},"/assets/d3-BW2GlWy8.js":{type:"text/javascript; charset=utf-8",etag:'"43-ZxqrbLk8FxHOK3GAVGBLaB9Ogso"',mtime:"2025-03-12T06:02:42.391Z",size:67,path:"../public/assets/d3-BW2GlWy8.js"},"/assets/d3-array-B0evfIyH.js":{type:"text/javascript; charset=utf-8",etag:'"7c1-lh6nd7cnYPm4Z/Jc03/2yAvj/Q8"',mtime:"2025-03-12T06:02:42.391Z",size:1985,path:"../public/assets/d3-array-B0evfIyH.js"},"/assets/d3-axis-pCwzqJ1S.js":{type:"text/javascript; charset=utf-8",etag:'"a79-FCk1dt/st3l2+muUJKrURh1ezMQ"',mtime:"2025-03-12T06:02:42.391Z",size:2681,path:"../public/assets/d3-axis-pCwzqJ1S.js"},"/assets/d3-brush-CAg10rWz.js":{type:"text/javascript; charset=utf-8",etag:'"25-WEegomVt8cuqScRFVAKG+JZEyho"',mtime:"2025-03-12T06:02:42.391Z",size:37,path:"../public/assets/d3-brush-CAg10rWz.js"},"/assets/d3-chord-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.392Z",size:1,path:"../public/assets/d3-chord-l0sNRNKZ.js"},"/assets/d3-color-D5ULnJIe.js":{type:"text/javascript; charset=utf-8",etag:'"23d9-9TMj/QP5dJtBT9As692nhYTIsZQ"',mtime:"2025-03-12T06:02:42.392Z",size:9177,path:"../public/assets/d3-color-D5ULnJIe.js"},"/assets/d3-contour-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.392Z",size:1,path:"../public/assets/d3-contour-l0sNRNKZ.js"},"/assets/d3-delaunay-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.392Z",size:1,path:"../public/assets/d3-delaunay-l0sNRNKZ.js"},"/assets/d3-dispatch-Chq_f_hl.js":{type:"text/javascript; charset=utf-8",etag:'"5ee-F7Y5WoYj59TMjfuZNv+jI2mpRbs"',mtime:"2025-03-12T06:02:42.392Z",size:1518,path:"../public/assets/d3-dispatch-Chq_f_hl.js"},"/assets/d3-drag-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.392Z",size:1,path:"../public/assets/d3-drag-l0sNRNKZ.js"},"/assets/d3-dsv-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.392Z",size:1,path:"../public/assets/d3-dsv-l0sNRNKZ.js"},"/assets/d3-ease-Cx6bG2vu.js":{type:"text/javascript; charset=utf-8",etag:'"45-VSWuH+b+NX8BgT3wmUO1g6B+Sf0"',mtime:"2025-03-12T06:02:42.392Z",size:69,path:"../public/assets/d3-ease-Cx6bG2vu.js"},"/assets/d3-fetch-XwboCDHR.js":{type:"text/javascript; charset=utf-8",etag:'"e3-prUwJVQ8U8YKc1tkPn7FeWtV+Kc"',mtime:"2025-03-12T06:02:42.392Z",size:227,path:"../public/assets/d3-fetch-XwboCDHR.js"},"/assets/d3-force-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.392Z",size:1,path:"../public/assets/d3-force-l0sNRNKZ.js"},"/assets/d3-format-C0lSXcPg.js":{type:"text/javascript; charset=utf-8",etag:'"1257-qKkScJcj4Fl1NtigmeM93+tlHLk"',mtime:"2025-03-12T06:02:42.392Z",size:4695,path:"../public/assets/d3-format-C0lSXcPg.js"},"/assets/d3-geo-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.393Z",size:1,path:"../public/assets/d3-geo-l0sNRNKZ.js"},"/assets/d3-hierarchy-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.393Z",size:1,path:"../public/assets/d3-hierarchy-l0sNRNKZ.js"},"/assets/d3-interpolate-Ct9kki6l.js":{type:"text/javascript; charset=utf-8",etag:'"10f8-ifxeguZgXlAAUCPyA9oa40V8LGk"',mtime:"2025-03-12T06:02:42.393Z",size:4344,path:"../public/assets/d3-interpolate-Ct9kki6l.js"},"/assets/d3-path-QSrLXsQ3.js":{type:"text/javascript; charset=utf-8",etag:'"804-y1a+1saOIZNeasBFa5tQrRqTySQ"',mtime:"2025-03-12T06:02:42.393Z",size:2052,path:"../public/assets/d3-path-QSrLXsQ3.js"},"/assets/d3-polygon-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.393Z",size:1,path:"../public/assets/d3-polygon-l0sNRNKZ.js"},"/assets/d3-quadtree-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.393Z",size:1,path:"../public/assets/d3-quadtree-l0sNRNKZ.js"},"/assets/d3-random-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.393Z",size:1,path:"../public/assets/d3-random-l0sNRNKZ.js"},"/assets/d3-scale-CjTvl_Qo.js":{type:"text/javascript; charset=utf-8",etag:'"11d8-kyXJzNNfgKHeAfH+qjnpYm197vE"',mtime:"2025-03-12T06:02:42.393Z",size:4568,path:"../public/assets/d3-scale-CjTvl_Qo.js"},"/assets/d3-scale-chromatic-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.393Z",size:1,path:"../public/assets/d3-scale-chromatic-l0sNRNKZ.js"},"/assets/d3-selection-G65jBFUY.js":{type:"text/javascript; charset=utf-8",etag:'"2f15-eEvtPZsFKx7JXdBMJ55bOpTcfAw"',mtime:"2025-03-12T06:02:42.393Z",size:12053,path:"../public/assets/d3-selection-G65jBFUY.js"},"/assets/d3-shape-C1TbtrGg.js":{type:"text/javascript; charset=utf-8",etag:'"5261-9tBH29zF9ZExRfaKO7bHMqFDFuQ"',mtime:"2025-03-12T06:02:42.394Z",size:21089,path:"../public/assets/d3-shape-C1TbtrGg.js"},"/assets/d3-time-CebKitJR.js":{type:"text/javascript; charset=utf-8",etag:'"1222-3pkot1fWhqHWZMa2qSs3BkF9lL0"',mtime:"2025-03-12T06:02:42.394Z",size:4642,path:"../public/assets/d3-time-CebKitJR.js"},"/assets/d3-time-format-D74OpZq4.js":{type:"text/javascript; charset=utf-8",etag:'"2292-O21RYzliBtwhUPxv0FWchRbHKuc"',mtime:"2025-03-12T06:02:42.393Z",size:8850,path:"../public/assets/d3-time-format-D74OpZq4.js"},"/assets/d3-timer-keMr1twq.js":{type:"text/javascript; charset=utf-8",etag:'"537-WnI8bA05aAnVcNPRJEZjZkmy08Y"',mtime:"2025-03-12T06:02:42.394Z",size:1335,path:"../public/assets/d3-timer-keMr1twq.js"},"/assets/d3-transition-swcnLnsT.js":{type:"text/javascript; charset=utf-8",etag:'"2aaf-q7TE85J+4pZAQUA2T4b6TZz5IDg"',mtime:"2025-03-12T06:02:42.394Z",size:10927,path:"../public/assets/d3-transition-swcnLnsT.js"},"/assets/d3-zoom-D4Vc87xO.js":{type:"text/javascript; charset=utf-8",etag:'"361-uR4XFeeODwXI4cGDTE0Kqu2LjTs"',mtime:"2025-03-12T06:02:42.394Z",size:865,path:"../public/assets/d3-zoom-D4Vc87xO.js"},"/assets/dagre-d3-es-FtH4B9px.js":{type:"text/javascript; charset=utf-8",etag:'"a4aa-AcKlUACb9MwJu8Y6Z5ucF2t06bA"',mtime:"2025-03-12T06:02:42.394Z",size:42154,path:"../public/assets/dagre-d3-es-FtH4B9px.js"},"/assets/dayjs-DOPU4UI6.js":{type:"text/javascript; charset=utf-8",etag:'"30c7-yIc2o8GypKflPbUp+Uk5+2o/1S0"',mtime:"2025-03-12T06:02:42.394Z",size:12487,path:"../public/assets/dayjs-DOPU4UI6.js"},"/assets/deep-pick-omit-DP_A4OSP.js":{type:"text/javascript; charset=utf-8",etag:'"466-wFXV9OVC9OUGEpNVO9d8tzbfJLU"',mtime:"2025-03-12T06:02:42.394Z",size:1126,path:"../public/assets/deep-pick-omit-DP_A4OSP.js"},"/assets/delaunator-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.396Z",size:1,path:"../public/assets/delaunator-l0sNRNKZ.js"},"/assets/destr-ClW9AvhW.js":{type:"text/javascript; charset=utf-8",etag:'"4b4-8lJ1jag+LQf5/nWIUeOkVDYVj7k"',mtime:"2025-03-12T06:02:42.394Z",size:1204,path:"../public/assets/destr-ClW9AvhW.js"},"/assets/dompurify-B5jhUdWW.js":{type:"text/javascript; charset=utf-8",etag:'"56f0-MmX4JF7TA2APkAmPt8f2XSj9ZMM"',mtime:"2025-03-12T06:02:42.395Z",size:22256,path:"../public/assets/dompurify-B5jhUdWW.js"},"/assets/elkjs-CmFeGg_o.js":{type:"text/javascript; charset=utf-8",etag:'"1569d8-YXvQUOJhlMHyVhODApdOwfT74HQ"',mtime:"2025-03-12T06:02:42.398Z",size:1403352,path:"../public/assets/elkjs-CmFeGg_o.js"},"/assets/entities-D7HTx9ov.js":{type:"text/javascript; charset=utf-8",etag:'"8cae-ASJCRYrcmU+X49L4kRiJyNXyMgM"',mtime:"2025-03-12T06:02:42.394Z",size:36014,path:"../public/assets/entities-D7HTx9ov.js"},"/assets/eventsource-parser-BEY8Dpg-.js":{type:"text/javascript; charset=utf-8",etag:'"78d-1kISaZniRhxEqUKs4j1TXan4FZU"',mtime:"2025-03-12T06:02:42.394Z",size:1933,path:"../public/assets/eventsource-parser-BEY8Dpg-.js"},"/assets/fetch-2coGNStX.js":{type:"text/javascript; charset=utf-8",etag:'"257c-PbKz27+fee3hGDMHoV5hvGGxZU4"',mtime:"2025-03-12T06:02:42.395Z",size:9596,path:"../public/assets/fetch-2coGNStX.js"},"/assets/global-BveI--BU.js":{type:"text/javascript; charset=utf-8",etag:'"1ae39-TrfQEd1RSvey1xsE+ryDgZHhzU0"',mtime:"2025-03-12T06:02:42.395Z",size:110137,path:"../public/assets/global-BveI--BU.js"},"/assets/help-Dm0-B9za.js":{type:"text/javascript; charset=utf-8",etag:'"435-PYVFPJdukEJhlFkl5rLHePxD3NQ"',mtime:"2025-03-12T06:02:42.395Z",size:1077,path:"../public/assets/help-Dm0-B9za.js"},"/assets/highlight.js-Ds8M-WS2.js":{type:"text/javascript; charset=utf-8",etag:'"f87c0-T8SPkmJkl3ZnLOQ3EHBhZkgZfjU"',mtime:"2025-03-12T06:02:42.396Z",size:1017792,path:"../public/assets/highlight.js-Ds8M-WS2.js"},"/assets/index-BJf2iObo.js":{type:"text/javascript; charset=utf-8",etag:'"1aa3-b0+pLHMRReziIuYO4zpt9pZhK9o"',mtime:"2025-03-12T06:02:42.396Z",size:6819,path:"../public/assets/index-BJf2iObo.js"},"/assets/index-BPfFXn2Y.js":{type:"text/javascript; charset=utf-8",etag:'"486-dwfkYHB2uaxYs9abUdk+PRJLhnI"',mtime:"2025-03-12T06:02:42.396Z",size:1158,path:"../public/assets/index-BPfFXn2Y.js"},"/assets/index-BSlpP4WW.js":{type:"text/javascript; charset=utf-8",etag:'"5069-nrLUjl+dOXkGmXe8x4fo2cuwuIM"',mtime:"2025-03-12T06:02:42.396Z",size:20585,path:"../public/assets/index-BSlpP4WW.js"},"/assets/index-DJgKQCUj.css":{type:"text/css; charset=utf-8",etag:'"7c6-VIyMBVyHtySdcXK2/QJEujOkiL0"',mtime:"2025-03-12T06:02:42.396Z",size:1990,path:"../public/assets/index-DJgKQCUj.css"},"/assets/index-DUia5xTm.js":{type:"text/javascript; charset=utf-8",etag:'"4d03-2SDAa9mFegEBXOI7lb7VUTnM2tk"',mtime:"2025-03-12T06:02:42.396Z",size:19715,path:"../public/assets/index-DUia5xTm.js"},"/assets/index-DWphMrS1.css":{type:"text/css; charset=utf-8",etag:'"321-j2DbWq2xzTMni/ogD59SBddlPSk"',mtime:"2025-03-12T06:02:42.396Z",size:801,path:"../public/assets/index-DWphMrS1.css"},"/assets/index-Dc0PR0S6.js":{type:"text/javascript; charset=utf-8",etag:'"4c0b-o/U0xZviepGBPevNBlknAz2A32Q"',mtime:"2025-03-12T06:02:42.397Z",size:19467,path:"../public/assets/index-Dc0PR0S6.js"},"/assets/index-LPxgpECk.js":{type:"text/javascript; charset=utf-8",etag:'"8e9-YGaOycVSPqJyI1Y0vSKLD17jVus"',mtime:"2025-03-12T06:02:42.398Z",size:2281,path:"../public/assets/index-LPxgpECk.js"},"/assets/internmap-B8oPgqVZ.js":{type:"text/javascript; charset=utf-8",etag:'"27c-RCk4//XL2PAg7MGLIGsuL5G/iVA"',mtime:"2025-03-12T06:02:42.397Z",size:636,path:"../public/assets/internmap-B8oPgqVZ.js"},"/assets/katex-BY7yyeOs.js":{type:"text/javascript; charset=utf-8",etag:'"48f29-yE+XlPP/x0i46yjVZ04Vycymhxo"',mtime:"2025-03-12T06:02:42.397Z",size:298793,path:"../public/assets/katex-BY7yyeOs.js"},"/assets/khroma-Ca6ZlOUT.js":{type:"text/javascript; charset=utf-8",etag:'"2838-02b9ktMKU0Uxp0K8C5BMb6HcW6c"',mtime:"2025-03-12T06:02:42.397Z",size:10296,path:"../public/assets/khroma-Ca6ZlOUT.js"},"/assets/layout-base-DqRk0Tgc.js":{type:"text/javascript; charset=utf-8",etag:'"c95c-QXvDmtW4EQAldMUKpzDvTr5mAOo"',mtime:"2025-03-12T06:02:42.397Z",size:51548,path:"../public/assets/layout-base-DqRk0Tgc.js"},"/assets/linkify-it-LcVOBuC5.js":{type:"text/javascript; charset=utf-8",etag:'"2506-igm5x3jZkI/ZvzTnBp6IrKPmoBA"',mtime:"2025-03-12T06:02:42.397Z",size:9478,path:"../public/assets/linkify-it-LcVOBuC5.js"},"/assets/lodash-Cky9m9r7.js":{type:"text/javascript; charset=utf-8",etag:'"54bf-tSRlmjFhHAwLSON24PW0fhDSJX4"',mtime:"2025-03-12T06:02:42.397Z",size:21695,path:"../public/assets/lodash-Cky9m9r7.js"},"/assets/lodash-es-BkU_-LF8.js":{type:"text/javascript; charset=utf-8",etag:'"8a6c-8JAJCN+mYv5zz3fbJt43gO8sjUk"',mtime:"2025-03-12T06:02:42.398Z",size:35436,path:"../public/assets/lodash-es-BkU_-LF8.js"},"/assets/lyihub-zLFv36Ly.js":{type:"text/javascript; charset=utf-8",etag:'"69f-YBlH+nb7V6SSmdlgZ/sY0ZlzZi0"',mtime:"2025-03-12T06:02:42.398Z",size:1695,path:"../public/assets/lyihub-zLFv36Ly.js"},"/assets/main-MqSRl-Mr.css":{type:"text/css; charset=utf-8",etag:'"13827-4A7YG+bIz4tBwZ0llBtXRo6HKPA"',mtime:"2025-03-12T06:02:42.398Z",size:79911,path:"../public/assets/main-MqSRl-Mr.css"},"/assets/main-zbluuG_-.js":{type:"text/javascript; charset=utf-8",etag:'"a442-hB0dK5xeS72jo1xW2EAKdN8Xm2A"',mtime:"2025-03-12T06:02:42.398Z",size:42050,path:"../public/assets/main-zbluuG_-.js"},"/assets/mammoth-5Ncu60I4.js":{type:"text/javascript; charset=utf-8",etag:'"7b619-cajaSUiFMtGwRafGgExVWuyUKSE"',mtime:"2025-03-12T06:02:42.399Z",size:505369,path:"../public/assets/mammoth-5Ncu60I4.js"},"/assets/markdown-DPs5ApTw.js":{type:"text/javascript; charset=utf-8",etag:'"b84-seiFyJjhD/KdObFjpZBbWKzx6os"',mtime:"2025-03-12T06:02:42.399Z",size:2948,path:"../public/assets/markdown-DPs5ApTw.js"},"/assets/markdown-it-C8SkdHr7.js":{type:"text/javascript; charset=utf-8",etag:'"cda3-zpScLmZqW/cDrwLrLVUAUYiQoHs"',mtime:"2025-03-12T06:02:42.399Z",size:52643,path:"../public/assets/markdown-it-C8SkdHr7.js"},"/assets/markdown-it-highlightjs-Ikc7oQsB.js":{type:"text/javascript; charset=utf-8",etag:'"f01-+zyDZPKNKLEe2/uFVM6QzoIWnaI"',mtime:"2025-03-12T06:02:42.399Z",size:3841,path:"../public/assets/markdown-it-highlightjs-Ikc7oQsB.js"},"/assets/markdown-it-link-attributes-UnOqz_aA.js":{type:"text/javascript; charset=utf-8",etag:'"2d3-VxM3ssgtJXgKPms7TB/9jPhrvis"',mtime:"2025-03-12T06:02:42.399Z",size:723,path:"../public/assets/markdown-it-link-attributes-UnOqz_aA.js"},"/assets/mdurl-CDXpswLz.js":{type:"text/javascript; charset=utf-8",etag:'"12cf-J5d0Ip4EtRRuSMx8vOSdC2oRS/8"',mtime:"2025-03-12T06:02:42.402Z",size:4815,path:"../public/assets/mdurl-CDXpswLz.js"},"/assets/mermaid-B98QzgAP.js":{type:"text/javascript; charset=utf-8",etag:'"bb1d0-8AIMlnSEfjCmsNXVn6s59nbqZdY"',mtime:"2025-03-12T06:02:42.400Z",size:766416,path:"../public/assets/mermaid-B98QzgAP.js"},"/assets/mitt-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.401Z",size:1,path:"../public/assets/mitt-l0sNRNKZ.js"},"/assets/pdf.worker.min-yatZIOMy.mjs":{type:"text/javascript; charset=utf-8",etag:'"14fe5e-iGC1A5RKrS0JublO5W5Pq4QUymk"',mtime:"2025-03-12T06:02:42.402Z",size:1375838,path:"../public/assets/pdf.worker.min-yatZIOMy.mjs"},"/assets/pdfjs-dist-8WFUNQXM.js":{type:"text/javascript; charset=utf-8",etag:'"58a06-0WybHzP7c1zhxZq4K1wRJpetRUE"',mtime:"2025-03-12T06:02:42.401Z",size:363014,path:"../public/assets/pdfjs-dist-8WFUNQXM.js"},"/assets/pinia-jKJ-xldK.js":{type:"text/javascript; charset=utf-8",etag:'"f70-gW7l/xy9ggie2kSlx69DpowcHbY"',mtime:"2025-03-12T06:02:42.401Z",size:3952,path:"../public/assets/pinia-jKJ-xldK.js"},"/assets/pinia-plugin-persistedstate-DyrI1rJI.js":{type:"text/javascript; charset=utf-8",etag:'"51c-IOUPIS/vvyLw3e9LnNGq2zZMnec"',mtime:"2025-03-12T06:02:42.402Z",size:1308,path:"../public/assets/pinia-plugin-persistedstate-DyrI1rJI.js"},"/assets/popup-CAYf2pdU.css":{type:"text/css; charset=utf-8",etag:'"12f64-gEiNKOoqNatL6ssOkchPPR9hBTo"',mtime:"2025-03-12T06:02:42.402Z",size:77668,path:"../public/assets/popup-CAYf2pdU.css"},"/assets/popup-fiphPf2R.js":{type:"text/javascript; charset=utf-8",etag:'"1934-0YmZVAu841l2uZDTz4MTgNY/+ec"',mtime:"2025-03-12T06:02:42.402Z",size:6452,path:"../public/assets/popup-fiphPf2R.js"},"/assets/prismjs-BGP89_QJ.js":{type:"text/javascript; charset=utf-8",etag:'"974c-5NTdgqY2Tdo90Z0ULHQzt6mHGNc"',mtime:"2025-03-12T06:02:42.402Z",size:38732,path:"../public/assets/prismjs-BGP89_QJ.js"},"/assets/punycode.js-Bmr3cAX8.js":{type:"text/javascript; charset=utf-8",etag:'"a7a-RevZlCPWj1eXNcvfzcrSkpPYyuI"',mtime:"2025-03-12T06:02:42.403Z",size:2682,path:"../public/assets/punycode.js-Bmr3cAX8.js"},"/assets/robust-predicates-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.403Z",size:1,path:"../public/assets/robust-predicates-l0sNRNKZ.js"},"/assets/sambanova-35TLgnML.webp":{type:"image/webp",etag:'"415c-sMenaeQGBb9K2dKKno4v8gu8CQg"',mtime:"2025-03-12T06:02:42.403Z",size:16732,path:"../public/assets/sambanova-35TLgnML.webp"},"/assets/scraper.worker-C5ikRwpu.js":{type:"text/javascript; charset=utf-8",etag:'"268-Onu+45h7Y6Bc+D4LCl5TM9ow9wE"',mtime:"2025-03-12T06:02:42.403Z",size:616,path:"../public/assets/scraper.worker-C5ikRwpu.js"},"/assets/sortablejs-DGtSoqI-.js":{type:"text/javascript; charset=utf-8",etag:'"91fb-Wnf2wx603CaDXVaZ0wcbhkJbip0"',mtime:"2025-03-12T06:02:42.403Z",size:37371,path:"../public/assets/sortablejs-DGtSoqI-.js"},"/assets/stylis-Cl7w7uv3.js":{type:"text/javascript; charset=utf-8",etag:'"1010-9iehLy9lKGajUZMFLPzb9lFBWH0"',mtime:"2025-03-12T06:02:42.403Z",size:4112,path:"../public/assets/stylis-Cl7w7uv3.js"},"/assets/tdesign-icons-vue-next-BGgy7GQY.css":{type:"text/css; charset=utf-8",etag:'"17f-FqFjP97SFRNBmlj13OeywzL2DCU"',mtime:"2025-03-12T06:02:42.404Z",size:383,path:"../public/assets/tdesign-icons-vue-next-BGgy7GQY.css"},"/assets/tdesign-icons-vue-next-Dn30dVUK.js":{type:"text/javascript; charset=utf-8",etag:'"161b1-K/VF7BzQyen6eeTxOP1NHVbJy24"',mtime:"2025-03-12T06:02:42.404Z",size:90545,path:"../public/assets/tdesign-icons-vue-next-Dn30dVUK.js"},"/assets/tdesign-vue-next-C9LLy99s.css":{type:"text/css; charset=utf-8",etag:'"68195-8St2oS/UGV3gyhtNDTSTZzejtvw"',mtime:"2025-03-12T06:02:42.404Z",size:426389,path:"../public/assets/tdesign-vue-next-C9LLy99s.css"},"/assets/tdesign-vue-next-DsCOKp3d.js":{type:"text/javascript; charset=utf-8",etag:'"9a039-8ZvPTatO67ErlWVuHRpOLfKR8pE"',mtime:"2025-03-12T06:02:42.406Z",size:630841,path:"../public/assets/tdesign-vue-next-DsCOKp3d.js"},"/assets/ts-dedent-CttZBlkd.js":{type:"text/javascript; charset=utf-8",etag:'"310-K/ipHYQTgvDUEOcQGwOf0IHACMc"',mtime:"2025-03-12T06:02:42.405Z",size:784,path:"../public/assets/ts-dedent-CttZBlkd.js"},"/assets/tvision-color-Dyv1XgcL.js":{type:"text/javascript; charset=utf-8",etag:'"49d1-wmlHjAlQK5c5vUotbIzdAgrJtPg"',mtime:"2025-03-12T06:02:42.405Z",size:18897,path:"../public/assets/tvision-color-Dyv1XgcL.js"},"/assets/ua-parser-js-9pz7LJLQ.js":{type:"text/javascript; charset=utf-8",etag:'"5472-2XuMJfUpTGwaa3pGGmtV7TV1qik"',mtime:"2025-03-12T06:02:42.405Z",size:21618,path:"../public/assets/ua-parser-js-9pz7LJLQ.js"},"/assets/uc.micro-CLkLCS2f.js":{type:"text/javascript; charset=utf-8",etag:'"144d-0zVa29qj407Bu05HPuwvHgQ4+8c"',mtime:"2025-03-12T06:02:42.405Z",size:5197,path:"../public/assets/uc.micro-CLkLCS2f.js"},"/assets/uuid-_R2nDvl_.js":{type:"text/javascript; charset=utf-8",etag:'"3a1-Em826+EaiFJxMLWvplFS7Y7rsAM"',mtime:"2025-03-12T06:02:42.406Z",size:929,path:"../public/assets/uuid-_R2nDvl_.js"},"/assets/vue-DVRmszIO.js":{type:"text/javascript; charset=utf-8",etag:'"3d3-aUKPsYlHPaFdiXk4vJu/t9PkdvU"',mtime:"2025-03-12T06:02:42.406Z",size:979,path:"../public/assets/vue-DVRmszIO.js"},"/assets/vue-demi-l0sNRNKZ.js":{type:"text/javascript; charset=utf-8",etag:'"1-rcg7GeeTSRscbqD9i0bNnzLlkvw"',mtime:"2025-03-12T06:02:42.406Z",size:1,path:"../public/assets/vue-demi-l0sNRNKZ.js"},"/assets/vue-i18n-Dmk40Gks.js":{type:"text/javascript; charset=utf-8",etag:'"54cc-Cl4bSXS3PS2gqDOpPa2JP4Zf/EI"',mtime:"2025-03-12T06:02:42.406Z",size:21708,path:"../public/assets/vue-i18n-Dmk40Gks.js"},"/assets/vue-router-Be5-2oBH.js":{type:"text/javascript; charset=utf-8",etag:'"6a11-hn3a/ObFmfkc/JFSIDmNXt3009I"',mtime:"2025-03-12T06:02:42.407Z",size:27153,path:"../public/assets/vue-router-Be5-2oBH.js"},"/assets/vuedraggable-K5Gqz8r2.js":{type:"text/javascript; charset=utf-8",etag:'"18985-Nv4moCFL7Orr64eynuDyBTSzazE"',mtime:"2025-03-12T06:02:42.407Z",size:100741,path:"../public/assets/vuedraggable-K5Gqz8r2.js"},"/assets/xlsx-DB6BMndo.js":{type:"text/javascript; charset=utf-8",etag:'"6044e-9tu+0UThAPzrLx9iSXWZ+kfemGA"',mtime:"2025-03-12T06:02:42.407Z",size:394318,path:"../public/assets/xlsx-DB6BMndo.js"},"/swagger/LICENSE":{type:"text/plain; charset=utf-8",etag:'"2c5e-K4uBUimqimHkg/tLoFiLi2xJGJA"',mtime:"2025-03-12T06:02:42.378Z",size:11358,path:"../public/swagger/LICENSE"},"/swagger/NOTICE":{type:"text/plain; charset=utf-8",etag:'"37-0n8Fhwk9uv718DEoBFAYAHxrqZ8"',mtime:"2025-03-12T06:02:42.407Z",size:55,path:"../public/swagger/NOTICE"},"/swagger/README.md":{type:"text/markdown; charset=utf-8",etag:'"6be-eQ4mvDl95ct54H1v8dasMT5BJwQ"',mtime:"2025-03-12T06:02:42.408Z",size:1726,path:"../public/swagger/README.md"},"/swagger/absolute-path.js":{type:"text/javascript; charset=utf-8",etag:'"212-J+QveHG7rDiOFdNzZCZDqcDOK+M"',mtime:"2025-03-12T06:02:42.408Z",size:530,path:"../public/swagger/absolute-path.js"},"/swagger/favicon-16x16.png":{type:"image/png",etag:'"299-P/Ck0KVN5edEo4I0mCIWWmtplO0"',mtime:"2025-03-12T06:02:42.409Z",size:665,path:"../public/swagger/favicon-16x16.png"},"/swagger/favicon-32x32.png":{type:"image/png",etag:'"274-jKULWQGffxfGW3fqT5ChsaRqwLY"',mtime:"2025-03-12T06:02:42.409Z",size:628,path:"../public/swagger/favicon-32x32.png"},"/swagger/index.css":{type:"text/css; charset=utf-8",etag:'"ca-cVhpBjOPaUIKpM8dNJT+6MUz8Ro"',mtime:"2025-03-12T06:02:42.409Z",size:202,path:"../public/swagger/index.css"},"/swagger/index.html":{type:"text/html; charset=utf-8",etag:'"2de-1EOW5JSXowvBRBqUcXZxJSLvf2M"',mtime:"2025-03-12T06:02:42.409Z",size:734,path:"../public/swagger/index.html"},"/swagger/index.js":{type:"text/javascript; charset=utf-8",etag:'"32d-GIZCZQ6FP1cqjHGRuiG/HV4bPls"',mtime:"2025-03-12T06:02:42.410Z",size:813,path:"../public/swagger/index.js"},"/swagger/oauth2-redirect.html":{type:"text/html; charset=utf-8",etag:'"a9b-4dCYXMgAc9mtJO1U4TUJArG0ZRw"',mtime:"2025-03-12T06:02:42.409Z",size:2715,path:"../public/swagger/oauth2-redirect.html"},"/swagger/package.json":{type:"application/json",etag:'"22f-pgoet2ouXTR1MMELLM9UMW0OVUQ"',mtime:"2025-03-12T06:02:42.410Z",size:559,path:"../public/swagger/package.json"},"/swagger/swagger-initializer.js":{type:"text/javascript; charset=utf-8",etag:'"29a-zW3E63PXRtQnB3CBmSCmAsl3emI"',mtime:"2025-03-12T06:02:42.410Z",size:666,path:"../public/swagger/swagger-initializer.js"},"/swagger/swagger-ui-bundle.js":{type:"text/javascript; charset=utf-8",etag:'"165fd4-pYLRc3QLnwTnl7OBjXKk8Xedow8"',mtime:"2025-03-12T06:02:42.415Z",size:1466324,path:"../public/swagger/swagger-ui-bundle.js"},"/swagger/swagger-ui-bundle.js.map":{type:"application/json",etag:'"1d4f6e-EdZwAI/8NHP9DkSgVRmzrlnheWM"',mtime:"2025-03-12T06:02:42.418Z",size:1920878,path:"../public/swagger/swagger-ui-bundle.js.map"},"/swagger/swagger-ui-es-bundle-core.js":{type:"text/javascript; charset=utf-8",etag:'"732f0-8ze7BhcR9BN81cnJ42Po8aECNTc"',mtime:"2025-03-12T06:02:42.412Z",size:471792,path:"../public/swagger/swagger-ui-es-bundle-core.js"},"/swagger/swagger-ui-es-bundle-core.js.map":{type:"application/json",etag:'"189eb6-7jWUWBNcVregNHrTt6Ua2xzMAJs"',mtime:"2025-03-12T06:02:42.417Z",size:1613494,path:"../public/swagger/swagger-ui-es-bundle-core.js.map"},"/swagger/swagger-ui-es-bundle.js":{type:"text/javascript; charset=utf-8",etag:'"165ede-8ItyH4p3gifNtaFKdYO37Rwl+R4"',mtime:"2025-03-12T06:02:42.422Z",size:1466078,path:"../public/swagger/swagger-ui-es-bundle.js"},"/swagger/swagger-ui-es-bundle.js.map":{type:"application/json",etag:'"1d2e65-gxP1cBHxZIolETVmnp6JQCmZz/o"',mtime:"2025-03-12T06:02:42.428Z",size:1912421,path:"../public/swagger/swagger-ui-es-bundle.js.map"},"/swagger/swagger-ui-standalone-preset.js":{type:"text/javascript; charset=utf-8",etag:'"37f67-l61kMpt56I/qm8hhdmzV/7yVnVw"',mtime:"2025-03-12T06:02:42.423Z",size:229223,path:"../public/swagger/swagger-ui-standalone-preset.js"},"/swagger/swagger-ui-standalone-preset.js.map":{type:"application/json",etag:'"50934-V3RjXs1XH6csGCSTQuOjPfev+7U"',mtime:"2025-03-12T06:02:42.424Z",size:330036,path:"../public/swagger/swagger-ui-standalone-preset.js.map"},"/swagger/swagger-ui.css":{type:"text/css; charset=utf-8",etag:'"25d69-gcCiVU2QIynmcXRFWlwruVby+qE"',mtime:"2025-03-12T06:02:42.431Z",size:154985,path:"../public/swagger/swagger-ui.css"},"/swagger/swagger-ui.css.map":{type:"application/json",etag:'"3f31a-cM+Jfbp4KhhTJ6lBw8OgFePuvkk"',mtime:"2025-03-12T06:02:42.426Z",size:258842,path:"../public/swagger/swagger-ui.css.map"},"/swagger/swagger-ui.js":{type:"text/javascript; charset=utf-8",etag:'"55236-VKwJmOdR13bM4UKKqz/8O7u/758"',mtime:"2025-03-12T06:02:42.426Z",size:348726,path:"../public/swagger/swagger-ui.js"},"/swagger/swagger-ui.js.map":{type:"application/json",etag:'"12526b-9N/Azn20bX0am77tLtO0mJAf+js"',mtime:"2025-03-12T06:02:42.432Z",size:1200747,path:"../public/swagger/swagger-ui.js.map"}},Se=/^[A-Za-z]:\//;function normalizeWindowsPath(e=""){return e?e.replace(/\\/g,"/").replace(Se,(e=>e.toUpperCase())):e}const Ce=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,Ze=/^[A-Za-z]:$/;const isAbsolute=function(e){return Ce.test(e)};function readAsset(t){const s=function(e){const t=normalizeWindowsPath(e).replace(/\/$/,"").split("/").slice(0,-1);return 1===t.length&&Ze.test(t[0])&&(t[0]+="/"),t.join("/")||(isAbsolute(e)?"/":".")}(f(globalThis._importMeta_.url));return d.readFile(function(...t){let s="",a=!1;for(let c=(t=t.map((e=>normalizeWindowsPath(e)))).length-1;c>=-1&&!a;c--){const l=c>=0?t[c]:void 0!==e&&"function"==typeof e.cwd?e.cwd().replace(/\\/g,"/"):"/";l&&0!==l.length&&(s=`${l}/${s}`,a=isAbsolute(l))}return s=function(e,t){let s="",a=0,c=-1,l=0,u=null;for(let d=0;d<=e.length;++d){if(d2){const e=s.lastIndexOf("/");-1===e?(s="",a=0):(s=s.slice(0,e),a=s.length-1-s.lastIndexOf("/")),c=d,l=0;continue}if(s.length>0){s="",a=0,c=d,l=0;continue}}t&&(s+=s.length>0?"/..":"..",a=2)}else s.length>0?s+=`/${e.slice(c+1,d)}`:s=e.slice(c+1,d),a=d-c-1;c=d,l=0}else"."===u&&-1!==l?++l:l=-1}return s}(s,!a),a&&!isAbsolute(s)?`/${s}`:s.length>0?s:"."}(s,ke[t].path))}const Be={};function getAsset(e){return ke[e]}const Ae=new Set(["HEAD","GET"]),Ke={gzip:".gz",br:".br"},Ee=pe((e=>{if(e.method&&!Ae.has(e.method))return;let t=decode(withLeadingSlash(withoutTrailingSlash(parseURL(e.path).pathname)).replace(I,"%252F"));let s;const a=[...String(getRequestHeader(e,"accept-encoding")||"").split(",").map((e=>Ke[e.trim()])).filter(Boolean).sort(),""];a.length>1&&function(e,t,s){let a=e.node.res.getHeader(t);a?(Array.isArray(a)||(a=[a.toString()]),e.node.res.setHeader(t,[...a,s])):e.node.res.setHeader(t,s)}(e,"Vary","Accept-Encoding");for(const e of a)for(const a of[t+e,joinURL(t,"index.html"+e)]){const e=getAsset(a);if(e){s=e,t=a;break}}if(!s){if(function(e=""){if(ke[e])return!0;for(const t in Be)if(e.startsWith(t))return!0;return!1}(t))throw function(e,t){e.node.res.removeHeader(t)}(e,"Cache-Control"),createError$1({statusMessage:"Cannot find static asset "+t,statusCode:404});return}if(getRequestHeader(e,"if-none-match")===s.etag)return setResponseStatus(e,304,"Not Modified"),"";const c=getRequestHeader(e,"if-modified-since"),l=new Date(s.mtime);return c&&s.mtime&&new Date(c)>=l?(setResponseStatus(e,304,"Not Modified"),""):(s.type&&!getResponseHeader(e,"Content-Type")&&setResponseHeader(e,"Content-Type",s.type),s.etag&&!getResponseHeader(e,"ETag")&&setResponseHeader(e,"ETag",s.etag),s.mtime&&!getResponseHeader(e,"Last-Modified")&&setResponseHeader(e,"Last-Modified",l.toUTCString()),s.encoding&&!getResponseHeader(e,"Content-Encoding")&&setResponseHeader(e,"Content-Encoding",s.encoding),s.size>0&&!getResponseHeader(e,"Content-Length")&&setResponseHeader(e,"Content-Length",s.size),readAsset(t))})),Ne=[{route:"",handler:Ee,lazy:!1,middleware:!0,method:void 0},{route:"",handler:defineEventHandler((t=>{t.context.cloudflare&&(e.env=t.context.cloudflare.env)})),lazy:!1,middleware:!0,method:void 0},{route:"",handler:defineEventHandler((e=>{if("OPTIONS"===e.node.req.method)return e.node.res.setHeader("Access-Control-Allow-Origin","*"),e.node.res.setHeader("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),e.node.res.setHeader("Access-Control-Allow-Headers","*"),e.node.res.setHeader("Access-Control-Max-Age","86400"),e.node.res.statusCode=204,void e.node.res.end();e.node.res.setHeader("Access-Control-Allow-Origin","*"),e.node.res.setHeader("Access-Control-Expose-Headers","*")})),lazy:!1,middleware:!0,method:void 0},{route:"/api/**",handler:()=>import("../routes/api/_..._.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/app/**",handler:()=>import("../routes/app/_..._.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/cache/clear",handler:()=>import("../routes/cache/clear.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/config",handler:()=>import("../routes/index.get.mjs"),lazy:!0,middleware:!1,method:"get"},{route:"/config",handler:()=>import("../routes/index.post.mjs"),lazy:!0,middleware:!1,method:"post"},{route:"/crawler",handler:()=>import("../routes/crawler.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/cursor/code",handler:()=>import("../routes/cursor/code.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/cursor/token",handler:()=>import("../routes/cursor/token.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/github/code",handler:()=>import("../routes/github/code.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/github/token",handler:()=>import("../routes/github/token.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/google/access_token",handler:()=>import("../routes/google/access_token.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/google/code",handler:()=>import("../routes/google/code.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/health",handler:()=>import("../routes/health.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/openai/**",handler:()=>import("../routes/openai/_..._.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/openapi.json",handler:()=>import("../routes/openapi.json.mjs"),lazy:!0,middleware:!1,method:void 0},{route:"/search",handler:()=>import("../routes/search.mjs"),lazy:!0,middleware:!1,method:void 0}];function asyncCall(e,...t){try{return(s=e(...t))&&"function"==typeof s.then?s:Promise.resolve(s)}catch(e){return Promise.reject(e)}var s}function stringify(e){if(function(e){const t=typeof e;return null===e||"object"!==t&&"function"!==t}(e))return String(e);if(function(e){const t=Object.getPrototypeOf(e);return!t||t.isPrototypeOf(Object)}(e)||Array.isArray(e))return JSON.stringify(e);if("function"==typeof e.toJSON)return stringify(e.toJSON());throw new Error("[unstorage] Cannot stringify value!")}const Ie="base64:";function serializeRaw(e){return"string"==typeof e?e:Ie+function(e){if(globalThis.Buffer)return Buffer.from(e).toString("base64");return globalThis.btoa(String.fromCodePoint(...e))}(e)}function deserializeRaw(e){return"string"!=typeof e?e:e.startsWith(Ie)?function(e){if(globalThis.Buffer)return Buffer.from(e,"base64");return Uint8Array.from(globalThis.atob(e),(e=>e.codePointAt(0)))}(e.slice(7)):e}const Me=["has","hasItem","get","getItem","getItemRaw","set","setItem","setItemRaw","del","remove","removeItem","getMeta","setMeta","removeMeta","getKeys","clear","mount","unmount"];function normalizeKey$2(e){return e&&e.split("?")[0]?.replace(/[/\\]/g,":").replace(/:+/g,":").replace(/^:|:$/g,"")||""}function joinKeys$1(...e){return normalizeKey$2(e.join(":"))}function normalizeBaseKey(e){return(e=normalizeKey$2(e))?e+":":""}const memory=()=>{const e=new Map;return{name:"memory",getInstance:()=>e,hasItem:t=>e.has(t),getItem:t=>e.get(t)??null,getItemRaw:t=>e.get(t)??null,setItem(t,s){e.set(t,s)},setItemRaw(t,s){e.set(t,s)},removeItem(t){e.delete(t)},getKeys:()=>[...e.keys()],clear(){e.clear()},dispose(){e.clear()}}};function createStorage(e={}){const t={mounts:{"":e.driver||memory()},mountpoints:[""],watching:!1,watchListeners:[],unwatch:{}},getMount=e=>{for(const s of t.mountpoints)if(e.startsWith(s))return{base:s,relativeKey:e.slice(s.length),driver:t.mounts[s]};return{base:"",relativeKey:e,driver:t.mounts[""]}},getMounts=(e,s)=>t.mountpoints.filter((t=>t.startsWith(e)||s&&e.startsWith(t))).map((s=>({relativeBase:e.length>s.length?e.slice(s.length):void 0,mountpoint:s,driver:t.mounts[s]}))),onChange=(e,s)=>{if(t.watching){s=normalizeKey$2(s);for(const a of t.watchListeners)a(e,s)}},stopWatch=async()=>{if(t.watching){for(const e in t.unwatch)await t.unwatch[e]();t.unwatch={},t.watching=!1}},runBatch=(e,t,s)=>{const a=new Map,getBatch=e=>{let t=a.get(e.base);return t||(t={driver:e.driver,base:e.base,items:[]},a.set(e.base,t)),t};for(const s of e){const e="string"==typeof s,a=normalizeKey$2(e?s:s.key),c=e?void 0:s.value,l=e||!s.options?t:{...t,...s.options},u=getMount(a);getBatch(u).items.push({key:a,value:c,relativeKey:u.relativeKey,options:l})}return Promise.all([...a.values()].map((e=>s(e)))).then((e=>e.flat()))},s={hasItem(e,t={}){e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e);return asyncCall(a.hasItem,s,t)},getItem(e,t={}){e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e);return asyncCall(a.getItem,s,t).then((e=>destr(e)))},getItems:(e,t={})=>runBatch(e,t,(e=>e.driver.getItems?asyncCall(e.driver.getItems,e.items.map((e=>({key:e.relativeKey,options:e.options}))),t).then((t=>t.map((t=>({key:joinKeys$1(e.base,t.key),value:destr(t.value)}))))):Promise.all(e.items.map((t=>asyncCall(e.driver.getItem,t.relativeKey,t.options).then((e=>({key:t.key,value:destr(e)})))))))),getItemRaw(e,t={}){e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e);return a.getItemRaw?asyncCall(a.getItemRaw,s,t):asyncCall(a.getItem,s,t).then((e=>deserializeRaw(e)))},async setItem(e,t,a={}){if(void 0===t)return s.removeItem(e);e=normalizeKey$2(e);const{relativeKey:c,driver:l}=getMount(e);l.setItem&&(await asyncCall(l.setItem,c,stringify(t),a),l.watch||onChange("update",e))},async setItems(e,t){await runBatch(e,t,(async e=>{if(e.driver.setItems)return asyncCall(e.driver.setItems,e.items.map((e=>({key:e.relativeKey,value:stringify(e.value),options:e.options}))),t);e.driver.setItem&&await Promise.all(e.items.map((t=>asyncCall(e.driver.setItem,t.relativeKey,stringify(t.value),t.options))))}))},async setItemRaw(e,t,a={}){if(void 0===t)return s.removeItem(e,a);e=normalizeKey$2(e);const{relativeKey:c,driver:l}=getMount(e);if(l.setItemRaw)await asyncCall(l.setItemRaw,c,t,a);else{if(!l.setItem)return;await asyncCall(l.setItem,c,serializeRaw(t),a)}l.watch||onChange("update",e)},async removeItem(e,t={}){"boolean"==typeof t&&(t={removeMeta:t}),e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e);a.removeItem&&(await asyncCall(a.removeItem,s,t),(t.removeMeta||t.removeMata)&&await asyncCall(a.removeItem,s+"$",t),a.watch||onChange("remove",e))},async getMeta(e,t={}){"boolean"==typeof t&&(t={nativeOnly:t}),e=normalizeKey$2(e);const{relativeKey:s,driver:a}=getMount(e),c=Object.create(null);if(a.getMeta&&Object.assign(c,await asyncCall(a.getMeta,s,t)),!t.nativeOnly){const e=await asyncCall(a.getItem,s+"$",t).then((e=>destr(e)));e&&"object"==typeof e&&("string"==typeof e.atime&&(e.atime=new Date(e.atime)),"string"==typeof e.mtime&&(e.mtime=new Date(e.mtime)),Object.assign(c,e))}return c},setMeta(e,t,s={}){return this.setItem(e+"$",t,s)},removeMeta(e,t={}){return this.removeItem(e+"$",t)},async getKeys(e,t={}){e=normalizeBaseKey(e);const s=getMounts(e,!0);let a=[];const c=[];let l=!0;for(const e of s){e.driver.flags?.maxDepth||(l=!1);const s=await asyncCall(e.driver.getKeys,e.relativeBase,t);for(const t of s){const s=e.mountpoint+normalizeKey$2(t);a.some((e=>s.startsWith(e)))||c.push(s)}a=[e.mountpoint,...a.filter((t=>!t.startsWith(e.mountpoint)))]}const u=void 0!==t.maxDepth&&!l;return c.filter((s=>(!u||function(e,t){if(void 0===t)return!0;let s=0,a=e.indexOf(":");for(;a>-1;)s++,a=e.indexOf(":",a+1);return s<=t}(s,t.maxDepth))&&function(e,t){return t?e.startsWith(t)&&"$"!==e[e.length-1]:"$"!==e[e.length-1]}(s,e)))},async clear(e,t={}){e=normalizeBaseKey(e),await Promise.all(getMounts(e,!1).map((async e=>{if(e.driver.clear)return asyncCall(e.driver.clear,e.relativeBase,t);if(e.driver.removeItem){const s=await e.driver.getKeys(e.relativeBase||"",t);return Promise.all(s.map((s=>e.driver.removeItem(s,t))))}})))},async dispose(){await Promise.all(Object.values(t.mounts).map((e=>dispose(e))))},watch:async e=>(await(async()=>{if(!t.watching){t.watching=!0;for(const e in t.mounts)t.unwatch[e]=await watch(t.mounts[e],onChange,e)}})(),t.watchListeners.push(e),async()=>{t.watchListeners=t.watchListeners.filter((t=>t!==e)),0===t.watchListeners.length&&await stopWatch()}),async unwatch(){t.watchListeners=[],await stopWatch()},mount(e,a){if((e=normalizeBaseKey(e))&&t.mounts[e])throw new Error(`already mounted at ${e}`);return e&&(t.mountpoints.push(e),t.mountpoints.sort(((e,t)=>t.length-e.length))),t.mounts[e]=a,t.watching&&Promise.resolve(watch(a,onChange,e)).then((s=>{t.unwatch[e]=s})).catch(console.error),s},async unmount(e,s=!0){(e=normalizeBaseKey(e))&&t.mounts[e]&&(t.watching&&e in t.unwatch&&(t.unwatch[e]?.(),delete t.unwatch[e]),s&&await dispose(t.mounts[e]),t.mountpoints=t.mountpoints.filter((t=>t!==e)),delete t.mounts[e])},getMount(e=""){e=normalizeKey$2(e)+":";const t=getMount(e);return{driver:t.driver,base:t.base}},getMounts(e="",t={}){e=normalizeKey$2(e);return getMounts(e,t.parents).map((e=>({driver:e.driver,base:e.mountpoint})))},keys:(e,t={})=>s.getKeys(e,t),get:(e,t={})=>s.getItem(e,t),set:(e,t,a={})=>s.setItem(e,t,a),has:(e,t={})=>s.hasItem(e,t),del:(e,t={})=>s.removeItem(e,t),remove:(e,t={})=>s.removeItem(e,t)};return s}function watch(e,t,s){return e.watch?e.watch(((e,a)=>t(e,s+a))):()=>{}}async function dispose(e){"function"==typeof e.dispose&&await asyncCall(e.dispose)}const He={"server:sha3_wasm_bg.7b9ca65ddd.wasm":{import:()=>import("../raw/sha3_wasm_bg.7b9ca65ddd.mjs").then((e=>e.default||e)),meta:{type:"application/wasm",etag:'"67f4-HA9hIZkJpnMfafDJeYUwPEld3vA"',mtime:"2025-03-12T05:57:46.480Z"}}},normalizeKey$1=function(e){return e&&e.split("?")[0]?.replace(/[/\\]/g,":").replace(/:+/g,":").replace(/^:|:$/g,"")||""},Oe={getKeys:()=>Promise.resolve(Object.keys(He)),hasItem:e=>(e=normalizeKey$1(e),Promise.resolve(e in He)),getItem:e=>(e=normalizeKey$1(e),Promise.resolve(He[e]?He[e].import():null)),getMeta:e=>(e=normalizeKey$1(e),Promise.resolve(He[e]?He[e].meta:{}))};function defineDriver(e){return e}function joinKeys(...e){return e.map((e=>function(e,t=":"){return e?e.replace(/[:/\\]/g,t).replace(/^[:/\\]|[:/\\]$/g,""):""}(e))).filter(Boolean).join(":")}function createError(e,t,s){const a=new Error(`[unstorage] [${e}] ${t}`,s);return Error.captureStackTrace&&Error.captureStackTrace(a,createError),a}function createRequiredError(e,t){return Array.isArray(t)?createError(e,`Missing some of the required options ${t.map((e=>"`"+e+"`")).join(", ")}`):createError(e,`Missing required option \`${t}\`.`)}function ignoreNotfound(e){return"ENOENT"===e.code||"EISDIR"===e.code?null:e}function ignoreExists(e){return"EEXIST"===e.code?null:e}async function writeFile(e,t,s){return await ensuredir(g(e)),d.writeFile(e,t,s)}function readFile(e,t){return d.readFile(e,t).catch(ignoreNotfound)}function readdir(e){return d.readdir(e,{withFileTypes:!0}).catch(ignoreNotfound).then((e=>e||[]))}async function ensuredir(e){h(e)||(await ensuredir(g(e)).catch(ignoreExists),await d.mkdir(e).catch(ignoreExists))}async function readdirRecursive(e,t,s){if(t&&t(e))return[];const a=await readdir(e),c=[];return await Promise.all(a.map((async a=>{const l=m(e,a.name);if(a.isDirectory()){if(void 0===s||s>0){const e=await readdirRecursive(l,t,void 0===s?void 0:s-1);c.push(...e.map((e=>a.name+"/"+e)))}}else t&&t(a.name)||c.push(a.name)}))),c}async function rmRecursive(e){const t=await readdir(e);await Promise.all(t.map((t=>{const s=m(e,t.name);return t.isDirectory()?rmRecursive(s).then((()=>d.rmdir(s))):d.unlink(s)})))}const Pe=/\.\.:|\.\.$/,De="fs-lite",unstorage_47drivers_47fs_45lite=(e={})=>{if(!e.base)throw createRequiredError(De,"base");e.base=m(e.base);const r=t=>{if(Pe.test(t))throw createError(De,`Invalid key: ${JSON.stringify(t)}. It should not contain .. segments`);return v(e.base,t.replace(/:/g,"/"))};return{name:De,options:e,flags:{maxDepth:!0},hasItem:e=>h(r(e)),getItem:e=>readFile(r(e),"utf8"),getItemRaw:e=>readFile(r(e)),async getMeta(e){const{atime:t,mtime:s,size:a,birthtime:c,ctime:l}=await d.stat(r(e)).catch((()=>({})));return{atime:t,mtime:s,size:a,birthtime:c,ctime:l}},setItem(t,s){if(!e.readOnly)return writeFile(r(t),s,"utf8")},setItemRaw(t,s){if(!e.readOnly)return writeFile(r(t),s)},removeItem(t){if(!e.readOnly)return function(e){return d.unlink(e).catch(ignoreNotfound)}(r(t))},getKeys:(t,s)=>readdirRecursive(r("."),e.ignore,s?.maxDepth),async clear(){e.readOnly||e.noClear||await rmRecursive(r("."))}}},qe=createStorage({});function useStorage(e=""){return e?function(e,t){if(!(t=normalizeBaseKey(t)))return e;const s={...e};for(const a of Me)s[a]=(s="",...c)=>e[a](t+s,...c);return s.getKeys=(s="",...a)=>e.getKeys(t+s,...a).then((e=>e.map((e=>e.slice(t.length))))),s}(qe,e):qe}qe.mount("/assets",Oe),qe.mount("data",unstorage_47drivers_47fs_45lite({driver:"fsLite",base:"./.data/kv"}));const Xe=globalThis.process?.getBuiltinModule?.("crypto")?.hash,Le="sha256",Ue="base64url";function hash(e){return function(e){if(Xe)return Xe(Le,e,Ue);const t=j(Le).update(e);return globalThis.process?.versions?.webcontainer?t.digest().toString(Ue):t.digest(Ue)}("string"==typeof e?e:function(e){const t=new Hasher;return t.dispatch(e),t.buff}(e)).replace(/[-_]/g,"").slice(0,10)}class Hasher{buff="";#e=new Map;write(e){this.buff+=e}dispatch(e){return this[null===e?"null":typeof e](e)}object(e){if(e&&"function"==typeof e.toJSON)return this.object(e.toJSON());const t=Object.prototype.toString.call(e);let s="";const a=t.length;s=a<10?"unknown:["+t+"]":t.slice(8,a-1),s=s.toLowerCase();let c=null;if(void 0!==(c=this.#e.get(e)))return this.dispatch("[CIRCULAR:"+c+"]");if(this.#e.set(e,this.#e.size),"undefined"!=typeof Buffer&&Buffer.isBuffer&&Buffer.isBuffer(e))return this.write("buffer:"),this.write(e.toString("utf8"));if("object"!==s&&"function"!==s&&"asyncfunction"!==s)this[s]?this[s](e):this.unknown(e,s);else{const t=Object.keys(e).sort(),s=[];this.write("object:"+(t.length+s.length)+":");const dispatchForKey=t=>{this.dispatch(t),this.write(":"),this.dispatch(e[t]),this.write(",")};for(const e of t)dispatchForKey(e);for(const e of s)dispatchForKey(e)}}array(e,t){if(t=void 0!==t&&t,this.write("array:"+e.length+":"),!t||e.length<=1){for(const t of e)this.dispatch(t);return}const s=new Map,a=e.map((e=>{const t=new Hasher;t.dispatch(e);for(const[e,a]of t.#e)s.set(e,a);return t.toString()}));return this.#e=s,a.sort(),this.array(a,!1)}date(e){return this.write("date:"+e.toJSON())}symbol(e){return this.write("symbol:"+e.toString())}unknown(e,t){if(this.write(t),e)return this.write(":"),e&&"function"==typeof e.entries?this.array([...e.entries()],!0):void 0}error(e){return this.write("error:"+e.toString())}boolean(e){return this.write("bool:"+e)}string(e){this.write("string:"+e.length+":"),this.write(e)}function(e){this.write("fn:"),!function(e){if("function"!=typeof e)return!1;return Function.prototype.toString.call(e).slice(-Fe)===We}(e)?this.dispatch(e.toString()):this.dispatch("[native]")}number(e){return this.write("number:"+e)}null(){return this.write("Null")}undefined(){return this.write("Undefined")}regexp(e){return this.write("regex:"+e.toString())}arraybuffer(e){return this.write("arraybuffer:"),this.dispatch(new Uint8Array(e))}url(e){return this.write("url:"+e.toString())}map(e){this.write("map:");const t=[...e];return this.array(t,!1)}set(e){this.write("set:");const t=[...e];return this.array(t,!1)}bigint(e){return this.write("bigint:"+e.toString())}}for(const e of["uint8array","uint8clampedarray","unt8array","uint16array","unt16array","uint32array","unt32array","float32array","float64array"])Hasher.prototype[e]=function(t){return this.write(e+":"),this.array([...t],!1)};const We="[native code] }",Fe=We.length;function defineCachedFunction(e,t={}){t={name:"_",base:"/cache",swr:!0,maxAge:1,...t};const s={},a=t.group||"nitro/functions",c=t.name||e.name||"_",l=t.integrity||hash([e,t]),u=t.validate||(e=>void 0!==e.value);return async(...d)=>{if(await(t.shouldBypassCache?.(...d)))return e(...d);const h=await(t.getKey||getKey)(...d),f=await(t.shouldInvalidateCache?.(...d)),m=await async function(e,d,h,f){const m=[t.base,a,c,e+".json"].filter(Boolean).join(":").replace(/:\/$/,":index");let g=await useStorage().getItem(m).catch((e=>{console.error("[cache] Cache read error.",e),useNitroApp().captureError(e,{event:f,tags:["cache"]})}))||{};if("object"!=typeof g){g={};const e=new Error("Malformed data read from cache.");console.error("[cache]",e),useNitroApp().captureError(e,{event:f,tags:["cache"]})}const v=1e3*(t.maxAge??0);v&&(g.expires=Date.now()+v);const j=h||g.integrity!==l||v&&Date.now()-(g.mtime||0)>v||!1===u(g),T=j?(async()=>{const a=s[e];a||(void 0!==g.value&&(t.staleMaxAge||0)>=0&&!1===t.swr&&(g.value=void 0,g.integrity=void 0,g.mtime=void 0,g.expires=void 0),s[e]=Promise.resolve(d()));try{g.value=await s[e]}catch(t){throw a||delete s[e],t}if(!a&&(g.mtime=Date.now(),g.integrity=l,delete s[e],!1!==u(g))){let e;t.maxAge&&!t.swr&&(e={ttl:t.maxAge});const s=useStorage().setItem(m,g,e).catch((e=>{console.error("[cache] Cache write error.",e),useNitroApp().captureError(e,{event:f,tags:["cache"]})}));f?.waitUntil&&f.waitUntil(s)}})():Promise.resolve();return void 0===g.value?await T:j&&f&&f.waitUntil&&f.waitUntil(T),t.swr&&!1!==u(g)?(T.catch((e=>{console.error("[cache] SWR handler error.",e),useNitroApp().captureError(e,{event:f,tags:["cache"]})})),g):T.then((()=>g))}(h,(()=>e(...d)),f,d[0]&&isEvent(d[0])?d[0]:void 0);let g=m.value;return t.transform&&(g=await t.transform(m,...d)||g),g}}function getKey(...e){return e.length>0?hash(e):""}function escapeKey(e){return String(e).replace(/\W/g,"")}function cloneWithProxy(e,t){return new Proxy(e,{get:(e,s,a)=>s in t?t[s]:Reflect.get(e,s,a),set:(e,s,a,c)=>s in t?(t[s]=a,!0):Reflect.set(e,s,a,c)})}const cachedEventHandler=function(e,t={name:"_",base:"/cache",swr:!0,maxAge:1}){const s=(t.varies||[]).filter(Boolean).map((e=>e.toLowerCase())).sort(),a={...t,getKey:async e=>{const a=await(t.getKey?.(e));if(a)return escapeKey(a);const c=e.node.req.originalUrl||e.node.req.url||e.path;let l;try{l=escapeKey(decodeURI(parseURL(c).pathname)).slice(0,16)||"index"}catch{l="-"}return[`${l}.${hash(c)}`,...s.map((t=>[t,e.node.req.headers[t]])).map((([e,t])=>`${escapeKey(e)}.${hash(t)}`))].join(":")},validate:e=>!!e.value&&(!(e.value.code>=400)&&(void 0!==e.value.body&&("undefined"!==e.value.headers.etag&&"undefined"!==e.value.headers["last-modified"]))),group:t.group||"nitro/handlers",integrity:t.integrity||hash([e,t])},c=function(e,t={}){return defineCachedFunction(e,t)}((async c=>{const l={};for(const e of s){const t=c.node.req.headers[e];void 0!==t&&(l[e]=t)}const u=cloneWithProxy(c.node.req,{headers:l}),d={};let h;const f=createEvent(u,cloneWithProxy(c.node.res,{statusCode:200,writableEnded:!1,writableFinished:!1,headersSent:!1,closed:!1,getHeader:e=>d[e],setHeader(e,t){return d[e]=t,this},getHeaderNames:()=>Object.keys(d),hasHeader:e=>e in d,removeHeader(e){delete d[e]},getHeaders:()=>d,end(e,t,s){return"string"==typeof e&&(h=e),"function"==typeof t&&t(),"function"==typeof s&&s(),this},write:(e,t,s)=>("string"==typeof e&&(h=e),"function"==typeof t&&t(void 0),"function"==typeof s&&s(),!0),writeHead(e,t){if(this.statusCode=e,t){if(Array.isArray(t)||"string"==typeof t)throw new TypeError("Raw headers is not supported.");for(const e in t){const s=t[e];void 0!==s&&this.setHeader(e,s)}}return this}}));f.fetch=(e,t)=>fetchWithEvent(f,e,t,{fetch:useNitroApp().localFetch}),f.$fetch=(e,t)=>fetchWithEvent(f,e,t,{fetch:globalThis.$fetch}),f.waitUntil=c.waitUntil,f.context=c.context,f.context.cache={options:a};const m=await e(f)||h,g=f.node.res.getHeaders();g.etag=String(g.Etag||g.etag||`W/"${hash(m)}"`),g["last-modified"]=String(g["Last-Modified"]||g["last-modified"]||(new Date).toUTCString());const v=[];t.swr?(t.maxAge&&v.push(`s-maxage=${t.maxAge}`),t.staleMaxAge?v.push(`stale-while-revalidate=${t.staleMaxAge}`):v.push("stale-while-revalidate")):t.maxAge&&v.push(`max-age=${t.maxAge}`),v.length>0&&(g["cache-control"]=v.join(", "));return{code:f.node.res.statusCode,headers:g,body:m}}),a);return defineEventHandler((async s=>{if(t.headersOnly){if(handleCacheHeaders(s,{maxAge:t.maxAge}))return;return e(s)}const a=await c(s);if(s.node.res.headersSent||s.node.res.writableEnded)return a.body;if(!handleCacheHeaders(s,{modifiedTime:new Date(a.headers["last-modified"]),etag:a.headers.etag,maxAge:t.maxAge})){s.node.res.statusCode=a.code;for(const e in a.headers){const t=a.headers[e];"set-cookie"===e?s.node.res.appendHeader(e,splitCookiesString(t)):void 0!==t&&s.node.res.setHeader(e,t)}return a.body}}))};function klona(e){if("object"!=typeof e)return e;var t,s,a=Object.prototype.toString.call(e);if("[object Object]"===a){if(e.constructor!==Object&&"function"==typeof e.constructor)for(t in s=new e.constructor,e)e.hasOwnProperty(t)&&s[t]!==e[t]&&(s[t]=klona(e[t]));else for(t in s={},e)"__proto__"===t?Object.defineProperty(s,t,{value:klona(e[t]),configurable:!0,enumerable:!0,writable:!0}):s[t]=klona(e[t]);return s}if("[object Array]"===a){for(t=e.length,s=Array(t);t--;)s[t]=klona(e[t]);return s}return"[object Set]"===a?(s=new Set,e.forEach((function(e){s.add(klona(e))})),s):"[object Map]"===a?(s=new Map,e.forEach((function(e,t){s.set(klona(t),klona(e))})),s):"[object Date]"===a?new Date(+e):"[object RegExp]"===a?((s=new RegExp(e.source,e.flags)).lastIndex=e.lastIndex,s):"[object DataView]"===a?new e.constructor(klona(e.buffer)):"[object ArrayBuffer]"===a?e.slice(0):"Array]"===a.slice(-6)?new e.constructor(e):e}const Ge=W({}),Je=/\d/,Qe=["-","_","/","."];function isUppercase(e=""){if(!Je.test(e))return e!==e.toLowerCase()}function kebabCase(e,t){return e?(Array.isArray(e)?e:function(e){const t=Qe,s=[];if(!e||"string"!=typeof e)return s;let a,c,l="";for(const u of e){const e=t.includes(u);if(!0===e){s.push(l),l="",a=void 0;continue}const d=isUppercase(u);if(!1===c){if(!1===a&&!0===d){s.push(l),l=u,a=d;continue}if(!0===a&&!1===d&&l.length>1){const e=l.at(-1);s.push(l.slice(0,Math.max(0,l.length-1))),l=e+u,a=d;continue}}l+=u,a=d,c=e}return s.push(l),s}(e)).map((e=>e.toLowerCase())).join(t):""}function getEnv(t,s){const a=(c=t,kebabCase(c||"","_")).toUpperCase();var c;return destr(e.env[s.prefix+a]??e.env[s.altPrefix+a])}function _isObject(e){return"object"==typeof e&&!Array.isArray(e)}const Ve=/\{\{([^{}]*)\}\}/g;const $e={app:{baseURL:"/"},nitro:{routeRules:{"/*/**":{cors:!0,headers:{"access-control-allow-origin":"*","access-control-allow-methods":"*","access-control-allow-headers":"*","access-control-max-age":"0","Access-Control-Allow-Methods":"GET,HEAD,PUT,PATCH,POST,DELETE","Access-Control-Allow-Origin":"*","Access-Control-Allow-Credentials":"true","Access-Control-Allow-Headers":"*","Access-Control-Expose-Headers":"*"}}}},models:[{title:"OpenAI ChatGPT",route:"/openai/chatgpt",provider:"openai",apiBase:"https://api.openai.com/v1/chat/completions",model:"gpt-3.5-turbo"},{title:"OpenAI ChatGPT",route:"/app/chatgpt",provider:"openai",apiBase:"https://api.openai.com/v1/chat/completions",model:"gpt-3.5-turbo"},{title:"OpenAI ChatGPT",route:"/api/chatgpt",provider:"openai",apiBase:"https://api.openai.com/v1/chat/completions",model:"gpt-3.5-turbo"},{title:"Groq",route:"/openai/groq",provider:"openai",apiBase:"https://api.groq.com/openai/v1/chat/completions",model:"llama3-70b-8192"},{title:"Groq",route:"/app/groq",provider:"openai",apiBase:"https://api.groq.com/openai/v1/chat/completions",model:"llama3-70b-8192"},{title:"Groq",route:"/api/groq",provider:"openai",apiBase:"https://api.groq.com/openai/v1/chat/completions",model:"llama3-70b-8192"},{title:"OpenAI qwen",route:"/openai/qwen",provider:"openai",apiBase:"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",model:"qwen-turbo"},{title:"OpenAI qwen",route:"/app/qwen",provider:"openai",apiBase:"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",model:"qwen-turbo"},{title:"OpenAI qwen",route:"/api/qwen",provider:"openai",apiBase:"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",model:"qwen-turbo"},{title:"doubao",route:"/openai/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"doubao",route:"/app/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"doubao",route:"/api/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"GLM",route:"/openai/glm",provider:"openai",apiBase:"https://open.bigmodel.cn/api/paas/v4/chat/completions",model:"glm-4"},{title:"GLM",route:"/app/glm",provider:"openai",apiBase:"https://open.bigmodel.cn/api/paas/v4/chat/completions",model:"glm-4"},{title:"GLM",route:"/api/glm",provider:"openai",apiBase:"https://open.bigmodel.cn/api/paas/v4/chat/completions",model:"glm-4"},{title:"YI",route:"/openai/yi",provider:"openai",apiBase:"https://api.lingyiwanwu.com/v1/chat/completions",model:""},{title:"YI",route:"/app/yi",provider:"openai",apiBase:"https://api.lingyiwanwu.com/v1/chat/completions",model:""},{title:"YI",route:"/api/yi",provider:"openai",apiBase:"https://api.lingyiwanwu.com/v1/chat/completions",model:""},{title:"豆包",route:"/openai/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"豆包",route:"/app/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"豆包",route:"/api/doubao",provider:"openai",apiBase:"https://ark.cn-beijing.volces.com/api/v3/chat/completions",model:""},{title:"百川",route:"/openai/baichuan",provider:"openai",apiBase:"https://api.baichuan-ai.com/v1/chat/completions",model:"Baichuan4"},{title:"百川",route:"/app/baichuan",provider:"openai",apiBase:"https://api.baichuan-ai.com/v1/chat/completions",model:"Baichuan4"},{title:"百川",route:"/api/baichuan",provider:"openai",apiBase:"https://api.baichuan-ai.com/v1/chat/completions",model:"Baichuan4"},{title:"minimax",route:"/openai/minimax",provider:"openai",apiBase:"https://api.minimax.chat/v1/text/chatcompletion_v2",model:"abab6.5-chat"},{title:"minimax",route:"/app/minimax",provider:"openai",apiBase:"https://api.minimax.chat/v1/text/chatcompletion_v2",model:"abab6.5-chat"},{title:"minimax",route:"/api/minimax",provider:"openai",apiBase:"https://api.minimax.chat/v1/text/chatcompletion_v2",model:"abab6.5-chat"},{title:"mistral",route:"/openai/mistral",provider:"openai",apiBase:"https://api.mistral.ai/v1/chat/completions",model:"mistral-small-latest"},{title:"mistral",route:"/app/mistral",provider:"openai",apiBase:"https://api.mistral.ai/v1/chat/completions",model:"mistral-small-latest"},{title:"mistral",route:"/api/mistral",provider:"openai",apiBase:"https://api.mistral.ai/v1/chat/completions",model:"mistral-small-latest"},{title:"mistral code",route:"/openai/mistral-code",provider:"openai",apiBase:"https://codestral.mistral.ai/v1/chat/completions",model:"codestral-latest"},{title:"mistral code",route:"/app/mistral-code",provider:"openai",apiBase:"https://codestral.mistral.ai/v1/chat/completions",model:"codestral-latest"},{title:"mistral code",route:"/api/mistral-code",provider:"openai",apiBase:"https://codestral.mistral.ai/v1/chat/completions",model:"codestral-latest"},{title:"moonshot",route:"/openai/moonshot",provider:"openai",apiBase:"https://api.moonshot.cn/v1/chat/completions",model:"moonshot-v1-8k"},{title:"moonshot",route:"/app/moonshot",provider:"openai",apiBase:"https://api.moonshot.cn/v1/chat/completions",model:"moonshot-v1-8k"},{title:"moonshot",route:"/api/moonshot",provider:"openai",apiBase:"https://api.moonshot.cn/v1/chat/completions",model:"moonshot-v1-8k"},{title:"spark-api-open",route:"/openai/spark-api-open",provider:"openai",apiBase:"https://spark-api-open.xf-yun.com/v1/chat/completions",model:"general"},{title:"spark-api-open",route:"/app/spark-api-open",provider:"openai",apiBase:"https://spark-api-open.xf-yun.com/v1/chat/completions",model:"general"},{title:"spark-api-open",route:"/api/spark-api-open",provider:"openai",apiBase:"https://spark-api-open.xf-yun.com/v1/chat/completions",model:"general"},{title:"fireworks",route:"/openai/fireworks",provider:"openai",apiBase:"https://api.fireworks.ai/inference/v1/chat/completions",model:"accounts/fireworks/models/llama-v3p1-405b-instruct"},{title:"fireworks",route:"/app/fireworks",provider:"openai",apiBase:"https://api.fireworks.ai/inference/v1/chat/completions",model:"accounts/fireworks/models/llama-v3p1-405b-instruct"},{title:"fireworks",route:"/api/fireworks",provider:"openai",apiBase:"https://api.fireworks.ai/inference/v1/chat/completions",model:"accounts/fireworks/models/llama-v3p1-405b-instruct"},{title:"x",route:"/openai/x",provider:"openai",apiBase:"https://api.x.ai/v1/chat/completions",model:"grok-2-1212"},{title:"x",route:"/app/x",provider:"openai",apiBase:"https://api.x.ai/v1/chat/completions",model:"grok-2-1212"},{title:"x",route:"/api/x",provider:"openai",apiBase:"https://api.x.ai/v1/chat/completions",model:"grok-2-1212"},{title:"azure",route:"/openai/azure",provider:"azure",model:"gpt-3.5-turbo"},{title:"azure",route:"/app/azure",provider:"azure",model:"gpt-3.5-turbo"},{title:"azure",route:"/api/azure",provider:"azure",model:"gpt-3.5-turbo"},{title:"coze_cn_api",route:"/openai/cozecn",provider:"coze",apiBase:"https://api.coze.cn/v3/chat",model:""},{title:"coze_cn_api",route:"/app/cozecn",provider:"coze",apiBase:"https://api.coze.cn/v3/chat",model:""},{title:"coze_cn_api",route:"/api/cozecn",provider:"coze",apiBase:"https://api.coze.cn/v3/chat",model:""},{title:"coze_com_api",route:"/openai/cozecom",provider:"coze",apiBase:"https://api.coze.com/v3/chat",model:""},{title:"coze_com_api",route:"/app/cozecom",provider:"coze",apiBase:"https://api.coze.com/v3/chat",model:""},{title:"coze_com_api",route:"/api/cozecom",provider:"coze",apiBase:"https://api.coze.com/v3/chat",model:""},{title:"coze.com",route:"/openai/coze-com",provider:"coze_com",model:""},{title:"coze.com",route:"/app/coze-com",provider:"coze_com",model:""},{title:"coze.com",route:"/api/coze-com",provider:"coze_com",model:""},{title:"coze.cn",route:"/openai/coze-cn",provider:"coze_cn",model:""},{title:"coze.cn",route:"/app/coze-cn",provider:"coze_cn",model:""},{title:"coze.cn",route:"/api/coze-cn",provider:"coze_cn",model:""},{title:"deepseek",route:"/openai/deepseek",provider:"deepseek",model:"deepseek-chat"},{title:"deepseek",route:"/app/deepseek",provider:"deepseek",model:"deepseek-chat"},{title:"deepseek",route:"/api/deepseek",provider:"deepseek",model:"deepseek-chat"},{title:"GitHub Copilot",route:"/openai/github-copilot",provider:"github_copilot",model:"gpt-4"},{title:"GitHub Copilot",route:"/app/github-copilot",provider:"github_copilot",model:"gpt-4"},{title:"GitHub Copilot",route:"/api/github-copilot",provider:"github_copilot",model:"gpt-4"},{title:"chatglm.cn",route:"/openai/chatglm",provider:"chatglm",model:"65940acff94777010aa6b796"},{title:"chatglm.cn",route:"/app/chatglm",provider:"chatglm",model:"65940acff94777010aa6b796"},{title:"chatglm.cn",route:"/api/chatglm",provider:"chatglm",model:"65940acff94777010aa6b796"},{title:"通译千问",route:"/openai/tongyi",provider:"tongyi",model:""},{title:"通译千问",route:"/app/tongyi",provider:"tongyi",model:""},{title:"通译千问",route:"/api/tongyi",provider:"tongyi",model:""},{title:"万知",route:"/openai/wanzhi",provider:"wanzhi",model:"LING"},{title:"万知",route:"/app/wanzhi",provider:"wanzhi",model:"LING"},{title:"万知",route:"/api/wanzhi",provider:"wanzhi",model:"LING"},{title:"huggingface",route:"/openai/huggingface",provider:"huggingface",model:""},{title:"huggingface",route:"/app/huggingface",provider:"huggingface",model:""},{title:"huggingface",route:"/api/huggingface",provider:"huggingface",model:""},{title:"ernie",route:"/openai/ernie",provider:"ernie",model:""},{title:"ernie",route:"/app/ernie",provider:"ernie",model:""},{title:"ernie",route:"/api/ernie",provider:"ernie",model:""},{title:"hunyuan",route:"/openai/hunyuan",provider:"hunyuan",model:""},{title:"hunyuan",route:"/app/hunyuan",provider:"hunyuan",model:""},{title:"hunyuan",route:"/api/hunyuan",provider:"hunyuan",model:""},{title:"vercel",route:"/openai/vercel",provider:"vercel",model:""},{title:"vercel",route:"/app/vercel",provider:"vercel",model:""},{title:"vercel",route:"/api/vercel",provider:"vercel",model:""},{title:"lmsys",route:"/openai/lmsys",provider:"lmsys",model:""},{title:"lmsys",route:"/app/lmsys",provider:"lmsys",model:""},{title:"lmsys",route:"/api/lmsys",provider:"lmsys",model:""},{title:"spark",route:"/openai/spark",provider:"spark",model:""},{title:"spark",route:"/app/spark",provider:"spark",model:""},{title:"spark",route:"/api/spark",provider:"spark",model:""},{title:"cloudflare",route:"/openai/cloudflare",provider:"cloudflare",model:""},{title:"cloudflare",route:"/app/cloudflare",provider:"cloudflare",model:""},{title:"cloudflare",route:"/api/cloudflare",provider:"cloudflare",model:""},{title:"mistral.ai",route:"/openai/mistral-ai",provider:"mistral_ai",model:""},{title:"mistral.ai",route:"/app/mistral-ai",provider:"mistral_ai",model:""},{title:"mistral.ai",route:"/api/mistral-ai",provider:"mistral_ai",model:""},{title:"claude",route:"/openai/claude",provider:"claude",model:""},{title:"claude",route:"/app/claude",provider:"claude",model:""},{title:"claude",route:"/api/claude",provider:"claude",model:""},{title:"anthropic",route:"/openai/anthropic",provider:"anthropic",model:""},{title:"anthropic",route:"/app/anthropic",provider:"anthropic",model:""},{title:"anthropic",route:"/api/anthropic",provider:"anthropic",model:""},{title:"cohere",route:"/openai/cohere",provider:"cohere",model:""},{title:"cohere",route:"/app/cohere",provider:"cohere",model:""},{title:"cohere",route:"/api/cohere",provider:"cohere",model:""},{title:"gemini",route:"/openai/gemini",provider:"gemini",model:"gemini-1.5-flash"},{title:"gemini",route:"/app/gemini",provider:"gemini",model:"gemini-1.5-flash"},{title:"gemini",route:"/api/gemini",provider:"gemini",model:"gemini-1.5-flash"},{title:"kimi",route:"/openai/kimi",provider:"kimi",model:""},{title:"kimi",route:"/app/kimi",provider:"kimi",model:""},{title:"kimi",route:"/api/kimi",provider:"kimi",model:""},{title:"gemini vertex",route:"/openai/gemini-vertex",provider:"gemini_vertex",model:""},{title:"gemini vertex",route:"/app/gemini-vertex",provider:"gemini_vertex",model:""},{title:"gemini vertex",route:"/api/gemini-vertex",provider:"gemini_vertex",model:""},{title:"anthropic vertex",route:"/openai/anthropic-vertex",provider:"anthropic_vertex",model:""},{title:"anthropic vertex",route:"/app/anthropic-vertex",provider:"anthropic_vertex",model:""},{title:"anthropic vertex",route:"/api/anthropic-vertex",provider:"anthropic_vertex",model:""},{title:"mistralai vertex",route:"/openai/mistralai-vertex",provider:"mistralai_vertex",model:""},{title:"mistralai vertex",route:"/app/mistralai-vertex",provider:"mistralai_vertex",model:""},{title:"mistralai vertex",route:"/api/mistralai-vertex",provider:"mistralai_vertex",model:""},{title:"openai vertex",route:"/openai/openai-vertex",provider:"openai_vertex",model:""},{title:"openai vertex",route:"/app/openai-vertex",provider:"openai_vertex",model:""},{title:"openai vertex",route:"/api/openai-vertex",provider:"openai_vertex",model:""},{title:"chatgpt.com",route:"/openai/chatgpt-com",provider:"chatgpt",model:"auto"},{title:"chatgpt.com",route:"/app/chatgpt-com",provider:"chatgpt",model:"auto"},{title:"chatgpt.com",route:"/api/chatgpt-com",provider:"chatgpt",model:"auto"},{title:"lyihub.com",route:"/openai/lyihub",provider:"lyihub",model:""},{title:"lyihub.com",route:"/app/lyihub",provider:"lyihub",model:""},{title:"lyihub.com",route:"/api/lyihub",provider:"lyihub",model:""},{title:"deepinfra",route:"/openai/deepinfra",provider:"deepinfra",model:""},{title:"deepinfra",route:"/app/deepinfra",provider:"deepinfra",model:""},{title:"deepinfra",route:"/api/deepinfra",provider:"deepinfra",model:""},{title:"replicate",route:"/openai/replicate",provider:"replicate",model:""},{title:"replicate",route:"/app/replicate",provider:"replicate",model:""},{title:"replicate",route:"/api/replicate",provider:"replicate",model:""},{title:"vecmul",route:"/openai/vecmul",provider:"vecmul",model:""},{title:"vecmul",route:"/app/vecmul",provider:"vecmul",model:""},{title:"vecmul",route:"/api/vecmul",provider:"vecmul",model:""},{title:"magai",route:"/openai/magai",provider:"magai",model:""},{title:"magai",route:"/app/magai",provider:"magai",model:""},{title:"magai",route:"/api/magai",provider:"magai",model:""},{title:"blackbox",route:"/openai/blackbox",provider:"blackbox",model:""},{title:"blackbox",route:"/app/blackbox",provider:"blackbox",model:""},{title:"blackbox",route:"/api/blackbox",provider:"blackbox",model:""},{title:"cursor",route:"/openai/cursor",provider:"cursor",model:""},{title:"cursor",route:"/app/cursor",provider:"cursor",model:""},{title:"cursor",route:"/api/cursor",provider:"cursor",model:""},{title:"zed",route:"/openai/zed",provider:"zed",model:""},{title:"zed",route:"/app/zed",provider:"zed",model:""},{title:"zed",route:"/api/zed",provider:"zed",model:""},{title:"pieces",route:"/openai/pieces",provider:"pieces",model:""},{title:"pieces",route:"/app/pieces",provider:"pieces",model:""},{title:"pieces",route:"/api/pieces",provider:"pieces",model:""},{title:"qodo",route:"/openai/qodo",provider:"qodo",model:""},{title:"qodo",route:"/app/qodo",provider:"qodo",model:""},{title:"qodo",route:"/api/qodo",provider:"qodo",model:""},{title:"genspark",route:"/openai/genspark",provider:"genspark",model:""},{title:"genspark",route:"/app/genspark",provider:"genspark",model:""},{title:"genspark",route:"/api/genspark",provider:"genspark",model:""},{title:"deepseek.com",route:"/openai/deepseek-com",provider:"deepseek_com",model:"deepseek-chat"},{title:"deepseek.com",route:"/app/deepseek-com",provider:"deepseek_com",model:"deepseek-chat"},{title:"deepseek.com",route:"/api/deepseek-com",provider:"deepseek_com",model:"deepseek-chat"},{title:"qwenlm",route:"/openai/qwenlm",provider:"qwenlm",model:""},{title:"qwenlm",route:"/app/qwenlm",provider:"qwenlm",model:""},{title:"qwenlm",route:"/api/qwenlm",provider:"qwenlm",model:""},{title:"genspark.image",route:"/openai/genspark-image",provider:"genspark_image",model:""},{title:"genspark.image",route:"/app/genspark-image",provider:"genspark_image",model:""},{title:"genspark.image",route:"/api/genspark-image",provider:"genspark_image",model:""},{title:"imagefx",route:"/openai/imagefx",provider:"imagefx",model:""},{title:"imagefx",route:"/app/imagefx",provider:"imagefx",model:""},{title:"imagefx",route:"/api/imagefx",provider:"imagefx",model:""},{title:"bing.image",route:"/openai/bing-image",provider:"bing_image",model:""},{title:"bing.image",route:"/app/bing-image",provider:"bing_image",model:""},{title:"bing.image",route:"/api/bing-image",provider:"bing_image",model:""},{title:"siliconflow.image",route:"/openai/siliconflow-image",provider:"siliconflow_image",model:""},{title:"siliconflow.image",route:"/app/siliconflow-image",provider:"siliconflow_image",model:""},{title:"siliconflow.image",route:"/api/siliconflow-image",provider:"siliconflow_image",model:""},{title:"cloudflare.image",route:"/openai/cloudflare-image",provider:"cloudflare_image",model:""},{title:"cloudflare.image",route:"/app/cloudflare-image",provider:"cloudflare_image",model:""},{title:"cloudflare.image",route:"/api/cloudflare-image",provider:"cloudflare_image",model:""},{title:"designer",route:"/openai/designer",provider:"designer",model:""},{title:"designer",route:"/app/designer",provider:"designer",model:""},{title:"designer",route:"/api/designer",provider:"designer",model:""},{title:"grok",route:"/openai/grok",provider:"grok",model:""},{title:"grok",route:"/app/grok",provider:"grok",model:""},{title:"grok",route:"/api/grok",provider:"grok",model:""},{title:"n",route:"/openai/n",provider:"n",model:""},{title:"n",route:"/app/n",provider:"n",model:""},{title:"n",route:"/api/n",provider:"n",model:""},{title:"firefly",route:"/openai/firefly",provider:"firefly",model:""},{title:"firefly",route:"/app/firefly",provider:"firefly",model:""},{title:"firefly",route:"/api/firefly",provider:"firefly",model:""},{title:"yuanbao",route:"/openai/yuanbao",provider:"yuanbao",model:""},{title:"yuanbao",route:"/app/yuanbao",provider:"yuanbao",model:""},{title:"yuanbao",route:"/api/yuanbao",provider:"yuanbao",model:""}]},Ye={prefix:"NITRO_",altPrefix:$e.nitro.envPrefix??e.env.NITRO_ENV_PREFIX??"_",envExpansion:$e.nitro.envExpansion??e.env.NITRO_ENV_EXPANSION??!1},et=_deepFreeze(function applyEnv(t,s,a=""){for(const c in t){const l=a?`${a}_${c}`:c,u=getEnv(l,s);_isObject(t[c])?_isObject(u)?(t[c]={...t[c],...u},applyEnv(t[c],s,l)):void 0===u?applyEnv(t[c],s,l):t[c]=u??t[c]:t[c]=u??t[c],s.envExpansion&&"string"==typeof t[c]&&(t[c]=t[c].replace(Ve,((t,s)=>e.env[s]||t)))}return t}(klona($e),Ye));function useRuntimeConfig(e){return et}function _deepFreeze(e){const t=Object.getOwnPropertyNames(e);for(const s of t){const t=e[s];t&&"object"==typeof t&&_deepFreeze(t)}return Object.freeze(e)}_deepFreeze(klona(Ge)),new Proxy(Object.create(null),{get:(e,t)=>{console.warn("Please use `useRuntimeConfig()` instead of accessing config directly.");const s=useRuntimeConfig();if(t in s)return s[t]}});const tt="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{},st="__unctx__",at=tt[st]||(tt[st]=function(e={}){const t={};return{get:(s,a={})=>(t[s]||(t[s]=function(e={}){let t,s=!1;const checkConflict=e=>{if(t&&t!==e)throw new Error("Context conflict")};let a;if(e.asyncContext){const t=e.AsyncLocalStorage||globalThis.AsyncLocalStorage;t?a=new t:console.warn("[unctx] `AsyncLocalStorage` is not provided.")}const _getCurrentInstance=()=>{if(a){const e=a.getStore();if(void 0!==e)return e}return t};return{use:()=>{const e=_getCurrentInstance();if(void 0===e)throw new Error("Context is not available");return e},tryUse:()=>_getCurrentInstance(),set:(e,a)=>{a||checkConflict(e),t=e,s=!0},unset:()=>{t=void 0,s=!1},call:(e,c)=>{checkConflict(e),t=e;try{return a?a.run(e,c):c()}finally{s||(t=void 0)}},async callAsync(e,c){t=e;const onRestore=()=>{t=e},onLeave=()=>t===e?onRestore:void 0;ot.add(onLeave);try{const l=a?a.run(e,c):c();return s||(t=void 0),await l}finally{ot.delete(onLeave)}}}}({...e,...a})),t[s])}}()),rt="__unctx_async_handlers__",ot=tt[rt]||(tt[rt]=new Set);((e,t={})=>{at.get(e,t)})("nitro-app",{asyncContext:void 0,AsyncLocalStorage:void 0});const it=toRouteMatcher(createRouter$1({routes:useRuntimeConfig().nitro.routeRules}));function createRouteRulesHandler(e){return pe((t=>{const s=function(e){e.context._nitro=e.context._nitro||{},e.context._nitro.routeRules||(e.context._nitro.routeRules=getRouteRulesForPath(withoutBase(e.path.split("?")[0],useRuntimeConfig().app.baseURL)));return e.context._nitro.routeRules}(t);if(s.headers&&ie(t,s.headers),s.redirect){let e=s.redirect.to;if(e.endsWith("/**")){let a=t.path;const c=s.redirect._redirectStripBase;c&&(a=withoutBase(a,c)),e=joinURL(e.slice(0,-3),a)}else if(t.path.includes("?")){e=withQuery(e,getQuery$1(t.path))}return function(e,t,s=302){return e.node.res.statusCode=sanitizeStatusCode(s,e.node.res.statusCode),e.node.res.setHeader("location",t),send(e,``,ae.html)}(t,e,s.redirect.statusCode)}if(s.proxy){let a=s.proxy.to;if(a.endsWith("/**")){let e=t.path;const c=s.proxy._proxyStripBase;c&&(e=withoutBase(e,c)),a=joinURL(a.slice(0,-3),e)}else if(t.path.includes("?")){a=withQuery(a,getQuery$1(t.path))}return proxyRequest(t,a,{fetch:e.localFetch,...s.proxy})}}))}function getRouteRulesForPath(e){return U({},...it.matchAll(e).reverse())}function _captureError(e,t){console.error(`[${t}]`,e),useNitroApp().captureError(e,{tags:[t]})}function joinHeaders(e){return Array.isArray(e)?e.join(", "):String(e)}function normalizeCookieHeader(e=""){return splitCookiesString(joinHeaders(e))}function normalizeCookieHeaders(e){const t=new Headers;for(const[s,a]of e)if("set-cookie"===s)for(const e of normalizeCookieHeader(a))t.append("set-cookie",e);else t.set(s,joinHeaders(a));return t}const nt=function(){const e=useRuntimeConfig(),t=new Hookable,captureError=(e,s={})=>{const a=t.callHookParallel("error",e,s).catch((e=>{console.error("Error while capturing another error",e)}));if(s.event&&isEvent(s.event)){const t=s.event.context.nitro?.errors;t&&t.push({error:e,context:s}),s.event.waitUntil&&s.event.waitUntil(a)}},s=createApp({debug:destr(!1),onError:(e,t)=>(captureError(e,{event:t,tags:["request"]}),async function(e,t){for(const s of ze)try{if(await s(e,t,{defaultHandler:defaultHandler}),t.handled)return}catch(e){console.error(e)}}(e,t)),onRequest:async e=>{e.context.nitro=e.context.nitro||{errors:[]};const t=e.node.req?.__unenv__;t&&Object.assign(e.context,t),e.fetch=(t,s)=>fetchWithEvent(e,t,s,{fetch:localFetch}),e.$fetch=(t,s)=>fetchWithEvent(e,t,s,{fetch:l}),e.waitUntil=s=>{e.context.nitro._waitUntilPromises||(e.context.nitro._waitUntilPromises=[]),e.context.nitro._waitUntilPromises.push(s),t?.waitUntil&&t.waitUntil(s)},e.captureError=(t,s)=>{captureError(t,{event:e,...s})},await nt.hooks.callHook("request",e).catch((t=>{captureError(t,{event:e,tags:["request"]})}))},onBeforeResponse:async(e,t)=>{await nt.hooks.callHook("beforeResponse",e,t).catch((t=>{captureError(t,{event:e,tags:["request","response"]})}))},onAfterResponse:async(e,t)=>{await nt.hooks.callHook("afterResponse",e,t).catch((t=>{captureError(t,{event:e,tags:["request","response"]})}))}}),a=function(e={}){const t=createRouter$1({}),s={};let a;const c={},addRoute=(e,a,l)=>{let u=s[e];if(u||(s[e]=u={path:e,handlers:{}},t.insert(e,u)),Array.isArray(l))for(const t of l)addRoute(e,a,t);else u.handlers[l]=toEventHandler(a,0,e);return c};c.use=c.add=(e,t,s)=>addRoute(e,t,s||"all");for(const e of le)c[e]=(t,s)=>c.add(t,s,e);const matchHandler=(e="/",s="get")=>{const c=e.indexOf("?");-1!==c&&(e=e.slice(0,Math.max(0,c)));const l=t.lookup(e);if(!l||!l.handlers)return{error:createError$1({statusCode:404,name:"Not Found",statusMessage:`Cannot find any route matching ${e||"/"}.`})};let u=l.handlers[s]||l.handlers.all;if(!u){a||(a=toRouteMatcher(t));const c=a.matchAll(e).reverse();for(const e of c){if(e.handlers[s]){u=e.handlers[s],l.handlers[s]=l.handlers[s]||u;break}if(e.handlers.all){u=e.handlers.all,l.handlers.all=l.handlers.all||u;break}}}return u?{matched:l,handler:u}:{error:createError$1({statusCode:405,name:"Method Not Allowed",statusMessage:`Method ${s} is not allowed on this route.`})}},l=e.preemptive||e.preemtive;return c.handler=pe((e=>{const t=matchHandler(e.path,e.method.toLowerCase());if("error"in t){if(l)throw t.error;return}e.context.matchedRoute=t.matched;const s=t.matched.params||{};return e.context.params=s,Promise.resolve(t.handler(e)).then((e=>void 0===e&&l?null:e))})),c.handler.__resolve__=async e=>{e=withLeadingSlash(e);const t=matchHandler(e);if("error"in t)return;let s={route:t.matched.path,handler:t.handler};if(t.handler.__resolve__){const a=await t.handler.__resolve__(e);if(!a)return;s={...s,...a}}return s},c}({preemptive:!0}),c=toNodeListener(s),localFetch=(e,t)=>e.toString().startsWith("/")?async function(e,t,s={}){try{const a=await b(e,{url:t,...s});return new Response(a.body,{status:a.status,statusText:a.statusText,headers:S(a.headers)})}catch(e){return new Response(e.toString(),{status:Number.parseInt(e.statusCode||e.code)||500,statusText:e.statusText})}}(c,e,t).then((e=>function(e){return e.headers.has("set-cookie")?new Response(e.body,{status:e.status,statusText:e.statusText,headers:normalizeCookieHeaders(e.headers)}):e}(e))):globalThis.fetch(e,t),l=createFetch({fetch:localFetch,Headers:Te,defaults:{baseURL:e.app.baseURL}});globalThis.$fetch=l,s.use(createRouteRulesHandler({localFetch:localFetch}));for(const t of Ne){let c=t.lazy?lazyEventHandler(t.handler):t.handler;if(t.middleware||!t.route){const a=(e.app.baseURL+(t.route||"/")).replace(/\/+/g,"/");s.use(a,c)}else{const e=getRouteRulesForPath(t.route.replace(/:\w+|\*\*/g,"_"));e.cache&&(c=cachedEventHandler(c,{group:"nitro/routes",...e.cache})),a.use(t.route,c,t.method)}}return s.use(e.app.baseURL,a.handler),{hooks:t,h3App:s,router:a,localCall:e=>b(c,e),localFetch:localFetch,captureError:captureError}}();function useNitroApp(){return nt}!function(e){for(const t of Re)try{t(e)}catch(t){throw e.captureError(t,{tags:["plugin"]}),t}}(nt);function GracefulShutdown(s,a){a=a||{};const c=Object.assign({signals:"SIGINT SIGTERM",timeout:3e4,development:!1,forceExit:!0,onShutdown:e=>Promise.resolve(e),preShutdown:e=>Promise.resolve(e)},a);let l=!1;const u={};let d=0;const h={};let f=0,m=!1,g=!1;const v=c.signals.split(" ").map((e=>e.trim())).filter((e=>e.length>0)),j=function(){let e=!1;return(t,s,a)=>{function call(){if(!e)return e=!0,Reflect.apply(a,this,arguments)}for(const e of s)t.on(e,call)}}();function destroy(e,s=!1){(e._isIdle&&l||s)&&(e.destroy(),e.server instanceof t.Server?delete u[e._connectionId]:delete h[e._connectionId])}function destroyAllConnections(e=!1){for(const t of Object.keys(u)){const s=u[t],a=s._httpMessage;a&&!e?a.headersSent||a.setHeader("connection","close"):destroy(s)}for(const t of Object.keys(h)){const s=h[t],a=s._httpMessage;a&&!e?a.headersSent||a.setHeader("connection","close"):destroy(s)}}function shutdown(t){if(c.development)return e.exit(0);function waitForReadyToShutDown(e){if(0===e)return c.timeout,Promise.resolve(!0);return 0===Object.keys(u).length&&0===Object.keys(h).length?Promise.resolve(!1):new Promise((t=>{setTimeout((()=>{t(waitForReadyToShutDown(e-1))}),250)}))}return l?Promise.resolve():c.preShutdown(t).then((()=>{l=!0,destroyAllConnections(),new Promise(((e,t)=>{s.close((s=>s?t(s):e(!0)))}))})).then((()=>waitForReadyToShutDown(c.timeout?Math.round(c.timeout/250):0))).then((e=>(e&&destroyAllConnections(e),c.onShutdown(t)))).then((function(){return g||(g=!0,c.finally&&function(e){const t=Object.prototype.toString.call(e);return/^\[object\s([A-Za-z]+)?Function]$/.test(t)}(c.finally)&&c.finally()),Promise.resolve()})).catch((e=>{const t="string"==typeof e?e:JSON.stringify(e);throw m=!0,t}))}return j(e,v,(t=>{shutdown(t).then((()=>{c.forceExit&&e.exit(m?1:0)})).catch((t=>{e.exit(1)}))})),s.on("request",((e,t)=>{e.socket._isIdle=!1,l&&!t.headersSent&&t.setHeader("connection","close"),t.on("finish",(()=>{e.socket._isIdle=!0,destroy(e.socket)}))})),s.on("connection",(e=>{if(l)e.destroy();else{const t=d++;e._isIdle=!0,e._connectionId=t,u[t]=e,e.once("close",(()=>{delete u[e._connectionId]}))}})),s.on("secureConnection",(e=>{if(l)e.destroy();else{const t=f++;e._isIdle=!0,e._connectionId=t,h[t]=e,e.once("close",(()=>{delete h[e._connectionId]}))}})),e.on("close",(()=>{})),function(){return shutdown("manual")}}const ct=e.env.NITRO_SSL_CERT,pt=e.env.NITRO_SSL_KEY,lt=useNitroApp(),ut=ct&&pt?new c({key:pt,cert:ct},toNodeListener(lt.h3App)):new s(toNodeListener(lt.h3App)),dt=destr(e.env.NITRO_PORT||e.env.PORT)||3e3,ht=e.env.NITRO_HOST||e.env.HOST,ft=e.env.NITRO_UNIX_SOCKET,mt=ut.listen(ft?{path:ft}:{port:dt,host:ht},(t=>{t&&(console.error(t),e.exit(1));const s=ct&&pt?"https":"http",a=mt.address();if("string"==typeof a)return void console.log(`Listening on unix socket ${a}`);const c=(useRuntimeConfig().app.baseURL||"").replace(/\/$/,""),l=`${s}://${"IPv6"===a.family?`[${a.address}]`:a.address}:${a.port}${c}`;console.log(`Listening on ${l}`)}));e.on("unhandledRejection",(e=>_captureError(e,"unhandledRejection"))),e.on("uncaughtException",(e=>_captureError(e,"uncaughtException"))),function(t,s){const a={disabled:!!e.env.NITRO_SHUTDOWN_DISABLED,signals:(e.env.NITRO_SHUTDOWN_SIGNALS||"SIGTERM SIGINT").split(" ").map((e=>e.trim())),timeout:Number.parseInt(e.env.NITRO_SHUTDOWN_TIMEOUT||"",10)||3e4,forceExit:!e.env.NITRO_SHUTDOWN_NO_FORCE_EXIT};a.disabled||GracefulShutdown(t,{signals:a.signals.join(" "),timeout:a.timeout,forceExit:a.forceExit,onShutdown:async()=>{await new Promise((e=>{const t=setTimeout((()=>{console.warn("Graceful shutdown timeout, force exiting..."),e()}),a.timeout);s.hooks.callHook("close").catch((e=>{console.error(e)})).finally((()=>{clearTimeout(t),e()}))}))}})}(mt,lt);const gt={};export{xe as $,Y as a,getQuery as b,useStorage as c,defineEventHandler as d,createError as e,defineDriver as f,getRequestURL as g,createRequiredError as h,createStorage as i,joinKeys as j,gt as n,readBody as r,useRuntimeConfig as u}; diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js b/.output/server/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js index 02762d533f8a1c255b327c37b6b50590a150c319..d3d1525aea295ce1f364f1538c07b75306b0b764 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/backoff-timeout.js @@ -17,6 +17,9 @@ */ Object.defineProperty(exports, "__esModule", { value: true }); exports.BackoffTimeout = void 0; +const constants_1 = require("./constants"); +const logging = require("./logging"); +const TRACER_NAME = 'backoff'; const INITIAL_BACKOFF_MS = 1000; const BACKOFF_MULTIPLIER = 1.6; const MAX_BACKOFF_MS = 120000; @@ -68,6 +71,7 @@ class BackoffTimeout { * if running is true. */ this.endTime = new Date(); + this.id = BackoffTimeout.getNextId(); if (options) { if (options.initialDelay) { this.initialDelay = options.initialDelay; @@ -82,16 +86,25 @@ class BackoffTimeout { this.maxDelay = options.maxDelay; } } + this.trace('constructed initialDelay=' + this.initialDelay + ' multiplier=' + this.multiplier + ' jitter=' + this.jitter + ' maxDelay=' + this.maxDelay); this.nextDelay = this.initialDelay; this.timerId = setTimeout(() => { }, 0); clearTimeout(this.timerId); } + static getNextId() { + return this.nextId++; + } + trace(text) { + logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, '{' + this.id + '} ' + text); + } runTimer(delay) { var _a, _b; + this.trace('runTimer(delay=' + delay + ')'); this.endTime = this.startTime; - this.endTime.setMilliseconds(this.endTime.getMilliseconds() + this.nextDelay); + this.endTime.setMilliseconds(this.endTime.getMilliseconds() + delay); clearTimeout(this.timerId); this.timerId = setTimeout(() => { + this.trace('timer fired'); this.callback(); this.running = false; }, delay); @@ -103,6 +116,7 @@ class BackoffTimeout { * Call the callback after the current amount of delay time */ runOnce() { + this.trace('runOnce()'); this.running = true; this.startTime = new Date(); this.runTimer(this.nextDelay); @@ -116,6 +130,7 @@ class BackoffTimeout { * again. */ stop() { + this.trace('stop()'); clearTimeout(this.timerId); this.running = false; } @@ -124,6 +139,7 @@ class BackoffTimeout { * retroactively apply that reset to the current timer. */ reset() { + this.trace('reset() running=' + this.running); this.nextDelay = this.initialDelay; if (this.running) { const now = new Date(); @@ -171,4 +187,5 @@ class BackoffTimeout { } } exports.BackoffTimeout = BackoffTimeout; +BackoffTimeout.nextId = 0; //# sourceMappingURL=backoff-timeout.js.map \ No newline at end of file diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/certificate-provider.js b/.output/server/node_modules/@grpc/grpc-js/build/src/certificate-provider.js index dc7f420dd9912c12bfc9ab5b24b8d2eeaa218f29..75cd0f825fa28d860e5d837d957cd660106f574c 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/certificate-provider.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/certificate-provider.js @@ -31,9 +31,9 @@ class FileWatcherCertificateProvider { this.config = config; this.refreshTimer = null; this.fileResultPromise = null; - this.latestCaUpdate = null; + this.latestCaUpdate = undefined; this.caListeners = new Set(); - this.latestIdentityUpdate = null; + this.latestIdentityUpdate = undefined; this.identityListeners = new Set(); this.lastUpdateTime = null; if ((config.certificateFile === undefined) !== (config.privateKeyFile === undefined)) { @@ -57,7 +57,7 @@ class FileWatcherCertificateProvider { if (!this.refreshTimer) { return; } - trace('File watcher read certificates certificate' + (certificateResult ? '!=' : '==') + 'null, privateKey' + (privateKeyResult ? '!=' : '==') + 'null, CA certificate' + (caCertificateResult ? '!=' : '==') + 'null'); + trace('File watcher read certificates certificate ' + certificateResult.status + ', privateKey ' + privateKeyResult.status + ', CA certificate ' + caCertificateResult.status); this.lastUpdateTime = new Date(); this.fileResultPromise = null; if (certificateResult.status === 'fulfilled' && privateKeyResult.status === 'fulfilled') { @@ -74,6 +74,9 @@ class FileWatcherCertificateProvider { caCertificate: caCertificateResult.value }; } + else { + this.latestCaUpdate = null; + } for (const listener of this.identityListeners) { listener(this.latestIdentityUpdate); } @@ -95,8 +98,8 @@ class FileWatcherCertificateProvider { } if (timeSinceLastUpdate > this.config.refreshIntervalMs * 2) { // Clear out old updates if they are definitely stale - this.latestCaUpdate = null; - this.latestIdentityUpdate = null; + this.latestCaUpdate = undefined; + this.latestIdentityUpdate = undefined; } this.refreshTimer = setInterval(() => this.updateCertificates(), this.config.refreshIntervalMs); trace('File watcher started watching'); @@ -114,7 +117,9 @@ class FileWatcherCertificateProvider { addCaCertificateListener(listener) { this.caListeners.add(listener); this.maybeStartWatchingFiles(); - process.nextTick(listener, this.latestCaUpdate); + if (this.latestCaUpdate !== undefined) { + process.nextTick(listener, this.latestCaUpdate); + } } removeCaCertificateListener(listener) { this.caListeners.delete(listener); @@ -123,7 +128,9 @@ class FileWatcherCertificateProvider { addIdentityCertificateListener(listener) { this.identityListeners.add(listener); this.maybeStartWatchingFiles(); - process.nextTick(listener, this.latestIdentityUpdate); + if (this.latestIdentityUpdate !== undefined) { + process.nextTick(listener, this.latestIdentityUpdate); + } } removeIdentityCertificateListener(listener) { this.identityListeners.delete(listener); diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/channel-credentials.js b/.output/server/node_modules/@grpc/grpc-js/build/src/channel-credentials.js index b6ad33cb214ba2efb6c815908e941a7423310ecf..900f5650df5362e417a535020e2419e05c1853fd 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/channel-credentials.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/channel-credentials.js @@ -21,6 +21,10 @@ exports.createCertificateProviderChannelCredentials = createCertificateProviderC const tls_1 = require("tls"); const call_credentials_1 = require("./call-credentials"); const tls_helpers_1 = require("./tls-helpers"); +const uri_parser_1 = require("./uri-parser"); +const resolver_1 = require("./resolver"); +const logging_1 = require("./logging"); +const constants_1 = require("./constants"); // eslint-disable-next-line @typescript-eslint/no-explicit-any function verifyIsBufferOrNull(obj, friendlyName) { if (obj && !(obj instanceof Buffer)) { @@ -33,20 +37,14 @@ function verifyIsBufferOrNull(obj, friendlyName) { * over a channel initialized with an instance of this class. */ class ChannelCredentials { - constructor(callCredentials) { - this.callCredentials = callCredentials || call_credentials_1.CallCredentials.createEmpty(); - } /** - * Gets the set of per-call credentials associated with this instance. + * Returns a copy of this object with the included set of per-call credentials + * expanded to include callCredentials. + * @param callCredentials A CallCredentials object to associate with this + * instance. */ - _getCallCredentials() { - return this.callCredentials; - } - _ref() { - // Do nothing by default - } - _unref() { - // Do nothing by default + compose(callCredentials) { + return new ComposedChannelCredentialsImpl(this, callCredentials); } /** * Return a new ChannelCredentials instance with a given set of credentials. @@ -104,41 +102,116 @@ class InsecureChannelCredentialsImpl extends ChannelCredentials { compose(callCredentials) { throw new Error('Cannot compose insecure credentials'); } - _getConnectionOptions() { - return {}; - } _isSecure() { return false; } _equals(other) { return other instanceof InsecureChannelCredentialsImpl; } + _createSecureConnector(channelTarget, options, callCredentials) { + return { + connect(socket) { + return Promise.resolve({ + socket, + secure: false + }); + }, + waitForReady: () => { + return Promise.resolve(); + }, + getCallCredentials: () => { + return callCredentials !== null && callCredentials !== void 0 ? callCredentials : call_credentials_1.CallCredentials.createEmpty(); + }, + destroy() { } + }; + } } -class SecureChannelCredentialsImpl extends ChannelCredentials { - constructor(secureContext, verifyOptions) { - super(); - this.secureContext = secureContext; - this.verifyOptions = verifyOptions; - this.connectionOptions = { - secureContext, +function getConnectionOptions(secureContext, verifyOptions, channelTarget, options) { + var _a, _b, _c, _d; + const connectionOptions = { + secureContext: secureContext + }; + if (verifyOptions.checkServerIdentity) { + connectionOptions.checkServerIdentity = verifyOptions.checkServerIdentity; + } + if (verifyOptions.rejectUnauthorized !== undefined) { + connectionOptions.rejectUnauthorized = verifyOptions.rejectUnauthorized; + } + connectionOptions.ALPNProtocols = ['h2']; + if (options['grpc.ssl_target_name_override']) { + const sslTargetNameOverride = options['grpc.ssl_target_name_override']; + const originalCheckServerIdentity = (_a = connectionOptions.checkServerIdentity) !== null && _a !== void 0 ? _a : tls_1.checkServerIdentity; + connectionOptions.checkServerIdentity = (host, cert) => { + return originalCheckServerIdentity(sslTargetNameOverride, cert); }; - // Node asserts that this option is a function, so we cannot pass undefined - if (verifyOptions === null || verifyOptions === void 0 ? void 0 : verifyOptions.checkServerIdentity) { - this.connectionOptions.checkServerIdentity = - verifyOptions.checkServerIdentity; + connectionOptions.servername = sslTargetNameOverride; + } + else { + if ('grpc.http_connect_target' in options) { + /* This is more or less how servername will be set in createSession + * if a connection is successfully established through the proxy. + * If the proxy is not used, these connectionOptions are discarded + * anyway */ + const targetPath = (0, resolver_1.getDefaultAuthority)((_b = (0, uri_parser_1.parseUri)(options['grpc.http_connect_target'])) !== null && _b !== void 0 ? _b : { + path: 'localhost', + }); + const hostPort = (0, uri_parser_1.splitHostPort)(targetPath); + connectionOptions.servername = (_c = hostPort === null || hostPort === void 0 ? void 0 : hostPort.host) !== null && _c !== void 0 ? _c : targetPath; } - if ((verifyOptions === null || verifyOptions === void 0 ? void 0 : verifyOptions.rejectUnauthorized) !== undefined) { - this.connectionOptions.rejectUnauthorized = - verifyOptions.rejectUnauthorized; + } + if (options['grpc-node.tls_enable_trace']) { + connectionOptions.enableTrace = true; + } + let realTarget = channelTarget; + if ('grpc.http_connect_target' in options) { + const parsedTarget = (0, uri_parser_1.parseUri)(options['grpc.http_connect_target']); + if (parsedTarget) { + realTarget = parsedTarget; } } - compose(callCredentials) { - const combinedCallCredentials = this.callCredentials.compose(callCredentials); - return new ComposedChannelCredentialsImpl(this, combinedCallCredentials); + const targetPath = (0, resolver_1.getDefaultAuthority)(realTarget); + const hostPort = (0, uri_parser_1.splitHostPort)(targetPath); + const remoteHost = (_d = hostPort === null || hostPort === void 0 ? void 0 : hostPort.host) !== null && _d !== void 0 ? _d : targetPath; + connectionOptions.host = remoteHost; + connectionOptions.servername = remoteHost; + return connectionOptions; +} +class SecureConnectorImpl { + constructor(connectionOptions, callCredentials) { + this.connectionOptions = connectionOptions; + this.callCredentials = callCredentials; + } + connect(socket) { + const tlsConnectOptions = Object.assign({ socket: socket }, this.connectionOptions); + return new Promise((resolve, reject) => { + const tlsSocket = (0, tls_1.connect)(tlsConnectOptions, () => { + if (!tlsSocket.authorized) { + reject(tlsSocket.authorizationError); + return; + } + resolve({ + socket: tlsSocket, + secure: true + }); + }); + tlsSocket.on('error', (error) => { + reject(error); + }); + }); + } + waitForReady() { + return Promise.resolve(); } - _getConnectionOptions() { - // Copy to prevent callers from mutating this.connectionOptions - return Object.assign({}, this.connectionOptions); + getCallCredentials() { + return this.callCredentials; + } + destroy() { } +} +class SecureChannelCredentialsImpl extends ChannelCredentials { + constructor(secureContext, verifyOptions) { + super(); + this.secureContext = secureContext; + this.verifyOptions = verifyOptions; } _isSecure() { return true; @@ -156,6 +229,10 @@ class SecureChannelCredentialsImpl extends ChannelCredentials { return false; } } + _createSecureConnector(channelTarget, options, callCredentials) { + const connectionOptions = getConnectionOptions(this.secureContext, this.verifyOptions, channelTarget, options); + return new SecureConnectorImpl(connectionOptions, callCredentials !== null && callCredentials !== void 0 ? callCredentials : call_credentials_1.CallCredentials.createEmpty()); + } } class CertificateProviderChannelCredentialsImpl extends ChannelCredentials { constructor(caCertificateProvider, identityCertificateProvider, verifyOptions) { @@ -164,36 +241,19 @@ class CertificateProviderChannelCredentialsImpl extends ChannelCredentials { this.identityCertificateProvider = identityCertificateProvider; this.verifyOptions = verifyOptions; this.refcount = 0; - this.latestCaUpdate = null; - this.latestIdentityUpdate = null; + /** + * `undefined` means that the certificates have not yet been loaded. `null` + * means that an attempt to load them has completed, and has failed. + */ + this.latestCaUpdate = undefined; + /** + * `undefined` means that the certificates have not yet been loaded. `null` + * means that an attempt to load them has completed, and has failed. + */ + this.latestIdentityUpdate = undefined; this.caCertificateUpdateListener = this.handleCaCertificateUpdate.bind(this); this.identityCertificateUpdateListener = this.handleIdentityCertitificateUpdate.bind(this); - } - compose(callCredentials) { - const combinedCallCredentials = this.callCredentials.compose(callCredentials); - return new ComposedChannelCredentialsImpl(this, combinedCallCredentials); - } - _getConnectionOptions() { - var _a, _b, _c; - if (this.latestCaUpdate === null) { - return null; - } - if (this.identityCertificateProvider !== null && this.latestIdentityUpdate === null) { - return null; - } - const secureContext = (0, tls_1.createSecureContext)({ - ca: this.latestCaUpdate.caCertificate, - key: (_a = this.latestIdentityUpdate) === null || _a === void 0 ? void 0 : _a.privateKey, - cert: (_b = this.latestIdentityUpdate) === null || _b === void 0 ? void 0 : _b.certificate, - ciphers: tls_helpers_1.CIPHER_SUITES - }); - const options = { - secureContext: secureContext - }; - if ((_c = this.verifyOptions) === null || _c === void 0 ? void 0 : _c.checkServerIdentity) { - options.checkServerIdentity = this.verifyOptions.checkServerIdentity; - } - return options; + this.secureContextWatchers = []; } _isSecure() { return true; @@ -212,7 +272,7 @@ class CertificateProviderChannelCredentialsImpl extends ChannelCredentials { return false; } } - _ref() { + ref() { var _a; if (this.refcount === 0) { this.caCertificateProvider.addCaCertificateListener(this.caCertificateUpdateListener); @@ -220,7 +280,7 @@ class CertificateProviderChannelCredentialsImpl extends ChannelCredentials { } this.refcount += 1; } - _unref() { + unref() { var _a; this.refcount -= 1; if (this.refcount === 0) { @@ -228,20 +288,126 @@ class CertificateProviderChannelCredentialsImpl extends ChannelCredentials { (_a = this.identityCertificateProvider) === null || _a === void 0 ? void 0 : _a.removeIdentityCertificateListener(this.identityCertificateUpdateListener); } } + _createSecureConnector(channelTarget, options, callCredentials) { + this.ref(); + return new CertificateProviderChannelCredentialsImpl.SecureConnectorImpl(this, channelTarget, options, callCredentials !== null && callCredentials !== void 0 ? callCredentials : call_credentials_1.CallCredentials.createEmpty()); + } + maybeUpdateWatchers() { + if (this.hasReceivedUpdates()) { + for (const watcher of this.secureContextWatchers) { + watcher(this.getLatestSecureContext()); + } + this.secureContextWatchers = []; + } + } handleCaCertificateUpdate(update) { this.latestCaUpdate = update; + this.maybeUpdateWatchers(); } handleIdentityCertitificateUpdate(update) { this.latestIdentityUpdate = update; + this.maybeUpdateWatchers(); + } + hasReceivedUpdates() { + if (this.latestCaUpdate === undefined) { + return false; + } + if (this.identityCertificateProvider && this.latestIdentityUpdate === undefined) { + return false; + } + return true; + } + getSecureContext() { + if (this.hasReceivedUpdates()) { + return Promise.resolve(this.getLatestSecureContext()); + } + else { + return new Promise(resolve => { + this.secureContextWatchers.push(resolve); + }); + } + } + getLatestSecureContext() { + var _a, _b; + if (!this.latestCaUpdate) { + return null; + } + if (this.identityCertificateProvider !== null && !this.latestIdentityUpdate) { + return null; + } + try { + return (0, tls_1.createSecureContext)({ + ca: this.latestCaUpdate.caCertificate, + key: (_a = this.latestIdentityUpdate) === null || _a === void 0 ? void 0 : _a.privateKey, + cert: (_b = this.latestIdentityUpdate) === null || _b === void 0 ? void 0 : _b.certificate, + ciphers: tls_helpers_1.CIPHER_SUITES + }); + } + catch (e) { + (0, logging_1.log)(constants_1.LogVerbosity.ERROR, 'Failed to createSecureContext with error ' + e.message); + return null; + } } } +CertificateProviderChannelCredentialsImpl.SecureConnectorImpl = class { + constructor(parent, channelTarget, options, callCredentials) { + this.parent = parent; + this.channelTarget = channelTarget; + this.options = options; + this.callCredentials = callCredentials; + } + connect(socket) { + return new Promise((resolve, reject) => { + const secureContext = this.parent.getLatestSecureContext(); + if (!secureContext) { + reject(new Error('Failed to load credentials')); + return; + } + if (socket.closed) { + reject(new Error('Socket closed while loading credentials')); + } + const connnectionOptions = getConnectionOptions(secureContext, this.parent.verifyOptions, this.channelTarget, this.options); + const tlsConnectOptions = Object.assign({ socket: socket }, connnectionOptions); + const closeCallback = () => { + reject(new Error('Socket closed')); + }; + const errorCallback = (error) => { + reject(error); + }; + const tlsSocket = (0, tls_1.connect)(tlsConnectOptions, () => { + tlsSocket.removeListener('close', closeCallback); + tlsSocket.removeListener('error', errorCallback); + if (!tlsSocket.authorized) { + reject(tlsSocket.authorizationError); + return; + } + resolve({ + socket: tlsSocket, + secure: true + }); + }); + tlsSocket.once('close', closeCallback); + tlsSocket.once('error', errorCallback); + }); + } + async waitForReady() { + await this.parent.getSecureContext(); + } + getCallCredentials() { + return this.callCredentials; + } + destroy() { + this.parent.unref(); + } +}; function createCertificateProviderChannelCredentials(caCertificateProvider, identityCertificateProvider, verifyOptions) { - return new CertificateProviderChannelCredentialsImpl(caCertificateProvider, identityCertificateProvider, verifyOptions !== null && verifyOptions !== void 0 ? verifyOptions : null); + return new CertificateProviderChannelCredentialsImpl(caCertificateProvider, identityCertificateProvider, verifyOptions !== null && verifyOptions !== void 0 ? verifyOptions : {}); } class ComposedChannelCredentialsImpl extends ChannelCredentials { - constructor(channelCredentials, callCreds) { - super(callCreds); + constructor(channelCredentials, callCredentials) { + super(); this.channelCredentials = channelCredentials; + this.callCredentials = callCredentials; if (!channelCredentials._isSecure()) { throw new Error('Cannot compose insecure credentials'); } @@ -250,9 +416,6 @@ class ComposedChannelCredentialsImpl extends ChannelCredentials { const combinedCallCredentials = this.callCredentials.compose(callCredentials); return new ComposedChannelCredentialsImpl(this.channelCredentials, combinedCallCredentials); } - _getConnectionOptions() { - return this.channelCredentials._getConnectionOptions(); - } _isSecure() { return true; } @@ -268,5 +431,9 @@ class ComposedChannelCredentialsImpl extends ChannelCredentials { return false; } } + _createSecureConnector(channelTarget, options, callCredentials) { + const combinedCallCredentials = this.callCredentials.compose(callCredentials !== null && callCredentials !== void 0 ? callCredentials : call_credentials_1.CallCredentials.createEmpty()); + return this.channelCredentials._createSecureConnector(channelTarget, options, combinedCallCredentials); + } } //# sourceMappingURL=channel-credentials.js.map \ No newline at end of file diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/channel-options.js b/.output/server/node_modules/@grpc/grpc-js/build/src/channel-options.js index 4126f64f4e8f7d257e527ae30901ce90f6a2fc37..0bd9baa287b724dc2b9b7ea6965d20fdfc172629 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/channel-options.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/channel-options.js @@ -51,6 +51,7 @@ exports.recognizedOptions = { 'grpc-node.tls_enable_trace': true, 'grpc.lb.ring_hash.ring_size_cap': true, 'grpc-node.retry_max_attempts_limit': true, + 'grpc-node.flow_control_window': true, }; function channelOptionsEqual(options1, options2) { const keys1 = Object.keys(options1).sort(); diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/channelz.js b/.output/server/node_modules/@grpc/grpc-js/build/src/channelz.js index 69a01a526de403dd9d31db65cc57d06266d11fa1..91e9aceb39cbd2e38b25fb145aa9da80888a9cc9 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/channelz.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/channelz.js @@ -246,6 +246,17 @@ function parseIPv6Chunk(addressChunk) { const result = []; return result.concat(...bytePairs); } +function isIPv6MappedIPv4(ipAddress) { + return (0, net_1.isIPv6)(ipAddress) && ipAddress.toLowerCase().startsWith('::ffff:') && (0, net_1.isIPv4)(ipAddress.substring(7)); +} +/** + * Prerequisite: isIPv4(ipAddress) + * @param ipAddress + * @returns + */ +function ipv4AddressStringToBuffer(ipAddress) { + return Buffer.from(Uint8Array.from(ipAddress.split('.').map(segment => Number.parseInt(segment)))); +} /** * Converts an IPv4 or IPv6 address from string representation to binary * representation @@ -254,7 +265,10 @@ function parseIPv6Chunk(addressChunk) { */ function ipAddressStringToBuffer(ipAddress) { if ((0, net_1.isIPv4)(ipAddress)) { - return Buffer.from(Uint8Array.from(ipAddress.split('.').map(segment => Number.parseInt(segment)))); + return ipv4AddressStringToBuffer(ipAddress); + } + else if (isIPv6MappedIPv4(ipAddress)) { + return ipv4AddressStringToBuffer(ipAddress.substring(7)); } else if ((0, net_1.isIPv6)(ipAddress)) { let leftSection; diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/experimental.js b/.output/server/node_modules/@grpc/grpc-js/build/src/experimental.js index 543c1a60f9e698a53a981d08e951834da87d828f..36766e88be11a6786de67f3dd2a1b35dec91e9a4 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/experimental.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/experimental.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.createCertificateProviderChannelCredentials = exports.FileWatcherCertificateProvider = exports.createCertificateProviderServerCredentials = exports.createServerCredentialsWithInterceptors = exports.BaseSubchannelWrapper = exports.registerAdminService = exports.FilterStackFactory = exports.BaseFilter = exports.PickResultType = exports.QueuePicker = exports.UnavailablePicker = exports.ChildLoadBalancerHandler = exports.EndpointMap = exports.endpointHasAddress = exports.endpointToString = exports.subchannelAddressToString = exports.LeafLoadBalancer = exports.isLoadBalancerNameRegistered = exports.parseLoadBalancingConfig = exports.selectLbConfigFromList = exports.registerLoadBalancerType = exports.createChildChannelControlHelper = exports.BackoffTimeout = exports.parseDuration = exports.durationToMs = exports.splitHostPort = exports.uriToString = exports.createResolver = exports.registerResolver = exports.log = exports.trace = void 0; +exports.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX = exports.createCertificateProviderChannelCredentials = exports.FileWatcherCertificateProvider = exports.createCertificateProviderServerCredentials = exports.createServerCredentialsWithInterceptors = exports.BaseSubchannelWrapper = exports.registerAdminService = exports.FilterStackFactory = exports.BaseFilter = exports.PickResultType = exports.QueuePicker = exports.UnavailablePicker = exports.ChildLoadBalancerHandler = exports.EndpointMap = exports.endpointHasAddress = exports.endpointToString = exports.subchannelAddressToString = exports.LeafLoadBalancer = exports.isLoadBalancerNameRegistered = exports.parseLoadBalancingConfig = exports.selectLbConfigFromList = exports.registerLoadBalancerType = exports.createChildChannelControlHelper = exports.BackoffTimeout = exports.parseDuration = exports.durationToMs = exports.splitHostPort = exports.uriToString = exports.createResolver = exports.registerResolver = exports.log = exports.trace = void 0; var logging_1 = require("./logging"); Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return logging_1.trace; } }); Object.defineProperty(exports, "log", { enumerable: true, get: function () { return logging_1.log; } }); @@ -49,4 +49,6 @@ var certificate_provider_1 = require("./certificate-provider"); Object.defineProperty(exports, "FileWatcherCertificateProvider", { enumerable: true, get: function () { return certificate_provider_1.FileWatcherCertificateProvider; } }); var channel_credentials_1 = require("./channel-credentials"); Object.defineProperty(exports, "createCertificateProviderChannelCredentials", { enumerable: true, get: function () { return channel_credentials_1.createCertificateProviderChannelCredentials; } }); +var internal_channel_1 = require("./internal-channel"); +Object.defineProperty(exports, "SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX", { enumerable: true, get: function () { return internal_channel_1.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX; } }); //# sourceMappingURL=experimental.js.map \ No newline at end of file diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/http_proxy.js b/.output/server/node_modules/@grpc/grpc-js/build/src/http_proxy.js index 7545652f5037c46912555ad99a1c217250b3d5f5..114017cdcada7013045055f776ebc48de9fb8d3a 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/http_proxy.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/http_proxy.js @@ -16,13 +16,13 @@ * */ Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseCIDR = parseCIDR; exports.mapProxyName = mapProxyName; exports.getProxiedConnection = getProxiedConnection; const logging_1 = require("./logging"); const constants_1 = require("./constants"); -const resolver_1 = require("./resolver"); +const net_1 = require("net"); const http = require("http"); -const tls = require("tls"); const logging = require("./logging"); const subchannel_address_1 = require("./subchannel-address"); const uri_parser_1 = require("./uri-parser"); @@ -109,6 +109,48 @@ function getNoProxyHostList() { return []; } } +/* + * The groups correspond to CIDR parts as follows: + * 1. ip + * 2. prefixLength + */ +function parseCIDR(cidrString) { + const splitRange = cidrString.split('/'); + if (splitRange.length !== 2) { + return null; + } + const prefixLength = parseInt(splitRange[1], 10); + if (!(0, net_1.isIPv4)(splitRange[0]) || Number.isNaN(prefixLength) || prefixLength < 0 || prefixLength > 32) { + return null; + } + return { + ip: ipToInt(splitRange[0]), + prefixLength: prefixLength + }; +} +function ipToInt(ip) { + return ip.split(".").reduce((acc, octet) => (acc << 8) + parseInt(octet, 10), 0); +} +function isIpInCIDR(cidr, serverHost) { + const ip = cidr.ip; + const mask = -1 << (32 - cidr.prefixLength); + const hostIP = ipToInt(serverHost); + return (hostIP & mask) === (ip & mask); +} +function hostMatchesNoProxyList(serverHost) { + for (const host of getNoProxyHostList()) { + const parsedCIDR = parseCIDR(host); + // host is a CIDR and serverHost is an IP address + if ((0, net_1.isIPv4)(serverHost) && parsedCIDR && isIpInCIDR(parsedCIDR, serverHost)) { + return true; + } + else if (serverHost.endsWith(host)) { + // host is a single IP or a domain name suffix + return true; + } + } + return false; +} function mapProxyName(target, options) { var _a; const noProxyResult = { @@ -130,11 +172,9 @@ function mapProxyName(target, options) { return noProxyResult; } const serverHost = hostPort.host; - for (const host of getNoProxyHostList()) { - if (host === serverHost) { - trace('Not using proxy for target in no_proxy list: ' + (0, uri_parser_1.uriToString)(target)); - return noProxyResult; - } + if (hostMatchesNoProxyList(serverHost)) { + trace('Not using proxy for target in no_proxy list: ' + (0, uri_parser_1.uriToString)(target)); + return noProxyResult; } const extraOptions = { 'grpc.http_connect_target': (0, uri_parser_1.uriToString)(target), @@ -150,19 +190,19 @@ function mapProxyName(target, options) { extraOptions: extraOptions, }; } -function getProxiedConnection(address, channelOptions, connectionOptions) { +function getProxiedConnection(address, channelOptions) { var _a; if (!('grpc.http_connect_target' in channelOptions)) { - return Promise.resolve({}); + return Promise.resolve(null); } const realTarget = channelOptions['grpc.http_connect_target']; const parsedTarget = (0, uri_parser_1.parseUri)(realTarget); if (parsedTarget === null) { - return Promise.resolve({}); + return Promise.resolve(null); } const splitHostPost = (0, uri_parser_1.splitHostPort)(parsedTarget.path); if (splitHostPost === null) { - return Promise.resolve({}); + return Promise.resolve(null); } const hostPort = `${splitHostPost.host}:${(_a = splitHostPost.port) !== null && _a !== void 0 ? _a : resolver_dns_1.DEFAULT_PORT}`; const options = { @@ -191,7 +231,6 @@ function getProxiedConnection(address, channelOptions, connectionOptions) { return new Promise((resolve, reject) => { const request = http.request(options); request.once('connect', (res, socket, head) => { - var _a; request.removeAllListeners(); socket.removeAllListeners(); if (res.statusCode === 200) { @@ -205,41 +244,11 @@ function getProxiedConnection(address, channelOptions, connectionOptions) { if (head.length > 0) { socket.unshift(head); } - if ('secureContext' in connectionOptions) { - /* The proxy is connecting to a TLS server, so upgrade this socket - * connection to a TLS connection. - * This is a workaround for https://github.com/nodejs/node/issues/32922 - * See https://github.com/grpc/grpc-node/pull/1369 for more info. */ - const targetPath = (0, resolver_1.getDefaultAuthority)(parsedTarget); - const hostPort = (0, uri_parser_1.splitHostPort)(targetPath); - const remoteHost = (_a = hostPort === null || hostPort === void 0 ? void 0 : hostPort.host) !== null && _a !== void 0 ? _a : targetPath; - const cts = tls.connect(Object.assign({ host: remoteHost, servername: remoteHost, socket: socket }, connectionOptions), () => { - trace('Successfully established a TLS connection to ' + - options.path + - ' through proxy ' + - proxyAddressString); - resolve({ socket: cts, realTarget: parsedTarget }); - }); - cts.on('error', (error) => { - trace('Failed to establish a TLS connection to ' + - options.path + - ' through proxy ' + - proxyAddressString + - ' with error ' + - error.message); - reject(); - }); - } - else { - trace('Successfully established a plaintext connection to ' + - options.path + - ' through proxy ' + - proxyAddressString); - resolve({ - socket, - realTarget: parsedTarget, - }); - } + trace('Successfully established a plaintext connection to ' + + options.path + + ' through proxy ' + + proxyAddressString); + resolve(socket); } else { (0, logging_1.log)(constants_1.LogVerbosity.ERROR, 'Failed to connect to ' + diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/internal-channel.js b/.output/server/node_modules/@grpc/grpc-js/build/src/internal-channel.js index 6e8d36cb198a4c6f39d5faf757ea3b27c76dbdb5..f519359d045cee1c0b23d01e7eaa8309fba678d6 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/internal-channel.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/internal-channel.js @@ -16,7 +16,7 @@ * */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.InternalChannel = void 0; +exports.InternalChannel = exports.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX = void 0; const channel_credentials_1 = require("./channel-credentials"); const resolving_load_balancer_1 = require("./resolving-load-balancer"); const subchannel_pool_1 = require("./subchannel-pool"); @@ -89,6 +89,7 @@ class ShutdownPicker { }; } } +exports.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX = 'grpc.internal.no_subchannel'; class ChannelzInfoTracker { constructor(target) { this.target = target; @@ -197,8 +198,14 @@ class InternalChannel { this.keepaliveTime = (_d = options['grpc.keepalive_time_ms']) !== null && _d !== void 0 ? _d : -1; this.idleTimeoutMs = Math.max((_e = options['grpc.client_idle_timeout_ms']) !== null && _e !== void 0 ? _e : DEFAULT_IDLE_TIMEOUT_MS, MIN_IDLE_TIMEOUT_MS); const channelControlHelper = { - createSubchannel: (subchannelAddress, subchannelArgs, credentialsOverride) => { - const subchannel = this.subchannelPool.getOrCreateSubchannel(this.target, subchannelAddress, Object.assign({}, this.options, subchannelArgs), credentialsOverride !== null && credentialsOverride !== void 0 ? credentialsOverride : this.credentials); + createSubchannel: (subchannelAddress, subchannelArgs) => { + const finalSubchannelArgs = {}; + for (const [key, value] of Object.entries(subchannelArgs)) { + if (!key.startsWith(exports.SUBCHANNEL_ARGS_EXCLUDE_KEY_PREFIX)) { + finalSubchannelArgs[key] = value; + } + } + const subchannel = this.subchannelPool.getOrCreateSubchannel(this.target, subchannelAddress, finalSubchannelArgs, this.credentials); subchannel.throttleKeepalive(this.keepaliveTime); if (this.channelzEnabled) { this.channelzInfoTracker.trace.addTrace('CT_INFO', 'Created subchannel or used existing subchannel', subchannel.getChannelzRef()); @@ -233,7 +240,8 @@ class InternalChannel { } }, }; - this.resolvingLoadBalancer = new resolving_load_balancer_1.ResolvingLoadBalancer(this.target, channelControlHelper, credentials, options, (serviceConfig, configSelector) => { + this.resolvingLoadBalancer = new resolving_load_balancer_1.ResolvingLoadBalancer(this.target, channelControlHelper, options, (serviceConfig, configSelector) => { + var _a; if (serviceConfig.retryThrottling) { RETRY_THROTTLER_MAP.set(this.getTarget(), new retrying_call_1.RetryThrottler(serviceConfig.retryThrottling.maxTokens, serviceConfig.retryThrottling.tokenRatio, RETRY_THROTTLER_MAP.get(this.getTarget()))); } @@ -243,6 +251,7 @@ class InternalChannel { if (this.channelzEnabled) { this.channelzInfoTracker.trace.addTrace('CT_INFO', 'Address resolution succeeded'); } + (_a = this.configSelector) === null || _a === void 0 ? void 0 : _a.unref(); this.configSelector = configSelector; this.currentResolutionError = null; /* We process the queue asynchronously to ensure that the corresponding @@ -388,7 +397,7 @@ class InternalChannel { if (this.configSelector) { return { type: 'SUCCESS', - config: this.configSelector(method, metadata, this.randomChannelId), + config: this.configSelector.invoke(method, metadata, this.randomChannelId), }; } else { @@ -485,15 +494,6 @@ class InternalChannel { this.trace('createRetryingCall [' + callNumber + '] method="' + method + '"'); return new retrying_call_1.RetryingCall(this, callConfig, method, host, credentials, deadline, callNumber, this.retryBufferTracker, RETRY_THROTTLER_MAP.get(this.getTarget())); } - createInnerCall(callConfig, method, host, credentials, deadline) { - // Create a RetryingCall if retries are enabled - if (this.options['grpc.enable_retries'] === 0) { - return this.createLoadBalancingCall(callConfig, method, host, credentials, deadline); - } - else { - return this.createRetryingCall(callConfig, method, host, credentials, deadline); - } - } createResolvingCall(method, deadline, host, parentCall, propagateFlags) { const callNumber = (0, call_number_1.getNextCallNumber)(); this.trace('createResolvingCall [' + @@ -508,7 +508,7 @@ class InternalChannel { host: host !== null && host !== void 0 ? host : this.defaultAuthority, parentCall: parentCall, }; - const call = new resolving_call_1.ResolvingCall(this, method, finalOptions, this.filterStackFactory.clone(), this.credentials._getCallCredentials(), callNumber); + const call = new resolving_call_1.ResolvingCall(this, method, finalOptions, this.filterStackFactory.clone(), callNumber); this.onCallStart(); call.addStatusWatcher(status => { this.onCallEnd(status); @@ -516,6 +516,7 @@ class InternalChannel { return call; } close() { + var _a; this.resolvingLoadBalancer.destroy(); this.updateState(connectivity_state_1.ConnectivityState.SHUTDOWN); this.currentPicker = new ShutdownPicker(); @@ -537,6 +538,8 @@ class InternalChannel { (0, channelz_1.unregisterChannelzRef)(this.channelzRef); } this.subchannelPool.unrefUnusedSubchannels(); + (_a = this.configSelector) === null || _a === void 0 ? void 0 : _a.unref(); + this.configSelector = null; } getTarget() { return (0, uri_parser_1.uriToString)(this.target); diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js index c877d0501c5d79fcf3b8fdcda924c7ba4934f985..c15c968d0b93a2a13ded04816dea14c907bd9d9f 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-child-handler.js @@ -21,10 +21,8 @@ const load_balancer_1 = require("./load-balancer"); const connectivity_state_1 = require("./connectivity-state"); const TYPE_NAME = 'child_load_balancer_helper'; class ChildLoadBalancerHandler { - constructor(channelControlHelper, credentials, options) { + constructor(channelControlHelper) { this.channelControlHelper = channelControlHelper; - this.credentials = credentials; - this.options = options; this.currentChild = null; this.pendingChild = null; this.latestConfig = null; @@ -33,10 +31,10 @@ class ChildLoadBalancerHandler { this.parent = parent; this.child = null; } - createSubchannel(subchannelAddress, subchannelArgs, credentialsOverride) { - return this.parent.channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs, credentialsOverride); + createSubchannel(subchannelAddress, subchannelArgs) { + return this.parent.channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs); } - updateState(connectivityState, picker) { + updateState(connectivityState, picker, errorMessage) { var _a; if (this.calledByPendingChild()) { if (connectivityState === connectivity_state_1.ConnectivityState.CONNECTING) { @@ -49,7 +47,7 @@ class ChildLoadBalancerHandler { else if (!this.calledByCurrentChild()) { return; } - this.parent.channelControlHelper.updateState(connectivityState, picker); + this.parent.channelControlHelper.updateState(connectivityState, picker, errorMessage); } requestReresolution() { var _a; @@ -84,13 +82,13 @@ class ChildLoadBalancerHandler { * @param lbConfig * @param attributes */ - updateAddressList(endpointList, lbConfig, attributes) { + updateAddressList(endpointList, lbConfig, options) { let childToUpdate; if (this.currentChild === null || this.latestConfig === null || this.configUpdateRequiresNewPolicyInstance(this.latestConfig, lbConfig)) { const newHelper = new this.ChildPolicyHelper(this); - const newChild = (0, load_balancer_1.createLoadBalancer)(lbConfig, newHelper, this.credentials, this.options); + const newChild = (0, load_balancer_1.createLoadBalancer)(lbConfig, newHelper); newHelper.setChild(newChild); if (this.currentChild === null) { this.currentChild = newChild; @@ -113,7 +111,7 @@ class ChildLoadBalancerHandler { } } this.latestConfig = lbConfig; - childToUpdate.updateAddressList(endpointList, lbConfig, attributes); + childToUpdate.updateAddressList(endpointList, lbConfig, options); } exitIdle() { if (this.currentChild) { diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js index 6a0fde59761d1d92f214a60edd724e6cd5ddc596..0bfc051efeaf4a7cb355c41e9b0b86ffa8a86fd0 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-outlier-detection.js @@ -267,13 +267,13 @@ class OutlierDetectionPicker { } } class OutlierDetectionLoadBalancer { - constructor(channelControlHelper, credentials, options) { + constructor(channelControlHelper) { this.entryMap = new subchannel_address_1.EndpointMap(); this.latestConfig = null; this.timerStartTime = null; this.childBalancer = new load_balancer_child_handler_1.ChildLoadBalancerHandler((0, experimental_1.createChildChannelControlHelper)(channelControlHelper, { - createSubchannel: (subchannelAddress, subchannelArgs, credentialsOverride) => { - const originalSubchannel = channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs, credentialsOverride); + createSubchannel: (subchannelAddress, subchannelArgs) => { + const originalSubchannel = channelControlHelper.createSubchannel(subchannelAddress, subchannelArgs); const mapEntry = this.entryMap.getForSubchannelAddress(subchannelAddress); const subchannelWrapper = new OutlierDetectionSubchannelWrapper(originalSubchannel, mapEntry); if ((mapEntry === null || mapEntry === void 0 ? void 0 : mapEntry.currentEjectionTimestamp) !== null) { @@ -283,15 +283,15 @@ class OutlierDetectionLoadBalancer { mapEntry === null || mapEntry === void 0 ? void 0 : mapEntry.subchannelWrappers.push(subchannelWrapper); return subchannelWrapper; }, - updateState: (connectivityState, picker) => { + updateState: (connectivityState, picker, errorMessage) => { if (connectivityState === connectivity_state_1.ConnectivityState.READY) { - channelControlHelper.updateState(connectivityState, new OutlierDetectionPicker(picker, this.isCountingEnabled())); + channelControlHelper.updateState(connectivityState, new OutlierDetectionPicker(picker, this.isCountingEnabled()), errorMessage); } else { - channelControlHelper.updateState(connectivityState, picker); + channelControlHelper.updateState(connectivityState, picker, errorMessage); } }, - }), credentials, options); + })); this.ejectionTimer = setInterval(() => { }, 0); clearInterval(this.ejectionTimer); } @@ -499,10 +499,11 @@ class OutlierDetectionLoadBalancer { } } } - updateAddressList(endpointList, lbConfig, attributes) { + updateAddressList(endpointList, lbConfig, options) { if (!(lbConfig instanceof OutlierDetectionLoadBalancingConfig)) { return; } + trace('Received update with config: ' + JSON.stringify(lbConfig.toJsonObject(), undefined, 2)); for (const endpoint of endpointList) { if (!this.entryMap.has(endpoint)) { trace('Adding map entry for ' + (0, subchannel_address_1.endpointToString)(endpoint)); @@ -516,7 +517,7 @@ class OutlierDetectionLoadBalancer { } this.entryMap.deleteMissing(endpointList); const childPolicy = lbConfig.getChildPolicy(); - this.childBalancer.updateAddressList(endpointList, childPolicy, attributes); + this.childBalancer.updateAddressList(endpointList, childPolicy, options); if (lbConfig.getSuccessRateEjectionConfig() || lbConfig.getFailurePercentageEjectionConfig()) { if (this.timerStartTime) { diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js index 2d83fa69f89a09653c3c20210633ff3b3703ba67..32552bca40747b9d1163cdb906ac5be9c95bfe3c 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-pick-first.js @@ -103,6 +103,9 @@ function shuffled(list) { * @returns */ function interleaveAddressFamilies(addressList) { + if (addressList.length === 0) { + return []; + } const result = []; const ipv6Addresses = []; const ipv4Addresses = []; @@ -136,7 +139,7 @@ class PickFirstLoadBalancer { * @param channelControlHelper `ChannelControlHelper` instance provided by * this load balancer's owner. */ - constructor(channelControlHelper, credentials, options) { + constructor(channelControlHelper) { this.channelControlHelper = channelControlHelper; /** * The list of subchannels this load balancer is currently attempting to @@ -173,15 +176,16 @@ class PickFirstLoadBalancer { * the LB policy continuously attempts to connect to all of its subchannels. */ this.stickyTransientFailureMode = false; + this.reportHealthStatus = false; /** * The most recent error reported by any subchannel as it transitioned to * TRANSIENT_FAILURE. */ this.lastError = null; this.latestAddressList = null; + this.latestOptions = {}; this.connectionDelayTimeout = setTimeout(() => { }, 0); clearTimeout(this.connectionDelayTimeout); - this.reportHealthStatus = options[REPORT_HEALTH_STATUS_OPTION_NAME]; } allChildrenHaveReportedTF() { return this.children.every(child => child.hasReportedTransientFailure); @@ -190,27 +194,36 @@ class PickFirstLoadBalancer { this.children.every(child => child.hasReportedTransientFailure = false); } calculateAndReportNewState() { + var _a; if (this.currentPick) { if (this.reportHealthStatus && !this.currentPick.isHealthy()) { + const errorMessage = `Picked subchannel ${this.currentPick.getAddress()} is unhealthy`; this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ - details: `Picked subchannel ${this.currentPick.getAddress()} is unhealthy`, - })); + details: errorMessage, + }), errorMessage); } else { - this.updateState(connectivity_state_1.ConnectivityState.READY, new PickFirstPicker(this.currentPick)); + this.updateState(connectivity_state_1.ConnectivityState.READY, new PickFirstPicker(this.currentPick), null); } } + else if (((_a = this.latestAddressList) === null || _a === void 0 ? void 0 : _a.length) === 0) { + const errorMessage = `No connection established. Last error: ${this.lastError}`; + this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ + details: errorMessage, + }), errorMessage); + } else if (this.children.length === 0) { - this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this)); + this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this), null); } else { if (this.stickyTransientFailureMode) { + const errorMessage = `No connection established. Last error: ${this.lastError}`; this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ - details: `No connection established. Last error: ${this.lastError}`, - })); + details: errorMessage, + }), errorMessage); } else { - this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this)); + this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this), null); } } } @@ -330,12 +343,12 @@ class PickFirstLoadBalancer { clearTimeout(this.connectionDelayTimeout); this.calculateAndReportNewState(); } - updateState(newState, picker) { + updateState(newState, picker, errorMessage) { trace(connectivity_state_1.ConnectivityState[this.currentState] + ' -> ' + connectivity_state_1.ConnectivityState[newState]); this.currentState = newState; - this.channelControlHelper.updateState(newState, picker); + this.channelControlHelper.updateState(newState, picker, errorMessage); } resetSubchannelList() { for (const child of this.children) { @@ -352,10 +365,10 @@ class PickFirstLoadBalancer { this.currentSubchannelIndex = 0; this.children = []; } - connectToAddressList(addressList) { + connectToAddressList(addressList, options) { trace('connectToAddressList([' + addressList.map(address => (0, subchannel_address_1.subchannelAddressToString)(address)) + '])'); const newChildrenList = addressList.map(address => ({ - subchannel: this.channelControlHelper.createSubchannel(address, {}, null), + subchannel: this.channelControlHelper.createSubchannel(address, options), hasReportedTransientFailure: false, })); for (const { subchannel } of newChildrenList) { @@ -385,10 +398,11 @@ class PickFirstLoadBalancer { this.startNextSubchannelConnecting(0); this.calculateAndReportNewState(); } - updateAddressList(endpointList, lbConfig) { + updateAddressList(endpointList, lbConfig, options) { if (!(lbConfig instanceof PickFirstLoadBalancingConfig)) { return; } + this.reportHealthStatus = options[REPORT_HEALTH_STATUS_OPTION_NAME]; /* Previously, an update would be discarded if it was identical to the * previous update, to minimize churn. Now the DNS resolver is * rate-limited, so that is less of a concern. */ @@ -398,16 +412,17 @@ class PickFirstLoadBalancer { const rawAddressList = [].concat(...endpointList.map(endpoint => endpoint.addresses)); trace('updateAddressList([' + rawAddressList.map(address => (0, subchannel_address_1.subchannelAddressToString)(address)) + '])'); if (rawAddressList.length === 0) { - throw new Error('No addresses in endpoint list passed to pick_first'); + this.lastError = 'No addresses resolved'; } const addressList = interleaveAddressFamilies(rawAddressList); this.latestAddressList = addressList; - this.connectToAddressList(addressList); + this.latestOptions = options; + this.connectToAddressList(addressList, options); } exitIdle() { if (this.currentState === connectivity_state_1.ConnectivityState.IDLE && this.latestAddressList) { - this.connectToAddressList(this.latestAddressList); + this.connectToAddressList(this.latestAddressList, this.latestOptions); } } resetBackoff() { @@ -430,21 +445,22 @@ const LEAF_CONFIG = new PickFirstLoadBalancingConfig(false); * that more closely reflects how it will be used as a leaf balancer. */ class LeafLoadBalancer { - constructor(endpoint, channelControlHelper, credentials, options) { + constructor(endpoint, channelControlHelper, options) { this.endpoint = endpoint; + this.options = options; this.latestState = connectivity_state_1.ConnectivityState.IDLE; const childChannelControlHelper = (0, load_balancer_1.createChildChannelControlHelper)(channelControlHelper, { - updateState: (connectivityState, picker) => { + updateState: (connectivityState, picker, errorMessage) => { this.latestState = connectivityState; this.latestPicker = picker; - channelControlHelper.updateState(connectivityState, picker); + channelControlHelper.updateState(connectivityState, picker, errorMessage); }, }); - this.pickFirstBalancer = new PickFirstLoadBalancer(childChannelControlHelper, credentials, Object.assign(Object.assign({}, options), { [REPORT_HEALTH_STATUS_OPTION_NAME]: true })); + this.pickFirstBalancer = new PickFirstLoadBalancer(childChannelControlHelper); this.latestPicker = new picker_1.QueuePicker(this.pickFirstBalancer); } startConnecting() { - this.pickFirstBalancer.updateAddressList([this.endpoint], LEAF_CONFIG); + this.pickFirstBalancer.updateAddressList([this.endpoint], LEAF_CONFIG, Object.assign(Object.assign({}, this.options), { [REPORT_HEALTH_STATUS_OPTION_NAME]: true })); } /** * Update the endpoint associated with this LeafLoadBalancer to a new @@ -452,7 +468,8 @@ class LeafLoadBalancer { * attempt is not already in progress. * @param newEndpoint */ - updateEndpoint(newEndpoint) { + updateEndpoint(newEndpoint, newOptions) { + this.options = newOptions; this.endpoint = newEndpoint; if (this.latestState !== connectivity_state_1.ConnectivityState.IDLE) { this.startConnecting(); diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js index 2984b3e7f2af0be620b624dc9e7b99ac3e530425..5bf36eee24934205d0d82b40f222c291a68ff10a 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer-round-robin.js @@ -65,17 +65,15 @@ class RoundRobinPicker { } } class RoundRobinLoadBalancer { - constructor(channelControlHelper, credentials, options) { + constructor(channelControlHelper) { this.channelControlHelper = channelControlHelper; - this.credentials = credentials; - this.options = options; this.children = []; this.currentState = connectivity_state_1.ConnectivityState.IDLE; this.currentReadyPicker = null; this.updatesPaused = false; this.lastError = null; this.childChannelControlHelper = (0, load_balancer_1.createChildChannelControlHelper)(channelControlHelper, { - updateState: (connectivityState, picker) => { + updateState: (connectivityState, picker, errorMessage) => { /* Ensure that name resolution is requested again after active * connections are dropped. This is more aggressive than necessary to * accomplish that, so we are counting on resolvers to have @@ -83,6 +81,9 @@ class RoundRobinLoadBalancer { if (this.currentState === connectivity_state_1.ConnectivityState.READY && connectivityState !== connectivity_state_1.ConnectivityState.READY) { this.channelControlHelper.requestReresolution(); } + if (errorMessage) { + this.lastError = errorMessage; + } this.calculateAndUpdateState(); }, }); @@ -108,18 +109,19 @@ class RoundRobinLoadBalancer { this.updateState(connectivity_state_1.ConnectivityState.READY, new RoundRobinPicker(readyChildren.map(child => ({ endpoint: child.getEndpoint(), picker: child.getPicker(), - })), index)); + })), index), null); } else if (this.countChildrenWithState(connectivity_state_1.ConnectivityState.CONNECTING) > 0) { - this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this)); + this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, new picker_1.QueuePicker(this), null); } else if (this.countChildrenWithState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE) > 0) { + const errorMessage = `round_robin: No connection established. Last error: ${this.lastError}`; this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker({ - details: `No connection established. Last error: ${this.lastError}`, - })); + details: errorMessage, + }), errorMessage); } else { - this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this)); + this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this), null); } /* round_robin should keep all children connected, this is how we do that. * We can't do this more efficiently in the individual child's updateState @@ -131,7 +133,7 @@ class RoundRobinLoadBalancer { } } } - updateState(newState, picker) { + updateState(newState, picker, errorMessage) { trace(connectivity_state_1.ConnectivityState[this.currentState] + ' -> ' + connectivity_state_1.ConnectivityState[newState]); @@ -142,18 +144,18 @@ class RoundRobinLoadBalancer { this.currentReadyPicker = null; } this.currentState = newState; - this.channelControlHelper.updateState(newState, picker); + this.channelControlHelper.updateState(newState, picker, errorMessage); } resetSubchannelList() { for (const child of this.children) { child.destroy(); } } - updateAddressList(endpointList, lbConfig) { + updateAddressList(endpointList, lbConfig, options) { this.resetSubchannelList(); trace('Connect to endpoint list ' + endpointList.map(subchannel_address_1.endpointToString)); this.updatesPaused = true; - this.children = endpointList.map(endpoint => new load_balancer_pick_first_1.LeafLoadBalancer(endpoint, this.childChannelControlHelper, this.credentials, this.options)); + this.children = endpointList.map(endpoint => new load_balancer_pick_first_1.LeafLoadBalancer(endpoint, this.childChannelControlHelper, options)); for (const child of this.children) { child.startConnecting(); } diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer.js b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer.js index 643f9d27abeecb3c50361a71ce5d7951184cc5b1..adda9c643aabb8aaed969752a31e53c2aad25983 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancer.js @@ -55,10 +55,10 @@ function registerLoadBalancerType(typeName, loadBalancerType, loadBalancingConfi function registerDefaultLoadBalancerType(typeName) { defaultLoadBalancerType = typeName; } -function createLoadBalancer(config, channelControlHelper, credentials, options) { +function createLoadBalancer(config, channelControlHelper) { const typeName = config.getLoadBalancerName(); if (typeName in registeredLoadBalancerTypes) { - return new registeredLoadBalancerTypes[typeName].LoadBalancer(channelControlHelper, credentials, options); + return new registeredLoadBalancerTypes[typeName].LoadBalancer(channelControlHelper); } else { return null; diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js index 857b50d6d97aa8ecac3fee8ba83aa927ababe134..38b4f274c981ecdf3dd20a53de02a35665d10a8b 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/load-balancing-call.js @@ -126,10 +126,11 @@ class LoadBalancingCall { ((_b = pickResult.status) === null || _b === void 0 ? void 0 : _b.details)); switch (pickResult.pickResultType) { case picker_1.PickResultType.COMPLETE: - this.credentials + const combinedCallCredentials = this.credentials.compose(pickResult.subchannel.getCallCredentials()); + combinedCallCredentials .generateMetadata({ method_name: this.methodName, service_url: this.serviceUrl }) .then(credsMetadata => { - var _a, _b, _c; + var _a; /* If this call was cancelled (e.g. by the deadline) before * metadata generation finished, we shouldn't do anything with * it. */ @@ -196,8 +197,7 @@ class LoadBalancingCall { }, 'NOT_STARTED'); return; } - (_b = (_a = this.callConfig).onCommitted) === null || _b === void 0 ? void 0 : _b.call(_a); - (_c = pickResult.onCallStarted) === null || _c === void 0 ? void 0 : _c.call(pickResult); + (_a = pickResult.onCallStarted) === null || _a === void 0 ? void 0 : _a.call(pickResult); this.onCallEnded = pickResult.onCallEnded; this.trace('Created child call [' + this.child.getCallNumber() + ']'); if (this.readPending) { diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/resolving-call.js b/.output/server/node_modules/@grpc/grpc-js/build/src/resolving-call.js index 254536d60da4e1886dcefc7a892d913d3f595cae..92e4f2f1f9fd1e726ee827a3f13fef9693320c4c 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/resolving-call.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/resolving-call.js @@ -17,6 +17,7 @@ */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ResolvingCall = void 0; +const call_credentials_1 = require("./call-credentials"); const constants_1 = require("./constants"); const deadline_1 = require("./deadline"); const metadata_1 = require("./metadata"); @@ -24,11 +25,10 @@ const logging = require("./logging"); const control_plane_status_1 = require("./control-plane-status"); const TRACER_NAME = 'resolving_call'; class ResolvingCall { - constructor(channel, method, options, filterStackFactory, credentials, callNumber) { + constructor(channel, method, options, filterStackFactory, callNumber) { this.channel = channel; this.method = method; this.filterStackFactory = filterStackFactory; - this.credentials = credentials; this.callNumber = callNumber; this.child = null; this.readPending = false; @@ -46,6 +46,12 @@ class ResolvingCall { this.deadlineStartTime = null; this.configReceivedTime = null; this.childStartTime = null; + /** + * Credentials configured for this specific call. Does not include + * call credentials associated with the channel credentials used to create + * the channel. + */ + this.credentials = call_credentials_1.CallCredentials.createEmpty(); this.deadline = options.deadline; this.host = options.host; if (options.parentCall) { @@ -190,7 +196,7 @@ class ResolvingCall { this.filterStackFactory.push(config.dynamicFilterFactories); this.filterStack = this.filterStackFactory.createFilter(); this.filterStack.sendMetadata(Promise.resolve(this.metadata)).then(filteredMetadata => { - this.child = this.channel.createInnerCall(config, this.method, this.host, this.credentials, this.deadline); + this.child = this.channel.createRetryingCall(config, this.method, this.host, this.credentials, this.deadline); this.trace('Created child [' + this.child.getCallNumber() + ']'); this.childStartTime = new Date(); this.child.start(filteredMetadata, { @@ -292,7 +298,7 @@ class ResolvingCall { } } setCredentials(credentials) { - this.credentials = this.credentials.compose(credentials); + this.credentials = credentials; } addStatusWatcher(watcher) { this.statusWatchers.push(watcher); diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js b/.output/server/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js index b19a7ade49fba8f02758af7af3aef089b0825913..421f888458595a5d712954f809e75cba49f6171e 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/resolving-load-balancer.js @@ -72,36 +72,39 @@ function findMatchingConfig(service, method, methodConfigs, matchLevel) { return null; } function getDefaultConfigSelector(serviceConfig) { - return function defaultConfigSelector(methodName, metadata) { - var _a, _b; - const splitName = methodName.split('/').filter(x => x.length > 0); - const service = (_a = splitName[0]) !== null && _a !== void 0 ? _a : ''; - const method = (_b = splitName[1]) !== null && _b !== void 0 ? _b : ''; - if (serviceConfig && serviceConfig.methodConfig) { - /* Check for the following in order, and return the first method - * config that matches: - * 1. A name that exactly matches the service and method - * 2. A name with no method set that matches the service - * 3. An empty name - */ - for (const matchLevel of NAME_MATCH_LEVEL_ORDER) { - const matchingConfig = findMatchingConfig(service, method, serviceConfig.methodConfig, matchLevel); - if (matchingConfig) { - return { - methodConfig: matchingConfig, - pickInformation: {}, - status: constants_1.Status.OK, - dynamicFilterFactories: [], - }; + return { + invoke(methodName, metadata) { + var _a, _b; + const splitName = methodName.split('/').filter(x => x.length > 0); + const service = (_a = splitName[0]) !== null && _a !== void 0 ? _a : ''; + const method = (_b = splitName[1]) !== null && _b !== void 0 ? _b : ''; + if (serviceConfig && serviceConfig.methodConfig) { + /* Check for the following in order, and return the first method + * config that matches: + * 1. A name that exactly matches the service and method + * 2. A name with no method set that matches the service + * 3. An empty name + */ + for (const matchLevel of NAME_MATCH_LEVEL_ORDER) { + const matchingConfig = findMatchingConfig(service, method, serviceConfig.methodConfig, matchLevel); + if (matchingConfig) { + return { + methodConfig: matchingConfig, + pickInformation: {}, + status: constants_1.Status.OK, + dynamicFilterFactories: [], + }; + } } } - } - return { - methodConfig: { name: [] }, - pickInformation: {}, - status: constants_1.Status.OK, - dynamicFilterFactories: [], - }; + return { + methodConfig: { name: [] }, + pickInformation: {}, + status: constants_1.Status.OK, + dynamicFilterFactories: [], + }; + }, + unref() { } }; } class ResolvingLoadBalancer { @@ -117,13 +120,15 @@ class ResolvingLoadBalancer { * In practice, that means using the "pick first" load balancer * implmentation */ - constructor(target, channelControlHelper, credentials, channelOptions, onSuccessfulResolution, onFailedResolution) { + constructor(target, channelControlHelper, channelOptions, onSuccessfulResolution, onFailedResolution) { this.target = target; this.channelControlHelper = channelControlHelper; + this.channelOptions = channelOptions; this.onSuccessfulResolution = onSuccessfulResolution; this.onFailedResolution = onFailedResolution; this.latestChildState = connectivity_state_1.ConnectivityState.IDLE; this.latestChildPicker = new picker_1.QueuePicker(this); + this.latestChildErrorMessage = null; /** * This resolving load balancer's current connectivity state. */ @@ -148,7 +153,7 @@ class ResolvingLoadBalancer { methodConfig: [], }; } - this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this)); + this.updateState(connectivity_state_1.ConnectivityState.IDLE, new picker_1.QueuePicker(this), null); this.childLoadBalancer = new load_balancer_child_handler_1.ChildLoadBalancerHandler({ createSubchannel: channelControlHelper.createSubchannel.bind(channelControlHelper), requestReresolution: () => { @@ -165,14 +170,15 @@ class ResolvingLoadBalancer { this.updateResolution(); } }, - updateState: (newState, picker) => { + updateState: (newState, picker, errorMessage) => { this.latestChildState = newState; this.latestChildPicker = picker; - this.updateState(newState, picker); + this.latestChildErrorMessage = errorMessage; + this.updateState(newState, picker, errorMessage); }, addChannelzChild: channelControlHelper.addChannelzChild.bind(channelControlHelper), removeChannelzChild: channelControlHelper.removeChannelzChild.bind(channelControlHelper), - }, credentials, channelOptions); + }); this.innerResolver = (0, resolver_1.createResolver)(target, { onSuccessfulResolution: (endpointList, serviceConfig, serviceConfigError, configSelector, attributes) => { var _a; @@ -216,9 +222,10 @@ class ResolvingLoadBalancer { details: 'All load balancer options in service config are not compatible', metadata: new metadata_1.Metadata(), }); + configSelector === null || configSelector === void 0 ? void 0 : configSelector.unref(); return; } - this.childLoadBalancer.updateAddressList(endpointList, loadBalancingConfig, attributes); + this.childLoadBalancer.updateAddressList(endpointList, loadBalancingConfig, Object.assign(Object.assign({}, this.channelOptions), attributes)); const finalServiceConfig = workingServiceConfig !== null && workingServiceConfig !== void 0 ? workingServiceConfig : this.defaultServiceConfig; this.onSuccessfulResolution(finalServiceConfig, configSelector !== null && configSelector !== void 0 ? configSelector : getDefaultConfigSelector(finalServiceConfig)); }, @@ -236,7 +243,7 @@ class ResolvingLoadBalancer { this.continueResolving = false; } else { - this.updateState(this.latestChildState, this.latestChildPicker); + this.updateState(this.latestChildState, this.latestChildPicker, this.latestChildErrorMessage); } }, backoffOptions); this.backoffTimeout.unref(); @@ -248,11 +255,11 @@ class ResolvingLoadBalancer { * is an appropriate value here if the child LB policy is unset. * Otherwise, we want to delegate to the child here, in case that * triggers something. */ - this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, this.latestChildPicker); + this.updateState(connectivity_state_1.ConnectivityState.CONNECTING, this.latestChildPicker, this.latestChildErrorMessage); } this.backoffTimeout.runOnce(); } - updateState(connectivityState, picker) { + updateState(connectivityState, picker, errorMessage) { trace((0, uri_parser_1.uriToString)(this.target) + ' ' + connectivity_state_1.ConnectivityState[this.currentState] + @@ -263,11 +270,11 @@ class ResolvingLoadBalancer { picker = new picker_1.QueuePicker(this, picker); } this.currentState = connectivityState; - this.channelControlHelper.updateState(connectivityState, picker); + this.channelControlHelper.updateState(connectivityState, picker, errorMessage); } handleResolutionFailure(error) { if (this.latestChildState === connectivity_state_1.ConnectivityState.IDLE) { - this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker(error)); + this.updateState(connectivity_state_1.ConnectivityState.TRANSIENT_FAILURE, new picker_1.UnavailablePicker(error), error.details); this.onFailedResolution(error); } } diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/retrying-call.js b/.output/server/node_modules/@grpc/grpc-js/build/src/retrying-call.js index 265171cb30d5ff14eaedee7460fbf10544b4372e..d3158f2eb533ed8c3107311562f85ad341a80975 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/retrying-call.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/retrying-call.js @@ -140,6 +140,10 @@ class RetryingCall { this.state = 'HEDGING'; this.maxAttempts = Math.min(callConfig.methodConfig.hedgingPolicy.maxAttempts, maxAttemptsLimit); } + else if (channel.getOptions()['grpc.enable_retries'] === 0) { + this.state = 'NO_RETRY'; + this.maxAttempts = 1; + } else { this.state = 'TRANSPARENT_ONLY'; this.maxAttempts = 1; @@ -216,7 +220,16 @@ class RetryingCall { if (this.state !== 'COMMITTED') { return; } - const earliestNeededMessageIndex = this.underlyingCalls[this.committedCallIndex].nextMessageToSend; + let earliestNeededMessageIndex; + if (this.underlyingCalls[this.committedCallIndex].state === 'COMPLETED') { + /* If the committed call is completed, clear all messages, even if some + * have not been sent. */ + earliestNeededMessageIndex = this.getNextBufferIndex(); + } + else { + earliestNeededMessageIndex = + this.underlyingCalls[this.committedCallIndex].nextMessageToSend; + } for (let messageIndex = this.writeBufferOffset; messageIndex < earliestNeededMessageIndex; messageIndex++) { const bufferEntry = this.getBufferEntry(messageIndex); if (bufferEntry.allocated) { @@ -227,17 +240,16 @@ class RetryingCall { this.writeBufferOffset = earliestNeededMessageIndex; } commitCall(index) { + var _a, _b; if (this.state === 'COMMITTED') { return; } - if (this.underlyingCalls[index].state === 'COMPLETED') { - return; - } this.trace('Committing call [' + this.underlyingCalls[index].call.getCallNumber() + '] at index ' + index); this.state = 'COMMITTED'; + (_b = (_a = this.callConfig).onCommitted) === null || _b === void 0 ? void 0 : _b.call(_a); this.committedCallIndex = index; for (let i = 0; i < this.underlyingCalls.length; i++) { if (i === index) { @@ -339,6 +351,7 @@ class RetryingCall { var _a, _b, _c; switch (this.state) { case 'COMMITTED': + case 'NO_RETRY': case 'TRANSPARENT_ONLY': this.commitCall(callIndex); this.reportStatus(status); @@ -422,6 +435,11 @@ class RetryingCall { this.reportStatus(status); return; } + if (this.state === 'NO_RETRY') { + this.commitCall(callIndex); + this.reportStatus(status); + return; + } if (this.state === 'COMMITTED') { this.reportStatus(status); return; diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/server-credentials.js b/.output/server/node_modules/@grpc/grpc-js/build/src/server-credentials.js index 04cf59f88db865935ab7091cdbbfb5db7d26e05b..f8800f8d12894e95413ceaa7a47a1c21fdb7aa51 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/server-credentials.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/server-credentials.js @@ -21,9 +21,11 @@ exports.createCertificateProviderServerCredentials = createCertificateProviderSe exports.createServerCredentialsWithInterceptors = createServerCredentialsWithInterceptors; const tls_helpers_1 = require("./tls-helpers"); class ServerCredentials { - constructor() { + constructor(serverConstructorOptions, contextOptions) { + this.serverConstructorOptions = serverConstructorOptions; this.watchers = new Set(); this.latestContextOptions = null; + this.latestContextOptions = contextOptions !== null && contextOptions !== void 0 ? contextOptions : null; } _addWatcher(watcher) { this.watchers.add(watcher); @@ -40,9 +42,15 @@ class ServerCredentials { watcher(this.latestContextOptions); } } - _getSettings() { + _isSecure() { + return this.serverConstructorOptions !== null; + } + _getSecureContextOptions() { return this.latestContextOptions; } + _getConstructorOptions() { + return this.serverConstructorOptions; + } _getInterceptors() { return []; } @@ -77,18 +85,19 @@ class ServerCredentials { key.push(pair.private_key); } return new SecureServerCredentials({ + requestCert: checkClientCertificate, + ciphers: tls_helpers_1.CIPHER_SUITES, + }, { ca: (_a = rootCerts !== null && rootCerts !== void 0 ? rootCerts : (0, tls_helpers_1.getDefaultRootsData)()) !== null && _a !== void 0 ? _a : undefined, cert, key, - requestCert: checkClientCertificate, - ciphers: tls_helpers_1.CIPHER_SUITES, }); } } exports.ServerCredentials = ServerCredentials; class InsecureServerCredentials extends ServerCredentials { - _isSecure() { - return false; + constructor() { + super(null); } _getSettings() { return null; @@ -98,15 +107,9 @@ class InsecureServerCredentials extends ServerCredentials { } } class SecureServerCredentials extends ServerCredentials { - constructor(options) { - super(); - this.options = options; - } - _isSecure() { - return true; - } - _getSettings() { - return this.options; + constructor(constructorOptions, contextOptions) { + super(constructorOptions, contextOptions); + this.options = Object.assign(Object.assign({}, constructorOptions), contextOptions); } /** * Checks equality by checking the options that are actually set by @@ -193,7 +196,11 @@ class SecureServerCredentials extends ServerCredentials { } class CertificateProviderServerCredentials extends ServerCredentials { constructor(identityCertificateProvider, caCertificateProvider, requireClientCertificate) { - super(); + super({ + requestCert: caCertificateProvider !== null, + rejectUnauthorized: requireClientCertificate, + ciphers: tls_helpers_1.CIPHER_SUITES + }); this.identityCertificateProvider = identityCertificateProvider; this.caCertificateProvider = caCertificateProvider; this.requireClientCertificate = requireClientCertificate; @@ -218,9 +225,6 @@ class CertificateProviderServerCredentials extends ServerCredentials { this.identityCertificateProvider.removeIdentityCertificateListener(this.identityCertificateUpdateListener); } } - _isSecure() { - return true; - } _equals(other) { if (this === other) { return true; @@ -242,14 +246,13 @@ class CertificateProviderServerCredentials extends ServerCredentials { } return { ca: (_a = this.latestCaUpdate) === null || _a === void 0 ? void 0 : _a.caCertificate, - cert: this.latestIdentityUpdate.certificate, - key: this.latestIdentityUpdate.privateKey, - requestCert: this.latestIdentityUpdate !== null, - rejectUnauthorized: this.requireClientCertificate + cert: [this.latestIdentityUpdate.certificate], + key: [this.latestIdentityUpdate.privateKey], }; } finalizeUpdate() { - this.updateSecureContextOptions(this.calculateSecureContextOptions()); + const secureContextOptions = this.calculateSecureContextOptions(); + this.updateSecureContextOptions(secureContextOptions); } handleCaCertificateUpdate(update) { this.latestCaUpdate = update; @@ -265,7 +268,7 @@ function createCertificateProviderServerCredentials(caCertificateProvider, ident } class InterceptorServerCredentials extends ServerCredentials { constructor(childCredentials, interceptors) { - super(); + super({}); this.childCredentials = childCredentials; this.interceptors = interceptors; } @@ -298,6 +301,12 @@ class InterceptorServerCredentials extends ServerCredentials { _removeWatcher(watcher) { this.childCredentials._removeWatcher(watcher); } + _getConstructorOptions() { + return this.childCredentials._getConstructorOptions(); + } + _getSecureContextOptions() { + return this.childCredentials._getSecureContextOptions(); + } } function createServerCredentialsWithInterceptors(credentials, interceptors) { return new InterceptorServerCredentials(credentials, interceptors); diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/server-interceptors.js b/.output/server/node_modules/@grpc/grpc-js/build/src/server-interceptors.js index e58d1905f3822632600be2126533e8cade37e63e..001b8c2231a32a182b0dd9b4643128ef5b3f2b2e 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/server-interceptors.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/server-interceptors.js @@ -215,6 +215,7 @@ class ServerInterceptingCall { var _a, _b, _c, _d; this.nextCall = nextCall; this.processingMetadata = false; + this.sentMetadata = false; this.processingMessage = false; this.pendingMessage = null; this.pendingMessageCallback = null; @@ -254,6 +255,7 @@ class ServerInterceptingCall { } sendMetadata(metadata) { this.processingMetadata = true; + this.sentMetadata = true; this.responder.sendMetadata(metadata, interceptedMetadata => { this.processingMetadata = false; this.nextCall.sendMetadata(interceptedMetadata); @@ -263,6 +265,9 @@ class ServerInterceptingCall { } sendMessage(message, callback) { this.processingMessage = true; + if (!this.sentMetadata) { + this.sendMetadata(new metadata_1.Metadata()); + } this.responder.sendMessage(message, interceptedMessage => { this.processingMessage = false; if (this.processingMetadata) { diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/server.js b/.output/server/node_modules/@grpc/grpc-js/build/src/server.js index 4cdb141ad175f05aeda40c6e2982d7317ee578e1..5d9ebc2f5ce8ae2df33fadddc640368229793cb6 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/server.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/server.js @@ -69,6 +69,9 @@ const MAX_CONNECTION_IDLE_MS = ~(1 << 31); const { HTTP2_HEADER_PATH } = http2.constants; const TRACER_NAME = 'server'; const kMaxAge = Buffer.from('max_age'); +function serverCallTrace(text) { + logging.trace(constants_1.LogVerbosity.DEBUG, 'server_call', text); +} function noop() { } /** * Decorator to wrap a class method with util.deprecate @@ -303,7 +306,12 @@ let Server = (() => { bind(port, creds) { throw new Error('Not implemented. Use bindAsync() instead'); } - registerListenerToChannelz(boundAddress) { + /** + * This API is experimental, so API stability is not guaranteed across minor versions. + * @param boundAddress + * @returns + */ + experimentalRegisterListenerToChannelz(boundAddress) { return (0, channelz_1.registerChannelzSocket)((0, subchannel_address_1.subchannelAddressToString)(boundAddress), () => { return { localAddress: boundAddress, @@ -325,15 +333,21 @@ let Server = (() => { }; }, this.channelzEnabled); } + experimentalUnregisterListenerFromChannelz(channelzRef) { + (0, channelz_1.unregisterChannelzRef)(channelzRef); + } createHttp2Server(credentials) { let http2Server; if (credentials._isSecure()) { - const credentialsSettings = credentials._getSettings(); - const secureServerOptions = Object.assign(Object.assign(Object.assign({}, this.commonServerOptions), credentialsSettings), { enableTrace: this.options['grpc-node.tls_enable_trace'] === 1 }); - let areCredentialsValid = credentialsSettings !== null; + const constructorOptions = credentials._getConstructorOptions(); + const contextOptions = credentials._getSecureContextOptions(); + const secureServerOptions = Object.assign(Object.assign(Object.assign(Object.assign({}, this.commonServerOptions), constructorOptions), contextOptions), { enableTrace: this.options['grpc-node.tls_enable_trace'] === 1 }); + let areCredentialsValid = contextOptions !== null; + this.trace('Initial credentials valid: ' + areCredentialsValid); http2Server = http2.createSecureServer(secureServerOptions); - http2Server.on('connection', (socket) => { + http2Server.prependListener('connection', (socket) => { if (!areCredentialsValid) { + this.trace('Dropped connection from ' + JSON.stringify(socket.address()) + ' due to unloaded credentials'); socket.destroy(); } }); @@ -346,9 +360,17 @@ let Server = (() => { }); const credsWatcher = options => { if (options) { - http2Server.setSecureContext(options); + const secureServer = http2Server; + try { + secureServer.setSecureContext(options); + } + catch (e) { + logging.log(constants_1.LogVerbosity.ERROR, 'Failed to set secure context with error ' + e.message); + options = null; + } } areCredentialsValid = options !== null; + this.trace('Post-update credentials valid: ' + areCredentialsValid); }; credentials._addWatcher(credsWatcher); http2Server.on('close', () => { @@ -391,11 +413,12 @@ let Server = (() => { port: boundAddress.port, }; } - const channelzRef = this.registerListenerToChannelz(boundSubchannelAddress); + const channelzRef = this.experimentalRegisterListenerToChannelz(boundSubchannelAddress); this.listenerChildrenTracker.refChild(channelzRef); this.http2Servers.set(http2Server, { channelzRef: channelzRef, sessions: new Set(), + ownsChannelzRef: true }); boundPortObject.listeningServers.add(http2Server); this.trace('Successfully bound ' + @@ -613,19 +636,25 @@ let Server = (() => { }; }, this.channelzEnabled); } - createConnectionInjector(credentials) { + /** + * This API is experimental, so API stability is not guaranteed across minor versions. + * @param credentials + * @param channelzRef + * @returns + */ + experimentalCreateConnectionInjectorWithChannelzRef(credentials, channelzRef, ownsChannelzRef = false) { if (credentials === null || !(credentials instanceof server_credentials_1.ServerCredentials)) { throw new TypeError('creds must be a ServerCredentials object'); } - const server = this.createHttp2Server(credentials); - const channelzRef = this.registerInjectorToChannelz(); if (this.channelzEnabled) { this.listenerChildrenTracker.refChild(channelzRef); } + const server = this.createHttp2Server(credentials); const sessionsSet = new Set(); this.http2Servers.set(server, { channelzRef: channelzRef, - sessions: sessionsSet + sessions: sessionsSet, + ownsChannelzRef }); return { injectConnection: (connection) => { @@ -650,11 +679,18 @@ let Server = (() => { } }; } + createConnectionInjector(credentials) { + if (credentials === null || !(credentials instanceof server_credentials_1.ServerCredentials)) { + throw new TypeError('creds must be a ServerCredentials object'); + } + const channelzRef = this.registerInjectorToChannelz(); + return this.experimentalCreateConnectionInjectorWithChannelzRef(credentials, channelzRef, true); + } closeServer(server, callback) { this.trace('Closing server with address ' + JSON.stringify(server.address())); const serverInfo = this.http2Servers.get(server); server.close(() => { - if (serverInfo) { + if (serverInfo && serverInfo.ownsChannelzRef) { this.listenerChildrenTracker.unrefChild(serverInfo.channelzRef); (0, channelz_1.unregisterChannelzRef)(serverInfo.channelzRef); } @@ -877,13 +913,13 @@ let Server = (() => { return true; } _retrieveHandler(path) { - this.trace('Received call to method ' + + serverCallTrace('Received call to method ' + path + ' at address ' + this.serverAddressString); const handler = this.handlers.get(path); if (handler === undefined) { - this.trace('No handler registered for method ' + + serverCallTrace('No handler registered for method ' + path + '. Sending UNIMPLEMENTED status.'); return null; diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js b/.output/server/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js index f4afae8fe850378b50ae30ba5c64504b00d9e71d..e6932b3e52b107b535d2ff8a6213142741d90b31 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/subchannel-interface.js @@ -87,6 +87,9 @@ class BaseSubchannelWrapper { realSubchannelEquals(other) { return this.getRealSubchannel() === other.getRealSubchannel(); } + getCallCredentials() { + return this.child.getCallCredentials(); + } } exports.BaseSubchannelWrapper = BaseSubchannelWrapper; //# sourceMappingURL=subchannel-interface.js.map \ No newline at end of file diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/subchannel.js b/.output/server/node_modules/@grpc/grpc-js/build/src/subchannel.js index aa2ceb73ced103cc487e993b447a72f69ecd1d39..16e3d0c38c4820c186a5cf4996932eb4b0af492d 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/subchannel.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/subchannel.js @@ -45,7 +45,6 @@ class Subchannel { this.channelTarget = channelTarget; this.subchannelAddress = subchannelAddress; this.options = options; - this.credentials = credentials; this.connector = connector; /** * The subchannel's current connectivity state. Invariant: `session` === `null` @@ -100,7 +99,7 @@ class Subchannel { this.channelzTrace.addTrace('CT_INFO', 'Subchannel created'); this.trace('Subchannel constructed with options ' + JSON.stringify(options, undefined, 2)); - credentials._ref(); + this.secureConnector = credentials._createSecureConnector(channelTarget, options); } getChannelzInfo() { return { @@ -152,7 +151,7 @@ class Subchannel { options = Object.assign(Object.assign({}, options), { 'grpc.keepalive_time_ms': adjustedKeepaliveTime }); } this.connector - .connect(this.subchannelAddress, this.credentials, options) + .connect(this.subchannelAddress, this.secureConnector, options) .then(transport => { if (this.transitionToState([connectivity_state_1.ConnectivityState.CONNECTING], connectivity_state_1.ConnectivityState.READY)) { this.transport = transport; @@ -253,7 +252,7 @@ class Subchannel { if (this.refcount === 0) { this.channelzTrace.addTrace('CT_INFO', 'Shutting down'); (0, channelz_1.unregisterChannelzRef)(this.channelzRef); - this.credentials._unref(); + this.secureConnector.destroy(); process.nextTick(() => { this.transitionToState([connectivity_state_1.ConnectivityState.CONNECTING, connectivity_state_1.ConnectivityState.READY], connectivity_state_1.ConnectivityState.IDLE); }); @@ -366,6 +365,9 @@ class Subchannel { this.keepaliveTime = newKeepaliveTime; } } + getCallCredentials() { + return this.secureConnector.getCallCredentials(); + } } exports.Subchannel = Subchannel; //# sourceMappingURL=subchannel.js.map \ No newline at end of file diff --git a/.output/server/node_modules/@grpc/grpc-js/build/src/transport.js b/.output/server/node_modules/@grpc/grpc-js/build/src/transport.js index 3ffc0377851d2f91601103ada64aefe622a7874d..0c4c151c167f8211e1ab791ec9a24e5b8383f614 100644 --- a/.output/server/node_modules/@grpc/grpc-js/build/src/transport.js +++ b/.output/server/node_modules/@grpc/grpc-js/build/src/transport.js @@ -18,7 +18,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.Http2SubchannelConnector = void 0; const http2 = require("http2"); -const tls_1 = require("tls"); const channelz_1 = require("./channelz"); const constants_1 = require("./constants"); const http_proxy_1 = require("./http_proxy"); @@ -124,8 +123,8 @@ class Http2Transport { this.trace('connection closed with error ' + error.message); this.handleDisconnect(); }); - session.socket.once('close', () => { - this.trace('connection closed'); + session.socket.once('close', (hadError) => { + this.trace('connection closed. hadError=' + hadError); this.handleDisconnect(); }); if (logging.isTracerEnabled(TRACER_NAME)) { @@ -478,178 +477,119 @@ class Http2SubchannelConnector { trace(text) { logging.trace(constants_1.LogVerbosity.DEBUG, TRACER_NAME, (0, uri_parser_1.uriToString)(this.channelTarget) + ' ' + text); } - createSession(address, credentials, options, proxyConnectionResult) { + createSession(secureConnectResult, address, options) { if (this.isShutdown) { return Promise.reject(); } + if (secureConnectResult.socket.closed) { + return Promise.reject('Connection closed before starting HTTP/2 handshake'); + } return new Promise((resolve, reject) => { - var _a, _b, _c, _d; - let remoteName; - if (proxyConnectionResult.realTarget) { - remoteName = (0, uri_parser_1.uriToString)(proxyConnectionResult.realTarget); - this.trace('creating HTTP/2 session through proxy to ' + - (0, uri_parser_1.uriToString)(proxyConnectionResult.realTarget)); - } - else { - remoteName = null; - this.trace('creating HTTP/2 session to ' + (0, subchannel_address_1.subchannelAddressToString)(address)); - } - const targetAuthority = (0, resolver_1.getDefaultAuthority)((_a = proxyConnectionResult.realTarget) !== null && _a !== void 0 ? _a : this.channelTarget); - let connectionOptions = credentials._getConnectionOptions(); - if (!connectionOptions) { - reject('Credentials not loaded'); - return; - } - connectionOptions.maxSendHeaderBlockLength = Number.MAX_SAFE_INTEGER; - if ('grpc-node.max_session_memory' in options) { - connectionOptions.maxSessionMemory = - options['grpc-node.max_session_memory']; - } - else { - /* By default, set a very large max session memory limit, to effectively - * disable enforcement of the limit. Some testing indicates that Node's - * behavior degrades badly when this limit is reached, so we solve that - * by disabling the check entirely. */ - connectionOptions.maxSessionMemory = Number.MAX_SAFE_INTEGER; - } - let addressScheme = 'http://'; - if ('secureContext' in connectionOptions) { - addressScheme = 'https://'; - // If provided, the value of grpc.ssl_target_name_override should be used - // to override the target hostname when checking server identity. - // This option is used for testing only. - if (options['grpc.ssl_target_name_override']) { - const sslTargetNameOverride = options['grpc.ssl_target_name_override']; - const originalCheckServerIdentity = (_b = connectionOptions.checkServerIdentity) !== null && _b !== void 0 ? _b : tls_1.checkServerIdentity; - connectionOptions.checkServerIdentity = (host, cert) => { - return originalCheckServerIdentity(sslTargetNameOverride, cert); - }; - connectionOptions.servername = sslTargetNameOverride; - } - else { - const authorityHostname = (_d = (_c = (0, uri_parser_1.splitHostPort)(targetAuthority)) === null || _c === void 0 ? void 0 : _c.host) !== null && _d !== void 0 ? _d : 'localhost'; - // We want to always set servername to support SNI - connectionOptions.servername = authorityHostname; - } - if (proxyConnectionResult.socket) { - /* This is part of the workaround for - * https://github.com/nodejs/node/issues/32922. Without that bug, - * proxyConnectionResult.socket would always be a plaintext socket and - * this would say - * connectionOptions.socket = proxyConnectionResult.socket; */ - connectionOptions.createConnection = (authority, option) => { - return proxyConnectionResult.socket; - }; + var _a; + let remoteName = null; + let realTarget = this.channelTarget; + if ('grpc.http_connect_target' in options) { + const parsedTarget = (0, uri_parser_1.parseUri)(options['grpc.http_connect_target']); + if (parsedTarget) { + realTarget = parsedTarget; + remoteName = (0, uri_parser_1.uriToString)(parsedTarget); } } - else { - /* In all but the most recent versions of Node, http2.connect does not use - * the options when establishing plaintext connections, so we need to - * establish that connection explicitly. */ - connectionOptions.createConnection = (authority, option) => { - if (proxyConnectionResult.socket) { - return proxyConnectionResult.socket; - } - else { - /* net.NetConnectOpts is declared in a way that is more restrictive - * than what net.connect will actually accept, so we use the type - * assertion to work around that. */ - return net.connect(address); - } - }; - } - connectionOptions = Object.assign(Object.assign(Object.assign({}, connectionOptions), address), { enableTrace: options['grpc-node.tls_enable_trace'] === 1 }); - /* http2.connect uses the options here: - * https://github.com/nodejs/node/blob/70c32a6d190e2b5d7b9ff9d5b6a459d14e8b7d59/lib/internal/http2/core.js#L3028-L3036 - * The spread operator overides earlier values with later ones, so any port - * or host values in the options will be used rather than any values extracted - * from the first argument. In addition, the path overrides the host and port, - * as documented for plaintext connections here: - * https://nodejs.org/api/net.html#net_socket_connect_options_connectlistener - * and for TLS connections here: - * https://nodejs.org/api/tls.html#tls_tls_connect_options_callback. In - * earlier versions of Node, http2.connect passes these options to - * tls.connect but not net.connect, so in the insecure case we still need - * to set the createConnection option above to create the connection - * explicitly. We cannot do that in the TLS case because http2.connect - * passes necessary additional options to tls.connect. - * The first argument just needs to be parseable as a URL and the scheme - * determines whether the connection will be established over TLS or not. - */ - const session = http2.connect(addressScheme + targetAuthority, connectionOptions); - this.session = session; - let errorMessage = 'Failed to connect'; - let reportedError = false; - session.unref(); - session.once('connect', () => { - session.removeAllListeners(); - resolve(new Http2Transport(session, address, options, remoteName)); - this.session = null; - }); - session.once('close', () => { + const scheme = secureConnectResult.secure ? 'https' : 'http'; + const targetPath = (0, resolver_1.getDefaultAuthority)(realTarget); + const closeHandler = () => { + var _a; + (_a = this.session) === null || _a === void 0 ? void 0 : _a.destroy(); this.session = null; // Leave time for error event to happen before rejecting setImmediate(() => { if (!reportedError) { reportedError = true; - reject(`${errorMessage} (${new Date().toISOString()})`); + reject(`${errorMessage.trim()} (${new Date().toISOString()})`); } }); - }); - session.once('error', error => { + }; + const errorHandler = (error) => { + var _a; + (_a = this.session) === null || _a === void 0 ? void 0 : _a.destroy(); errorMessage = error.message; this.trace('connection failed with error ' + errorMessage); if (!reportedError) { reportedError = true; reject(`${errorMessage} (${new Date().toISOString()})`); } + }; + const session = http2.connect(`${scheme}://${targetPath}`, { + createConnection: (authority, option) => { + return secureConnectResult.socket; + }, + settings: { + initialWindowSize: (_a = options['grpc-node.flow_control_window']) !== null && _a !== void 0 ? _a : http2.getDefaultSettings().initialWindowSize, + } + }); + this.session = session; + let errorMessage = 'Failed to connect'; + let reportedError = false; + session.unref(); + session.once('remoteSettings', () => { + session.removeAllListeners(); + secureConnectResult.socket.removeListener('close', closeHandler); + secureConnectResult.socket.removeListener('error', errorHandler); + resolve(new Http2Transport(session, address, options, remoteName)); + this.session = null; }); + session.once('close', closeHandler); + session.once('error', errorHandler); + secureConnectResult.socket.once('close', closeHandler); + secureConnectResult.socket.once('error', errorHandler); }); } - connect(address, credentials, options) { - var _a, _b, _c; - if (this.isShutdown) { - return Promise.reject(); - } - /* Pass connection options through to the proxy so that it's able to - * upgrade it's connection to support tls if needed. - * This is a workaround for https://github.com/nodejs/node/issues/32922 - * See https://github.com/grpc/grpc-node/pull/1369 for more info. */ - const connectionOptions = credentials._getConnectionOptions(); - if (!connectionOptions) { - return Promise.reject('Credentials not loaded'); - } - if ('secureContext' in connectionOptions) { - connectionOptions.ALPNProtocols = ['h2']; - // If provided, the value of grpc.ssl_target_name_override should be used - // to override the target hostname when checking server identity. - // This option is used for testing only. - if (options['grpc.ssl_target_name_override']) { - const sslTargetNameOverride = options['grpc.ssl_target_name_override']; - const originalCheckServerIdentity = (_a = connectionOptions.checkServerIdentity) !== null && _a !== void 0 ? _a : tls_1.checkServerIdentity; - connectionOptions.checkServerIdentity = (host, cert) => { - return originalCheckServerIdentity(sslTargetNameOverride, cert); - }; - connectionOptions.servername = sslTargetNameOverride; + tcpConnect(address, options) { + return (0, http_proxy_1.getProxiedConnection)(address, options).then(proxiedSocket => { + if (proxiedSocket) { + return proxiedSocket; } else { - if ('grpc.http_connect_target' in options) { - /* This is more or less how servername will be set in createSession - * if a connection is successfully established through the proxy. - * If the proxy is not used, these connectionOptions are discarded - * anyway */ - const targetPath = (0, resolver_1.getDefaultAuthority)((_b = (0, uri_parser_1.parseUri)(options['grpc.http_connect_target'])) !== null && _b !== void 0 ? _b : { - path: 'localhost', + return new Promise((resolve, reject) => { + const closeCallback = () => { + reject(new Error('Socket closed')); + }; + const errorCallback = (error) => { + reject(error); + }; + const socket = net.connect(address, () => { + socket.removeListener('close', closeCallback); + socket.removeListener('error', errorCallback); + resolve(socket); }); - const hostPort = (0, uri_parser_1.splitHostPort)(targetPath); - connectionOptions.servername = (_c = hostPort === null || hostPort === void 0 ? void 0 : hostPort.host) !== null && _c !== void 0 ? _c : targetPath; - } - } - if (options['grpc-node.tls_enable_trace']) { - connectionOptions.enableTrace = true; + socket.once('close', closeCallback); + socket.once('error', errorCallback); + }); } + }); + } + async connect(address, secureConnector, options) { + if (this.isShutdown) { + return Promise.reject(); + } + let tcpConnection = null; + let secureConnectResult = null; + const addressString = (0, subchannel_address_1.subchannelAddressToString)(address); + try { + this.trace(addressString + ' Waiting for secureConnector to be ready'); + await secureConnector.waitForReady(); + this.trace(addressString + ' secureConnector is ready'); + tcpConnection = await this.tcpConnect(address, options); + this.trace(addressString + ' Established TCP connection'); + secureConnectResult = await secureConnector.connect(tcpConnection); + this.trace(addressString + ' Established secure connection'); + return this.createSession(secureConnectResult, address, options); + } + catch (e) { + tcpConnection === null || tcpConnection === void 0 ? void 0 : tcpConnection.destroy(); + secureConnectResult === null || secureConnectResult === void 0 ? void 0 : secureConnectResult.socket.destroy(); + throw e; } - return (0, http_proxy_1.getProxiedConnection)(address, options, connectionOptions).then(result => this.createSession(address, credentials, options, result)); } shutdown() { var _a; diff --git a/.output/server/node_modules/@grpc/grpc-js/package.json b/.output/server/node_modules/@grpc/grpc-js/package.json index 5b7599b081cc2d61b8a3d28f997f720d1e39a254..1b90a13412a04c169d9ed60e9cefe1ce4eb27a80 100644 --- a/.output/server/node_modules/@grpc/grpc-js/package.json +++ b/.output/server/node_modules/@grpc/grpc-js/package.json @@ -1,6 +1,6 @@ { "name": "@grpc/grpc-js", - "version": "1.12.6", + "version": "1.13.0", "description": "gRPC Library for Node - pure JS implementation", "homepage": "https://grpc.io/", "repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js", diff --git a/.output/server/node_modules/jose/dist/webapi/jwe/compact/encrypt.js b/.output/server/node_modules/jose/dist/webapi/jwe/compact/encrypt.js index e4a44d0cee47255262aabcbf629a0875c701b92f..5492e2c2e1a6221d161622d97cd3dd73d093495e 100644 --- a/.output/server/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +++ b/.output/server/node_modules/jose/dist/webapi/jwe/compact/encrypt.js @@ -1,27 +1,27 @@ import { FlattenedEncrypt } from '../flattened/encrypt.js'; export class CompactEncrypt { - _flattened; + #flattened; constructor(plaintext) { - this._flattened = new FlattenedEncrypt(plaintext); + this.#flattened = new FlattenedEncrypt(plaintext); } setContentEncryptionKey(cek) { - this._flattened.setContentEncryptionKey(cek); + this.#flattened.setContentEncryptionKey(cek); return this; } setInitializationVector(iv) { - this._flattened.setInitializationVector(iv); + this.#flattened.setInitializationVector(iv); return this; } setProtectedHeader(protectedHeader) { - this._flattened.setProtectedHeader(protectedHeader); + this.#flattened.setProtectedHeader(protectedHeader); return this; } setKeyManagementParameters(parameters) { - this._flattened.setKeyManagementParameters(parameters); + this.#flattened.setKeyManagementParameters(parameters); return this; } async encrypt(key, options) { - const jwe = await this._flattened.encrypt(key, options); + const jwe = await this.#flattened.encrypt(key, options); return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join('.'); } } diff --git a/.output/server/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js b/.output/server/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js index b2e4186944f9a43e0a2c1f7a6a4dc1275445355c..fa1a09a64c72fecd7e962dab780f358d0aa3f32e 100644 --- a/.output/server/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +++ b/.output/server/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js @@ -9,79 +9,79 @@ import validateCrit from '../../lib/validate_crit.js'; import normalizeKey from '../../lib/normalize_key.js'; import checkKeyType from '../../lib/check_key_type.js'; export class FlattenedEncrypt { - _plaintext; - _protectedHeader; - _sharedUnprotectedHeader; - _unprotectedHeader; - _aad; - _cek; - _iv; - _keyManagementParameters; + #plaintext; + #protectedHeader; + #sharedUnprotectedHeader; + #unprotectedHeader; + #aad; + #cek; + #iv; + #keyManagementParameters; constructor(plaintext) { if (!(plaintext instanceof Uint8Array)) { throw new TypeError('plaintext must be an instance of Uint8Array'); } - this._plaintext = plaintext; + this.#plaintext = plaintext; } setKeyManagementParameters(parameters) { - if (this._keyManagementParameters) { + if (this.#keyManagementParameters) { throw new TypeError('setKeyManagementParameters can only be called once'); } - this._keyManagementParameters = parameters; + this.#keyManagementParameters = parameters; return this; } setProtectedHeader(protectedHeader) { - if (this._protectedHeader) { + if (this.#protectedHeader) { throw new TypeError('setProtectedHeader can only be called once'); } - this._protectedHeader = protectedHeader; + this.#protectedHeader = protectedHeader; return this; } setSharedUnprotectedHeader(sharedUnprotectedHeader) { - if (this._sharedUnprotectedHeader) { + if (this.#sharedUnprotectedHeader) { throw new TypeError('setSharedUnprotectedHeader can only be called once'); } - this._sharedUnprotectedHeader = sharedUnprotectedHeader; + this.#sharedUnprotectedHeader = sharedUnprotectedHeader; return this; } setUnprotectedHeader(unprotectedHeader) { - if (this._unprotectedHeader) { + if (this.#unprotectedHeader) { throw new TypeError('setUnprotectedHeader can only be called once'); } - this._unprotectedHeader = unprotectedHeader; + this.#unprotectedHeader = unprotectedHeader; return this; } setAdditionalAuthenticatedData(aad) { - this._aad = aad; + this.#aad = aad; return this; } setContentEncryptionKey(cek) { - if (this._cek) { + if (this.#cek) { throw new TypeError('setContentEncryptionKey can only be called once'); } - this._cek = cek; + this.#cek = cek; return this; } setInitializationVector(iv) { - if (this._iv) { + if (this.#iv) { throw new TypeError('setInitializationVector can only be called once'); } - this._iv = iv; + this.#iv = iv; return this; } async encrypt(key, options) { - if (!this._protectedHeader && !this._unprotectedHeader && !this._sharedUnprotectedHeader) { + if (!this.#protectedHeader && !this.#unprotectedHeader && !this.#sharedUnprotectedHeader) { throw new JWEInvalid('either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()'); } - if (!isDisjoint(this._protectedHeader, this._unprotectedHeader, this._sharedUnprotectedHeader)) { + if (!isDisjoint(this.#protectedHeader, this.#unprotectedHeader, this.#sharedUnprotectedHeader)) { throw new JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint'); } const joseHeader = { - ...this._protectedHeader, - ...this._unprotectedHeader, - ...this._sharedUnprotectedHeader, + ...this.#protectedHeader, + ...this.#unprotectedHeader, + ...this.#sharedUnprotectedHeader, }; - validateCrit(JWEInvalid, new Map(), options?.crit, this._protectedHeader, joseHeader); + validateCrit(JWEInvalid, new Map(), options?.crit, this.#protectedHeader, joseHeader); if (joseHeader.zip !== undefined) { throw new JOSENotSupported('JWE "zip" (Compression Algorithm) Header Parameter is not supported.'); } @@ -93,7 +93,7 @@ export class FlattenedEncrypt { throw new JWEInvalid('JWE "enc" (Encryption Algorithm) Header Parameter missing or invalid'); } let encryptedKey; - if (this._cek && (alg === 'dir' || alg === 'ECDH-ES')) { + if (this.#cek && (alg === 'dir' || alg === 'ECDH-ES')) { throw new TypeError(`setContentEncryptionKey cannot be called with JWE "alg" (Algorithm) Header ${alg}`); } checkKeyType(alg === 'dir' ? enc : alg, key, 'encrypt'); @@ -101,41 +101,41 @@ export class FlattenedEncrypt { { let parameters; const k = await normalizeKey(key, alg); - ({ cek, encryptedKey, parameters } = await encryptKeyManagement(alg, enc, k, this._cek, this._keyManagementParameters)); + ({ cek, encryptedKey, parameters } = await encryptKeyManagement(alg, enc, k, this.#cek, this.#keyManagementParameters)); if (parameters) { if (options && unprotected in options) { - if (!this._unprotectedHeader) { + if (!this.#unprotectedHeader) { this.setUnprotectedHeader(parameters); } else { - this._unprotectedHeader = { ...this._unprotectedHeader, ...parameters }; + this.#unprotectedHeader = { ...this.#unprotectedHeader, ...parameters }; } } - else if (!this._protectedHeader) { + else if (!this.#protectedHeader) { this.setProtectedHeader(parameters); } else { - this._protectedHeader = { ...this._protectedHeader, ...parameters }; + this.#protectedHeader = { ...this.#protectedHeader, ...parameters }; } } } let additionalData; let protectedHeader; let aadMember; - if (this._protectedHeader) { - protectedHeader = encoder.encode(b64u(JSON.stringify(this._protectedHeader))); + if (this.#protectedHeader) { + protectedHeader = encoder.encode(b64u(JSON.stringify(this.#protectedHeader))); } else { protectedHeader = encoder.encode(''); } - if (this._aad) { - aadMember = b64u(this._aad); + if (this.#aad) { + aadMember = b64u(this.#aad); additionalData = concat(protectedHeader, encoder.encode('.'), encoder.encode(aadMember)); } else { additionalData = protectedHeader; } - const { ciphertext, tag, iv } = await encrypt(enc, this._plaintext, cek, this._iv, additionalData); + const { ciphertext, tag, iv } = await encrypt(enc, this.#plaintext, cek, this.#iv, additionalData); const jwe = { ciphertext: b64u(ciphertext), }; @@ -151,14 +151,14 @@ export class FlattenedEncrypt { if (aadMember) { jwe.aad = aadMember; } - if (this._protectedHeader) { + if (this.#protectedHeader) { jwe.protected = decoder.decode(protectedHeader); } - if (this._sharedUnprotectedHeader) { - jwe.unprotected = this._sharedUnprotectedHeader; + if (this.#sharedUnprotectedHeader) { + jwe.unprotected = this.#sharedUnprotectedHeader; } - if (this._unprotectedHeader) { - jwe.header = this._unprotectedHeader; + if (this.#unprotectedHeader) { + jwe.header = this.#unprotectedHeader; } return jwe; } diff --git a/.output/server/node_modules/jose/dist/webapi/jwe/general/encrypt.js b/.output/server/node_modules/jose/dist/webapi/jwe/general/encrypt.js index b0b7e1d8eedc677a69fa58e389cea00bbb7621ad..7240faf2b7da9dc6a610507d4196c8f82278747f 100644 --- a/.output/server/node_modules/jose/dist/webapi/jwe/general/encrypt.js +++ b/.output/server/node_modules/jose/dist/webapi/jwe/general/encrypt.js @@ -9,12 +9,12 @@ import validateCrit from '../../lib/validate_crit.js'; import normalizeKey from '../../lib/normalize_key.js'; import checkKeyType from '../../lib/check_key_type.js'; class IndividualRecipient { - parent; + #parent; unprotectedHeader; key; options; constructor(enc, key, options) { - this.parent = enc; + this.#parent = enc; this.key = key; this.options = options; } @@ -26,57 +26,57 @@ class IndividualRecipient { return this; } addRecipient(...args) { - return this.parent.addRecipient(...args); + return this.#parent.addRecipient(...args); } encrypt(...args) { - return this.parent.encrypt(...args); + return this.#parent.encrypt(...args); } done() { - return this.parent; + return this.#parent; } } export class GeneralEncrypt { - _plaintext; - _recipients = []; - _protectedHeader; - _unprotectedHeader; - _aad; + #plaintext; + #recipients = []; + #protectedHeader; + #unprotectedHeader; + #aad; constructor(plaintext) { - this._plaintext = plaintext; + this.#plaintext = plaintext; } addRecipient(key, options) { const recipient = new IndividualRecipient(this, key, { crit: options?.crit }); - this._recipients.push(recipient); + this.#recipients.push(recipient); return recipient; } setProtectedHeader(protectedHeader) { - if (this._protectedHeader) { + if (this.#protectedHeader) { throw new TypeError('setProtectedHeader can only be called once'); } - this._protectedHeader = protectedHeader; + this.#protectedHeader = protectedHeader; return this; } setSharedUnprotectedHeader(sharedUnprotectedHeader) { - if (this._unprotectedHeader) { + if (this.#unprotectedHeader) { throw new TypeError('setSharedUnprotectedHeader can only be called once'); } - this._unprotectedHeader = sharedUnprotectedHeader; + this.#unprotectedHeader = sharedUnprotectedHeader; return this; } setAdditionalAuthenticatedData(aad) { - this._aad = aad; + this.#aad = aad; return this; } async encrypt() { - if (!this._recipients.length) { + if (!this.#recipients.length) { throw new JWEInvalid('at least one recipient must be added'); } - if (this._recipients.length === 1) { - const [recipient] = this._recipients; - const flattened = await new FlattenedEncrypt(this._plaintext) - .setAdditionalAuthenticatedData(this._aad) - .setProtectedHeader(this._protectedHeader) - .setSharedUnprotectedHeader(this._unprotectedHeader) + if (this.#recipients.length === 1) { + const [recipient] = this.#recipients; + const flattened = await new FlattenedEncrypt(this.#plaintext) + .setAdditionalAuthenticatedData(this.#aad) + .setProtectedHeader(this.#protectedHeader) + .setSharedUnprotectedHeader(this.#unprotectedHeader) .setUnprotectedHeader(recipient.unprotectedHeader) .encrypt(recipient.key, { ...recipient.options }); const jwe = { @@ -98,14 +98,14 @@ export class GeneralEncrypt { return jwe; } let enc; - for (let i = 0; i < this._recipients.length; i++) { - const recipient = this._recipients[i]; - if (!isDisjoint(this._protectedHeader, this._unprotectedHeader, recipient.unprotectedHeader)) { + for (let i = 0; i < this.#recipients.length; i++) { + const recipient = this.#recipients[i]; + if (!isDisjoint(this.#protectedHeader, this.#unprotectedHeader, recipient.unprotectedHeader)) { throw new JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint'); } const joseHeader = { - ...this._protectedHeader, - ...this._unprotectedHeader, + ...this.#protectedHeader, + ...this.#unprotectedHeader, ...recipient.unprotectedHeader, }; const { alg } = joseHeader; @@ -124,7 +124,7 @@ export class GeneralEncrypt { else if (enc !== joseHeader.enc) { throw new JWEInvalid('JWE "enc" (Encryption Algorithm) Header Parameter must be the same for all recipients'); } - validateCrit(JWEInvalid, new Map(), recipient.options.crit, this._protectedHeader, joseHeader); + validateCrit(JWEInvalid, new Map(), recipient.options.crit, this.#protectedHeader, joseHeader); if (joseHeader.zip !== undefined) { throw new JOSENotSupported('JWE "zip" (Compression Algorithm) Header Parameter is not supported.'); } @@ -136,22 +136,22 @@ export class GeneralEncrypt { recipients: [], tag: '', }; - for (let i = 0; i < this._recipients.length; i++) { - const recipient = this._recipients[i]; + for (let i = 0; i < this.#recipients.length; i++) { + const recipient = this.#recipients[i]; const target = {}; jwe.recipients.push(target); const joseHeader = { - ...this._protectedHeader, - ...this._unprotectedHeader, + ...this.#protectedHeader, + ...this.#unprotectedHeader, ...recipient.unprotectedHeader, }; const p2c = joseHeader.alg.startsWith('PBES2') ? 2048 + i : undefined; if (i === 0) { - const flattened = await new FlattenedEncrypt(this._plaintext) - .setAdditionalAuthenticatedData(this._aad) + const flattened = await new FlattenedEncrypt(this.#plaintext) + .setAdditionalAuthenticatedData(this.#aad) .setContentEncryptionKey(cek) - .setProtectedHeader(this._protectedHeader) - .setSharedUnprotectedHeader(this._unprotectedHeader) + .setProtectedHeader(this.#protectedHeader) + .setSharedUnprotectedHeader(this.#unprotectedHeader) .setUnprotectedHeader(recipient.unprotectedHeader) .setKeyManagementParameters({ p2c }) .encrypt(recipient.key, { @@ -173,8 +173,8 @@ export class GeneralEncrypt { continue; } const alg = recipient.unprotectedHeader?.alg || - this._protectedHeader?.alg || - this._unprotectedHeader?.alg; + this.#protectedHeader?.alg || + this.#unprotectedHeader?.alg; checkKeyType(alg === 'dir' ? enc : alg, recipient.key, 'encrypt'); const k = await normalizeKey(recipient.key, alg); const { encryptedKey, parameters } = await encryptKeyManagement(alg, enc, k, cek, { p2c }); diff --git a/.output/server/node_modules/jose/dist/webapi/jwks/local.js b/.output/server/node_modules/jose/dist/webapi/jwks/local.js index d92a592e475cfab869b8e5fd6798b6445d3d4f10..0f82b1f461c8d62ad150b07b73390e5fa60e4e98 100644 --- a/.output/server/node_modules/jose/dist/webapi/jwks/local.js +++ b/.output/server/node_modules/jose/dist/webapi/jwks/local.js @@ -23,25 +23,22 @@ function isJWKSLike(jwks) { function isJWKLike(key) { return isObject(key); } -function clone(obj) { - if (typeof structuredClone === 'function') { - return structuredClone(obj); - } - return JSON.parse(JSON.stringify(obj)); -} class LocalJWKSet { - _jwks; - _cached = new WeakMap(); + #jwks; + #cached = new WeakMap(); constructor(jwks) { if (!isJWKSLike(jwks)) { throw new JWKSInvalid('JSON Web Key Set malformed'); } - this._jwks = clone(jwks); + this.#jwks = structuredClone(jwks); + } + jwks() { + return this.#jwks; } async getKey(protectedHeader, token) { const { alg, kid } = { ...protectedHeader, ...token?.header }; const kty = getKtyFromAlg(alg); - const candidates = this._jwks.keys.filter((jwk) => { + const candidates = this.#jwks.keys.filter((jwk) => { let candidate = kty === jwk.kty; if (candidate && typeof kid === 'string') { candidate = kid === jwk.kid; @@ -80,7 +77,7 @@ class LocalJWKSet { } if (length !== 1) { const error = new JWKSMultipleMatchingKeys(); - const { _cached } = this; + const _cached = this.#cached; error[Symbol.asyncIterator] = async function* () { for (const jwk of candidates) { try { @@ -91,7 +88,7 @@ class LocalJWKSet { }; throw error; } - return importWithAlgCache(this._cached, jwk, alg); + return importWithAlgCache(this.#cached, jwk, alg); } } async function importWithAlgCache(cache, jwk, alg) { @@ -110,8 +107,8 @@ export function createLocalJWKSet(jwks) { const localJWKSet = async (protectedHeader, token) => set.getKey(protectedHeader, token); Object.defineProperties(localJWKSet, { jwks: { - value: () => clone(set._jwks), - enumerable: true, + value: () => structuredClone(set.jwks()), + enumerable: false, configurable: false, writable: false, }, diff --git a/.output/server/node_modules/jose/dist/webapi/jwks/remote.js b/.output/server/node_modules/jose/dist/webapi/jwks/remote.js index a688309cd9cfe07f0b5cfbefa1675bd9757fb131..e7d51fddb5293acb933a46ea7f14c777dbc9aa89 100644 --- a/.output/server/node_modules/jose/dist/webapi/jwks/remote.js +++ b/.output/server/node_modules/jose/dist/webapi/jwks/remote.js @@ -9,7 +9,7 @@ function isCloudflareWorkers() { let USER_AGENT; if (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) { const NAME = 'jose'; - const VERSION = 'v6.0.8'; + const VERSION = 'v6.0.9'; USER_AGENT = `${NAME}/${VERSION}`; } export const customFetch = Symbol(); @@ -52,89 +52,95 @@ function isFreshJwksCache(input, cacheMaxAge) { return true; } class RemoteJWKSet { - _url; - _timeoutDuration; - _cooldownDuration; - _cacheMaxAge; - _jwksTimestamp; - _pendingFetch; - _headers; - [customFetch]; - _local; - _cache; + #url; + #timeoutDuration; + #cooldownDuration; + #cacheMaxAge; + #jwksTimestamp; + #pendingFetch; + #headers; + #customFetch; + #local; + #cache; constructor(url, options) { if (!(url instanceof URL)) { throw new TypeError('url must be an instance of URL'); } - this._url = new URL(url.href); - this._timeoutDuration = + this.#url = new URL(url.href); + this.#timeoutDuration = typeof options?.timeoutDuration === 'number' ? options?.timeoutDuration : 5000; - this._cooldownDuration = + this.#cooldownDuration = typeof options?.cooldownDuration === 'number' ? options?.cooldownDuration : 30000; - this._cacheMaxAge = typeof options?.cacheMaxAge === 'number' ? options?.cacheMaxAge : 600000; - this._headers = new Headers(options?.headers); - if (USER_AGENT && !this._headers.has('User-Agent')) { - this._headers.set('User-Agent', USER_AGENT); + this.#cacheMaxAge = typeof options?.cacheMaxAge === 'number' ? options?.cacheMaxAge : 600000; + this.#headers = new Headers(options?.headers); + if (USER_AGENT && !this.#headers.has('User-Agent')) { + this.#headers.set('User-Agent', USER_AGENT); } - if (!this._headers.has('accept')) { - this._headers.set('accept', 'application/json'); - this._headers.append('accept', 'application/jwk-set+json'); + if (!this.#headers.has('accept')) { + this.#headers.set('accept', 'application/json'); + this.#headers.append('accept', 'application/jwk-set+json'); } - this[customFetch] = options?.[customFetch]; + this.#customFetch = options?.[customFetch]; if (options?.[jwksCache] !== undefined) { - this._cache = options?.[jwksCache]; - if (isFreshJwksCache(options?.[jwksCache], this._cacheMaxAge)) { - this._jwksTimestamp = this._cache.uat; - this._local = createLocalJWKSet(this._cache.jwks); + this.#cache = options?.[jwksCache]; + if (isFreshJwksCache(options?.[jwksCache], this.#cacheMaxAge)) { + this.#jwksTimestamp = this.#cache.uat; + this.#local = createLocalJWKSet(this.#cache.jwks); } } } + pendingFetch() { + return !!this.#pendingFetch; + } coolingDown() { - return typeof this._jwksTimestamp === 'number' - ? Date.now() < this._jwksTimestamp + this._cooldownDuration + return typeof this.#jwksTimestamp === 'number' + ? Date.now() < this.#jwksTimestamp + this.#cooldownDuration : false; } fresh() { - return typeof this._jwksTimestamp === 'number' - ? Date.now() < this._jwksTimestamp + this._cacheMaxAge + return typeof this.#jwksTimestamp === 'number' + ? Date.now() < this.#jwksTimestamp + this.#cacheMaxAge : false; } + jwks() { + return this.#local?.jwks(); + } async getKey(protectedHeader, token) { - if (!this._local || !this.fresh()) { + if (!this.#local || !this.fresh()) { await this.reload(); } try { - return await this._local(protectedHeader, token); + return await this.#local(protectedHeader, token); } catch (err) { if (err instanceof JWKSNoMatchingKey) { if (this.coolingDown() === false) { await this.reload(); - return this._local(protectedHeader, token); + return this.#local(protectedHeader, token); } } throw err; } } async reload() { - if (this._pendingFetch && isCloudflareWorkers()) { - this._pendingFetch = undefined; + if (this.#pendingFetch && isCloudflareWorkers()) { + this.#pendingFetch = undefined; } - this._pendingFetch ||= fetchJwks(this._url.href, this._headers, AbortSignal.timeout(this._timeoutDuration), this[customFetch]) + this.#pendingFetch ||= fetchJwks(this.#url.href, this.#headers, AbortSignal.timeout(this.#timeoutDuration), this.#customFetch) .then((json) => { - this._local = createLocalJWKSet(json); - if (this._cache) { - this._cache.uat = Date.now(); - this._cache.jwks = json; + this.#local = createLocalJWKSet(json); + if (this.#cache) { + this.#cache.uat = Date.now(); + this.#cache.jwks = json; } - this._jwksTimestamp = Date.now(); - this._pendingFetch = undefined; + this.#jwksTimestamp = Date.now(); + this.#pendingFetch = undefined; }) .catch((err) => { - this._pendingFetch = undefined; + this.#pendingFetch = undefined; throw err; }); - await this._pendingFetch; + await this.#pendingFetch; } } export function createRemoteJWKSet(url, options) { @@ -158,12 +164,12 @@ export function createRemoteJWKSet(url, options) { writable: false, }, reloading: { - get: () => !!set._pendingFetch, + get: () => set.pendingFetch(), enumerable: true, configurable: false, }, jwks: { - value: () => set._local?.jwks(), + value: () => set.jwks(), enumerable: true, configurable: false, writable: false, diff --git a/.output/server/node_modules/jose/dist/webapi/jws/compact/sign.js b/.output/server/node_modules/jose/dist/webapi/jws/compact/sign.js index ff408536432aa4f730f7e0d45befb1b9509d4d02..2069b6d2c0acaab288239023e7937316ba4cdcb2 100644 --- a/.output/server/node_modules/jose/dist/webapi/jws/compact/sign.js +++ b/.output/server/node_modules/jose/dist/webapi/jws/compact/sign.js @@ -1,15 +1,15 @@ import { FlattenedSign } from '../flattened/sign.js'; export class CompactSign { - _flattened; + #flattened; constructor(payload) { - this._flattened = new FlattenedSign(payload); + this.#flattened = new FlattenedSign(payload); } setProtectedHeader(protectedHeader) { - this._flattened.setProtectedHeader(protectedHeader); + this.#flattened.setProtectedHeader(protectedHeader); return this; } async sign(key, options) { - const jws = await this._flattened.sign(key, options); + const jws = await this.#flattened.sign(key, options); if (jws.payload === undefined) { throw new TypeError('use the flattened module for creating JWS with b64: false'); } diff --git a/.output/server/node_modules/jose/dist/webapi/jws/flattened/sign.js b/.output/server/node_modules/jose/dist/webapi/jws/flattened/sign.js index 9dfeeb1449555407e3224190b4a447b5d315706e..c472372353c01bb2b60764d512c80ab7f21a0b29 100644 --- a/.output/server/node_modules/jose/dist/webapi/jws/flattened/sign.js +++ b/.output/server/node_modules/jose/dist/webapi/jws/flattened/sign.js @@ -7,44 +7,44 @@ import checkKeyType from '../../lib/check_key_type.js'; import validateCrit from '../../lib/validate_crit.js'; import normalizeKey from '../../lib/normalize_key.js'; export class FlattenedSign { - _payload; - _protectedHeader; - _unprotectedHeader; + #payload; + #protectedHeader; + #unprotectedHeader; constructor(payload) { if (!(payload instanceof Uint8Array)) { throw new TypeError('payload must be an instance of Uint8Array'); } - this._payload = payload; + this.#payload = payload; } setProtectedHeader(protectedHeader) { - if (this._protectedHeader) { + if (this.#protectedHeader) { throw new TypeError('setProtectedHeader can only be called once'); } - this._protectedHeader = protectedHeader; + this.#protectedHeader = protectedHeader; return this; } setUnprotectedHeader(unprotectedHeader) { - if (this._unprotectedHeader) { + if (this.#unprotectedHeader) { throw new TypeError('setUnprotectedHeader can only be called once'); } - this._unprotectedHeader = unprotectedHeader; + this.#unprotectedHeader = unprotectedHeader; return this; } async sign(key, options) { - if (!this._protectedHeader && !this._unprotectedHeader) { + if (!this.#protectedHeader && !this.#unprotectedHeader) { throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()'); } - if (!isDisjoint(this._protectedHeader, this._unprotectedHeader)) { + if (!isDisjoint(this.#protectedHeader, this.#unprotectedHeader)) { throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint'); } const joseHeader = { - ...this._protectedHeader, - ...this._unprotectedHeader, + ...this.#protectedHeader, + ...this.#unprotectedHeader, }; - const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, this._protectedHeader, joseHeader); + const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, this.#protectedHeader, joseHeader); let b64 = true; if (extensions.has('b64')) { - b64 = this._protectedHeader.b64; + b64 = this.#protectedHeader.b64; if (typeof b64 !== 'boolean') { throw new JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean'); } @@ -54,13 +54,13 @@ export class FlattenedSign { throw new JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid'); } checkKeyType(alg, key, 'sign'); - let payload = this._payload; + let payload = this.#payload; if (b64) { payload = encoder.encode(b64u(payload)); } let protectedHeader; - if (this._protectedHeader) { - protectedHeader = encoder.encode(b64u(JSON.stringify(this._protectedHeader))); + if (this.#protectedHeader) { + protectedHeader = encoder.encode(b64u(JSON.stringify(this.#protectedHeader))); } else { protectedHeader = encoder.encode(''); @@ -75,10 +75,10 @@ export class FlattenedSign { if (b64) { jws.payload = decoder.decode(payload); } - if (this._unprotectedHeader) { - jws.header = this._unprotectedHeader; + if (this.#unprotectedHeader) { + jws.header = this.#unprotectedHeader; } - if (this._protectedHeader) { + if (this.#protectedHeader) { jws.protected = decoder.decode(protectedHeader); } return jws; diff --git a/.output/server/node_modules/jose/dist/webapi/jws/general/sign.js b/.output/server/node_modules/jose/dist/webapi/jws/general/sign.js index 620dd48fe3b93a09a5801ee7bbf1fa96138f9b7f..d85de18efdb1736351ad71bdbf45bc2f610d5905 100644 --- a/.output/server/node_modules/jose/dist/webapi/jws/general/sign.js +++ b/.output/server/node_modules/jose/dist/webapi/jws/general/sign.js @@ -1,13 +1,13 @@ import { FlattenedSign } from '../flattened/sign.js'; import { JWSInvalid } from '../../util/errors.js'; class IndividualSignature { - parent; + #parent; protectedHeader; unprotectedHeader; options; key; constructor(sig, key, options) { - this.parent = sig; + this.#parent = sig; this.key = key; this.options = options; } @@ -26,37 +26,37 @@ class IndividualSignature { return this; } addSignature(...args) { - return this.parent.addSignature(...args); + return this.#parent.addSignature(...args); } sign(...args) { - return this.parent.sign(...args); + return this.#parent.sign(...args); } done() { - return this.parent; + return this.#parent; } } export class GeneralSign { - _payload; - _signatures = []; + #payload; + #signatures = []; constructor(payload) { - this._payload = payload; + this.#payload = payload; } addSignature(key, options) { const signature = new IndividualSignature(this, key, options); - this._signatures.push(signature); + this.#signatures.push(signature); return signature; } async sign() { - if (!this._signatures.length) { + if (!this.#signatures.length) { throw new JWSInvalid('at least one signature must be added'); } const jws = { signatures: [], payload: '', }; - for (let i = 0; i < this._signatures.length; i++) { - const signature = this._signatures[i]; - const flattened = new FlattenedSign(this._payload); + for (let i = 0; i < this.#signatures.length; i++) { + const signature = this.#signatures[i]; + const flattened = new FlattenedSign(this.#payload); flattened.setProtectedHeader(signature.protectedHeader); flattened.setUnprotectedHeader(signature.unprotectedHeader); const { payload, ...rest } = await flattened.sign(signature.key, signature.options); diff --git a/.output/server/node_modules/jose/dist/webapi/jwt/encrypt.js b/.output/server/node_modules/jose/dist/webapi/jwt/encrypt.js index 20359898107fab5aea7ce596894a4a66947bfa5a..19471b2d5240d8db4fc6345447490008ce95e411 100644 --- a/.output/server/node_modules/jose/dist/webapi/jwt/encrypt.js +++ b/.output/server/node_modules/jose/dist/webapi/jwt/encrypt.js @@ -1,74 +1,107 @@ import { CompactEncrypt } from '../jwe/compact/encrypt.js'; -import { encoder } from '../lib/buffer_utils.js'; import { ProduceJWT } from './produce.js'; -export class EncryptJWT extends ProduceJWT { - _cek; - _iv; - _keyManagementParameters; - _protectedHeader; - _replicateIssuerAsHeader; - _replicateSubjectAsHeader; - _replicateAudienceAsHeader; +export class EncryptJWT { + #cek; + #iv; + #keyManagementParameters; + #protectedHeader; + #replicateIssuerAsHeader; + #replicateSubjectAsHeader; + #replicateAudienceAsHeader; + #jwt; + constructor(payload = {}) { + this.#jwt = new ProduceJWT(payload); + } + setIssuer(issuer) { + this.#jwt.iss = issuer; + return this; + } + setSubject(subject) { + this.#jwt.sub = subject; + return this; + } + setAudience(audience) { + this.#jwt.aud = audience; + return this; + } + setJti(jwtId) { + this.#jwt.jti = jwtId; + return this; + } + setNotBefore(input) { + this.#jwt.nbf = input; + return this; + } + setExpirationTime(input) { + this.#jwt.exp = input; + return this; + } + setIssuedAt(input) { + this.#jwt.iat = input; + return this; + } setProtectedHeader(protectedHeader) { - if (this._protectedHeader) { + if (this.#protectedHeader) { throw new TypeError('setProtectedHeader can only be called once'); } - this._protectedHeader = protectedHeader; + this.#protectedHeader = protectedHeader; return this; } setKeyManagementParameters(parameters) { - if (this._keyManagementParameters) { + if (this.#keyManagementParameters) { throw new TypeError('setKeyManagementParameters can only be called once'); } - this._keyManagementParameters = parameters; + this.#keyManagementParameters = parameters; return this; } setContentEncryptionKey(cek) { - if (this._cek) { + if (this.#cek) { throw new TypeError('setContentEncryptionKey can only be called once'); } - this._cek = cek; + this.#cek = cek; return this; } setInitializationVector(iv) { - if (this._iv) { + if (this.#iv) { throw new TypeError('setInitializationVector can only be called once'); } - this._iv = iv; + this.#iv = iv; return this; } replicateIssuerAsHeader() { - this._replicateIssuerAsHeader = true; + this.#replicateIssuerAsHeader = true; return this; } replicateSubjectAsHeader() { - this._replicateSubjectAsHeader = true; + this.#replicateSubjectAsHeader = true; return this; } replicateAudienceAsHeader() { - this._replicateAudienceAsHeader = true; + this.#replicateAudienceAsHeader = true; return this; } async encrypt(key, options) { - const enc = new CompactEncrypt(encoder.encode(JSON.stringify(this._payload))); - if (this._replicateIssuerAsHeader) { - this._protectedHeader = { ...this._protectedHeader, iss: this._payload.iss }; - } - if (this._replicateSubjectAsHeader) { - this._protectedHeader = { ...this._protectedHeader, sub: this._payload.sub }; - } - if (this._replicateAudienceAsHeader) { - this._protectedHeader = { ...this._protectedHeader, aud: this._payload.aud }; + const enc = new CompactEncrypt(this.#jwt.data()); + if (this.#protectedHeader && + (this.#replicateIssuerAsHeader || + this.#replicateSubjectAsHeader || + this.#replicateAudienceAsHeader)) { + this.#protectedHeader = { + ...this.#protectedHeader, + iss: this.#replicateIssuerAsHeader ? this.#jwt.iss : undefined, + sub: this.#replicateSubjectAsHeader ? this.#jwt.sub : undefined, + aud: this.#replicateAudienceAsHeader ? this.#jwt.aud : undefined, + }; } - enc.setProtectedHeader(this._protectedHeader); - if (this._iv) { - enc.setInitializationVector(this._iv); + enc.setProtectedHeader(this.#protectedHeader); + if (this.#iv) { + enc.setInitializationVector(this.#iv); } - if (this._cek) { - enc.setContentEncryptionKey(this._cek); + if (this.#cek) { + enc.setContentEncryptionKey(this.#cek); } - if (this._keyManagementParameters) { - enc.setKeyManagementParameters(this._keyManagementParameters); + if (this.#keyManagementParameters) { + enc.setKeyManagementParameters(this.#keyManagementParameters); } return enc.encrypt(key, options); } diff --git a/.output/server/node_modules/jose/dist/webapi/jwt/produce.js b/.output/server/node_modules/jose/dist/webapi/jwt/produce.js index 7954c65b8c4fbfa7d13192c29c6fbb3f8bef8242..9a5108023de7db05a25936436ec969065bef376d 100644 --- a/.output/server/node_modules/jose/dist/webapi/jwt/produce.js +++ b/.output/server/node_modules/jose/dist/webapi/jwt/produce.js @@ -1,6 +1,7 @@ import epoch from '../lib/epoch.js'; -import isObject from '../lib/is_object.js'; import secs from '../lib/secs.js'; +import isObject from '../lib/is_object.js'; +import { encoder } from '../lib/buffer_utils.js'; function validateInput(label, input) { if (!Number.isFinite(input)) { throw new TypeError(`Invalid ${label} input`); @@ -8,69 +9,83 @@ function validateInput(label, input) { return input; } export class ProduceJWT { - _payload; - constructor(payload = {}) { + #payload; + constructor(payload) { if (!isObject(payload)) { throw new TypeError('JWT Claims Set MUST be an object'); } - this._payload = payload; + this.#payload = structuredClone(payload); + } + data() { + return encoder.encode(JSON.stringify(this.#payload)); + } + get iss() { + return this.#payload.iss; + } + set iss(value) { + this.#payload.iss = value; } - setIssuer(issuer) { - this._payload = { ...this._payload, iss: issuer }; - return this; + get sub() { + return this.#payload.sub; } - setSubject(subject) { - this._payload = { ...this._payload, sub: subject }; - return this; + set sub(value) { + this.#payload.sub = value; } - setAudience(audience) { - this._payload = { ...this._payload, aud: audience }; - return this; + get aud() { + return this.#payload.aud; } - setJti(jwtId) { - this._payload = { ...this._payload, jti: jwtId }; - return this; + set aud(value) { + this.#payload.aud = value; } - setNotBefore(input) { - if (typeof input === 'number') { - this._payload = { ...this._payload, nbf: validateInput('setNotBefore', input) }; + get jti() { + return this.#payload.jti; + } + set jti(value) { + this.#payload.jti = value; + } + get nbf() { + return this.#payload.nbf; + } + set nbf(value) { + if (typeof value === 'number') { + this.#payload.nbf = validateInput('setNotBefore', value); } - else if (input instanceof Date) { - this._payload = { ...this._payload, nbf: validateInput('setNotBefore', epoch(input)) }; + else if (value instanceof Date) { + this.#payload.nbf = validateInput('setNotBefore', epoch(value)); } else { - this._payload = { ...this._payload, nbf: epoch(new Date()) + secs(input) }; + this.#payload.nbf = epoch(new Date()) + secs(value); } - return this; } - setExpirationTime(input) { - if (typeof input === 'number') { - this._payload = { ...this._payload, exp: validateInput('setExpirationTime', input) }; + get exp() { + return this.#payload.exp; + } + set exp(value) { + if (typeof value === 'number') { + this.#payload.exp = validateInput('setExpirationTime', value); } - else if (input instanceof Date) { - this._payload = { ...this._payload, exp: validateInput('setExpirationTime', epoch(input)) }; + else if (value instanceof Date) { + this.#payload.exp = validateInput('setExpirationTime', epoch(value)); } else { - this._payload = { ...this._payload, exp: epoch(new Date()) + secs(input) }; + this.#payload.exp = epoch(new Date()) + secs(value); } - return this; } - setIssuedAt(input) { - if (typeof input === 'undefined') { - this._payload = { ...this._payload, iat: epoch(new Date()) }; + get iat() { + return this.#payload.iat; + } + set iat(value) { + if (typeof value === 'undefined') { + this.#payload.iat = epoch(new Date()); } - else if (input instanceof Date) { - this._payload = { ...this._payload, iat: validateInput('setIssuedAt', epoch(input)) }; + else if (value instanceof Date) { + this.#payload.iat = validateInput('setIssuedAt', epoch(value)); } - else if (typeof input === 'string') { - this._payload = { - ...this._payload, - iat: validateInput('setIssuedAt', epoch(new Date()) + secs(input)), - }; + else if (typeof value === 'string') { + this.#payload.iat = validateInput('setIssuedAt', epoch(new Date()) + secs(value)); } else { - this._payload = { ...this._payload, iat: validateInput('setIssuedAt', input) }; + this.#payload.iat = validateInput('setIssuedAt', value); } - return this; } } diff --git a/.output/server/node_modules/jose/dist/webapi/jwt/sign.js b/.output/server/node_modules/jose/dist/webapi/jwt/sign.js index 16bf9f436043f5456f557039227abd4c56204c89..4ffde338c2ec118d3bd16898e5a59569bb2aebaf 100644 --- a/.output/server/node_modules/jose/dist/webapi/jwt/sign.js +++ b/.output/server/node_modules/jose/dist/webapi/jwt/sign.js @@ -1,19 +1,50 @@ import { CompactSign } from '../jws/compact/sign.js'; import { JWTInvalid } from '../util/errors.js'; -import { encoder } from '../lib/buffer_utils.js'; import { ProduceJWT } from './produce.js'; -export class SignJWT extends ProduceJWT { - _protectedHeader; +export class SignJWT { + #protectedHeader; + #jwt; + constructor(payload = {}) { + this.#jwt = new ProduceJWT(payload); + } + setIssuer(issuer) { + this.#jwt.iss = issuer; + return this; + } + setSubject(subject) { + this.#jwt.sub = subject; + return this; + } + setAudience(audience) { + this.#jwt.aud = audience; + return this; + } + setJti(jwtId) { + this.#jwt.jti = jwtId; + return this; + } + setNotBefore(input) { + this.#jwt.nbf = input; + return this; + } + setExpirationTime(input) { + this.#jwt.exp = input; + return this; + } + setIssuedAt(input) { + this.#jwt.iat = input; + return this; + } setProtectedHeader(protectedHeader) { - this._protectedHeader = protectedHeader; + this.#protectedHeader = protectedHeader; return this; } async sign(key, options) { - const sig = new CompactSign(encoder.encode(JSON.stringify(this._payload))); - sig.setProtectedHeader(this._protectedHeader); - if (Array.isArray(this._protectedHeader?.crit) && - this._protectedHeader.crit.includes('b64') && - this._protectedHeader.b64 === false) { + const sig = new CompactSign(this.#jwt.data()); + sig.setProtectedHeader(this.#protectedHeader); + if (Array.isArray(this.#protectedHeader?.crit) && + this.#protectedHeader.crit.includes('b64') && + this.#protectedHeader.b64 === false) { throw new JWTInvalid('JWTs MUST NOT use unencoded payload'); } return sig.sign(key, options); diff --git a/.output/server/node_modules/jose/dist/webapi/jwt/unsecured.js b/.output/server/node_modules/jose/dist/webapi/jwt/unsecured.js index 552ae60a30fc7af1fc78cf895d6c736713921db4..b43661a37bec77bf01d0caa3b7ca33d5f78ff216 100644 --- a/.output/server/node_modules/jose/dist/webapi/jwt/unsecured.js +++ b/.output/server/node_modules/jose/dist/webapi/jwt/unsecured.js @@ -3,12 +3,44 @@ import { decoder } from '../lib/buffer_utils.js'; import { JWTInvalid } from '../util/errors.js'; import jwtPayload from '../lib/jwt_claims_set.js'; import { ProduceJWT } from './produce.js'; -export class UnsecuredJWT extends ProduceJWT { +export class UnsecuredJWT { + #jwt; + constructor(payload = {}) { + this.#jwt = new ProduceJWT(payload); + } encode() { const header = b64u.encode(JSON.stringify({ alg: 'none' })); - const payload = b64u.encode(JSON.stringify(this._payload)); + const payload = b64u.encode(this.#jwt.data()); return `${header}.${payload}.`; } + setIssuer(issuer) { + this.#jwt.iss = issuer; + return this; + } + setSubject(subject) { + this.#jwt.sub = subject; + return this; + } + setAudience(audience) { + this.#jwt.aud = audience; + return this; + } + setJti(jwtId) { + this.#jwt.jti = jwtId; + return this; + } + setNotBefore(input) { + this.#jwt.nbf = input; + return this; + } + setExpirationTime(input) { + this.#jwt.exp = input; + return this; + } + setIssuedAt(input) { + this.#jwt.iat = input; + return this; + } static decode(jwt, options) { if (typeof jwt !== 'string') { throw new JWTInvalid('Unsecured JWT must be a string'); diff --git a/.output/server/node_modules/jose/package.json b/.output/server/node_modules/jose/package.json index 2141bbdf3203fb1f8915a4ce5c95c622477e5340..2ef43dae2042be6ca377cfb0dd5de00dbca38bfc 100644 --- a/.output/server/node_modules/jose/package.json +++ b/.output/server/node_modules/jose/package.json @@ -1,6 +1,6 @@ { "name": "jose", - "version": "6.0.8", + "version": "6.0.9", "description": "JWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes", "keywords": [ "browser", diff --git a/.output/server/package.json b/.output/server/package.json index 7a0c3ceebb9a6c665e45a9b8696593b2d5f46909..dcf077bd8ab7e3db61ad2ef2feeb97e3eac8840b 100644 --- a/.output/server/package.json +++ b/.output/server/package.json @@ -1 +1 @@ -{"name":"seedchat-prod","version":"1.0.6","type":"module","private":true,"dependencies":{"@grpc/grpc-js":"1.12.6","@grpc/proto-loader":"0.7.13","@js-sdsl/ordered-map":"4.4.2","@protobufjs/aspromise":"1.1.2","@protobufjs/base64":"1.1.2","@protobufjs/codegen":"2.0.4","@protobufjs/eventemitter":"1.1.0","@protobufjs/fetch":"1.1.0","@protobufjs/float":"1.0.2","@protobufjs/inquire":"1.1.0","@protobufjs/path":"1.1.2","@protobufjs/pool":"1.1.0","@protobufjs/utf8":"1.1.0","asynckit":"0.4.0","call-bind-apply-helpers":"1.0.2","combined-stream":"1.0.8","delayed-stream":"1.0.0","dunder-proto":"1.0.1","es-define-property":"1.0.1","es-errors":"1.3.0","es-object-atoms":"1.1.1","es-set-tostringtag":"2.1.0","eventsource-parser":"3.0.0","form-data":"4.0.2","function-bind":"1.1.2","get-intrinsic":"1.3.0","get-proto":"1.0.1","gopd":"1.2.0","has-symbols":"1.1.0","has-tostringtag":"1.0.2","hasown":"2.0.2","jose":"6.0.8","lodash.camelcase":"4.3.0","long":"5.3.1","math-intrinsics":"1.1.0","mime-db":"1.52.0","mime-types":"2.1.35","protobufjs":"7.4.0","uuid":"11.1.0","ws":"8.18.1"}} \ No newline at end of file +{"name":"seedchat-prod","version":"1.0.6","type":"module","private":true,"dependencies":{"@grpc/grpc-js":"1.13.0","@grpc/proto-loader":"0.7.13","@js-sdsl/ordered-map":"4.4.2","@protobufjs/aspromise":"1.1.2","@protobufjs/base64":"1.1.2","@protobufjs/codegen":"2.0.4","@protobufjs/eventemitter":"1.1.0","@protobufjs/fetch":"1.1.0","@protobufjs/float":"1.0.2","@protobufjs/inquire":"1.1.0","@protobufjs/path":"1.1.2","@protobufjs/pool":"1.1.0","@protobufjs/utf8":"1.1.0","asynckit":"0.4.0","call-bind-apply-helpers":"1.0.2","combined-stream":"1.0.8","delayed-stream":"1.0.0","dunder-proto":"1.0.1","es-define-property":"1.0.1","es-errors":"1.3.0","es-object-atoms":"1.1.1","es-set-tostringtag":"2.1.0","eventsource-parser":"3.0.0","form-data":"4.0.2","function-bind":"1.1.2","get-intrinsic":"1.3.0","get-proto":"1.0.1","gopd":"1.2.0","has-symbols":"1.1.0","has-tostringtag":"1.0.2","hasown":"2.0.2","jose":"6.0.9","lodash.camelcase":"4.3.0","long":"5.3.1","math-intrinsics":"1.1.0","mime-db":"1.52.0","mime-types":"2.1.35","protobufjs":"7.4.0","uuid":"11.1.0","ws":"8.18.1"}} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 80ce87ec938b88692d7b40d541f2c5178929cd60..df9071621e54b6927b87d65f769b05991277492b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,12 +187,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.26.10" }, "bin": { "parser": "bin/babel-parser.js" @@ -202,9 +202,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", - "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -233,9 +233,9 @@ "license": "MIT" }, "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -284,10 +284,26 @@ "node": ">=10.0.0" } }, + "node_modules/@cloudflare/unenv-preset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.0.2.tgz", + "integrity": "sha512-nyzYnlZjjV5xT3LizahG1Iu6mnrCaxglJ04rZLpDwlDVDZ7v46lNsfxhV3A/xtfgQuSHmLnc6SVI+KwBpc3Lwg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.14", + "workerd": "^1.20250124.0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } + }, "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20250224.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250224.0.tgz", - "integrity": "sha512-sBbaAF2vgQ9+T50ik1ihekdepStBp0w4fvNghBfXIw1iWqfNWnypcjDMmi/7JhXJt2uBxBrSlXCvE5H7Gz+kbw==", + "version": "1.20250310.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250310.0.tgz", + "integrity": "sha512-LkLJO6F8lRNaCbK5sQCITi66SyCirDpffRuI5/5iILDJWQU4KVvAOKPvHrd4E5h/WDm9FGd22zMJwky7SxaNjg==", "cpu": [ "x64" ], @@ -302,9 +318,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20250224.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250224.0.tgz", - "integrity": "sha512-naetGefgjAaDbEacpwaVruJXNwxmRRL7v3ppStgEiqAlPmTpQ/Edjn2SQ284QwOw3MvaVPHrWcaTBupUpkqCyg==", + "version": "1.20250310.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250310.0.tgz", + "integrity": "sha512-WythDJQbsU3Ii1hhA7pJZLBQlHezeYWAnaMnv3gS2Exj45oF8G4chFvrO7zCzjlcJXwSeBTtQRJqxw9AiUDhyA==", "cpu": [ "arm64" ], @@ -319,9 +335,9 @@ } }, "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20250224.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250224.0.tgz", - "integrity": "sha512-BtUvuj91rgB06TUAkLYvedghUA8nDFiLcY3GC7MXmWhxCxGmY4PWkrKq/+uHjrhwknCcXrE4aFsM28ja8EcAGA==", + "version": "1.20250310.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250310.0.tgz", + "integrity": "sha512-LbP769tT4/5QBHSj4lCt99QIKTi6cU+wYhLfF7rEtYHBnZS2+nIw9xttAzxeERx/aFrU+mxLcYPFV8fUeVxGng==", "cpu": [ "x64" ], @@ -336,9 +352,9 @@ } }, "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20250224.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250224.0.tgz", - "integrity": "sha512-Gr4MPNi+BvwjfWF7clx0dJY2Vm4suaW5FtAQwrfqJmPtN5zb/BP16VZxxnFRMy377dP7ycoxpKfZZ6Q8RVGvbA==", + "version": "1.20250310.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250310.0.tgz", + "integrity": "sha512-FzWeKM6id20EMZACaDg0Kkvg1C4lvXZgLBXVI6h6xaXTNFReoyEp4v4eMrRTuja5ec5k+m5iGKjP4/bMWJp9ew==", "cpu": [ "arm64" ], @@ -353,9 +369,9 @@ } }, "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20250224.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250224.0.tgz", - "integrity": "sha512-x2iF1CsmYmmPEorWb1GRpAAouX5rRjmhuHMC259ojIlozR4G0LarlB9XfmeLEvtw537Ea0kJ6SOhjvUcWzxSvA==", + "version": "1.20250310.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250310.0.tgz", + "integrity": "sha512-04OgaDzm8/8nkjF3tovB+WywZLjSdAHCQT2omXKCwH3EDd1kpd8vvzE1pErtdIyKCOf9/sArY4BhPdxRj7ijlg==", "cpu": [ "x64" ], @@ -1695,9 +1711,9 @@ "license": "MIT" }, "node_modules/@grpc/grpc-js": { - "version": "1.12.6", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.6.tgz", - "integrity": "sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.0.tgz", + "integrity": "sha512-pMuxInZjUnUkgMT2QLZclRqwk2ykJbIU05aZgPgJYXEpN9+2I7z7aNwcjWZSycRPl232FfhPszyBFJyOxTHNog==", "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.7.13", @@ -3682,9 +3698,9 @@ "license": "MIT" }, "node_modules/@redocly/openapi-core": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.33.0.tgz", - "integrity": "sha512-MUB1jPxYX2NmgiobICcvyrkSbPSaGAb/P/MsxSW+UT9hxpQvDCX81bstGg68BcKIdeFvVRKcoyG4xiTgDOEBfQ==", + "version": "1.33.1", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.33.1.tgz", + "integrity": "sha512-tL3v8FVwdcCAcruOZV77uxH2ZFtnY3DRPG+rgmlm9hsu5uoatofVSJIJHUroz54KJ8ryeo28wQHhOr8iReGGEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3834,9 +3850,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz", - "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", "dev": true, "license": "MIT", "dependencies": { @@ -6118,14 +6134,14 @@ } }, "node_modules/@vuepress/helper": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/helper/-/helper-2.0.0-rc.82.tgz", - "integrity": "sha512-5NSvO92/FvAgRRPzB4n//T13yhdeY1rLHG9N6z4EwCA+xnAU7x7MppbT0mY3e2avGv9f16oByr2ZkXPtJxk7gQ==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/helper/-/helper-2.0.0-rc.83.tgz", + "integrity": "sha512-STmxImHGjaSbuX0CgeFoTT4gzXnrvlo5QfyAthwFjDbEBRtP7lxVe79yAt7h+2HGIWIKcNazStaCyHBVK9RmtA==", "dev": true, "license": "MIT", "dependencies": { "@vue/shared": "^3.5.13", - "@vueuse/core": "^12.8.2", + "@vueuse/core": "^13.0.0", "cheerio": "1.0.0", "fflate": "^0.8.2", "gray-matter": "^4.0.3", @@ -6135,10 +6151,51 @@ "vuepress": "2.0.0-rc.20" } }, + "node_modules/@vuepress/helper/node_modules/@vueuse/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.0.0.tgz", + "integrity": "sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.0.0", + "@vueuse/shared": "13.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vuepress/helper/node_modules/@vueuse/metadata": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.0.0.tgz", + "integrity": "sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vuepress/helper/node_modules/@vueuse/shared": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.0.0.tgz", + "integrity": "sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/@vuepress/highlighter-helper": { - "version": "2.0.0-rc.81", - "resolved": "https://registry.npmjs.org/@vuepress/highlighter-helper/-/highlighter-helper-2.0.0-rc.81.tgz", - "integrity": "sha512-f9lMBS0sDUkzoVv71zGGcs+ZMHqQTX5ZtXESWjeI3Z/Frxhk+H+aFbwRruAVhd8JY/vCWWN2ZJYdvYi1zeza9A==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/highlighter-helper/-/highlighter-helper-2.0.0-rc.83.tgz", + "integrity": "sha512-VbcG0d46DjHbovBG4mRG7Z5hISGBQiESYz9fFsnn9S/oDWsO3LTj2MTf4zrTa3VGhrOsGQbaLxKpTopwIp0ETw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -6177,58 +6234,181 @@ } }, "node_modules/@vuepress/plugin-active-header-links": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-rc.82.tgz", - "integrity": "sha512-+ykLxqDo2XyGmId9aEXY2eIJfHvNYM1LzgtrYZUaaeJE1EI1Fl1Tpf0mHABsrOMEIzBYEYGt6BOi3IsraigqtQ==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-rc.83.tgz", + "integrity": "sha512-QNXjIju8pZioduvU5rVvoKDxOx2PJoJRtRuSoPvXZndFeEiHP27udLbXeMFmRy2P7rOuhqXzUEEszStOI1YlGA==", "dev": true, "license": "MIT", "dependencies": { - "@vueuse/core": "^12.8.2", + "@vueuse/core": "^13.0.0", "vue": "^3.5.13" }, "peerDependencies": { "vuepress": "2.0.0-rc.20" } }, + "node_modules/@vuepress/plugin-active-header-links/node_modules/@vueuse/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.0.0.tgz", + "integrity": "sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.0.0", + "@vueuse/shared": "13.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vuepress/plugin-active-header-links/node_modules/@vueuse/metadata": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.0.0.tgz", + "integrity": "sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vuepress/plugin-active-header-links/node_modules/@vueuse/shared": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.0.0.tgz", + "integrity": "sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/@vuepress/plugin-back-to-top": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-rc.82.tgz", - "integrity": "sha512-su7YMmADb/RgbhdJZ1tVoUy34AjqlAk9+WIBcZ6YBAjon6nAlsxuWp/3dtazml+clgRz6pb44ZFNw/6gipSD8Q==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-rc.83.tgz", + "integrity": "sha512-bJsarKnnOZoN+jRYMxfqEMLWeMC1r7tuTyTzvsh09Bocg8moLUfHm8gdULh/kJ3rHUNDoP7az+9O0rE4fGFBRA==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82", - "@vueuse/core": "^12.8.2", + "@vuepress/helper": "2.0.0-rc.83", + "@vueuse/core": "^13.0.0", "vue": "^3.5.13" }, "peerDependencies": { "vuepress": "2.0.0-rc.20" } }, + "node_modules/@vuepress/plugin-back-to-top/node_modules/@vueuse/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.0.0.tgz", + "integrity": "sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.0.0", + "@vueuse/shared": "13.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vuepress/plugin-back-to-top/node_modules/@vueuse/metadata": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.0.0.tgz", + "integrity": "sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vuepress/plugin-back-to-top/node_modules/@vueuse/shared": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.0.0.tgz", + "integrity": "sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/@vuepress/plugin-copy-code": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-copy-code/-/plugin-copy-code-2.0.0-rc.82.tgz", - "integrity": "sha512-cXZP4rQ8cxqIgJH3wuNcQFIZ+X4MRVQwiAYZOzDfo7Pc5cs7QKylSrsCBqUxaZrRGpJwpW5mpk/m+JiJ0iKOWg==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-copy-code/-/plugin-copy-code-2.0.0-rc.83.tgz", + "integrity": "sha512-zVjRFO+MiQMoxJqbrEfrW1dAQlhJgPBw/H8V6Z/AveTov250JTk7GeJkVJzWkl14B5Eczp9CW4L9HBhprW5ovA==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82", - "@vueuse/core": "^12.8.2", + "@vuepress/helper": "2.0.0-rc.83", + "@vueuse/core": "^13.0.0", "vue": "^3.5.13" }, "peerDependencies": { "vuepress": "2.0.0-rc.20" } }, + "node_modules/@vuepress/plugin-copy-code/node_modules/@vueuse/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.0.0.tgz", + "integrity": "sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.0.0", + "@vueuse/shared": "13.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vuepress/plugin-copy-code/node_modules/@vueuse/metadata": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.0.0.tgz", + "integrity": "sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vuepress/plugin-copy-code/node_modules/@vueuse/shared": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.0.0.tgz", + "integrity": "sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/@vuepress/plugin-git": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-rc.82.tgz", - "integrity": "sha512-v69y3hJ4hD5L6SjRGhWWn7F2ADjZdbjyMEAi9TfNYaFueN8rbfoN3Vty0USExKCrLGQisp/0b3r1vC5FvfQI7A==", + "version": "2.0.0-rc.84", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-rc.84.tgz", + "integrity": "sha512-eegBt6ooIPm6BS8sZRnF3/R6cfQ18si2TL4ygg9BX0i5y4Mm34BGmee2o/pE4MpzAFRCVByo7aOSwH0DLZKwTQ==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82", - "@vueuse/core": "^12.8.2", + "@vuepress/helper": "2.0.0-rc.83", + "@vueuse/core": "^13.0.0", "execa": "^9.5.2", "vue": "^3.5.13" }, @@ -6236,61 +6416,184 @@ "vuepress": "2.0.0-rc.20" } }, + "node_modules/@vuepress/plugin-git/node_modules/@vueuse/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.0.0.tgz", + "integrity": "sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.0.0", + "@vueuse/shared": "13.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vuepress/plugin-git/node_modules/@vueuse/metadata": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.0.0.tgz", + "integrity": "sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vuepress/plugin-git/node_modules/@vueuse/shared": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.0.0.tgz", + "integrity": "sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/@vuepress/plugin-links-check": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-links-check/-/plugin-links-check-2.0.0-rc.82.tgz", - "integrity": "sha512-tl+Mb5/q9PpU0AoEpOsk8rbTMuv6jVIrZcJSzCsQsl6MXKdpdui7hOczQv6YQfmpzL0A8eoD1GWuwf6JPkWN5w==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-links-check/-/plugin-links-check-2.0.0-rc.83.tgz", + "integrity": "sha512-cyds9UyTUAX4DBFFB1wq7BPY02jV/ybIXQ29uDdvuD3A/3SlbKjG41jvvIT+9+cAhheMlWllZRQaqi6JCXUhig==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82" + "@vuepress/helper": "2.0.0-rc.83" }, "peerDependencies": { "vuepress": "2.0.0-rc.20" } }, "node_modules/@vuepress/plugin-markdown-hint": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-markdown-hint/-/plugin-markdown-hint-2.0.0-rc.82.tgz", - "integrity": "sha512-DmA1wIJlu1IAci2hYAP3l/M1Y/8q2bzs4Q+FzwHIzUQiSrce49sy0NgiIiZHRo5J77T3HFaQPkWrjTg2agfjzw==", + "version": "2.0.0-rc.84", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-markdown-hint/-/plugin-markdown-hint-2.0.0-rc.84.tgz", + "integrity": "sha512-uip/7TTkLa6dOwrHIvft62EwWqaH4GVmCFF30KYj5qjHrZFiFhXMJ6BMHYlHbAuDzppGm51Pxoc/i9ucoWANeQ==", "dev": true, "license": "MIT", "dependencies": { "@mdit/plugin-alert": "^0.16.0", "@mdit/plugin-container": "^0.16.0", "@types/markdown-it": "^14.1.2", - "@vuepress/helper": "2.0.0-rc.82", - "@vueuse/core": "^12.8.2" + "@vuepress/helper": "2.0.0-rc.83", + "@vueuse/core": "^13.0.0" }, "peerDependencies": { "vuepress": "2.0.0-rc.20" } }, + "node_modules/@vuepress/plugin-markdown-hint/node_modules/@vueuse/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.0.0.tgz", + "integrity": "sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.0.0", + "@vueuse/shared": "13.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vuepress/plugin-markdown-hint/node_modules/@vueuse/metadata": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.0.0.tgz", + "integrity": "sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vuepress/plugin-markdown-hint/node_modules/@vueuse/shared": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.0.0.tgz", + "integrity": "sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/@vuepress/plugin-markdown-tab": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-markdown-tab/-/plugin-markdown-tab-2.0.0-rc.82.tgz", - "integrity": "sha512-PhnAHs35lroXvUoAVIIYhFvr23UTzcSZp1RIiusahUl9nwoq06+iVzhBtaI98dvPPt93lzfI4mUL34CmVWS1ww==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-markdown-tab/-/plugin-markdown-tab-2.0.0-rc.83.tgz", + "integrity": "sha512-1ZdbBTSMWIZDdIPfIBPVkTJi9s8gkL+evt2dY3y0hm0H6ZuAvK/BSJuRreyM2TTkT4myx8oajfrOQLtVjSlNLA==", "dev": true, "license": "MIT", "dependencies": { "@mdit/plugin-tab": "^0.16.0", "@types/markdown-it": "^14.1.2", - "@vuepress/helper": "2.0.0-rc.82", - "@vueuse/core": "^12.8.2", + "@vuepress/helper": "2.0.0-rc.83", + "@vueuse/core": "^13.0.0", "vue": "^3.5.13" }, "peerDependencies": { "vuepress": "2.0.0-rc.20" } }, + "node_modules/@vuepress/plugin-markdown-tab/node_modules/@vueuse/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.0.0.tgz", + "integrity": "sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.0.0", + "@vueuse/shared": "13.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vuepress/plugin-markdown-tab/node_modules/@vueuse/metadata": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.0.0.tgz", + "integrity": "sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vuepress/plugin-markdown-tab/node_modules/@vueuse/shared": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.0.0.tgz", + "integrity": "sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/@vuepress/plugin-medium-zoom": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-rc.82.tgz", - "integrity": "sha512-SHNGHyu4OdMRvXiEW4Ktwy0x/b8FDyAgzsiJ6+niNbT0Z75+gfLiwc8FEz+Eivi4j5n94Mm2jr963q78uI5OkA==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-rc.83.tgz", + "integrity": "sha512-DgRSL4gqwD6kmQjS37elvCpsW3NvnPN7m/mThMK6ueuXQi20rAFhFQwBAsA3Mc7ErAuH/yIWcCJjmgwtLZTpkA==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82", + "@vuepress/helper": "2.0.0-rc.83", "medium-zoom": "^1.1.0", "vue": "^3.5.13" }, @@ -6299,13 +6602,13 @@ } }, "node_modules/@vuepress/plugin-nprogress": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-rc.82.tgz", - "integrity": "sha512-Qj0htfB7uHgOYAyBj0XVIle+/ehkWMck0VQhRH8f56eRaP6M+PyFpMf/3XQzZaQEOB2apvxVriN4e173PUKFkg==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-rc.83.tgz", + "integrity": "sha512-w32PmjFJPIGzVJyxVBqaVprkiQZn6OzkAHScAmpfGjCQhNHefMIzUEJRyazvqxO9Q10o0L4ZvFubwgaxjfTxUA==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82", + "@vuepress/helper": "2.0.0-rc.83", "vue": "^3.5.13" }, "peerDependencies": { @@ -6313,13 +6616,13 @@ } }, "node_modules/@vuepress/plugin-palette": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-rc.82.tgz", - "integrity": "sha512-7p+Hl6A3nzaKeC9AU0AyeGL5jp++/wvcLIt4fkGa40cYZRyMvh2XBmK6TpcjI+4HhadHeA/8qDRCfIknnuuXYA==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-rc.83.tgz", + "integrity": "sha512-YlCQK5GShD87HIZi+Hyd9XHJydLqRmyGJylCb+Py+avi+dIDkql19nLL0SWRgWG2Zku3KMRbFT9noUs9YIjaDw==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82", + "@vuepress/helper": "2.0.0-rc.83", "chokidar": "^3.6.0" }, "peerDependencies": { @@ -6327,41 +6630,41 @@ } }, "node_modules/@vuepress/plugin-prismjs": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-rc.82.tgz", - "integrity": "sha512-0vK1xOQeWlw6bUClYzmjHtBE1b/h2WzkWw7oFVGVbjznYgiYV0ca+jJg9NPSryO46brMNcnK/m4p2BOHKX3Zsg==", + "version": "2.0.0-rc.83", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-rc.83.tgz", + "integrity": "sha512-owWIFINscvpA1386gXcDO8JZuV9nYD0/jF1kirLT/1d6papukftqdc1vT77QKIW2PC8xVkVf5sjvlza9xpnggA==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82", - "@vuepress/highlighter-helper": "2.0.0-rc.81", - "prismjs": "^1.29.0" + "@vuepress/helper": "2.0.0-rc.83", + "@vuepress/highlighter-helper": "2.0.0-rc.83", + "prismjs": "^1.30.0" }, "peerDependencies": { "vuepress": "2.0.0-rc.20" } }, "node_modules/@vuepress/plugin-seo": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-seo/-/plugin-seo-2.0.0-rc.82.tgz", - "integrity": "sha512-SwKSYlIuuqlu+c1UgzBQltI9hPHFP8XiTnTn0/OoyIGhK8RJ1R1tpdhsZ6h4pJImaznFrA6oTn35UqXAVIJcDw==", + "version": "2.0.0-rc.84", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-seo/-/plugin-seo-2.0.0-rc.84.tgz", + "integrity": "sha512-cCRbn3DI2XF+551Y1lwWmEe65PuOGpwVPuk+vpcZUBxkC7zO3MkSpqzjFde+aPgv7owNQYzjCwG50uPM1VGYOg==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82" + "@vuepress/helper": "2.0.0-rc.83" }, "peerDependencies": { "vuepress": "2.0.0-rc.20" } }, "node_modules/@vuepress/plugin-sitemap": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/plugin-sitemap/-/plugin-sitemap-2.0.0-rc.82.tgz", - "integrity": "sha512-59ehALeo/pNp3fu2pVjx0CnbUv6EKTSAAuOWJcvjXu1iNdZjHczHZ+zp+HZHYAq7CUWAxRmQGyS4ez06OV68ow==", + "version": "2.0.0-rc.84", + "resolved": "https://registry.npmjs.org/@vuepress/plugin-sitemap/-/plugin-sitemap-2.0.0-rc.84.tgz", + "integrity": "sha512-LG6JC4CYulyz/1TJzoAWtXw7wDyiqPUCX9QGvhytC0p9BttOvRgKMNCeqqDsfdFkZjdPIosPw5Y77hSpJKIUIw==", "dev": true, "license": "MIT", "dependencies": { - "@vuepress/helper": "2.0.0-rc.82", + "@vuepress/helper": "2.0.0-rc.83", "sitemap": "^8.0.0" }, "peerDependencies": { @@ -6393,28 +6696,28 @@ } }, "node_modules/@vuepress/theme-default": { - "version": "2.0.0-rc.82", - "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-rc.82.tgz", - "integrity": "sha512-RewrmPq0XfaxhaqczjDl0sDJM7Ea2HAf3P81v4vrPWXA0VBA8+NT7WUJdcqJz2kX0Ipx2vsoV1anJHah3LmJXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vuepress/helper": "2.0.0-rc.82", - "@vuepress/plugin-active-header-links": "2.0.0-rc.82", - "@vuepress/plugin-back-to-top": "2.0.0-rc.82", - "@vuepress/plugin-copy-code": "2.0.0-rc.82", - "@vuepress/plugin-git": "2.0.0-rc.82", - "@vuepress/plugin-links-check": "2.0.0-rc.82", - "@vuepress/plugin-markdown-hint": "2.0.0-rc.82", - "@vuepress/plugin-markdown-tab": "2.0.0-rc.82", - "@vuepress/plugin-medium-zoom": "2.0.0-rc.82", - "@vuepress/plugin-nprogress": "2.0.0-rc.82", - "@vuepress/plugin-palette": "2.0.0-rc.82", - "@vuepress/plugin-prismjs": "2.0.0-rc.82", - "@vuepress/plugin-seo": "2.0.0-rc.82", - "@vuepress/plugin-sitemap": "2.0.0-rc.82", + "version": "2.0.0-rc.84", + "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-rc.84.tgz", + "integrity": "sha512-YImv0ZK4PiAw0eH+ym3PekQM1BZNheq1LV77GIH9ExZukD14ES1qEar2/RV5Rhn2j1SGd6DbMIPgXdrrdkz5EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vuepress/helper": "2.0.0-rc.83", + "@vuepress/plugin-active-header-links": "2.0.0-rc.83", + "@vuepress/plugin-back-to-top": "2.0.0-rc.83", + "@vuepress/plugin-copy-code": "2.0.0-rc.83", + "@vuepress/plugin-git": "2.0.0-rc.84", + "@vuepress/plugin-links-check": "2.0.0-rc.83", + "@vuepress/plugin-markdown-hint": "2.0.0-rc.84", + "@vuepress/plugin-markdown-tab": "2.0.0-rc.83", + "@vuepress/plugin-medium-zoom": "2.0.0-rc.83", + "@vuepress/plugin-nprogress": "2.0.0-rc.83", + "@vuepress/plugin-palette": "2.0.0-rc.83", + "@vuepress/plugin-prismjs": "2.0.0-rc.83", + "@vuepress/plugin-seo": "2.0.0-rc.84", + "@vuepress/plugin-sitemap": "2.0.0-rc.84", "@vuepress/plugin-theme-data": "2.0.0-rc.79", - "@vueuse/core": "^12.8.2", + "@vueuse/core": "^13.0.0", "vue": "^3.5.13" }, "peerDependencies": { @@ -6435,6 +6738,47 @@ } } }, + "node_modules/@vuepress/theme-default/node_modules/@vueuse/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.0.0.tgz", + "integrity": "sha512-rkgb4a8/0b234lMGCT29WkCjPfsX0oxrIRR7FDndRoW3FsaC9NBzefXg/9TLhAgwM11f49XnutshM4LzJBrQ5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.0.0", + "@vueuse/shared": "13.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vuepress/theme-default/node_modules/@vueuse/metadata": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.0.0.tgz", + "integrity": "sha512-TRNksqmvtvqsuHf7bbgH9OSXEV2b6+M3BSN4LR5oxWKykOFT9gV78+C2/0++Pq9KCp9KQ1OQDPvGlWNQpOb2Mw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vuepress/theme-default/node_modules/@vueuse/shared": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.0.0.tgz", + "integrity": "sha512-9MiHhAPw+sqCF/RLo8V6HsjRqEdNEWVpDLm2WBRW2G/kSQjb8X901sozXpSCaeLG0f7TEfMrT4XNaA5m1ez7Dg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/@vuepress/utils": { "version": "2.0.0-rc.20", "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.20.tgz", @@ -12406,9 +12750,9 @@ } }, "node_modules/jose": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.0.8.tgz", - "integrity": "sha512-EyUPtOKyTYq+iMOszO42eobQllaIjJnwkZ2U93aJzNyPibCy7CEvT9UQnaCVB51IAd49gbNdCew1c0LcLTCB2g==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.0.9.tgz", + "integrity": "sha512-6HEy/G3IBiGwOeT0phvu19yt/zagFKSpQPpQ6YUIiCxBUPfThVkOv9wlwHGkatUqbHvkWHYPtJJil4U5jHwllw==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -13508,9 +13852,9 @@ } }, "node_modules/miniflare": { - "version": "3.20250224.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20250224.0.tgz", - "integrity": "sha512-DyLxzhHCQ9UWDceqEsT7tmw8ZTSAhb1yKUqUi5VDmSxsIocKi4y5kvMijw9ELK8+tq/CiCp/RQxwRNZRJD8Xbg==", + "version": "3.20250310.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20250310.0.tgz", + "integrity": "sha512-TQAxoo2ZiQYjiOJoK3bbcyjKD/u1E3akYOeSHc2Zcp1sLVydrgzSjmxtrn65/3BfDIrUgfYHyy9wspT6wzBy/A==", "dev": true, "license": "MIT", "dependencies": { @@ -13521,7 +13865,7 @@ "glob-to-regexp": "0.4.1", "stoppable": "1.1.0", "undici": "^5.28.5", - "workerd": "1.20250224.0", + "workerd": "1.20250310.0", "ws": "8.18.0", "youch": "3.2.3", "zod": "3.22.3" @@ -15537,9 +15881,9 @@ "license": "Unlicense" }, "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "license": "MIT", "engines": { "node": ">=6" @@ -17896,9 +18240,9 @@ } }, "node_modules/swagger-ui-dist": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.20.0.tgz", - "integrity": "sha512-V5pozVTZxivdoQq/SQWxj3A4cOu5opk9MEbcZANX3Pj8X8xCrD1QCtBT7744Pz9msOvt0nnmy9JvM/9PGonCdg==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.20.1.tgz", + "integrity": "sha512-qBPCis2w8nP4US7SvUxdJD3OwKcqiWeZmjN2VWhq2v+ESZEXOP/7n4DeiOiiZcGYTKMHAHUUrroHaTsjUWTEGw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -19788,9 +20132,9 @@ } }, "node_modules/workerd": { - "version": "1.20250224.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250224.0.tgz", - "integrity": "sha512-NntMg1d9SSkbS4vGdjV5NZxe6FUrvJXY7UiQD7fBtCRVpoPpqz9bVgTq86zalMm+vz64lftzabKT4ka4Y9hejQ==", + "version": "1.20250310.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250310.0.tgz", + "integrity": "sha512-bAaZ9Bmts3mArbIrXYAtr+ZRsAJAAUEsCtvwfBavIYXaZ5sgdEOJBEiBbvsHp6CsVObegOM85tIWpYLpbTxQrQ==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -19801,30 +20145,30 @@ "node": ">=16" }, "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20250224.0", - "@cloudflare/workerd-darwin-arm64": "1.20250224.0", - "@cloudflare/workerd-linux-64": "1.20250224.0", - "@cloudflare/workerd-linux-arm64": "1.20250224.0", - "@cloudflare/workerd-windows-64": "1.20250224.0" + "@cloudflare/workerd-darwin-64": "1.20250310.0", + "@cloudflare/workerd-darwin-arm64": "1.20250310.0", + "@cloudflare/workerd-linux-64": "1.20250310.0", + "@cloudflare/workerd-linux-arm64": "1.20250310.0", + "@cloudflare/workerd-windows-64": "1.20250310.0" } }, "node_modules/wrangler": { - "version": "3.114.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.114.0.tgz", - "integrity": "sha512-cY0HxgU5yuc24tE1Y4KD2n9UzYYEx+9lSL7p/Sqj18SgDfwyiMPY/FryXQAPYLuD/S+dxArRQyeEkFSokIr75Q==", + "version": "3.114.1", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.114.1.tgz", + "integrity": "sha512-GuS6SrnAZZDiNb20Vf2Ww0KCfnctHUEzi5GyML1i2brfQPI6BikgI/W/u6XDtYtah0OkbIWIiNJ+SdhWT7KEcw==", "dev": true, "license": "MIT OR Apache-2.0", "dependencies": { "@cloudflare/kv-asset-handler": "0.3.4", - "@cloudflare/unenv-preset": "2.0.0", + "@cloudflare/unenv-preset": "2.0.2", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@esbuild-plugins/node-modules-polyfill": "0.2.2", "blake3-wasm": "2.1.5", "esbuild": "0.17.19", - "miniflare": "3.20250224.0", + "miniflare": "3.20250310.0", "path-to-regexp": "6.3.0", - "unenv": "2.0.0-rc.8", - "workerd": "1.20250224.0" + "unenv": "2.0.0-rc.14", + "workerd": "1.20250310.0" }, "bin": { "wrangler": "bin/wrangler.js", @@ -19838,7 +20182,7 @@ "sharp": "^0.33.5" }, "peerDependencies": { - "@cloudflare/workers-types": "^4.20250224.0" + "@cloudflare/workers-types": "^4.20250310.0" }, "peerDependenciesMeta": { "@cloudflare/workers-types": { @@ -19846,22 +20190,6 @@ } } }, - "node_modules/wrangler/node_modules/@cloudflare/unenv-preset": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.0.0.tgz", - "integrity": "sha512-Ar4HixFYP8e990JPACno3nqe10QsjS3yVWr48z5Vop5LygdnvPa5cfNHxGoQSPavvg5aaGnF0VAWc3JJ1tBKuQ==", - "dev": true, - "license": "MIT OR Apache-2.0", - "peerDependencies": { - "unenv": "2.0.0-rc.8", - "workerd": "^1.20250124.0" - }, - "peerDependenciesMeta": { - "workerd": { - "optional": true - } - } - }, "node_modules/wrangler/node_modules/@esbuild/android-arm": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", @@ -20274,20 +20602,6 @@ "@esbuild/win32-x64": "0.17.19" } }, - "node_modules/wrangler/node_modules/unenv": { - "version": "2.0.0-rc.8", - "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.8.tgz", - "integrity": "sha512-wj/lN45LvZ4Uz95rti6DC5wg56eocAwA8KYzExk2SN01iuAb9ayzMwN13Kd3EG2eBXu27PzgMIXLTwWfSczKfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "defu": "^6.1.4", - "exsolve": "^1.0.0", - "ohash": "^2.0.5", - "pathe": "^2.0.3", - "ufo": "^1.5.4" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",