@scalar/api-reference 1.49.8 → 1.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/browser/standalone.js +192 -190
- package/dist/browser/webpack-stats.json +1 -1
- package/dist/components/ApiReference.vue.d.ts.map +1 -1
- package/dist/components/ApiReference.vue.js +1 -1
- package/dist/components/ApiReference.vue.js.map +1 -1
- package/dist/components/ApiReference.vue.script.js +50 -15
- package/dist/components/ApiReference.vue.script.js.map +1 -1
- package/dist/components/Content/Auth/Auth.vue.d.ts +1 -1
- package/dist/components/Content/Auth/Auth.vue.d.ts.map +1 -1
- package/dist/components/Content/Auth/Auth.vue.js.map +1 -1
- package/dist/components/Content/Auth/Auth.vue.script.js +3 -14
- package/dist/components/Content/Auth/Auth.vue.script.js.map +1 -1
- package/dist/components/Content/Content.vue.d.ts +1 -0
- package/dist/components/Content/Content.vue.d.ts.map +1 -1
- package/dist/components/Content/Content.vue.js.map +1 -1
- package/dist/components/Content/Content.vue.script.js +7 -8
- package/dist/components/Content/Content.vue.script.js.map +1 -1
- package/dist/components/Content/Operations/TraversedEntry.vue.d.ts +1 -1
- package/dist/components/Content/Operations/TraversedEntry.vue.d.ts.map +1 -1
- package/dist/components/Content/Operations/TraversedEntry.vue.js.map +1 -1
- package/dist/components/Content/Operations/TraversedEntry.vue.script.js +1 -1
- package/dist/components/Content/Operations/TraversedEntry.vue.script.js.map +1 -1
- package/dist/components/Content/Tags/components/ClassicLayout.vue.d.ts.map +1 -1
- package/dist/components/Content/Tags/components/ClassicLayout.vue.js +1 -1
- package/dist/components/Content/Tags/components/ClassicLayout.vue.js.map +1 -1
- package/dist/components/Content/Tags/components/ClassicLayout.vue.script.js +9 -5
- package/dist/components/Content/Tags/components/ClassicLayout.vue.script.js.map +1 -1
- package/dist/features/Operation/Operation.vue.d.ts +1 -1
- package/dist/features/Operation/Operation.vue.d.ts.map +1 -1
- package/dist/features/Operation/Operation.vue.js.map +1 -1
- package/dist/features/Operation/Operation.vue.script.js +1 -1
- package/dist/features/Operation/Operation.vue.script.js.map +1 -1
- package/dist/features/Operation/helpers/filter-selected-security.d.ts +2 -1
- package/dist/features/Operation/helpers/filter-selected-security.d.ts.map +1 -1
- package/dist/features/Operation/helpers/filter-selected-security.js +1 -2
- package/dist/features/Operation/helpers/filter-selected-security.js.map +1 -1
- package/dist/features/Operation/layouts/ClassicLayout.vue.d.ts +1 -1
- package/dist/features/Operation/layouts/ClassicLayout.vue.d.ts.map +1 -1
- package/dist/features/Operation/layouts/ClassicLayout.vue.js +1 -1
- package/dist/features/Operation/layouts/ClassicLayout.vue.js.map +1 -1
- package/dist/features/Operation/layouts/ClassicLayout.vue.script.js.map +1 -1
- package/dist/features/Operation/layouts/ModernLayout.vue.d.ts +1 -1
- package/dist/features/Operation/layouts/ModernLayout.vue.d.ts.map +1 -1
- package/dist/features/Operation/layouts/ModernLayout.vue.js +1 -1
- package/dist/features/Operation/layouts/ModernLayout.vue.js.map +1 -1
- package/dist/features/Operation/layouts/ModernLayout.vue.script.js.map +1 -1
- package/dist/features/Search/helpers/create-fuse-instance.d.ts.map +1 -1
- package/dist/features/Search/helpers/create-fuse-instance.js +4 -0
- package/dist/features/Search/helpers/create-fuse-instance.js.map +1 -1
- package/dist/features/Search/helpers/create-search-index.d.ts.map +1 -1
- package/dist/features/Search/helpers/create-search-index.js +41 -4
- package/dist/features/Search/helpers/create-search-index.js.map +1 -1
- package/dist/features/Search/types.d.ts +1 -0
- package/dist/features/Search/types.d.ts.map +1 -1
- package/dist/features/example-responses/ExampleResponse.vue.d.ts.map +1 -1
- package/dist/features/example-responses/ExampleResponse.vue.js +1 -1
- package/dist/features/example-responses/ExampleResponse.vue.js.map +1 -1
- package/dist/features/example-responses/ExampleResponse.vue.script.js +2 -1
- package/dist/features/example-responses/ExampleResponse.vue.script.js.map +1 -1
- package/dist/features/example-responses/ExampleResponses.vue.js +1 -1
- package/dist/features/example-responses/ExampleResponses.vue.js.map +1 -1
- package/dist/features/example-responses/ExampleResponses.vue.script.js +1 -1
- package/dist/features/example-responses/ExampleResponses.vue.script.js.map +1 -1
- package/dist/features/external-docs/ExternalDocs.vue.d.ts +2 -2
- package/dist/features/external-docs/ExternalDocs.vue.d.ts.map +1 -1
- package/dist/features/external-docs/ExternalDocs.vue.js.map +1 -1
- package/dist/features/external-docs/ExternalDocs.vue.script.js.map +1 -1
- package/dist/features/info-object/Contact.vue.d.ts +2 -2
- package/dist/features/info-object/Contact.vue.d.ts.map +1 -1
- package/dist/features/info-object/Contact.vue.js.map +1 -1
- package/dist/features/info-object/Contact.vue.script.js.map +1 -1
- package/dist/features/info-object/License.vue.d.ts +2 -2
- package/dist/features/info-object/License.vue.d.ts.map +1 -1
- package/dist/features/info-object/License.vue.js.map +1 -1
- package/dist/features/info-object/License.vue.script.js.map +1 -1
- package/dist/features/info-object/TermsOfService.vue.d.ts +2 -2
- package/dist/features/info-object/TermsOfService.vue.d.ts.map +1 -1
- package/dist/features/info-object/TermsOfService.vue.js.map +1 -1
- package/dist/features/info-object/TermsOfService.vue.script.js.map +1 -1
- package/dist/helpers/openapi.d.ts +2 -5
- package/dist/helpers/openapi.d.ts.map +1 -1
- package/dist/helpers/openapi.js +25 -19
- package/dist/helpers/openapi.js.map +1 -1
- package/dist/helpers/safe-deep-clone.d.ts +17 -0
- package/dist/helpers/safe-deep-clone.d.ts.map +1 -0
- package/dist/helpers/safe-deep-clone.js +25 -0
- package/dist/helpers/safe-deep-clone.js.map +1 -0
- package/dist/helpers/storage.d.ts +5 -5
- package/dist/style.css +321 -364
- package/package.json +20 -21
- package/dist/components/Content/Auth/helpers/get-default-security.d.ts +0 -18
- package/dist/components/Content/Auth/helpers/get-default-security.d.ts.map +0 -1
- package/dist/components/Content/Auth/helpers/get-default-security.js +0 -64
- package/dist/components/Content/Auth/helpers/get-default-security.js.map +0 -1
package/package.json
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"vue",
|
|
21
21
|
"vue3"
|
|
22
22
|
],
|
|
23
|
-
"version": "1.
|
|
23
|
+
"version": "1.51.0",
|
|
24
24
|
"engines": {
|
|
25
25
|
"node": ">=22"
|
|
26
26
|
},
|
|
@@ -89,32 +89,31 @@
|
|
|
89
89
|
"github-slugger": "2.0.0",
|
|
90
90
|
"microdiff": "^1.5.0",
|
|
91
91
|
"nanoid": "^5.1.6",
|
|
92
|
-
"vue": "^3.5.
|
|
92
|
+
"vue": "^3.5.30",
|
|
93
93
|
"yaml": "^2.8.0",
|
|
94
|
-
"@scalar/agent-chat": "0.
|
|
95
|
-
"@scalar/api-client": "2.
|
|
96
|
-
"@scalar/
|
|
97
|
-
"@scalar/
|
|
98
|
-
"@scalar/
|
|
99
|
-
"@scalar/icons": "0.7.
|
|
100
|
-
"@scalar/
|
|
101
|
-
"@scalar/
|
|
102
|
-
"@scalar/
|
|
103
|
-
"@scalar/
|
|
104
|
-
"@scalar/
|
|
105
|
-
"@scalar/
|
|
94
|
+
"@scalar/agent-chat": "0.10.1",
|
|
95
|
+
"@scalar/api-client": "2.41.0",
|
|
96
|
+
"@scalar/code-highlight": "0.3.2",
|
|
97
|
+
"@scalar/helpers": "0.4.3",
|
|
98
|
+
"@scalar/oas-utils": "0.10.16",
|
|
99
|
+
"@scalar/icons": "0.7.2",
|
|
100
|
+
"@scalar/sidebar": "0.8.18",
|
|
101
|
+
"@scalar/components": "0.21.3",
|
|
102
|
+
"@scalar/snippetz": "0.7.8",
|
|
103
|
+
"@scalar/themes": "0.15.2",
|
|
104
|
+
"@scalar/use-hooks": "0.4.2",
|
|
105
|
+
"@scalar/workspace-store": "0.43.1",
|
|
106
106
|
"@scalar/use-toasts": "0.10.1",
|
|
107
|
-
"@scalar/
|
|
108
|
-
"@scalar/workspace-store": "0.42.0"
|
|
107
|
+
"@scalar/types": "0.7.6"
|
|
109
108
|
},
|
|
110
109
|
"devDependencies": {
|
|
111
|
-
"@hono/node-server": "^1.19.
|
|
110
|
+
"@hono/node-server": "^1.19.10",
|
|
112
111
|
"@playwright/test": "1.56.0",
|
|
113
112
|
"@tailwindcss/vite": "^4.2.0",
|
|
114
113
|
"@vitejs/plugin-vue": "^6.0.3",
|
|
115
|
-
"@vue/server-renderer": "^3.5.
|
|
114
|
+
"@vue/server-renderer": "^3.5.30",
|
|
116
115
|
"@vue/test-utils": "2.4.6",
|
|
117
|
-
"hono": "4.12.
|
|
116
|
+
"hono": "^4.12.7",
|
|
118
117
|
"jsdom": "27.4.0",
|
|
119
118
|
"rollup-plugin-webpack-stats": "^0.2.5",
|
|
120
119
|
"tailwindcss": "^4.1.18",
|
|
@@ -122,8 +121,8 @@
|
|
|
122
121
|
"vite-plugin-banner": "^0.8.1",
|
|
123
122
|
"vite-plugin-css-injected-by-js": "^3.5.2",
|
|
124
123
|
"vitest": "4.1.0",
|
|
125
|
-
"@scalar/galaxy": "0.6.
|
|
126
|
-
"@scalar/core": "0.4.
|
|
124
|
+
"@scalar/galaxy": "0.6.2",
|
|
125
|
+
"@scalar/core": "0.4.6"
|
|
127
126
|
},
|
|
128
127
|
"scripts": {
|
|
129
128
|
"build": "pnpm build:default && pnpm build:standalone && vue-tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { MergedSecuritySchemes } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block';
|
|
2
|
-
import type { AuthenticationConfiguration } from '@scalar/types/api-reference';
|
|
3
|
-
import type { SecurityRequirementObject, SecuritySchemeObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
|
|
4
|
-
/**
|
|
5
|
-
* Extracts the default scopes for a security scheme.
|
|
6
|
-
* Only OAuth2 schemes can have default scopes via the x-default-scopes extension.
|
|
7
|
-
*/
|
|
8
|
-
export declare const getDefaultScopes: (scheme: SecuritySchemeObject | undefined) => string[];
|
|
9
|
-
/**
|
|
10
|
-
* Determines the default security scheme to use for an operation.
|
|
11
|
-
*
|
|
12
|
-
* Priority order:
|
|
13
|
-
* 1. User-configured preferred security scheme (if provided)
|
|
14
|
-
* 2. First security requirement from the OpenAPI spec
|
|
15
|
-
* 3. null (no security required)
|
|
16
|
-
*/
|
|
17
|
-
export declare const getDefaultSecurity: (securityRequirements: SecurityRequirementObject[], preferredSecurityScheme: AuthenticationConfiguration["preferredSecurityScheme"], securitySchemes: MergedSecuritySchemes) => SecurityRequirementObject | null;
|
|
18
|
-
//# sourceMappingURL=get-default-security.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-default-security.d.ts","sourceRoot":"","sources":["../../../../../src/components/Content/Auth/helpers/get-default-security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAA;AACpG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAA;AAG9E,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,8DAA8D,CAAA;AAErE;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,oBAAoB,GAAG,SAAS,KAAG,MAAM,EAMjF,CAAA;AAkED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC7B,sBAAsB,yBAAyB,EAAE,EACjD,yBAAyB,2BAA2B,CAAC,yBAAyB,CAAC,EAC/E,iBAAiB,qBAAqB,KACrC,yBAAyB,GAAG,IAW9B,CAAA"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { getResolvedRef } from "@scalar/workspace-store/helpers/get-resolved-ref";
|
|
2
|
-
import { unpackProxyObject } from "@scalar/workspace-store/helpers/unpack-proxy";
|
|
3
|
-
//#region src/components/Content/Auth/helpers/get-default-security.ts
|
|
4
|
-
/**
|
|
5
|
-
* Extracts the default scopes for a security scheme.
|
|
6
|
-
* Only OAuth2 schemes can have default scopes via the x-default-scopes extension.
|
|
7
|
-
*/
|
|
8
|
-
var getDefaultScopes = (scheme) => {
|
|
9
|
-
if (!scheme || scheme.type !== "oauth2") return [];
|
|
10
|
-
return scheme["x-default-scopes"] ?? [];
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Hydrates an existing security requirement with configured default scopes.
|
|
14
|
-
* Explicit scopes from the OpenAPI requirement take precedence over x-default-scopes.
|
|
15
|
-
*/
|
|
16
|
-
var hydrateSecurityRequirement = (requirement, securitySchemes) => {
|
|
17
|
-
const hydratedRequirement = {};
|
|
18
|
-
for (const [schemeName, scopes] of Object.entries(unpackProxyObject(requirement, { depth: 1 }) ?? requirement)) {
|
|
19
|
-
if (Array.isArray(scopes) && scopes.length > 0) {
|
|
20
|
-
hydratedRequirement[schemeName] = scopes;
|
|
21
|
-
continue;
|
|
22
|
-
}
|
|
23
|
-
hydratedRequirement[schemeName] = getDefaultScopes(getResolvedRef(securitySchemes[schemeName]));
|
|
24
|
-
}
|
|
25
|
-
return hydratedRequirement;
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Processes a single scheme name and adds it to the accumulator with its default scopes.
|
|
29
|
-
*/
|
|
30
|
-
var addSchemeToRequirement = (acc, schemeName, securitySchemes) => {
|
|
31
|
-
acc[schemeName] = getDefaultScopes(getResolvedRef(securitySchemes[schemeName]));
|
|
32
|
-
};
|
|
33
|
-
/**
|
|
34
|
-
* Converts the preferred security scheme configuration into a SecurityRequirementObject.
|
|
35
|
-
* Handles both flat arrays and nested arrays (for complex auth scenarios).
|
|
36
|
-
*/
|
|
37
|
-
var buildSecurityRequirementFromPreferred = (preferredSecurityScheme, securitySchemes) => {
|
|
38
|
-
if (!Array.isArray(preferredSecurityScheme)) {
|
|
39
|
-
const scheme = getResolvedRef(securitySchemes[preferredSecurityScheme]);
|
|
40
|
-
return { [preferredSecurityScheme]: getDefaultScopes(scheme) };
|
|
41
|
-
}
|
|
42
|
-
const requirement = {};
|
|
43
|
-
for (const item of preferredSecurityScheme) if (Array.isArray(item)) for (const schemeName of item) addSchemeToRequirement(requirement, schemeName, securitySchemes);
|
|
44
|
-
else addSchemeToRequirement(requirement, item, securitySchemes);
|
|
45
|
-
return requirement;
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* Determines the default security scheme to use for an operation.
|
|
49
|
-
*
|
|
50
|
-
* Priority order:
|
|
51
|
-
* 1. User-configured preferred security scheme (if provided)
|
|
52
|
-
* 2. First security requirement from the OpenAPI spec
|
|
53
|
-
* 3. null (no security required)
|
|
54
|
-
*/
|
|
55
|
-
var getDefaultSecurity = (securityRequirements, preferredSecurityScheme, securitySchemes) => {
|
|
56
|
-
if (preferredSecurityScheme) return buildSecurityRequirementFromPreferred(preferredSecurityScheme, securitySchemes);
|
|
57
|
-
const firstRequirement = securityRequirements[0];
|
|
58
|
-
if (firstRequirement) return hydrateSecurityRequirement(firstRequirement, securitySchemes);
|
|
59
|
-
return null;
|
|
60
|
-
};
|
|
61
|
-
//#endregion
|
|
62
|
-
export { getDefaultSecurity };
|
|
63
|
-
|
|
64
|
-
//# sourceMappingURL=get-default-security.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-default-security.js","names":[],"sources":["../../../../../src/components/Content/Auth/helpers/get-default-security.ts"],"sourcesContent":["import type { MergedSecuritySchemes } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport type { AuthenticationConfiguration } from '@scalar/types/api-reference'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport { unpackProxyObject } from '@scalar/workspace-store/helpers/unpack-proxy'\nimport type {\n SecurityRequirementObject,\n SecuritySchemeObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\n/**\n * Extracts the default scopes for a security scheme.\n * Only OAuth2 schemes can have default scopes via the x-default-scopes extension.\n */\nexport const getDefaultScopes = (scheme: SecuritySchemeObject | undefined): string[] => {\n if (!scheme || scheme.type !== 'oauth2') {\n return []\n }\n\n return scheme['x-default-scopes'] ?? []\n}\n\n/**\n * Hydrates an existing security requirement with configured default scopes.\n * Explicit scopes from the OpenAPI requirement take precedence over x-default-scopes.\n */\nconst hydrateSecurityRequirement = (\n requirement: SecurityRequirementObject,\n securitySchemes: MergedSecuritySchemes,\n): SecurityRequirementObject => {\n const hydratedRequirement: SecurityRequirementObject = {}\n\n for (const [schemeName, scopes] of Object.entries(unpackProxyObject(requirement, { depth: 1 }) ?? requirement)) {\n if (Array.isArray(scopes) && scopes.length > 0) {\n hydratedRequirement[schemeName] = scopes\n continue\n }\n\n const scheme = getResolvedRef(securitySchemes[schemeName])\n hydratedRequirement[schemeName] = getDefaultScopes(scheme)\n }\n\n return hydratedRequirement\n}\n\n/**\n * Processes a single scheme name and adds it to the accumulator with its default scopes.\n */\nconst addSchemeToRequirement = (\n acc: SecurityRequirementObject,\n schemeName: string,\n securitySchemes: MergedSecuritySchemes,\n): void => {\n const scheme = getResolvedRef(securitySchemes[schemeName])\n acc[schemeName] = getDefaultScopes(scheme)\n}\n\n/**\n * Converts the preferred security scheme configuration into a SecurityRequirementObject.\n * Handles both flat arrays and nested arrays (for complex auth scenarios).\n */\nconst buildSecurityRequirementFromPreferred = (\n preferredSecurityScheme: string | (string | string[])[],\n securitySchemes: MergedSecuritySchemes,\n): SecurityRequirementObject => {\n if (!Array.isArray(preferredSecurityScheme)) {\n const scheme = getResolvedRef(securitySchemes[preferredSecurityScheme])\n return { [preferredSecurityScheme]: getDefaultScopes(scheme) }\n }\n\n const requirement: SecurityRequirementObject = {}\n\n for (const item of preferredSecurityScheme) {\n if (Array.isArray(item)) {\n // Handle nested arrays for complex auth (e.g., [['oauth2', 'apiKey'], 'basic'])\n for (const schemeName of item) {\n addSchemeToRequirement(requirement, schemeName, securitySchemes)\n }\n } else {\n addSchemeToRequirement(requirement, item, securitySchemes)\n }\n }\n\n return requirement\n}\n\n/**\n * Determines the default security scheme to use for an operation.\n *\n * Priority order:\n * 1. User-configured preferred security scheme (if provided)\n * 2. First security requirement from the OpenAPI spec\n * 3. null (no security required)\n */\nexport const getDefaultSecurity = (\n securityRequirements: SecurityRequirementObject[],\n preferredSecurityScheme: AuthenticationConfiguration['preferredSecurityScheme'],\n securitySchemes: MergedSecuritySchemes,\n): SecurityRequirementObject | null => {\n if (preferredSecurityScheme) {\n return buildSecurityRequirementFromPreferred(preferredSecurityScheme, securitySchemes)\n }\n\n const firstRequirement = securityRequirements[0]\n if (firstRequirement) {\n return hydrateSecurityRequirement(firstRequirement, securitySchemes)\n }\n\n return null\n}\n"],"mappings":";;;;;;;AAaA,IAAa,oBAAoB,WAAuD;AACtF,KAAI,CAAC,UAAU,OAAO,SAAS,SAC7B,QAAO,EAAE;AAGX,QAAO,OAAO,uBAAuB,EAAE;;;;;;AAOzC,IAAM,8BACJ,aACA,oBAC8B;CAC9B,MAAM,sBAAiD,EAAE;AAEzD,MAAK,MAAM,CAAC,YAAY,WAAW,OAAO,QAAQ,kBAAkB,aAAa,EAAE,OAAO,GAAG,CAAC,IAAI,YAAY,EAAE;AAC9G,MAAI,MAAM,QAAQ,OAAO,IAAI,OAAO,SAAS,GAAG;AAC9C,uBAAoB,cAAc;AAClC;;AAIF,sBAAoB,cAAc,iBADnB,eAAe,gBAAgB,YAAY,CACA;;AAG5D,QAAO;;;;;AAMT,IAAM,0BACJ,KACA,YACA,oBACS;AAET,KAAI,cAAc,iBADH,eAAe,gBAAgB,YAAY,CAChB;;;;;;AAO5C,IAAM,yCACJ,yBACA,oBAC8B;AAC9B,KAAI,CAAC,MAAM,QAAQ,wBAAwB,EAAE;EAC3C,MAAM,SAAS,eAAe,gBAAgB,yBAAyB;AACvE,SAAO,GAAG,0BAA0B,iBAAiB,OAAO,EAAE;;CAGhE,MAAM,cAAyC,EAAE;AAEjD,MAAK,MAAM,QAAQ,wBACjB,KAAI,MAAM,QAAQ,KAAK,CAErB,MAAK,MAAM,cAAc,KACvB,wBAAuB,aAAa,YAAY,gBAAgB;KAGlE,wBAAuB,aAAa,MAAM,gBAAgB;AAI9D,QAAO;;;;;;;;;;AAWT,IAAa,sBACX,sBACA,yBACA,oBACqC;AACrC,KAAI,wBACF,QAAO,sCAAsC,yBAAyB,gBAAgB;CAGxF,MAAM,mBAAmB,qBAAqB;AAC9C,KAAI,iBACF,QAAO,2BAA2B,kBAAkB,gBAAgB;AAGtE,QAAO"}
|