@vorionsys/atsf-core 0.2.2 → 0.2.3

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.
Files changed (326) hide show
  1. package/CHANGELOG.md +3 -3
  2. package/README.md +77 -11
  3. package/dist/api/index.d.ts +1 -1
  4. package/dist/api/index.js +1 -1
  5. package/dist/api/server.d.ts +5 -2
  6. package/dist/api/server.d.ts.map +1 -1
  7. package/dist/api/server.js +186 -149
  8. package/dist/api/server.js.map +1 -1
  9. package/dist/arbitration/index.d.ts +4 -4
  10. package/dist/arbitration/index.d.ts.map +1 -1
  11. package/dist/arbitration/index.js +46 -41
  12. package/dist/arbitration/index.js.map +1 -1
  13. package/dist/arbitration/types.d.ts +10 -10
  14. package/dist/arbitration/types.d.ts.map +1 -1
  15. package/dist/basis/evaluator.d.ts +1 -1
  16. package/dist/basis/evaluator.d.ts.map +1 -1
  17. package/dist/basis/evaluator.js +56 -54
  18. package/dist/basis/evaluator.js.map +1 -1
  19. package/dist/basis/index.d.ts +3 -3
  20. package/dist/basis/index.js +3 -3
  21. package/dist/basis/parser.d.ts +16 -16
  22. package/dist/basis/parser.d.ts.map +1 -1
  23. package/dist/basis/parser.js +32 -25
  24. package/dist/basis/parser.js.map +1 -1
  25. package/dist/basis/types.d.ts +2 -2
  26. package/dist/chain/index.d.ts.map +1 -1
  27. package/dist/chain/index.js +16 -16
  28. package/dist/chain/index.js.map +1 -1
  29. package/dist/cognigate/index.d.ts +1 -1
  30. package/dist/cognigate/index.d.ts.map +1 -1
  31. package/dist/cognigate/index.js +44 -33
  32. package/dist/cognigate/index.js.map +1 -1
  33. package/dist/common/adapters.d.ts +18 -11
  34. package/dist/common/adapters.d.ts.map +1 -1
  35. package/dist/common/adapters.js +100 -79
  36. package/dist/common/adapters.js.map +1 -1
  37. package/dist/common/config.d.ts +67 -67
  38. package/dist/common/config.js +49 -49
  39. package/dist/common/config.js.map +1 -1
  40. package/dist/common/index.d.ts +4 -4
  41. package/dist/common/index.js +4 -4
  42. package/dist/common/logger.d.ts +1 -1
  43. package/dist/common/logger.js +8 -8
  44. package/dist/common/types.d.ts +8 -8
  45. package/dist/common/types.js +5 -5
  46. package/dist/containment/index.d.ts +3 -3
  47. package/dist/containment/index.d.ts.map +1 -1
  48. package/dist/containment/index.js +119 -105
  49. package/dist/containment/index.js.map +1 -1
  50. package/dist/containment/types.d.ts +11 -11
  51. package/dist/containment/types.d.ts.map +1 -1
  52. package/dist/contracts/index.d.ts +9 -9
  53. package/dist/contracts/index.d.ts.map +1 -1
  54. package/dist/contracts/index.js +59 -54
  55. package/dist/contracts/index.js.map +1 -1
  56. package/dist/contracts/types.d.ts +12 -12
  57. package/dist/contracts/types.d.ts.map +1 -1
  58. package/dist/crewai/callback.d.ts +91 -0
  59. package/dist/crewai/callback.d.ts.map +1 -0
  60. package/dist/crewai/callback.js +271 -0
  61. package/dist/crewai/callback.js.map +1 -0
  62. package/dist/crewai/executor.d.ts +135 -0
  63. package/dist/crewai/executor.d.ts.map +1 -0
  64. package/dist/crewai/executor.js +381 -0
  65. package/dist/crewai/executor.js.map +1 -0
  66. package/dist/crewai/index.d.ts +12 -0
  67. package/dist/crewai/index.d.ts.map +1 -0
  68. package/dist/crewai/index.js +12 -0
  69. package/dist/crewai/index.js.map +1 -0
  70. package/dist/crewai/tools.d.ts +21 -0
  71. package/dist/crewai/tools.d.ts.map +1 -0
  72. package/dist/crewai/tools.js +164 -0
  73. package/dist/crewai/tools.js.map +1 -0
  74. package/dist/crewai/types.d.ts +139 -0
  75. package/dist/crewai/types.d.ts.map +1 -0
  76. package/dist/crewai/types.js +9 -0
  77. package/dist/crewai/types.js.map +1 -0
  78. package/dist/enforce/index.d.ts +48 -222
  79. package/dist/enforce/index.d.ts.map +1 -1
  80. package/dist/enforce/index.js +144 -47
  81. package/dist/enforce/index.js.map +1 -1
  82. package/dist/enforce/trust-aware-enforcement-service.d.ts +121 -0
  83. package/dist/enforce/trust-aware-enforcement-service.d.ts.map +1 -0
  84. package/dist/enforce/trust-aware-enforcement-service.js +601 -0
  85. package/dist/enforce/trust-aware-enforcement-service.js.map +1 -0
  86. package/dist/enforce/types.d.ts +234 -0
  87. package/dist/enforce/types.d.ts.map +1 -0
  88. package/dist/enforce/types.js +10 -0
  89. package/dist/enforce/types.js.map +1 -0
  90. package/dist/governance/fluid-workflow.d.ts +8 -8
  91. package/dist/governance/fluid-workflow.d.ts.map +1 -1
  92. package/dist/governance/fluid-workflow.js +114 -86
  93. package/dist/governance/fluid-workflow.js.map +1 -1
  94. package/dist/governance/index.d.ts +7 -7
  95. package/dist/governance/index.d.ts.map +1 -1
  96. package/dist/governance/index.js +81 -74
  97. package/dist/governance/index.js.map +1 -1
  98. package/dist/governance/proof-bridge.d.ts +6 -6
  99. package/dist/governance/proof-bridge.d.ts.map +1 -1
  100. package/dist/governance/proof-bridge.js +5 -5
  101. package/dist/governance/proof-bridge.js.map +1 -1
  102. package/dist/governance/types.d.ts +16 -9
  103. package/dist/governance/types.d.ts.map +1 -1
  104. package/dist/governance/types.js.map +1 -1
  105. package/dist/index.d.ts +29 -25
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +33 -23
  108. package/dist/index.js.map +1 -1
  109. package/dist/intent/index.d.ts +21 -56
  110. package/dist/intent/index.d.ts.map +1 -1
  111. package/dist/intent/index.js +58 -24
  112. package/dist/intent/index.js.map +1 -1
  113. package/dist/intent/persistent-intent-service.d.ts +68 -0
  114. package/dist/intent/persistent-intent-service.d.ts.map +1 -0
  115. package/dist/intent/persistent-intent-service.js +277 -0
  116. package/dist/intent/persistent-intent-service.js.map +1 -0
  117. package/dist/intent/types.d.ts +69 -0
  118. package/dist/intent/types.d.ts.map +1 -0
  119. package/dist/intent/types.js +10 -0
  120. package/dist/intent/types.js.map +1 -0
  121. package/dist/intent-gateway/index.d.ts +522 -0
  122. package/dist/intent-gateway/index.d.ts.map +1 -0
  123. package/dist/intent-gateway/index.js +1499 -0
  124. package/dist/intent-gateway/index.js.map +1 -0
  125. package/dist/langchain/callback.d.ts +2 -2
  126. package/dist/langchain/callback.d.ts.map +1 -1
  127. package/dist/langchain/callback.js +30 -30
  128. package/dist/langchain/callback.js.map +1 -1
  129. package/dist/langchain/executor.d.ts +4 -4
  130. package/dist/langchain/executor.d.ts.map +1 -1
  131. package/dist/langchain/executor.js +82 -80
  132. package/dist/langchain/executor.js.map +1 -1
  133. package/dist/langchain/index.d.ts +5 -5
  134. package/dist/langchain/index.js +5 -5
  135. package/dist/langchain/tools.d.ts +1 -1
  136. package/dist/langchain/tools.d.ts.map +1 -1
  137. package/dist/langchain/tools.js +33 -33
  138. package/dist/langchain/tools.js.map +1 -1
  139. package/dist/langchain/types.d.ts +3 -3
  140. package/dist/langchain/types.d.ts.map +1 -1
  141. package/dist/layers/implementations/L0-request-format.d.ts +37 -0
  142. package/dist/layers/implementations/L0-request-format.d.ts.map +1 -0
  143. package/dist/layers/implementations/L0-request-format.js +218 -0
  144. package/dist/layers/implementations/L0-request-format.js.map +1 -0
  145. package/dist/layers/implementations/L1-input-size.d.ts +36 -0
  146. package/dist/layers/implementations/L1-input-size.d.ts.map +1 -0
  147. package/dist/layers/implementations/L1-input-size.js +160 -0
  148. package/dist/layers/implementations/L1-input-size.js.map +1 -0
  149. package/dist/layers/implementations/L2-charset-sanitizer.d.ts +28 -0
  150. package/dist/layers/implementations/L2-charset-sanitizer.d.ts.map +1 -0
  151. package/dist/layers/implementations/L2-charset-sanitizer.js +230 -0
  152. package/dist/layers/implementations/L2-charset-sanitizer.js.map +1 -0
  153. package/dist/layers/implementations/L3-schema-conformance.d.ts +47 -0
  154. package/dist/layers/implementations/L3-schema-conformance.d.ts.map +1 -0
  155. package/dist/layers/implementations/L3-schema-conformance.js +267 -0
  156. package/dist/layers/implementations/L3-schema-conformance.js.map +1 -0
  157. package/dist/layers/implementations/L4-injection-detector.d.ts +47 -0
  158. package/dist/layers/implementations/L4-injection-detector.d.ts.map +1 -0
  159. package/dist/layers/implementations/L4-injection-detector.js +260 -0
  160. package/dist/layers/implementations/L4-injection-detector.js.map +1 -0
  161. package/dist/layers/implementations/L5-rate-limiter.d.ts +51 -0
  162. package/dist/layers/implementations/L5-rate-limiter.d.ts.map +1 -0
  163. package/dist/layers/implementations/L5-rate-limiter.js +183 -0
  164. package/dist/layers/implementations/L5-rate-limiter.js.map +1 -0
  165. package/dist/layers/implementations/index.d.ts +16 -0
  166. package/dist/layers/implementations/index.d.ts.map +1 -0
  167. package/dist/layers/implementations/index.js +16 -0
  168. package/dist/layers/implementations/index.js.map +1 -0
  169. package/dist/layers/index.d.ts +3 -3
  170. package/dist/layers/index.d.ts.map +1 -1
  171. package/dist/layers/index.js +99 -71
  172. package/dist/layers/index.js.map +1 -1
  173. package/dist/layers/types.d.ts +16 -16
  174. package/dist/layers/types.d.ts.map +1 -1
  175. package/dist/persistence/file.d.ts +3 -3
  176. package/dist/persistence/file.d.ts.map +1 -1
  177. package/dist/persistence/file.js +32 -28
  178. package/dist/persistence/file.js.map +1 -1
  179. package/dist/persistence/index.d.ts +7 -7
  180. package/dist/persistence/index.d.ts.map +1 -1
  181. package/dist/persistence/index.js +18 -18
  182. package/dist/persistence/index.js.map +1 -1
  183. package/dist/persistence/memory.d.ts +3 -3
  184. package/dist/persistence/memory.d.ts.map +1 -1
  185. package/dist/persistence/memory.js +10 -8
  186. package/dist/persistence/memory.js.map +1 -1
  187. package/dist/persistence/sqlite.d.ts +3 -3
  188. package/dist/persistence/sqlite.d.ts.map +1 -1
  189. package/dist/persistence/sqlite.js +36 -36
  190. package/dist/persistence/sqlite.js.map +1 -1
  191. package/dist/persistence/supabase.d.ts +3 -3
  192. package/dist/persistence/supabase.d.ts.map +1 -1
  193. package/dist/persistence/supabase.js +41 -43
  194. package/dist/persistence/supabase.js.map +1 -1
  195. package/dist/persistence/types.d.ts +5 -5
  196. package/dist/phase6/ceiling.d.ts +5 -5
  197. package/dist/phase6/ceiling.d.ts.map +1 -1
  198. package/dist/phase6/ceiling.js +67 -34
  199. package/dist/phase6/ceiling.js.map +1 -1
  200. package/dist/phase6/context.d.ts +3 -3
  201. package/dist/phase6/context.d.ts.map +1 -1
  202. package/dist/phase6/context.js +91 -45
  203. package/dist/phase6/context.js.map +1 -1
  204. package/dist/phase6/index.d.ts +13 -13
  205. package/dist/phase6/index.d.ts.map +1 -1
  206. package/dist/phase6/index.js +16 -16
  207. package/dist/phase6/index.js.map +1 -1
  208. package/dist/phase6/presets.d.ts +2 -2
  209. package/dist/phase6/presets.d.ts.map +1 -1
  210. package/dist/phase6/presets.js +39 -33
  211. package/dist/phase6/presets.js.map +1 -1
  212. package/dist/phase6/provenance.d.ts +4 -4
  213. package/dist/phase6/provenance.d.ts.map +1 -1
  214. package/dist/phase6/provenance.js +42 -35
  215. package/dist/phase6/provenance.js.map +1 -1
  216. package/dist/phase6/role-gates/index.d.ts +2 -2
  217. package/dist/phase6/role-gates/index.js +2 -2
  218. package/dist/phase6/role-gates/kernel.d.ts.map +1 -1
  219. package/dist/phase6/role-gates/kernel.js +16 -16
  220. package/dist/phase6/role-gates/kernel.js.map +1 -1
  221. package/dist/phase6/role-gates/policy.d.ts +2 -2
  222. package/dist/phase6/role-gates/policy.js +6 -6
  223. package/dist/phase6/role-gates.d.ts +4 -4
  224. package/dist/phase6/role-gates.d.ts.map +1 -1
  225. package/dist/phase6/role-gates.js +80 -58
  226. package/dist/phase6/role-gates.js.map +1 -1
  227. package/dist/phase6/types.d.ts +35 -35
  228. package/dist/phase6/types.d.ts.map +1 -1
  229. package/dist/phase6/types.js +166 -66
  230. package/dist/phase6/types.js.map +1 -1
  231. package/dist/phase6/weight-presets/canonical.d.ts +2 -2
  232. package/dist/phase6/weight-presets/canonical.d.ts.map +1 -1
  233. package/dist/phase6/weight-presets/canonical.js +12 -12
  234. package/dist/phase6/weight-presets/canonical.js.map +1 -1
  235. package/dist/phase6/weight-presets/deltas.d.ts +2 -2
  236. package/dist/phase6/weight-presets/deltas.d.ts.map +1 -1
  237. package/dist/phase6/weight-presets/deltas.js +27 -27
  238. package/dist/phase6/weight-presets/deltas.js.map +1 -1
  239. package/dist/phase6/weight-presets/index.d.ts +4 -4
  240. package/dist/phase6/weight-presets/index.js +4 -4
  241. package/dist/phase6/weight-presets/merger.d.ts +3 -3
  242. package/dist/phase6/weight-presets/merger.d.ts.map +1 -1
  243. package/dist/phase6/weight-presets/merger.js +40 -44
  244. package/dist/phase6/weight-presets/merger.js.map +1 -1
  245. package/dist/proof/index.d.ts +3 -3
  246. package/dist/proof/index.d.ts.map +1 -1
  247. package/dist/proof/index.js +44 -38
  248. package/dist/proof/index.js.map +1 -1
  249. package/dist/proof/merkle.d.ts +3 -3
  250. package/dist/proof/merkle.d.ts.map +1 -1
  251. package/dist/proof/merkle.js +26 -25
  252. package/dist/proof/merkle.js.map +1 -1
  253. package/dist/proof/zk-proofs.d.ts +6 -6
  254. package/dist/proof/zk-proofs.d.ts.map +1 -1
  255. package/dist/proof/zk-proofs.js +42 -43
  256. package/dist/proof/zk-proofs.js.map +1 -1
  257. package/dist/provenance/index.d.ts +3 -3
  258. package/dist/provenance/index.d.ts.map +1 -1
  259. package/dist/provenance/index.js +19 -17
  260. package/dist/provenance/index.js.map +1 -1
  261. package/dist/provenance/types.d.ts +4 -4
  262. package/dist/provenance/types.d.ts.map +1 -1
  263. package/dist/sandbox-training/challenges.d.ts +1 -1
  264. package/dist/sandbox-training/challenges.d.ts.map +1 -1
  265. package/dist/sandbox-training/challenges.js +228 -228
  266. package/dist/sandbox-training/challenges.js.map +1 -1
  267. package/dist/sandbox-training/graduation.d.ts +1 -1
  268. package/dist/sandbox-training/graduation.d.ts.map +1 -1
  269. package/dist/sandbox-training/graduation.js +14 -15
  270. package/dist/sandbox-training/graduation.js.map +1 -1
  271. package/dist/sandbox-training/index.d.ts +9 -9
  272. package/dist/sandbox-training/index.d.ts.map +1 -1
  273. package/dist/sandbox-training/index.js +6 -6
  274. package/dist/sandbox-training/index.js.map +1 -1
  275. package/dist/sandbox-training/promotion-service.d.ts +4 -4
  276. package/dist/sandbox-training/promotion-service.d.ts.map +1 -1
  277. package/dist/sandbox-training/promotion-service.js +5 -5
  278. package/dist/sandbox-training/promotion-service.js.map +1 -1
  279. package/dist/sandbox-training/runner.d.ts +1 -1
  280. package/dist/sandbox-training/runner.d.ts.map +1 -1
  281. package/dist/sandbox-training/runner.js +74 -73
  282. package/dist/sandbox-training/runner.js.map +1 -1
  283. package/dist/sandbox-training/scorer.d.ts +4 -4
  284. package/dist/sandbox-training/scorer.js +5 -5
  285. package/dist/sandbox-training/types.d.ts +4 -4
  286. package/dist/sandbox-training/types.d.ts.map +1 -1
  287. package/dist/sandbox-training/types.js +11 -7
  288. package/dist/sandbox-training/types.js.map +1 -1
  289. package/dist/trust-engine/ceiling-enforcement/audit.d.ts +1 -1
  290. package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -1
  291. package/dist/trust-engine/ceiling-enforcement/audit.js +3 -4
  292. package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -1
  293. package/dist/trust-engine/ceiling-enforcement/index.d.ts +2 -2
  294. package/dist/trust-engine/ceiling-enforcement/index.js +2 -2
  295. package/dist/trust-engine/ceiling-enforcement/kernel.d.ts +1 -1
  296. package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -1
  297. package/dist/trust-engine/ceiling-enforcement/kernel.js +1 -1
  298. package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -1
  299. package/dist/trust-engine/context-policy/factory.d.ts +1 -1
  300. package/dist/trust-engine/context-policy/factory.d.ts.map +1 -1
  301. package/dist/trust-engine/context-policy/factory.js +1 -1
  302. package/dist/trust-engine/context-policy/factory.js.map +1 -1
  303. package/dist/trust-engine/context-policy/index.d.ts +2 -2
  304. package/dist/trust-engine/context-policy/index.js +2 -2
  305. package/dist/trust-engine/creation-modifiers/index.d.ts +1 -1
  306. package/dist/trust-engine/creation-modifiers/index.js +1 -1
  307. package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -1
  308. package/dist/trust-engine/creation-modifiers/types.js +2 -3
  309. package/dist/trust-engine/creation-modifiers/types.js.map +1 -1
  310. package/dist/trust-engine/decay-profiles.d.ts +1 -1
  311. package/dist/trust-engine/decay-profiles.d.ts.map +1 -1
  312. package/dist/trust-engine/decay-profiles.js +4 -4
  313. package/dist/trust-engine/decay-profiles.js.map +1 -1
  314. package/dist/trust-engine/index.d.ts +111 -45
  315. package/dist/trust-engine/index.d.ts.map +1 -1
  316. package/dist/trust-engine/index.js +418 -61
  317. package/dist/trust-engine/index.js.map +1 -1
  318. package/dist/trust-engine/phase6-types.d.ts +10 -10
  319. package/dist/trust-engine/phase6-types.d.ts.map +1 -1
  320. package/dist/trust-engine/phase6-types.js +25 -23
  321. package/dist/trust-engine/phase6-types.js.map +1 -1
  322. package/dist/trust-engine/types.d.ts +77 -0
  323. package/dist/trust-engine/types.d.ts.map +1 -0
  324. package/dist/trust-engine/types.js +20 -0
  325. package/dist/trust-engine/types.js.map +1 -0
  326. package/package.json +5 -4
