@probelabs/visor 0.1.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/README.md +1240 -0
- package/action.yml +142 -0
- package/defaults/.visor.yaml +184 -0
- package/dist/action-cli-bridge.d.ts +104 -0
- package/dist/action-cli-bridge.d.ts.map +1 -0
- package/dist/action-cli-bridge.js +372 -0
- package/dist/action-cli-bridge.js.map +1 -0
- package/dist/ai-review-service.d.ts +84 -0
- package/dist/ai-review-service.d.ts.map +1 -0
- package/dist/ai-review-service.js +674 -0
- package/dist/ai-review-service.js.map +1 -0
- package/dist/check-execution-engine.d.ts +165 -0
- package/dist/check-execution-engine.d.ts.map +1 -0
- package/dist/check-execution-engine.js +1172 -0
- package/dist/check-execution-engine.js.map +1 -0
- package/dist/cli-main.d.ts +6 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +247 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/cli.d.ts +47 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +224 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +10 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +53 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +63 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +369 -0
- package/dist/config.js.map +1 -0
- package/dist/dependency-resolver.d.ts +54 -0
- package/dist/dependency-resolver.d.ts.map +1 -0
- package/dist/dependency-resolver.js +163 -0
- package/dist/dependency-resolver.js.map +1 -0
- package/dist/event-mapper.d.ts +125 -0
- package/dist/event-mapper.d.ts.map +1 -0
- package/dist/event-mapper.js +311 -0
- package/dist/event-mapper.js.map +1 -0
- package/dist/failure-condition-evaluator.d.ts +81 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -0
- package/dist/failure-condition-evaluator.js +445 -0
- package/dist/failure-condition-evaluator.js.map +1 -0
- package/dist/git-repository-analyzer.d.ts +45 -0
- package/dist/git-repository-analyzer.d.ts.map +1 -0
- package/dist/git-repository-analyzer.js +285 -0
- package/dist/git-repository-analyzer.js.map +1 -0
- package/dist/github-check-service.d.ts +104 -0
- package/dist/github-check-service.d.ts.map +1 -0
- package/dist/github-check-service.js +382 -0
- package/dist/github-check-service.js.map +1 -0
- package/dist/github-comments.d.ts +109 -0
- package/dist/github-comments.d.ts.map +1 -0
- package/dist/github-comments.js +289 -0
- package/dist/github-comments.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1265 -0
- package/dist/index.js.map +1 -0
- package/dist/output-formatters.d.ts +66 -0
- package/dist/output-formatters.d.ts.map +1 -0
- package/dist/output-formatters.js +624 -0
- package/dist/output-formatters.js.map +1 -0
- package/dist/pr-analyzer.d.ts +47 -0
- package/dist/pr-analyzer.d.ts.map +1 -0
- package/dist/pr-analyzer.js +194 -0
- package/dist/pr-analyzer.js.map +1 -0
- package/dist/pr-detector.d.ts +78 -0
- package/dist/pr-detector.d.ts.map +1 -0
- package/dist/pr-detector.js +357 -0
- package/dist/pr-detector.js.map +1 -0
- package/dist/providers/ai-check-provider.d.ts +40 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -0
- package/dist/providers/ai-check-provider.js +416 -0
- package/dist/providers/ai-check-provider.js.map +1 -0
- package/dist/providers/check-provider-registry.d.ts +67 -0
- package/dist/providers/check-provider-registry.d.ts.map +1 -0
- package/dist/providers/check-provider-registry.js +138 -0
- package/dist/providers/check-provider-registry.js.map +1 -0
- package/dist/providers/check-provider.interface.d.ts +78 -0
- package/dist/providers/check-provider.interface.d.ts.map +1 -0
- package/dist/providers/check-provider.interface.js +11 -0
- package/dist/providers/check-provider.interface.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/script-check-provider.d.ts +20 -0
- package/dist/providers/script-check-provider.d.ts.map +1 -0
- package/dist/providers/script-check-provider.js +163 -0
- package/dist/providers/script-check-provider.js.map +1 -0
- package/dist/providers/tool-check-provider.d.ts +19 -0
- package/dist/providers/tool-check-provider.d.ts.map +1 -0
- package/dist/providers/tool-check-provider.js +125 -0
- package/dist/providers/tool-check-provider.js.map +1 -0
- package/dist/providers/webhook-check-provider.d.ts +21 -0
- package/dist/providers/webhook-check-provider.d.ts.map +1 -0
- package/dist/providers/webhook-check-provider.js +173 -0
- package/dist/providers/webhook-check-provider.js.map +1 -0
- package/dist/reviewer.d.ts +88 -0
- package/dist/reviewer.d.ts.map +1 -0
- package/dist/reviewer.js +760 -0
- package/dist/reviewer.js.map +1 -0
- package/dist/types/cli.d.ts +41 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +3 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +315 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/utils/env-resolver.d.ts +38 -0
- package/dist/utils/env-resolver.d.ts.map +1 -0
- package/dist/utils/env-resolver.js +130 -0
- package/dist/utils/env-resolver.js.map +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebhookCheckProvider = void 0;
|
|
4
|
+
const check_provider_interface_1 = require("./check-provider.interface");
|
|
5
|
+
/**
|
|
6
|
+
* Check provider that sends PR info to a webhook for external analysis
|
|
7
|
+
*/
|
|
8
|
+
class WebhookCheckProvider extends check_provider_interface_1.CheckProvider {
|
|
9
|
+
getName() {
|
|
10
|
+
return 'webhook';
|
|
11
|
+
}
|
|
12
|
+
getDescription() {
|
|
13
|
+
return 'Send PR data to external webhook for custom analysis';
|
|
14
|
+
}
|
|
15
|
+
async validateConfig(config) {
|
|
16
|
+
if (!config || typeof config !== 'object') {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const cfg = config;
|
|
20
|
+
// Type must be 'webhook'
|
|
21
|
+
if (cfg.type !== 'webhook') {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
// Must have URL specified
|
|
25
|
+
if (typeof cfg.url !== 'string' || !cfg.url) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
// Validate URL format
|
|
29
|
+
try {
|
|
30
|
+
new URL(cfg.url);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async execute(prInfo, config, _dependencyResults) {
|
|
38
|
+
const url = config.url;
|
|
39
|
+
const method = config.method || 'POST';
|
|
40
|
+
const headers = config.headers || {};
|
|
41
|
+
const timeout = config.timeout || 30000;
|
|
42
|
+
// Prepare webhook payload
|
|
43
|
+
const payload = {
|
|
44
|
+
title: prInfo.title,
|
|
45
|
+
body: prInfo.body,
|
|
46
|
+
author: prInfo.author,
|
|
47
|
+
base: prInfo.base,
|
|
48
|
+
head: prInfo.head,
|
|
49
|
+
files: prInfo.files.map(f => ({
|
|
50
|
+
filename: f.filename,
|
|
51
|
+
status: f.status,
|
|
52
|
+
additions: f.additions,
|
|
53
|
+
deletions: f.deletions,
|
|
54
|
+
changes: f.changes,
|
|
55
|
+
patch: f.patch,
|
|
56
|
+
})),
|
|
57
|
+
totalAdditions: prInfo.totalAdditions,
|
|
58
|
+
totalDeletions: prInfo.totalDeletions,
|
|
59
|
+
metadata: config.metadata || {},
|
|
60
|
+
};
|
|
61
|
+
try {
|
|
62
|
+
// Send webhook request
|
|
63
|
+
const response = await this.sendWebhookRequest(url, method, headers, payload, timeout);
|
|
64
|
+
// Parse webhook response
|
|
65
|
+
return this.parseWebhookResponse(response, url);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
return this.createErrorResult(url, error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async sendWebhookRequest(url, method, headers, payload, timeout) {
|
|
72
|
+
// Check if fetch is available (Node 18+)
|
|
73
|
+
if (typeof fetch === 'undefined') {
|
|
74
|
+
throw new Error('Webhook provider requires Node.js 18+ or node-fetch package');
|
|
75
|
+
}
|
|
76
|
+
const controller = new AbortController();
|
|
77
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
78
|
+
try {
|
|
79
|
+
const response = await fetch(url, {
|
|
80
|
+
method,
|
|
81
|
+
headers: {
|
|
82
|
+
'Content-Type': 'application/json',
|
|
83
|
+
...headers,
|
|
84
|
+
},
|
|
85
|
+
body: JSON.stringify(payload),
|
|
86
|
+
signal: controller.signal,
|
|
87
|
+
});
|
|
88
|
+
clearTimeout(timeoutId);
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
throw new Error(`Webhook returned ${response.status}: ${response.statusText}`);
|
|
91
|
+
}
|
|
92
|
+
return await response.json();
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
clearTimeout(timeoutId);
|
|
96
|
+
if (error.name === 'AbortError') {
|
|
97
|
+
throw new Error(`Webhook request timed out after ${timeout}ms`);
|
|
98
|
+
}
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
parseWebhookResponse(response, url) {
|
|
103
|
+
// Validate and normalize the webhook response
|
|
104
|
+
if (!response || typeof response !== 'object') {
|
|
105
|
+
return this.createErrorResult(url, new Error('Invalid webhook response format'));
|
|
106
|
+
}
|
|
107
|
+
const issues = Array.isArray(response.comments)
|
|
108
|
+
? response.comments.map((c) => ({
|
|
109
|
+
file: c.file || 'unknown',
|
|
110
|
+
line: c.line || 0,
|
|
111
|
+
endLine: c.endLine,
|
|
112
|
+
ruleId: c.ruleId || `webhook/${this.validateCategory(c.category)}`,
|
|
113
|
+
message: c.message || '',
|
|
114
|
+
severity: this.validateSeverity(c.severity),
|
|
115
|
+
category: this.validateCategory(c.category),
|
|
116
|
+
suggestion: c.suggestion,
|
|
117
|
+
replacement: c.replacement,
|
|
118
|
+
}))
|
|
119
|
+
: [];
|
|
120
|
+
return {
|
|
121
|
+
issues,
|
|
122
|
+
suggestions: Array.isArray(response.suggestions) ? response.suggestions : [],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
createErrorResult(url, error) {
|
|
126
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
127
|
+
return {
|
|
128
|
+
issues: [
|
|
129
|
+
{
|
|
130
|
+
file: 'webhook',
|
|
131
|
+
line: 0,
|
|
132
|
+
endLine: undefined,
|
|
133
|
+
ruleId: 'webhook/error',
|
|
134
|
+
message: `Webhook execution error: ${errorMessage}`,
|
|
135
|
+
severity: 'error',
|
|
136
|
+
category: 'logic',
|
|
137
|
+
suggestion: undefined,
|
|
138
|
+
replacement: undefined,
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
suggestions: [`Webhook ${url} failed: ${errorMessage}`],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
validateSeverity(severity) {
|
|
145
|
+
const valid = ['info', 'warning', 'error', 'critical'];
|
|
146
|
+
return valid.includes(severity)
|
|
147
|
+
? severity
|
|
148
|
+
: 'info';
|
|
149
|
+
}
|
|
150
|
+
validateCategory(category) {
|
|
151
|
+
const valid = ['security', 'performance', 'style', 'logic', 'documentation'];
|
|
152
|
+
return valid.includes(category)
|
|
153
|
+
? category
|
|
154
|
+
: 'logic';
|
|
155
|
+
}
|
|
156
|
+
getSupportedConfigKeys() {
|
|
157
|
+
return ['type', 'url', 'method', 'headers', 'timeout', 'metadata', 'retryCount', 'retryDelay'];
|
|
158
|
+
}
|
|
159
|
+
async isAvailable() {
|
|
160
|
+
// Webhook is available if fetch is available
|
|
161
|
+
return typeof fetch !== 'undefined';
|
|
162
|
+
}
|
|
163
|
+
getRequirements() {
|
|
164
|
+
return [
|
|
165
|
+
'Valid webhook URL',
|
|
166
|
+
'Network access to webhook endpoint',
|
|
167
|
+
'Webhook must return JSON in ReviewSummary format',
|
|
168
|
+
'Webhook must respond within timeout period',
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.WebhookCheckProvider = WebhookCheckProvider;
|
|
173
|
+
//# sourceMappingURL=webhook-check-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-check-provider.js","sourceRoot":"","sources":["../../src/providers/webhook-check-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Octokit } from '@octokit/rest';
|
|
2
|
+
import { PRInfo } from './pr-analyzer';
|
|
3
|
+
import { AIDebugInfo } from './ai-review-service';
|
|
4
|
+
import { CustomTemplateConfig } from './types/config';
|
|
5
|
+
export interface ReviewIssue {
|
|
6
|
+
file: string;
|
|
7
|
+
line: number;
|
|
8
|
+
endLine?: number;
|
|
9
|
+
ruleId: string;
|
|
10
|
+
message: string;
|
|
11
|
+
severity: 'info' | 'warning' | 'error' | 'critical';
|
|
12
|
+
category: 'security' | 'performance' | 'style' | 'logic' | 'documentation';
|
|
13
|
+
group?: string;
|
|
14
|
+
schema?: string;
|
|
15
|
+
timestamp?: number;
|
|
16
|
+
template?: CustomTemplateConfig;
|
|
17
|
+
suggestion?: string;
|
|
18
|
+
replacement?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ReviewComment {
|
|
21
|
+
file: string;
|
|
22
|
+
line: number;
|
|
23
|
+
message: string;
|
|
24
|
+
severity: 'info' | 'warning' | 'error' | 'critical';
|
|
25
|
+
category: 'security' | 'performance' | 'style' | 'logic' | 'documentation';
|
|
26
|
+
suggestion?: string;
|
|
27
|
+
replacement?: string;
|
|
28
|
+
ruleId?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ReviewSummary {
|
|
31
|
+
issues: ReviewIssue[];
|
|
32
|
+
suggestions: string[];
|
|
33
|
+
/** Debug information (only included when debug mode is enabled) */
|
|
34
|
+
debug?: AIDebugInfo;
|
|
35
|
+
}
|
|
36
|
+
export interface ReviewOptions {
|
|
37
|
+
focus?: 'security' | 'performance' | 'style' | 'all';
|
|
38
|
+
format?: 'table' | 'json' | 'markdown' | 'sarif';
|
|
39
|
+
debug?: boolean;
|
|
40
|
+
config?: import('./types/config').VisorConfig;
|
|
41
|
+
checks?: string[];
|
|
42
|
+
parallelExecution?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare function calculateTotalIssues(issues: ReviewIssue[]): number;
|
|
45
|
+
export declare function calculateCriticalIssues(issues: ReviewIssue[]): number;
|
|
46
|
+
export declare function convertIssuesToComments(issues: ReviewIssue[]): ReviewComment[];
|
|
47
|
+
export declare class PRReviewer {
|
|
48
|
+
private octokit;
|
|
49
|
+
private commentManager;
|
|
50
|
+
private aiReviewService;
|
|
51
|
+
constructor(octokit: Octokit);
|
|
52
|
+
reviewPR(owner: string, repo: string, prNumber: number, prInfo: PRInfo, options?: ReviewOptions): Promise<ReviewSummary>;
|
|
53
|
+
postReviewComment(owner: string, repo: string, prNumber: number, summary: ReviewSummary, options?: ReviewOptions & {
|
|
54
|
+
commentId?: string;
|
|
55
|
+
triggeredBy?: string;
|
|
56
|
+
commitSha?: string;
|
|
57
|
+
}): Promise<void>;
|
|
58
|
+
private formatReviewCommentWithVisorFormat;
|
|
59
|
+
private renderWithSchemaTemplate;
|
|
60
|
+
private generateGitHubDiffHash;
|
|
61
|
+
private enhanceIssuesWithGitHubLinks;
|
|
62
|
+
private renderSingleCheckTemplate;
|
|
63
|
+
private groupIssuesByCheck;
|
|
64
|
+
private extractCheckNameFromRuleId;
|
|
65
|
+
private groupIssuesByGroup;
|
|
66
|
+
private formatReviewComment;
|
|
67
|
+
private groupCommentsByCategory;
|
|
68
|
+
private groupCommentsByCheck;
|
|
69
|
+
private formatDebugSection;
|
|
70
|
+
private saveDebugArtifact;
|
|
71
|
+
private formatDebugAsMarkdown;
|
|
72
|
+
private parseCheckSections;
|
|
73
|
+
private formatIssuesTable;
|
|
74
|
+
private getLanguageHint;
|
|
75
|
+
/**
|
|
76
|
+
* Load custom template content from file or raw content
|
|
77
|
+
*/
|
|
78
|
+
private loadCustomTemplate;
|
|
79
|
+
/**
|
|
80
|
+
* Detect if a string is likely a file path and if the file exists
|
|
81
|
+
*/
|
|
82
|
+
private isFilePath;
|
|
83
|
+
/**
|
|
84
|
+
* Safely load template from file with security checks
|
|
85
|
+
*/
|
|
86
|
+
private loadTemplateFromFile;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=reviewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../src/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAmB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAInE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IACpD,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,eAAe,CAAC;IAG3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAGhC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IACpD,QAAQ,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,eAAe,CAAC;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAE5B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,mEAAmE;IACnE,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,GAAG,KAAK,CAAC;IACrD,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,gBAAgB,EAAE,WAAW,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAElE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAErE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,aAAa,EAAE,CAW9E;AAED,qBAAa,UAAU;IAIT,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;gBAErB,OAAO,EAAE,OAAO;IAK9B,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,aAAa,CAAC;IA8BnB,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,aAAa,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAC7F,OAAO,CAAC,IAAI,CAAC;YAkEF,kCAAkC;YA+BlC,wBAAwB;IAwCtC,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,4BAA4B;YAwBtB,yBAAyB;IAsEvC,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,mBAAmB;IAiD3B,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,kBAAkB;IA4F1B,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,qBAAqB;IAkE7B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,iBAAiB;IAuFzB,OAAO,CAAC,eAAe;IAsCvB;;OAEG;YACW,kBAAkB;IAmBhC;;OAEG;YACW,UAAU;IAqExB;;OAEG;YACW,oBAAoB;CA4CnC"}
|