@lannguyensi/harness 0.61.0 → 0.63.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 +46 -0
- package/README.md +1 -1
- package/dist/cli/apply/install-codex-config.d.ts +8 -5
- package/dist/cli/apply/install-codex-config.js +196 -25
- package/dist/cli/apply/install-codex-config.js.map +1 -1
- package/dist/cli/approve/understanding.d.ts +36 -2
- package/dist/cli/approve/understanding.js +191 -42
- package/dist/cli/approve/understanding.js.map +1 -1
- package/dist/cli/bounded-stdin.d.ts +15 -2
- package/dist/cli/bounded-stdin.js +32 -3
- package/dist/cli/bounded-stdin.js.map +1 -1
- package/dist/cli/explain-policy.d.ts +11 -0
- package/dist/cli/explain-policy.js +41 -3
- package/dist/cli/explain-policy.js.map +1 -1
- package/dist/cli/gc/index.d.ts +6 -2
- package/dist/cli/gc/index.js +22 -7
- package/dist/cli/gc/index.js.map +1 -1
- package/dist/cli/index.js +15 -14
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/pack/auto-approve-path.js +29 -3
- package/dist/cli/pack/auto-approve-path.js.map +1 -1
- package/dist/cli/pack/hook-bootstrap.d.ts +0 -12
- package/dist/cli/pack/hook-bootstrap.js +1 -27
- package/dist/cli/pack/hook-bootstrap.js.map +1 -1
- package/dist/cli/pack/hook-codex-pre-tool-use.js +4 -2
- package/dist/cli/pack/hook-codex-pre-tool-use.js.map +1 -1
- package/dist/cli/pack/hook-pre-tool-use.js +19 -5
- package/dist/cli/pack/hook-pre-tool-use.js.map +1 -1
- package/dist/cli/pack/hook-runtime-reality.js +2 -2
- package/dist/cli/pack/hook-runtime-reality.js.map +1 -1
- package/dist/cli/policy/intercept.js +75 -103
- package/dist/cli/policy/intercept.js.map +1 -1
- package/dist/cli/policy/risk-envelope-enrichment.d.ts +40 -0
- package/dist/cli/policy/risk-envelope-enrichment.js +108 -0
- package/dist/cli/policy/risk-envelope-enrichment.js.map +1 -0
- package/dist/io/atomic-write.d.ts +37 -1
- package/dist/io/atomic-write.js +61 -8
- package/dist/io/atomic-write.js.map +1 -1
- package/dist/io/display-path.d.ts +11 -0
- package/dist/io/display-path.js +29 -0
- package/dist/io/display-path.js.map +1 -0
- package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution/index.js +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +152 -21
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +286 -48
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,11 +6,10 @@
|
|
|
6
6
|
import { openLedgerSession, } from "../../policies/index.js";
|
|
7
7
|
import * as fs from "node:fs";
|
|
8
8
|
import * as os from "node:os";
|
|
9
|
-
import
|
|
10
|
-
import { readStdinBounded, STDIN_IDLE_TIMEOUT_MS, stdinTimeoutNote } from "../bounded-stdin.js";
|
|
9
|
+
import { readStdinBounded, STDIN_IDLE_TIMEOUT_MS, stdinTimeoutNote, stdinTimeoutBlockJson, stdinTimeoutBlockReason } from "../bounded-stdin.js";
|
|
11
10
|
import { buildActionEnvelope, intercept, isBlockingDecision, recordPolicyDecisionOnSession, resolveEnvironment, resolveGitContext, resolveKubeContext, sanitizeEnvelopeReason, } from "../../runtime/index.js";
|
|
12
11
|
import { resolveGeneratedDir, writePendingApproval } from "../../runtime/pending-approval.js";
|
|
13
|
-
import {
|
|
12
|
+
import { ENV_RANK, resolveBashPrefixEnrichment } from "./risk-envelope-enrichment.js";
|
|
14
13
|
import { parseKubectlTarget } from "../../runtime/kubectl-target-parse.js";
|
|
15
14
|
import { MAX_NORMALIZE_LENGTH, normalizeCommand, normalizeCommandAmpAware, normalizeCommandQuoteAware, segmentViewOf, } from "../../runtime/command-normalize.js";
|
|
16
15
|
import { extractShellCommand, SHELL_ALIASES } from "../../runtime/tool-name-aliases.js";
|
|
@@ -84,18 +83,6 @@ function isVerboseEnabled(opts) {
|
|
|
84
83
|
// Accept anything truthy except literal disable-words (case-insensitive).
|
|
85
84
|
return !/^(0|false|no|off)$/i.test(env.trim());
|
|
86
85
|
}
|
|
87
|
-
/**
|
|
88
|
-
* Read the command string out of a Bash tool's `tool_input.command`,
|
|
89
|
-
* returning null when the shape is wrong (defensive — production input
|
|
90
|
-
* comes from Claude Code, but tests and Codex bridges have varied
|
|
91
|
-
* payload shapes).
|
|
92
|
-
*/
|
|
93
|
-
function readBashCommand(input) {
|
|
94
|
-
if (!input || typeof input !== "object" || Array.isArray(input))
|
|
95
|
-
return null;
|
|
96
|
-
const cmd = input.command;
|
|
97
|
-
return typeof cmd === "string" && cmd.length > 0 ? cmd : null;
|
|
98
|
-
}
|
|
99
86
|
// Derived from `SHELL_ALIASES` rather than hand-copying its members (fix
|
|
100
87
|
// round 2): `tool-name-aliases.ts`'s own header warns against the copy,
|
|
101
88
|
// and since fix round 1 the precompute-matches-matcher argument above
|
|
@@ -144,48 +131,6 @@ function resolvePolicyCwd(event, codexCommandCwd) {
|
|
|
144
131
|
}
|
|
145
132
|
return process.cwd();
|
|
146
133
|
}
|
|
147
|
-
// Mirrors `ENV_PRECEDENCE` in `../../runtime/environment-resolver.ts`
|
|
148
|
-
// (most-dangerous-first). Kept as a local, small, duplicate table
|
|
149
|
-
// instead of importing that module's private const, so this file stays
|
|
150
|
-
// a read-only consumer of `resolveEnvironment`'s public API rather than
|
|
151
|
-
// reaching into its internals. `unknown` is deliberately ranked lowest:
|
|
152
|
-
// resolving to no signal at all must never look like an "upgrade" over
|
|
153
|
-
// a branch that DID fire a resolver.
|
|
154
|
-
const ENV_RANK = {
|
|
155
|
-
production: 0,
|
|
156
|
-
staging: 1,
|
|
157
|
-
dev: 2,
|
|
158
|
-
local: 3,
|
|
159
|
-
unknown: 4,
|
|
160
|
-
};
|
|
161
|
-
/**
|
|
162
|
-
* Branch-switch, upgrade-only merge (task 341e024b): a leading `git
|
|
163
|
-
* switch <branch>` / `git checkout <branch>` names the branch the REST
|
|
164
|
-
* of the command actually runs against, the same way a leading `cd
|
|
165
|
-
* <path>` names a different working directory (see `resolverGit`'s own
|
|
166
|
-
* comment at the call site). Unlike that `cd` merge — which fully
|
|
167
|
-
* REPLACES the git context and can move the resolved environment in
|
|
168
|
-
* EITHER direction (G5, pre-existing, out of scope for this task) —
|
|
169
|
-
* this merge is deliberately asymmetric: it only ever pushes the
|
|
170
|
-
* resolved environment to something MORE dangerous, never less.
|
|
171
|
-
*
|
|
172
|
-
* Both the base git context and the switch-target candidate (same repo
|
|
173
|
-
* / sha, only `branch` differs) are run through the SAME
|
|
174
|
-
* `resolveEnvironment` call with IDENTICAL env / kube inputs, so any
|
|
175
|
-
* difference in the result is attributable to the branch alone. The
|
|
176
|
-
* more dangerous of the two (`ENV_RANK` order) wins; a switch AWAY from
|
|
177
|
-
* a production branch never downgrades — when the candidate resolves to
|
|
178
|
-
* something equally or less dangerous, `baseGit` is returned unchanged.
|
|
179
|
-
*/
|
|
180
|
-
function applyBranchSwitchUpgrade(event, manifest, cwd, baseGit, branchTarget, inputs, user, host, now) {
|
|
181
|
-
if (branchTarget === null || branchTarget === baseGit.branch)
|
|
182
|
-
return baseGit;
|
|
183
|
-
const candidateGit = { ...baseGit, branch: branchTarget };
|
|
184
|
-
const effectiveNow = now ?? new Date();
|
|
185
|
-
const baseResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git: baseGit, user, host, now: effectiveNow }), manifest.environments.resolvers, inputs);
|
|
186
|
-
const candidateResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git: candidateGit, user, host, now: effectiveNow }), manifest.environments.resolvers, inputs);
|
|
187
|
-
return ENV_RANK[candidateResolution.name] < ENV_RANK[baseResolution.name] ? candidateGit : baseGit;
|
|
188
|
-
}
|
|
189
134
|
/**
|
|
190
135
|
* Explicit kubectl target, upgrade-only merge (task a7eb1a71): an
|
|
191
136
|
* explicit --context/--namespace/-n on a kubectl command can only push
|
|
@@ -507,17 +452,65 @@ function degradedLedgerClient(reason, stderr, hookName) {
|
|
|
507
452
|
},
|
|
508
453
|
};
|
|
509
454
|
}
|
|
455
|
+
/**
|
|
456
|
+
* The hook event name a timed-out read carries when it names a hook event other
|
|
457
|
+
* than PreToolUse, else `undefined`: the text is empty, truncated, not a JSON
|
|
458
|
+
* object, names no event, or names PreToolUse. The caller keeps its pre-existing
|
|
459
|
+
* continue behaviour only for an event this returns a name for.
|
|
460
|
+
*/
|
|
461
|
+
function otherHookEventName(text) {
|
|
462
|
+
let parsed;
|
|
463
|
+
try {
|
|
464
|
+
parsed = JSON.parse(text.trim());
|
|
465
|
+
}
|
|
466
|
+
catch {
|
|
467
|
+
return undefined;
|
|
468
|
+
}
|
|
469
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
470
|
+
return undefined;
|
|
471
|
+
const name = parsed.hook_event_name;
|
|
472
|
+
return typeof name === "string" && name.length > 0 && name !== "PreToolUse" ? name : undefined;
|
|
473
|
+
}
|
|
510
474
|
export async function runInterceptCli(opts = {}) {
|
|
511
475
|
const stdin = opts.stdin ?? process.stdin;
|
|
512
476
|
const stdout = opts.stdout ?? process.stdout;
|
|
513
477
|
const stderr = opts.stderr ?? process.stderr;
|
|
514
478
|
const verbose = isVerboseEnabled(opts);
|
|
515
479
|
const idleTimeoutMs = opts.stdinIdleTimeoutMs ?? STDIN_IDLE_TIMEOUT_MS;
|
|
480
|
+
// Single pause-check options, shared by both checkPauseFromLoader calls.
|
|
481
|
+
const pauseOpts = {
|
|
482
|
+
loaderOpts: opts,
|
|
483
|
+
hookLabel: "policy intercept",
|
|
484
|
+
stderr,
|
|
485
|
+
};
|
|
486
|
+
if (opts.generatedDir !== undefined)
|
|
487
|
+
pauseOpts.generatedDir = opts.generatedDir;
|
|
488
|
+
if (opts.now !== undefined)
|
|
489
|
+
pauseOpts.now = opts.now;
|
|
516
490
|
const read = await readStdinBounded(stdin, idleTimeoutMs);
|
|
491
|
+
if (read.timedOut && otherHookEventName(read.text) === undefined) {
|
|
492
|
+
// A timed-out read leaves no event to judge, and this verb is the
|
|
493
|
+
// PreToolUse gate entrypoint: continuing as an empty event turned a block
|
|
494
|
+
// into an allow whenever the host stalled past the bound and then wrote a
|
|
495
|
+
// complete gated event. The rendered hook command carries no event name, so
|
|
496
|
+
// the event the read itself declares is the only signal there is: an event
|
|
497
|
+
// naming another hook event keeps the continue path below, anything else
|
|
498
|
+
// (nothing read, a truncated or unparseable prefix, a PreToolUse event, or
|
|
499
|
+
// an object with no event name) is treated as the PreToolUse call this
|
|
500
|
+
// verb is registered for. The operator pause still wins, and a paused run
|
|
501
|
+
// allows exactly as it does after a read that closed.
|
|
502
|
+
if (checkPauseFromLoader(pauseOpts).paused) {
|
|
503
|
+
return { exitCode: 0, decisions: [], blocked: false };
|
|
504
|
+
}
|
|
505
|
+
const reason = stdinTimeoutBlockReason(idleTimeoutMs);
|
|
506
|
+
stderr.write(`harness policy intercept${hookSuffix(opts.hookName)}: BLOCK: ${reason}\n`);
|
|
507
|
+
stdout.write(`${stdinTimeoutBlockJson(reason)}\n`);
|
|
508
|
+
return { exitCode: 0, decisions: [], blocked: true };
|
|
509
|
+
}
|
|
517
510
|
if (read.timedOut) {
|
|
518
|
-
//
|
|
519
|
-
//
|
|
520
|
-
stderr.write(`harness policy intercept${hookSuffix(opts.hookName)}: ${stdinTimeoutNote(read, idleTimeoutMs
|
|
511
|
+
// Only an event that names another hook event gets here (see above), so the
|
|
512
|
+
// text read is non-empty and parsed as that event below.
|
|
513
|
+
stderr.write(`harness policy intercept${hookSuffix(opts.hookName)}: ${stdinTimeoutNote(read, idleTimeoutMs)}\n`);
|
|
521
514
|
}
|
|
522
515
|
const raw = read.text;
|
|
523
516
|
let event;
|
|
@@ -535,15 +528,6 @@ export async function runInterceptCli(opts = {}) {
|
|
|
535
528
|
// very gates the kill switch most needs to silence (a wedged preflight /
|
|
536
529
|
// grounding gate is the canonical reason an operator pauses at all).
|
|
537
530
|
{
|
|
538
|
-
const pauseOpts = {
|
|
539
|
-
loaderOpts: opts,
|
|
540
|
-
hookLabel: "policy intercept",
|
|
541
|
-
stderr,
|
|
542
|
-
};
|
|
543
|
-
if (opts.generatedDir !== undefined)
|
|
544
|
-
pauseOpts.generatedDir = opts.generatedDir;
|
|
545
|
-
if (opts.now !== undefined)
|
|
546
|
-
pauseOpts.now = opts.now;
|
|
547
531
|
if (checkPauseFromLoader(pauseOpts).paused) {
|
|
548
532
|
return { exitCode: 0, decisions: [], blocked: false };
|
|
549
533
|
}
|
|
@@ -811,7 +795,7 @@ export async function runInterceptCli(opts = {}) {
|
|
|
811
795
|
// names the hook's own cwd; ${REPO}/${BRANCH} (`cwdGitContext`
|
|
812
796
|
// above, feeding `builtins`) are cwd-only too — see the comment
|
|
813
797
|
// above `cwdGitContext`'s declaration. The Risk Gate resolver's git
|
|
814
|
-
// base, `resolverGit`
|
|
798
|
+
// base, `resolverGit` (risk-envelope-enrichment.ts), is its own narrow parse: it
|
|
815
799
|
// recognises only a leading `cd`, never `git -C` / `--work-tree` /
|
|
816
800
|
// `--git-dir` / `env -C`. Bottom line: `resolverGit` must never read
|
|
817
801
|
// anything other than `cwdGitContext`, or the leading-`cd` target
|
|
@@ -833,15 +817,32 @@ export async function runInterceptCli(opts = {}) {
|
|
|
833
817
|
// branch, as in the example above) — `resolverGit` trusts whichever
|
|
834
818
|
// of the two the command happens to name, with no independent check
|
|
835
819
|
// that the `cd` target is the repo the destructive command actually
|
|
836
|
-
// runs against. The `git switch`/`checkout` merge
|
|
837
|
-
// (`gitForRisk`,
|
|
820
|
+
// runs against. The `git switch`/`checkout` merge in that helper
|
|
821
|
+
// (`gitForRisk`, `applyBranchSwitchUpgrade`, same module) deliberately does
|
|
838
822
|
// NOT share this bidirectional-risk shape: it is a SEPARATE,
|
|
839
823
|
// upgrade-only step layered on top of `resolverGit`, not a change to
|
|
840
824
|
// `resolverGit` itself — a switch away from a production branch can
|
|
841
825
|
// never downgrade what `resolverGit` (cwd- or cd-based) already
|
|
842
826
|
// resolved.
|
|
843
|
-
const
|
|
844
|
-
const
|
|
827
|
+
const riskUser = safeOs(() => os.userInfo().username);
|
|
828
|
+
const riskHost = safeOs(() => os.hostname());
|
|
829
|
+
// The leading-prefix parse and the three merges it feeds (inline
|
|
830
|
+
// `VAR=value` env, leading `cd`, leading `git switch|checkout`)
|
|
831
|
+
// live in `resolveBashPrefixEnrichment`, shared with `harness
|
|
832
|
+
// explain-policy` so the debug verb cannot drift from this hook.
|
|
833
|
+
// The kubectl-target merge below stays hook-only.
|
|
834
|
+
const { bashPrefix, riskBashCommand, git: gitForRisk, env: resolverEnv } = resolveBashPrefixEnrichment({
|
|
835
|
+
event,
|
|
836
|
+
manifest,
|
|
837
|
+
cwd,
|
|
838
|
+
cwdGitContext,
|
|
839
|
+
env: opts.env ?? process.env,
|
|
840
|
+
kubeContext: kube.context,
|
|
841
|
+
kubeNamespace: kube.namespace,
|
|
842
|
+
user: riskUser,
|
|
843
|
+
host: riskHost,
|
|
844
|
+
now: opts.now,
|
|
845
|
+
});
|
|
845
846
|
// Explicit `--context`/`--namespace`/`-n` on a `kubectl ...`
|
|
846
847
|
// invocation (task a7eb1a71). Fed the REMAINDER after `bashPrefix`
|
|
847
848
|
// consumed a leading `cd <path> &&` / `VAR=value` / `git switch
|
|
@@ -853,35 +854,6 @@ export async function runInterceptCli(opts = {}) {
|
|
|
853
854
|
// that is not the first chained segment, a piped kubectl).
|
|
854
855
|
const kubectlSubject = riskBashCommand === null ? null : riskBashCommand.slice(bashPrefix?.remainderStart ?? 0);
|
|
855
856
|
const kubectlTarget = kubectlSubject === null ? null : parseKubectlTarget(kubectlSubject);
|
|
856
|
-
const resolverGit = (() => {
|
|
857
|
-
if (bashPrefix === null || bashPrefix.cdTarget === null)
|
|
858
|
-
return cwdGitContext;
|
|
859
|
-
const effective = path.isAbsolute(bashPrefix.cdTarget)
|
|
860
|
-
? bashPrefix.cdTarget
|
|
861
|
-
: path.resolve(cwd, bashPrefix.cdTarget);
|
|
862
|
-
// resolveGitContext returns empty strings for non-git paths;
|
|
863
|
-
// an empty repo means cd-target was bogus, fall through.
|
|
864
|
-
const candidate = resolveGitContext(effective);
|
|
865
|
-
return candidate.repo.length > 0 ? candidate : cwdGitContext;
|
|
866
|
-
})();
|
|
867
|
-
const resolverEnv = (() => {
|
|
868
|
-
const base = opts.env ?? process.env;
|
|
869
|
-
if (bashPrefix === null || Object.keys(bashPrefix.inlineEnv).length === 0)
|
|
870
|
-
return base;
|
|
871
|
-
// Inline assignments are the operator's explicit override; they
|
|
872
|
-
// win over process.env (matches POSIX `VAR=value cmd` semantics).
|
|
873
|
-
return { ...base, ...bashPrefix.inlineEnv };
|
|
874
|
-
})();
|
|
875
|
-
const riskUser = safeOs(() => os.userInfo().username);
|
|
876
|
-
const riskHost = safeOs(() => os.hostname());
|
|
877
|
-
// A leading `git switch`/`checkout <branch>` (task 341e024b) is
|
|
878
|
-
// merged on top of `resolverGit` above, upgrade-only, using the
|
|
879
|
-
// AMBIENT kube state (`kube` from `resolveKubeContext()` / the
|
|
880
|
-
// `opts.kubeContext`/`opts.kubeNamespace` test override), unaffected
|
|
881
|
-
// by the kubectl-target merge below. See
|
|
882
|
-
// `applyBranchSwitchUpgrade`'s own doc comment for why this one is
|
|
883
|
-
// NOT a straight replacement the way the `cd` merge is.
|
|
884
|
-
const gitForRisk = applyBranchSwitchUpgrade(event, manifest, cwd, resolverGit, bashPrefix?.branchTarget ?? null, { env: resolverEnv, kubeContext: kube.context, kubeNamespace: kube.namespace }, riskUser, riskHost, opts.now);
|
|
885
857
|
// CONFLICT PRIORITY (task a7eb1a71): an explicit kubectl
|
|
886
858
|
// --context/--namespace/-n is merged on top of the AMBIENT kube
|
|
887
859
|
// state (`kube`), on top of `gitForRisk` above (the git context
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../src/cli/policy/intercept.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../src/cli/policy/intercept.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,kEAAkE;AAElE,OAAO,EACL,iBAAiB,GAIlB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAChJ,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,kBAAkB,EAClB,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GAMvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAsB,MAAM,uCAAuC,CAAC;AAC/F,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,GAKd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAmEzD,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,IAAI,CAAC;AAC5E,CAAC;AAED,uEAAuE;AACvE,SAAS,MAAM,CAAC,EAAgB;IAC9B,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,QAA4B;IAC9C,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACpF,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,QAAwB,EAAE,QAAiB;IAC3E,sEAAsE;IACtE,qEAAqE;IACrE,kEAAkE;IAClE,uEAAuE;IACvE,kBAAkB;IAClB,qEAAqE;IACrE,oEAAoE;IACpE,qEAAqE;IACrE,MAAM,MAAM,GAAG,2BAA2B,UAAU,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,OAAO,GACzG,QAAQ,CAAC,OAAO,KAAK,eAAe;QAClC,CAAC,CAAC,qFAAqF;QACvF,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,eAAe;YACpC,CAAC,CAAC,kIAAkI;YACpI,CAAC,CAAC,EACR,EAAE,CAAC;IACH,MAAM,KAAK,GAAa,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACxD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAyB;IACjD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,0EAA0E;IAC1E,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,yEAAyE;AACzE,wEAAwE;AACxE,sEAAsE;AACtE,0EAA0E;AAC1E,2BAA2B;AAC3B,SAAS,gBAAgB,CAAC,QAAiB;IACzC,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAK,aAAmC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,IAAI,GAAG,KAA6C,CAAC;IAC3D,KAAK,MAAM,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,2BAA2B;IAClC,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAgB,EAAE,eAAwB;IAClE,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC;IAC5E,IAAI,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;QACtB,CAAC;QACD,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,MAAM,OAAO,GAAG,2BAA2B,EAAE,CAAC;QAC9C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,sBAAsB,CAC7B,KAAgB,EAChB,QAAkB,EAClB,GAAW,EACX,GAAmB,EACnB,WAAmD,EACnD,aAAmC,EACnC,GAAuC,EACvC,IAAY,EACZ,IAAY,EACZ,GAAqB;IAErB,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC;IAC/C,MAAM,aAAa,GAAG;QACpB,OAAO,EAAE,aAAa,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO;QACrD,SAAS,EAAE,aAAa,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS;KAC5D,CAAC;IACF,IACE,aAAa,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO;QAC7C,aAAa,CAAC,SAAS,KAAK,WAAW,CAAC,SAAS,EACjD,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,MAAM,YAAY,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACvC,MAAM,cAAc,GAAG,kBAAkB,CACvC,mBAAmB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EACvE,QAAQ,CAAC,YAAY,CAAC,SAAS,EAC/B,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,SAAS,EAAE,CAChF,CAAC;IACF,MAAM,mBAAmB,GAAG,kBAAkB,CAC5C,mBAAmB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EACvE,QAAQ,CAAC,YAAY,CAAC,SAAS,EAC/B,EAAE,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,SAAS,EAAE,CACpF,CAAC;IACF,OAAO,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC;QACvE,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,WAAW,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAiB,EACjB,IAAyB;IAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,OAAO;QAChB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,KAAK,CAAC;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAsC,CAAC;IACnE,gEAAgE;IAChE,qEAAqE;IACrE,iEAAiE;IACjE,qEAAqE;IACrE,sEAAsE;IACtE,qEAAqE;IACrE,oEAAoE;IACpE,uEAAuE;IACvE,sEAAsE;IACtE,oEAAoE;IACpE,SAAS;IACT,EAAE;IACF,oEAAoE;IACpE,+DAA+D;IAC/D,gEAAgE;IAChE,iEAAiE;IACjE,iEAAiE;IACjE,iEAAiE;IACjE,sEAAsE;IACtE,wDAAwD;IACxD,qEAAqE;IACrE,oEAAoE;IACpE,+DAA+D;IAC/D,oEAAoE;IACpE,iEAAiE;IACjE,iEAAiE;IACjE,gEAAgE;IAChE,mEAAmE;IACnE,+DAA+D;IAC/D,oBAAoB;IACpB,MAAM,cAAc,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,MAAM,UAAU,GAAG,GAAkB,EAAE,CACrC,CAAC,OAAO,KAAK,iBAAiB,CAAC;QAC7B,UAAU,EAAE,OAAO;QACnB,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC3B,SAAS;KACV,CAAC,CAAC,CAAC;IACN,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS;YACzB,kEAAkE;YAClE,gEAAgE;YAChE,6DAA6D;YAC7D,mEAAmE;YACnE,kEAAkE;YAClE,2DAA2D;YAC3D,6DAA6D;YAC7D,0DAA0D;YAC1D,qBAAqB;YACrB,gEAAgE;YAChE,+DAA+D;YAC/D,+DAA+D;YAC/D,iEAAiE;YACjE,mCAAmC;YACnC,IAAI,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,GAAG,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClD,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS;YAC9B,IAAI,MAAM,GAAG,MAAM,6BAA6B,CAC9C,UAAU,EAAE,EACZ,QAAQ,EACR,SAAS,CACV,CAAC;YACF,IACE,CAAC,MAAM,CAAC,EAAE;gBACV,QAAQ,CAAC,OAAO,KAAK,eAAe;gBACpC,CAAC,eAAe,EAChB,CAAC;gBACD,gEAAgE;gBAChE,8DAA8D;gBAC9D,wDAAwD;gBACxD,4DAA4D;gBAC5D,sCAAsC;gBACtC,eAAe,GAAG,IAAI,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,CAAC;gBACnB,OAAO,GAAG,iBAAiB,CAAC;oBAC1B,UAAU,EAAE,OAAO;oBACnB,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;oBAC3B,SAAS,EAAE,cAAc;iBAC1B,CAAC,CAAC;gBACH,MAAM,GAAG,MAAM,6BAA6B,CAC1C,OAAO,EACP,QAAQ,EACR,SAAS,CACV,CAAC;YACJ,CAAC;YACD,iEAAiE;YACjE,kEAAkE;YAClE,gEAAgE;YAChE,mEAAmE;YACnE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CACV,2BAA2B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B;oBAC7E,GAAG,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM,IAAI,eAAe,IAAI,CAClE,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,OAAO,+CAA+C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AACH,MAAM,UAAU,oBAAoB,CAAC,eAAuB;IAC1D,OAAO,CAAC,GAAG,eAAe,GAAG,CAAC,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAc,EACd,MAA6B,EAC7B,QAAiB;IAEjB,OAAO;QACL,KAAK,CAAC,KAAK;YACT,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,QAAQ;YACnB,kEAAkE;YAClE,gEAAgE;YAChE,4DAA4D;YAC5D,iEAAiE;YACjE,kEAAkE;YAClE,oEAAoE;YACpE,mEAAmE;YACnE,2CAA2C;YAC3C,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,KAAK,CACV,2BAA2B,UAAU,CAAC,QAAQ,CAAC,0BAA0B;oBACvE,GAAG,QAAQ,CAAC,UAAU,sBAAsB,MAAM,KAAK,CAC1D,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACpE,MAAM,IAAI,GAAI,MAAwC,CAAC,eAAe,CAAC;IACvE,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACjG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA4B,EAAE;IAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,IAAI,qBAAqB,CAAC;IACvE,yEAAyE;IACzE,MAAM,SAAS,GAA+C;QAC5D,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,kBAAkB;QAC7B,MAAM;KACP,CAAC;IACF,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;QAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IAChF,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACjE,kEAAkE;QAClE,0EAA0E;QAC1E,0EAA0E;QAC1E,4EAA4E;QAC5E,2EAA2E;QAC3E,yEAAyE;QACzE,2EAA2E;QAC3E,uEAAuE;QACvE,0EAA0E;QAC1E,sDAAsD;QACtD,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3C,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACxD,CAAC;QACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,2BAA2B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,MAAM,IAAI,CAAC,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,4EAA4E;QAC5E,yDAAyD;QACzD,MAAM,CAAC,KAAK,CACV,2BAA2B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CACnG,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;IACtB,IAAI,KAAgB,CAAC;IACrB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAc,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACV,2BAA2B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA4B,GAAa,CAAC,OAAO,IAAI,CAC1G,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACxD,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,yEAAyE;IACzE,yEAAyE;IACzE,yEAAyE;IACzE,qEAAqE;IACrE,CAAC;QACC,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3C,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED,IAAI,QAAkB,CAAC;IACvB,IAAI,YAAgC,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAClC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC3B,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACV,2BAA2B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA4B,GAAa,CAAC,OAAO,IAAI,CAC1G,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACxD,CAAC;IAED,IAAI,MAAoB,CAAC;IACzB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,GAAG,MAAM;YACb,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC;YAChC,CAAC,CAAC,oBAAoB,CAClB,wCAAwC,EACxC,MAAM,EACN,IAAI,CAAC,QAAQ,CACd,CAAC;IACR,CAAC;IAED,sEAAsE;IACtE,oEAAoE;IACpE,mEAAmE;IACnE,2DAA2D;IAC3D,iEAAiE;IACjE,mEAAmE;IACnE,mEAAmE;IACnE,qEAAqE;IACrE,mEAAmE;IACnE,kEAAkE;IAClE,iEAAiE;IACjE,8DAA8D;IAC9D,uDAAuD;IACvD,sEAAsE;IACtE,mDAAmD;IACnD,MAAM,cAAc,GAAG,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,wEAAwE;IACxE,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,gBAAgB,GACpB,cAAc;QACd,OAAO,CAAC,GAAG,CAAC,sBAAsB;QAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,EAAE,CAAC;IACL,uEAAuE;IACvE,0EAA0E;IAC1E,qEAAqE;IACrE,yEAAyE;IACzE,kEAAkE;IAClE,uDAAuD;IACvD,EAAE;IACF,sEAAsE;IACtE,qEAAqE;IACrE,uEAAuE;IACvE,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,oEAAoE;IACpE,uEAAuE;IACvE,uEAAuE;IACvE,+DAA+D;IAC/D,kEAAkE;IAClE,yEAAyE;IACzE,+DAA+D;IAC/D,kEAAkE;IAClE,uEAAuE;IACvE,sEAAsE;IACtE,0DAA0D;IAC1D,sEAAsE;IACtE,6DAA6D;IAC7D,oEAAoE;IACpE,uEAAuE;IACvE,kEAAkE;IAClE,kEAAkE;IAClE,mCAAmC;IACnC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC7C,wEAAwE;IACxE,qEAAqE;IACrE,sCAAsC;IACtC,EAAE;IACF,yEAAyE;IACzE,wEAAwE;IACxE,uEAAuE;IACvE,0EAA0E;IAC1E,sEAAsE;IACtE,+DAA+D;IAC/D,sEAAsE;IACtE,+DAA+D;IAC/D,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,iEAAiE;IACjE,oEAAoE;IACpE,6DAA6D;IAC7D,wEAAwE;IACxE,wEAAwE;IACxE,mEAAmE;IACnE,kEAAkE;IAClE,WAAW;IACX,EAAE;IACF,wEAAwE;IACxE,iEAAiE;IACjE,uEAAuE;IACvE,uEAAuE;IACvE,uEAAuE;IACvE,qEAAqE;IACrE,wEAAwE;IACxE,gEAAgE;IAChE,yBAAyB;IACzB,EAAE;IACF,oEAAoE;IACpE,iEAAiE;IACjE,mDAAmD;IACnD,8EAA8E;IAC9E,uEAAuE;IACvE,iEAAiE;IACjE,gEAAgE;IAChE,oEAAoE;IACpE,wEAAwE;IACxE,wEAAwE;IACxE,mEAAmE;IACnE,wEAAwE;IACxE,8CAA8C;IAC9C,EAAE;IACF,sEAAsE;IACtE,8CAA8C;IAC9C,EAAE;IACF,0EAA0E;IAC1E,wDAAwD;IACxD,kEAAkE;IAClE,gEAAgE;IAChE,8DAA8D;IAC9D,sEAAsE;IACtE,wEAAwE;IACxE,iEAAiE;IACjE,wEAAwE;IACxE,EAAE;IACF,6DAA6D;IAC7D,iEAAiE;IACjE,oEAAoE;IACpE,uEAAuE;IACvE,mEAAmE;IACnE,4DAA4D;IAC5D,0DAA0D;IAC1D,mEAAmE;IACnE,wEAAwE;IACxE,oEAAoE;IACpE,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,MAAM,iBAAiB,GACrB,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACnE,oEAAoE;IACpE,mEAAmE;IACnE,0DAA0D;IAC1D,uEAAuE;IACvE,8DAA8D;IAC9D,yEAAyE;IACzE,+DAA+D;IAC/D,yEAAyE;IACzE,qEAAqE;IACrE,mEAAmE;IACnE,wEAAwE;IACxE,uDAAuD;IACvD,wEAAwE;IACxE,uEAAuE;IACvE,oEAAoE;IACpE,0DAA0D;IAC1D,uEAAuE;IACvE,wEAAwE;IACxE,mEAAmE;IACnE,yDAAyD;IACzD,IAAI,oBAAyD,CAAC;IAC9D,MAAM,oBAAoB,GACxB,WAAW,KAAK,IAAI;QAClB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,GAAG,EAAE;YACH,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;gBACvC,oBAAoB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,oBAAoB,CAAC;QAC9B,CAAC,CAAC;IACR,mEAAmE;IACnE,uEAAuE;IACvE,qEAAqE;IACrE,uEAAuE;IACvE,iEAAiE;IACjE,oEAAoE;IACpE,oEAAoE;IACpE,sEAAsE;IACtE,oEAAoE;IACpE,sEAAsE;IACtE,sEAAsE;IACtE,gEAAgE;IAChE,uEAAuE;IACvE,kEAAkE;IAClE,kEAAkE;IAClE,wCAAwC;IACxC,IAAI,yBAAgE,CAAC;IACrE,MAAM,yBAAyB,GAC7B,WAAW,KAAK,IAAI;QAClB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,yBAAyB,KAAK,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC;IAClF,oEAAoE;IACpE,wEAAwE;IACxE,sEAAsE;IACtE,sEAAsE;IACtE,oEAAoE;IACpE,2DAA2D;IAC3D,sEAAsE;IACtE,4CAA4C;IAC5C,IAAI,2BAAoE,CAAC;IACzE,MAAM,2BAA2B,GAC/B,WAAW,KAAK,IAAI;QAClB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,2BAA2B,KAAK,0BAA0B,CAAC,WAAW,CAAC,CAAC,CAAC;IACtF,uEAAuE;IACvE,iEAAiE;IACjE,uEAAuE;IACvE,wEAAwE;IACxE,qEAAqE;IACrE,sEAAsE;IACtE,iEAAiE;IACjE,sEAAsE;IACtE,yDAAyD;IACzD,kEAAkE;IAClE,4DAA4D;IAC5D,oEAAoE;IACpE,qEAAqE;IACrE,sDAAsD;IACtD,IAAI,iBAAiB,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,CAAC,KAAK,CACV,2BAA2B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,oBAAoB,2EAA2E,CAC9K,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG;QACf,UAAU,EAAE,gBAAgB;QAC5B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,aAAa,CAAC,IAAI;QACpD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,aAAa,CAAC,MAAM;QAC1D,SAAS,EAAE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QACrE,GAAG,EAAE,GAAG;KACT,CAAC;IAEF,8DAA8D;IAC9D,qEAAqE;IACrE,sEAAsE;IACtE,qDAAqD;IACrD,IAAI,WAAwC,CAAC;IAC7C,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,GACR,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAChE,CAAC,CAAC;gBACE,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;gBAC/B,SAAS,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;aACpC;YACH,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAC3B,8DAA8D;QAC9D,6DAA6D;QAC7D,mEAAmE;QACnE,+DAA+D;QAC/D,8DAA8D;QAC9D,+DAA+D;QAC/D,gEAAgE;QAChE,gEAAgE;QAChE,+DAA+D;QAC/D,gEAAgE;QAChE,oEAAoE;QACpE,iFAAiF;QACjF,mEAAmE;QACnE,qEAAqE;QACrE,kEAAkE;QAClE,iEAAiE;QACjE,8CAA8C;QAC9C,EAAE;QACF,qEAAqE;QACrE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,uEAAuE;QACvE,6DAA6D;QAC7D,mEAAmE;QACnE,sEAAsE;QACtE,iEAAiE;QACjE,qEAAqE;QACrE,sEAAsE;QACtE,8DAA8D;QAC9D,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,iEAAiE;QACjE,4EAA4E;QAC5E,6DAA6D;QAC7D,qEAAqE;QACrE,oEAAoE;QACpE,gEAAgE;QAChE,YAAY;QACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7C,iEAAiE;QACjE,gEAAgE;QAChE,8DAA8D;QAC9D,iEAAiE;QACjE,kDAAkD;QAClD,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GACtE,2BAA2B,CAAC;YAC1B,KAAK;YACL,QAAQ;YACR,GAAG;YACH,aAAa;YACb,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;YAC5B,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,aAAa,EAAE,IAAI,CAAC,SAAS;YAC7B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QACL,6DAA6D;QAC7D,mEAAmE;QACnE,gEAAgE;QAChE,oEAAoE;QACpE,kEAAkE;QAClE,yDAAyD;QACzD,iEAAiE;QACjE,mEAAmE;QACnE,2DAA2D;QAC3D,MAAM,cAAc,GAClB,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,IAAI,CAAC,CAAC,CAAC;QAC3F,MAAM,aAAa,GAAG,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAC1F,yDAAyD;QACzD,gEAAgE;QAChE,gEAAgE;QAChE,mEAAmE;QACnE,gEAAgE;QAChE,kEAAkE;QAClE,kDAAkD;QAClD,8DAA8D;QAC9D,wBAAwB;QACxB,MAAM,WAAW,GAAG,sBAAsB,CACxC,KAAK,EACL,QAAQ,EACR,GAAG,EACH,UAAU,EACV,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EACpD,aAAa,EACb,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,IAAI,CAAC,GAAG,CACT,CAAC;QACF,WAAW,GAAG;YACZ,GAAG,EAAE,UAAU;YACf,GAAG;YACH,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,WAAW;YAChB,WAAW,EAAE,WAAW,CAAC,OAAO;YAChC,aAAa,EAAE,WAAW,CAAC,SAAS;SACrC,CAAC;IACJ,CAAC;IAED,IAAI,MAA6C,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,SAAS,CAAC;YACvB,QAAQ;YACR,KAAK;YACL,MAAM;YACN,QAAQ;YACR,MAAM;YACN,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;YACpF,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC;YAC1E,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;YACnC,GAAG,CAAC,iBAAiB,IAAI,EAAE,iBAAiB,EAAE,CAAC;YAC/C,GAAG,CAAC,yBAAyB,IAAI,EAAE,yBAAyB,EAAE,CAAC;YAC/D,GAAG,CAAC,2BAA2B,IAAI,EAAE,2BAA2B,EAAE,CAAC;YACnE,GAAG,CAAC,oBAAoB,IAAI,EAAE,oBAAoB,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;SAC5E,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,sEAAsE;QACtE,oEAAoE;QACpE,oDAAoD;QACpD,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;IACrB,CAAC;IAED,mEAAmE;IACnE,sEAAsE;IACtE,mEAAmE;IACnE,sEAAsE;IACtE,uEAAuE;IACvE,uEAAuE;IACvE,oEAAoE;IACpE,oEAAoE;IACpE,6DAA6D;IAC7D,oEAAoE;IACpE,yDAAyD;IACzD,mEAAmE;IACnE,oEAAoE;IACpE,sEAAsE;IACtE,oEAAoE;IACpE,sEAAsE;IACtE,qEAAqE;IACrE,wCAAwC;IACxC,EAAE;IACF,wEAAwE;IACxE,oEAAoE;IACpE,kEAAkE;IAClE,mEAAmE;IACnE,0DAA0D;IAC1D,mCAAmC;IACnC,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChE,IACE,MAAM,CAAC,SAAS;QAChB,cAAc,KAAK,SAAS;QAC5B,cAAc,CAAC,MAAM,GAAG,CAAC;QACzB,aAAa,EAAE,OAAO,KAAK,kBAAkB;QAC7C,sEAAsE;QACtE,uEAAuE;QACvE,yDAAyD;QACzD,aAAa,CAAC,eAAe,KAAK,SAAS,EAC3C,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;eACjC,CAAC,YAAY,KAAK,SAAS;gBAC5B,CAAC,CAAC,mBAAmB,CAAC;oBAClB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChE,YAAY;iBACb,CAAC;gBACJ,CAAC,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,oBAAoB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,gEAAgE;IAChE,iEAAiE;IACjE,mEAAmE;IACnE,oEAAoE;IACpE,iEAAiE;IACjE,oEAAoE;IACpE,gEAAgE;IAChE,wCAAwC;IACxC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,sEAAsE;IACtE,gEAAgE;IAChE,+DAA+D;IAC/D,iEAAiE;IACjE,qEAAqE;IACrE,kEAAkE;IAClE,oEAAoE;IACpE,qEAAqE;IACrE,oEAAoE;IACpE,oEAAoE;IACpE,iEAAiE;IACjE,qEAAqE;IACrE,kEAAkE;IAClE,qEAAqE;IACrE,mEAAmE;IACnE,iEAAiE;IACjE,qEAAqE;IACrE,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,eAAe,CACrC,CAAC;IACF,IAAI,iBAAiB,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CACV,2BAA2B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,iBAAiB,CAAC,UAAU,IAAI;YACvF,kDAAkD;YAClD,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,MAAM,CAAC,qBAAqB;YACxE,6EAA6E;YAC7E,sEAAsE;YACtE,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO;gBAAE,SAAS;YAC3C,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,SAAS,KAAK,IAAI;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAgB,EAAE,QAAkB,EAAE,QAAiB;IAChF,MAAM,aAAa,GACjB,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QAC3E,CAAC,CAAC,IAAI,KAAK,CAAC,eAAe,GAAG;QAC9B,CAAC,CAAC,WAAW,CAAC;IAClB,MAAM,YAAY,GAChB,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAC/D,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,GAAG;QACxB,CAAC,CAAC,WAAW,CAAC;IAClB,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CACjC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACvD,CAAC,IAAI,EAAE,CAAC;IACT,OAAO,CACL,2BAA2B,UAAU,CAAC,QAAQ,CAAC,4BAA4B;QAC3E,mBAAmB,aAAa,cAAc,YAAY,GAAG;QAC7D,8BAA8B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;QAC9D,iGAAiG,CAClG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type GitRepoContext, type ToolEvent } from "../../runtime/index.js";
|
|
2
|
+
import { type BashPrefix } from "../../runtime/bash-prefix-parse.js";
|
|
3
|
+
import type { Manifest, MatchableEnvironment } from "../../schema/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Read the command string out of a Bash tool's `tool_input.command`,
|
|
6
|
+
* returning null when the shape is wrong (defensive — production input
|
|
7
|
+
* comes from Claude Code, but tests and Codex bridges have varied
|
|
8
|
+
* payload shapes).
|
|
9
|
+
*/
|
|
10
|
+
export declare function readBashCommand(input: unknown): string | null;
|
|
11
|
+
export declare const ENV_RANK: Record<MatchableEnvironment, number>;
|
|
12
|
+
export interface BashPrefixEnrichmentInput {
|
|
13
|
+
event: ToolEvent;
|
|
14
|
+
manifest: Manifest;
|
|
15
|
+
cwd: string;
|
|
16
|
+
/** Git context of `cwd` itself (the base the prefix merges on top of). */
|
|
17
|
+
cwdGitContext: GitRepoContext;
|
|
18
|
+
/** Ambient env the inline assignments are merged over. */
|
|
19
|
+
env: Record<string, string | undefined>;
|
|
20
|
+
kubeContext: string;
|
|
21
|
+
kubeNamespace: string;
|
|
22
|
+
user: string;
|
|
23
|
+
host: string;
|
|
24
|
+
now: Date | undefined;
|
|
25
|
+
}
|
|
26
|
+
export interface BashPrefixEnrichment {
|
|
27
|
+
/** The Bash command string, or null for a non-Bash / shapeless event. */
|
|
28
|
+
riskBashCommand: string | null;
|
|
29
|
+
bashPrefix: BashPrefix | null;
|
|
30
|
+
/** Git context after the `cd` merge and the branch-switch upgrade. */
|
|
31
|
+
git: GitRepoContext;
|
|
32
|
+
/** Ambient env with the inline `VAR=value` assignments merged on top. */
|
|
33
|
+
env: Record<string, string | undefined>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Parse the leading Bash prefix once and merge it into the resolver
|
|
37
|
+
* inputs (see the module header). Pure apart from `resolveGitContext`
|
|
38
|
+
* for a `cd` target.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveBashPrefixEnrichment(input: BashPrefixEnrichmentInput): BashPrefixEnrichment;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// Shared Risk Gate envelope enrichment for the verbs that predict or
|
|
2
|
+
// enforce a `when:` verdict: `harness policy intercept` (the PreToolUse
|
|
3
|
+
// hook) and `harness explain-policy` (the debug verb).
|
|
4
|
+
//
|
|
5
|
+
// Both must resolve the environment from the SAME inputs, or the tool an
|
|
6
|
+
// operator uses to predict a gate disagrees with the gate (task
|
|
7
|
+
// 7c3919a2: `DATABASE_URL=...prod... psql ...` resolved `production` in
|
|
8
|
+
// the hook and `unknown` in explain-policy). This module owns the
|
|
9
|
+
// leading-prefix parse of a Bash command and the three merges it feeds:
|
|
10
|
+
// inline `VAR=value` env, a leading `cd <path> &&` (git context), and a
|
|
11
|
+
// leading `git switch|checkout <branch> &&` (upgrade-only).
|
|
12
|
+
//
|
|
13
|
+
// Deliberately NOT here: any ledger or evidence read (explain-policy
|
|
14
|
+
// stays hypothetical and read-free; keep this module free of
|
|
15
|
+
// `policies/` imports), and the kubectl `--context`/`--namespace`
|
|
16
|
+
// merge (hook-only today, tracked separately).
|
|
17
|
+
import * as path from "node:path";
|
|
18
|
+
import { buildActionEnvelope, resolveEnvironment, resolveGitContext, } from "../../runtime/index.js";
|
|
19
|
+
import { parseBashPrefix } from "../../runtime/bash-prefix-parse.js";
|
|
20
|
+
/**
|
|
21
|
+
* Read the command string out of a Bash tool's `tool_input.command`,
|
|
22
|
+
* returning null when the shape is wrong (defensive — production input
|
|
23
|
+
* comes from Claude Code, but tests and Codex bridges have varied
|
|
24
|
+
* payload shapes).
|
|
25
|
+
*/
|
|
26
|
+
export function readBashCommand(input) {
|
|
27
|
+
if (!input || typeof input !== "object" || Array.isArray(input))
|
|
28
|
+
return null;
|
|
29
|
+
const cmd = input.command;
|
|
30
|
+
return typeof cmd === "string" && cmd.length > 0 ? cmd : null;
|
|
31
|
+
}
|
|
32
|
+
// Mirrors `ENV_PRECEDENCE` in `../../runtime/environment-resolver.ts`
|
|
33
|
+
// (most-dangerous-first). Kept as a local, small, duplicate table
|
|
34
|
+
// instead of importing that module's private const, so this file stays
|
|
35
|
+
// a read-only consumer of `resolveEnvironment`'s public API rather than
|
|
36
|
+
// reaching into its internals. `unknown` is deliberately ranked lowest:
|
|
37
|
+
// resolving to no signal at all must never look like an "upgrade" over
|
|
38
|
+
// a branch that DID fire a resolver.
|
|
39
|
+
export const ENV_RANK = {
|
|
40
|
+
production: 0,
|
|
41
|
+
staging: 1,
|
|
42
|
+
dev: 2,
|
|
43
|
+
local: 3,
|
|
44
|
+
unknown: 4,
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Branch-switch, upgrade-only merge (task 341e024b): a leading `git
|
|
48
|
+
* switch <branch>` / `git checkout <branch>` names the branch the REST
|
|
49
|
+
* of the command actually runs against, the same way a leading `cd
|
|
50
|
+
* <path>` names a different working directory (see `resolverGit`'s own
|
|
51
|
+
* comment at the call site). Unlike that `cd` merge — which fully
|
|
52
|
+
* REPLACES the git context and can move the resolved environment in
|
|
53
|
+
* EITHER direction (G5, pre-existing, out of scope for this task) —
|
|
54
|
+
* this merge is deliberately asymmetric: it only ever pushes the
|
|
55
|
+
* resolved environment to something MORE dangerous, never less.
|
|
56
|
+
*
|
|
57
|
+
* Both the base git context and the switch-target candidate (same repo
|
|
58
|
+
* / sha, only `branch` differs) are run through the SAME
|
|
59
|
+
* `resolveEnvironment` call with IDENTICAL env / kube inputs, so any
|
|
60
|
+
* difference in the result is attributable to the branch alone. The
|
|
61
|
+
* more dangerous of the two (`ENV_RANK` order) wins; a switch AWAY from
|
|
62
|
+
* a production branch never downgrades — when the candidate resolves to
|
|
63
|
+
* something equally or less dangerous, `baseGit` is returned unchanged.
|
|
64
|
+
*/
|
|
65
|
+
function applyBranchSwitchUpgrade(event, manifest, cwd, baseGit, branchTarget, inputs, user, host, now) {
|
|
66
|
+
if (branchTarget === null || branchTarget === baseGit.branch)
|
|
67
|
+
return baseGit;
|
|
68
|
+
const candidateGit = { ...baseGit, branch: branchTarget };
|
|
69
|
+
const effectiveNow = now ?? new Date();
|
|
70
|
+
const baseResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git: baseGit, user, host, now: effectiveNow }), manifest.environments.resolvers, inputs);
|
|
71
|
+
const candidateResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git: candidateGit, user, host, now: effectiveNow }), manifest.environments.resolvers, inputs);
|
|
72
|
+
return ENV_RANK[candidateResolution.name] < ENV_RANK[baseResolution.name] ? candidateGit : baseGit;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse the leading Bash prefix once and merge it into the resolver
|
|
76
|
+
* inputs (see the module header). Pure apart from `resolveGitContext`
|
|
77
|
+
* for a `cd` target.
|
|
78
|
+
*/
|
|
79
|
+
export function resolveBashPrefixEnrichment(input) {
|
|
80
|
+
const { event, manifest, cwd, cwdGitContext } = input;
|
|
81
|
+
const riskBashCommand = event.tool_name === "Bash" ? readBashCommand(event.tool_input) : null;
|
|
82
|
+
const bashPrefix = riskBashCommand === null ? null : parseBashPrefix(riskBashCommand);
|
|
83
|
+
const resolverGit = (() => {
|
|
84
|
+
if (bashPrefix === null || bashPrefix.cdTarget === null)
|
|
85
|
+
return cwdGitContext;
|
|
86
|
+
const effective = path.isAbsolute(bashPrefix.cdTarget)
|
|
87
|
+
? bashPrefix.cdTarget
|
|
88
|
+
: path.resolve(cwd, bashPrefix.cdTarget);
|
|
89
|
+
// resolveGitContext returns empty strings for non-git paths;
|
|
90
|
+
// an empty repo means cd-target was bogus, fall through.
|
|
91
|
+
const candidate = resolveGitContext(effective);
|
|
92
|
+
return candidate.repo.length > 0 ? candidate : cwdGitContext;
|
|
93
|
+
})();
|
|
94
|
+
const env = (() => {
|
|
95
|
+
const base = input.env;
|
|
96
|
+
if (bashPrefix === null || Object.keys(bashPrefix.inlineEnv).length === 0)
|
|
97
|
+
return base;
|
|
98
|
+
// Inline assignments are the operator's explicit override; they
|
|
99
|
+
// win over process.env (matches POSIX `VAR=value cmd` semantics).
|
|
100
|
+
return { ...base, ...bashPrefix.inlineEnv };
|
|
101
|
+
})();
|
|
102
|
+
// A leading `git switch`/`checkout <branch>` (task 341e024b) is
|
|
103
|
+
// merged on top of `resolverGit`, upgrade-only, using the AMBIENT kube
|
|
104
|
+
// state. See `applyBranchSwitchUpgrade`.
|
|
105
|
+
const git = applyBranchSwitchUpgrade(event, manifest, cwd, resolverGit, bashPrefix?.branchTarget ?? null, { env, kubeContext: input.kubeContext, kubeNamespace: input.kubeNamespace }, input.user, input.host, input.now);
|
|
106
|
+
return { riskBashCommand, bashPrefix, git, env };
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=risk-envelope-enrichment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-envelope-enrichment.js","sourceRoot":"","sources":["../../../src/cli/policy/risk-envelope-enrichment.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,43 @@ import { Document, parseDocument } from "yaml";
|
|
|
2
2
|
export interface AtomicWriteOptions {
|
|
3
3
|
mode?: number;
|
|
4
4
|
}
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Open flags for the temp file. The temp file is created by this call or the
|
|
7
|
+
* write fails:
|
|
8
|
+
*
|
|
9
|
+
* - `O_EXCL` (with `O_CREAT`) makes the open fail with `EEXIST` on anything
|
|
10
|
+
* already at the name: a regular file, a FIFO (which a plain `O_WRONLY`
|
|
11
|
+
* open would block on until a reader shows up), or a symlink (which a
|
|
12
|
+
* plain open follows, writing through the link). It never follows a
|
|
13
|
+
* symlink on create and never blocks, so a file planted in the target's
|
|
14
|
+
* directory (an agent-writable reports directory, for one) can neither
|
|
15
|
+
* hang the writer nor redirect the write.
|
|
16
|
+
* - `O_NOFOLLOW` repeats the symlink refusal for the final path component on
|
|
17
|
+
* its own (defence in depth: `O_EXCL | O_CREAT` already refuses a symlink).
|
|
18
|
+
* On a platform that does not define it (Windows), the constant is absent
|
|
19
|
+
* and the flag is dropped; `O_EXCL | O_CREAT` alone then carries the
|
|
20
|
+
* refusal.
|
|
21
|
+
*/
|
|
22
|
+
export declare const ATOMIC_WRITE_TEMP_FLAGS: number;
|
|
23
|
+
/** 64 random bits as lowercase hex, so the temp name cannot be predicted and pre-planted. */
|
|
24
|
+
export declare function randomTempSuffix(): string;
|
|
25
|
+
/**
|
|
26
|
+
* Write `content` to `filePath` through a temp file renamed into place.
|
|
27
|
+
* Successful writes are byte-identical to a plain write and keep the
|
|
28
|
+
* requested mode (default 0o644, subject to the umask, as before).
|
|
29
|
+
*
|
|
30
|
+
* The temp file sits next to the target and is opened with
|
|
31
|
+
* {@link ATOMIC_WRITE_TEMP_FLAGS} under a name carrying a random suffix. A
|
|
32
|
+
* file already at that name makes the call throw (`EEXIST`) at once, without
|
|
33
|
+
* touching it: the caller sees an ordinary write failure and keeps its own
|
|
34
|
+
* failure posture. Once the temp file is open, any later failure (write,
|
|
35
|
+
* fsync, close, rename) removes it again; the one path never removed is the
|
|
36
|
+
* one this call did not create.
|
|
37
|
+
*
|
|
38
|
+
* `suffix` is a seam for tests that plant a file at a chosen candidate name;
|
|
39
|
+
* production callers never pass it.
|
|
40
|
+
*/
|
|
41
|
+
export declare function atomicWriteFile(filePath: string, content: string, options?: AtomicWriteOptions, suffix?: () => string): void;
|
|
6
42
|
export declare function withDocument(yamlString: string, mutate: (doc: Document.Parsed) => void): string;
|
|
7
43
|
export { parseDocument };
|
|
8
44
|
export type { Document };
|
package/dist/io/atomic-write.js
CHANGED
|
@@ -1,20 +1,73 @@
|
|
|
1
|
+
import * as crypto from "node:crypto";
|
|
1
2
|
import * as fs from "node:fs";
|
|
2
3
|
import * as path from "node:path";
|
|
3
4
|
import { parseDocument } from "yaml";
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Open flags for the temp file. The temp file is created by this call or the
|
|
7
|
+
* write fails:
|
|
8
|
+
*
|
|
9
|
+
* - `O_EXCL` (with `O_CREAT`) makes the open fail with `EEXIST` on anything
|
|
10
|
+
* already at the name: a regular file, a FIFO (which a plain `O_WRONLY`
|
|
11
|
+
* open would block on until a reader shows up), or a symlink (which a
|
|
12
|
+
* plain open follows, writing through the link). It never follows a
|
|
13
|
+
* symlink on create and never blocks, so a file planted in the target's
|
|
14
|
+
* directory (an agent-writable reports directory, for one) can neither
|
|
15
|
+
* hang the writer nor redirect the write.
|
|
16
|
+
* - `O_NOFOLLOW` repeats the symlink refusal for the final path component on
|
|
17
|
+
* its own (defence in depth: `O_EXCL | O_CREAT` already refuses a symlink).
|
|
18
|
+
* On a platform that does not define it (Windows), the constant is absent
|
|
19
|
+
* and the flag is dropped; `O_EXCL | O_CREAT` alone then carries the
|
|
20
|
+
* refusal.
|
|
21
|
+
*/
|
|
22
|
+
export const ATOMIC_WRITE_TEMP_FLAGS = fs.constants.O_WRONLY |
|
|
23
|
+
fs.constants.O_CREAT |
|
|
24
|
+
fs.constants.O_EXCL |
|
|
25
|
+
(fs.constants.O_NOFOLLOW ?? 0);
|
|
26
|
+
/** 64 random bits as lowercase hex, so the temp name cannot be predicted and pre-planted. */
|
|
27
|
+
export function randomTempSuffix() {
|
|
28
|
+
return crypto.randomBytes(8).toString("hex");
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Write `content` to `filePath` through a temp file renamed into place.
|
|
32
|
+
* Successful writes are byte-identical to a plain write and keep the
|
|
33
|
+
* requested mode (default 0o644, subject to the umask, as before).
|
|
34
|
+
*
|
|
35
|
+
* The temp file sits next to the target and is opened with
|
|
36
|
+
* {@link ATOMIC_WRITE_TEMP_FLAGS} under a name carrying a random suffix. A
|
|
37
|
+
* file already at that name makes the call throw (`EEXIST`) at once, without
|
|
38
|
+
* touching it: the caller sees an ordinary write failure and keeps its own
|
|
39
|
+
* failure posture. Once the temp file is open, any later failure (write,
|
|
40
|
+
* fsync, close, rename) removes it again; the one path never removed is the
|
|
41
|
+
* one this call did not create.
|
|
42
|
+
*
|
|
43
|
+
* `suffix` is a seam for tests that plant a file at a chosen candidate name;
|
|
44
|
+
* production callers never pass it.
|
|
45
|
+
*/
|
|
46
|
+
export function atomicWriteFile(filePath, content, options = {}, suffix = randomTempSuffix) {
|
|
5
47
|
const dir = path.dirname(filePath);
|
|
6
48
|
fs.mkdirSync(dir, { recursive: true });
|
|
7
49
|
const base = path.basename(filePath);
|
|
8
|
-
const tmpPath = path.join(dir, `.${base}.${process.pid}.${
|
|
9
|
-
const fd = fs.openSync(tmpPath,
|
|
50
|
+
const tmpPath = path.join(dir, `.${base}.${process.pid}.${suffix()}.tmp`);
|
|
51
|
+
const fd = fs.openSync(tmpPath, ATOMIC_WRITE_TEMP_FLAGS, options.mode ?? 0o644);
|
|
10
52
|
try {
|
|
11
|
-
|
|
12
|
-
|
|
53
|
+
try {
|
|
54
|
+
fs.writeSync(fd, content);
|
|
55
|
+
fs.fsyncSync(fd);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
fs.closeSync(fd);
|
|
59
|
+
}
|
|
60
|
+
fs.renameSync(tmpPath, filePath);
|
|
13
61
|
}
|
|
14
|
-
|
|
15
|
-
|
|
62
|
+
catch (err) {
|
|
63
|
+
try {
|
|
64
|
+
fs.unlinkSync(tmpPath);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Best effort: the original failure is the one worth reporting.
|
|
68
|
+
}
|
|
69
|
+
throw err;
|
|
16
70
|
}
|
|
17
|
-
fs.renameSync(tmpPath, filePath);
|
|
18
71
|
}
|
|
19
72
|
export function withDocument(yamlString, mutate) {
|
|
20
73
|
const doc = parseDocument(yamlString);
|