@@ -0,0 +1,601 @@
1
+ /**
2
+ * Trust-Aware Enforcement Service
3
+ *
4
+ * Production-quality enforcement service that provides:
5
+ * - Real-time trust score lookups via TrustEngine
6
+ * - Three-tier fluid governance (GREEN/YELLOW/RED)
7
+ * - Configurable trust thresholds for automatic decisions
8
+ * - Risk-based constraint computation from intent metadata
9
+ * - Refinement workflow with attempt tracking
10
+ * - Tenant isolation and decision expiration
11
+ *
12
+ * Replaces MockEnforcementService for production use.
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ import { createLogger } from "../common/logger.js";
17
+ import { TRUST_LEVEL_NAMES } from "../trust-engine/index.js";
18
+ const logger = createLogger({ component: "trust-aware-enforcement" });
19
+ /**
20
+ * Compute risk level from intent metadata fields.
21
+ */
22
+ function computeRiskLevel(context) {
23
+ const intent = context.intent;
24
+ // Irreversible + high sensitivity = critical
25
+ if (intent.reversibility === "IRREVERSIBLE" &&
26
+ intent.dataSensitivity === "RESTRICTED") {
27
+ return "critical";
28
+ }
29
+ // Delete/execute with restricted data = high
30
+ if ((intent.actionType === "delete" || intent.actionType === "execute") &&
31
+ (intent.dataSensitivity === "RESTRICTED" ||
32
+ intent.dataSensitivity === "CONFIDENTIAL")) {
33
+ return "high";
34
+ }
35
+ // Irreversible actions = high
36
+ if (intent.reversibility === "IRREVERSIBLE") {
37
+ return "high";
38
+ }
39
+ // Write/transfer with confidential data = medium
40
+ if ((intent.actionType === "write" || intent.actionType === "transfer") &&
41
+ intent.dataSensitivity === "CONFIDENTIAL") {
42
+ return "medium";
43
+ }
44
+ // Read-only or public data = low
45
+ if (intent.actionType === "read" || intent.dataSensitivity === "PUBLIC") {
46
+ return "low";
47
+ }
48
+ return "medium";
49
+ }
50
+ // =============================================================================
51
+ // CONSTRAINT COMPUTATION
52
+ // =============================================================================
53
+ /**
54
+ * Build constraints based on risk level and trust.
55
+ */
56
+ function buildConstraints(riskLevel, trustLevel, policy, defaultConstraints) {
57
+ const base = {
58
+ allowedTools: defaultConstraints?.allowedTools ?? ["*"],
59
+ dataScopes: defaultConstraints?.dataScopes ?? ["*"],
60
+ rateLimits: defaultConstraints?.rateLimits ?? [],
61
+ requiredApprovals: defaultConstraints?.requiredApprovals ?? [],
62
+ reversibilityRequired: false,
63
+ maxRetries: 3,
64
+ };
65
+ // Tighten constraints based on risk
66
+ if (riskLevel === "critical" || riskLevel === "high") {
67
+ base.reversibilityRequired = true;
68
+ base.maxExecutionTimeMs = 300_000; // 5 minutes
69
+ base.maxRetries = 1;
70
+ }
71
+ if (riskLevel === "critical") {
72
+ base.requiredApprovals = [
73
+ {
74
+ type: "human_review",
75
+ approver: "admin",
76
+ timeoutMs: policy.refinementDeadlineMs,
77
+ reason: "Critical risk action requires human approval",
78
+ },
79
+ ];
80
+ }
81
+ // Lower trust = tighter constraints
82
+ if (trustLevel <= 2) {
83
+ base.maxExecutionTimeMs = Math.min(base.maxExecutionTimeMs ?? 600_000, 60_000);
84
+ base.maxRetries = 1;
85
+ }
86
+ return base;
87
+ }
88
+ // =============================================================================
89
+ // REFINEMENT OPTIONS
90
+ // =============================================================================
91
+ /**
92
+ * Generate refinement options for YELLOW decisions.
93
+ */
94
+ function buildRefinementOptions(riskLevel, trustLevel) {
95
+ const options = [];
96
+ // Always offer "add constraints"
97
+ options.push({
98
+ id: crypto.randomUUID(),
99
+ action: "ADD_CONSTRAINTS",
100
+ description: "Accept additional operational constraints to proceed",
101
+ successProbability: riskLevel === "high" ? 0.6 : 0.9,
102
+ effort: "low",
103
+ });
104
+ // Offer scope reduction for high-risk
105
+ if (riskLevel === "high" || riskLevel === "critical") {
106
+ options.push({
107
+ id: crypto.randomUUID(),
108
+ action: "REDUCE_SCOPE",
109
+ description: "Reduce the scope of the action (e.g., fewer resources, read-only)",
110
+ successProbability: 0.8,
111
+ effort: "medium",
112
+ });
113
+ }
114
+ // Offer human approval
115
+ options.push({
116
+ id: crypto.randomUUID(),
117
+ action: "REQUEST_APPROVAL",
118
+ description: "Request explicit human approval for this action",
119
+ successProbability: 0.7,
120
+ effort: "medium",
121
+ });
122
+ // Offer decomposition for complex actions
123
+ if (riskLevel !== "low") {
124
+ options.push({
125
+ id: crypto.randomUUID(),
126
+ action: "DECOMPOSE",
127
+ description: "Break this action into smaller, individually-approvable steps",
128
+ successProbability: 0.85,
129
+ effort: "high",
130
+ });
131
+ }
132
+ // Offer "wait for trust" if trust is close to threshold
133
+ if (trustLevel >= 2 && trustLevel <= 4) {
134
+ options.push({
135
+ id: crypto.randomUUID(),
136
+ action: "WAIT_FOR_TRUST",
137
+ description: "Continue building trust through lower-risk actions first",
138
+ successProbability: 0.5,
139
+ effort: "high",
140
+ });
141
+ }
142
+ return options;
143
+ }
144
+ const DEFAULT_CONFIG = {
145
+ autoApproveLevel: 4,
146
+ requireRefinementLevel: 2,
147
+ autoDenyLevel: 0,
148
+ decisionExpirationMs: 3_600_000,
149
+ refinementDeadlineMs: 900_000,
150
+ maxRefinementAttempts: 3,
151
+ defaultConstraints: {},
152
+ };
153
+ // =============================================================================
154
+ // TRUST-AWARE ENFORCEMENT SERVICE
155
+ // =============================================================================
156
+ /**
157
+ * Production enforcement service wired to the Trust Engine.
158
+ *
159
+ * Provides real three-tier fluid governance with:
160
+ * - Trust-based tier determination using live TrustEngine scores
161
+ * - Risk-aware constraint computation from intent metadata
162
+ * - Refinement workflow with configurable attempt limits
163
+ * - Full audit trail via decision/workflow records
164
+ */
165
+ export class TrustAwareEnforcementService {
166
+ config;
167
+ policy;
168
+ decisions = new Map();
169
+ workflows = new Map(); // keyed by intentId
170
+ trustEngine;
171
+ policyEngine;
172
+ constructor(trustEngine, config, policy) {
173
+ this.trustEngine = trustEngine;
174
+ this.policyEngine = config?.policyEngine ?? null;
175
+ this.config = {
176
+ ...DEFAULT_CONFIG,
177
+ ...(config ? { ...config, policyEngine: undefined } : {}),
178
+ };
179
+ this.policy = policy ?? {
180
+ defaultAction: "deny",
181
+ trustThresholds: {
182
+ autoApproveLevel: this.config.autoApproveLevel,
183
+ requireRefinementLevel: this.config.requireRefinementLevel,
184
+ autoDenyLevel: this.config.autoDenyLevel,
185
+ },
186
+ decisionExpirationMs: this.config.decisionExpirationMs,
187
+ refinementDeadlineMs: this.config.refinementDeadlineMs,
188
+ maxRefinementAttempts: this.config.maxRefinementAttempts,
189
+ };
190
+ }
191
+ // ===========================================================================
192
+ // IEnforcementService implementation
193
+ // ===========================================================================
194
+ async decide(context) {
195
+ const t0 = performance.now();
196
+ const { intent, evaluation, tenantId } = context;
197
+ const correlationId = context.correlationId ?? crypto.randomUUID();
198
+ const now = new Date().toISOString();
199
+ // Resolve trust: prefer live engine, fall back to context values
200
+ let trustScore = context.trustScore;
201
+ let trustLevel = context.trustLevel;
202
+ if (this.trustEngine) {
203
+ const record = await this.trustEngine.getScore(intent.entityId);
204
+ if (record) {
205
+ trustScore = record.score;
206
+ trustLevel = record.level;
207
+ }
208
+ }
209
+ // Determine risk level from intent metadata
210
+ const riskLevel = computeRiskLevel(context);
211
+ // Evaluate security policies if engine is available
212
+ if (this.policyEngine) {
213
+ const policyInput = {
214
+ intent,
215
+ trustScore: trustScore ?? 0,
216
+ trustLevel: trustLevel ?? 0,
217
+ context: { riskLevel, tenantId, correlationId },
218
+ };
219
+ const violations = this.policyEngine.evaluate(policyInput);
220
+ if (violations.length > 0) {
221
+ logger.info({ intentId: intent.id, violationCount: violations.length }, "Security policy violations detected");
222
+ // Convert violations to RuleResult entries for tier determination
223
+ for (const violation of violations) {
224
+ if (violation.action === "deny") {
225
+ evaluation.violatedRules.push({
226
+ ruleId: violation.policyId,
227
+ ruleName: violation.policyName,
228
+ matched: true,
229
+ action: "deny",
230
+ reason: violation.reason,
231
+ details: { source: "security-policy-engine" },
232
+ durationMs: 0,
233
+ });
234
+ }
235
+ else if (violation.action === "escalate") {
236
+ evaluation.violatedRules.push({
237
+ ruleId: violation.policyId,
238
+ ruleName: violation.policyName,
239
+ matched: true,
240
+ action: "escalate",
241
+ reason: violation.reason,
242
+ details: { source: "security-policy-engine" },
243
+ durationMs: 0,
244
+ });
245
+ }
246
+ }
247
+ // If any deny violations, mark evaluation as failed
248
+ if (violations.some((v) => v.action === "deny")) {
249
+ evaluation.passed = false;
250
+ }
251
+ }
252
+ }
253
+ // Determine decision tier
254
+ const tier = this.determineTier(evaluation, trustLevel, riskLevel);
255
+ const latencyMs = Math.round(performance.now() - t0);
256
+ // Build the decision
257
+ const decision = {
258
+ id: crypto.randomUUID(),
259
+ tenantId,
260
+ intentId: intent.id,
261
+ agentId: intent.entityId,
262
+ correlationId,
263
+ tier,
264
+ permitted: tier === "GREEN",
265
+ trustBand: `T${trustLevel}_${this.getTrustBandName(trustLevel)}`,
266
+ trustScore,
267
+ reasoning: this.buildReasoning(tier, evaluation, trustLevel, riskLevel),
268
+ refinementAttempt: 0,
269
+ decidedAt: now,
270
+ expiresAt: new Date(Date.now() + this.config.decisionExpirationMs).toISOString(),
271
+ latencyMs,
272
+ };
273
+ // Tier-specific enrichment
274
+ if (tier === "GREEN") {
275
+ decision.constraints = buildConstraints(riskLevel, trustLevel, this.config, this.config.defaultConstraints);
276
+ }
277
+ if (tier === "YELLOW") {
278
+ decision.refinementDeadline = new Date(Date.now() + this.config.refinementDeadlineMs).toISOString();
279
+ decision.maxRefinementAttempts = this.config.maxRefinementAttempts;
280
+ decision.refinementOptions = buildRefinementOptions(riskLevel, trustLevel);
281
+ }
282
+ if (tier === "RED") {
283
+ const violatedPolicies = evaluation.violatedRules
284
+ .filter((r) => r.action === "deny" || r.action === "terminate")
285
+ .map((r) => ({
286
+ policyId: r.ruleId,
287
+ policyName: r.ruleName,
288
+ severity: r.action === "terminate"
289
+ ? "critical"
290
+ : "error",
291
+ }));
292
+ decision.denialReason =
293
+ violatedPolicies.length > 0
294
+ ? `Policy violations: ${violatedPolicies.map((p) => p.policyName).join(", ")}`
295
+ : `Trust level T${trustLevel} below minimum threshold`;
296
+ decision.hardDenial = evaluation.violatedRules.some((r) => r.action === "terminate");
297
+ decision.violatedPolicies =
298
+ violatedPolicies.length > 0 ? violatedPolicies : undefined;
299
+ }
300
+ // Store
301
+ this.decisions.set(decision.id, decision);
302
+ // Create workflow
303
+ const workflow = {
304
+ id: crypto.randomUUID(),
305
+ tenantId,
306
+ intentId: intent.id,
307
+ agentId: intent.entityId,
308
+ correlationId,
309
+ state: this.tierToState(tier),
310
+ currentDecisionId: decision.id,
311
+ stateHistory: [
312
+ {
313
+ from: "SUBMITTED",
314
+ to: this.tierToState(tier),
315
+ reason: `Decision: ${tier} (trust=T${trustLevel}, risk=${riskLevel})`,
316
+ timestamp: now,
317
+ },
318
+ ],
319
+ createdAt: now,
320
+ updatedAt: now,
321
+ expiresAt: decision.expiresAt,
322
+ };
323
+ this.workflows.set(intent.id, workflow);
324
+ logger.info({
325
+ decisionId: decision.id,
326
+ intentId: intent.id,
327
+ tier,
328
+ trustLevel,
329
+ trustScore,
330
+ riskLevel,
331
+ latencyMs,
332
+ }, "Enforcement decision made");
333
+ return {
334
+ decision,
335
+ workflow,
336
+ tier,
337
+ refinementOptions: decision.refinementOptions,
338
+ };
339
+ }
340
+ async refine(request, tenantId) {
341
+ const original = this.decisions.get(request.decisionId);
342
+ if (!original || original.tenantId !== tenantId)
343
+ return null;
344
+ if (original.tier !== "YELLOW")
345
+ return null;
346
+ // Check refinement deadline
347
+ if (original.refinementDeadline) {
348
+ const deadline = new Date(original.refinementDeadline).getTime();
349
+ if (Date.now() > deadline) {
350
+ logger.warn({ decisionId: request.decisionId }, "Refinement deadline exceeded");
351
+ return null;
352
+ }
353
+ }
354
+ // Check attempt limit
355
+ const maxAttempts = original.maxRefinementAttempts ?? this.config.maxRefinementAttempts;
356
+ if (original.refinementAttempt >= maxAttempts) {
357
+ logger.warn({
358
+ decisionId: request.decisionId,
359
+ attempts: original.refinementAttempt,
360
+ }, "Max refinement attempts reached");
361
+ return null;
362
+ }
363
+ // Validate selected refinements exist
364
+ const validRefinements = original.refinementOptions ?? [];
365
+ const selectedOptions = request.selectedRefinements
366
+ .map((id) => validRefinements.find((opt) => opt.id === id))
367
+ .filter((opt) => opt !== undefined);
368
+ if (selectedOptions.length === 0) {
369
+ logger.warn({ decisionId: request.decisionId }, "No valid refinement options selected");
370
+ return null;
371
+ }
372
+ const now = new Date().toISOString();
373
+ // Compute resulting constraints from refinements
374
+ const mergedConstraints = {
375
+ allowedTools: ["*"],
376
+ dataScopes: ["*"],
377
+ rateLimits: [],
378
+ requiredApprovals: [],
379
+ reversibilityRequired: true, // Refinement always requires reversibility
380
+ maxRetries: 1,
381
+ maxExecutionTimeMs: 300_000,
382
+ };
383
+ // Apply constraint overrides from selected options
384
+ for (const opt of selectedOptions) {
385
+ if (opt.resultingConstraints) {
386
+ Object.assign(mergedConstraints, opt.resultingConstraints);
387
+ }
388
+ if (opt.action === "REQUEST_APPROVAL") {
389
+ mergedConstraints.requiredApprovals.push({
390
+ type: "human_review",
391
+ approver: "admin",
392
+ timeoutMs: this.config.refinementDeadlineMs,
393
+ reason: "Refinement requested human approval",
394
+ });
395
+ }
396
+ }
397
+ // Create refined decision
398
+ const refined = {
399
+ ...original,
400
+ id: crypto.randomUUID(),
401
+ tier: "GREEN",
402
+ permitted: true,
403
+ refinementAttempt: original.refinementAttempt + 1,
404
+ reasoning: [
405
+ `Refined from YELLOW to GREEN via: ${selectedOptions.map((o) => o.action).join(", ")}`,
406
+ "Additional constraints applied",
407
+ ],
408
+ constraints: mergedConstraints,
409
+ decidedAt: now,
410
+ expiresAt: new Date(Date.now() + this.config.decisionExpirationMs).toISOString(),
411
+ latencyMs: 0,
412
+ };
413
+ this.decisions.set(refined.id, refined);
414
+ // Update workflow
415
+ const workflow = this.workflows.get(original.intentId);
416
+ if (workflow) {
417
+ const previousState = workflow.state;
418
+ workflow.state = "APPROVED";
419
+ workflow.currentDecisionId = refined.id;
420
+ workflow.updatedAt = now;
421
+ workflow.stateHistory.push({
422
+ from: previousState,
423
+ to: "APPROVED",
424
+ reason: `Refined via: ${selectedOptions.map((o) => o.action).join(", ")}`,
425
+ timestamp: now,
426
+ });
427
+ }
428
+ logger.info({
429
+ originalDecisionId: request.decisionId,
430
+ refinedDecisionId: refined.id,
431
+ attempt: refined.refinementAttempt,
432
+ actions: selectedOptions.map((o) => o.action),
433
+ }, "Decision refined to GREEN");
434
+ return {
435
+ decision: refined,
436
+ workflow: workflow,
437
+ tier: "GREEN",
438
+ };
439
+ }
440
+ async getDecision(id, tenantId) {
441
+ const decision = this.decisions.get(id);
442
+ if (!decision || decision.tenantId !== tenantId)
443
+ return null;
444
+ // Check expiration
445
+ if (new Date(decision.expiresAt).getTime() < Date.now()) {
446
+ return null;
447
+ }
448
+ return decision;
449
+ }
450
+ async getWorkflow(intentId, tenantId) {
451
+ const workflow = this.workflows.get(intentId);
452
+ if (!workflow || workflow.tenantId !== tenantId)
453
+ return null;
454
+ return workflow;
455
+ }
456
+ setPolicy(policy) {
457
+ this.policy = { ...this.policy, ...policy };
458
+ // Sync threshold config from policy
459
+ if (policy.trustThresholds) {
460
+ this.config.autoApproveLevel = policy.trustThresholds.autoApproveLevel;
461
+ this.config.requireRefinementLevel =
462
+ policy.trustThresholds.requireRefinementLevel;
463
+ this.config.autoDenyLevel = policy.trustThresholds.autoDenyLevel;
464
+ }
465
+ }
466
+ /**
467
+ * Refresh policy configuration at runtime (hot-reload).
468
+ * Accepts partial updates — only specified fields are changed.
469
+ * Existing in-flight decisions are not affected.
470
+ */
471
+ refreshPolicy(updates) {
472
+ const previousConfig = { ...this.config };
473
+ // Extract policyEngine separately — it is not part of the config object
474
+ if (updates.policyEngine !== undefined) {
475
+ this.setPolicyEngine(updates.policyEngine ?? null);
476
+ }
477
+ const { policyEngine: _pe, ...restUpdates } = updates;
478
+ this.config = { ...this.config, ...restUpdates };
479
+ // Sync policy thresholds if updated
480
+ if (updates.autoApproveLevel !== undefined ||
481
+ updates.requireRefinementLevel !== undefined ||
482
+ updates.autoDenyLevel !== undefined) {
483
+ this.policy.trustThresholds = {
484
+ autoApproveLevel: this.config.autoApproveLevel,
485
+ requireRefinementLevel: this.config.requireRefinementLevel,
486
+ autoDenyLevel: this.config.autoDenyLevel,
487
+ };
488
+ }
489
+ logger.info({ previous: previousConfig, updated: this.config }, "Enforcement policy refreshed at runtime");
490
+ }
491
+ /**
492
+ * Get current policy configuration (for inspection/debugging).
493
+ */
494
+ getPolicy() {
495
+ return { config: { ...this.config }, policy: { ...this.policy } };
496
+ }
497
+ // ===========================================================================
498
+ // Public helpers
499
+ // ===========================================================================
500
+ /**
501
+ * Set or replace the security policy engine.
502
+ * Can be called at runtime to add/swap policy evaluation.
503
+ */
504
+ setPolicyEngine(engine) {
505
+ this.policyEngine = engine;
506
+ logger.info({ hasEngine: engine !== null }, "Security policy engine updated");
507
+ }
508
+ /**
509
+ * Get count of active decisions.
510
+ */
511
+ decisionCount() {
512
+ return this.decisions.size;
513
+ }
514
+ /**
515
+ * Get count of active workflows.
516
+ */
517
+ workflowCount() {
518
+ return this.workflows.size;
519
+ }
520
+ /**
521
+ * Clear all state (for testing).
522
+ */
523
+ clear() {
524
+ this.decisions.clear();
525
+ this.workflows.clear();
526
+ }
527
+ // ===========================================================================
528
+ // Private helpers
529
+ // ===========================================================================
530
+ determineTier(evaluation, trustLevel, riskLevel) {
531
+ // Hard denials from rule violations
532
+ if (evaluation.violatedRules.some((r) => r.action === "deny" || r.action === "terminate")) {
533
+ return "RED";
534
+ }
535
+ // Trust below auto-deny threshold
536
+ if (trustLevel < this.config.autoDenyLevel) {
537
+ return "RED";
538
+ }
539
+ // Critical risk always requires at least YELLOW unless T6+
540
+ if (riskLevel === "critical" && trustLevel < 6) {
541
+ return trustLevel < this.config.requireRefinementLevel ? "RED" : "YELLOW";
542
+ }
543
+ // High risk requires higher trust for auto-approve
544
+ if (riskLevel === "high") {
545
+ const elevatedApproveLevel = Math.min(7, this.config.autoApproveLevel + 1);
546
+ if (trustLevel >= elevatedApproveLevel && evaluation.passed)
547
+ return "GREEN";
548
+ if (trustLevel < this.config.requireRefinementLevel)
549
+ return "RED";
550
+ return "YELLOW";
551
+ }
552
+ // Standard tier determination
553
+ if (trustLevel >= this.config.autoApproveLevel && evaluation.passed)
554
+ return "GREEN";
555
+ if (trustLevel < this.config.requireRefinementLevel)
556
+ return "YELLOW";
557
+ return "YELLOW";
558
+ }
559
+ buildReasoning(tier, evaluation, trustLevel, riskLevel) {
560
+ const reasons = [];
561
+ const bandName = this.getTrustBandName(trustLevel);
562
+ if (tier === "GREEN") {
563
+ reasons.push(`Trust T${trustLevel} (${bandName}) meets auto-approve threshold`);
564
+ reasons.push(`Risk level: ${riskLevel}`);
565
+ if (evaluation.passed)
566
+ reasons.push("All policy checks passed");
567
+ }
568
+ else if (tier === "YELLOW") {
569
+ reasons.push(`Trust T${trustLevel} (${bandName}) requires refinement`);
570
+ reasons.push(`Risk level: ${riskLevel}`);
571
+ reasons.push("Refinement options available — select one or more to proceed");
572
+ }
573
+ else {
574
+ if (evaluation.violatedRules.length > 0) {
575
+ reasons.push("Policy violations detected:");
576
+ for (const rule of evaluation.violatedRules.slice(0, 5)) {
577
+ reasons.push(` - ${rule.reason}`);
578
+ }
579
+ }
580
+ else {
581
+ reasons.push(`Trust T${trustLevel} (${bandName}) below minimum threshold`);
582
+ }
583
+ reasons.push(`Risk level: ${riskLevel}`);
584
+ }
585
+ return reasons;
586
+ }
587
+ tierToState(tier) {
588
+ switch (tier) {
589
+ case "GREEN":
590
+ return "APPROVED";
591
+ case "YELLOW":
592
+ return "PENDING_REFINEMENT";
593
+ case "RED":
594
+ return "DENIED";
595
+ }
596
+ }
597
+ getTrustBandName(level) {
598
+ return TRUST_LEVEL_NAMES[level] ?? "Unknown";
599
+ }
600
+ }
601
+ //# sourceMappingURL=trust-aware-enforcement-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-aware-enforcement-service.js","sourceRoot":"","sources":["../../src/enforce/trust-aware-enforcement-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,iBAAiB,EAAoB,MAAM,0BAA0B,CAAC;AAe/E,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,CAAC;AA8CtE;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAA2B;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9B,6CAA6C;IAC7C,IACE,MAAM,CAAC,aAAa,KAAK,cAAc;QACvC,MAAM,CAAC,eAAe,KAAK,YAAY,EACvC,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,6CAA6C;IAC7C,IACE,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC;QACnE,CAAC,MAAM,CAAC,eAAe,KAAK,YAAY;YACtC,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC,EAC5C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,CAAC,aAAa,KAAK,cAAc,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iDAAiD;IACjD,IACE,CAAC,MAAM,CAAC,UAAU,KAAK,OAAO,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC;QACnE,MAAM,CAAC,eAAe,KAAK,cAAc,EACzC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,iCAAiC;IACjC,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF;;GAEG;AACH,SAAS,gBAAgB,CACvB,SAAoB,EACpB,UAAsB,EACtB,MAAmE,EACnE,kBAAiD;IAEjD,MAAM,IAAI,GAAwB;QAChC,YAAY,EAAE,kBAAkB,EAAE,YAAY,IAAI,CAAC,GAAG,CAAC;QACvD,UAAU,EAAE,kBAAkB,EAAE,UAAU,IAAI,CAAC,GAAG,CAAC;QACnD,UAAU,EAAE,kBAAkB,EAAE,UAAU,IAAI,EAAE;QAChD,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,IAAI,EAAE;QAC9D,qBAAqB,EAAE,KAAK;QAC5B,UAAU,EAAE,CAAC;KACd,CAAC;IAEF,oCAAoC;IACpC,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACrD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,CAAC,YAAY;QAC/C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG;YACvB;gBACE,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,MAAM,CAAC,oBAAoB;gBACtC,MAAM,EAAE,8CAA8C;aACvD;SACF,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAChC,IAAI,CAAC,kBAAkB,IAAI,OAAO,EAClC,MAAM,CACP,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF;;GAEG;AACH,SAAS,sBAAsB,CAC7B,SAAoB,EACpB,UAAsB;IAEtB,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,iCAAiC;IACjC,OAAO,CAAC,IAAI,CAAC;QACX,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,MAAM,EAAE,iBAAiB;QACzB,WAAW,EAAE,sDAAsD;QACnE,kBAAkB,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACpD,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,sCAAsC;IACtC,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,MAAM,EAAE,cAAc;YACtB,WAAW,EACT,mEAAmE;YACrE,kBAAkB,EAAE,GAAG;YACvB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,IAAI,CAAC;QACX,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,MAAM,EAAE,kBAAkB;QAC1B,WAAW,EAAE,iDAAiD;QAC9D,kBAAkB,EAAE,GAAG;QACvB,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IAEH,0CAA0C;IAC1C,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,MAAM,EAAE,WAAW;YACnB,WAAW,EACT,+DAA+D;YACjE,kBAAkB,EAAE,IAAI;YACxB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,MAAM,EAAE,gBAAgB;YACxB,WAAW,EAAE,0DAA0D;YACvE,kBAAkB,EAAE,GAAG;YACvB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAyBD,MAAM,cAAc,GAEhB;IACF,gBAAgB,EAAE,CAAe;IACjC,sBAAsB,EAAE,CAAe;IACvC,aAAa,EAAE,CAAe;IAC9B,oBAAoB,EAAE,SAAS;IAC/B,oBAAoB,EAAE,OAAO;IAC7B,qBAAqB,EAAE,CAAC;IACxB,kBAAkB,EAAE,EAAE;CACvB,CAAC;AAEF,gFAAgF;AAChF,kCAAkC;AAClC,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,OAAO,4BAA4B;IAC/B,MAAM,CAA8D;IACpE,MAAM,CAAoB;IAC1B,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC,CAAC,oBAAoB;IACjE,WAAW,CAAqB;IAChC,YAAY,CAAuB;IAE3C,YACE,WAA+B,EAC/B,MAAoC,EACpC,MAA0B;QAE1B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,cAAc;YACjB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI;YACtB,aAAa,EAAE,MAAM;YACrB,eAAe,EAAE;gBACf,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;gBAC9C,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB;gBAC1D,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;aACzC;YACD,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB;YACtD,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB;YACtD,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB;SACzD,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,qCAAqC;IACrC,8EAA8E;IAE9E,KAAK,CAAC,MAAM,CAAC,OAA2B;QACtC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QACjD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,iEAAiE;QACjE,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACpC,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEpC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC1B,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE5C,oDAAoD;QACpD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,WAAW,GAA0B;gBACzC,MAAM;gBACN,UAAU,EAAE,UAAU,IAAI,CAAC;gBAC3B,UAAU,EAAE,UAAU,IAAK,CAAgB;gBAC3C,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE;aAChD,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAE3D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CACT,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,UAAU,CAAC,MAAM,EAAE,EAC1D,qCAAqC,CACtC,CAAC;gBAEF,kEAAkE;gBAClE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBACnC,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBAChC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;4BAC5B,MAAM,EAAE,SAAS,CAAC,QAAQ;4BAC1B,QAAQ,EAAE,SAAS,CAAC,UAAU;4BAC9B,OAAO,EAAE,IAAI;4BACb,MAAM,EAAE,MAAM;4BACd,MAAM,EAAE,SAAS,CAAC,MAAM;4BACxB,OAAO,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE;4BAC7C,UAAU,EAAE,CAAC;yBACd,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBAC3C,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;4BAC5B,MAAM,EAAE,SAAS,CAAC,QAAQ;4BAC1B,QAAQ,EAAE,SAAS,CAAC,UAAU;4BAC9B,OAAO,EAAE,IAAI;4BACb,MAAM,EAAE,UAAU;4BAClB,MAAM,EAAE,SAAS,CAAC,MAAM;4BACxB,OAAO,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE;4BAC7C,UAAU,EAAE,CAAC;yBACd,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,oDAAoD;gBACpD,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;oBAChD,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAErD,qBAAqB;QACrB,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,QAAQ;YACR,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,OAAO,EAAE,MAAM,CAAC,QAAQ;YACxB,aAAa;YACb,IAAI;YACJ,SAAS,EAAE,IAAI,KAAK,OAAO;YAC3B,SAAS,EAAE,IAAI,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;YAChE,UAAU;YACV,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC;YACvE,iBAAiB,EAAE,CAAC;YACpB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,IAAI,IAAI,CACjB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAC9C,CAAC,WAAW,EAAE;YACf,SAAS;SACV,CAAC;QAEF,2BAA2B;QAC3B,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,QAAQ,CAAC,WAAW,GAAG,gBAAgB,CACrC,SAAS,EACT,UAAU,EACV,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAC/B,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,QAAQ,CAAC,kBAAkB,GAAG,IAAI,IAAI,CACpC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAC9C,CAAC,WAAW,EAAE,CAAC;YAChB,QAAQ,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;YACnE,QAAQ,CAAC,iBAAiB,GAAG,sBAAsB,CACjD,SAAS,EACT,UAAU,CACX,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,gBAAgB,GAAG,UAAU,CAAC,aAAa;iBAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;iBAC9D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,QAAQ,EAAE,CAAC,CAAC,MAAM;gBAClB,UAAU,EAAE,CAAC,CAAC,QAAQ;gBACtB,QAAQ,EACN,CAAC,CAAC,MAAM,KAAK,WAAW;oBACtB,CAAC,CAAE,UAAoB;oBACvB,CAAC,CAAE,OAAiB;aACzB,CAAC,CAAC,CAAC;YAEN,QAAQ,CAAC,YAAY;gBACnB,gBAAgB,CAAC,MAAM,GAAG,CAAC;oBACzB,CAAC,CAAC,sBAAsB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC9E,CAAC,CAAC,gBAAgB,UAAU,0BAA0B,CAAC;YAC3D,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAChC,CAAC;YACF,QAAQ,CAAC,gBAAgB;gBACvB,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,CAAC;QAED,QAAQ;QACR,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE1C,kBAAkB;QAClB,MAAM,QAAQ,GAAqB;YACjC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,QAAQ;YACR,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,OAAO,EAAE,MAAM,CAAC,QAAQ;YACxB,aAAa;YACb,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;YAC9B,YAAY,EAAE;gBACZ;oBACE,IAAI,EAAE,WAAW;oBACjB,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBAC1B,MAAM,EAAE,aAAa,IAAI,YAAY,UAAU,UAAU,SAAS,GAAG;oBACrE,SAAS,EAAE,GAAG;iBACf;aACF;YACD,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAExC,MAAM,CAAC,IAAI,CACT;YACE,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,IAAI;YACJ,UAAU;YACV,UAAU;YACV,SAAS;YACT,SAAS;SACV,EACD,2BAA2B,CAC5B,CAAC;QAEF,OAAO;YACL,QAAQ;YACR,QAAQ;YACR,IAAI;YACJ,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;SAC9C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAA0B,EAC1B,QAAY;QAEZ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7D,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE5C,4BAA4B;QAC5B,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,CAAC;YACjE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CACT,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,EAClC,8BAA8B,CAC/B,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,MAAM,WAAW,GACf,QAAQ,CAAC,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;QACtE,IAAI,QAAQ,CAAC,iBAAiB,IAAI,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CACT;gBACE,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,QAAQ,EAAE,QAAQ,CAAC,iBAAiB;aACrC,EACD,iCAAiC,CAClC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC;QAC1D,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB;aAChD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aAC1D,MAAM,CAAC,CAAC,GAAG,EAA2B,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;QAE/D,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CACT,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,EAClC,sCAAsC,CACvC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,iDAAiD;QACjD,MAAM,iBAAiB,GAAwB;YAC7C,YAAY,EAAE,CAAC,GAAG,CAAC;YACnB,UAAU,EAAE,CAAC,GAAG,CAAC;YACjB,UAAU,EAAE,EAAE;YACd,iBAAiB,EAAE,EAAE;YACrB,qBAAqB,EAAE,IAAI,EAAE,2CAA2C;YACxE,UAAU,EAAE,CAAC;YACb,kBAAkB,EAAE,OAAO;SAC5B,CAAC;QAEF,mDAAmD;QACnD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;gBACtC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBACvC,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,OAAO;oBACjB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB;oBAC3C,MAAM,EAAE,qCAAqC;iBAC9C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,OAAO,GAAkB;YAC7B,GAAG,QAAQ;YACX,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,IAAI;YACf,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,GAAG,CAAC;YACjD,SAAS,EAAE;gBACT,qCAAqC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtF,gCAAgC;aACjC;YACD,WAAW,EAAE,iBAAiB;YAC9B,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,IAAI,IAAI,CACjB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAC9C,CAAC,WAAW,EAAE;YACf,SAAS,EAAE,CAAC;SACb,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAExC,kBAAkB;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;YACrC,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC;YAC5B,QAAQ,CAAC,iBAAiB,GAAG,OAAO,CAAC,EAAE,CAAC;YACxC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;YACzB,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;gBACzB,IAAI,EAAE,aAAa;gBACnB,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,gBAAgB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACzE,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CACT;YACE,kBAAkB,EAAE,OAAO,CAAC,UAAU;YACtC,iBAAiB,EAAE,OAAO,CAAC,EAAE;YAC7B,OAAO,EAAE,OAAO,CAAC,iBAAiB;YAClC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;SAC9C,EACD,2BAA2B,CAC5B,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE,QAAS;YACnB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAM,EAAE,QAAY;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE7D,mBAAmB;QACnB,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAAY,EACZ,QAAY;QAEZ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,MAAyB;QACjC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAE5C,oCAAoC;QACpC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC;YACvE,IAAI,CAAC,MAAM,CAAC,sBAAsB;gBAChC,MAAM,CAAC,eAAe,CAAC,sBAAsB,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC;QACnE,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,OAA6C;QACzD,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1C,wEAAwE;QACxE,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAEjD,oCAAoC;QACpC,IACE,OAAO,CAAC,gBAAgB,KAAK,SAAS;YACtC,OAAO,CAAC,sBAAsB,KAAK,SAAS;YAC5C,OAAO,CAAC,aAAa,KAAK,SAAS,EACnC,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG;gBAC5B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;gBAC9C,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB;gBAC1D,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;aACzC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,IAAI,CACT,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,EAClD,yCAAyC,CAC1C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS;QAIP,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;IACpE,CAAC;IAED,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E;;;OAGG;IACH,eAAe,CAAC,MAA4B;QAC1C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAC3B,MAAM,CAAC,IAAI,CACT,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,EAAE,EAC9B,gCAAgC,CACjC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAEtE,aAAa,CACnB,UAAyE,EACzE,UAAsB,EACtB,SAAoB;QAEpB,oCAAoC;QACpC,IACE,UAAU,CAAC,aAAa,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CACvD,EACD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kCAAkC;QAClC,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,2DAA2D;QAC3D,IAAI,SAAS,KAAK,UAAU,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5E,CAAC;QAED,mDAAmD;QACnD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CACnC,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CACnB,CAAC;YAChB,IAAI,UAAU,IAAI,oBAAoB,IAAI,UAAU,CAAC,MAAM;gBACzD,OAAO,OAAO,CAAC;YACjB,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB;gBAAE,OAAO,KAAK,CAAC;YAClE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,8BAA8B;QAC9B,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,UAAU,CAAC,MAAM;YACjE,OAAO,OAAO,CAAC;QACjB,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB;YAAE,OAAO,QAAQ,CAAC;QACrE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,cAAc,CACpB,IAAkB,EAClB,UAGC,EACD,UAAsB,EACtB,SAAoB;QAEpB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEnD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CACV,UAAU,UAAU,KAAK,QAAQ,gCAAgC,CAClE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;YACzC,IAAI,UAAU,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,UAAU,UAAU,KAAK,QAAQ,uBAAuB,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CACV,8DAA8D,CAC/D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC5C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACxD,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,UAAU,UAAU,KAAK,QAAQ,2BAA2B,CAC7D,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,WAAW,CAAC,IAAkB;QACpC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,UAAU,CAAC;YACpB,KAAK,QAAQ;gBACX,OAAO,oBAAoB,CAAC;YAC9B,KAAK,KAAK;gBACR,OAAO,QAAQ,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,KAAiB;QACxC,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;IAC/C,CAAC;CACF"}