cxgrd 0.1.2 → 0.1.5
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/dist/auth/auth-session.d.ts.map +1 -1
- package/dist/auth/auth-session.js +24 -12
- package/dist/auth/auth-session.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +24 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/prompt/llm-client.d.ts.map +1 -1
- package/dist/prompt/llm-client.js +13 -3
- package/dist/prompt/llm-client.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-session.d.ts","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"auth-session.d.ts","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA4B1E;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiF5E;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzD"}
|
|
@@ -17,7 +17,6 @@ function normalizeRole(role) {
|
|
|
17
17
|
const POLL_INTERVAL_MS = 2000;
|
|
18
18
|
const POLL_TIMEOUT_MS = 5 * 60 * 1000;
|
|
19
19
|
async function resolveActiveSession() {
|
|
20
|
-
// Dev override — lets you test pro/team locally without real auth
|
|
21
20
|
const devPlan = (0, env_1.envString)('CXGRD_DEV_PLAN');
|
|
22
21
|
if (devPlan) {
|
|
23
22
|
const plan = (0, plans_1.normalizePlan)(devPlan);
|
|
@@ -40,7 +39,6 @@ async function resolveActiveSession() {
|
|
|
40
39
|
plan: stored.plan,
|
|
41
40
|
source: 'auth_file',
|
|
42
41
|
email: stored.email,
|
|
43
|
-
// orgId/orgName/role only populated for team/enterprise — undefined for free+pro
|
|
44
42
|
orgId: stored.orgId,
|
|
45
43
|
orgName: stored.orgName,
|
|
46
44
|
role: normalizeRole(stored.role),
|
|
@@ -51,18 +49,36 @@ async function pollAuthSession(sessionId) {
|
|
|
51
49
|
const url = `${baseUrl}/api/auth/cli/session/${sessionId}`;
|
|
52
50
|
const started = Date.now();
|
|
53
51
|
while (Date.now() - started < POLL_TIMEOUT_MS) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
let response;
|
|
53
|
+
try {
|
|
54
|
+
response = await fetch(url, {
|
|
55
|
+
method: 'GET',
|
|
56
|
+
headers: { Accept: 'application/json' },
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Network error — wait and retry
|
|
61
|
+
await sleep(POLL_INTERVAL_MS);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// 501 = server not configured — hard stop
|
|
65
|
+
if (response.status === 501) {
|
|
59
66
|
throw new Error('Auth API is not available yet. For local dev set CXGRD_DEV_PLAN=pro in .env');
|
|
60
67
|
}
|
|
68
|
+
// 404 = session not found yet — retry (brief race condition on first poll)
|
|
69
|
+
if (response.status === 404) {
|
|
70
|
+
await sleep(POLL_INTERVAL_MS);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
61
73
|
// 202 = still pending, user hasn't completed GitHub login yet
|
|
62
74
|
if (response.status === 202) {
|
|
63
75
|
await sleep(POLL_INTERVAL_MS);
|
|
64
76
|
continue;
|
|
65
77
|
}
|
|
78
|
+
// 410 = session expired
|
|
79
|
+
if (response.status === 410) {
|
|
80
|
+
throw new Error('Session expired. Run cxgrd auth login again.');
|
|
81
|
+
}
|
|
66
82
|
if (!response.ok) {
|
|
67
83
|
const body = await response.text().catch(() => '');
|
|
68
84
|
throw new Error(`Auth poll failed (${response.status}): ${body || response.statusText}`);
|
|
@@ -73,19 +89,16 @@ async function pollAuthSession(sessionId) {
|
|
|
73
89
|
await sleep(POLL_INTERVAL_MS);
|
|
74
90
|
continue;
|
|
75
91
|
}
|
|
76
|
-
|
|
92
|
+
return {
|
|
77
93
|
token,
|
|
78
94
|
plan: (0, plans_1.normalizePlan)(data.plan),
|
|
79
95
|
email: data.email,
|
|
80
|
-
// these are only set for team/enterprise accounts
|
|
81
96
|
orgId: data.org_id ?? data.orgId,
|
|
82
97
|
orgName: data.org_name ?? data.orgName,
|
|
83
98
|
role: normalizeRole(data.role),
|
|
84
99
|
expiresAt: normalizeExpiry(data.expires_at ?? data.expiresAt),
|
|
85
100
|
obtainedAt: Date.now(),
|
|
86
101
|
};
|
|
87
|
-
// Free and pro users both get a token — feature gates are enforced per-command
|
|
88
|
-
return auth;
|
|
89
102
|
}
|
|
90
103
|
throw new Error('Timed out waiting for browser login. Try again.');
|
|
91
104
|
}
|
|
@@ -102,7 +115,6 @@ function sleep(ms) {
|
|
|
102
115
|
function normalizeExpiry(expiresAt) {
|
|
103
116
|
if (!expiresAt || Number.isNaN(expiresAt))
|
|
104
117
|
return undefined;
|
|
105
|
-
// accept either epoch seconds or milliseconds
|
|
106
118
|
return expiresAt < 1_000_000_000_000 ? expiresAt * 1000 : expiresAt;
|
|
107
119
|
}
|
|
108
120
|
//# sourceMappingURL=auth-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":";;AAyBA,
|
|
1
|
+
{"version":3,"file":"auth-session.js","sourceRoot":"","sources":["../../src/auth/auth-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AA4BA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCtD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGvD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAevD"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -12,7 +12,19 @@ const auth_store_1 = require("../auth/auth-store");
|
|
|
12
12
|
const auth_session_1 = require("../auth/auth-session");
|
|
13
13
|
const open_browser_1 = require("../auth/open-browser");
|
|
14
14
|
const entitlements_1 = require("../auth/entitlements");
|
|
15
|
-
|
|
15
|
+
async function initiateSession(sessionId) {
|
|
16
|
+
const baseUrl = (0, env_1.envString)('CXGRD_AUTH_BASE_URL', 'https://cxgrd.com').replace(/\/$/, '');
|
|
17
|
+
const url = `${baseUrl}/api/auth/cli/initiate`;
|
|
18
|
+
const response = await fetch(url, {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: { 'Content-Type': 'application/json' },
|
|
21
|
+
body: JSON.stringify({ sessionId }),
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
const body = await response.text().catch(() => '');
|
|
25
|
+
throw new Error(`Failed to initiate session (${response.status}): ${body || response.statusText}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
16
28
|
async function authLoginCommand() {
|
|
17
29
|
await (0, env_1.loadCxgrdEnv)();
|
|
18
30
|
const sessionId = (0, auth_session_1.createCliSessionId)();
|
|
@@ -20,11 +32,21 @@ async function authLoginCommand() {
|
|
|
20
32
|
console.log(chalk_1.default.blue('✓ Opening browser for GitHub sign-in...'));
|
|
21
33
|
console.log(chalk_1.default.gray(` Session: ${sessionId.slice(0, 8)}...`));
|
|
22
34
|
console.log(chalk_1.default.gray(` If the browser does not open: ${url}\n`));
|
|
35
|
+
// Register the session on the server BEFORE opening browser and polling
|
|
36
|
+
try {
|
|
37
|
+
await initiateSession(sessionId);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
41
|
+
console.error(chalk_1.default.red(`\n✗ Could not reach auth server: ${message}`));
|
|
42
|
+
console.error(chalk_1.default.gray(' For local dev: set CXGRD_DEV_PLAN=pro in .env'));
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
23
45
|
(0, open_browser_1.openBrowser)(url);
|
|
24
46
|
console.log(chalk_1.default.gray(' Waiting for authorization...'));
|
|
25
47
|
try {
|
|
26
48
|
const auth = await (0, auth_session_1.pollAuthSession)(sessionId);
|
|
27
|
-
await (0,
|
|
49
|
+
await (0, auth_store_1.writeAuth)(auth);
|
|
28
50
|
console.log(chalk_1.default.green('\n✓ Signed in successfully'));
|
|
29
51
|
console.log(chalk_1.default.gray(` Token saved to ${(0, auth_store_1.getAuthPath)()}`));
|
|
30
52
|
console.log(chalk_1.default.gray(` Plan: ${auth.plan}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/prompt/llm-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAc1D,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,qBAAqB,CACzC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/prompt/llm-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAc1D,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,qBAAqB,CACzC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,CAAC,CA4BpB"}
|
|
@@ -15,23 +15,27 @@ Requirements:
|
|
|
15
15
|
- Do not invent files not mentioned in the context`;
|
|
16
16
|
async function generatePromptWithLlm(contextPayload, session) {
|
|
17
17
|
const apiKey = (0, env_1.envString)('CXGRD_LLM_API_KEY');
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
// Default to production cloud endpoint — API key lives on server, never on client
|
|
19
|
+
const cloudUrl = (0, env_1.envString)('CXGRD_PROMPT_API_URL', 'https://cxgrd.com/api/prompt');
|
|
20
|
+
// Logged-in users always hit the cloud endpoint first
|
|
21
|
+
if (session.source === 'auth_file') {
|
|
20
22
|
try {
|
|
21
23
|
return await callCloudPromptApi(cloudUrl, contextPayload, session.token);
|
|
22
24
|
}
|
|
23
25
|
catch (err) {
|
|
24
26
|
const message = err instanceof Error ? err.message : String(err);
|
|
27
|
+
// Fall back to direct LLM only if dev has a local key AND cloud isn't deployed
|
|
25
28
|
if (apiKey && message.includes('not deployed')) {
|
|
26
29
|
return callDirectLlm(contextPayload, apiKey);
|
|
27
30
|
}
|
|
28
31
|
throw err;
|
|
29
32
|
}
|
|
30
33
|
}
|
|
34
|
+
// Dev override path (CXGRD_DEV_PLAN set) — needs a local API key
|
|
31
35
|
if (apiKey) {
|
|
32
36
|
return callDirectLlm(contextPayload, apiKey);
|
|
33
37
|
}
|
|
34
|
-
throw new Error('No LLM configured.
|
|
38
|
+
throw new Error('No LLM configured. Run cxgrd auth login to use the cloud API, or set CXGRD_LLM_API_KEY in .env for local dev.');
|
|
35
39
|
}
|
|
36
40
|
async function callCloudPromptApi(url, context, token) {
|
|
37
41
|
const response = await fetch(url.replace(/\/$/, ''), {
|
|
@@ -45,6 +49,12 @@ async function callCloudPromptApi(url, context, token) {
|
|
|
45
49
|
if (response.status === 404 || response.status === 501) {
|
|
46
50
|
throw new Error('Cloud prompt API is not deployed yet. Use CXGRD_LLM_API_KEY in .env for direct LLM access during development.');
|
|
47
51
|
}
|
|
52
|
+
if (response.status === 401) {
|
|
53
|
+
throw new Error('Session expired. Run cxgrd auth login again.');
|
|
54
|
+
}
|
|
55
|
+
if (response.status === 403) {
|
|
56
|
+
throw new Error('This feature requires a Pro plan. Visit https://cxgrd.com/pricing to upgrade.');
|
|
57
|
+
}
|
|
48
58
|
if (!response.ok) {
|
|
49
59
|
const body = await response.text().catch(() => '');
|
|
50
60
|
throw new Error(`Prompt API error (${response.status}): ${body || response.statusText}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/prompt/llm-client.ts"],"names":[],"mappings":";;AAqBA,
|
|
1
|
+
{"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/prompt/llm-client.ts"],"names":[],"mappings":";;AAqBA,sDA+BC;AApDD,uCAA0C;AAG1C,MAAM,aAAa,GAAG;;;;;;;;;;mDAU6B,CAAC;AAQ7C,KAAK,UAAU,qBAAqB,CACzC,cAAsB,EACtB,OAAsB;IAEtB,MAAM,MAAM,GAAG,IAAA,eAAS,EAAC,mBAAmB,CAAC,CAAC;IAE9C,kFAAkF;IAClF,MAAM,QAAQ,GAAG,IAAA,eAAS,EAAC,sBAAsB,EAAE,8BAA8B,CAAC,CAAC;IAEnF,sDAAsD;IACtD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,MAAM,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,+EAA+E;YAC/E,IAAI,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/C,OAAO,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,GAAW,EACX,OAAe,EACf,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE;QACnD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,KAAK,EAAE;SACjC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;KAClC,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA2D,CAAC;IAC/F,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,aAAa;QACxC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;KAC/B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,MAAc;IAC1D,MAAM,QAAQ,GAAG,IAAA,eAAS,EAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACvE,MAAM,KAAK,GAAG,IAAA,eAAS,EAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;IAEtE,MAAM,OAAO,GACX,IAAA,eAAS,EAAC,oBAAoB,CAAC;QAC/B,CAAC,QAAQ,KAAK,QAAQ;YACpB,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,gCAAgC,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,EAAE;QAC7E,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,EAAE;SAClC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;gBAC1C;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,sEAAsE,OAAO,EAAE;iBACzF;aACF;SACF,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC"}
|