@agentplat/mesh 0.3.0-alpha.2 → 0.3.0-alpha.4
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/trust.d.ts +212 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +934 -0
- package/dist/trust.js.map +1 -0
- package/package.json +8 -3
package/dist/trust.d.ts
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-only, opt-in bridge between authenticated Mesh envelopes and Trust.
|
|
3
|
+
* It is deliberately not exported by the Mesh root entrypoint.
|
|
4
|
+
*/
|
|
5
|
+
import type { MeshCryptoPolicy, MeshKeyResolver } from "@agentplat/mesh-crypto";
|
|
6
|
+
import { type MeshProtocolOptions, type SignedMeshEnvelope, type VerifiedMeshEnvelope } from "@agentplat/mesh-protocol";
|
|
7
|
+
import { type EvidenceScopeV1, type EvidenceRecordV1, type EvidenceTrustRestoreOptionsV1, type EvidenceTrustRollbackAnchorV1, type EvidenceTrustSnapshotProtectorV1, type EvidenceTrustSnapshotV1, type EvidenceTrustStateV1, type TrustEligibilityRequirementV1, type TrustObservationV1, type TrustReasonCodeV1 } from "@agentplat/trust";
|
|
8
|
+
type MeshTrustPayloadV1 = Extract<SignedMeshEnvelope["payload"], {
|
|
9
|
+
readonly type: "evidence.claim";
|
|
10
|
+
}> | Extract<SignedMeshEnvelope["payload"], {
|
|
11
|
+
readonly type: "evidence.attest";
|
|
12
|
+
}> | Extract<SignedMeshEnvelope["payload"], {
|
|
13
|
+
readonly type: "evidence.challenge";
|
|
14
|
+
}> | Extract<SignedMeshEnvelope["payload"], {
|
|
15
|
+
readonly type: "evidence.retract";
|
|
16
|
+
}> | Extract<SignedMeshEnvelope["payload"], {
|
|
17
|
+
readonly type: "trust.observation";
|
|
18
|
+
}>;
|
|
19
|
+
export type MeshEvidenceInboundRejectionCodeV1 = "invalid_request" | "unsupported_message_type" | "scope_mismatch" | "audience_mismatch" | "crypto_rejected" | "normalization_failed" | "authorization_rejected" | "replay_rejected" | "trust_transition_rejected";
|
|
20
|
+
/** Retained only in the authenticated composite Mesh state/journal. */
|
|
21
|
+
export interface MeshEvidenceOriginProofV1 {
|
|
22
|
+
readonly schemaVersion: 1;
|
|
23
|
+
readonly messageId: string;
|
|
24
|
+
readonly payloadHash: string;
|
|
25
|
+
readonly signedEnvelopeDigest: string;
|
|
26
|
+
readonly senderPeerId: string;
|
|
27
|
+
readonly senderKeyId: string;
|
|
28
|
+
readonly admissionStateDigest: string;
|
|
29
|
+
readonly coordinationAuthorityDigests: readonly string[];
|
|
30
|
+
readonly replayStateDigest: string;
|
|
31
|
+
readonly normalizedRecordId: string;
|
|
32
|
+
readonly normalizedRecordDigest: string;
|
|
33
|
+
readonly originProofDigest: string;
|
|
34
|
+
}
|
|
35
|
+
/** Authenticated composite journal material retained for network-free restore. */
|
|
36
|
+
export interface MeshEvidenceOriginJournalEntryV1 {
|
|
37
|
+
readonly schemaVersion: 1;
|
|
38
|
+
readonly descriptor: MeshEvidenceOriginProofV1;
|
|
39
|
+
readonly canonicalSignedEnvelope: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A construction-bound adapter. It owns accepted admission, Objective/Work,
|
|
43
|
+
* role and replay projections and must perform its Trust transition atomically.
|
|
44
|
+
*/
|
|
45
|
+
export interface MeshEvidenceInboundPreparationBaseV1 {
|
|
46
|
+
readonly accepted: true;
|
|
47
|
+
readonly admissionStateDigest: string;
|
|
48
|
+
readonly coordinationAuthorityDigests: readonly string[];
|
|
49
|
+
readonly replayStateDigest: string;
|
|
50
|
+
readonly observationCorrelated: boolean;
|
|
51
|
+
readonly effectiveAtLogicalMs: number;
|
|
52
|
+
}
|
|
53
|
+
export interface MeshEvidenceInboundAdapterV1<TState, TPreparation extends MeshEvidenceInboundPreparationBaseV1 = MeshEvidenceInboundPreparationBaseV1> {
|
|
54
|
+
readonly bindingDigest: string;
|
|
55
|
+
prepare(input: {
|
|
56
|
+
readonly state: TState;
|
|
57
|
+
readonly envelope: VerifiedMeshEnvelope<MeshTrustPayloadV1>;
|
|
58
|
+
readonly receivedAt: number;
|
|
59
|
+
}): TPreparation | {
|
|
60
|
+
readonly accepted: false;
|
|
61
|
+
readonly code: "authorization_rejected" | "replay_rejected";
|
|
62
|
+
};
|
|
63
|
+
process(input: {
|
|
64
|
+
readonly state: TState;
|
|
65
|
+
readonly envelope: VerifiedMeshEnvelope<MeshTrustPayloadV1>;
|
|
66
|
+
readonly verifiedKeyId: string;
|
|
67
|
+
readonly receivedAt: number;
|
|
68
|
+
readonly record?: EvidenceRecordV1;
|
|
69
|
+
readonly observation?: TrustObservationV1;
|
|
70
|
+
readonly observationCorrelated?: boolean;
|
|
71
|
+
readonly origin: MeshEvidenceOriginProofV1;
|
|
72
|
+
readonly originBindingDigest: string;
|
|
73
|
+
readonly originVerifierBindingDigest: string;
|
|
74
|
+
readonly preparation: TPreparation;
|
|
75
|
+
}): {
|
|
76
|
+
readonly accepted: true;
|
|
77
|
+
readonly duplicate: boolean;
|
|
78
|
+
readonly state: TState;
|
|
79
|
+
} | {
|
|
80
|
+
readonly accepted: false;
|
|
81
|
+
readonly code: "authorization_rejected" | "replay_rejected" | "trust_transition_rejected";
|
|
82
|
+
readonly state: TState;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export interface MeshEvidenceInboundRuntimeStateV1<TState> {
|
|
86
|
+
readonly schemaVersion: 1;
|
|
87
|
+
readonly identity: {
|
|
88
|
+
readonly tenantId: string;
|
|
89
|
+
readonly meshId: string;
|
|
90
|
+
readonly peerId: string;
|
|
91
|
+
};
|
|
92
|
+
readonly state: TState;
|
|
93
|
+
}
|
|
94
|
+
/** Concrete composite retained by the server-only adapter. */
|
|
95
|
+
export interface MeshEvidenceTrustCompositeStateV1<TAuthorizationState = unknown> {
|
|
96
|
+
readonly authorizationState: TAuthorizationState;
|
|
97
|
+
readonly trust: EvidenceTrustStateV1;
|
|
98
|
+
readonly originProofs: Readonly<Record<string, MeshEvidenceOriginJournalEntryV1>>;
|
|
99
|
+
readonly remoteObservations: Readonly<Record<string, {
|
|
100
|
+
readonly observation: TrustObservationV1;
|
|
101
|
+
readonly correlated: boolean;
|
|
102
|
+
}>>;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The surrounding Mesh runtime supplies one immutable, construction-bound
|
|
106
|
+
* authorization/replay transaction. It must validate admission, topic/direct
|
|
107
|
+
* audience, Objective/Work revision, epoch, authority, fence, source role and
|
|
108
|
+
* causation before returning its projection digests.
|
|
109
|
+
*/
|
|
110
|
+
export interface MeshEvidenceTrustPreparationV1<TAuthorizationState> extends MeshEvidenceInboundPreparationBaseV1 {
|
|
111
|
+
readonly nextAuthorizationState: TAuthorizationState;
|
|
112
|
+
}
|
|
113
|
+
export interface MeshEvidenceTrustAuthorizationV1<TAuthorizationState> {
|
|
114
|
+
prepare(input: {
|
|
115
|
+
readonly authorizationState: TAuthorizationState;
|
|
116
|
+
readonly envelope: VerifiedMeshEnvelope<MeshTrustPayloadV1>;
|
|
117
|
+
readonly receivedAt: number;
|
|
118
|
+
}): MeshEvidenceTrustPreparationV1<TAuthorizationState> | {
|
|
119
|
+
readonly accepted: false;
|
|
120
|
+
readonly code: "authorization_rejected" | "replay_rejected";
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/** Creates the Trust reducer adapter; no direct payload route exists. */
|
|
124
|
+
export declare function createMeshEvidenceTrustAdapterV1<TAuthorizationState>(bindingDigest: string, originVerifierBindingDigest: string, authorization: MeshEvidenceTrustAuthorizationV1<TAuthorizationState>): MeshEvidenceInboundAdapterV1<MeshEvidenceTrustCompositeStateV1<TAuthorizationState>, MeshEvidenceTrustPreparationV1<TAuthorizationState>>;
|
|
125
|
+
export interface MeshEvidenceInboundProcessorOptionsV1<TState, TPreparation extends MeshEvidenceInboundPreparationBaseV1 = MeshEvidenceInboundPreparationBaseV1> {
|
|
126
|
+
readonly resolver: MeshKeyResolver;
|
|
127
|
+
readonly cryptoPolicy: MeshCryptoPolicy;
|
|
128
|
+
readonly adapter: MeshEvidenceInboundAdapterV1<TState, TPreparation>;
|
|
129
|
+
readonly originVerifierBindingDigest: string;
|
|
130
|
+
readonly crypto?: Crypto;
|
|
131
|
+
readonly protocolOptions?: MeshProtocolOptions;
|
|
132
|
+
readonly supportedCriticalExtensions?: readonly string[];
|
|
133
|
+
}
|
|
134
|
+
export interface MeshEvidenceInboundRequestV1 {
|
|
135
|
+
readonly envelope: SignedMeshEnvelope;
|
|
136
|
+
readonly verifiedAt: string;
|
|
137
|
+
readonly receivedAt: number;
|
|
138
|
+
}
|
|
139
|
+
export type MeshEvidenceInboundDecisionV1<TState> = {
|
|
140
|
+
readonly accepted: true;
|
|
141
|
+
readonly duplicate: boolean;
|
|
142
|
+
readonly observation: boolean;
|
|
143
|
+
readonly state: MeshEvidenceInboundRuntimeStateV1<TState>;
|
|
144
|
+
} | {
|
|
145
|
+
readonly accepted: false;
|
|
146
|
+
readonly code: MeshEvidenceInboundRejectionCodeV1;
|
|
147
|
+
readonly state: MeshEvidenceInboundRuntimeStateV1<TState>;
|
|
148
|
+
};
|
|
149
|
+
export interface MeshEvidenceInboundProcessorV1<TState> {
|
|
150
|
+
process(state: MeshEvidenceInboundRuntimeStateV1<TState>, request: MeshEvidenceInboundRequestV1): Promise<MeshEvidenceInboundDecisionV1<TState>>;
|
|
151
|
+
}
|
|
152
|
+
/** Creates the only Mesh route allowed to create a `verified_mesh` record. */
|
|
153
|
+
export declare function createMeshEvidenceInboundProcessorV1<TState, TPreparation extends MeshEvidenceInboundPreparationBaseV1 = MeshEvidenceInboundPreparationBaseV1>(options: MeshEvidenceInboundProcessorOptionsV1<TState, TPreparation>): MeshEvidenceInboundProcessorV1<TState>;
|
|
154
|
+
/** Validates retained descriptor + exact canonical signed-envelope bytes. */
|
|
155
|
+
export declare function validateMeshEvidenceOriginJournalEntryV1(value: unknown): value is MeshEvidenceOriginJournalEntryV1;
|
|
156
|
+
export type MeshTrustEligibilityModeV1 = "observe" | "restrict";
|
|
157
|
+
export interface MeshTrustCandidateV1 {
|
|
158
|
+
readonly peerId: string;
|
|
159
|
+
readonly capabilities: readonly unknown[];
|
|
160
|
+
}
|
|
161
|
+
export interface MeshTrustEligibilityResolverV1 {
|
|
162
|
+
readonly bindingDigest: string;
|
|
163
|
+
evaluate(candidate: MeshTrustCandidateV1): "eligible" | "restricted" | "quarantined" | "unavailable";
|
|
164
|
+
}
|
|
165
|
+
export declare function filterMeshCapabilityMatchesWithTrustV1<T extends MeshTrustCandidateV1>(candidates: readonly T[], mode: MeshTrustEligibilityModeV1, resolver: MeshTrustEligibilityResolverV1): {
|
|
166
|
+
readonly matches: readonly T[];
|
|
167
|
+
readonly diagnostics: readonly {
|
|
168
|
+
readonly peerId: string;
|
|
169
|
+
readonly status: ReturnType<MeshTrustEligibilityResolverV1["evaluate"]>;
|
|
170
|
+
}[];
|
|
171
|
+
readonly unavailable: boolean;
|
|
172
|
+
};
|
|
173
|
+
export declare const MESH_PEER_SUBJECT_MAPPING_DIGEST_V1: string;
|
|
174
|
+
export interface MeshTrustStateEligibilityConfigV1 {
|
|
175
|
+
readonly schemaVersion: 1;
|
|
176
|
+
readonly mode: MeshTrustEligibilityModeV1;
|
|
177
|
+
readonly logicalTimeMs: number;
|
|
178
|
+
readonly scope: EvidenceScopeV1;
|
|
179
|
+
readonly policyId: string;
|
|
180
|
+
readonly policyVersion: number;
|
|
181
|
+
readonly policyDigest: string;
|
|
182
|
+
readonly maximumProfileAgeMs: number;
|
|
183
|
+
readonly requirements: readonly TrustEligibilityRequirementV1[];
|
|
184
|
+
readonly subjectMappingDigest: string;
|
|
185
|
+
readonly meshEligibilityBindingDigest: string;
|
|
186
|
+
readonly profileResolverBindingDigest: string;
|
|
187
|
+
}
|
|
188
|
+
export interface MeshTrustStateEligibilityDiagnosticV1 {
|
|
189
|
+
readonly peerId: string;
|
|
190
|
+
readonly disposition: "eligible" | "restricted" | "quarantined" | "unavailable";
|
|
191
|
+
readonly eligibilityDecisionId: string | null;
|
|
192
|
+
readonly reasonCodes: readonly TrustReasonCodeV1[];
|
|
193
|
+
}
|
|
194
|
+
export interface MeshTrustStateEligibilityResultV1<T extends MeshTrustCandidateV1> {
|
|
195
|
+
readonly matches: readonly T[];
|
|
196
|
+
readonly diagnostics: readonly MeshTrustStateEligibilityDiagnosticV1[];
|
|
197
|
+
readonly unavailable: boolean;
|
|
198
|
+
}
|
|
199
|
+
export type MeshTrustEligibilityRuntimeStateV1<TAuthorizationState = unknown> = MeshEvidenceInboundRuntimeStateV1<MeshEvidenceTrustCompositeStateV1<TAuthorizationState>>;
|
|
200
|
+
/**
|
|
201
|
+
* Reconstructs the Trust member of a Mesh transaction only through the strict
|
|
202
|
+
* authenticated snapshot boundary. The caller must supply its current trusted
|
|
203
|
+
* external rollback anchor; structural Trust validation alone is insufficient.
|
|
204
|
+
*/
|
|
205
|
+
export declare function restoreMeshTrustEligibilityRuntimeStateV1<TAuthorizationState>(current: MeshTrustEligibilityRuntimeStateV1<TAuthorizationState>, snapshot: EvidenceTrustSnapshotV1, anchor: EvidenceTrustRollbackAnchorV1, protector: EvidenceTrustSnapshotProtectorV1, options?: EvidenceTrustRestoreOptionsV1): MeshTrustEligibilityRuntimeStateV1<TAuthorizationState>;
|
|
206
|
+
export declare function createMeshTrustStateEligibilityConfigV1(value: MeshTrustStateEligibilityConfigV1): MeshTrustStateEligibilityConfigV1;
|
|
207
|
+
export declare function digestMeshTrustStateEligibilityConfigV1(value: MeshTrustStateEligibilityConfigV1): string;
|
|
208
|
+
export declare function filterMeshCapabilityMatchesWithTrustStateV1<T extends MeshTrustCandidateV1, TAuthorizationState = unknown>(candidates: readonly T[], current: MeshTrustEligibilityRuntimeStateV1<TAuthorizationState>, configValue: MeshTrustStateEligibilityConfigV1): MeshTrustStateEligibilityResultV1<T>;
|
|
209
|
+
/** Encodes only the already-redacted projection; it never exports a profile or Fusion input. */
|
|
210
|
+
export declare function encodeMeshTrustObservationV1(observation: TrustObservationV1): Readonly<Record<string, unknown>>;
|
|
211
|
+
export {};
|
|
212
|
+
//# sourceMappingURL=trust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"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"}
|
package/dist/trust.js
ADDED
|
@@ -0,0 +1,934 @@
|
|
|
1
|
+
import { verifyMeshEnvelope } from "@agentplat/mesh-crypto";
|
|
2
|
+
import { canonicalizeMeshJson, validateMeshEnvelopeContext, } from "@agentplat/mesh-protocol";
|
|
3
|
+
import { normalizeMeshEvidenceAttestationV1, normalizeMeshEvidenceChallengeV1, normalizeMeshEvidenceClaimV1, normalizeMeshEvidenceRetractionV1, normalizeMeshTrustObservationV1, } from "@agentplat/trust/mesh-records";
|
|
4
|
+
import { assertExactKeys, assertIdentifier, assertSafeInteger, assertTrustDigest, createTrustEligibilityRequestV1, deepFreeze, digestScopeV1, digestSubjectV1, digestTrustProfileKeyV1, digestTrustJsonV1, evaluateTrustEligibilityV1, reduceEvidenceTrustStateV1, restoreEvidenceTrustSnapshotV1, sha256TrustBytesV1, validateEvidenceScopeV1, validateEvidenceTrustStateV1, } from "@agentplat/trust";
|
|
5
|
+
const trustDigestPattern = /^[0-9a-f]{64}$/;
|
|
6
|
+
const maximumOriginProofs = 4_096;
|
|
7
|
+
const maximumRemoteObservations = 4_096;
|
|
8
|
+
const maximumAuthorityDigests = 32;
|
|
9
|
+
const maximumEligibilityStateIdentities = 4_096;
|
|
10
|
+
/** Unforgeable, adapter-bound handoff from the verified processor. */
|
|
11
|
+
const concreteAdapterCapabilities = new WeakMap();
|
|
12
|
+
const authorizedAdapterInvocations = new WeakMap();
|
|
13
|
+
const verifiedEligibilityRuntimeStates = new WeakMap();
|
|
14
|
+
const latestEligibilitySnapshotByStateId = new Map();
|
|
15
|
+
/** Creates the Trust reducer adapter; no direct payload route exists. */
|
|
16
|
+
export function createMeshEvidenceTrustAdapterV1(bindingDigest, originVerifierBindingDigest, authorization) {
|
|
17
|
+
if (!trustDigestPattern.test(bindingDigest) ||
|
|
18
|
+
!trustDigestPattern.test(originVerifierBindingDigest) ||
|
|
19
|
+
!authorization ||
|
|
20
|
+
typeof authorization !== "object" ||
|
|
21
|
+
typeof authorization.prepare !== "function") {
|
|
22
|
+
throw new TypeError("Mesh Evidence Trust adapter bindings are invalid");
|
|
23
|
+
}
|
|
24
|
+
const prepare = authorization.prepare.bind(authorization);
|
|
25
|
+
const adapterCapability = Object.freeze({});
|
|
26
|
+
const adapter = {
|
|
27
|
+
bindingDigest,
|
|
28
|
+
prepare: (input) => {
|
|
29
|
+
const result = prepare({
|
|
30
|
+
authorizationState: input.state.authorizationState,
|
|
31
|
+
envelope: input.envelope,
|
|
32
|
+
receivedAt: input.receivedAt,
|
|
33
|
+
});
|
|
34
|
+
if (!result || typeof result !== "object" || result.accepted !== true)
|
|
35
|
+
return result;
|
|
36
|
+
return Object.freeze({
|
|
37
|
+
accepted: true,
|
|
38
|
+
nextAuthorizationState: result.nextAuthorizationState,
|
|
39
|
+
admissionStateDigest: result.admissionStateDigest,
|
|
40
|
+
coordinationAuthorityDigests: Object.freeze([
|
|
41
|
+
...result.coordinationAuthorityDigests,
|
|
42
|
+
]),
|
|
43
|
+
replayStateDigest: result.replayStateDigest,
|
|
44
|
+
observationCorrelated: result.observationCorrelated,
|
|
45
|
+
effectiveAtLogicalMs: result.effectiveAtLogicalMs,
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
process: (input) => {
|
|
49
|
+
if (!input ||
|
|
50
|
+
typeof input !== "object" ||
|
|
51
|
+
authorizedAdapterInvocations.get(input) !== adapterCapability) {
|
|
52
|
+
return {
|
|
53
|
+
accepted: false,
|
|
54
|
+
code: "trust_transition_rejected",
|
|
55
|
+
state: input?.state,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
authorizedAdapterInvocations.delete(input);
|
|
59
|
+
let originEntry;
|
|
60
|
+
try {
|
|
61
|
+
originEntry = createOriginJournalEntry(input.origin, input.envelope);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return {
|
|
65
|
+
accepted: false,
|
|
66
|
+
code: "trust_transition_rejected",
|
|
67
|
+
state: input.state,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (!Object.hasOwn(input.state.originProofs, input.origin.originProofDigest) &&
|
|
71
|
+
Object.keys(input.state.originProofs).length >= maximumOriginProofs) {
|
|
72
|
+
return {
|
|
73
|
+
accepted: false,
|
|
74
|
+
code: "trust_transition_rejected",
|
|
75
|
+
state: input.state,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const originProofs = {
|
|
79
|
+
...input.state.originProofs,
|
|
80
|
+
[input.origin.originProofDigest]: originEntry,
|
|
81
|
+
};
|
|
82
|
+
if (input.observation !== undefined) {
|
|
83
|
+
if (!Object.hasOwn(input.state.remoteObservations, input.observation.observationId) &&
|
|
84
|
+
Object.keys(input.state.remoteObservations).length >=
|
|
85
|
+
maximumRemoteObservations) {
|
|
86
|
+
return {
|
|
87
|
+
accepted: false,
|
|
88
|
+
code: "trust_transition_rejected",
|
|
89
|
+
state: input.state,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const remoteObservations = {
|
|
93
|
+
...input.state.remoteObservations,
|
|
94
|
+
[input.observation.observationId]: Object.freeze({
|
|
95
|
+
observation: input.observation,
|
|
96
|
+
correlated: input.observationCorrelated === true,
|
|
97
|
+
}),
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
accepted: true,
|
|
101
|
+
duplicate: Object.hasOwn(input.state.remoteObservations, input.observation.observationId),
|
|
102
|
+
state: Object.freeze({
|
|
103
|
+
...input.state,
|
|
104
|
+
authorizationState: input.preparation.nextAuthorizationState,
|
|
105
|
+
originProofs: Object.freeze(originProofs),
|
|
106
|
+
remoteObservations: Object.freeze(remoteObservations),
|
|
107
|
+
}),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
const record = input.record;
|
|
112
|
+
const recordId = evidenceRecordId(record);
|
|
113
|
+
const recordDigest = recordId.slice(recordId.indexOf(":") + 1);
|
|
114
|
+
const reduced = reduceEvidenceTrustStateV1(input.state.trust, {
|
|
115
|
+
schemaVersion: 1,
|
|
116
|
+
kind: "record_admitted",
|
|
117
|
+
record,
|
|
118
|
+
origin: "verified_mesh",
|
|
119
|
+
originBindingDigest: input.originBindingDigest,
|
|
120
|
+
originVerifierBindingDigest: input.originVerifierBindingDigest,
|
|
121
|
+
originProofDigest: input.origin.originProofDigest,
|
|
122
|
+
effectiveAtLogicalMs: input.preparation.effectiveAtLogicalMs,
|
|
123
|
+
logicalTimeMs: input.receivedAt,
|
|
124
|
+
}, {
|
|
125
|
+
verifiedMeshAdmissionVerifierRegistry: {
|
|
126
|
+
resolve: (binding) => binding !== originVerifierBindingDigest
|
|
127
|
+
? null
|
|
128
|
+
: {
|
|
129
|
+
verifierBindingDigest: originVerifierBindingDigest,
|
|
130
|
+
upstreamBindingDigest: input.originBindingDigest,
|
|
131
|
+
verify: (candidate) => {
|
|
132
|
+
const proofEntry = originProofs[candidate.originProofDigest];
|
|
133
|
+
const proof = proofEntry?.descriptor;
|
|
134
|
+
return (proof !== undefined &&
|
|
135
|
+
validateOriginJournalEntry(proofEntry) &&
|
|
136
|
+
candidate.originBindingDigest ===
|
|
137
|
+
input.originBindingDigest &&
|
|
138
|
+
candidate.originVerifierBindingDigest ===
|
|
139
|
+
originVerifierBindingDigest &&
|
|
140
|
+
candidate.recordId === recordId &&
|
|
141
|
+
candidate.recordDigest === recordDigest &&
|
|
142
|
+
candidate.effectiveAtLogicalMs ===
|
|
143
|
+
input.preparation.effectiveAtLogicalMs &&
|
|
144
|
+
proof.normalizedRecordId === recordId &&
|
|
145
|
+
proof.normalizedRecordDigest === recordDigest);
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
const duplicate = reduced.effects.some((effect) => effect.reasonCode === "duplicate");
|
|
151
|
+
return {
|
|
152
|
+
accepted: true,
|
|
153
|
+
duplicate,
|
|
154
|
+
state: Object.freeze({
|
|
155
|
+
...input.state,
|
|
156
|
+
authorizationState: input.preparation.nextAuthorizationState,
|
|
157
|
+
trust: reduced.state,
|
|
158
|
+
originProofs: Object.freeze(originProofs),
|
|
159
|
+
}),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return {
|
|
164
|
+
accepted: false,
|
|
165
|
+
code: "trust_transition_rejected",
|
|
166
|
+
state: input.state,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
const frozenAdapter = Object.freeze(adapter);
|
|
172
|
+
concreteAdapterCapabilities.set(frozenAdapter, adapterCapability);
|
|
173
|
+
return frozenAdapter;
|
|
174
|
+
}
|
|
175
|
+
/** Creates the only Mesh route allowed to create a `verified_mesh` record. */
|
|
176
|
+
export function createMeshEvidenceInboundProcessorV1(options) {
|
|
177
|
+
if (!options ||
|
|
178
|
+
typeof options !== "object" ||
|
|
179
|
+
!options.adapter ||
|
|
180
|
+
!options.resolver ||
|
|
181
|
+
typeof options.resolver.resolve !== "function" ||
|
|
182
|
+
!options.cryptoPolicy ||
|
|
183
|
+
!Array.isArray(options.cryptoPolicy.allowedAlgorithms) ||
|
|
184
|
+
options.cryptoPolicy.allowedAlgorithms.length === 0 ||
|
|
185
|
+
typeof options.adapter.prepare !== "function" ||
|
|
186
|
+
typeof options.adapter.process !== "function" ||
|
|
187
|
+
!trustDigestPattern.test(options.adapter.bindingDigest) ||
|
|
188
|
+
!trustDigestPattern.test(options.originVerifierBindingDigest)) {
|
|
189
|
+
throw new TypeError("Mesh Evidence inbound dependencies are required");
|
|
190
|
+
}
|
|
191
|
+
const adapterCapability = concreteAdapterCapabilities.get(options.adapter);
|
|
192
|
+
const resolver = Object.freeze({
|
|
193
|
+
resolve: options.resolver.resolve.bind(options.resolver),
|
|
194
|
+
});
|
|
195
|
+
const policy = Object.freeze({
|
|
196
|
+
allowedAlgorithms: Object.freeze([
|
|
197
|
+
...options.cryptoPolicy.allowedAlgorithms,
|
|
198
|
+
]),
|
|
199
|
+
});
|
|
200
|
+
const configuration = Object.freeze({
|
|
201
|
+
resolver,
|
|
202
|
+
policy,
|
|
203
|
+
adapter: Object.freeze({
|
|
204
|
+
bindingDigest: options.adapter.bindingDigest,
|
|
205
|
+
prepare: options.adapter.prepare.bind(options.adapter),
|
|
206
|
+
process: options.adapter.process.bind(options.adapter),
|
|
207
|
+
}),
|
|
208
|
+
originVerifierBindingDigest: options.originVerifierBindingDigest,
|
|
209
|
+
crypto: options.crypto,
|
|
210
|
+
protocolOptions: options.protocolOptions,
|
|
211
|
+
supportedCriticalExtensions: options.supportedCriticalExtensions === undefined
|
|
212
|
+
? undefined
|
|
213
|
+
: Object.freeze([...options.supportedCriticalExtensions]),
|
|
214
|
+
adapterCapability,
|
|
215
|
+
});
|
|
216
|
+
const processor = {
|
|
217
|
+
async process(state, request) {
|
|
218
|
+
if (!state ||
|
|
219
|
+
!request ||
|
|
220
|
+
typeof request !== "object" ||
|
|
221
|
+
!Number.isSafeInteger(request.receivedAt) ||
|
|
222
|
+
request.receivedAt < 0)
|
|
223
|
+
return reject(state, "invalid_request");
|
|
224
|
+
if (!isRuntimeState(state))
|
|
225
|
+
return reject(state, "invalid_request");
|
|
226
|
+
const contextual = validateMeshEnvelopeContext(request.envelope, {
|
|
227
|
+
tenantId: state.identity.tenantId,
|
|
228
|
+
meshId: state.identity.meshId,
|
|
229
|
+
peerId: state.identity.peerId,
|
|
230
|
+
receivedAt: request.verifiedAt,
|
|
231
|
+
...(configuration.supportedCriticalExtensions === undefined
|
|
232
|
+
? {}
|
|
233
|
+
: {
|
|
234
|
+
supportedCriticalExtensions: configuration.supportedCriticalExtensions,
|
|
235
|
+
}),
|
|
236
|
+
}, configuration.protocolOptions);
|
|
237
|
+
if (!contextual.ok)
|
|
238
|
+
return reject(state, contextual.issues[0]?.code === "invalid_audience"
|
|
239
|
+
? "audience_mismatch"
|
|
240
|
+
: "scope_mismatch");
|
|
241
|
+
if (!isTrustPayload(contextual.value.payload))
|
|
242
|
+
return reject(state, "unsupported_message_type");
|
|
243
|
+
let verification;
|
|
244
|
+
try {
|
|
245
|
+
verification = await verifyMeshEnvelope({
|
|
246
|
+
envelope: request.envelope,
|
|
247
|
+
resolver: configuration.resolver,
|
|
248
|
+
policy: configuration.policy,
|
|
249
|
+
verifiedAt: request.verifiedAt,
|
|
250
|
+
crypto: configuration.crypto,
|
|
251
|
+
protocolOptions: configuration.protocolOptions,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return reject(state, "crypto_rejected");
|
|
256
|
+
}
|
|
257
|
+
if (!verification.verified)
|
|
258
|
+
return reject(state, "crypto_rejected");
|
|
259
|
+
const envelope = verification.envelope;
|
|
260
|
+
const normalized = normalize(envelope);
|
|
261
|
+
if (!normalized)
|
|
262
|
+
return reject(state, "normalization_failed");
|
|
263
|
+
let prepared;
|
|
264
|
+
try {
|
|
265
|
+
prepared = configuration.adapter.prepare({
|
|
266
|
+
state: state.state,
|
|
267
|
+
envelope,
|
|
268
|
+
receivedAt: request.receivedAt,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return reject(state, "authorization_rejected");
|
|
273
|
+
}
|
|
274
|
+
let acceptedPreparation;
|
|
275
|
+
let preparationSecurity;
|
|
276
|
+
try {
|
|
277
|
+
if (!prepared || typeof prepared !== "object")
|
|
278
|
+
return reject(state, "authorization_rejected");
|
|
279
|
+
const accepted = prepared.accepted;
|
|
280
|
+
if (accepted !== true) {
|
|
281
|
+
const code = prepared.code;
|
|
282
|
+
if (accepted === false &&
|
|
283
|
+
(code === "authorization_rejected" || code === "replay_rejected"))
|
|
284
|
+
return Object.freeze({ accepted: false, code, state });
|
|
285
|
+
return reject(state, "authorization_rejected");
|
|
286
|
+
}
|
|
287
|
+
preparationSecurity = Object.freeze({
|
|
288
|
+
accepted: true,
|
|
289
|
+
admissionStateDigest: prepared.admissionStateDigest,
|
|
290
|
+
coordinationAuthorityDigests: Object.freeze([
|
|
291
|
+
...prepared.coordinationAuthorityDigests,
|
|
292
|
+
]),
|
|
293
|
+
replayStateDigest: prepared.replayStateDigest,
|
|
294
|
+
observationCorrelated: prepared.observationCorrelated,
|
|
295
|
+
effectiveAtLogicalMs: prepared.effectiveAtLogicalMs,
|
|
296
|
+
});
|
|
297
|
+
if (!isValidPreparation(preparationSecurity, envelope, request.receivedAt))
|
|
298
|
+
return reject(state, "authorization_rejected");
|
|
299
|
+
acceptedPreparation = prepared;
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
return reject(state, "authorization_rejected");
|
|
303
|
+
}
|
|
304
|
+
let origin;
|
|
305
|
+
try {
|
|
306
|
+
origin = createOriginProof(envelope, verification.key.keyId, normalized.record === undefined
|
|
307
|
+
? normalized.observation.observationId
|
|
308
|
+
: evidenceRecordId(normalized.record), preparationSecurity);
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return reject(state, "normalization_failed");
|
|
312
|
+
}
|
|
313
|
+
const adapterInput = Object.freeze({
|
|
314
|
+
state: state.state,
|
|
315
|
+
envelope,
|
|
316
|
+
verifiedKeyId: verification.key.keyId,
|
|
317
|
+
receivedAt: request.receivedAt,
|
|
318
|
+
...(normalized.record === undefined
|
|
319
|
+
? { observation: normalized.observation }
|
|
320
|
+
: { record: normalized.record }),
|
|
321
|
+
...(normalized.observation === undefined
|
|
322
|
+
? {}
|
|
323
|
+
: {
|
|
324
|
+
observationCorrelated: preparationSecurity.observationCorrelated,
|
|
325
|
+
}),
|
|
326
|
+
origin,
|
|
327
|
+
originBindingDigest: configuration.adapter.bindingDigest,
|
|
328
|
+
originVerifierBindingDigest: configuration.originVerifierBindingDigest,
|
|
329
|
+
preparation: acceptedPreparation,
|
|
330
|
+
});
|
|
331
|
+
let transition;
|
|
332
|
+
if (configuration.adapterCapability !== undefined)
|
|
333
|
+
authorizedAdapterInvocations.set(adapterInput, configuration.adapterCapability);
|
|
334
|
+
try {
|
|
335
|
+
transition = configuration.adapter.process(adapterInput);
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
return reject(state, "trust_transition_rejected");
|
|
339
|
+
}
|
|
340
|
+
finally {
|
|
341
|
+
authorizedAdapterInvocations.delete(adapterInput);
|
|
342
|
+
}
|
|
343
|
+
if (!transition || typeof transition !== "object")
|
|
344
|
+
return reject(state, "trust_transition_rejected");
|
|
345
|
+
if (!isValidAdapterTransition(transition, state.state))
|
|
346
|
+
return reject(state, "trust_transition_rejected");
|
|
347
|
+
if (!transition.accepted)
|
|
348
|
+
return Object.freeze({
|
|
349
|
+
accepted: false,
|
|
350
|
+
code: transition.code,
|
|
351
|
+
state,
|
|
352
|
+
});
|
|
353
|
+
return Object.freeze({
|
|
354
|
+
accepted: true,
|
|
355
|
+
duplicate: transition.duplicate,
|
|
356
|
+
observation: normalized.observation !== undefined,
|
|
357
|
+
state: freezeState(state, transition.state),
|
|
358
|
+
});
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
return Object.freeze(processor);
|
|
362
|
+
}
|
|
363
|
+
function normalize(envelope) {
|
|
364
|
+
const material = {
|
|
365
|
+
schemaVersion: 1,
|
|
366
|
+
tenantId: envelope.tenantId,
|
|
367
|
+
meshId: envelope.meshId,
|
|
368
|
+
objectiveId: envelope.objectiveId ?? null,
|
|
369
|
+
senderPeerId: envelope.sender.peerId,
|
|
370
|
+
causationId: envelope.causationId ?? null,
|
|
371
|
+
};
|
|
372
|
+
try {
|
|
373
|
+
switch (envelope.payload.type) {
|
|
374
|
+
case "evidence.claim": {
|
|
375
|
+
const record = normalizeMeshEvidenceClaimV1(material, omit(envelope.payload, ["type", "claimId", "assertionDigest"]));
|
|
376
|
+
return record.claimId === envelope.payload.claimId &&
|
|
377
|
+
record.assertionDigest === envelope.payload.assertionDigest
|
|
378
|
+
? { record }
|
|
379
|
+
: undefined;
|
|
380
|
+
}
|
|
381
|
+
case "evidence.attest": {
|
|
382
|
+
const record = normalizeMeshEvidenceAttestationV1(material, omit(envelope.payload, ["type", "attestationId"]));
|
|
383
|
+
return record.attestationId === envelope.payload.attestationId
|
|
384
|
+
? { record }
|
|
385
|
+
: undefined;
|
|
386
|
+
}
|
|
387
|
+
case "evidence.challenge": {
|
|
388
|
+
const record = normalizeMeshEvidenceChallengeV1(material, omit(envelope.payload, ["type", "challengeId"]));
|
|
389
|
+
return record.challengeId === envelope.payload.challengeId
|
|
390
|
+
? { record }
|
|
391
|
+
: undefined;
|
|
392
|
+
}
|
|
393
|
+
case "evidence.retract": {
|
|
394
|
+
const record = normalizeMeshEvidenceRetractionV1(material, omit(envelope.payload, ["type", "retractionId"]));
|
|
395
|
+
return record.retractionId === envelope.payload.retractionId
|
|
396
|
+
? { record }
|
|
397
|
+
: undefined;
|
|
398
|
+
}
|
|
399
|
+
case "trust.observation": {
|
|
400
|
+
const observation = normalizeMeshTrustObservationV1(material, omit(envelope.payload, ["type", "observationId"]));
|
|
401
|
+
return observation.observationId === envelope.payload.observationId
|
|
402
|
+
? { observation }
|
|
403
|
+
: undefined;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
catch {
|
|
408
|
+
return undefined;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
function omit(value, keys) {
|
|
412
|
+
const result = { ...value };
|
|
413
|
+
for (const key of keys)
|
|
414
|
+
delete result[key];
|
|
415
|
+
return result;
|
|
416
|
+
}
|
|
417
|
+
function createOriginProof(envelope, keyId, recordId, security) {
|
|
418
|
+
const canonical = canonicalizeMeshJson(envelope);
|
|
419
|
+
if (!canonical.ok)
|
|
420
|
+
throw new TypeError("verified Mesh envelope is not canonical");
|
|
421
|
+
const signedEnvelopeDigest = sha256TrustBytesV1(new TextEncoder().encode(canonical.value));
|
|
422
|
+
const recordDigest = recordId.slice(recordId.indexOf(":") + 1);
|
|
423
|
+
const descriptor = {
|
|
424
|
+
schemaVersion: 1,
|
|
425
|
+
messageId: envelope.messageId,
|
|
426
|
+
payloadHash: envelope.payloadHash,
|
|
427
|
+
signedEnvelopeDigest,
|
|
428
|
+
senderPeerId: envelope.sender.peerId,
|
|
429
|
+
senderKeyId: keyId,
|
|
430
|
+
admissionStateDigest: security.admissionStateDigest,
|
|
431
|
+
coordinationAuthorityDigests: Object.freeze([...security.coordinationAuthorityDigests].sort()),
|
|
432
|
+
replayStateDigest: security.replayStateDigest,
|
|
433
|
+
normalizedRecordId: recordId,
|
|
434
|
+
normalizedRecordDigest: recordDigest,
|
|
435
|
+
};
|
|
436
|
+
return Object.freeze({
|
|
437
|
+
...descriptor,
|
|
438
|
+
originProofDigest: digestTrustJsonV1("origin-proof", descriptor),
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
function createOriginJournalEntry(descriptor, envelope) {
|
|
442
|
+
const canonical = canonicalizeMeshJson(envelope);
|
|
443
|
+
if (!canonical.ok)
|
|
444
|
+
throw new TypeError("verified Mesh envelope is not canonical");
|
|
445
|
+
const entry = Object.freeze({
|
|
446
|
+
schemaVersion: 1,
|
|
447
|
+
descriptor,
|
|
448
|
+
canonicalSignedEnvelope: canonical.value,
|
|
449
|
+
});
|
|
450
|
+
if (!validateMeshEvidenceOriginJournalEntryV1(entry))
|
|
451
|
+
throw new TypeError("Mesh Evidence origin journal entry is invalid");
|
|
452
|
+
return entry;
|
|
453
|
+
}
|
|
454
|
+
/** Validates retained descriptor + exact canonical signed-envelope bytes. */
|
|
455
|
+
export function validateMeshEvidenceOriginJournalEntryV1(value) {
|
|
456
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
457
|
+
return false;
|
|
458
|
+
const entry = value;
|
|
459
|
+
if (entry.schemaVersion !== 1 ||
|
|
460
|
+
typeof entry.canonicalSignedEnvelope !== "string" ||
|
|
461
|
+
!entry.descriptor ||
|
|
462
|
+
typeof entry.descriptor !== "object" ||
|
|
463
|
+
Array.isArray(entry.descriptor) ||
|
|
464
|
+
!hasExactKeys(entry, [
|
|
465
|
+
"schemaVersion",
|
|
466
|
+
"descriptor",
|
|
467
|
+
"canonicalSignedEnvelope",
|
|
468
|
+
]))
|
|
469
|
+
return false;
|
|
470
|
+
const descriptor = entry.descriptor;
|
|
471
|
+
if (!hasExactKeys(descriptor, [
|
|
472
|
+
"schemaVersion",
|
|
473
|
+
"messageId",
|
|
474
|
+
"payloadHash",
|
|
475
|
+
"signedEnvelopeDigest",
|
|
476
|
+
"senderPeerId",
|
|
477
|
+
"senderKeyId",
|
|
478
|
+
"admissionStateDigest",
|
|
479
|
+
"coordinationAuthorityDigests",
|
|
480
|
+
"replayStateDigest",
|
|
481
|
+
"normalizedRecordId",
|
|
482
|
+
"normalizedRecordDigest",
|
|
483
|
+
"originProofDigest",
|
|
484
|
+
]) ||
|
|
485
|
+
descriptor.schemaVersion !== 1 ||
|
|
486
|
+
!trustDigestPattern.test(String(descriptor.signedEnvelopeDigest)) ||
|
|
487
|
+
!trustDigestPattern.test(String(descriptor.admissionStateDigest)) ||
|
|
488
|
+
!trustDigestPattern.test(String(descriptor.replayStateDigest)) ||
|
|
489
|
+
!trustDigestPattern.test(String(descriptor.normalizedRecordDigest)) ||
|
|
490
|
+
!trustDigestPattern.test(String(descriptor.originProofDigest)) ||
|
|
491
|
+
!Array.isArray(descriptor.coordinationAuthorityDigests) ||
|
|
492
|
+
descriptor.coordinationAuthorityDigests.length > maximumAuthorityDigests ||
|
|
493
|
+
!descriptor.coordinationAuthorityDigests.every((digest) => typeof digest === "string" && trustDigestPattern.test(digest)) ||
|
|
494
|
+
!descriptor.coordinationAuthorityDigests.every((digest, index, values) => index === 0 || values[index - 1] < digest))
|
|
495
|
+
return false;
|
|
496
|
+
for (const key of [
|
|
497
|
+
"messageId",
|
|
498
|
+
"payloadHash",
|
|
499
|
+
"senderPeerId",
|
|
500
|
+
"senderKeyId",
|
|
501
|
+
"normalizedRecordId",
|
|
502
|
+
])
|
|
503
|
+
if (typeof descriptor[key] !== "string" || descriptor[key].length === 0)
|
|
504
|
+
return false;
|
|
505
|
+
const { originProofDigest: _originProofDigest, ...descriptorBody } = descriptor;
|
|
506
|
+
if (digestTrustJsonV1("origin-proof", descriptorBody) !== descriptor.originProofDigest)
|
|
507
|
+
return false;
|
|
508
|
+
let parsed;
|
|
509
|
+
try {
|
|
510
|
+
parsed = JSON.parse(entry.canonicalSignedEnvelope);
|
|
511
|
+
}
|
|
512
|
+
catch {
|
|
513
|
+
return false;
|
|
514
|
+
}
|
|
515
|
+
const canonical = canonicalizeMeshJson(parsed);
|
|
516
|
+
if (!canonical.ok || canonical.value !== entry.canonicalSignedEnvelope)
|
|
517
|
+
return false;
|
|
518
|
+
const envelope = parsed;
|
|
519
|
+
const sender = envelope.sender;
|
|
520
|
+
const proof = envelope.proof;
|
|
521
|
+
return (envelope.messageId === descriptor.messageId &&
|
|
522
|
+
envelope.payloadHash === descriptor.payloadHash &&
|
|
523
|
+
sender?.peerId === descriptor.senderPeerId &&
|
|
524
|
+
proof?.keyId === descriptor.senderKeyId &&
|
|
525
|
+
sha256TrustBytesV1(new TextEncoder().encode(entry.canonicalSignedEnvelope)) === descriptor.signedEnvelopeDigest &&
|
|
526
|
+
String(descriptor.normalizedRecordId).endsWith(`:${descriptor.normalizedRecordDigest}`));
|
|
527
|
+
}
|
|
528
|
+
function validateOriginJournalEntry(entry) {
|
|
529
|
+
return validateMeshEvidenceOriginJournalEntryV1(entry);
|
|
530
|
+
}
|
|
531
|
+
function hasExactKeys(value, keys) {
|
|
532
|
+
const actual = Object.keys(value).sort();
|
|
533
|
+
const expected = [...keys].sort();
|
|
534
|
+
return (actual.length === expected.length &&
|
|
535
|
+
actual.every((key, index) => key === expected[index]));
|
|
536
|
+
}
|
|
537
|
+
function isValidAdapterTransition(value, previousState) {
|
|
538
|
+
const transition = value;
|
|
539
|
+
if (transition.accepted === true)
|
|
540
|
+
return (hasExactKeys(transition, ["accepted", "duplicate", "state"]) &&
|
|
541
|
+
typeof transition.duplicate === "boolean");
|
|
542
|
+
return (transition.accepted === false &&
|
|
543
|
+
hasExactKeys(transition, ["accepted", "code", "state"]) &&
|
|
544
|
+
[
|
|
545
|
+
"authorization_rejected",
|
|
546
|
+
"replay_rejected",
|
|
547
|
+
"trust_transition_rejected",
|
|
548
|
+
].includes(String(transition.code)) &&
|
|
549
|
+
transition.state === previousState);
|
|
550
|
+
}
|
|
551
|
+
function evidenceRecordId(record) {
|
|
552
|
+
if ("claimId" in record && "outcome" in record)
|
|
553
|
+
return record.claimId;
|
|
554
|
+
if ("attestationId" in record)
|
|
555
|
+
return record.attestationId;
|
|
556
|
+
if ("challengeId" in record)
|
|
557
|
+
return record.challengeId;
|
|
558
|
+
return record.retractionId;
|
|
559
|
+
}
|
|
560
|
+
function isTrustPayload(payload) {
|
|
561
|
+
return (payload.type === "evidence.claim" ||
|
|
562
|
+
payload.type === "evidence.attest" ||
|
|
563
|
+
payload.type === "evidence.challenge" ||
|
|
564
|
+
payload.type === "evidence.retract" ||
|
|
565
|
+
payload.type === "trust.observation");
|
|
566
|
+
}
|
|
567
|
+
function freezeState(state, next) {
|
|
568
|
+
return Object.freeze({
|
|
569
|
+
schemaVersion: 1,
|
|
570
|
+
identity: Object.freeze({ ...state.identity }),
|
|
571
|
+
state: next,
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
function reject(state, code) {
|
|
575
|
+
return Object.freeze({ accepted: false, code, state });
|
|
576
|
+
}
|
|
577
|
+
function isRuntimeState(state) {
|
|
578
|
+
return (state.schemaVersion === 1 &&
|
|
579
|
+
state.identity !== null &&
|
|
580
|
+
typeof state.identity === "object" &&
|
|
581
|
+
typeof state.identity.tenantId === "string" &&
|
|
582
|
+
typeof state.identity.meshId === "string" &&
|
|
583
|
+
typeof state.identity.peerId === "string");
|
|
584
|
+
}
|
|
585
|
+
function isValidPreparation(preparation, envelope, receivedAt) {
|
|
586
|
+
const authorities = preparation.coordinationAuthorityDigests;
|
|
587
|
+
return (preparation.accepted === true &&
|
|
588
|
+
trustDigestPattern.test(preparation.admissionStateDigest) &&
|
|
589
|
+
trustDigestPattern.test(preparation.replayStateDigest) &&
|
|
590
|
+
Array.isArray(authorities) &&
|
|
591
|
+
authorities.length <= maximumAuthorityDigests &&
|
|
592
|
+
authorities.every((digest) => trustDigestPattern.test(digest)) &&
|
|
593
|
+
authorities.every((digest, index) => index === 0 || authorities[index - 1] < digest) &&
|
|
594
|
+
typeof preparation.observationCorrelated === "boolean" &&
|
|
595
|
+
Number.isSafeInteger(preparation.effectiveAtLogicalMs) &&
|
|
596
|
+
preparation.effectiveAtLogicalMs >= 0 &&
|
|
597
|
+
preparation.effectiveAtLogicalMs <= receivedAt &&
|
|
598
|
+
(envelope.payload.scope.kind === "work" ||
|
|
599
|
+
preparation.effectiveAtLogicalMs === receivedAt));
|
|
600
|
+
}
|
|
601
|
+
export function filterMeshCapabilityMatchesWithTrustV1(candidates, mode, resolver) {
|
|
602
|
+
if (mode !== "observe" && mode !== "restrict") {
|
|
603
|
+
throw new TypeError("Mesh Trust eligibility mode is invalid");
|
|
604
|
+
}
|
|
605
|
+
if (new Set(candidates.map((candidate) => candidate.peerId)).size !==
|
|
606
|
+
candidates.length) {
|
|
607
|
+
throw new TypeError("Mesh Trust candidates must be unique");
|
|
608
|
+
}
|
|
609
|
+
const evaluate = resolver.evaluate.bind(resolver);
|
|
610
|
+
const diagnostics = candidates.map((candidate) => {
|
|
611
|
+
let status = "unavailable";
|
|
612
|
+
try {
|
|
613
|
+
status = evaluate(candidate);
|
|
614
|
+
}
|
|
615
|
+
catch {
|
|
616
|
+
status = "unavailable";
|
|
617
|
+
}
|
|
618
|
+
if (!["eligible", "restricted", "quarantined", "unavailable"].includes(status)) {
|
|
619
|
+
status = "unavailable";
|
|
620
|
+
}
|
|
621
|
+
return Object.freeze({ peerId: candidate.peerId, status });
|
|
622
|
+
});
|
|
623
|
+
const unavailable = diagnostics.some((item) => item.status === "unavailable");
|
|
624
|
+
const matches = mode === "observe"
|
|
625
|
+
? candidates
|
|
626
|
+
: unavailable
|
|
627
|
+
? []
|
|
628
|
+
: candidates.filter((_, index) => diagnostics[index].status === "eligible");
|
|
629
|
+
return Object.freeze({
|
|
630
|
+
matches: Object.freeze([...matches]),
|
|
631
|
+
diagnostics: Object.freeze(diagnostics),
|
|
632
|
+
unavailable,
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
export const MESH_PEER_SUBJECT_MAPPING_DIGEST_V1 = digestTrustJsonV1("mesh-subject-mapping", {
|
|
636
|
+
schemaVersion: 1,
|
|
637
|
+
candidateField: "peerId",
|
|
638
|
+
subjectKind: "peer",
|
|
639
|
+
});
|
|
640
|
+
/**
|
|
641
|
+
* Reconstructs the Trust member of a Mesh transaction only through the strict
|
|
642
|
+
* authenticated snapshot boundary. The caller must supply its current trusted
|
|
643
|
+
* external rollback anchor; structural Trust validation alone is insufficient.
|
|
644
|
+
*/
|
|
645
|
+
export function restoreMeshTrustEligibilityRuntimeStateV1(current, snapshot, anchor, protector, options = {}) {
|
|
646
|
+
if (!isRuntimeState(current) ||
|
|
647
|
+
!current.state ||
|
|
648
|
+
typeof current.state !== "object" ||
|
|
649
|
+
!Object.hasOwn(current.state, "authorizationState") ||
|
|
650
|
+
!Object.hasOwn(current.state, "originProofs") ||
|
|
651
|
+
!Object.hasOwn(current.state, "remoteObservations"))
|
|
652
|
+
throw new TypeError("Mesh Trust current transaction is invalid");
|
|
653
|
+
const trust = restoreEvidenceTrustSnapshotV1(snapshot, anchor, protector, options);
|
|
654
|
+
const prior = latestEligibilitySnapshotByStateId.get(snapshot.stateId);
|
|
655
|
+
if (!prior &&
|
|
656
|
+
latestEligibilitySnapshotByStateId.size >= maximumEligibilityStateIdentities)
|
|
657
|
+
throw new TypeError("Mesh Trust eligibility state capacity exceeded");
|
|
658
|
+
if (prior &&
|
|
659
|
+
(snapshot.generation < prior.generation ||
|
|
660
|
+
(snapshot.generation === prior.generation &&
|
|
661
|
+
snapshot.snapshotDigest !== prior.digest)))
|
|
662
|
+
throw new TypeError("Mesh Trust snapshot anchor is not current");
|
|
663
|
+
latestEligibilitySnapshotByStateId.set(snapshot.stateId, {
|
|
664
|
+
generation: snapshot.generation,
|
|
665
|
+
digest: snapshot.snapshotDigest,
|
|
666
|
+
});
|
|
667
|
+
const restored = Object.freeze({
|
|
668
|
+
schemaVersion: 1,
|
|
669
|
+
identity: Object.freeze({ ...current.identity }),
|
|
670
|
+
state: Object.freeze({
|
|
671
|
+
...current.state,
|
|
672
|
+
trust,
|
|
673
|
+
}),
|
|
674
|
+
});
|
|
675
|
+
verifiedEligibilityRuntimeStates.set(restored, {
|
|
676
|
+
stateId: snapshot.stateId,
|
|
677
|
+
generation: snapshot.generation,
|
|
678
|
+
digest: snapshot.snapshotDigest,
|
|
679
|
+
logicalTimeMs: snapshot.createdAtLogicalMs,
|
|
680
|
+
});
|
|
681
|
+
return restored;
|
|
682
|
+
}
|
|
683
|
+
const stateEligibilityConfigKeys = [
|
|
684
|
+
"schemaVersion",
|
|
685
|
+
"mode",
|
|
686
|
+
"logicalTimeMs",
|
|
687
|
+
"scope",
|
|
688
|
+
"policyId",
|
|
689
|
+
"policyVersion",
|
|
690
|
+
"policyDigest",
|
|
691
|
+
"maximumProfileAgeMs",
|
|
692
|
+
"requirements",
|
|
693
|
+
"subjectMappingDigest",
|
|
694
|
+
"meshEligibilityBindingDigest",
|
|
695
|
+
"profileResolverBindingDigest",
|
|
696
|
+
];
|
|
697
|
+
export function createMeshTrustStateEligibilityConfigV1(value) {
|
|
698
|
+
try {
|
|
699
|
+
assertExactKeys(value, stateEligibilityConfigKeys, "Mesh Trust config");
|
|
700
|
+
if (value.schemaVersion !== 1 ||
|
|
701
|
+
(value.mode !== "observe" && value.mode !== "restrict"))
|
|
702
|
+
throw new TypeError("Mesh Trust config is invalid");
|
|
703
|
+
assertSafeInteger(value.logicalTimeMs, "logicalTimeMs");
|
|
704
|
+
assertIdentifier(value.policyId, "policyId");
|
|
705
|
+
assertSafeInteger(value.policyVersion, "policyVersion", 1);
|
|
706
|
+
assertTrustDigest(value.policyDigest, "policyDigest");
|
|
707
|
+
assertTrustDigest(value.subjectMappingDigest, "subjectMappingDigest");
|
|
708
|
+
assertTrustDigest(value.meshEligibilityBindingDigest, "meshEligibilityBindingDigest");
|
|
709
|
+
assertTrustDigest(value.profileResolverBindingDigest, "profileResolverBindingDigest");
|
|
710
|
+
if (value.subjectMappingDigest !== MESH_PEER_SUBJECT_MAPPING_DIGEST_V1 ||
|
|
711
|
+
value.meshEligibilityBindingDigest === value.profileResolverBindingDigest)
|
|
712
|
+
throw new TypeError("Mesh Trust config binding is invalid");
|
|
713
|
+
const scope = validateEvidenceScopeV1(value.scope);
|
|
714
|
+
if (scope.kind !== "mesh" &&
|
|
715
|
+
scope.kind !== "objective" &&
|
|
716
|
+
scope.kind !== "work")
|
|
717
|
+
throw new TypeError("Mesh Trust scope is invalid");
|
|
718
|
+
const validationSubject = {
|
|
719
|
+
schemaVersion: 1,
|
|
720
|
+
kind: "peer",
|
|
721
|
+
peerId: "mesh-subject-validation",
|
|
722
|
+
};
|
|
723
|
+
const validationProfileDigest = "0".repeat(64);
|
|
724
|
+
const request = createTrustEligibilityRequestV1({
|
|
725
|
+
schemaVersion: 1,
|
|
726
|
+
tenantId: scope.tenantId,
|
|
727
|
+
subject: validationSubject,
|
|
728
|
+
subjectDigest: digestSubjectV1(validationSubject),
|
|
729
|
+
scope,
|
|
730
|
+
scopeDigest: digestScopeV1(scope),
|
|
731
|
+
policyId: value.policyId,
|
|
732
|
+
policyVersion: value.policyVersion,
|
|
733
|
+
policyDigest: value.policyDigest,
|
|
734
|
+
profileId: `profile:${validationProfileDigest}`,
|
|
735
|
+
profileDigest: validationProfileDigest,
|
|
736
|
+
maximumProfileAgeMs: value.maximumProfileAgeMs,
|
|
737
|
+
requirements: value.requirements,
|
|
738
|
+
});
|
|
739
|
+
return deepFreeze({
|
|
740
|
+
...value,
|
|
741
|
+
scope,
|
|
742
|
+
requirements: request.requirements,
|
|
743
|
+
});
|
|
744
|
+
}
|
|
745
|
+
catch (error) {
|
|
746
|
+
if (error instanceof TypeError && error.message.startsWith("Mesh Trust"))
|
|
747
|
+
throw error;
|
|
748
|
+
throw new TypeError("Mesh Trust state eligibility config is invalid", {
|
|
749
|
+
cause: error,
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
export function digestMeshTrustStateEligibilityConfigV1(value) {
|
|
754
|
+
const config = createMeshTrustStateEligibilityConfigV1(value);
|
|
755
|
+
return digestTrustJsonV1("mesh-eligibility-config", {
|
|
756
|
+
schemaVersion: config.schemaVersion,
|
|
757
|
+
mode: config.mode,
|
|
758
|
+
scope: config.scope,
|
|
759
|
+
policyId: config.policyId,
|
|
760
|
+
policyVersion: config.policyVersion,
|
|
761
|
+
policyDigest: config.policyDigest,
|
|
762
|
+
maximumProfileAgeMs: config.maximumProfileAgeMs,
|
|
763
|
+
requirements: config.requirements,
|
|
764
|
+
subjectMappingDigest: config.subjectMappingDigest,
|
|
765
|
+
});
|
|
766
|
+
}
|
|
767
|
+
function meshTrustBindingsAreCurrent(state, config) {
|
|
768
|
+
const resolver = state.dependencyBindings.find((binding) => binding.bindingDigest === config.profileResolverBindingDigest);
|
|
769
|
+
const integration = state.dependencyBindings.find((binding) => binding.bindingDigest === config.meshEligibilityBindingDigest);
|
|
770
|
+
const isCurrent = (binding) => binding !== undefined &&
|
|
771
|
+
binding.registeredAtLogicalMs <= config.logicalTimeMs &&
|
|
772
|
+
binding.validFromLogicalMs <= config.logicalTimeMs &&
|
|
773
|
+
(binding.validUntilLogicalMs === null ||
|
|
774
|
+
config.logicalTimeMs < binding.validUntilLogicalMs) &&
|
|
775
|
+
state.dependencyBindingHeads.some((head) => head.bindingKind === binding.bindingKind &&
|
|
776
|
+
head.bindingName === binding.bindingName &&
|
|
777
|
+
head.bindingVersion === binding.bindingVersion &&
|
|
778
|
+
head.bindingDigest === binding.bindingDigest);
|
|
779
|
+
return (isCurrent(resolver) &&
|
|
780
|
+
resolver.bindingKind === "profile_resolver" &&
|
|
781
|
+
resolver.policyDigest === config.policyDigest &&
|
|
782
|
+
resolver.subjectMappingDigest === config.subjectMappingDigest &&
|
|
783
|
+
isCurrent(integration) &&
|
|
784
|
+
integration.bindingKind === "mesh_eligibility" &&
|
|
785
|
+
integration.policyDigest === config.policyDigest &&
|
|
786
|
+
integration.subjectMappingDigest === config.subjectMappingDigest &&
|
|
787
|
+
integration.upstreamBindingDigest === resolver.bindingDigest &&
|
|
788
|
+
integration.configurationDigest ===
|
|
789
|
+
digestMeshTrustStateEligibilityConfigV1(config));
|
|
790
|
+
}
|
|
791
|
+
const unavailableMeshTrustDiagnostic = (peerId, reasonCode) => deepFreeze({
|
|
792
|
+
peerId,
|
|
793
|
+
disposition: "unavailable",
|
|
794
|
+
eligibilityDecisionId: null,
|
|
795
|
+
reasonCodes: [reasonCode],
|
|
796
|
+
});
|
|
797
|
+
const decisionDiagnostic = (peerId, decision) => deepFreeze({
|
|
798
|
+
peerId,
|
|
799
|
+
disposition: decision.disposition,
|
|
800
|
+
eligibilityDecisionId: decision.eligibilityDecisionId,
|
|
801
|
+
reasonCodes: decision.reasonCodes,
|
|
802
|
+
});
|
|
803
|
+
export function filterMeshCapabilityMatchesWithTrustStateV1(candidates, current, configValue) {
|
|
804
|
+
const config = createMeshTrustStateEligibilityConfigV1(configValue);
|
|
805
|
+
if (!Array.isArray(candidates))
|
|
806
|
+
throw new TypeError("Mesh Trust candidates are invalid");
|
|
807
|
+
for (const candidate of candidates)
|
|
808
|
+
try {
|
|
809
|
+
assertIdentifier(candidate?.peerId, "candidate.peerId");
|
|
810
|
+
}
|
|
811
|
+
catch (error) {
|
|
812
|
+
throw new TypeError("Mesh Trust candidates are invalid", {
|
|
813
|
+
cause: error,
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
if (new Set(candidates.map((candidate) => candidate.peerId)).size !==
|
|
817
|
+
candidates.length)
|
|
818
|
+
throw new TypeError("Mesh Trust candidates must be unique");
|
|
819
|
+
let state = null;
|
|
820
|
+
let sharedFailure = null;
|
|
821
|
+
try {
|
|
822
|
+
const scopeMeshId = "meshId" in config.scope ? config.scope.meshId : undefined;
|
|
823
|
+
const verifiedRuntime = verifiedEligibilityRuntimeStates.get(current);
|
|
824
|
+
const currentSnapshot = verifiedRuntime
|
|
825
|
+
? latestEligibilitySnapshotByStateId.get(verifiedRuntime.stateId)
|
|
826
|
+
: null;
|
|
827
|
+
if (!verifiedRuntime ||
|
|
828
|
+
!currentSnapshot ||
|
|
829
|
+
verifiedRuntime.generation !== currentSnapshot.generation ||
|
|
830
|
+
verifiedRuntime.digest !== currentSnapshot.digest ||
|
|
831
|
+
config.logicalTimeMs !== verifiedRuntime.logicalTimeMs ||
|
|
832
|
+
!isRuntimeState(current) ||
|
|
833
|
+
!current.state ||
|
|
834
|
+
typeof current.state !== "object" ||
|
|
835
|
+
current.identity.tenantId !== config.scope.tenantId ||
|
|
836
|
+
current.identity.meshId !== scopeMeshId)
|
|
837
|
+
throw new TypeError("Mesh Trust current transaction is invalid");
|
|
838
|
+
state = validateEvidenceTrustStateV1(current.state.trust);
|
|
839
|
+
if (config.logicalTimeMs < state.logicalTimeHighWaterMs)
|
|
840
|
+
sharedFailure = "logical_time_rollback";
|
|
841
|
+
else if (!meshTrustBindingsAreCurrent(state, config))
|
|
842
|
+
sharedFailure = "dependency_binding_invalid";
|
|
843
|
+
}
|
|
844
|
+
catch {
|
|
845
|
+
sharedFailure = "state_conflict";
|
|
846
|
+
}
|
|
847
|
+
const diagnostics = candidates.map((candidate) => {
|
|
848
|
+
if (!state || sharedFailure)
|
|
849
|
+
return unavailableMeshTrustDiagnostic(candidate.peerId, sharedFailure ?? "state_conflict");
|
|
850
|
+
try {
|
|
851
|
+
const subject = {
|
|
852
|
+
schemaVersion: 1,
|
|
853
|
+
kind: "peer",
|
|
854
|
+
peerId: candidate.peerId,
|
|
855
|
+
};
|
|
856
|
+
const subjectDigest = digestSubjectV1(subject);
|
|
857
|
+
const scopeDigest = digestScopeV1(config.scope);
|
|
858
|
+
const profileKey = digestTrustProfileKeyV1({
|
|
859
|
+
tenantId: config.scope.tenantId,
|
|
860
|
+
subjectDigest,
|
|
861
|
+
scopeDigest,
|
|
862
|
+
policyDigest: config.policyDigest,
|
|
863
|
+
});
|
|
864
|
+
const profileHead = state.profileHeads.find((head) => head.profileKey === profileKey);
|
|
865
|
+
if (!profileHead)
|
|
866
|
+
return unavailableMeshTrustDiagnostic(candidate.peerId, "profile_unavailable");
|
|
867
|
+
const decision = evaluateTrustEligibilityV1(state, createTrustEligibilityRequestV1({
|
|
868
|
+
schemaVersion: 1,
|
|
869
|
+
tenantId: config.scope.tenantId,
|
|
870
|
+
subject,
|
|
871
|
+
subjectDigest,
|
|
872
|
+
scope: config.scope,
|
|
873
|
+
scopeDigest,
|
|
874
|
+
policyId: config.policyId,
|
|
875
|
+
policyVersion: config.policyVersion,
|
|
876
|
+
policyDigest: config.policyDigest,
|
|
877
|
+
profileId: profileHead.profileId,
|
|
878
|
+
profileDigest: profileHead.profileDigest,
|
|
879
|
+
maximumProfileAgeMs: config.maximumProfileAgeMs,
|
|
880
|
+
requirements: config.requirements,
|
|
881
|
+
}), config.logicalTimeMs);
|
|
882
|
+
return decisionDiagnostic(candidate.peerId, decision);
|
|
883
|
+
}
|
|
884
|
+
catch {
|
|
885
|
+
return unavailableMeshTrustDiagnostic(candidate.peerId, "profile_unavailable");
|
|
886
|
+
}
|
|
887
|
+
});
|
|
888
|
+
const unavailable = diagnostics.some((diagnostic) => diagnostic.disposition === "unavailable");
|
|
889
|
+
const matches = config.mode === "observe"
|
|
890
|
+
? candidates
|
|
891
|
+
: unavailable
|
|
892
|
+
? []
|
|
893
|
+
: candidates.filter((_, index) => diagnostics[index].disposition === "eligible");
|
|
894
|
+
return Object.freeze({
|
|
895
|
+
matches: Object.freeze([...matches]),
|
|
896
|
+
diagnostics: Object.freeze(diagnostics),
|
|
897
|
+
unavailable,
|
|
898
|
+
});
|
|
899
|
+
}
|
|
900
|
+
/** Encodes only the already-redacted projection; it never exports a profile or Fusion input. */
|
|
901
|
+
export function encodeMeshTrustObservationV1(observation) {
|
|
902
|
+
const { schemaVersion: _schemaVersion, observerId: _observerId, observerKind: _observerKind, causationId: _causationId, scope, ...payload } = observation;
|
|
903
|
+
return Object.freeze({
|
|
904
|
+
type: "trust.observation",
|
|
905
|
+
...payload,
|
|
906
|
+
subject: stripMeshSubject(observation.subject),
|
|
907
|
+
scope: stripMeshScope(scope),
|
|
908
|
+
});
|
|
909
|
+
}
|
|
910
|
+
function stripMeshSubject(subject) {
|
|
911
|
+
const { schemaVersion: _schemaVersion, ...wireSubject } = subject;
|
|
912
|
+
return Object.freeze(wireSubject);
|
|
913
|
+
}
|
|
914
|
+
function stripMeshScope(scope) {
|
|
915
|
+
if (scope.kind === "mesh")
|
|
916
|
+
return Object.freeze({ kind: "mesh" });
|
|
917
|
+
if (scope.kind === "objective")
|
|
918
|
+
return Object.freeze({
|
|
919
|
+
kind: "objective",
|
|
920
|
+
objectiveRevision: scope.objectiveRevision,
|
|
921
|
+
});
|
|
922
|
+
if (scope.kind === "work")
|
|
923
|
+
return Object.freeze({
|
|
924
|
+
kind: "work",
|
|
925
|
+
objectiveRevision: scope.objectiveRevision,
|
|
926
|
+
workItemId: scope.workItemId,
|
|
927
|
+
workItemRevision: scope.workItemRevision,
|
|
928
|
+
assignmentEpoch: scope.assignmentEpoch,
|
|
929
|
+
assignmentAuthorityId: scope.assignmentAuthorityId,
|
|
930
|
+
fencingToken: scope.fencingToken,
|
|
931
|
+
});
|
|
932
|
+
throw new TypeError("Trust observation scope is not Mesh-compatible");
|
|
933
|
+
}
|
|
934
|
+
//# sourceMappingURL=trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,2BAA2B,GAI5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kCAAkC,EAClC,gCAAgC,EAChC,4BAA4B,EAC5B,iCAAiC,EACjC,+BAA+B,GAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,+BAA+B,EAC/B,UAAU,EACV,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EACjB,0BAA0B,EAC1B,0BAA0B,EAC1B,8BAA8B,EAC9B,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,GAY7B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAC5C,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAClC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,iCAAiC,GAAG,KAAK,CAAC;AAChD,sEAAsE;AACtE,MAAM,2BAA2B,GAAG,IAAI,OAAO,EAAkB,CAAC;AAClE,MAAM,4BAA4B,GAAG,IAAI,OAAO,EAAkB,CAAC;AACnE,MAAM,gCAAgC,GAAG,IAAI,OAAO,EAQjD,CAAC;AACJ,MAAM,kCAAkC,GAAG,IAAI,GAAG,EAG/C,CAAC;AAiKJ,yEAAyE;AACzE,MAAM,UAAU,gCAAgC,CAC9C,aAAqB,EACrB,2BAAmC,EACnC,aAAoE;IAKpE,IACE,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;QACvC,CAAC,kBAAkB,CAAC,IAAI,CAAC,2BAA2B,CAAC;QACrD,CAAC,aAAa;QACd,OAAO,aAAa,KAAK,QAAQ;QACjC,OAAO,aAAa,CAAC,OAAO,KAAK,UAAU,EAC3C,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,OAAO,GAGT;QACF,aAAa;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,OAAO,CAAC;gBACrB,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,kBAAkB;gBAClD,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;gBACnE,OAAO,MAAM,CAAC;YAChB,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ,EAAE,IAAa;gBACvB,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;gBACrD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;gBACjD,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC;oBAC1C,GAAG,MAAM,CAAC,4BAA4B;iBACvC,CAAC;gBACF,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;gBACnD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;aAClD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,IACE,CAAC,KAAK;gBACN,OAAO,KAAK,KAAK,QAAQ;gBACzB,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,iBAAiB,EAC7D,CAAC;gBACD,OAAO;oBACL,QAAQ,EAAE,KAAc;oBACxB,IAAI,EAAE,2BAAoC;oBAC1C,KAAK,EAAE,KAAK,EAAE,KAAK;iBACpB,CAAC;YACJ,CAAC;YACD,4BAA4B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,WAA6C,CAAC;YAClD,IAAI,CAAC;gBACH,WAAW,GAAG,wBAAwB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,QAAQ,EAAE,KAAc;oBACxB,IAAI,EAAE,2BAAoC;oBAC1C,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC;YACJ,CAAC;YACD,IACE,CAAC,MAAM,CAAC,MAAM,CACZ,KAAK,CAAC,KAAK,CAAC,YAAY,EACxB,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAC/B;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,IAAI,mBAAmB,EACnE,CAAC;gBACD,OAAO;oBACL,QAAQ,EAAE,KAAc;oBACxB,IAAI,EAAE,2BAAoC;oBAC1C,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,GAAG;gBACnB,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY;gBAC3B,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,WAAW;aAC9C,CAAC;YACF,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACpC,IACE,CAAC,MAAM,CAAC,MAAM,CACZ,KAAK,CAAC,KAAK,CAAC,kBAAkB,EAC9B,KAAK,CAAC,WAAW,CAAC,aAAa,CAChC;oBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM;wBAChD,yBAAyB,EAC3B,CAAC;oBACD,OAAO;wBACL,QAAQ,EAAE,KAAc;wBACxB,IAAI,EAAE,2BAAoC;wBAC1C,KAAK,EAAE,KAAK,CAAC,KAAK;qBACnB,CAAC;gBACJ,CAAC;gBACD,MAAM,kBAAkB,GAAG;oBACzB,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB;oBACjC,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;wBAC/C,WAAW,EAAE,KAAK,CAAC,WAAW;wBAC9B,UAAU,EAAE,KAAK,CAAC,qBAAqB,KAAK,IAAI;qBACjD,CAAC;iBACH,CAAC;gBACF,OAAO;oBACL,QAAQ,EAAE,IAAa;oBACvB,SAAS,EAAE,MAAM,CAAC,MAAM,CACtB,KAAK,CAAC,KAAK,CAAC,kBAAkB,EAC9B,KAAK,CAAC,WAAW,CAAC,aAAa,CAChC;oBACD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;wBACnB,GAAG,KAAK,CAAC,KAAK;wBACd,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,sBAAsB;wBAC5D,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;wBACzC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;qBACtD,CAAC;iBACH,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAO,CAAC;gBAC7B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC1C,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/D,MAAM,OAAO,GAAG,0BAA0B,CACxC,KAAK,CAAC,KAAK,CAAC,KAAK,EACjB;oBACE,aAAa,EAAE,CAAC;oBAChB,IAAI,EAAE,iBAAiB;oBACvB,MAAM;oBACN,MAAM,EAAE,eAAe;oBACvB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;oBAC9C,2BAA2B,EAAE,KAAK,CAAC,2BAA2B;oBAC9D,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB;oBACjD,oBAAoB,EAAE,KAAK,CAAC,WAAW,CAAC,oBAAoB;oBAC5D,aAAa,EAAE,KAAK,CAAC,UAAU;iBAChC,EACD;oBACE,qCAAqC,EAAE;wBACrC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,OAAO,KAAK,2BAA2B;4BACrC,CAAC,CAAC,IAAI;4BACN,CAAC,CAAC;gCACE,qBAAqB,EAAE,2BAA2B;gCAClD,qBAAqB,EAAE,KAAK,CAAC,mBAAmB;gCAChD,MAAM,EAAE,CAAC,SAOR,EAAE,EAAE;oCACH,MAAM,UAAU,GACd,YAAY,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;oCAC5C,MAAM,KAAK,GAAG,UAAU,EAAE,UAAU,CAAC;oCACrC,OAAO,CACL,KAAK,KAAK,SAAS;wCACnB,0BAA0B,CAAC,UAAU,CAAC;wCACtC,SAAS,CAAC,mBAAmB;4CAC3B,KAAK,CAAC,mBAAmB;wCAC3B,SAAS,CAAC,2BAA2B;4CACnC,2BAA2B;wCAC7B,SAAS,CAAC,QAAQ,KAAK,QAAQ;wCAC/B,SAAS,CAAC,YAAY,KAAK,YAAY;wCACvC,SAAS,CAAC,oBAAoB;4CAC5B,KAAK,CAAC,WAAW,CAAC,oBAAoB;wCACxC,KAAK,CAAC,kBAAkB,KAAK,QAAQ;wCACrC,KAAK,CAAC,sBAAsB,KAAK,YAAY,CAC9C,CAAC;gCACJ,CAAC;6BACF;qBACR;iBACF,CACF,CAAC;gBACF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CACpC,CAAC,MAAuC,EAAE,EAAE,CAC1C,MAAM,CAAC,UAAU,KAAK,WAAW,CACpC,CAAC;gBACF,OAAO;oBACL,QAAQ,EAAE,IAAa;oBACvB,SAAS;oBACT,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;wBACnB,GAAG,KAAK,CAAC,KAAK;wBACd,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,sBAAsB;wBAC5D,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;qBAC1C,CAAC;iBACH,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,QAAQ,EAAE,KAAc;oBACxB,IAAI,EAAE,2BAAoC;oBAC1C,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,2BAA2B,CAAC,GAAG,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAClE,OAAO,aAAa,CAAC;AACvB,CAAC;AA0CD,8EAA8E;AAC9E,MAAM,UAAU,oCAAoC,CAKlD,OAAoE;IAEpE,IACE,CAAC,OAAO;QACR,OAAO,OAAO,KAAK,QAAQ;QAC3B,CAAC,OAAO,CAAC,OAAO;QAChB,CAAC,OAAO,CAAC,QAAQ;QACjB,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,KAAK,UAAU;QAC9C,CAAC,OAAO,CAAC,YAAY;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC;QACtD,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC;QACnD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU;QAC7C,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,UAAU;QAC7C,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QACvD,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,EAC7D,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,GAAG,CACvD,OAAO,CAAC,OAAiB,CAC1B,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;KACzD,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC;YAC/B,GAAG,OAAO,CAAC,YAAY,CAAC,iBAAiB;SAC1C,CAAC;KACH,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;QAClC,QAAQ;QACR,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa;YAC5C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YACtD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;SACvD,CAAC;QACF,2BAA2B,EAAE,OAAO,CAAC,2BAA2B;QAChE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,2BAA2B,EACzB,OAAO,CAAC,2BAA2B,KAAK,SAAS;YAC/C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC7D,iBAAiB;KAClB,CAAC,CAAC;IACH,MAAM,SAAS,GAA2C;QACxD,KAAK,CAAC,OAAO,CACX,KAAgD,EAChD,OAAqC;YAErC,IACE,CAAC,KAAK;gBACN,CAAC,OAAO;gBACR,OAAO,OAAO,KAAK,QAAQ;gBAC3B,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC;gBACzC,OAAO,CAAC,UAAU,GAAG,CAAC;gBAEtB,OAAO,MAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACpE,MAAM,UAAU,GAAG,2BAA2B,CAC5C,OAAO,CAAC,QAAQ,EAChB;gBACE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;gBACjC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;gBAC7B,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;gBAC7B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,GAAG,CAAC,aAAa,CAAC,2BAA2B,KAAK,SAAS;oBACzD,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC;wBACE,2BAA2B,EACzB,aAAa,CAAC,2BAA2B;qBAC5C,CAAC;aACP,EACD,aAAa,CAAC,eAAe,CAC9B,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,EAAE;gBAChB,OAAO,MAAM,CACX,KAAK,EACL,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,kBAAkB;oBAC/C,CAAC,CAAC,mBAAmB;oBACrB,CAAC,CAAC,gBAAgB,CACrB,CAAC;YACJ,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC3C,OAAO,MAAM,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;YACnD,IAAI,YAAY,CAAC;YACjB,IAAI,CAAC;gBACH,YAAY,GAAG,MAAM,kBAAkB,CAAC;oBACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,QAAQ,EAAE,aAAa,CAAC,QAAQ;oBAChC,MAAM,EAAE,aAAa,CAAC,MAAM;oBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,aAAa,CAAC,MAAM;oBAC5B,eAAe,EAAE,aAAa,CAAC,eAAe;iBAC/C,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,QAAQ;gBAAE,OAAO,MAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACpE,MAAM,QAAQ,GACZ,YAAY,CAAC,QAAoD,CAAC;YACpE,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU;gBAAE,OAAO,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC9D,IAAI,QAAQ,CAAC;YACb,IAAI,CAAC;gBACH,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;oBACvC,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,QAAQ;oBACR,UAAU,EAAE,OAAO,CAAC,UAAU;iBAC/B,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,mBAAiC,CAAC;YACtC,IAAI,mBAAyD,CAAC;YAC9D,IAAI,CAAC;gBACH,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;oBAC3C,OAAO,MAAM,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBACnC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;oBAC3B,IACE,QAAQ,KAAK,KAAK;wBAClB,CAAC,IAAI,KAAK,wBAAwB,IAAI,IAAI,KAAK,iBAAiB,CAAC;wBAEjE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;oBACzD,OAAO,MAAM,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;gBACjD,CAAC;gBACD,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;oBAClC,QAAQ,EAAE,IAAI;oBACd,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;oBACnD,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC;wBAC1C,GAAG,QAAQ,CAAC,4BAA4B;qBACzC,CAAC;oBACF,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;oBAC7C,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;oBACrD,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;iBACpD,CAAC,CAAC;gBACH,IACE,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;oBAEtE,OAAO,MAAM,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;gBACjD,mBAAmB,GAAG,QAAQ,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,MAAiC,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,GAAG,iBAAiB,CACxB,QAAQ,EACR,YAAY,CAAC,GAAG,CAAC,KAAK,EACtB,UAAU,CAAC,MAAM,KAAK,SAAS;oBAC7B,CAAC,CAAC,UAAU,CAAC,WAAY,CAAC,aAAa;oBACvC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EACvC,mBAAmB,CACpB,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;gBACjC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,QAAQ;gBACR,aAAa,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK;gBACrC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS;oBACjC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,WAAY,EAAE;oBAC1C,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;gBAClC,GAAG,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS;oBACtC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC;wBACE,qBAAqB,EAAE,mBAAmB,CAAC,qBAAqB;qBACjE,CAAC;gBACN,MAAM;gBACN,mBAAmB,EAAE,aAAa,CAAC,OAAO,CAAC,aAAa;gBACxD,2BAA2B,EAAE,aAAa,CAAC,2BAA2B;gBACtE,WAAW,EAAE,mBAAmB;aACjC,CAAC,CAAC;YACH,IAAI,UAA4D,CAAC;YACjE,IAAI,aAAa,CAAC,iBAAiB,KAAK,SAAS;gBAC/C,4BAA4B,CAAC,GAAG,CAC9B,YAAY,EACZ,aAAa,CAAC,iBAAiB,CAChC,CAAC;YACJ,IAAI,CAAC;gBACH,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC3D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACpD,CAAC;oBAAS,CAAC;gBACT,4BAA4B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;gBAC/C,OAAO,MAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACpD,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;gBACpD,OAAO,MAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU,CAAC,QAAQ;gBACtB,OAAO,MAAM,CAAC,MAAM,CAAC;oBACnB,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,KAAK;iBACN,CAAC,CAAC;YACL,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,WAAW,EAAE,UAAU,CAAC,WAAW,KAAK,SAAS;gBACjD,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,QAAkD;IAMnE,MAAM,QAAQ,GAAG;QACf,aAAa,EAAE,CAAU;QACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;QACzC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;QACpC,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;KAC1C,CAAC;IACF,IAAI,CAAC;QACH,QAAQ,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9B,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,4BAA4B,CACzC,QAAQ,EACR,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAC/D,CAAC;gBACF,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,OAAO;oBAChD,MAAM,CAAC,eAAe,KAAK,QAAQ,CAAC,OAAO,CAAC,eAAe;oBAC3D,CAAC,CAAC,EAAE,MAAM,EAAE;oBACZ,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,MAAM,GAAG,kCAAkC,CAC/C,QAAQ,EACR,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAClD,CAAC;gBACF,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,OAAO,CAAC,aAAa;oBAC5D,CAAC,CAAC,EAAE,MAAM,EAAE;oBACZ,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;YACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;gBAC1B,MAAM,MAAM,GAAG,gCAAgC,CAC7C,QAAQ,EACR,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAU,CACzD,CAAC;gBACF,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,OAAO,CAAC,WAAW;oBACxD,CAAC,CAAC,EAAE,MAAM,EAAE;oBACZ,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,MAAM,GAAG,iCAAiC,CAC9C,QAAQ,EACR,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAU,CAC1D,CAAC;gBACF,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,OAAO,CAAC,YAAY;oBAC1D,CAAC,CAAC,EAAE,MAAM,EAAE;oBACZ,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;YACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,WAAW,GAAG,+BAA+B,CACjD,QAAQ,EACR,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,CAAU,CAC3D,CAAC;gBACF,OAAO,WAAW,CAAC,aAAa,KAAK,QAAQ,CAAC,OAAO,CAAC,aAAa;oBACjE,CAAC,CAAC,EAAE,WAAW,EAAE;oBACjB,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CACX,KAAQ,EACR,IAAuB;IAEvB,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAA6B,CAAC;IACvD,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,MAAwB,CAAC;AAClC,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAkD,EAClD,KAAa,EACb,QAAgB,EAChB,QAIC;IAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS,CAAC,EAAE;QACf,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACjE,MAAM,oBAAoB,GAAG,kBAAkB,CAC7C,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAC1C,CAAC;IACF,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG;QACjB,aAAa,EAAE,CAAU;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,oBAAoB;QACpB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;QACpC,WAAW,EAAE,KAAK;QAClB,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,4BAA4B,EAAE,MAAM,CAAC,MAAM,CACzC,CAAC,GAAG,QAAQ,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAClD;QACD,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,kBAAkB,EAAE,QAAQ;QAC5B,sBAAsB,EAAE,YAAY;KACrC,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,UAAU;QACb,iBAAiB,EAAE,iBAAiB,CAClC,cAAc,EACd,UAAgE,CACjE;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAC/B,UAAqC,EACrC,QAAkD;IAElD,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS,CAAC,EAAE;QACf,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,aAAa,EAAE,CAAU;QACzB,UAAU;QACV,uBAAuB,EAAE,SAAS,CAAC,KAAK;KACzC,CAAC,CAAC;IACH,IAAI,CAAC,wCAAwC,CAAC,KAAK,CAAC;QAClD,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,wCAAwC,CACtD,KAAc;IAEd,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,KAAK,GAAG,KAAgC,CAAC;IAC/C,IACE,KAAK,CAAC,aAAa,KAAK,CAAC;QACzB,OAAO,KAAK,CAAC,uBAAuB,KAAK,QAAQ;QACjD,CAAC,KAAK,CAAC,UAAU;QACjB,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACpC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;QAC/B,CAAC,YAAY,CAAC,KAAK,EAAE;YACnB,eAAe;YACf,YAAY;YACZ,yBAAyB;SAC1B,CAAC;QAEF,OAAO,KAAK,CAAC;IACf,MAAM,UAAU,GAAG,KAAK,CAAC,UAAqC,CAAC;IAC/D,IACE,CAAC,YAAY,CAAC,UAAU,EAAE;QACxB,eAAe;QACf,WAAW;QACX,aAAa;QACb,sBAAsB;QACtB,cAAc;QACd,aAAa;QACb,sBAAsB;QACtB,8BAA8B;QAC9B,mBAAmB;QACnB,oBAAoB;QACpB,wBAAwB;QACxB,mBAAmB;KACpB,CAAC;QACF,UAAU,CAAC,aAAa,KAAK,CAAC;QAC9B,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACjE,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACjE,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC9D,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QACnE,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC9D,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAAC;QACvD,UAAU,CAAC,4BAA4B,CAAC,MAAM,GAAG,uBAAuB;QACxE,CAAC,UAAU,CAAC,4BAA4B,CAAC,KAAK,CAC5C,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAC1E;QACD,CAAC,UAAU,CAAC,4BAA4B,CAAC,KAAK,CAC5C,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CACrE;QAED,OAAO,KAAK,CAAC;IACf,KAAK,MAAM,GAAG,IAAI;QAChB,WAAW;QACX,aAAa;QACb,cAAc;QACd,aAAa;QACb,oBAAoB;KACrB;QACC,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;YACrE,OAAO,KAAK,CAAC;IACjB,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,cAAc,EAAE,GAChE,UAAU,CAAC;IACb,IACE,iBAAiB,CACf,cAAc,EACd,cAAyD,CAC1D,KAAK,UAAU,CAAC,iBAAiB;QAElC,OAAO,KAAK,CAAC;IACf,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAiC,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,uBAAuB;QACpE,OAAO,KAAK,CAAC;IACf,MAAM,QAAQ,GAAG,MAAiC,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAA6C,CAAC;IACtE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAA4C,CAAC;IACpE,OAAO,CACL,QAAQ,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS;QAC3C,QAAQ,CAAC,WAAW,KAAK,UAAU,CAAC,WAAW;QAC/C,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC,YAAY;QAC1C,KAAK,EAAE,KAAK,KAAK,UAAU,CAAC,WAAW;QACvC,kBAAkB,CAChB,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAiC,CAAC,CAClE,KAAK,UAAU,CAAC,oBAAoB;QACrC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAC5C,IAAI,UAAU,CAAC,sBAAsB,EAAE,CACxC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAuC;IAEvC,OAAO,wCAAwC,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,YAAY,CACnB,KAA8B,EAC9B,IAAuB;IAEvB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAE2B,EAC3B,aAAgB;IAEhB,MAAM,UAAU,GAAG,KAA2C,CAAC;IAC/D,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI;QAC9B,OAAO,CACL,YAAY,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO,UAAU,CAAC,SAAS,KAAK,SAAS,CAC1C,CAAC;IACJ,OAAO,CACL,UAAU,CAAC,QAAQ,KAAK,KAAK;QAC7B,YAAY,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD;YACE,wBAAwB;YACxB,iBAAiB;YACjB,2BAA2B;SAC5B,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,UAAU,CAAC,KAAK,KAAK,aAAa,CACnC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAwB;IAChD,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM;QAC5C,OAAQ,MAAuC,CAAC,OAAO,CAAC;IAC1D,IAAI,eAAe,IAAI,MAAM;QAC3B,OAAQ,MAA6C,CAAC,aAAa,CAAC;IACtE,IAAI,aAAa,IAAI,MAAM;QACzB,OAAQ,MAA2C,CAAC,WAAW,CAAC;IAClE,OAAQ,MAA4C,CAAC,YAAY,CAAC;AACpE,CAAC;AAED,SAAS,cAAc,CACrB,OAAsC;IAEtC,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,gBAAgB;QACjC,OAAO,CAAC,IAAI,KAAK,iBAAiB;QAClC,OAAO,CAAC,IAAI,KAAK,oBAAoB;QACrC,OAAO,CAAC,IAAI,KAAK,kBAAkB;QACnC,OAAO,CAAC,IAAI,KAAK,mBAAmB,CACrC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,KAA2C,EAC3C,IAAO;IAEP,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC9C,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,MAAM,CACb,KAA2C,EAC3C,IAAwC;IAExC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,cAAc,CACrB,KAA2C;IAE3C,OAAO,CACL,KAAK,CAAC,aAAa,KAAK,CAAC;QACzB,KAAK,CAAC,QAAQ,KAAK,IAAI;QACvB,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAClC,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;QAC3C,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ;QACzC,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,WAAiD,EACjD,QAAkD,EAClD,UAAkB;IAElB,MAAM,WAAW,GAAG,WAAW,CAAC,4BAA4B,CAAC;IAC7D,OAAO,CACL,WAAW,CAAC,QAAQ,KAAK,IAAI;QAC7B,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC;QACzD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;QACtD,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1B,WAAW,CAAC,MAAM,IAAI,uBAAuB;QAC7C,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9D,WAAW,CAAC,KAAK,CACf,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CAClE;QACD,OAAO,WAAW,CAAC,qBAAqB,KAAK,SAAS;QACtD,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,oBAAoB,CAAC;QACtD,WAAW,CAAC,oBAAoB,IAAI,CAAC;QACrC,WAAW,CAAC,oBAAoB,IAAI,UAAU;QAC9C,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM;YACrC,WAAW,CAAC,oBAAoB,KAAK,UAAU,CAAC,CACnD,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,sCAAsC,CAGpD,UAAwB,EACxB,IAAgC,EAChC,QAAwC;IASxC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAChE,CAAC;IACD,IACE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QAC7D,UAAU,CAAC,MAAM,EACjB,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/C,IAAI,MAAM,GACR,aAAa,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,aAAa,CAAC;QACzB,CAAC;QACD,IACE,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC1E,CAAC;YACD,MAAM,GAAG,aAAa,CAAC;QACzB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;IAC9E,MAAM,OAAO,GACX,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,WAAW;YACX,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,UAAU,CAAC,MAAM,CACf,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAE,CAAC,MAAM,KAAK,UAAU,CACxD,CAAC;IACV,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QACpC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACvC,WAAW;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,mCAAmC,GAAG,iBAAiB,CAClE,sBAAsB,EACtB;IACE,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,QAAQ;IACxB,WAAW,EAAE,MAAM;CACpB,CACF,CAAC;AAsCF;;;;GAIG;AACH,MAAM,UAAU,yCAAyC,CACvD,OAAgE,EAChE,QAAiC,EACjC,MAAqC,EACrC,SAA2C,EAC3C,UAAyC,EAAE;IAE3C,IACE,CAAC,cAAc,CAAC,OAAO,CAAC;QACxB,CAAC,OAAO,CAAC,KAAK;QACd,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC;QACnD,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC;QAC7C,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC;QAEnD,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,8BAA8B,CAC1C,QAAQ,EACR,MAAM,EACN,SAAS,EACT,OAAO,CACR,CAAC;IACF,MAAM,KAAK,GAAG,kCAAkC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvE,IACE,CAAC,KAAK;QACN,kCAAkC,CAAC,IAAI,IAAI,iCAAiC;QAE5E,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACxE,IACE,KAAK;QACL,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;YACrC,CAAC,QAAQ,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;gBACvC,QAAQ,CAAC,cAAc,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;QAE9C,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACnE,kCAAkC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE;QACvD,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,MAAM,EAAE,QAAQ,CAAC,cAAc;KAChC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,aAAa,EAAE,CAAU;QACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAChD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;YACnB,GAAG,OAAO,CAAC,KAAK;YAChB,KAAK;SACN,CAAC;KACH,CAAC,CAAC;IACH,gCAAgC,CAAC,GAAG,CAAC,QAAQ,EAAE;QAC7C,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,MAAM,EAAE,QAAQ,CAAC,cAAc;QAC/B,aAAa,EAAE,QAAQ,CAAC,kBAAkB;KAC3C,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,0BAA0B,GAAG;IACjC,eAAe;IACf,MAAM;IACN,eAAe;IACf,OAAO;IACP,UAAU;IACV,eAAe;IACf,cAAc;IACd,qBAAqB;IACrB,cAAc;IACd,sBAAsB;IACtB,8BAA8B;IAC9B,8BAA8B;CACtB,CAAC;AAEX,MAAM,UAAU,uCAAuC,CACrD,KAAwC;IAExC,IAAI,CAAC;QACH,eAAe,CAAC,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,CAAC,CAAC;QACxE,IACE,KAAK,CAAC,aAAa,KAAK,CAAC;YACzB,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;YAEvD,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACtD,iBAAiB,CAAC,KAAK,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QACxD,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,iBAAiB,CAAC,KAAK,CAAC,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;QAC3D,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QACtD,iBAAiB,CAAC,KAAK,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;QACtE,iBAAiB,CACf,KAAK,CAAC,4BAA4B,EAClC,8BAA8B,CAC/B,CAAC;QACF,iBAAiB,CACf,KAAK,CAAC,4BAA4B,EAClC,8BAA8B,CAC/B,CAAC;QACF,IACE,KAAK,CAAC,oBAAoB,KAAK,mCAAmC;YAClE,KAAK,CAAC,4BAA4B,KAAK,KAAK,CAAC,4BAA4B;YAEzE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,IACE,KAAK,CAAC,IAAI,KAAK,MAAM;YACrB,KAAK,CAAC,IAAI,KAAK,WAAW;YAC1B,KAAK,CAAC,IAAI,KAAK,MAAM;YAErB,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACrD,MAAM,iBAAiB,GAAG;YACxB,aAAa,EAAE,CAAU;YACzB,IAAI,EAAE,MAAe;YACrB,MAAM,EAAE,yBAAyB;SAClC,CAAC;QACF,MAAM,uBAAuB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,+BAA+B,CAAC;YAC9C,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,iBAAiB;YAC1B,aAAa,EAAE,eAAe,CAAC,iBAAiB,CAAC;YACjD,KAAK;YACL,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC;YACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,SAAS,EAAE,WAAW,uBAAuB,EAAE;YAC/C,aAAa,EAAE,uBAAuB;YACtC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;YAChB,GAAG,KAAK;YACR,KAAK;YACL,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;YACtE,MAAM,KAAK,CAAC;QACd,MAAM,IAAI,SAAS,CAAC,gDAAgD,EAAE;YACpE,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,KAAwC;IAExC,MAAM,MAAM,GAAG,uCAAuC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,iBAAiB,CAAC,yBAAyB,EAAE;QAClD,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;KACI,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,2BAA2B,CAClC,KAA2B,EAC3B,MAAyC;IAEzC,MAAM,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAC5C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,KAAK,MAAM,CAAC,4BAA4B,CAC3E,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAC/C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,KAAK,MAAM,CAAC,4BAA4B,CAC3E,CAAC;IACF,MAAM,SAAS,GAAG,CAChB,OAA8D,EAC9D,EAAE,CACF,OAAO,KAAK,SAAS;QACrB,OAAO,CAAC,qBAAqB,IAAI,MAAM,CAAC,aAAa;QACrD,OAAO,CAAC,kBAAkB,IAAI,MAAM,CAAC,aAAa;QAClD,CAAC,OAAO,CAAC,mBAAmB,KAAK,IAAI;YACnC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACrD,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAC/B,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW;YACxC,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW;YACxC,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc;YAC9C,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,CAC/C,CAAC;IACJ,OAAO,CACL,SAAS,CAAC,QAAQ,CAAC;QACnB,QAAS,CAAC,WAAW,KAAK,kBAAkB;QAC5C,QAAS,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY;QAC9C,QAAS,CAAC,oBAAoB,KAAK,MAAM,CAAC,oBAAoB;QAC9D,SAAS,CAAC,WAAW,CAAC;QACtB,WAAY,CAAC,WAAW,KAAK,kBAAkB;QAC/C,WAAY,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY;QACjD,WAAY,CAAC,oBAAoB,KAAK,MAAM,CAAC,oBAAoB;QACjE,WAAY,CAAC,qBAAqB,KAAK,QAAS,CAAC,aAAa;QAC9D,WAAY,CAAC,mBAAmB;YAC9B,uCAAuC,CAAC,MAAM,CAAC,CAClD,CAAC;AACJ,CAAC;AAED,MAAM,8BAA8B,GAAG,CACrC,MAAc,EACd,UAA6B,EACU,EAAE,CACzC,UAAU,CAAC;IACT,MAAM;IACN,WAAW,EAAE,aAAsB;IACnC,qBAAqB,EAAE,IAAI;IAC3B,WAAW,EAAE,CAAC,UAAU,CAAC;CAC1B,CAAC,CAAC;AAEL,MAAM,kBAAkB,GAAG,CACzB,MAAc,EACd,QAAoC,EACG,EAAE,CACzC,UAAU,CAAC;IACT,MAAM;IACN,WAAW,EAAE,QAAQ,CAAC,WAAW;IACjC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;IACrD,WAAW,EAAE,QAAQ,CAAC,WAAW;CAClC,CAAC,CAAC;AAEL,MAAM,UAAU,2CAA2C,CAIzD,UAAwB,EACxB,OAAgE,EAChE,WAA8C;IAE9C,MAAM,MAAM,GAAG,uCAAuC,CAAC,WAAW,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAC5B,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC3D,KAAK,MAAM,SAAS,IAAI,UAAU;QAChC,IAAI,CAAC;YACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,SAAS,CAAC,mCAAmC,EAAE;gBACvD,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,IACE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QAC7D,UAAU,CAAC,MAAM;QAEjB,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAE9D,IAAI,KAAK,GAAgC,IAAI,CAAC;IAC9C,IAAI,aAAa,GAA6B,IAAI,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,WAAW,GACf,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,MAAM,eAAe,GAAG,gCAAgC,CAAC,GAAG,CAC1D,OAAiB,CAClB,CAAC;QACF,MAAM,eAAe,GAAG,eAAe;YACrC,CAAC,CAAC,kCAAkC,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;YACjE,CAAC,CAAC,IAAI,CAAC;QACT,IACE,CAAC,eAAe;YAChB,CAAC,eAAe;YAChB,eAAe,CAAC,UAAU,KAAK,eAAe,CAAC,UAAU;YACzD,eAAe,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM;YACjD,MAAM,CAAC,aAAa,KAAK,eAAe,CAAC,aAAa;YACtD,CAAC,cAAc,CAAC,OAAO,CAAC;YACxB,CAAC,OAAO,CAAC,KAAK;YACd,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;YACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ;YACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,WAAW;YAEvC,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;QACnE,KAAK,GAAG,4BAA4B,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,sBAAsB;YACrD,aAAa,GAAG,uBAAuB,CAAC;aACrC,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC;YAClD,aAAa,GAAG,4BAA4B,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,aAAa,GAAG,gBAAgB,CAAC;IACnC,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/C,IAAI,CAAC,KAAK,IAAI,aAAa;YACzB,OAAO,8BAA8B,CACnC,SAAS,CAAC,MAAM,EAChB,aAAa,IAAI,gBAAgB,CAClC,CAAC;QACJ,IAAI,CAAC;YACH,MAAM,OAAO,GAAG;gBACd,aAAa,EAAE,CAAU;gBACzB,IAAI,EAAE,MAAe;gBACrB,MAAM,EAAE,SAAS,CAAC,MAAM;aACzB,CAAC;YACF,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,uBAAuB,CAAC;gBACzC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;gBAC/B,aAAa;gBACb,WAAW;gBACX,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CACzC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,CACzC,CAAC;YACF,IAAI,CAAC,WAAW;gBACd,OAAO,8BAA8B,CACnC,SAAS,CAAC,MAAM,EAChB,qBAAqB,CACtB,CAAC;YACJ,MAAM,QAAQ,GAAG,0BAA0B,CACzC,KAAK,EACL,+BAA+B,CAAC;gBAC9B,aAAa,EAAE,CAAC;gBAChB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;gBAC/B,OAAO;gBACP,aAAa;gBACb,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW;gBACX,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,aAAa,EAAE,WAAW,CAAC,aAAa;gBACxC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;gBAC/C,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC,EACF,MAAM,CAAC,aAAa,CACrB,CAAC;YACF,OAAO,kBAAkB,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,8BAA8B,CACnC,SAAS,CAAC,MAAM,EAChB,qBAAqB,CACtB,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAClC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,KAAK,aAAa,CACzD,CAAC;IACF,MAAM,OAAO,GACX,MAAM,CAAC,IAAI,KAAK,SAAS;QACvB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,WAAW;YACX,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,UAAU,CAAC,MAAM,CACf,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAE,CAAC,WAAW,KAAK,UAAU,CAC7D,CAAC;IACV,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QACpC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACvC,WAAW;KACZ,CAAC,CAAC;AACL,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,4BAA4B,CAC1C,WAA+B;IAE/B,MAAM,EACJ,aAAa,EAAE,cAAc,EAC7B,UAAU,EAAE,WAAW,EACvB,YAAY,EAAE,aAAa,EAC3B,WAAW,EAAE,YAAY,EACzB,KAAK,EACL,GAAG,OAAO,EACX,GAAG,WAAW,CAAC;IAChB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,mBAAmB;QACzB,GAAG,OAAO;QACV,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AACD,SAAS,gBAAgB,CAAC,OAAsC;IAC9D,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IAClE,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AACD,SAAS,cAAc,CAAC,KAAkC;IACxD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAC5B,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,WAAW;YACjB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;SAC3C,CAAC,CAAC;IACL,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,MAAM;YACZ,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;YAClD,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAC;IACL,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;AACxE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentplat/mesh",
|
|
3
|
-
"version": "0.3.0-alpha.
|
|
3
|
+
"version": "0.3.0-alpha.4",
|
|
4
4
|
"description": "Provider-neutral peer state and effect contracts for AgentPlat Mesh applications.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -19,6 +19,10 @@
|
|
|
19
19
|
"./coordination": {
|
|
20
20
|
"types": "./dist/coordination.d.ts",
|
|
21
21
|
"import": "./dist/coordination.js"
|
|
22
|
+
},
|
|
23
|
+
"./trust": {
|
|
24
|
+
"types": "./dist/trust.d.ts",
|
|
25
|
+
"import": "./dist/trust.js"
|
|
22
26
|
}
|
|
23
27
|
},
|
|
24
28
|
"files": [
|
|
@@ -26,8 +30,9 @@
|
|
|
26
30
|
"README.md"
|
|
27
31
|
],
|
|
28
32
|
"dependencies": {
|
|
29
|
-
"@agentplat/mesh-
|
|
30
|
-
"@agentplat/mesh-
|
|
33
|
+
"@agentplat/mesh-crypto": "^0.3.0-alpha.4",
|
|
34
|
+
"@agentplat/mesh-protocol": "^0.3.0-alpha.4",
|
|
35
|
+
"@agentplat/trust": "^0.3.0-alpha.4"
|
|
31
36
|
},
|
|
32
37
|
"engines": {
|
|
33
38
|
"node": ">=20.19.3"
|