agent-inspect 6.26.0 → 6.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/docs/BUNDLES.md +4 -1
- package/docs/LIMITATIONS.md +1 -1
- package/docs/SAFE-TRACE-SHARING.md +2 -0
- package/docs/TRACE-CONTRACTS.md +21 -3
- package/package.json +1 -1
- package/packages/cli/dist/{chunk-HPR2OJPU.mjs → chunk-JVQ4LTHR.mjs} +4317 -3803
- package/packages/cli/dist/chunk-JVQ4LTHR.mjs.map +1 -0
- package/packages/cli/dist/index.cjs +4541 -4005
- package/packages/cli/dist/index.cjs.map +1 -1
- package/packages/cli/dist/index.mjs +4 -4
- package/packages/cli/dist/index.mjs.map +1 -1
- package/packages/cli/dist/{src-J43ECFHC.mjs → src-M5J5YC5E.mjs} +3 -3
- package/packages/cli/dist/{src-J43ECFHC.mjs.map → src-M5J5YC5E.mjs.map} +1 -1
- package/packages/core/dist/advanced.cjs +3026 -2501
- package/packages/core/dist/advanced.cjs.map +1 -1
- package/packages/core/dist/advanced.d.cts +172 -16
- package/packages/core/dist/advanced.d.ts +172 -16
- package/packages/core/dist/advanced.mjs +362 -32
- package/packages/core/dist/advanced.mjs.map +1 -1
- package/packages/core/dist/checks.cjs +537 -152
- package/packages/core/dist/checks.cjs.map +1 -1
- package/packages/core/dist/checks.d.cts +9 -414
- package/packages/core/dist/checks.d.ts +9 -414
- package/packages/core/dist/checks.mjs +1 -1
- package/packages/core/dist/{chunk-LHSXRIYU.mjs → chunk-ME4WXYY3.mjs} +3609 -3224
- package/packages/core/dist/chunk-ME4WXYY3.mjs.map +1 -0
- package/packages/core/dist/{context-DOOT9GZ-.d.cts → context-DGMqxFpz.d.cts} +4 -4
- package/packages/core/dist/{context-DOX2-RjH.d.ts → context-DgcvkJ9t.d.ts} +4 -4
- package/packages/core/dist/diff.d.cts +3 -3
- package/packages/core/dist/diff.d.ts +3 -3
- package/packages/core/dist/exporters.d.cts +3 -3
- package/packages/core/dist/exporters.d.ts +3 -3
- package/packages/core/dist/{index-CtK_p-ps.d.ts → index-BOA1AeEU.d.ts} +473 -6
- package/packages/core/dist/{index-D72DPqAF.d.ts → index-BzyNPfLm.d.ts} +2 -2
- package/packages/core/dist/{index-DLLz9sce.d.cts → index-C6bCIbFO.d.cts} +2 -2
- package/packages/core/dist/{index-CR4CCRqP.d.cts → index-DVetZwGG.d.cts} +473 -6
- package/packages/core/dist/index.d.cts +7 -7
- package/packages/core/dist/index.d.ts +7 -7
- package/packages/core/dist/{inspect-event-DRthdZlf.d.cts → inspect-event-CDqjcrG_.d.cts} +1 -1
- package/packages/core/dist/{inspect-event-DRthdZlf.d.ts → inspect-event-CDqjcrG_.d.ts} +1 -1
- package/packages/core/dist/{log-config-CFlIJHTf.d.cts → log-config-DcjV8ZjF.d.cts} +1 -1
- package/packages/core/dist/{log-config-OZRfpHED.d.ts → log-config-N_c5AE09.d.ts} +1 -1
- package/packages/core/dist/logs.d.cts +3 -3
- package/packages/core/dist/logs.d.ts +3 -3
- package/packages/core/dist/{persisted-inspect-event-BVucFVrP.d.ts → persisted-inspect-event-CbaRYpbw.d.ts} +1 -1
- package/packages/core/dist/{persisted-inspect-event-CVZWZldL.d.cts → persisted-inspect-event-DiJ0I_vi.d.cts} +1 -1
- package/packages/core/dist/persisted.d.cts +5 -5
- package/packages/core/dist/persisted.d.ts +5 -5
- package/packages/core/dist/readers.d.cts +3 -3
- package/packages/core/dist/readers.d.ts +3 -3
- package/packages/core/dist/{types-B562HgN_.d.cts → types-BA_IOdg4.d.cts} +1 -1
- package/packages/core/dist/{types-B562HgN_.d.ts → types-BA_IOdg4.d.ts} +1 -1
- package/packages/core/dist/{types-VzKihKQo.d.cts → types-wXuxMUop.d.cts} +2 -2
- package/packages/core/dist/{types-Bx3mEZ04.d.ts → types-xv9bSgOK.d.ts} +2 -2
- package/packages/core/dist/writers.d.cts +2 -2
- package/packages/core/dist/writers.d.ts +2 -2
- package/packages/cli/dist/chunk-HPR2OJPU.mjs.map +0 -1
- package/packages/core/dist/chunk-LHSXRIYU.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sessions/metadata.ts","../src/checks/logical-events.ts","../src/checks/derived-failure.ts","../src/checks/relationship-facts.ts","../src/checks/trace-facts.ts","../src/checks/contract-scope.ts","../src/checks/tool-arguments.ts","../src/safety/sensitive-key.ts","../src/checks/index.ts","../src/checks/control-rules.ts","../src/checks/retry-safety.ts","../src/checks/contract.ts"],"names":["attrs","isRecord","pickString","isNonEmptyString","run","diagnostic","flattenNodes","stringAttr","runEvidence","fail","eventEvidence"],"mappings":";;;;AAEA,SAAS,iBAAiB,KAAA,EAAiC;AACzD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA;AACvD;AAEA,SAAS,kBAAkB,KAAA,EAAoC;AAC7D,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,CAAC,OAAO,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,EAAG;AACrE,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AACzB;AAGO,SAAS,+BACd,MAAA,EACqC;AACrC,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AAEpB,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,IAAI,KAAA,GAAQ,KAAA;AAEZ,EAAA,MAAM,YAAA,GAAe,CACnB,GAAA,EACA,KAAA,KACS;AACT,IAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK;AACtB,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV;AAAA,EACF,CAAA;AAEA,EAAA,YAAA,CAAa,WAAA,EAAa,OAAO,SAAS,CAAA;AAC1C,EAAA,YAAA,CAAa,gBAAA,EAAkB,OAAO,cAAc,CAAA;AACpD,EAAA,YAAA,CAAa,SAAA,EAAW,OAAO,OAAO,CAAA;AACtC,EAAA,YAAA,CAAa,eAAA,EAAiB,OAAO,aAAa,CAAA;AAClD,EAAA,YAAA,CAAa,SAAA,EAAW,OAAO,OAAO,CAAA;AACtC,EAAA,YAAA,CAAa,aAAA,EAAe,OAAO,WAAW,CAAA;AAC9C,EAAA,YAAA,CAAa,aAAA,EAAe,OAAO,WAAW,CAAA;AAC9C,EAAA,YAAA,CAAa,WAAA,EAAa,OAAO,SAAS,CAAA;AAC1C,EAAA,YAAA,CAAa,YAAA,EAAc,OAAO,UAAU,CAAA;AAC5C,EAAA,YAAA,CAAa,cAAA,EAAgB,OAAO,YAAY,CAAA;AAChD,EAAA,YAAA,CAAa,OAAA,EAAS,OAAO,KAAK,CAAA;AAClC,EAAA,YAAA,CAAa,WAAA,EAAa,OAAO,SAAS,CAAA;AAC1C,EAAA,YAAA,CAAa,cAAA,EAAgB,OAAO,YAAY,CAAA;AAChD,EAAA,YAAA,CAAa,cAAA,EAAgB,OAAO,YAAY,CAAA;AAChD,EAAA,YAAA,CAAa,YAAA,EAAc,OAAO,UAAU,CAAA;AAC5C,EAAA,YAAA,CAAa,eAAA,EAAiB,OAAO,aAAa,CAAA;AAClD,EAAA,YAAA,CAAa,cAAA,EAAgB,OAAO,YAAY,CAAA;AAChD,EAAA,YAAA,CAAa,aAAA,EAAe,OAAO,WAAW,CAAA;AAC9C,EAAA,YAAA,CAAa,WAAA,EAAa,OAAO,SAAS,CAAA;AAC1C,EAAA,YAAA,CAAa,YAAA,EAAc,OAAO,UAAU,CAAA;AAC5C,EAAA,YAAA,CAAa,gBAAA,EAAkB,OAAO,cAAc,CAAA;AACpD,EAAA,YAAA,CAAa,eAAA,EAAiB,OAAO,aAAa,CAAA;AAClD,EAAA,YAAA,CAAa,WAAA,EAAa,OAAO,SAAS,CAAA;AAC1C,EAAA,YAAA,CAAa,YAAA,EAAc,OAAO,UAAU,CAAA;AAE5C,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,MAAA,CAAO,OAAO,CAAA;AAChD,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,GAAA,CAAI,OAAA,GAAU,OAAA;AACd,IAAA,KAAA,GAAQ,IAAA;AAAA,EACV;AACA,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,MAAA,CAAO,aAAa,CAAA;AAC5D,EAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,IAAA,GAAA,CAAI,aAAA,GAAgB,aAAA;AACpB,IAAA,KAAA,GAAQ,IAAA;AAAA,EACV;AAEA,EAAA,OAAO,QAAQ,GAAA,GAAM,MAAA;AACvB;AAEO,SAAS,gBAAA,CACd,MACA,OAAA,EACoB;AACpB,EAAA,IAAI,IAAA,EAAM,SAAA,EAAW,OAAO,IAAA,CAAK,SAAA;AACjC,EAAA,IAAI,OAAA,EAAS,kBAAA,IAAsB,IAAA,EAAM,OAAA,EAAS;AAChD,IAAA,OAAO,CAAA,MAAA,EAAS,KAAK,OAAO,CAAA,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,MAAA;AACT;;;AC5BA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,YAAY,KAAA,EAAkD;AACrE,EAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,EAAY,WAAA;AAChC,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA;AAC7C;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,EAAY,MAAA;AAChC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AAC7D,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAW,KAAA,EAAqD;AACvE,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,GAAI,KAAA,CAAM,UAAA,KAAe,MAAA,GACrB,EAAE,UAAA,EAAY,EAAE,GAAG,KAAA,CAAM,UAAA,EAAW,EAAE,GACtC,EAAC;AAAA,IACL,GAAI,KAAA,CAAM,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,EAAE,GAAG,KAAA,CAAM,KAAA,EAAM,EAAE,GAAI,EAAC;AAAA,IACjE,GAAI,KAAA,CAAM,UAAA,KAAe,MAAA,GACrB,EAAE,UAAA,EAAY,EAAE,GAAG,KAAA,CAAM,UAAA,EAAW,EAAE,GACtC,EAAC;AAAA,IACL,GAAI,KAAA,CAAM,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,EAAE,GAAG,KAAA,CAAM,MAAA,EAAO,EAAE,GAAI;AAAC,GACtE;AACF;AAEA,SAAS,eAAA,CACP,OACA,QAAA,EACqC;AACrC,EAAA,MAAM,MAAA,GAAkC;AAAA,IACtC,GAAI,QAAA,CAAS,QAAA,CAAS,UAAU,CAAA,GAAI,QAAA,CAAS,aAAa,EAAC;AAAA,IAC3D,GAAI,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,GAAI,KAAA,CAAM,aAAa;AAAC,GACvD;AAEA,EAAA,MAAA,CAAO,WAAA,GAAc,KAAA,CAAM,UAAA,EAAY,WAAA,IAAe,SAAS,UAAA,EAAY,WAAA;AAC3E,EAAA,MAAA,CAAO,mBAAA,GAAsB,SAAS,UAAA,EAAY,WAAA;AAClD,EAAA,IAAI,QAAA,CAAS,UAAA,EAAY,UAAA,KAAe,MAAA,EAAW;AACjD,IAAA,MAAA,CAAO,UAAA,GAAa,SAAS,UAAA,CAAW,UAAA;AAAA,EAC1C;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,IAAI,MAAA,GAAS,MAAA;AACnD;AAEA,SAAS,iBAAA,CACP,OACA,QAAA,EACmB;AACnB,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,KAAA,EAAO,QAAQ,CAAA;AAClD,EAAA,MAAM,MAAA,GAAgC;AAAA,IACpC,GAAG,WAAW,KAAK,CAAA;AAAA,IACnB,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,SAAA,EAAW,QAAA,CAAS,SAAA,IAAa,KAAA,CAAM,SAAA;AAAA,IACvC,GAAI,SAAS,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,QAAA,CAAS,OAAA,EAAQ,GAAI,EAAC;AAAA,IACtE,GAAI,SAAS,UAAA,KAAe,MAAA,GACxB,EAAE,UAAA,EAAY,QAAA,CAAS,UAAA,EAAW,GAClC,EAAC;AAAA,IACL,GAAI,QAAA,CAAS,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,EAAE,GAAG,QAAA,CAAS,KAAA,EAAM,EAAE,GAAI,EAAC;AAAA,IACvE,GAAI,QAAA,CAAS,UAAA,KAAe,MAAA,IAAa,MAAM,UAAA,KAAe,MAAA,GAC1D,EAAE,UAAA,EAAY,EAAE,GAAG,QAAA,CAAS,UAAA,EAAW,KACvC,EAAC;AAAA,IACL,GAAI,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,KAAe;AAAC,GACnD;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,cAAA,EAAgB,OAAO,MAAA,CAAO,CAAC,MAAM,OAAA,EAAS,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA,IAC/D,UAAA,EAAY;AAAA,MACV,MAAA,EAAQ,IAAA;AAAA,MACR,kBAAkB,MAAA,CAAO,MAAA,CAAO,CAAC,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA,MAClD,gBAAA,EAAkB,KAAA;AAAA,MAClB,GAAI,MAAM,QAAA,KAAa,MAAA,GACnB,EAAE,gBAAA,EAAkB,KAAA,CAAM,QAAA,EAAS,GACnC;AAAC;AACP,GACF;AACF;AAEA,SAAS,SAAA,CACP,OACA,MAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,GAAG,WAAW,KAAK,CAAA;AAAA,IACnB,gBAAgB,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,IAC7C,UAAA,EAAY;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,gBAAA,EAAkB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,MAClC,gBAAA,EAAkB,QAAQ,gBAAA,KAAqB,IAAA;AAAA,MAC/C,GAEI;AAAC;AACP,GACF;AACF;AASO,SAAS,qBACd,MAAA,EAC4B;AAC5B,EAAA,MAAM,cAA6C,EAAC;AACpD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqC;AACvD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,OAAO,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAK,KAAK,EAAC;AACxC,IAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,IAAA,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AACpC,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAA+B;AAC1D,EAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAoB;AAClD,EAAA,MAAM,UAA+B,EAAC;AAEtC,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACvE,EAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,GAAA,CAAI,KAAK,KAAK,EAAC;AACvC,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,MAAM,YAAqC,EAAC;AAC5C,IAAA,MAAM,SAAkC,EAAC;AAEzC,IAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,MAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,MAAA,IACE,WAAW,cAAA,IACV,MAAA,KAAW,aAAA,IAAiB,KAAA,CAAM,WAAW,SAAA,EAC9C;AACA,QAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,MACnB,CAAA,MAAA,IAAW,MAAA,KAAW,gBAAA,IAAoB,MAAA,KAAW,eAAA,EAAiB;AACpE,QAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AAEtC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,MAAA,IAAI,KAAA;AAEJ,MAAA,IAAI,WAAA,CAAY,KAAK,CAAA,KAAM,aAAA,EAAe;AACxC,QAAA,MAAM,aAAa,SAAA,CAAU,MAAA;AAAA,UAC3B,CAAC,CAAA,KACC,CAAC,aAAA,CAAc,GAAA,CAAI,EAAE,OAAO,CAAA,IAAK,WAAA,CAAY,CAAC,CAAA,KAAM;AAAA,SACxD;AACA,QAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,UAAA,WAAA,CAAY,IAAA,CAAK;AAAA,YACf,IAAA,EAAM,2BAAA;AAAA,YACN,OAAA,EAAS,uCAAuC,KAAK,CAAA,yBAAA,CAAA;AAAA,YACrD,UAAU,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,OAAO;AAAA,WAC1C,CAAA;AACD,UAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,QAC9D;AACA,QAAA,KAAA,GAAQ,WAAW,CAAC,CAAA;AAAA,MACtB,WAAW,MAAA,EAAQ;AACjB,QAAA,MAAM,aAAa,SAAA,CAAU,MAAA;AAAA,UAC3B,CAAC,CAAA,KACC,CAAC,aAAA,CAAc,IAAI,CAAA,CAAE,OAAO,CAAA,IAC5B,WAAA,CAAY,CAAC,CAAA,KAAM,gBAAA,IACnB,QAAA,CAAS,CAAC,CAAA,KAAM;AAAA,SACpB;AACA,QAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,UAAA,WAAA,CAAY,IAAA,CAAK;AAAA,YACf,IAAA,EAAM,2BAAA;AAAA,YACN,OAAA,EAAS,2CAA2C,MAAM,CAAA,yBAAA,CAAA;AAAA,YAC1D,UAAU,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,OAAO;AAAA,WAC1C,CAAA;AACD,UAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,QAC9D;AACA,QAAA,KAAA,GAAQ,WAAW,CAAC,CAAA;AAAA,MACtB;AAEA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,aAAA,CAAc,GAAA,CAAI,MAAM,OAAO,CAAA;AAC/B,QAAA,WAAA,CAAY,GAAA,CAAI,MAAM,OAAO,CAAA;AAC7B,QAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,KAAA,EAAO,KAAK,CAAA;AAC7C,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,QAAA,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,OAAA,EAAS,MAAM,CAAA;AACxC,QAAA,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,OAAA,EAAS,MAAM,CAAA;AACxC,QAAA,IAAI,MAAA,oBAA0B,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,MAAA,CAAO,OAAO,CAAA;AAAA,MACxE,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,IAAA,EAAM,iCAAA;AAAA,UACN,OAAA,EAAS,CAAA,+BAAA,EAAkC,KAAA,CAAM,OAAO,CAAA,CAAA,CAAA;AAAA,UACxD,QAAA,EAAU,CAAC,KAAA,CAAM,OAAO;AAAA,SACzB,CAAA;AACD,QAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,QAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAClB,QAAA,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,OAAA,EAAS,KAAK,CAAA;AACvC,QAAA,IAAI,MAAA,oBAA0B,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA;AAAA,MACvE;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,IAAI,aAAA,CAAc,GAAA,CAAI,QAAA,CAAS,OAAO,CAAA,EAAG;AACzC,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,oCAAA;AAAA,QACN,OAAA,EAAS,CAAA,+BAAA,EAAkC,QAAA,CAAS,OAAO,CAAA,CAAA,CAAA;AAAA,QAC3D,QAAA,EAAU,CAAC,QAAA,CAAS,OAAO;AAAA,OAC5B,CAAA;AACD,MAAA,MAAM,KAAA,GAAQ,UAAU,QAAQ,CAAA;AAChC,MAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAClB,MAAA,cAAA,CAAe,GAAA,CAAI,QAAA,CAAS,OAAA,EAAS,KAAK,CAAA;AAC1C,MAAA,MAAM,MAAA,GAAS,SAAS,QAAQ,CAAA;AAChC,MAAA,IAAI,MAAA,IAAU,CAAC,iBAAA,CAAkB,GAAA,CAAI,GAAG,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA,EAAG;AAC1D,QAAA,iBAAA,CAAkB,IAAI,CAAA,EAAG,KAAK,IAAI,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA;AAAA,MAC3D;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAClB,MAAA,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,OAAA,EAAS,KAAK,CAAA;AACvC,MAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,MAAA,IAAI,MAAA,IAAU,CAAC,iBAAA,CAAkB,GAAA,CAAI,GAAG,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA,EAAG;AAC1D,QAAA,iBAAA,CAAkB,IAAI,CAAA,EAAG,KAAK,IAAI,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,OAAA,EAAS,CAAC,CAAC,CAAC,CAAA;AAC9D,EAAA,MAAM,aAAkC,EAAC;AAEzC,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,mBAAmB,KAAA,CAAM,QAAA;AAC/B,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,GAAa,gBAAA;AACjB,IAAA,IAAI,QAAA,GAAW,KAAA;AAGf,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,GAAA,CAAI,gBAAgB,CAAA;AACvD,IAAA,IAAI,WAAA,IAAe,WAAA,CAAY,OAAA,KAAY,gBAAA,EAAkB;AAC3D,MAAA,UAAA,GAAa,WAAA,CAAY,OAAA;AACzB,MAAA,QAAA,GAAW,IAAA;AAAA,IACb,CAAA,MAAA,IAAW,CAAC,WAAA,CAAY,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAE7C,MAAA,MAAM,OAAA,GAAU,kBAAkB,GAAA,CAAI,CAAA,EAAG,MAAM,KAAK,CAAA,CAAA,EAAI,gBAAgB,CAAA,CAAE,CAAA;AAC1E,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,UAAA,GAAa,OAAA;AACb,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,IAAI,gBAAA,KAAqB,MAAM,OAAA,EAAS;AACtC,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,IAAA,EAAM,gCAAA;AAAA,UACN,OAAA,EAAS,4BAAA;AAAA,YACP,mCAAA;AAAA,YACA,CAAA,4BAAA,EAA+B,MAAM,OAAO,CAAA,CAAA;AAAA,WAC9C;AAAA,UACA,QAAA,EAAU,CAAC,KAAA,CAAM,OAAO;AAAA,SACzB,CAAA;AACD,QAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,GAAG,MAAK,GAAI,KAAA;AACrC,QAAA,UAAA,CAAW,IAAA,CAAK;AAAA,UACd,GAAG,IAAA;AAAA,UACH,UAAA,EAAY;AAAA,YACV,GAAG,KAAA,CAAM,UAAA;AAAA,YACT,gBAAA,EAAkB,IAAA;AAAA,YAClB;AAAA;AACF,SACD,CAAA;AACD,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,YAAY,GAAA,CAAI,gBAAgB,KAAK,CAAC,cAAA,CAAe,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAC/E,QAAA,MAAM,OAAA,GAAU,MAAM,UAAA,EAAY,aAAA;AAClC,QAAA,MAAM,UAAA,GACJ,YAAY,YAAA,IACZ,KAAA,CAAM,YAAY,gBAAA,KAAqB,IAAA,IACvC,KAAA,CAAM,UAAA,EAAY,gBAAA,KAAqB,IAAA;AAAA,QAEvC,eAAe,IAAA,CAAK,gBAAgB,CAAA,IACpC,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAC3C,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,WAAA,CAAY,IAAA,CAAK;AAAA,YACf,IAAA,EAAM,8BAAA;AAAA,YACN,OAAA,EAAS,CAAA,OAAA,EAAU,gBAAgB,CAAA,gBAAA,EAAmB,MAAM,OAAO,CAAA,CAAA,CAAA;AAAA,YACnE,QAAA,EAAU,CAAC,KAAA,CAAM,OAAO;AAAA,WACzB,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,KAAe,MAAM,OAAA,EAAS;AAChC,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,gCAAA;AAAA,QACN,OAAA,EAAS,4BAAA;AAAA,UACP,mCAAA;AAAA,UACA,CAAA,4BAAA,EAA+B,KAAA,CAAM,OAAO,CAAA,MAAA,EAAS,gBAAgB,CAAA,EAAA;AAAA,SACvE;AAAA,QACA,QAAA,EAAU,CAAC,KAAA,CAAM,OAAO;AAAA,OACzB,CAAA;AACD,MAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,GAAG,MAAK,GAAI,KAAA;AACrC,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,GAAG,IAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,GAAG,KAAA,CAAM,UAAA;AAAA,UACT,gBAAA,EAAkB,IAAA;AAAA,UAClB;AAAA;AACF,OACD,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,4BAAA;AAAA,MACN,SAAS,CAAA,gBAAA,EAAmB,gBAAgB,WAAM,UAAU,CAAA,KAAA,EAAQ,MAAM,OAAO,CAAA,CAAA,CAAA;AAAA,MACjF,QAAA,EAAU,CAAC,KAAA,CAAM,OAAO;AAAA,KACzB,CAAA;AAED,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,GAAG,KAAA;AAAA,MACH,QAAA,EAAU,UAAA;AAAA,MACV,UAAA,EAAY;AAAA,QACV,GAAG,KAAA,CAAM,UAAA;AAAA,QACT,gBAAA,EAAkB,IAAA;AAAA,QAClB;AAAA;AACF,KACD,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA,CAAE,OAAA,EAAS,CAAC,CAAC,CAAC,CAAA;AAC7D,EAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACxB,IAAA,MAAM,KAAK,QAAA,CAAS,GAAA,CAAI,EAAE,cAAA,CAAe,CAAC,CAAE,CAAA,IAAK,CAAA;AACjD,IAAA,MAAM,KAAK,QAAA,CAAS,GAAA,CAAI,EAAE,cAAA,CAAe,CAAC,CAAE,CAAA,IAAK,CAAA;AACjD,IAAA,OAAO,KAAK,EAAA,IAAM,CAAA,CAAE,OAAA,CAAQ,aAAA,CAAc,EAAE,OAAO,CAAA;AAAA,EACrD,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AAAA,IACvC,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,WAAW;AAAA,GACxC;AACF;AAQO,SAAS,yBAAyB,KAAA,EAAsC;AAC7E,EAAA,MAAMA,SAAQ,KAAA,CAAM,UAAA;AACpB,EAAA,MAAM,SAAS,UAAA,CAAWA,MAAAA,EAAO,CAAC,UAAA,EAAY,MAAM,CAAC,CAAA;AACrD,EAAA,IAAI,QAAQ,OAAO,MAAA;AAEnB,EAAA,MAAM,WAAWA,MAAAA,EAAO,QAAA;AACxB,EAAA,IAAI,QAAA,CAAS,QAAQ,CAAA,EAAG;AACtB,IAAA,MAAM,SAAS,UAAA,CAAW,QAAA,EAAU,CAAC,UAAA,EAAY,MAAM,CAAC,CAAA;AACxD,IAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB;AAEA,EAAA,KAAA,MAAW,MAAA,IAAU,CAAC,OAAA,EAAS,WAAA,EAAa,YAAY,CAAA,EAAY;AAClE,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,SAAU,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,KAAA,CAAM,IAAA;AACf;AAEA,SAAS,UAAA,CACP,QACA,IAAA,EACoB;AACpB,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA,EAAI,OAAO,KAAA,CAAM,IAAA,EAAK;AAAA,EAC1E;AACA,EAAA,OAAO,MAAA;AACT;;;AC/VA,SAASC,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAASC,WAAAA,CACP,QACA,IAAA,EACoB;AACpB,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AAAA,EAC/D;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CACP,QACA,IAAA,EACoB;AACpB,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,MAAA,CAAO,SAAS,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AACpE,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAAuD;AAC5E,EAAA,MAAMF,SAAQC,SAAAA,CAAS,KAAA,CAAM,UAAU,CAAA,GAAI,MAAM,UAAA,GAAa,MAAA;AAC9D,EAAA,MAAM,MAAA,GAASD,WAAU,MAAA,IAAaC,SAAAA,CAASD,OAAM,QAAQ,CAAA,GAAIA,OAAM,QAAA,GAAW,MAAA;AAClF,EAAA,OAAO;AAAA,IACL,GAAIA,UAAS,EAAC;AAAA,IACd,GAAI,UAAU;AAAC,GACjB;AACF;AAEA,SAAS,cAAc,KAAA,EAAsC;AAC3D,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ,OAAO,yBAAyB,KAAK,CAAA;AAChE,EAAA,OAAO,KAAA,CAAM,IAAA;AACf;AAEA,SAAS,SAAS,KAAA,EAAwC;AACxD,EAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,cAAA,EAAgB,YAAA,EAAc,eAAe,CAAA,EAAY;AAC1E,IAAA,MAAM,KAAA,GAAQE,WAAAA,CAAW,IAAA,EAAM,CAAC,GAAG,CAAC,CAAA;AACpC,IAAA,IAAI,KAAA,KAAU,QAAW,IAAA,CAAK,IAAA,CAAK,GAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,EACtD;AACA,EAAA,MAAM,MAAA,GAASA,WAAAA,CAAW,IAAA,EAAM,CAAC,QAAQ,CAAC,CAAA;AAC1C,EAAA,IAAI,WAAW,MAAA,EAAW,IAAA,CAAK,IAAA,CAAK,CAAA,OAAA,EAAU,MAAM,CAAA,CAAE,CAAA;AACtD,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBACP,aAAA,EACyB;AACzB,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAwB;AAE1C,EAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,IAAK;AAAA,MACzC,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAM,KAAA,CAAM;AAAA,KACd;AACA,IAAA,MAAM,IAAA,GAAO,cAAc,KAAK,CAAA;AAEhC,IAAA,IAAI,MAAM,IAAA,KAAS,KAAA,IAAS,QAAA,CAAS,IAAA,KAAS,MAAM,KAAA,EAAO;AACzD,MAAA,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,IAAA,IAAQ,QAAA,CAAS,IAAA;AAAA,IACzC;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,KAAA,IAAS,KAAA,CAAM,WAAW,MAAA,IAAa,KAAA,CAAM,WAAW,SAAA,EAAW;AACpF,MAAA,QAAA,CAAS,SAAS,KAAA,CAAM,MAAA;AAAA,IAC1B;AACA,IAAA,QAAA,CAAS,OAAA,KAAYA,WAAAA,CAAW,IAAA,EAAM,CAAC,SAAS,CAAC,CAAA;AACjD,IAAA,QAAA,CAAS,YAAY,UAAA,CAAW,IAAA,EAAM,CAAC,SAAA,EAAW,cAAA,EAAgB,YAAY,CAAC,CAAA;AAC/E,IAAA,QAAA,CAAS,cAAcA,WAAAA,CAAW,IAAA,EAAM,CAAC,WAAA,EAAa,gBAAgB,CAAC,CAAA;AACvE,IAAA,QAAA,CAAS,OAAA,KAAYA,WAAAA,CAAW,IAAA,EAAM,CAAC,SAAS,CAAC,CAAA;AACjD,IAAA,QAAA,CAAS,aAAA,KAAkBA,WAAAA,CAAW,IAAA,EAAM,CAAC,eAAe,CAAC,CAAA;AAC7D,IAAA,QAAA,CAAS,eAAeA,WAAAA,CAAW,IAAA,EAAM,CAAC,YAAA,EAAc,cAAc,CAAC,CAAA;AACvE,IAAA,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,oBAAA,CAAqB,GAAe,CAAA,EAAwB;AACnE,EAAA,IAAI,CAAA,CAAE,aAAa,CAAA,CAAE,SAAA,IAAa,EAAE,SAAA,KAAc,CAAA,CAAE,WAAW,OAAO,IAAA;AACtE,EAAA,IAAI,CAAA,CAAE,WAAW,CAAA,CAAE,OAAA,IAAW,EAAE,OAAA,KAAY,CAAA,CAAE,SAAS,OAAO,IAAA;AAC9D,EAAA,IAAI,EAAE,aAAA,IAAiB,CAAA,CAAE,iBAAiB,CAAA,CAAE,aAAA,KAAkB,EAAE,aAAA,EAAe;AAC7E,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAAmC;AACvD,EAAA,OAAO,MAAM,MAAA,KAAW,IAAA;AAC1B;AAEA,SAAS,UAAU,KAAA,EAAmC;AACpD,EAAA,OAAO,MAAM,MAAA,KAAW,OAAA;AAC1B;AAEA,SAAS,iBAAA,CAAkB,GAAsB,CAAA,EAA8B;AAC7E,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,SAAA,CAAU,aAAA,CAAc,EAAE,SAAS,CAAA;AACpD,EAAA,IAAI,MAAA,KAAW,GAAG,OAAO,MAAA;AACzB,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAA;AAC1C;AAEA,SAAS,iBAAA,CACP,OAAA,EACA,aAAA,EACA,IAAA,EACiB;AACjB,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AACzC,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,QAAA,CAAS,OAAO,CAAC,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,cAAc,OAAO,CAAA;AACzC,EAAA,MAAM,cAAA,GACJ,UAAA,CAAW,aAAA,CAAc,OAAO,CAAA,EAAG,CAAC,SAAA,EAAW,cAAA,EAAgB,YAAY,CAAC,CAAA,IAC5E,UAAA,EAAY,OAAA;AACd,EAAA,MAAM,aAA8B,EAAC;AAErC,EAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,IAAA,IAAI,KAAA,CAAM,OAAA,KAAY,OAAA,CAAQ,OAAA,EAAS;AACvC,IAAA,IAAI,KAAA,CAAM,WAAW,SAAA,EAAW;AAEhC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AACrC,IAAA,MAAM,SAAA,GAAY,cAAc,KAAK,CAAA;AACrC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,KAAU,OAAA,CAAQ,KAAA;AAGxC,IAAA,IAAI,QAAA,EAAU,OAAA,KAAY,OAAA,CAAQ,KAAA,EAAO;AACvC,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,KAAA;AAAA,QACA,KAAA,EAAO,SAAA;AAAA,QACP,UAAA,EAAY,UAAA;AAAA,QACZ,UAAU,KAAA,CAAM;AAAA,OACjB,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,IACE,QAAA,EAAU,UAAA,KAAe,OAAA,CAAQ,KAAA,IACjCA,WAAAA,CAAW,SAAA,EAAW,CAAC,YAAA,EAAc,cAAc,CAAC,CAAA,KAAM,OAAA,CAAQ,KAAA,EAClE;AACA,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,KAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP,UAAA,EAAY,UAAA;AAAA,QACZ,UAAU,KAAA,CAAM;AAAA,OACjB,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,IAAW,iBAAA,CAAkB,OAAA,EAAS,KAAK,KAAK,CAAA,EAAG;AAEvD,IAAA,MAAM,UAAA,GAAa,SAAS,KAAK,CAAA;AACjC,IAAA,MAAM,UAAA,GAAa,WAAW,IAAA,CAAK,CAAC,QAAQ,YAAA,CAAa,GAAA,CAAI,GAAG,CAAC,CAAA;AACjE,IAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,KAAA;AAAA,QACA,OAAO,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,UAAA;AAAA,QACnC,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GACJ,WAAW,SAAA,EAAW,CAAC,WAAW,cAAA,EAAgB,YAAY,CAAC,CAAA,IAC/D,QAAA,EAAU,OAAA;AACZ,IAAA,MAAM,UAAA,GACJ,QAAQ,QAAA,KAAa,MAAA,IACrB,MAAM,QAAA,KAAa,MAAA,IACnB,OAAA,CAAQ,QAAA,KAAa,KAAA,CAAM,QAAA;AAC7B,IAAA,MAAM,eAAA,GACJ,QAAQ,QAAA,KAAa,MAAA,IACrB,MAAM,QAAA,KAAa,MAAA,IACnB,OAAA,CAAQ,QAAA,KAAa,KAAA,CAAM,QAAA;AAC7B,IAAA,MAAM,gBACJ,UAAA,KAAe,MAAA,IACf,aAAa,MAAA,IACb,oBAAA,CAAqB,YAAY,QAAQ,CAAA;AAI3C,IAAA,IACE,aAAA,CAAc,KAAK,CAAA,KAAM,WAAA,IACzB,mBAAmB,MAAA,IACnB,YAAA,KAAiB,MAAA,IACjB,YAAA,GAAe,cAAA,IACf,CAAC,eAAA,KACA,UAAA,IAAc,iBAAiB,OAAA,CAAA,EAChC;AACA,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,KAAA;AAAA,QACA,KAAA,EAAO,qBAAA;AAAA,QACP,UAAA,EAAY,YAAA;AAAA,QACZ,GAAI,KAAA,CAAM,KAAA,KAAU,OAAA,CAAQ,KAAA,GAAQ,EAAE,QAAA,EAAU,KAAA,CAAM,KAAA,EAAM,GAAI;AAAC,OAClE,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAA2B;AAC5C,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,MAAM,OAAO,CAAA;AAC7C,IAAA,IAAI,CAAC,IAAA,IAAS,IAAA,CAAK,eAAe,UAAA,IAAc,SAAA,CAAU,eAAe,UAAA,EAAa;AACpF,MAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,KAAA,CAAM,OAAA,EAAS,SAAS,CAAA;AAAA,IAC7C;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,iBAAA,CAAkB,CAAA,CAAE,KAAA,EAAO,CAAA,CAAE,KAAK,CAAC,CAAA;AAC9E;AAEA,SAAS,eAAA,CACP,OAAA,EACA,UAAA,EACA,IAAA,EACA,aAAA,EACoB;AACpB,EAAA,MAAM,UAAA,GAAa,WAAW,MAAA,CAAO,CAAC,MAAM,YAAA,CAAa,CAAA,CAAE,KAAK,CAAC,CAAA;AACjE,EAAA,MAAM,YAAA,GAAe,WAAW,MAAA,CAAO,CAAC,MAAM,CAAC,YAAA,CAAa,CAAA,CAAE,KAAK,CAAC,CAAA;AACpE,EAAA,MAAM,cAAc,MAAA,CAAO,MAAA;AAAA,IACzB,CAAC,GAAG,IAAI,IAAI,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,OAAO,CAAC,EAAA,KAAqB,OAAO,MAAS,CAAC,CAAC,CAAA,CAAE,IAAA;AAAA,MAC7F,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,cAAc,CAAC;AAAA;AAC7B,GACF;AAEA,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,KAAK,CAAC,CAAA;AACjE,IAAA,MAAM,kBAAkB,IAAI,GAAA;AAAA,MAC1B,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,QAAA,IAAY,EAAE,CAAA,CAAE,MAAA,CAAO,CAAC,EAAA,KAAO,OAAO,EAAE;AAAA,KACxE;AACA,IAAA,IAAI,YAAA,CAAa,IAAA,GAAO,CAAA,IAAK,eAAA,CAAgB,OAAO,CAAA,EAAG;AACrD,MAAA,OAAO;AAAA,QACL,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,IAAA,EAAM,SAAA;AAAA,QACN,UAAA,EAAY,SAAA;AAAA,QACZ,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,CAAC,+BAA+B,CAAC,CAAA;AAAA,QACtD,kBAAkB,MAAA,CAAO,MAAA;AAAA,UACvB,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC;AAAA,SAC1E;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,IAAA,OAAO;AAAA,MACL,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,IAAA,EAAM,WAAA;AAAA,MACN,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACjC,kBAAkB,MAAA,CAAO,MAAA;AAAA,QACvB,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC;AAAA,OAC1E;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,IAAA,OAAO;AAAA,MACL,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,IAAA,EAAM,WAAA;AAAA,MACN,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,KAAA,EAAO,OAAO,MAAA,CAAO;AAAA,QACnB,IAAA,CAAK,KAAA;AAAA,QACL,YAAA,CAAa,KAAK,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,MAAA,KAAW,MAAS,CAAA,GACjD,kBAAA,GACA;AAAA,OACL,CAAA;AAAA,MACD,gBAAA,EAAkB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,MAClC;AAAA,KACF;AAAA,EACF;AAGA,EAAA,MAAM,WAAA,GAAc,cAAc,OAAO,CAAA;AACzC,EAAA,MAAM,iBAAA,GAAoBA,YAAW,WAAA,EAAa;AAAA,IAChD,WAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,IAAI,sBAAsB,MAAA,IAAa,CAAC,IAAA,CAAK,GAAA,CAAI,iBAAiB,CAAA,EAAG;AACnE,IAAA,OAAO;AAAA,MACL,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,IAAA,EAAM,WAAA;AAAA,MACN,UAAA,EAAY,UAAA;AAAA,MACZ,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,gBAAA,EAAkB,mBAAmB,CAAC,CAAA;AAAA,MAC5D,gBAAA,EAAkB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,MAClC,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,CAAC,iBAAiB,CAAC;AAAA,KAChD;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,MAAA,EAAO,EAAG;AAC/B,IAAA,IAAI,GAAA,CAAI,OAAA,KAAY,OAAA,CAAQ,KAAA,EAAO;AACjC,MAAA,OAAO;AAAA,QACL,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,IAAA,EAAM,WAAA;AAAA,QACN,UAAA,EAAY,UAAA;AAAA,QACZ,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,SAAA,EAAW,4BAA4B,CAAC,CAAA;AAAA,QAC9D,gBAAA,EAAkB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,QAClC,aAAa,MAAA,CAAO,MAAA,CAAO,CAAC,GAAA,CAAI,KAAK,CAAC;AAAA,OACxC;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AACzC,EAAA,MAAM,oBAAA,GAAuB,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,KAAY,QAAQ,KAAK,CAAA;AAC3F,EAAA,MAAM,cAAA,GACJ,eAAe,MAAA,IACf,CAAC,yBACA,UAAA,CAAW,OAAA,KAAY,UACrB,UAAA,CAAW,OAAA,KAAY,UAAa,UAAA,CAAW,OAAA,GAAU,KAC1D,UAAA,CAAW,aAAA,CAAc,OAAO,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA,KAAM,MAAA,CAAA;AAExD,EAAA,IACE,cAAA,IACA,UAAA,EAAY,MAAA,KAAW,OAAA,IACvB,CAAC,aAAA,CAAc,IAAA;AAAA,IACb,CAAC,KAAA,KACC,KAAA,CAAM,KAAA,KAAU,OAAA,CAAQ,SACxB,KAAA,CAAM,OAAA,KAAY,OAAA,CAAQ,OAAA,IAC1B,aAAa,KAAK,CAAA,IAClB,cAAc,KAAK,CAAA,KAAM,cAAc,OAAO;AAAA,GAClD,EACA;AACA,IAAA,OAAO;AAAA,MACL,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,IAAA,EAAM,UAAA;AAAA,MACN,UAAA,EAAY,UAAA,CAAW,OAAA,KAAY,MAAA,GAAY,UAAA,GAAa,YAAA;AAAA,MAC5D,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,0BAAA,EAA4B,qBAAqB,CAAC,CAAA;AAAA,MACxE,gBAAA,EAAkB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,MAClC,aAAa,MAAA,CAAO,MAAA;AAAA,QAClB,WAAW,OAAA,KAAY,MAAA,GAAY,CAAC,UAAA,CAAW,OAAO,IAAI;AAAC;AAC7D,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,IAAA,EAAM,SAAA;AAAA,IACN,UAAA,EAAY,SAAA;AAAA,IACZ,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,CAAC,oCAAoC,CAAC,CAAA;AAAA,IAC3D,gBAAA,EAAkB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,IAClC,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,EAAE;AAAA,GAC/B;AACF;AAOO,SAAS,mBACd,aAAA,EAKA;AACA,EAAA,MAAM,IAAA,GAAO,iBAAiB,aAAa,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,aAAA,CACd,MAAA,CAAO,CAAC,KAAA,KAAU,UAAU,KAAK,CAAC,CAAA,CAClC,IAAA,CAAK,iBAAiB,CAAA;AAEzB,EAAA,MAAM,eAAe,QAAA,CAAS,GAAA;AAAA,IAAI,CAAC,OAAA,KACjC,eAAA,CAAgB,OAAA,EAAS,iBAAA,CAAkB,SAAS,aAAA,EAAe,IAAI,CAAA,EAAG,IAAA,EAAM,aAAa;AAAA,GAC/F;AAEA,EAAA,MAAM,MAAA,uBAAa,GAAA,CAA8C;AAAA,IAC/D,CAAC,WAAA,EAAa,EAAE,CAAA;AAAA,IAChB,CAAC,WAAA,EAAa,EAAE,CAAA;AAAA,IAChB,CAAC,UAAA,EAAY,EAAE,CAAA;AAAA,IACf,CAAC,SAAA,EAAW,EAAE;AAAA,GACf,CAAA;AACD,EAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,IAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,CAAG,KAAK,IAAI,CAAA;AAAA,EAClC;AACA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,EAAQ;AACjC,IAAA,MAAA,CAAO,GAAA;AAAA,MACL,IAAA;AAAA,MACA,MAAA,CAAO,MAAA;AAAA,QACL,CAAC,GAAG,IAAI,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACvB,UAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,EAAE,KAAK,CAAA;AAC3C,UAAA,IAAI,KAAA,KAAU,GAAG,OAAO,KAAA;AACxB,UAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAA;AAAA,QAC1C,CAAC;AAAA;AACH,KACF;AAAA,EACF;AAEA,EAAA,MAAM,iBAAA,GAAuC;AAAA,IAC3C,SAAA,EAAW,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAG,MAAA;AAAA,IACpC,SAAA,EAAW,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,CAAG,MAAA;AAAA,IACpC,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA,CAAG,MAAA;AAAA,IAClC,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,CAAG;AAAA,GAClC;AAEA,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;AAAA,IACxC,cAAA,EAAgB,MAAA;AAAA,IAChB;AAAA,GACF;AACF;;;ACldA,SAAS,MAAM,KAAA,EAAuD;AACpE,EAAA,OAAO,KAAA,CAAM,cAAc,OAAO,KAAA,CAAM,eAAe,QAAA,GACnD,KAAA,CAAM,aACN,EAAC;AACP;AAEA,SAAS,UAAA,CAAW,QAAiC,GAAA,EAAiC;AACpF,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA,GAAK,KAAA,CAAM,IAAA,EAAK,GAAI,MAAA;AAC3E;AAKO,SAAS,wBACd,MAAA,EAIA;AACA,EAAA,MAAM,gBAAqC,EAAC;AAC5C,EAAA,MAAM,cAA6C,EAAC;AACpD,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,OAAA,EAAS,KAAK,CAAC,CAAC,CAAA;AAClE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAE7B,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAkC;AAC9C,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,IAAI,IAAI,IAAA,CAAK,WAAW,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,IAAa,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,eAAe,EAAE,CAAA,CAAA;AAC9F,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,cAAA;AAAA,QACN,aAAa,KAAA,CAAM,QAAA;AAAA,QACnB,WAAW,KAAA,CAAM,OAAA;AAAA,QACjB,YAAY,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,QAAQ,IAAI,UAAA,GAAa,SAAA;AAAA,QACpD,KAAA,EAAO,CAAC,oBAAoB;AAAA,OAC7B,CAAA;AACD,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA,EAAG;AAC7B,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,IAAA,EAAM,gCAAA;AAAA,UACN,OAAA,EAAS,CAAA,SAAA,EAAY,KAAA,CAAM,QAAQ,CAAA,iCAAA,CAAA;AAAA,UACnC,SAAS,KAAA,CAAM;AAAA,SAChB,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,KAAK,CAAA;AACvB,IAAA,MAAM,IAAA,GAAO,8BAAA,CAA+B,GAAG,CAAA,IAAK,EAAC;AACrD,IAAA,MAAM,MAAA,GACJ,GAAA,CAAI,QAAA,IAAY,OAAO,GAAA,CAAI,aAAa,QAAA,GACpC,8BAAA,CAA+B,GAAA,CAAI,QAAmC,CAAA,GACtE,MAAA;AACN,IAAA,MAAM,QAAA,GAAW,EAAE,GAAG,IAAA,EAAM,GAAG,MAAA,EAAO;AAEtC,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,MAAM,MAAA,GAAS,OAAO,IAAA,CAAK,CAAC,cAAc,SAAA,CAAU,KAAA,KAAU,SAAS,OAAO,CAAA;AAC9E,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,UAAA;AAAA,QACN,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,GAAI,MAAA,GAAS,EAAE,WAAW,MAAA,CAAO,OAAA,KAAY,EAAC;AAAA,QAC9C,aAAa,QAAA,CAAS,OAAA;AAAA,QACtB,UAAA,EAAY,SAAS,UAAA,GAAa,YAAA;AAAA,QAClC,KAAA,EAAO,CAAC,oBAAoB;AAAA,OAC7B,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,YAAY,UAAA,CAAW,GAAA,EAAK,WAAW,CAAA,IAAK,UAAA,CAAW,KAAK,aAAa,CAAA;AAC/E,IAAA,IAAI,SAAA,IAAa,QAAA,CAAS,OAAA,KAAY,MAAA,EAAW;AAC/C,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,YAAA;AAAA,QACN,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,WAAA,EAAa,SAAA;AAAA,QACb,UAAA,EAAY,UAAA;AAAA,QACZ,KAAA,EAAO,SAAS,OAAA,KAAY,MAAA,GAAY,CAAC,oBAAA,EAAsB,wBAAwB,CAAA,GAAI,CAAC,wBAAwB;AAAA,OACrH,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,GAAA,EAAK,YAAY,CAAA;AAC/C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,aAAA;AAAA,QACN,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,WAAA,EAAa,UAAA;AAAA,QACb,UAAA,EAAY,UAAA;AAAA,QACZ,KAAA,EAAO,CAAC,uBAAuB;AAAA,OAChC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,GAAA,EAAK,eAAe,CAAA;AACrD,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,gBAAA;AAAA,QACN,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,WAAA,EAAa,aAAA;AAAA,QACb,UAAA,EAAY,UAAA;AAAA,QACZ,KAAA,EAAO,CAAC,0BAA0B;AAAA,OACnC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,GAAA,EAAK,aAAa,CAAA;AACjD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,cAAA;AAAA,QACN,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,GAAI,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA,GAAI,EAAE,SAAA,EAAW,WAAA,EAAY,GAAI,EAAE,WAAA,EAAa,WAAA,EAAY;AAAA,QACpF,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,WAAW,IAAI,UAAA,GAAa,YAAA;AAAA,QACjD,KAAA,EAAO,CAAC,wBAAwB;AAAA,OACjC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,GAAA,EAAK,YAAY,CAAA;AAC/C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,aAAA;AAAA,QACN,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,GAAI,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,GAAI,EAAE,SAAA,EAAW,UAAA,EAAW,GAAI,EAAE,WAAA,EAAa,UAAA,EAAW;AAAA,QACjF,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,UAAU,IAAI,UAAA,GAAa,YAAA;AAAA,QAChD,KAAA,EAAO,CAAC,uBAAuB;AAAA,OAChC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,GAAA,EAAK,YAAY,CAAA;AAC/C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,YAAA;AAAA,QACN,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,GAAI,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA,GAAI,EAAE,SAAA,EAAW,UAAA,EAAW,GAAI,EAAE,WAAA,EAAa,UAAA,EAAW;AAAA,QACjF,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,UAAU,IAAI,UAAA,GAAa,YAAA;AAAA,QAChD,KAAA,EAAO,CAAC,uBAAuB;AAAA,OAChC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,gBAAgB,UAAA,CAAW,GAAA,EAAK,eAAe,CAAA,IAAK,UAAA,CAAW,KAAK,eAAe,CAAA;AACzF,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK;AAAA,QACH,IAAA,EAAM,gBAAA;AAAA,QACN,aAAa,KAAA,CAAM,OAAA;AAAA,QACnB,WAAA,EAAa,aAAA;AAAA,QACb,UAAA,EAAY,UAAA;AAAA,QACZ,KAAA,EAAO,CAAC,0BAA0B;AAAA,OACnC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,GAAA,EAAK,kBAAkB,CAAA;AACtD,IAAA,IACE,WAAA,IACA,WAAA,KAAgB,cAAA,IAChB,CAAC;AAAA,MACC,gBAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF,CAAE,QAAA,CAAS,WAAW,CAAA,EACtB;AACA,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,kCAAA;AAAA,QACN,OAAA,EAAS,gCAAgC,WAAW,CAAA,iCAAA,CAAA;AAAA,QACpD,SAAS,KAAA,CAAM;AAAA,OAChB,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA,IAC1C,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,WAAW;AAAA,GACxC;AACF;;;ACtJO,SAAS,wBACd,MAAA,EACuB;AACvB,EAAA,MAAM,UAAA,GAAa,qBAAqB,MAAM,CAAA;AAC9C,EAAA,MAAM,UAAU,UAAA,CAAW,aAAA;AAC3B,EAAA,MAAM,gBAAgB,OAAA,CAAQ,MAAA;AAAA,IAC5B,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,MAAM,MAAA,KAAW;AAAA,GACvD;AACA,EAAA,MAAM,oBAAoB,MAAA,CAAO,MAAA;AAAA,IAC/B,aAAA,CAAc,GAAA,CAAI,CAAC,KAAA,KAAU,yBAAyB,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC;AAAA,GACjG;AACA,EAAA,MAAM,OAAA,GAAU,mBAAmB,OAAO,CAAA;AAC1C,EAAA,OAAO;AAAA,IACL,eAAe,MAAA,CAAO,MAAA;AAAA,IACtB,mBAAmB,OAAA,CAAQ,MAAA;AAAA,IAC3B,mBAAA,EAAqB,QAAQ,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,MAAA,KAAW,SAAS,CAAA,CAAE,MAAA;AAAA,IAC3E,iBAAA;AAAA,IACA,mBAAmB,aAAA,CAAc,MAAA;AAAA,IACjC,WAAA,EAAa,QAAQ,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,CAAE,MAAA;AAAA,IAChE,gBAAA,EAAkB,WAAW,WAAA,CAAY,MAAA;AAAA,MACvC,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,KAAS;AAAA,KAC1B,CAAE,MAAA;AAAA,IACF,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,mBAAmB,OAAA,CAAQ;AAAA,GAC7B;AACF;AA8CA,IAAM,gCAAA,GAAmC,4BAAA;AAAA,EACvC;AACF,CAAA;AAEA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,KAAA;AAMf,EAAA,OACE,MAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,IAC3B,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,IACzB,OAAO,MAAA,CAAO,MAAA,KAAW,YACzB,KAAA,CAAM,OAAA,CAAQ,OAAO,QAAQ,CAAA;AAEjC;AAEA,SAAS,2BAA2B,KAAA,EAAyB;AAC3D,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,KAAK,KAAK,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,KAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,OACE,OAAO,IAAI,KAAA,KAAU,QAAA,KACpB,IAAI,aAAA,KAAkB,KAAA,IAAS,IAAI,OAAA,KAAY,MAAA,CAAA;AAEpD;AAEA,SAAS,6BACP,KAAA,EAC2C;AAC3C,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA;AAClC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,OACE,OAAO,GAAA,CAAI,OAAA,KAAY,QAAA,KACtB,IAAI,aAAA,KAAkB,KAAA,IACrB,GAAA,CAAI,aAAA,KAAkB,SACtB,GAAA,CAAI,aAAA,KAAkB,KAAA,CAAA,IACxB,OAAO,IAAI,KAAA,KAAU,QAAA;AAEzB;AAEA,SAAS,wBACP,KAAA,EACkC;AAClC,EAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,IAAA,OAAO,KAAA,CAAM,MAAA;AAAA,EACf;AACA,EAAA,IAAI,0BAAA,CAA2B,KAAK,CAAA,EAAG;AACrC,IAAA,MAAM,IAAI,UAAU,gCAAgC,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,4BAAA,CAA6B,KAAK,CAAA,EAAG;AACvC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,UAAU,gCAAgC,CAAA;AACtD;AAWO,SAAS,gBACd,KAAA,EACY;AACZ,EAAA,MAAM,MAAA,GAAS,wBAAwB,KAAK,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,qBAAqB,MAAM,CAAA;AAC9C,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAiC;AACzD,EAAA,MAAM,YAAiC,EAAC;AACxC,EAAA,MAAM,gBAAqC,EAAC;AAE5C,EAAA,KAAA,MAAW,KAAA,IAAS,WAAW,aAAA,EAAe;AAC5C,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,WAAW,SAAA,EAAW;AACvD,MAAA,MAAM,IAAA,GAAO,yBAAyB,KAAK,CAAA;AAC3C,MAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,IAAI,KAAK,EAAC;AACvC,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,MAAA,WAAA,CAAY,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,IAC5B;AACA,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,KAAA,IAAS,KAAA,CAAM,WAAW,SAAA,EAAW;AACtD,MAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,IACtB;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5B,MAAA,aAAA,CAAc,KAAK,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,MAAM,IAAI,CAAA,IAAK,CAAC,GAAG,WAAA,CAAY,OAAA,EAAS,CAAA,EAAG;AACrD,IAAA,WAAA,CAAY,GAAA,CAAI,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,IAAI,CAAC,CAAwB,CAAA;AAAA,EACvE;AAEA,EAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,UAAA,CAAW,aAAa,CAAA;AAC3D,EAAA,MAAM,YAAA,GAAe,wBAAwB,MAAM,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,wBAAwB,MAAM,CAAA;AAE9C,EAAA,OAAO;AAAA,IACL,WAAW,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,MAAM,CAAC,CAAA;AAAA,IACpC,eAAe,UAAA,CAAW,aAAA;AAAA,IAC1B,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,WAAA;AAAA,IACA,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA;AAAA,IAClC,aAAA,EAAe,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA;AAAA,IAC1C,OAAA,EAAS;AAAA,MACP,GAAG,OAAA;AAAA,MACH,mBAAmB,OAAA,CAAQ;AAAA,KAC7B;AAAA,IACA,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,IACxB,eAAe,YAAA,CAAa,aAAA;AAAA,IAC5B,yBAAyB,YAAA,CAAa;AAAA,GACxC;AACF;;;ACtOA,SAAS,UAAA,CACP,IAAA,EACA,OAAA,EACA,MAAA,EACsB;AACtB,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,EAAU,OAAA;AAAA,IACV,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW;AAAC,GAC3C;AACF;AAEA,SAASC,kBAAiB,KAAA,EAAiC;AACzD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA;AACvD;AAEA,SAAS,aAAa,KAAA,EAAoD;AACxE,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,IAAIA,iBAAAA,CAAiB,KAAA,CAAM,KAAK,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,CAAC,CAAA;AACzE,EAAA,IAAIA,iBAAAA,CAAiB,KAAA,CAAM,UAAU,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,YAAA,EAAc,KAAA,CAAM,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA;AACxF,EAAA,IAAIA,iBAAAA,CAAiB,KAAA,CAAM,OAAO,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAA;AAC/E,EAAA,IAAIA,iBAAAA,CAAiB,KAAA,CAAM,YAAY,CAAA,EAAG;AACxC,IAAA,GAAA,CAAI,KAAK,CAAC,cAAA,EAAgB,MAAM,YAAA,CAAa,IAAA,EAAM,CAAC,CAAA;AAAA,EACtD;AACA,EAAA,IAAIA,iBAAAA,CAAiB,KAAA,CAAM,WAAW,CAAA,EAAG;AACvC,IAAA,GAAA,CAAI,KAAK,CAAC,aAAA,EAAe,MAAM,WAAA,CAAY,IAAA,EAAM,CAAC,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,iBAAA,CACP,MACA,IAAA,EACM;AACN,EAAA,IAAI,CAAC,IAAA,EAAM;AACX,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAE3C;AACD,IAAA,IAAI,UAAU,MAAA,EAAW;AACzB,IAAA,IAAI,IAAA,CAAK,GAAG,CAAA,KAAM,MAAA,EAAW;AAC3B,MAAC,IAAA,CAAiC,GAAG,CAAA,GAAI,KAAA;AAAA,IAC3C;AAAA,EACF;AACF;AAMO,SAAS,sBAAA,CACd,QACA,KAAA,EACyB;AACzB,EAAA,MAAM,YAAqC,EAAC;AAC5C,EAAA,MAAM,WAAoC,EAAC;AAC3C,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,KAAA,CAAM,UAAU,KAAA,EAAO;AAC3B,IAAA,MAAMH,SAAQ,KAAA,CAAM,UAAA;AACpB,IAAA,IAAI,CAACA,MAAAA,IAAS,OAAOA,MAAAA,KAAU,QAAA,EAAU;AACzC,IAAA,MAAM,MAAA,GAAS,+BAA+BA,MAAK,CAAA;AACnD,IAAA,MAAM,MAAA,GACJA,MAAAA,CAAM,QAAA,IAAY,OAAOA,MAAAA,CAAM,aAAa,QAAA,GACxC,8BAAA,CAA+BA,MAAAA,CAAM,QAAmC,CAAA,GACxE,MAAA;AACN,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,iBAAA,CAAkB,KAAK,MAAM,CAAA;AAC7B,IAAA,iBAAA,CAAkB,KAAK,MAAM,CAAA;AAC7B,IAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACxB,MAAA,iBAAA,CAAkB,WAAW,GAAG,CAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,iBAAA,CAAkB,UAAU,GAAG,CAAA;AAAA,IACjC;AAAA,EACF;AACA,EAAA,iBAAA,CAAkB,WAAW,QAAQ,CAAA;AACrC,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAA8C;AAClE,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,CAAC,IAAA,EAAM,GAAG,YAAA,CAAa,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AACvE;AAEA,SAAS,sBAAA,CACP,KACA,WAAA,EACyB;AACzB,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,IAAI,CAAC,CAAC,CAAA;AACpE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA;AACjC,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAA4B;AACzC,IAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC1B,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,EAAU,KAAA,CAAM,KAAK,CAAA;AAAA,EAChD,CAAA;AACA,EAAA,KAAA,CAAM,IAAI,CAAA;AACV,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,UAAA,CAAW,OAA+B,IAAA,EAAkC;AACnF,EAAA,MAAM,MAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,EAAG;AACnC,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,GAAG,IAAA;AAAA,MACH,QAAA,EAAU,UAAA,CAAW,IAAA,CAAK,QAAA,EAAU,IAAI;AAAA,KACzC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,YAAA,CACP,KAAA,EACA,GAAA,EACA,QAAA,EACwD;AACxD,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,KAAU,GAAA,CAAI,KAAK,CAAA;AAC/E,EAAA,MAAM,eAAA,GACJ,QAAA,KAAa,MAAA,GACT,SAAA,GACA,UAAU,MAAA,CAAO,CAAC,KAAA,KAAU,QAAA,CAAS,IAAI,KAAA,CAAM,OAAO,CAAA,IAAK,KAAA,CAAM,SAAS,KAAK,CAAA;AACrF,EAAA,MAAM,iBAAA,GACJ,aAAa,MAAA,GAAY,GAAA,CAAI,WAAW,UAAA,CAAW,GAAA,CAAI,UAAU,QAAQ,CAAA;AAC3E,EAAA,MAAM,YAAA,GAA+B;AAAA,IACnC,GAAG,GAAA;AAAA,IACH,QAAA,EAAU,iBAAA;AAAA,IACV,QAAA,EAAU;AAAA,MACR,GAAG,GAAA,CAAI,QAAA;AAAA,MACP,WAAA,EAAa,YAAA,CAAa,iBAAiB,CAAA,CAAE;AAAA;AAC/C,GACF;AACA,EAAA,OAAO;AAAA,IACL,oBAAoB,eAAA,CAAgB,MAAA;AAAA,IACpC,KAAA,EAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,WAAA,EAAa,YAAA;AAAA,MACb,IAAA,EAAM;AAAA,QACJ,GAAG,KAAA,CAAM,IAAA;AAAA,QACT,IAAA,EAAM,CAAC,YAAY,CAAA;AAAA,QACnB,MAAA,EAAQ;AAAA;AACV;AACF,GACF;AACF;AAMO,SAAS,yBAAA,CACd,OACA,KAAA,EAC2E;AAC3E,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,EAAE,WAAA,EAAa,EAAC,EAAE;AAAA,EAC3B;AACA,EAAA,MAAM,OAAA,GAAU,aAAa,KAAK,CAAA;AAClC,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO;AAAA,MACL,WAAA,EAAa;AAAA,QACX,UAAA;AAAA,UACE,yBAAA;AAAA,UACA,yHAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AACnD,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,CAAO,CAAC,CAAC,GAAG,CAAA,KAAM,QAAQ,aAAa,CAAA;AACjE,EAAA,MAAM,cAAc,gBAAA,CAAiB,WAAA;AAErC,EAAA,IAAI,UAAA,GAAa,CAAC,GAAG,KAAA,CAAM,KAAK,IAAI,CAAA;AAEpC,EAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,IAAA,UAAA,GAAa,WAAW,MAAA,CAAO,CAACI,SAAQA,IAAAA,CAAI,KAAA,KAAU,iBAAiB,KAAK,CAAA;AAAA,EAC9E;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,SAAA,EAAW;AACpC,IAAA,IAAI,QAAQ,OAAA,EAAS;AACrB,IAAA,UAAA,GAAa,UAAA,CAAW,MAAA,CAAO,CAACA,IAAAA,KAAQ;AACtC,MAAA,MAAM,OAAO,sBAAA,CAAuB,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQA,KAAI,KAAK,CAAA;AAChE,MAAA,MAAM,MAAA,GAAS,KAAK,GAAgD,CAAA;AACpE,MAAA,OAAO,MAAA,KAAW,KAAA;AAAA,IACpB,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,WAAA,IAAe,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AACzC,IAAA,UAAA,GAAa,UAAA,CAAW,MAAA;AAAA,MAAO,CAACA,IAAAA,KAC9B,YAAA,CAAaA,IAAAA,CAAI,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,OAAA,KAAY,WAAW;AAAA,KAC9E;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO;AAAA,MACL,WAAA,EAAa;AAAA,QACX,UAAA;AAAA,UACE,iCAAA;AAAA,UACA,CAAA,4CAAA,EAA+C,IAAA,CAAK,SAAA,CAAU,gBAAgB,CAAC,CAAA,iEAAA,CAAA;AAAA,UAC/E;AAAA;AACF;AACF,KACF;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,OAAO;AAAA,MACL,WAAA,EAAa;AAAA,QACX,UAAA;AAAA,UACE,iCAAA;AAAA,UACA,CAAA,4BAAA,EAA+B,WAAW,MAAM,CAAA,YAAA,EAAe,KAAK,SAAA,CAAU,gBAAgB,CAAC,CAAA,UAAA,EAAa,UAAA,CACzG,IAAI,CAACA,IAAAA,KAAQA,KAAI,KAAK,CAAA,CACtB,MAAK,CACL,IAAA,CAAK,IAAI,CAAC,CAAA,4DAAA,CAAA;AAAA,UACb;AAAA;AACF;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,WAAW,CAAC,CAAA;AACxB,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,QAAA,GAAW,sBAAA,CAAuB,KAAK,WAAW,CAAA;AAClD,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,OAAO;AAAA,QACL,WAAA,EAAa;AAAA,UACX,UAAA;AAAA,YACE,4BAAA;AAAA,YACA,CAAA,gCAAA,EAAmC,WAAW,CAAA,sBAAA,EAAyB,GAAA,CAAI,KAAK,CAAA,CAAA,CAAA;AAAA,YAChF;AAAA;AACF;AACF,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,YAAA,CAAa,KAAA,EAAO,GAAA,EAAK,QAAQ,CAAA;AACnD,EAAA,OAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,KAAgB,EAAC;AAAA,MACnD,gBAAA;AAAA,MACA,oBAAoB,SAAA,CAAU,kBAAA;AAAA,MAC9B,OAAO,SAAA,CAAU;AAAA,KACnB;AAAA,IACA,aAAa;AAAC,GAChB;AACF;;;AC1QA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,MAAM,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,GAAG,CAAA;AACrD;AAMO,SAAS,kBAAA,CACd,UACA,OAAA,EACoD;AACpD,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,QAAA,EAAS;AAAA,EACxC;AACA,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,EACxB;AACA,EAAA,MAAM,MAAA,GAAS,QAAQ,KAAA,CAAM,CAAC,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,WAAW,CAAA;AAC1D,EAAA,IAAI,OAAA,GAAmB,QAAA;AACvB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,EAAW;AAC7C,MAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,IACxB;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,IAAI,CAAC,mBAAA,CAAoB,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,QAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,MACxB;AACA,MAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,MAAA,IAAI,KAAA,IAAS,QAAQ,MAAA,EAAQ;AAC3B,QAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,MACxB;AACA,MAAA,OAAA,GAAU,QAAQ,KAAK,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,IACxB;AACA,IAAA,MAAM,MAAA,GAAS,OAAA;AACf,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,eAAe,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACxD,MAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,IACxB;AACA,IAAA,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,OAAA,EAAQ;AACvC;AAkBA,SAAS,SAAS,KAAA,EAAwB;AACxC,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,OAAA;AACjC,EAAA,OAAO,OAAO,KAAA;AAChB;AAEA,SAAS,WAAA,CAAY,MAAe,KAAA,EAAyB;AAC3D,EAAA,OAAO,KAAK,SAAA,CAAU,IAAI,CAAA,KAAM,IAAA,CAAK,UAAU,KAAK,CAAA;AACtD;AAWO,SAAS,2BAA2B,KAAA,EAGF;AACvC,EAAA,MAAMJ,MAAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,EAAC;AACnC,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,WAAA,EAAa,OAAA,EAAS,eAAe,CAAA,EAAY;AAClE,IAAA,MAAM,SAAA,GAAYA,OAAM,GAAG,CAAA;AAC3B,IAAA,IAAI,cAAc,MAAA,IAAa,SAAA,KAAc,IAAA,IAAQ,OAAO,cAAc,QAAA,EAAU;AAClF,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,SAAA,EAAU;AAAA,IAC3C;AAAA,EACF;AACA,EAAA,IACE,KAAA,CAAM,iBAAiB,MAAA,IACvB,KAAA,CAAM,iBAAiB,IAAA,IACvB,OAAO,KAAA,CAAM,YAAA,KAAiB,QAAA,EAC9B;AACA,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,MAAM,YAAA,EAAa;AAAA,EACpD;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,MAAA,EAAU;AAC5C;AAEO,SAAS,yBAAA,CACd,KAAA,EACA,KAAA,EACA,eAAA,EACkB;AAClB,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAM,6CAAA;AAAA,MACN,SAAS,CAAA,kDAAA,EAAqD,KAAA,CAAM,IAAI,CAAA,IAAA,EAAO,MAAM,IAAI,CAAA,CAAA;AAAA,KAC3F;AAAA,EACF;AACA,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,KAAA,EAAO,KAAA,CAAM,IAAI,CAAA;AACrD,EAAA,IAAI,KAAA,CAAM,aAAa,QAAA,EAAU;AAC/B,IAAA,OAAO,QAAA,CAAS,KAAA,GACZ,EAAE,MAAA,EAAQ,QAAO,GACjB;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,gCAAA;AAAA,MACN,SAAS,CAAA,cAAA,EAAiB,KAAA,CAAM,IAAI,CAAA,kBAAA,EAAqB,MAAM,IAAI,CAAA,CAAA;AAAA,KACrE;AAAA,EACN;AACA,EAAA,IAAI,CAAC,SAAS,KAAA,EAAO;AACnB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAM,6CAAA;AAAA,MACN,SAAS,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAI,CAAA,kBAAA,EAAqB,MAAM,IAAI,CAAA,CAAA;AAAA,KAC5D;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,aAAa,MAAA,EAAQ;AAC7B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA;AACtC,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAW;AAC5B,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,uCAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACX;AAAA,IACF;AACA,IAAA,OAAO,WAAW,KAAA,CAAM,IAAA,GACpB,EAAE,MAAA,EAAQ,QAAO,GACjB;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,6BAAA;AAAA,MACN,OAAA,EAAS,CAAA,cAAA,EAAiB,KAAA,CAAM,IAAI,CAAA,IAAA,EAAO,KAAA,CAAM,IAAI,CAAA,UAAA,EAAa,KAAA,CAAM,IAAI,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA;AAAA,KAC/F;AAAA,EACN;AACA,EAAA,IAAI,KAAA,CAAM,aAAa,QAAA,EAAU;AAC/B,IAAA,OAAO,WAAA,CAAY,SAAS,KAAA,EAAO,KAAA,CAAM,QAAQ,CAAA,GAC7C,EAAE,MAAA,EAAQ,MAAA,EAAO,GACjB;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,+BAAA;AAAA,MACN,SAAS,CAAA,SAAA,EAAY,KAAA,CAAM,IAAI,CAAA,UAAA,EAAa,MAAM,IAAI,CAAA,6CAAA;AAAA,KACxD;AAAA,EACN;AACA,EAAA,IAAI,KAAA,CAAM,aAAa,OAAA,EAAS;AAC9B,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,IAAS,EAAC;AAChC,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,uCAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACX;AAAA,IACF;AACA,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,WAAA,CAAY,QAAA,CAAS,KAAA,EAAO,MAAM,CAAC,CAAA,GAC/D,EAAE,MAAA,EAAQ,QAAO,GACjB;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,+BAAA;AAAA,MACN,SAAS,CAAA,SAAA,EAAY,KAAA,CAAM,IAAI,CAAA,UAAA,EAAa,MAAM,IAAI,CAAA,kCAAA;AAAA,KACxD;AAAA,EACN;AACA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAM,uCAAA;AAAA,IACN,OAAA,EAAS,CAAA,qBAAA;AAAA,GACX;AACF;;;ACxLA,SAAS,wBAAwB,KAAA,EAAwB;AACvD,EAAA,OAAO,QAAA,CAAS,KAAK,KAAK,CAAA;AAC5B;AAOO,SAAS,sBAAsB,KAAA,EAAuB;AAC3D,EAAA,OAAO,KAAA,CACJ,OAAA,CAAQ,oBAAA,EAAsB,OAAO,CAAA,CACrC,WAAA,EAAY,CACZ,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,YAAY,EAAE,CAAA;AAC3B;AAGO,IAAM,mCAAwD,IAAI,GAAA;AAAA,EACvE;AAAA,IACE,QAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,CAAE,IAAI,qBAAqB;AAC7B,CAAA;AAEO,IAAM,iCAAA,GAAoC;AAAA,EAC/C,eAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,qBAAqB,UAAA,EAA6B;AACzD,EAAA,IAAI,gCAAA,CAAiC,GAAA,CAAI,UAAU,CAAA,EAAG,OAAO,KAAA;AAC7D,EAAA,IAAI,UAAA,KAAe,SAAS,OAAO,IAAA;AAEnC,EAAA,IAAI,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,KAAA;AAC1C,EAAA,OAAO,UAAA,CAAW,SAAS,OAAO,CAAA;AACpC;AAUO,SAAS,wBAAA,CACd,GAAA,EACA,aAAA,GAAmC,iCAAA,EAC1B;AACT,EAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AACjB,EAAA,MAAM,UAAA,GAAa,sBAAsB,GAAG,CAAA;AAC5C,EAAA,IAAI,CAAC,YAAY,OAAO,KAAA;AACxB,EAAA,IAAI,gCAAA,CAAiC,GAAA,CAAI,UAAU,CAAA,EAAG,OAAO,KAAA;AAE7D,EAAA,MAAM,mBAAA,GAAsB,wBAAwB,GAAG,CAAA;AAEvD,EAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,IAAA,MAAM,CAAA,GAAI,sBAAsB,SAAS,CAAA;AACzC,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,IAAI,MAAM,OAAA,EAAS;AACjB,MAAA,IAAI,oBAAA,CAAqB,UAAU,CAAA,EAAG,OAAO,IAAA;AAC7C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,UAAA,KAAe,GAAG,OAAO,IAAA;AAE7B,IAAA,IAAI,WAAW,QAAA,CAAS,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,GAAG,OAAO,IAAA;AACzC,IAAA,IAAI,uBAAuB,UAAA,CAAW,UAAA,CAAW,GAAG,CAAC,CAAA,CAAA,CAAG,GAAG,OAAO,IAAA;AAAA,EACpE;AACA,EAAA,OAAO,KAAA;AACT;;;AC8fA,IAAM,aAAA,GAAoD;AAAA,EACxD,KAAA,EAAO,CAAA;AAAA,EACP,OAAA,EAAS,CAAA;AAAA,EACT,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,WAAA,GAAuD;AAAA,EAC3D,IAAA,EAAM,CAAA;AAAA,EACN,OAAA,EAAS,CAAA;AAAA,EACT,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,eAAA,GAAyD;AAAA,EAC7D,OAAA,EAAS,CAAA;AAAA,EACT,SAAA,EAAW,CAAA;AAAA,EACX,UAAA,EAAY,CAAA;AAAA,EACZ,QAAA,EAAU;AACZ,CAAA;AAEA,IAAM,sBAAA,GAAyB,iCAAA;AAE/B,IAAM,wBAAA,GAA2B;AAAA,EAC/B,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA;AAAA,EAEA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA;AAGA,IAAM,sCAAA,GAAyC;AAAA,EAC7C,YAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,oBAAA,uBAA2B,GAAA,CAAI;AAAA,EACnC,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,uBAAA,GAA0D;AAAA,EAC9D,EAAE,EAAA,EAAI,cAAA,EAAgB,OAAA,EAAS,mCAAA,EAAoC;AAAA,EACnE,EAAE,EAAA,EAAI,YAAA,EAAc,OAAA,EAAS,uBAAA,EAAwB;AAAA,EACrD,EAAE,EAAA,EAAI,gBAAA,EAAkB,OAAA,EAAS,kBAAA,EAAmB;AAAA,EACpD,EAAE,EAAA,EAAI,cAAA,EAAgB,OAAA,EAAS,4BAAA,EAA6B;AAAA;AAAA,EAE5D;AAAA,IACE,EAAA,EAAI,kBAAA;AAAA,IACJ,OAAA,EACE;AAAA;AAEN,CAAA;AASA,SAAS,cAAA,CAAe,GAAuB,CAAA,EAA+B;AAC5E,EAAA,OAAA,CAAQ,CAAA,IAAK,EAAA,EAAI,aAAA,CAAc,CAAA,IAAK,EAAE,CAAA;AACxC;AAEA,SAASK,WAAAA,CACP,IAAA,EACA,OAAA,EACA,MAAA,EACsB;AACtB,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,EAAU,OAAA;AAAA,IACV,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW;AAAC,GAC7B;AACF;AAEA,SAAS,YAAA,GAAkC;AACzC,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,QAAA,EAAU,CAAA;AAAA,IACV,MAAA,EAAQ,CAAA;AAAA,IACR,cAAA,EAAgB;AAAA,GAClB;AACF;AAEA,SAAS,YACP,KAAA,EACA,WAAA,EACA,WAAA,EACA,cAAA,GAAqD,EAAC,EACpC;AAClB,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA,EAAQ,OAAA;AAAA,IACR,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA;AAAA,IACnB,GAAI,WAAA,GAAc,EAAE,OAAO,WAAA,CAAY,KAAA,KAAU,EAAC;AAAA,IAClD,OAAA,EAAS;AAAA,MACP,GAAG,YAAA,EAAa;AAAA,MAChB,MAAA,EAAQ,YAAY,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,QAAA,KAAa,OAAO,CAAA,CAAE,MAAA;AAAA,MAChE,gBAAgB,cAAA,CAAe;AAAA,KACjC;AAAA,IACA,UAAU,EAAC;AAAA,IACX,WAAA,EAAa,CAAC,GAAG,WAAW,CAAA;AAAA,IAC5B,cAAA,EAAgB,CAAC,GAAG,cAAc;AAAA,GACpC;AACF;AAEA,SAASC,cAAa,KAAA,EAA8C;AAClE,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,CAAC,IAAA,EAAM,GAAGA,aAAAA,CAAa,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AACvE;AAEA,SAAS,UAAA,CAAW,OAAwB,WAAA,EAA+C;AACzF,EAAA,MAAM,aAAa,WAAA,GAAc,CAAC,WAAW,CAAA,GAAI,MAAM,IAAA,CAAK,IAAA;AAC5D,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAK,CAAC,CAAA;AAC/D,EAAA,MAAM,eACJ,WAAA,KAAgB,MAAA,GACZ,KAAA,CAAM,IAAA,CAAK,SACX,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,KAAK,CAAC,CAAA;AACvE,EAAA,MAAM,KAAA,GAAQA,cAAa,UAAA,CAAW,OAAA,CAAQ,CAAC,GAAA,KAAQ,GAAA,CAAI,QAAQ,CAAC,CAAA;AACpE,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAyB;AACpD,EAAA,MAAM,kBAAA,uBAAyB,GAAA,EAA2B;AAE1D,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,IAAI,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,QAAA;AAC5B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,GAAA,CAAI,QAAQ,KAAK,EAAC;AACtD,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAClB,MAAA,kBAAA,CAAmB,GAAA,CAAI,UAAU,QAAQ,CAAA;AAAA,IAC3C;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,qBAAqB,YAAY,CAAA;AACpD,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA;AAAA,IACnB,IAAA,EAAM,OAAO,MAAA,CAAO,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IACxC,QAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,YAAY,CAAC,CAAA;AAAA,IACvC,eAAe,UAAA,CAAW,aAAA;AAAA,IAC1B,8BAA8B,UAAA,CAAW,WAAA;AAAA,IACzC,cAAA,EAAgB,OAAO,MAAA,CAAO,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,IACtD,iBAAA,EAAmB,OAAO,MAAA,CAAO,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,iBAAiB,CAAC,CAAA;AAAA,IAClE,WAAA,EAAa,OAAO,MAAA,CAAO,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,WAAW,CAAC,CAAA;AAAA,IACtD,cAAA;AAAA,IACA,kBAAA;AAAA,IACA,SAAA,EAAW,OAAO,MAAA,CAAO,UAAA,CAAW,QAAQ,CAAC,GAAA,KAAQ,GAAA,CAAI,QAAQ,CAAC;AAAA,GACpE;AACF;AAEA,SAAS,kBAAA,CACP,OACA,KAAA,EAC+D;AAC/D,EAAA,IAAI,MAAM,WAAA,EAAa;AACrB,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,WAAA,CAAY,KAAA,KAAU,KAAA,EAAO;AAC9C,MAAA,OAAO;AAAA,QACL,WAAA,EAAa;AAAA,UACXD,WAAAA;AAAA,YACE,4BAAA;AAAA,YACA,CAAA,aAAA,EAAgB,KAAA,CAAM,WAAA,CAAY,KAAK,iCAAiC,KAAK,CAAA,CAAA;AAAA;AAC/E;AACF,OACF;AAAA,IACF;AACA,IAAA,OAAO,EAAE,GAAA,EAAK,KAAA,CAAM,WAAA,EAAa,WAAA,EAAa,EAAC,EAAE;AAAA,EACnD;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAAC,SAAA,KAAc,SAAA,CAAU,KAAA,KAAU,KAAK,CAAA;AACzE,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO;AAAA,QACL,WAAA,EAAa;AAAA,UACXA,WAAAA,CAAW,iCAAA,EAAmC,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAA,CAAG;AAAA;AAC1E,OACF;AAAA,IACF;AACA,IAAA,OAAO,EAAE,GAAA,EAAK,WAAA,EAAa,EAAC,EAAE;AAAA,EAChC;AAEA,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAChC,IAAA,OAAO,EAAE,KAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,WAAA,EAAa,EAAC,EAAE;AAAA,EACpD;AAEA,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAChC,IAAA,OAAO;AAAA,MACL,WAAA,EAAa;AAAA,QACXA,WAAAA;AAAA,UACE,iCAAA;AAAA,UACA,4BAAA;AAAA,YACE,0CAAA;AAAA,YACA;AAAA;AACF;AACF;AACF,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,WAAA,EAAa;AAAA,MACXA,WAAAA;AAAA,QACE,iCAAA;AAAA,QACA,6BAA6B,0CAA0C;AAAA;AACzE;AACF,GACF;AACF;AAEA,SAAS,WAAA,CACP,OACA,WAAA,EACkE;AAClE,EAAA,MAAM,cAAsC,EAAC;AAC7C,EAAA,MAAM,IAAA,uBAAW,GAAA,EAA4B;AAE7C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACrB,MAAA,WAAA,CAAY,IAAA;AAAA,QACVA,YAAW,yBAAA,EAA2B,CAAA,+BAAA,EAAkC,KAAK,EAAE,CAAA,CAAA,CAAA,EAAK,KAAK,EAAE;AAAA,OAC7F;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACzC,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,WAAW,CAAA;AACpC,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU;AACzB,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AACjB,QAAA,WAAA,CAAY,IAAA;AAAA,UACVA,WAAAA,CAAW,yBAAA,EAA2B,CAAA,6BAAA,EAAgC,EAAE,KAAK,EAAE;AAAA,SACjF;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,SAAS,GAAA,CAAI,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,KAAK,YAAY,CAAA;AAAA,MACnF;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,YAAY,CAAA,EAAG,WAAA,EAAY;AACrE;AAEA,SAAS,YAAA,CAAa,GAAmB,CAAA,EAA2B;AAClE,EAAA,OAAO,CAAA,CAAE,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,EAAE,CAAA;AAChC;AAEA,SAAS,cAAA,CACP,SACA,SAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAA,EAAG,OAAA;AACrC,EAAA,OAAO,UAAU,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,EAAG,aAAa,EAAA,GAAK,EAAA;AAC7D;AAEA,SAAS,gBACP,SAAA,EACwD;AACxD,EAAA,OAAO,CAAC,GAAG,CAAA,KAAM;AACf,IAAA,IAAI,cAAc,CAAA,CAAE,QAAQ,MAAM,aAAA,CAAc,CAAA,CAAE,QAAQ,CAAA,EAAG;AAC3D,MAAA,OAAO,cAAc,CAAA,CAAE,QAAQ,CAAA,GAAI,aAAA,CAAc,EAAE,QAAQ,CAAA;AAAA,IAC7D;AACA,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,MAAA,CAAO,aAAA,CAAc,EAAE,MAAM,CAAA;AAC9C,IAAA,IAAI,MAAA,KAAW,GAAG,OAAO,MAAA;AACzB,IAAA,IAAI,YAAY,CAAA,CAAE,MAAM,MAAM,WAAA,CAAY,CAAA,CAAE,MAAM,CAAA,EAAG;AACnD,MAAA,OAAO,YAAY,CAAA,CAAE,MAAM,CAAA,GAAI,WAAA,CAAY,EAAE,MAAM,CAAA;AAAA,IACrD;AACA,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,KAAK,CAAA;AACvE,IAAA,IAAI,KAAA,KAAU,GAAG,OAAO,KAAA;AACxB,IAAA,MAAM,MAAA,GAAS,eAAe,CAAA,EAAG,SAAS,EAAE,aAAA,CAAc,cAAA,CAAe,CAAA,EAAG,SAAS,CAAC,CAAA;AACtF,IAAA,IAAI,MAAA,KAAW,GAAG,OAAO,MAAA;AACzB,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,OAAO,CAAA;AAC7E,IAAA,IAAI,OAAA,KAAY,GAAG,OAAO,OAAA;AAC1B,IAAA,OAAO,cAAA,CAAe,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,EAChE,CAAA;AACF;AAEA,SAAS,gBAAA,CAAiB,MAAsB,OAAA,EAA+C;AAC7F,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAK,EAAA;AAAA,IAC/B,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,IAAA,CAAK,eAAA;AAAA,IACnC,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,GAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS,GAAI,EAAC;AAAA,IACvE,GAAI,QAAQ,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO,GAAI,EAAC;AAAA,IACjE,UAAU,CAAC,GAAI,OAAA,CAAQ,QAAA,IAAY,EAAG,CAAA;AAAA,IACtC,GAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS,GAAI,EAAC;AAAA,IACvE,GAAI,QAAQ,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAW,GAAI,EAAC;AAAA,IAC7E,GAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS,GAAI,EAAC;AAAA,IACvE,GAAI,QAAQ,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO,GAAI;AAAC,GACnE;AACF;AAEA,SAAS,SAAA,CACP,QAAA,EACA,WAAA,EACA,cAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,SAAS,MAAA,CAAO,CAAC,YAAY,OAAA,CAAQ,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAAA,IAChE,QAAQ,QAAA,CAAS,MAAA;AAAA,MACf,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,QAAQ,QAAA,KAAa;AAAA,KACjE,CAAE,MAAA;AAAA,IACF,UAAU,QAAA,CAAS,MAAA;AAAA,MACjB,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,KAAW,SAAA,IAAa,QAAQ,QAAA,KAAa;AAAA,KACpE,CAAE,MAAA;AAAA,IACF,MAAA,EAAQ,YAAY,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,QAAA,KAAa,OAAO,CAAA,CAAE,MAAA;AAAA,IAChE;AAAA,GACF;AACF;AAEA,SAAS,qBAAA,CACP,UACA,KAAA,EAC+B;AAE/B,EAAA,IAAI,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,WAAW,MAAA,IAAU,OAAA,CAAQ,QAAA,KAAa,OAAO,CAAA,EAAG;AACzF,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IACE,QAAA,CAAS,IAAA;AAAA,IACP,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,KAAW,SAAA,IAAa,QAAQ,QAAA,KAAa;AAAA,GACpE,EACA;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAASE,WAAAA,CAAW,OAA8B,IAAA,EAA6C;AAC7F,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,GAAa,GAAG,CAAA;AACpC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AAAA,EAC/D;AACA,EAAA,OAAO,MAAA;AACT;AAQA,SAAS,kBAAA,CACP,OACA,IAAA,EACoB;AACpB,EAAA,MAAM,QAAA,GAAW,MAAM,UAAA,EAAY,QAAA;AACnC,EAAA,IAAI,OAAO,aAAa,QAAA,IAAY,QAAA,KAAa,QAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAChF,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,QAAA;AACf,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,KAAM,IAAI,OAAO,KAAA;AAAA,EAC/D;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAA,CAAY,OAA8B,IAAA,EAA6C;AAC9F,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,GAAa,GAAG,CAAA;AACpC,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,GAAG,OAAO,KAAA;AAAA,EAClE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAA,CAAY,OAA8B,IAAA,EAA8C;AAC/F,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,GAAa,GAAG,CAAA;AACpC,IAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,KAAA;AAAA,EACzC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAA,CAAY,MAAc,QAAA,EAAqC;AACtE,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,IAAA,CAAK,WAAW,MAAM,CAAA,SAAU,IAAA,CAAK,KAAA,CAAM,OAAO,MAAM,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAA,CAAc,OAA8B,IAAA,EAAmC;AACtF,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,OAAA,EAAS,MAAM,KAAA,EAAO,OAAA;AAAA,IACtB,MAAA,EAAQ,MAAM,KAAA,EAAO,MAAA;AAAA,IACrB,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,GAAI,IAAA,GAAO,EAAE,IAAA,KAAS;AAAC,GACzB;AACF;AAEA,SAAS,YAAY,GAAA,EAAuD;AAC1E,EAAA,OAAO,GAAA,GAAM,CAAC,EAAE,KAAA,EAAO,IAAI,KAAA,EAAO,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,EAAC;AAC7E;AAWA,SAAS,YACP,MAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACA,QACA,IAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA,EAAU,MAAM,QAAA,IAAY,OAAA;AAAA,IAC5B,MAAA,EAAQ,MAAM,MAAA,IAAU,MAAA;AAAA,IACxB,OAAA;AAAA,IACA,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa,EAAC;AAAA,IAC7C,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,IACzC,QAAA,EAAU,CAAC,GAAG,QAAQ,CAAA;AAAA,IACtB,GAAI,MAAM,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAS,GAAI,EAAC;AAAA,IAClE,GAAI,MAAM,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,IAAA,CAAK,UAAA,EAAW,GAAI,EAAC;AAAA,IACxE,GAAI,MAAM,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAS,GAAI,EAAC;AAAA,IAClE,GAAI,MAAM,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAO,GAAI;AAAC,GAC9D;AACF;AAEA,SAAS,SAAS,KAAA,EAAsC;AACtD,EAAA,OAAO,yBAAyB,KAAK,CAAA;AACvC;AAMA,SAAS,eACP,OAAA,EACkC;AAClC,EAAA,OAAO,OAAA,CAAQ,iBAAiB,OAAA,CAAQ,MAAA;AAC1C;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,MAAM,OAAO,CAAC,OAAA,EAAS,SAAA,EAAW,iBAAA,EAAmB,aAAa,YAAY,CAAA;AAC9E,EAAA,OACEA,YAAW,KAAA,EAAO,IAAI,CAAA,IACtB,kBAAA,CAAmB,OAAO,IAAI,CAAA,IAC9B,WAAA,CAAY,KAAA,CAAM,MAAM,CAAC,MAAA,EAAQ,aAAA,EAAe,gBAAA,EAAkB,SAAS,CAAC,CAAA;AAEhF;AAEA,SAAS,YAAY,KAAA,EAAkD;AACrE,EAAA,MAAM,IAAA,GAAO,CAAC,UAAA,EAAY,cAAA,EAAgB,eAAe,CAAA;AACzD,EAAA,OAAOA,YAAW,KAAA,EAAO,IAAI,CAAA,IAAK,kBAAA,CAAmB,OAAO,IAAI,CAAA;AAClE;AAEA,SAAS,gBAAgB,KAAA,EAAkD;AACzE,EAAA,MAAM,IAAA,GAAO,CAAC,cAAA,EAAgB,iBAAA,EAAmB,eAAe,CAAA;AAChE,EAAA,OAAOA,YAAW,KAAA,EAAO,IAAI,CAAA,IAAK,kBAAA,CAAmB,OAAO,IAAI,CAAA;AAClE;AAEA,SAAS,WAAW,KAAA,EAAkD;AACpE,EAAA,OAAO,YAAY,KAAA,EAAO,CAAC,cAAc,cAAA,EAAgB,eAAA,EAAiB,SAAS,CAAC,CAAA;AACtF;AAEA,SAAS,cAAA,CAAe,SAA4B,IAAA,EAA+D;AACjH,EAAA,OAAO,cAAA,CAAe,OAAO,CAAA,CAAE,MAAA;AAAA,IAC7B,CAAC,WACE,IAAA,KAAS,MAAA,IAAa,MAAM,IAAA,KAAS,IAAA,KACtC,MAAM,MAAA,KAAW;AAAA,GACrB;AACF;AAMA,SAAS,qBAAqB,OAAA,EAAqD;AACjF,EAAA,OAAO,cAAA,CAAe,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,MAAM,CAAA;AACxE;AAEA,SAAS,iBAAiB,MAAA,EAA+D;AACvF,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,EAAA,KAAA,MAAW,CAAC,QAAA,EAAU,KAAK,CAAA,IAAK,MAAA,CAAO,SAAQ,EAAG;AAChD,IAAA,MAAM,IAAA,GAAO,SAAS,KAAK,CAAA;AAC3B,IAAA,IAAI,CAAC,MAAM,GAAA,CAAI,IAAI,GAAG,KAAA,CAAM,GAAA,CAAI,MAAM,QAAQ,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAASN,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,SAAS,MAAA,EAA8E;AAC9F,EAAA,OAAO,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,OAAA,EAAS,KAAK,CAAC,CAAC,CAAA;AAC9D;AAEA,SAAS,eAAe,KAAA,EAA+C;AACrE,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC/B,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,MAAA;AAC5C;AAEA,SAAS,aAAa,KAAA,EAAkD;AACtE,EAAA,OAAO,eAAe,KAAA,CAAM,SAAS,CAAA,IAAK,cAAA,CAAe,MAAM,SAAS,CAAA;AAC1E;AAEA,SAAS,WAAW,KAAA,EAAkD;AACpE,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,KAAA,CAAM,OAAO,CAAA;AAC5C,EAAA,IAAI,OAAA,KAAY,QAAW,OAAO,OAAA;AAClC,EAAA,MAAM,SAAA,GAAY,aAAa,KAAK,CAAA;AACpC,EAAA,IACE,SAAA,KAAc,UACd,KAAA,CAAM,UAAA,KAAe,UACrB,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAChC;AACA,IAAA,OAAO,YAAY,KAAA,CAAM,UAAA;AAAA,EAC3B;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAc,MAAA,EAAiD;AACtE,EAAA,OAAO,CAAC,GAAI,MAAA,IAAU,EAAG,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAC9D;AAEA,SAAS,cAAc,KAAA,EAAuB;AAC5C,EAAA,OAAO,KAAA,CAAM,WAAA,EAAY,CAAE,OAAA,CAAQ,eAAe,EAAE,CAAA;AACtD;AAEA,SAAS,gBAAgB,IAAA,EAAsB;AAC7C,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,IAAA;AACpC;AAEA,SAAS,UAAU,KAAA,EAAwB;AACzC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,OAAA;AACjC,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,OAAO,OAAO,KAAA;AAChB;AAEA,SAAS,qBAAqB,KAAA,EAAoC;AAChE,EAAA,IAAI;AACF,IAAA,OAAO,OAAO,UAAA,CAAW,IAAA,CAAK,SAAA,CAAU,KAAK,GAAG,OAAO,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,iBACP,OAAA,EACA,KAAA,EACA,OACA,IAAA,EACA,GAAA,EACA,QAAQ,CAAA,EACF;AACN,EAAA,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,EAAK,OAAO,CAAA;AACxC,EAAA,IAAI,SAAS,CAAA,EAAG;AAEhB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AAC3C,MAAA,gBAAA,CAAiB,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA;AAAA,IACrF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG;AACtB,EAAA,KAAA,MAAW,SAAA,IAAa,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA,EAAG;AAC7E,IAAA,gBAAA;AAAA,MACE,OAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAM,SAAS,CAAA;AAAA,MACf,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,MACpB,SAAA;AAAA,MACA,KAAA,GAAQ;AAAA,KACV;AAAA,EACF;AACF;AAEA,SAAS,iBAAA,CACP,KAAA,EACA,OAAA,GAAkE,EAAC,EAChD;AACnB,EAAA,MAAM,UAA6B,EAAC;AACpC,EAAA,IAAI,KAAA,CAAM,eAAe,MAAA,EAAW;AAClC,IAAA,gBAAA,CAAiB,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,UAAA,EAAY,cAAc,YAAY,CAAA;AAAA,EAC/E;AACA,EAAA,IAAI,QAAQ,gBAAA,EAAkB;AAC5B,IAAA,IAAI,KAAA,CAAM,iBAAiB,MAAA,EAAW;AACpC,MAAA,gBAAA,CAAiB,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,YAAA,EAAc,gBAAgB,cAAc,CAAA;AAAA,IACrF;AACA,IAAA,IAAI,KAAA,CAAM,kBAAkB,MAAA,EAAW;AACrC,MAAA,gBAAA,CAAiB,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,aAAA,EAAe,iBAAiB,eAAe,CAAA;AAAA,IACxF;AAAA,EACF;AACA,EAAA,IAAI,OAAA,CAAQ,YAAA,IAAgB,KAAA,CAAM,KAAA,KAAU,MAAA,EAAW;AACrD,IAAA,gBAAA,CAAiB,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,SAAS,OAAO,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,aAAA,CACP,UACA,WAAA,EACqB;AACrB,EAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,QAAA,CAAS,MAAA,IAAU,aAAa,OAAO,QAAA;AACxE,EAAA,OAAO,SAAS,KAAA,CAAM,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AACnD;AAEA,SAAS,kBAAA,CAAmB,OAAe,OAAA,EAAqC;AAC9E,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,KAAA,CAAM,QAAA,CAAS,MAAM,CAAC,CAAA,IAAK,2BAAA,CAA4B,IAAA,CAAK,KAAK,CAAA;AACnG;AAEA,SAAS,cAAA,CAAe,KAAyB,aAAA,EAA2C;AAC1F,EAAA,OAAO,wBAAA,CAAyB,KAAK,aAAa,CAAA;AACpD;AAEA,SAAS,eAAA,CAAgB,KAAyB,aAAA,EAA2C;AAC3F,EAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AACjB,EAAA,MAAM,UAAA,GAAa,cAAc,GAAG,CAAA;AACpC,EAAA,OAAO,cAAc,IAAA,CAAK,CAAC,cAAc,UAAA,KAAe,aAAA,CAAc,SAAS,CAAC,CAAA;AAClF;AAMA,SAAS,0BAAA,CACP,IAAA,EACA,GAAA,EACA,gBAAA,EACS;AACT,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,IAAO,eAAA,CAAgB,IAAI,CAAC,CAAA;AACvD,EAAA,IAAI,CAAC,oBAAA,CAAqB,GAAA,CAAI,IAAI,GAAG,OAAO,KAAA;AAE5C,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAC5C,EAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,OAAO,iBAAiB,IAAA,CAAK,CAAC,WAAW,UAAA,KAAe,aAAA,CAAc,MAAM,CAAC,CAAA;AAC/E;AAEA,SAAS,gBAAA,CACP,IAAA,EACA,GAAA,EACA,aAAA,EACA,gBAAA,EACS;AACT,EAAA,IAAI,0BAAA,CAA2B,IAAA,EAAM,GAAA,EAAK,gBAAgB,GAAG,OAAO,KAAA;AACpE,EAAA,OAAO,eAAA,CAAgB,GAAA,IAAO,eAAA,CAAgB,IAAI,GAAG,aAAa,CAAA;AACpE;AAEA,SAAS,uBAAuB,KAAA,EAAuC;AACrE,EAAA,IACE,YAAY,KAAA,EAAO;AAAA,IACjB,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,wBAAA;AAAA,IACA;AAAA,GACD,MAAM,IAAA,EACP;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAA,GAAaM,YAAW,KAAA,EAAO;AAAA,IACnC,kBAAA;AAAA,IACA,wBAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,OAAO,UAAA,KAAe,gBAAgB,UAAA,KAAe,gBAAA;AACvD;AAEA,SAAS,UAAA,CACP,KAAA,EACA,aAAA,EACA,QAAA,EACQ;AACR,EAAA,OAAOA,YAAW,KAAA,EAAO,aAAa,KAAK,WAAA,CAAY,KAAA,CAAM,MAAM,QAAQ,CAAA;AAC7E;AAEA,SAAS,gBAAgB,OAAA,EAAqD;AAC5E,EAAA,OAAO,cAAA,CAAe,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU;AAC/C,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,WAAA,EAAY;AACpC,IAAA,IAAI,IAAA,CAAK,WAAW,YAAY,CAAA,IAAK,KAAK,QAAA,CAAS,aAAa,GAAG,OAAO,IAAA;AAC1E,IAAA,OAAOA,YAAW,KAAA,EAAO,CAAC,iBAAiB,WAAA,EAAa,aAAa,CAAC,CAAA,KAAM,MAAA;AAAA,EAC9E,CAAC,CAAA;AACH;AAEA,SAAS,WAAW,KAAA,EAAsC;AACxD,EAAA,OAAO,UAAA,CAAW,KAAK,CAAA,IAAK,CAAA;AAC9B;AAEA,SAAS,gBAAgB,KAAA,EAAkD;AACzE,EAAA,IAAI,KAAA,CAAM,UAAA,KAAe,MAAA,EAAW,OAAO,KAAA,CAAM,UAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,aAAa,KAAK,CAAA;AAChC,EAAA,MAAM,GAAA,GAAM,WAAW,KAAK,CAAA;AAC5B,EAAA,OAAO,UAAU,MAAA,IAAa,GAAA,KAAQ,UAAa,GAAA,IAAO,KAAA,GAAQ,MAAM,KAAA,GAAQ,MAAA;AAClF;AAEA,SAAS,UAAU,KAAA,EAAyC;AAC1D,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,EAAmB,IAAA,KAAiB;AACjD,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,MAAM,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,CAAM,MAAA,IAAU,SAAS,CAAA,CAAE,CAAA;AAC5F,IAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,CAAM,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC,CAAA;AAAA,EAC1E,CAAA;AACA,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU,MAAM,IAAA,EAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AACzD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAY,OAAA,EAAsC;AACzD,EAAA,OAAO,cAAA,CAAe,OAAO,CAAA,CAC1B,GAAA,CAAI,CAAC,UAAU,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,IAAI,KAAA,CAAM,MAAA,IAAU,SAAS,CAAA,CAAE,CAAA,CACzE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACtC;AAEA,SAAS,UAAU,OAAA,EAAsC;AACvD,EAAA,OAAO,cAAA,CAAe,OAAA,EAAS,MAAM,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,KAAA,KAC1C;AAAA,MACE,SAAS,KAAK,CAAA;AAAA,MACd,MAAM,MAAA,IAAU,SAAA;AAAA,MAChB,WAAW,KAAK,CAAA;AAAA,MAChB,eAAA,CAAgB,KAAK,CAAA,IAAK;AAAA,KAC5B,CAAE,KAAK,GAAG;AAAA,GACZ;AACF;AAEA,SAAS,SAAS,OAAA,EAAsC;AACtD,EAAA,OAAO,cAAA,CAAe,OAAA,EAAS,KAAK,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,KAAA,KACzC;AAAA,MACE,WAAA,CAAY,KAAK,CAAA,IAAK,SAAA;AAAA,MACtB,QAAA,CAAS,KAAK,CAAA,IAAK,SAAA;AAAA,MACnB,eAAA,CAAgB,KAAK,CAAA,IAAK,SAAA;AAAA,MAC1B,KAAA,CAAM,YAAY,KAAA,IAAS,CAAA;AAAA,MAC3B,KAAA,CAAM,YAAY,MAAA,IAAU,CAAA;AAAA,MAC5B,KAAA,CAAM,YAAY,KAAA,IAAS,CAAA;AAAA,MAC3B,KAAA,CAAM,YAAY,MAAA,IAAU;AAAA,KAC9B,CAAE,KAAK,GAAG;AAAA,GACZ;AACF;AAEA,SAAS,WAAW,OAAA,EAAsC;AACxD,EAAA,OAAO,cAAA,CAAe,OAAO,CAAA,CAC1B,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,OAAA,IAAW,KAAA,CAAM,KAAA,KAAU,MAAS,CAAA,CACvE,GAAA;AAAA,IAAI,CAAC,KAAA,KACJ;AAAA,MACE,KAAA,CAAM,IAAA;AAAA,MACN,KAAA,CAAM,IAAA;AAAA,MACN,KAAA,CAAM,OAAO,IAAA,IAAQ,OAAA;AAAA,MACrB,KAAA,CAAM,OAAO,IAAA,IAAQ;AAAA,KACvB,CAAE,KAAK,GAAG;AAAA,GACZ,CACC,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACtC;AAEA,SAAS,eAAe,OAAA,EAAsC;AAC5D,EAAA,OAAO,cAAA,CAAe,OAAA,EAAS,WAAW,CAAA,CACvC,GAAA;AAAA,IAAI,CAAC,KAAA,KACJ,UAAA,CAAW,KAAA,EAAO,CAAC,eAAA,EAAiB,eAAA,EAAiB,WAAW,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC;AAAA,GACjG,CACC,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACtC;AAEA,SAAS,eAAe,OAAA,EAAsC;AAC5D,EAAA,OAAO,eAAA,CAAgB,OAAO,CAAA,CAC3B,GAAA,CAAI,CAAC,UAAU,UAAA,CAAW,KAAA,EAAO,CAAC,eAAA,EAAiB,WAAA,EAAa,aAAa,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA,CAC/F,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACtC;AAEA,SAAS,oBAAA,CACP,OAAA,EACA,IAAA,EACA,IAAA,EACsB;AACtB,EAAA,MAAM,KAAA,GAAQ,eAAe,OAAO,CAAA,CAAE,KAAK,CAAC,SAAA,KAAc,SAAA,CAAU,IAAA,KAAS,IAAI,CAAA;AACjF,EAAA,OAAO,KAAA,GAAQ,CAAC,aAAA,CAAc,KAAA,EAAO,IAAI,CAAC,CAAA,GAAI,WAAA,CAAY,OAAA,CAAQ,WAAW,CAAA;AAC/E;AAEA,SAAS,mBAAA,CACP,OAAA,EACA,QAAA,EACA,QAAA,EACA,MAAA,EACmB;AACnB,EAAA,OAAO,WAAA,CAAY,qBAAA,EAAuB,OAAA,EAAS,QAAA,EAAU,UAAU,MAAM,CAAA;AAC/E;AAOO,SAAS,mBAAA,CAAoB,OAAA,GAAgC,EAAC,EAAmB;AACtF,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,IAAA;AACrC,EAAA,MAAM,eAAA,GAAkB,QAAQ,eAAA,KAAoB,IAAA;AACpD,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,YAAA;AAAA,IACJ,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,WAAA,EAAa,MAAA,IAAU,SAAA;AAC9C,MAAA,IAAI,WAAW,QAAA,EAAU;AACvB,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,YAAA;AAAA,YACA,CAAA,WAAA,EAAc,MAAM,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAA,CAAA;AAAA,YACvD,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,QAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,MACF;AACA,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,SAAS,CAAA;AACpF,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,YAAA;AAAA,cACA,yCAAA;AAAA,cACA,QAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,cAC3C,mBAAA;AAAA,cACA,OAAA,CAAQ;AAAA;AACV,WACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAOO,SAAS,sBAAsB,OAAA,EAAiD;AACrF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,cAAA;AAAA,IACJ,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,MAAA,GAAS,QAAQ,WAAA,EAAa,UAAA;AACpC,MAAA,IAAI,WAAW,MAAA,IAAa,MAAA,IAAU,OAAA,CAAQ,aAAA,SAAsB,EAAC;AACrE,MAAA,OAAO;AAAA,QACL,WAAA;AAAA,UACE,cAAA;AAAA,UACA,CAAA,aAAA,EAAgB,MAAM,CAAA,YAAA,EAAe,OAAA,CAAQ,aAAa,CAAA,GAAA,CAAA;AAAA,UAC1D,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,UAC/B,EAAE,aAAA,EAAe,OAAA,CAAQ,aAAA,EAAc;AAAA,UACvC;AAAA;AACF,OACF;AAAA,IACF;AAAA,GACF;AACF;AAKO,SAAS,0BAA0B,OAAA,EAAqD;AAC7F,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,qBAAA;AAAA,IACJ,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,OAAO,cAAA,CAAe,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU;AACrD,QAAA,MAAM,QAAA,GAAW,gBAAgB,KAAK,CAAA;AACtC,QAAA,OAAO,QAAA,KAAa,MAAA,IAAa,QAAA,GAAW,OAAA,CAAQ,aAAA;AAAA,MACtD,CAAC,CAAA;AACD,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAC/B,MAAA,OAAO;AAAA,QACL,WAAA;AAAA,UACE,qBAAA;AAAA,UACA,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,+BAAA,EAAkC,QAAQ,aAAa,CAAA,GAAA,CAAA;AAAA,UACrE,KAAK,GAAA,CAAI,CAAC,UAAU,aAAA,CAAc,KAAA,EAAO,YAAY,CAAC,CAAA;AAAA,UACtD,EAAE,aAAA,EAAe,OAAA,CAAQ,aAAA,EAAc;AAAA,UACvC,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,YACnB,SAAS,KAAA,CAAM,OAAA;AAAA,YACf,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,UAAA,EAAY,gBAAgB,KAAK;AAAA,WACnC,CAAE;AAAA;AACJ,OACF;AAAA,IACF;AAAA,GACF;AACF;AAKO,SAAS,wBAAA,CACd,OAAA,GAAqC,EAAC,EACtB;AAChB,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,KAAmB,IAAA;AAClD,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,WAAA;AAAA,IACJ,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,SAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,SAAS,CAAA;AACpF,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,WAAA;AAAA,YACA,CAAA,MAAA,EAAS,QAAQ,MAAM,CAAA,yCAAA,CAAA;AAAA,YACvB,QAAQ,GAAA,CAAI,CAAC,UAAU,aAAA,CAAc,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,YACrD,mBAAA;AAAA,YACA,OAAA,CAAQ;AAAA;AACV,SACF;AAAA,MACF;AACA,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,MAAM,UAAA,GAAa,cAAA,CAAe,OAAO,CAAA,CAAE,MAAA;AAAA,UACzC,CAAC,UACC,KAAA,CAAM,SAAA,KAAc,UACpB,KAAA,CAAM,OAAA,KAAY,MAAA,IAClB,KAAA,CAAM,MAAA,KAAW;AAAA,SACrB;AACA,QAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,WAAA;AAAA,cACA,CAAA,MAAA,EAAS,WAAW,MAAM,CAAA,kCAAA,CAAA;AAAA,cAC1B,WAAW,GAAA,CAAI,CAAC,UAAU,aAAA,CAAc,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,cACzD,4BAAA;AAAA,cACA,UAAA,CAAW;AAAA;AACb,WACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAKO,SAAS,0BAAA,GAA6C;AAC3D,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,sBAAA;AAAA,IACJ,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,MAAM,SAAA,GAAY,QAAQ,WAAA,EAAa,MAAA;AACvC,MAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,sBAAA;AAAA,YACA,uBAAA;AAAA,YACA,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,eAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,MACF;AACA,MAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,SAAS,CAAA;AACpF,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,sBAAA;AAAA,YACA,CAAA,QAAA,EAAW,QAAQ,MAAM,CAAA,6BAAA,CAAA;AAAA,YACzB,QAAQ,GAAA,CAAI,CAAC,UAAU,aAAA,CAAc,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,YACrD,mBAAA;AAAA,YACA,OAAA,CAAQ;AAAA;AACV,SACF;AAAA,MACF;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAOO,SAAS,wBAAwB,OAAA,EAAmD;AACzF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,gBAAA;AAAA,IACJ,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,OAAO,CAAA,CAAE,MAAA;AAAA,QACpC,CAAC,KAAA,KAAU,OAAA,CAAQ,SAAS,MAAA,IAAa,KAAA,CAAM,SAAS,OAAA,CAAQ;AAAA,OAClE,CAAE,MAAA;AACF,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,IAAI,OAAA,CAAQ,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,QAAQ,GAAA,EAAK;AACpD,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,gBAAA;AAAA,YACA,CAAA,YAAA,EAAe,KAAK,CAAA,mBAAA,EAAsB,OAAA,CAAQ,GAAG,CAAA,CAAA,CAAA;AAAA,YACrD,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,GAAA,EAAK,QAAQ,GAAA,EAAI;AAAA,YACvC;AAAA;AACF,SACF;AAAA,MACF;AACA,MAAA,IAAI,OAAA,CAAQ,GAAA,KAAQ,MAAA,IAAa,KAAA,GAAQ,QAAQ,GAAA,EAAK;AACpD,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,gBAAA;AAAA,YACA,CAAA,YAAA,EAAe,KAAK,CAAA,kBAAA,EAAqB,OAAA,CAAQ,GAAG,CAAA,CAAA,CAAA;AAAA,YACpD,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,GAAA,EAAK,QAAQ,GAAA,EAAI;AAAA,YACvC;AAAA;AACF,SACF;AAAA,MACF;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAOO,SAAS,mBAAmB,OAAA,EAA8C;AAC/E,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,WAAA;AAAA,IACJ,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,QAAQ,CAAC,GAAG,OAAA,CAAQ,cAAA,CAAe,QAAQ,CAAA;AACjD,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA,EAAG,CAAC,CAAA;AACzE,MAAA,IAAI,QAAA,IAAY,OAAA,CAAQ,QAAA,EAAU,OAAO,EAAC;AAC1C,MAAA,MAAM,UAAU,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,UAAU,QAAQ,CAAA;AAC9D,MAAA,OAAO;AAAA,QACL,WAAA;AAAA,UACE,WAAA;AAAA,UACA,CAAA,UAAA,EAAa,QAAQ,CAAA,UAAA,EAAa,OAAA,CAAQ,QAAQ,CAAA,CAAA,CAAA;AAAA,UAClD,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,YACrB,KAAA,EAAO,KAAK,KAAA,CAAM,KAAA;AAAA,YAClB,OAAA,EAAS,KAAK,KAAA,CAAM,OAAA;AAAA,YACpB,QAAA,EAAU,KAAK,KAAA,CAAM,QAAA;AAAA,YACrB,IAAA,EAAM,KAAK,KAAA,CAAM,IAAA;AAAA,YACjB,IAAA,EAAM,KAAK,KAAA,CAAM,IAAA;AAAA,YACjB,MAAA,EAAQ,KAAK,KAAA,CAAM;AAAA,WACrB,CAAE,CAAA;AAAA,UACF,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,UAC7B;AAAA;AACF,OACF;AAAA,IACF;AAAA,GACF;AACF;AAOO,SAAS,oBAAoB,OAAA,EAA+C;AACjF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,YAAA;AAAA,IACJ,QAAA,EAAU,MAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAEhB,MAAA,MAAM,KAAA,GAAQ,qBAAqB,OAAO,CAAA;AAC1C,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AAChC,MAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAK,CAAA;AAC7B,MAAA,MAAM,WAAgC,EAAC;AAEvC,MAAA,KAAA,MAAW,QAAA,IAAY,OAAA,CAAQ,QAAA,IAAY,EAAC,EAAG;AAC7C,QAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC1B,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA,CAAY,YAAA,EAAc,CAAA,cAAA,EAAiB,QAAQ,CAAA,gBAAA,CAAA,EAAoB,YAAY,OAAA,CAAQ,WAAW,CAAA,EAAG,QAAA,EAAU,KAAK;AAAA,WAC1H;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,YAAY,IAAI,GAAA,CAAI,OAAA,CAAQ,SAAA,IAAa,EAAE,CAAA;AAEjD,MAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,EAAS,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,OAAO,CAAA,GAAI,MAAA;AACrE,MAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,QAAA,MAAM,IAAA,GAAO,SAAS,KAAK,CAAA;AAC3B,QAAA,IAAI,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AACvB,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA,CAAY,YAAA,EAAc,CAAA,eAAA,EAAkB,IAAI,CAAA,UAAA,CAAA,EAAc,CAAC,aAAA,CAAc,KAAK,CAAC,CAAA,EAAG,aAAA,EAAe,IAAI;AAAA,WAC3G;AAAA,QACF;AACA,QAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACjC,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,YAAY,YAAA,EAAc,CAAA,KAAA,EAAQ,IAAI,CAAA,gCAAA,CAAA,EAAoC,CAAC,aAAA,CAAc,KAAK,CAAC,CAAA,EAAG,CAAC,GAAG,OAAO,CAAA,CAAE,IAAA,IAAQ,IAAI;AAAA,WAC7H;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,QAAA,KAAa,MAAA,IAAa,KAAA,CAAM,MAAA,GAAS,QAAQ,QAAA,EAAU;AACrE,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,YAAY,YAAA,EAAc,CAAA,WAAA,EAAc,MAAM,MAAM,CAAA,mBAAA,EAAsB,QAAQ,QAAQ,CAAA,CAAA,CAAA,EAAK,YAAY,OAAA,CAAQ,WAAW,GAAG,EAAE,QAAA,EAAU,QAAQ,QAAA,EAAS,EAAG,MAAM,MAAM;AAAA,SAC/K;AAAA,MACF;AACA,MAAA,IAAI,QAAQ,QAAA,KAAa,MAAA,IAAa,KAAA,CAAM,MAAA,GAAS,QAAQ,QAAA,EAAU;AACrE,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA,CAAY,cAAc,CAAA,WAAA,EAAc,KAAA,CAAM,MAAM,CAAA,kBAAA,EAAqB,OAAA,CAAQ,QAAQ,CAAA,CAAA,CAAA,EAAK,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,CAAC,CAAA,EAAG,EAAE,UAAU,OAAA,CAAQ,QAAA,EAAS,EAAG,KAAA,CAAM,MAAM;AAAA,SACxL;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAcO,SAAS,uBAAuB,OAAA,EAAkD;AACvF,EAAA,MAAM,MAAA,GAAS,QAAQ,EAAA,IAAM,YAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,kBAAA;AAC7B,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA;AAAA,IACJ,QAAA,EAAU,MAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,OAAA,EAAS,MAAM,CAAA;AAC5C,MAAA,MAAM,KAAA,GAAQ,iBAAiB,KAAK,CAAA;AACpC,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AAC5C,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAC1C,MAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW;AACzD,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,IAAI,IAAA,KAAS,kBAAA,IAAsB,WAAA,IAAe,UAAA,EAAY;AAC5D,QAAA,OAAO;AAAA,UACL,WAAA;AAAA,YACE,MAAA;AAAA,YACA,CAAA,KAAA,EAAQ,OAAA,CAAQ,MAAM,CAAA,oBAAA,EAAuB,QAAQ,KAAK,CAAA,CAAA,CAAA;AAAA,YAC1D,CAAC,aAAA,CAAc,KAAA,CAAM,WAAW,CAAE,GAAG,aAAA,CAAc,KAAA,CAAM,UAAU,CAAE,CAAC,CAAA;AAAA,YACtE,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,KAAA,EAAO,QAAQ,KAAA,EAAM;AAAA,YAC/C,KAAA,CAAM,IAAI,QAAQ;AAAA;AACpB,SACF;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,WAAW,CAAA;AACrC,MAAA,MAAM,UAAA,GAAa,MAAM,UAAU,CAAA;AACnC,MAAA,MAAM,SAAA,GAAY,WAAW,WAAW,CAAA;AACxC,MAAA,MAAM,UAAA,GAAa,aAAa,UAAU,CAAA;AAE1C,MAAA,IAAI,SAAS,gBAAA,EAAkB;AAC7B,QAAA,MAAM,QAAA,GAAW;AAAA,UACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,IAAA;AAAA,UACA,QAAA,EAAU;AAAA,SACZ;AACA,QAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,OAAA,CAAQ,KAAA,EAAO;AACpC,UAAA,OAAO;AAAA,YACL,WAAA;AAAA,cACE,MAAA;AAAA,cACA,CAAA,KAAA,EAAQ,QAAQ,MAAM,CAAA,sCAAA,CAAA;AAAA,cACtB,CAAC,aAAA,CAAc,WAAW,CAAC,CAAA;AAAA,cAC3B,QAAA;AAAA,cACA,EAAE,MAAM,sBAAA;AAAuB;AACjC,WACF;AAAA,QACF;AACA,QAAA,IAAI,SAAA,KAAc,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW;AACvD,UAAA,OAAO;AAAA,YACL,WAAA;AAAA,cACE,MAAA;AAAA,cACA,CAAA,WAAA,EAAc,OAAA,CAAQ,MAAM,CAAA,QAAA,EAAW,QAAQ,KAAK,CAAA,mCAAA,CAAA;AAAA,cACpD,CAAC,aAAA,CAAc,WAAW,CAAA,EAAG,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,cACtD,QAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAM,gCAAA;AAAA,gBACN,mBAAmB,SAAA,KAAc,MAAA;AAAA,gBACjC,oBAAoB,UAAA,KAAe;AAAA;AACrC;AACF,WACF;AAAA,QACF;AACA,QAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,UAAA,OAAO;AAAA,YACL,WAAA;AAAA,cACE,MAAA;AAAA,cACA,CAAA,KAAA,EAAQ,OAAA,CAAQ,MAAM,CAAA,oBAAA,EAAuB,QAAQ,KAAK,CAAA,QAAA,CAAA;AAAA,cAC1D,CAAC,aAAA,CAAc,WAAW,CAAA,EAAG,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,cACtD,QAAA;AAAA,cACA;AAAA,gBACE,aAAA,EAAe,IAAI,IAAA,CAAK,SAAS,EAAE,WAAA,EAAY;AAAA,gBAC/C,cAAA,EAAgB,IAAI,IAAA,CAAK,UAAU,EAAE,WAAA;AAAY;AACnD;AACF,WACF;AAAA,QACF;AACA,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,QAAA,MAAM,YAAA,GAAe,MAAM,MAAA,CAAO,CAAC,UAAU,QAAA,CAAS,KAAK,CAAA,KAAM,OAAA,CAAQ,MAAM,CAAA;AAC/E,QAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,CAAC,UAAU,QAAA,CAAS,KAAK,CAAA,KAAM,OAAA,CAAQ,KAAK,CAAA;AAC7E,QAAA,MAAM,QAAA,GAAW;AAAA,UACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,IAAA;AAAA,UACA,QAAA,EAAU;AAAA,SACZ;AACA,QAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,OAAA,CAAQ,KAAA,EAAO;AACpC,UAAA,OAAO;AAAA,YACL,WAAA;AAAA,cACE,MAAA;AAAA,cACA,CAAA,KAAA,EAAQ,QAAQ,MAAM,CAAA,sCAAA,CAAA;AAAA,cACtB,CAAC,aAAA,CAAc,WAAW,CAAC,CAAA;AAAA,cAC3B,QAAA;AAAA,cACA,EAAE,MAAM,sBAAA;AAAuB;AACjC,WACF;AAAA,QACF;AAEA,QAAA,IAAI,YAAA;AACJ,QAAA,IAAI,aAAA;AACJ,QAAA,IAAI,iBAAA,GAAoB,CAAA;AACxB,QAAA,IAAI,kBAAA,GAAqB,CAAA;AACzB,QAAA,IAAI,kBAAA;AACJ,QAAA,IAAI,iBAAA;AAEJ,QAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,UAAA,MAAM,GAAA,GAAM,WAAW,KAAK,CAAA;AAC5B,UAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,YAAA,iBAAA,IAAqB,CAAA;AACrB,YAAA,kBAAA,KAAuB,KAAA;AAAA,UACzB,CAAA,MAAA,IAAW,YAAA,KAAiB,MAAA,IAAa,GAAA,GAAM,aAAa,GAAA,EAAK;AAC/D,YAAA,YAAA,GAAe,EAAE,OAAO,GAAA,EAAI;AAAA,UAC9B;AAAA,QACF;AACA,QAAA,KAAA,MAAW,SAAS,WAAA,EAAa;AAC/B,UAAA,MAAM,KAAA,GAAQ,aAAa,KAAK,CAAA;AAChC,UAAA,IAAI,UAAU,MAAA,EAAW;AACvB,YAAA,kBAAA,IAAsB,CAAA;AACtB,YAAA,iBAAA,KAAsB,KAAA;AAAA,UACxB,CAAA,MAAA,IAAW,aAAA,KAAkB,MAAA,IAAa,KAAA,GAAQ,cAAc,KAAA,EAAO;AACrE,YAAA,aAAA,GAAgB,EAAE,OAAO,KAAA,EAAM;AAAA,UACjC;AAAA,QACF;AAEA,QAAA,IACE,oBAAoB,CAAA,IACpB,kBAAA,GAAqB,KACrB,YAAA,KAAiB,MAAA,IACjB,kBAAkB,MAAA,EAClB;AACA,UAAA,OAAO;AAAA,YACL,WAAA;AAAA,cACE,MAAA;AAAA,cACA,CAAA,WAAA,EAAc,OAAA,CAAQ,MAAM,CAAA,QAAA,EAAW,QAAQ,KAAK,CAAA,0CAAA,CAAA;AAAA,cACpD,CAAC,kBAAA,EAAoB,iBAAiB,CAAA,CACnC,OAAO,CAAC,KAAA,KAA0C,KAAA,KAAU,MAAS,EACrE,GAAA,CAAI,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,cACtC,QAAA;AAAA,cACA;AAAA,gBACE,IAAA,EAAM,gCAAA;AAAA,gBACN,iBAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,QACF;AACA,QAAA,IAAI,YAAA,CAAa,GAAA,GAAM,aAAA,CAAc,KAAA,EAAO;AAC1C,UAAA,OAAO;AAAA,YACL,WAAA;AAAA,cACE,MAAA;AAAA,cACA,CAAA,MAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,kCAAA,EAAqC,QAAQ,KAAK,CAAA,kBAAA,CAAA;AAAA,cACzE,CAAC,cAAc,YAAA,CAAa,KAAK,GAAG,aAAA,CAAc,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,cACtE,QAAA;AAAA,cACA;AAAA,gBACE,qBAAqB,IAAI,IAAA,CAAK,YAAA,CAAa,GAAG,EAAE,WAAA,EAAY;AAAA,gBAC5D,wBAAwB,IAAI,IAAA,CAAK,aAAA,CAAc,KAAK,EAAE,WAAA;AAAY;AACpE;AACF,WACF;AAAA,QACF;AACA,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,IACE,SAAA,KAAc,MAAA,IACd,UAAA,KAAe,MAAA,IACf,YAAY,UAAA,EACZ;AACA,QAAA,OAAO;AAAA,UACL;AAAA,YACE,MAAA;AAAA,YACA,QAAA,EAAU,SAAA;AAAA,YACV,MAAA,EAAQ,SAAA;AAAA,YACR,SACE,CAAA,WAAA,EAAc,OAAA,CAAQ,MAAM,CAAA,QAAA,EAAW,QAAQ,KAAK,CAAA,sHAAA,CAAA;AAAA,YAEtD,QAAA,EAAU,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAQ,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAM,kBAAA,EAAmB;AAAA,YACnF,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM,oBAAA;AAAA,cACN,eAAe,WAAA,CAAY,OAAA;AAAA,cAC3B,cAAA,EAAgB,UAAA,CAAW,SAAA,IAAa,UAAA,CAAW;AAAA,aACrD;AAAA,YACA,UAAU,CAAC,aAAA,CAAc,WAAW,CAAA,EAAG,aAAA,CAAc,UAAU,CAAC;AAAA;AAClE,SACF;AAAA,MACF;AAEA,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,GACF;AACF;AAOO,SAAS,sBAAsB,OAAA,EAAiD;AACrF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,eAAA;AAAA,IACJ,QAAA,EAAU,MAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,OAAA,EAAS,MAAM,CAAA;AAC5C,MAAA,MAAM,WAAW,KAAA,CAAM,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,OAAO,CAAA;AACjE,MAAA,MAAM,UAAU,KAAA,CACb,GAAA,CAAI,CAAC,KAAA,MAAW,EAAE,OAAO,KAAA,EAAO,UAAA,CAAW,KAAK,CAAA,GAAI,CAAA,CACpD,MAAA,CAAO,CAAC,IAAA,KAAkE,IAAA,CAAK,UAAU,MAAS,CAAA;AACrG,MAAA,MAAM,WAAgC,EAAC;AAEvC,MAAA,IAAI,QAAQ,WAAA,KAAgB,MAAA,IAAa,QAAA,CAAS,MAAA,GAAS,QAAQ,WAAA,EAAa;AAC9E,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,eAAA;AAAA,YACA,CAAA,mBAAA,EAAsB,QAAA,CAAS,MAAM,CAAA,UAAA,EAAa,QAAQ,WAAW,CAAA,CAAA,CAAA;AAAA,YACrE,SAAS,GAAA,CAAI,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,YAC5C,EAAE,WAAA,EAAa,OAAA,CAAQ,WAAA,EAAY;AAAA,YACnC,QAAA,CAAS;AAAA;AACX,SACF;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAW;AACpC,QAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,KAAA,GAAQ,QAAQ,UAAW,CAAA;AAClF,QAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,eAAA;AAAA,cACA,CAAA,0BAAA,EAA6B,QAAQ,UAAU,CAAA,CAAA,CAAA;AAAA,cAC/C,gBAAA,CAAiB,IAAI,CAAC,IAAA,KAAS,cAAc,IAAA,CAAK,KAAA,EAAO,uBAAuB,CAAC,CAAA;AAAA,cACjF,EAAE,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAW;AAAA,cACjC,gBAAA,CAAiB,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,IAAA,EAAM,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,EAAG,OAAA,EAAS,IAAA,CAAK,OAAM,CAAE;AAAA;AACtF,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAOO,SAAS,mBAAmB,OAAA,EAA8C;AAC/E,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,WAAA;AAAA,IACJ,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,IAAA,GAAO,cAAA,CAAe,OAAA,EAAS,KAAK,CAAA;AAC1C,MAAA,MAAM,WAAgC,EAAC;AAIvC,MAAA,MAAM,aAAA,GAAgB,QAAQ,aAAA,EAAe,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,aAAa,CAAA,GAAI,MAAA;AACvF,MAAA,MAAM,gBAAA,GAAmB,QAAQ,gBAAA,EAAkB,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,gBAAgB,CAAA,GAAI,MAAA;AAChG,MAAA,MAAM,aAAA,GAAgB,QAAQ,aAAA,EAAe,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,aAAa,CAAA,GAAI,MAAA;AAEvF,MAAA,IAAI,QAAQ,QAAA,KAAa,MAAA,IAAa,IAAA,CAAK,MAAA,GAAS,QAAQ,QAAA,EAAU;AACpE,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,WAAA;AAAA,YACA,CAAA,eAAA,EAAkB,IAAA,CAAK,MAAM,CAAA,UAAA,EAAa,QAAQ,QAAQ,CAAA,CAAA,CAAA;AAAA,YAC1D,KAAK,GAAA,CAAI,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,YACxC,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,YAC7B,IAAA,CAAK;AAAA;AACP,SACF;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,QAAA,MAAM,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC5B,QAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAClC,QAAA,MAAM,YAAA,GAAe,gBAAgB,KAAK,CAAA;AAC1C,QAAA,IAAI,kBAAkB,CAAC,KAAA,IAAS,CAAC,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI;AAC1D,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,YAAY,WAAA,EAAa,CAAA,UAAA,EAAa,SAAS,SAAS,CAAA,gBAAA,CAAA,EAAoB,CAAC,aAAA,CAAc,KAAA,EAAO,kBAAkB,CAAC,CAAA,EAAG,CAAC,GAAG,aAAa,EAAE,IAAA,EAAK,EAAG,SAAS,SAAS;AAAA,WACvK;AAAA,QACF;AACA,QAAA,IAAI,qBAAqB,CAAC,QAAA,IAAY,CAAC,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA,CAAA,EAAI;AACtE,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,YAAY,WAAA,EAAa,CAAA,aAAA,EAAgB,YAAY,SAAS,CAAA,gBAAA,CAAA,EAAoB,CAAC,aAAA,CAAc,KAAA,EAAO,qBAAqB,CAAC,CAAA,EAAG,CAAC,GAAG,gBAAgB,EAAE,IAAA,EAAK,EAAG,YAAY,SAAS;AAAA,WACtL;AAAA,QACF;AACA,QAAA,IAAI,kBAAkB,CAAC,YAAA,IAAgB,CAAC,aAAA,CAAc,GAAA,CAAI,YAAY,CAAA,CAAA,EAAI;AACxE,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,YAAY,WAAA,EAAa,CAAA,kBAAA,EAAqB,gBAAgB,SAAS,CAAA,gBAAA,CAAA,EAAoB,CAAC,aAAA,CAAc,KAAA,EAAO,yBAAyB,CAAC,CAAA,EAAG,CAAC,GAAG,aAAa,EAAE,IAAA,EAAK,EAAG,gBAAgB,SAAS;AAAA,WACpM;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,cAAc,IAAA,CAAK,MAAA;AAAA,QACvB,CAAC,QAAQ,KAAA,MAAW;AAAA,UAClB,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,KAAA,CAAM,YAAY,KAAA,IAAS,CAAA,CAAA;AAAA,UAClD,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU,KAAA,CAAM,YAAY,MAAA,IAAU,CAAA,CAAA;AAAA,UACrD,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,KAAA,CAAM,YAAY,KAAA,IAAS,CAAA,CAAA;AAAA,UAClD,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU,KAAA,CAAM,YAAY,MAAA,IAAU,CAAA;AAAA,SACvD,CAAA;AAAA,QACA,EAAE,OAAO,CAAA,EAAG,MAAA,EAAQ,GAAG,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA;AAAE,OAC7C;AACA,MAAA,MAAM,WAAA,GAAc;AAAA,QAClB,CAAC,OAAA,EAAS,OAAA,CAAQ,cAAc,CAAA;AAAA,QAChC,CAAC,QAAA,EAAU,OAAA,CAAQ,eAAe,CAAA;AAAA,QAClC,CAAC,OAAA,EAAS,OAAA,CAAQ,cAAc,CAAA;AAAA,QAChC,CAAC,QAAA,EAAU,OAAA,CAAQ,eAAe;AAAA,OACpC;AACA,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,WAAA,EAAa;AACtC,QAAA,IAAI,KAAA,KAAU,MAAA,IAAa,WAAA,CAAY,GAAG,IAAI,KAAA,EAAO;AACnD,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,WAAA;AAAA,cACA,OAAO,GAAG,CAAA,aAAA,EAAgB,YAAY,GAAG,CAAC,aAAa,KAAK,CAAA,CAAA,CAAA;AAAA,cAC5D,IAAA,CAAK,IAAI,CAAC,KAAA,KAAU,cAAc,KAAA,EAAO,CAAA,WAAA,EAAc,GAAG,CAAA,CAAE,CAAC,CAAA;AAAA,cAC7D,EAAE,CAAC,CAAA,GAAA,EAAM,GAAA,CAAI,CAAC,CAAA,CAAG,WAAA,EAAa,CAAA,EAAG,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,MAAA,CAAQ,GAAG,KAAA,EAAM;AAAA,cAC9D,YAAY,GAAG;AAAA;AACjB,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAOO,SAAS,6BAAA,CACd,OAAA,GAA0C,EAAC,EAC3B;AAChB,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,sBAAA;AAAA,IACJ,QAAA,EAAU,WAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,IAAI,CAAC,QAAQ,YAAA,EAAc;AACzB,QAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,SAAS,CAAA;AACpF,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,sBAAA;AAAA,cACA,2CAAA;AAAA,cACA,QAAQ,GAAA,CAAI,CAAC,UAAU,aAAA,CAAc,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,cACrD,mBAAA;AAAA,cACA,OAAA,CAAQ;AAAA;AACV,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,wBAAA,EAA0B;AACpC,QAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,OAAO,CAAA,CAAE,MAAA;AAAA,UAC7C,CAAC,UACC,KAAA,CAAM,SAAA,KAAc,UACpB,KAAA,CAAM,OAAA,KAAY,MAAA,IAClB,KAAA,CAAM,MAAA,KAAW;AAAA,SACrB;AACA,QAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,sBAAA;AAAA,cACA,sDAAA;AAAA,cACA,eAAe,GAAA,CAAI,CAAC,UAAU,aAAA,CAAc,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,cAC7D,4BAAA;AAAA,cACA,cAAA,CAAe;AAAA;AACjB,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAOO,SAAS,yBAAA,CACd,OAAA,GAAsC,EAAC,EACvB;AAChB,EAAA,MAAM,qBAAA,GAAwB,QAAQ,qBAAA,IAAyB,IAAA;AAC/D,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,kBAAA;AAAA,IACJ,QAAA,EAAU,WAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,cAAA,CAAe,OAAO,CAAC,CAAA;AAC7C,MAAA,MAAM,UAAU,cAAA,CAAe,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,KAAA,KAAU;AACxD,QAAA,IAAI,CAAC,MAAM,QAAA,IAAY,IAAA,CAAK,IAAI,KAAA,CAAM,QAAQ,GAAG,OAAO,KAAA;AACxD,QAAA,OAAO,EAAE,qBAAA,IAAyB,sBAAA,CAAuB,KAAK,CAAA,CAAA;AAAA,MAChE,CAAC,CAAA;AACD,MAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAClC,MAAA,OAAO;AAAA,QACL,WAAA;AAAA,UACE,kBAAA;AAAA,UACA,0EAAA;AAAA,UACA,QAAQ,GAAA,CAAI,CAAC,UAAU,aAAA,CAAc,KAAA,EAAO,UAAU,CAAC,CAAA;AAAA,UACvD,mDAAA;AAAA,UACA,OAAA,CAAQ;AAAA;AACV,OACF;AAAA,IACF;AAAA,GACF;AACF;AAOO,SAAS,wBAAA,GAA2C;AACzD,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,iBAAA;AAAA,IACJ,QAAA,EAAU,WAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,cAAA,CAAe,OAAO,CAAC,CAAA;AAC7C,MAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,MAAA,MAAM,WAAgC,EAAC;AAEvC,MAAA,KAAA,MAAW,SAAS,CAAC,GAAG,cAAA,CAAe,OAAO,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,OAAA,CAAQ,cAAc,CAAA,CAAE,OAAO,CAAC,CAAA,EAAG;AACnG,QAAA,MAAM,OAAgC,EAAC;AACvC,QAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,QAAA,IAAI,OAAA,GAA6C,KAAA;AAEjD,QAAA,OAAO,OAAA,EAAS;AACd,UAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,OAAO,CAAA;AAC3C,UAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,YAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACjC,YAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA,EAAK,CAAE,IAAA,CAAK,IAAI,CAAA;AAC9D,YAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,EAAG;AACxB,cAAA,UAAA,CAAW,IAAI,GAAG,CAAA;AAClB,cAAA,QAAA,CAAS,IAAA;AAAA,gBACP,WAAA;AAAA,kBACE,iBAAA;AAAA,kBACA,6BAA6B,6BAA6B,CAAA;AAAA,kBAC1D,MAAM,GAAA,CAAI,CAAC,SAAS,aAAA,CAAc,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,kBACnD,wBAAA;AAAA,kBACA,MAAM,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,OAAO,EAAE,IAAA;AAAK;AACzC,eACF;AAAA,YACF;AACA,YAAA;AAAA,UACF;AACA,UAAA,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,IAAA,CAAK,MAAM,CAAA;AACvC,UAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AACjB,UAAA,OAAA,GAAU,QAAQ,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA,GAAI,MAAA;AAAA,QAC5D;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAOO,SAAS,+BAAA,CACd,OAAA,GAA4C,EAAC,EAC7B;AAChB,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,wBAAA;AAAA,IACJ,QAAA,EAAU,WAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,cAAA,CAAe,OAAO,CAAC,CAAA;AAC7C,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,MAAM,gBAAgB,OAAA,CAAQ,aAAA;AAE9B,MAAA,KAAA,MAAW,KAAA,IAAS,cAAA,CAAe,OAAO,CAAA,EAAG;AAC3C,QAAA,IACE,iBACA,eAAA,CAAgB,KAAA,CAAM,UAAU,CAAA,GAAI,eAAA,CAAgB,aAAa,CAAA,EACjE;AACA,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,wBAAA;AAAA,cACA,CAAA,iBAAA,EAAoB,KAAA,CAAM,UAAU,CAAA,UAAA,EAAa,aAAa,CAAA,CAAA,CAAA;AAAA,cAC9D,CAAC,aAAA,CAAc,KAAA,EAAO,YAAY,CAAC,CAAA;AAAA,cACnC,EAAE,aAAA,EAAc;AAAA,cAChB,KAAA,CAAM;AAAA;AACR,WACF;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,MAAM,QAAA,EAAU;AACrB,QAAA,IAAI,KAAA,CAAM,QAAA,KAAa,KAAA,CAAM,OAAA,EAAS;AACpC,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,wBAAA;AAAA,cACA,kCAAA;AAAA,cACA,CAAC,aAAA,CAAc,KAAA,EAAO,UAAU,CAAC,CAAA;AAAA,cACjC,sCAAA;AAAA,cACA;AAAA;AACF,WACF;AACA,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA;AACtC,QAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,QAAA,IAAI,QAAQ,wBAAA,EAA0B;AACpC,UAAA,MAAM,UAAA,GAAa,aAAa,MAAM,CAAA;AACtC,UAAA,MAAM,SAAA,GAAY,aAAa,KAAK,CAAA;AACpC,UAAA,IACE,UAAA,KAAe,MAAA,IACf,SAAA,KAAc,MAAA,IACd,aAAa,SAAA,EACb;AACA,YAAA,QAAA,CAAS,IAAA;AAAA,cACP,WAAA;AAAA,gBACE,wBAAA;AAAA,gBACA,wCAAA;AAAA,gBACA,CAAC,aAAA,CAAc,MAAM,GAAG,aAAA,CAAc,KAAA,EAAO,UAAU,CAAC,CAAA;AAAA,gBACxD,6BAAA;AAAA,gBACA,EAAE,aAAA,EAAe,MAAA,CAAO,OAAA,EAAS,YAAA,EAAc,MAAM,OAAA;AAAQ;AAC/D,aACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,QAAQ,sBAAA,IAA0B,MAAA,CAAO,KAAA,EAAO,MAAA,IAAU,MAAM,KAAA,EAAO;AACzE,UAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,YAAA;AAC3B,UAAA,IAAI,MAAA,KAAW,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ;AAClC,YAAA,QAAA,CAAS,IAAA;AAAA,cACP,WAAA;AAAA,gBACE,wBAAA;AAAA,gBACA,kDAAA;AAAA,gBACA,CAAC,aAAA,CAAc,KAAA,EAAO,oBAAoB,CAAC,CAAA;AAAA,gBAC3C,EAAE,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,MAAA,EAAO;AAAA,gBACpC,MAAA,IAAU;AAAA;AACZ,aACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAOO,SAAS,iCACd,OAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,yBAAA;AAAA,IACJ,QAAA,EAAU,WAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,cAAA,CAAe,OAAO,CAAC,CAAA;AAE7C,MAAA,IAAI,OAAA,CAAQ,gBAAgB,MAAA,EAAW;AACrC,QAAA,KAAA,MAAW,CAAC,QAAA,EAAU,QAAQ,KAAK,OAAA,CAAQ,kBAAA,CAAmB,SAAQ,EAAG;AACvE,UAAA,IAAI,QAAA,CAAS,MAAA,IAAU,OAAA,CAAQ,WAAA,EAAa;AAC5C,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA;AAChC,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,yBAAA;AAAA,cACA,UAAU,QAAQ,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,qBAAA,EAAwB,QAAQ,WAAW,CAAA,CAAA,CAAA;AAAA,cACpF;AAAA,gBACE,GAAI,MAAA,GAAS,CAAC,aAAA,CAAc,MAAM,CAAC,CAAA,GAAI,CAAC,EAAE,OAAO,OAAA,CAAQ,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,UAAU,CAAA;AAAA,gBAChG,GAAG,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,kBAC1B,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,kBACnB,OAAA,EAAS,MAAM,KAAA,CAAM,OAAA;AAAA,kBACrB,QAAA,EAAU,MAAM,KAAA,CAAM,QAAA;AAAA,kBACtB,IAAA,EAAM,MAAM,KAAA,CAAM,IAAA;AAAA,kBAClB,IAAA,EAAM,MAAM,KAAA,CAAM,IAAA;AAAA,kBAClB,MAAA,EAAQ,MAAM,KAAA,CAAM;AAAA,iBACtB,CAAE;AAAA,eACJ;AAAA,cACA,EAAE,WAAA,EAAa,OAAA,CAAQ,WAAA,EAAY;AAAA,cACnC,QAAA,CAAS;AAAA;AACX,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,OAAA,CAAQ,kBAAkB,MAAA,EAAW;AACvC,QAAA,MAAM,YAAY,cAAA,CAAe,OAAO,EACrC,GAAA,CAAI,CAAC,WAAW,EAAE,KAAA,EAAO,KAAA,EAAO,YAAA,CAAa,KAAK,CAAA,EAAG,GAAA,EAAK,WAAW,KAAK,CAAA,GAAI,CAAA,CAC9E,MAAA;AAAA,UACC,CAAC,IAAA,KACC,IAAA,CAAK,KAAA,KAAU,MAAA,IAAa,KAAK,GAAA,KAAQ,MAAA,IAAa,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK;AAAA,SAC1E;AACF,QAAA,MAAM,MAAA,GAAS,SAAA,CAAU,OAAA,CAAQ,CAAC,IAAA,KAAS;AAAA,UACzC,EAAE,MAAM,IAAA,CAAK,KAAA,EAAO,OAAO,CAAA,EAAG,KAAA,EAAO,KAAK,KAAA,EAAM;AAAA,UAChD,EAAE,MAAM,IAAA,CAAK,GAAA,EAAK,OAAO,EAAA,EAAI,KAAA,EAAO,KAAK,KAAA;AAAM,SAChD,CAAA;AACD,QAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,UAAA,MAAM,MAAA,GAAS,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,IAAA;AAC1B,UAAA,IAAI,MAAA,KAAW,GAAG,OAAO,MAAA;AACzB,UAAA,MAAM,OAAA,GAAU,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA;AAC5B,UAAA,IAAI,OAAA,KAAY,GAAG,OAAO,OAAA;AAC1B,UAAA,OAAO,EAAE,KAAA,CAAM,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,MAAM,OAAO,CAAA;AAAA,QACtD,CAAC,CAAA;AAED,QAAA,MAAM,MAAA,uBAAa,GAAA,EAAmC;AACtD,QAAA,IAAI,YAAqC,EAAC;AAC1C,QAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG;AACnB,YAAA,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,OAAA,EAAS,MAAM,KAAK,CAAA;AAC3C,YAAA,IAAI,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,MAAA,EAAQ;AAClC,cAAA,SAAA,GAAY,CAAC,GAAG,MAAA,CAAO,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,YACpF;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA;AAAA,UACnC;AAAA,QACF;AAEA,QAAA,IAAI,SAAA,CAAU,MAAA,GAAS,OAAA,CAAQ,aAAA,EAAe;AAC5C,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,yBAAA;AAAA,cACA,CAAA,uBAAA,EAA0B,SAAA,CAAU,MAAM,CAAA,UAAA,EAAa,QAAQ,aAAa,CAAA,CAAA,CAAA;AAAA,cAC5E,UAAU,GAAA,CAAI,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,cAC7C,EAAE,aAAA,EAAe,OAAA,CAAQ,aAAA,EAAc;AAAA,cACvC,SAAA,CAAU;AAAA;AACZ,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAEA,SAAS,gBAAA,CACP,MAAA,EACA,KAAA,EACA,OAAA,EACA,cACA,YAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA;AAAA,IACJ,QAAA,EAAU,WAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,MAAA,GAAS,aAAa,OAAO,CAAA;AACnC,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AACrC,MAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAK,CAAA;AAC7B,MAAA,MAAM,WAAgC,EAAC;AAEvC,MAAA,KAAA,MAAW,QAAA,IAAY,aAAA,CAAc,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACtD,QAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC1B,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,MAAA;AAAA,cACA,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAA,gBAAA,CAAA;AAAA,cAC7B,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,cAC/B,QAAA;AAAA,cACA;AAAA;AACF,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,YAAY,IAAI,GAAA,CAAI,OAAA,CAAQ,SAAA,IAAa,EAAE,CAAA;AAEjD,MAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,EAAS,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,OAAO,CAAA,GAAI,MAAA;AACrE,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAM,IAAA,GAAO,aAAa,KAAK,CAAA;AAC/B,QAAA,IAAI,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AACvB,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,MAAA;AAAA,cACA,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,UAAA,CAAA;AAAA,cAC1B,CAAC,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,cACrB,GAAG,KAAK,CAAA,OAAA,CAAA;AAAA,cACR;AAAA;AACF,WACF;AAAA,QACF;AACA,QAAA,IAAI,OAAA,IAAW,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACjC,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,MAAA;AAAA,cACA,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,CAAG,WAAA,EAAa,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,2BAAA,CAAA;AAAA,cACnD,CAAC,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,cACrB,CAAC,GAAG,OAAO,CAAA,CAAE,IAAA,EAAK;AAAA,cAClB;AAAA;AACF,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,QAAA,KAAa,MAAA,IAAa,MAAA,CAAO,MAAA,GAAS,QAAQ,QAAA,EAAU;AACtE,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,MAAA;AAAA,YACA,GAAG,KAAA,CAAM,CAAC,CAAA,CAAG,WAAA,EAAa,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,OAAA,EAAU,MAAA,CAAO,MAAM,CAAA,mBAAA,EAAsB,QAAQ,QAAQ,CAAA,CAAA,CAAA;AAAA,YACxG,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,YAC7B,MAAA,CAAO;AAAA;AACT,SACF;AAAA,MACF;AACA,MAAA,IAAI,QAAQ,QAAA,KAAa,MAAA,IAAa,MAAA,CAAO,MAAA,GAAS,QAAQ,QAAA,EAAU;AACtE,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,WAAA;AAAA,YACE,MAAA;AAAA,YACA,GAAG,KAAA,CAAM,CAAC,CAAA,CAAG,WAAA,EAAa,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,CAAA,OAAA,EAAU,MAAA,CAAO,MAAM,CAAA,kBAAA,EAAqB,QAAQ,QAAQ,CAAA,CAAA,CAAA;AAAA,YACvG,OAAO,GAAA,CAAI,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,YAC1C,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,YAC7B,MAAA,CAAO;AAAA;AACT,SACF;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAOO,SAAS,oBAAoB,OAAA,EAA+C;AACjF,EAAA,OAAO,gBAAA;AAAA,IACL,qBAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,CAAC,OAAA,KAAY,cAAA,CAAe,OAAA,EAAS,WAAW,CAAA;AAAA,IAChD,CAAC,KAAA,KAAU,UAAA,CAAW,KAAA,EAAO,CAAC,eAAA,EAAiB,eAAA,EAAiB,WAAW,CAAA,EAAG,CAAC,YAAA,EAAc,YAAY,CAAC;AAAA,GAC5G;AACF;AAOO,SAAS,oBAAoB,OAAA,EAA+C;AACjF,EAAA,OAAO,gBAAA;AAAA,IACL,qBAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,CAAC,KAAA,KAAU,UAAA,CAAW,KAAA,EAAO,CAAC,eAAA,EAAiB,WAAA,EAAa,aAAa,CAAA,EAAG,CAAC,YAAY,CAAC;AAAA,GAC5F;AACF;AAOO,SAAS,mBAAmB,OAAA,EAA8C;AAC/E,EAAA,OAAO,gBAAA;AAAA,IACL,oBAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,CAAC,OAAA,KAAY,cAAA,CAAe,OAAA,EAAS,UAAU,CAAA;AAAA,IAC/C,CAAC,KAAA,KAAU,UAAA,CAAW,KAAA,EAAO,CAAC,cAAA,EAAgB,UAAA,EAAY,YAAY,CAAA,EAAG,CAAC,WAAW,CAAC;AAAA,GACxF;AACF;AAOO,SAAS,yBAAA,CACd,OAAA,GAAsC,EAAC,EACvB;AAChB,EAAA,MAAM,aAAA,GAAgB,QAAQ,aAAA,IAAiB,sBAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,eAAA,IAAmB,CAAC,cAAc,YAAY,CAAA;AACtE,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,kBAAA;AAAA,IACJ,QAAA,EAAU,QAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,MAAA,EAAQ;AAClC,QAAA,KAAA,MAAW,KAAA,IAAS,kBAAkB,KAAA,EAAO,EAAE,kBAAkB,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,CAAA,EAAG;AAC5F,UAAA,IAAI,CAAC,eAAe,KAAA,CAAM,GAAA,IAAO,gBAAgB,KAAA,CAAM,IAAI,CAAA,EAAG,aAAa,CAAA,EAAG;AAC9E,UAAA,IAAI,OAAO,MAAM,KAAA,KAAU,QAAA,IAAY,mBAAmB,KAAA,CAAM,KAAA,EAAO,OAAO,CAAA,EAAG;AACjF,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,kBAAA;AAAA,cACA,CAAA,2BAAA,EAA8B,MAAM,IAAI,CAAA,iBAAA,CAAA;AAAA,cACxC,CAAC,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,cACjC,kBAAA;AAAA,cACA,EAAE,MAAM,KAAA,CAAM,IAAA,EAAM,WAAW,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA,EAAE;AAAA,cACtD;AAAA,gBACE,QAAA,EAAU,YAAA;AAAA,gBACV,UAAA,EAAY,MAAA;AAAA,gBACZ,QAAA,EAAU,kBAAA;AAAA,gBACV,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,WAAW,CAAA;AAAA,IACpD;AAAA,GACF;AACF;AAOO,SAAS,0BAAA,CACd,OAAA,GAAuC,EAAC,EACxB;AAChB,EAAA,MAAM,aAAA,GAAgB,QAAQ,aAAA,IAAiB,wBAAA;AAC/C,EAAA,MAAM,gBAAA,GAAmB,QAAQ,gBAAA,IAAoB,sCAAA;AACrD,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,kBAAA;AAAA,IACJ,QAAA,EAAU,QAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,MAAA,EAAQ;AAClC,QAAA,KAAA,MAAW,KAAA,IAAS,kBAAkB,KAAA,EAAO,EAAE,kBAAkB,OAAA,CAAQ,gBAAA,EAAkB,CAAA,EAAG;AAC5F,UAAA,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,IAAO,eAAA,CAAgB,MAAM,IAAI,CAAA;AACnD,UAAA,IAAI,CAAC,gBAAA,CAAiB,KAAA,CAAM,MAAM,GAAA,EAAK,aAAA,EAAe,gBAAgB,CAAA,EAAG;AACzE,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,WAAA;AAAA,cACE,kBAAA;AAAA,cACA,CAAA,uBAAA,EAA0B,MAAM,IAAI,CAAA,YAAA,CAAA;AAAA,cACpC,CAAC,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,cACjC,4BAAA;AAAA,cACA,EAAE,MAAM,KAAA,CAAM,IAAA,EAAM,WAAW,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA,EAAE;AAAA,cACtD;AAAA,gBACE,QAAA,EAAU,aAAA;AAAA,gBACV,UAAA,EAAY,MAAA;AAAA,gBACZ,QAAA,EAAU,kBAAA;AAAA,gBACV,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,WAAW,CAAA;AAAA,IACpD;AAAA,GACF;AACF;AAOO,SAAS,6BAAA,CACd,OAAA,GAA0C,EAAC,EAC3B;AAChB,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,uBAAA;AACrC,EAAA,MAAM,eAAA,GAAkB,QAAQ,eAAA,IAAmB,IAAA;AACnD,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,sBAAA;AAAA,IACJ,QAAA,EAAU,QAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,MAAA,EAAQ;AAClC,QAAA,KAAA,MAAW,KAAA,IAAS,kBAAkB,KAAA,EAAO,EAAE,kBAAkB,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,CAAA,EAAG;AAC5F,UAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,EAAU;AACrC,UAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,GAAG,eAAe,CAAA;AACnD,UAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,YAAA,OAAA,CAAQ,QAAQ,SAAA,GAAY,CAAA;AAC5B,YAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG;AACnC,YAAA,OAAA,CAAQ,QAAQ,SAAA,GAAY,CAAA;AAC5B,YAAA,QAAA,CAAS,IAAA;AAAA,cACP,WAAA;AAAA,gBACE,sBAAA;AAAA,gBACA,CAAA,oBAAA,EAAuB,OAAA,CAAQ,EAAE,CAAA,YAAA,EAAe,MAAM,IAAI,CAAA,CAAA,CAAA;AAAA,gBAC1D,CAAC,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,gBACjC,wBAAA;AAAA,gBACA,EAAE,OAAA,EAAS,OAAA,CAAQ,EAAA,EAAI,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,gBACxC;AAAA,kBACE,QAAA,EAAU,YAAA;AAAA,kBACV,UAAA,EAAY,MAAA;AAAA,kBACZ,UAAU,OAAA,CAAQ,EAAA;AAAA,kBAClB,MAAA,EAAQ;AAAA;AACV;AACF,aACF;AACA,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,WAAW,CAAA;AAAA,IACpD;AAAA,GACF;AACF;AAOO,SAAS,mCACd,OAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,2BAAA;AAAA,IACJ,QAAA,EAAU,QAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,MAAA,EAAQ;AAClC,QAAA,KAAA,MAAW,KAAA,IAAS,kBAAkB,KAAA,EAAO,EAAE,kBAAkB,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,CAAA,EAAG;AAC5F,UAAA,IACE,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,IACvB,OAAA,CAAQ,eAAA,KAAoB,MAAA,IAC5B,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,OAAA,CAAQ,eAAA,EAC7B;AACA,YAAA,QAAA,CAAS,IAAA;AAAA,cACP,WAAA;AAAA,gBACE,2BAAA;AAAA,gBACA,CAAA,UAAA,EAAa,KAAA,CAAM,IAAI,CAAA,SAAA,EAAY,QAAQ,eAAe,CAAA,YAAA,CAAA;AAAA,gBAC1D,CAAC,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,gBACjC,EAAE,eAAA,EAAiB,OAAA,CAAQ,eAAA,EAAgB;AAAA,gBAC3C,EAAE,IAAA,EAAM,KAAA,CAAM,MAAM,MAAA,EAAQ,KAAA,CAAM,MAAM,MAAA,EAAO;AAAA,gBAC/C;AAAA,kBACE,QAAA,EAAU,MAAA;AAAA,kBACV,UAAA,EAAY,MAAA;AAAA,kBACZ,QAAA,EAAU,2BAAA;AAAA,kBACV,MAAA,EAAQ;AAAA;AACV;AACF,aACF;AAAA,UACF;AAEA,UAAA,IACE,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,IACzB,OAAA,CAAQ,cAAA,KAAmB,MAAA,IAC3B,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,OAAA,CAAQ,cAAA,EAC7B;AACA,YAAA,QAAA,CAAS,IAAA;AAAA,cACP,WAAA;AAAA,gBACE,2BAAA;AAAA,gBACA,CAAA,SAAA,EAAY,KAAA,CAAM,IAAI,CAAA,SAAA,EAAY,QAAQ,cAAc,CAAA,OAAA,CAAA;AAAA,gBACxD,CAAC,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,gBACjC,EAAE,cAAA,EAAgB,OAAA,CAAQ,cAAA,EAAe;AAAA,gBACzC,EAAE,IAAA,EAAM,KAAA,CAAM,MAAM,MAAA,EAAQ,KAAA,CAAM,MAAM,MAAA,EAAO;AAAA,gBAC/C;AAAA,kBACE,QAAA,EAAU,MAAA;AAAA,kBACV,UAAA,EAAY,MAAA;AAAA,kBACZ,QAAA,EAAU,2BAAA;AAAA,kBACV,MAAA,EAAQ;AAAA;AACV;AACF,aACF;AAAA,UACF;AAEA,UAAA,IACEN,SAAAA,CAAS,KAAA,CAAM,KAAK,CAAA,IACpB,QAAQ,aAAA,KAAkB,MAAA,IAC1B,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,GAAS,QAAQ,aAAA,EAC1C;AACA,YAAA,QAAA,CAAS,IAAA;AAAA,cACP,WAAA;AAAA,gBACE,2BAAA;AAAA,gBACA,CAAA,UAAA,EAAa,KAAA,CAAM,IAAI,CAAA,SAAA,EAAY,QAAQ,aAAa,CAAA,MAAA,CAAA;AAAA,gBACxD,CAAC,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,gBACjC,EAAE,aAAA,EAAe,OAAA,CAAQ,aAAA,EAAc;AAAA,gBACvC,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,EAAO;AAAA,gBAC1D;AAAA,kBACE,QAAA,EAAU,MAAA;AAAA,kBACV,UAAA,EAAY,MAAA;AAAA,kBACZ,QAAA,EAAU,2BAAA;AAAA,kBACV,MAAA,EAAQ;AAAA;AACV;AACF,aACF;AAAA,UACF;AAEA,UAAA,IAAI,OAAA,CAAQ,uBAAuB,MAAA,EAAW;AAC5C,YAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,KAAA,CAAM,KAAK,CAAA;AAC9C,YAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,GAAQ,OAAA,CAAQ,kBAAA,EAAoB;AAC7D,cAAA,QAAA,CAAS,IAAA;AAAA,gBACP,WAAA;AAAA,kBACE,2BAAA;AAAA,kBACA,CAAA,SAAA,EAAY,KAAA,CAAM,IAAI,CAAA,SAAA,EAAY,QAAQ,kBAAkB,CAAA,kBAAA,CAAA;AAAA,kBAC5D,CAAC,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,kBACjC,EAAE,kBAAA,EAAoB,OAAA,CAAQ,kBAAA,EAAmB;AAAA,kBACjD,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,KAAA,EAAM;AAAA,kBAC1B;AAAA,oBACE,QAAA,EAAU,MAAA;AAAA,oBACV,UAAA,EAAY,MAAA;AAAA,oBACZ,QAAA,EAAU,2BAAA;AAAA,oBACV,MAAA,EAAQ;AAAA;AACV;AACF,eACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,WAAW,CAAA;AAAA,IACpD;AAAA,GACF;AACF;AAWO,SAAS,6BACd,OAAA,EACgB;AAChB,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,qBAAA;AAAA,IACJ,QAAA,EAAU,UAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,iBAAA,GAAoB,kBAAA,CAAmB,OAAA,CAAQ,QAAA,EAAU,QAAQ,aAAa,CAAA;AACpF,MAAA,IAAI,kBAAkB,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,CAAC,kBAAkB,GAAA,EAAK;AACtE,QAAA,OAAO;AAAA,UACL,WAAA;AAAA,YACE,qBAAA;AAAA,YACA,qCAAA;AAAA,YACA,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,yBAAA;AAAA,YACA,kBAAkB,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,IAAI;AAAA;AACvD,SACF;AAAA,MACF;AAEA,MAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,OAAA,CAAQ,QAAA,EAAU,kBAAkB,GAAG,CAAA;AACxE,MAAA,MAAM,eAAA,GAAqC;AAAA,QACzC,GAAG,aAAA;AAAA,QACH,aAAa,iBAAA,CAAkB,GAAA;AAAA,QAC/B,WAAA,EAAa,QAAQ,QAAA,CAAS;AAAA,OAChC;AACA,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,MAAM,mBAAA,GAAsB,QAAQ,mBAAA,IAAuB,CAAA;AAE3D,MAAA,IAAI,OAAA,CAAQ,aAAA,IAAiB,eAAA,CAAgB,MAAA,KAAW,QAAQ,MAAA,EAAQ;AACtE,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,mBAAA;AAAA,YACE,qCAAA;AAAA,YACA,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,eAAA,CAAgB,MAAA;AAAA,YAChB,OAAA,CAAQ;AAAA;AACV,SACF;AAAA,MACF;AAEA,MAAA,MAAM,iBAAA,GAAoB,eAAA,CAAgB,WAAA,EAAa,MAAA,IAAU,SAAA;AACjE,MAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,WAAA,EAAa,MAAA,IAAU,SAAA;AAC1D,MAAA,IAAI,sBAAsB,kBAAA,EAAoB;AAC5C,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,mBAAA;AAAA,YACE,mCAAA;AAAA,YACA,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,iBAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,MACF;AAEA,MAAA,MAAM,gBAAA,GAAmB,gBAAgB,WAAA,EAAa,UAAA;AACtD,MAAA,MAAM,iBAAA,GAAoB,QAAQ,WAAA,EAAa,UAAA;AAC/C,MAAA,IACE,gBAAA,KAAqB,UACrB,iBAAA,KAAsB,MAAA,IACtB,KAAK,GAAA,CAAI,iBAAA,GAAoB,gBAAgB,CAAA,GAAI,mBAAA,EACjD;AACA,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,mBAAA;AAAA,YACE,sDAAA;AAAA,YACA,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,EAAE,UAAA,EAAY,gBAAA,EAAkB,WAAA,EAAa,mBAAA,EAAoB;AAAA,YACjE;AAAA;AACF,SACF;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAAc;AAAA,QAClB;AAAA,UACE,KAAA,EAAO,YAAA;AAAA,UACP,IAAA,EAAM,MAAA;AAAA,UACN,QAAA,EAAU,SAAA,CAAU,eAAA,CAAgB,SAAS,CAAA;AAAA,UAC7C,MAAA,EAAQ,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA;AAAA,UACnC,QAAA,EAAU,WAAA,CAAY,OAAA,CAAQ,WAAW;AAAA,SAC3C;AAAA,QACA;AAAA,UACE,KAAA,EAAO,gBAAA;AAAA,UACP,IAAA,EAAM,QAAA;AAAA,UACN,QAAA,EAAU,YAAY,eAAe,CAAA;AAAA,UACrC,MAAA,EAAQ,YAAY,OAAO,CAAA;AAAA,UAC3B,QAAA,EAAU,WAAA,CAAY,OAAA,CAAQ,WAAW;AAAA,SAC3C;AAAA,QACA;AAAA,UACE,KAAA,EAAO,YAAA;AAAA,UACP,IAAA,EAAM,MAAA;AAAA,UACN,QAAA,EAAU,UAAU,eAAe,CAAA;AAAA,UACnC,MAAA,EAAQ,UAAU,OAAO,CAAA;AAAA,UACzB,QAAA,EAAU,oBAAA,CAAqB,OAAA,EAAS,MAAA,EAAQ,MAAM;AAAA,SACxD;AAAA,QACA;AAAA,UACE,KAAA,EAAO,WAAA;AAAA,UACP,IAAA,EAAM,KAAA;AAAA,UACN,QAAA,EAAU,SAAS,eAAe,CAAA;AAAA,UAClC,MAAA,EAAQ,SAAS,OAAO,CAAA;AAAA,UACxB,QAAA,EAAU,oBAAA,CAAqB,OAAA,EAAS,KAAA,EAAO,KAAK;AAAA,SACtD;AAAA,QACA;AAAA,UACE,KAAA,EAAO,eAAA;AAAA,UACP,IAAA,EAAM,OAAA;AAAA,UACN,QAAA,EAAU,WAAW,eAAe,CAAA;AAAA,UACpC,MAAA,EAAQ,WAAW,OAAO,CAAA;AAAA,UAC1B,QAAA,EAAU,oBAAA,CAAqB,OAAA,EAAS,OAAA,EAAS,OAAO;AAAA,SAC1D;AAAA,QACA;AAAA,UACE,KAAA,EAAO,mBAAA;AAAA,UACP,IAAA,EAAM,WAAA;AAAA,UACN,QAAA,EAAU,eAAe,eAAe,CAAA;AAAA,UACxC,MAAA,EAAQ,eAAe,OAAO,CAAA;AAAA,UAC9B,QAAA,EAAU,oBAAA,CAAqB,OAAA,EAAS,WAAA,EAAa,WAAW;AAAA,SAClE;AAAA,QACA;AAAA,UACE,KAAA,EAAO,mBAAA;AAAA,UACP,IAAA,EAAM,WAAA;AAAA,UACN,QAAA,EAAU,eAAe,eAAe,CAAA;AAAA,UACxC,MAAA,EAAQ,eAAe,OAAO,CAAA;AAAA,UAC9B,UAAU,eAAA,CAAgB,OAAO,EAAE,CAAC,CAAA,GAChC,CAAC,aAAA,CAAc,eAAA,CAAgB,OAAO,CAAA,CAAE,CAAC,CAAA,EAAI,WAAW,CAAC,CAAA,GACzD,WAAA,CAAY,QAAQ,WAAW;AAAA;AACrC,OACF;AAEA,MAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,QAAA,IAAI,IAAA,CAAK,UAAU,UAAA,CAAW,QAAQ,MAAM,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,MAAM,CAAA,EAAG;AAC7E,UAAA;AAAA,QACF;AACA,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,mBAAA;AAAA,YACE,CAAA,EAAG,WAAW,KAAK,CAAA,uBAAA,CAAA;AAAA,YACnB,UAAA,CAAW,QAAA,CAAS,MAAA,GAAS,CAAA,GACzB,WAAW,QAAA,GACX,CAAC,EAAE,KAAA,EAAO,QAAQ,WAAA,EAAa,KAAA,EAAO,IAAA,EAAM,UAAA,CAAW,MAAM,CAAA;AAAA,YACjE,UAAA,CAAW,QAAA;AAAA,YACX,UAAA,CAAW;AAAA;AACb,SACF;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;AAeO,SAAS,yBAAA,CACd,OAAA,GAAsC,EAAC,EACvB;AAChB,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAW,CAAC,QAAQ,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,KAAe,IAAA;AAC1C,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,gBAAA;AAAA,IACJ,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAS,OAAA,EAAS;AAChB,MAAA,MAAM,QAAA,GAAW,kCAAA,CAAmC,OAAA,CAAQ,MAAM,CAAA;AAClE,MAAA,IAAI,UAAA,IAAc,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AACvC,QAAA,OAAO;AAAA,UACL,WAAA;AAAA,YACE,gBAAA;AAAA,YACA,yCAAA;AAAA,YACA,WAAA,CAAY,QAAQ,WAAW,CAAA;AAAA,YAC/B,EAAE,UAAA,EAAY,IAAA,EAAM,QAAA,EAAU,+BAAA,EAAgC;AAAA,YAC9D,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,CAAA;AAAE;AACvC,SACF;AAAA,MACF;AACA,MAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,QAAA,EAAU,MAAM,CAAA;AACxD,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AACnC,MAAA,OAAO;AAAA,QACL,WAAA;AAAA,UACE,gBAAA;AAAA,UACA,0BAA0B,QAAA,CAAS,MAAM,aAAa,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,UACvE,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,YACzB,OAAO,OAAA,CAAQ,KAAA;AAAA,YACf,SAAS,OAAA,CAAQ,SAAA;AAAA,YACjB,GAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS,GAAI,EAAC;AAAA,YACvE,IAAA,EAAM,SAAA;AAAA,YACN,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,QAAQ,OAAA,CAAQ,MAAA;AAAA,YAChB,IAAA,EAAM,CAAA,QAAA,EAAW,OAAA,CAAQ,IAAI,CAAA;AAAA,WAC/B,CAAE,CAAA;AAAA,UACF,EAAE,MAAA,EAAO;AAAA,UACT,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,YACzB,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,QAAQ,OAAA,CAAQ,MAAA;AAAA,YAChB,aAAa,OAAA,CAAQ;AAAA,WACvB,CAAE;AAAA;AACJ,OACF;AAAA,IACF;AAAA,GACF;AACF;AAUO,SAAS,cAAA,CACd,KAAA,EACA,OAAA,GAAiC,EAAC,EAChB;AAClB,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AACxD,EAAA,IAAI,QAAA,CAAS,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,OAAO,WAAA,CAAY,KAAA,EAAO,QAAA,CAAS,WAAA,EAAa,SAAS,GAAG,CAAA;AAAA,EAC9D;AAEA,EAAA,MAAM,QAAQ,WAAA,CAAY,OAAA,CAAQ,SAAS,EAAC,EAAG,QAAQ,MAAM,CAAA;AAC7D,EAAA,IAAI,KAAA,CAAM,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAChC,IAAA,OAAO,WAAA,CAAY,KAAA,EAAO,KAAA,CAAM,WAAA,EAAa,SAAS,GAAG,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC5B,IAAA,OAAO,WAAA;AAAA,MACL,KAAA;AAAA,MACA;AAAA,QACEI,WAAAA;AAAA,UACE,6BAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,QAAA,CAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,EAAO,QAAA,CAAS,GAAG,CAAA;AAC5C,EAAA,MAAM,OAAA,GAA6B;AAAA,IACjC,GAAG,KAAA;AAAA,IACH,GAAI,SAAS,GAAA,GAAM,EAAE,aAAa,QAAA,CAAS,GAAA,KAAQ,EAAC;AAAA,IACpD,GAAI,MAAM,WAAA,GAAc,EAAE,aAAa,KAAA,CAAM,WAAA,KAAgB;AAAC,GAChE;AACA,EAAA,MAAM,cAAsC,EAAC;AAC7C,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,MAAM,iBAA4C,EAAC;AAEnD,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY,gBAAA,CAAiB,IAAA,EAAM,OAAO,CAAC,CAAA;AAC5F,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,YAAY,CAAA;AAC7B,MAAA,cAAA,CAAe,IAAA,CAAK;AAAA,QAClB,QAAQ,IAAA,CAAK,EAAA;AAAA,QACb,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,MAAA,EAAQ,qBAAA,CAAsB,YAAA,EAAc,KAAK,CAAA;AAAA,QACjD,cAAc,YAAA,CAAa,MAAA;AAAA,QAC3B,GAAI,SAAS,GAAA,GAAM,EAAE,OAAO,QAAA,CAAS,GAAA,CAAI,KAAA,EAAM,GAAI;AAAC,OACrD,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,WAAA,CAAY,IAAA;AAAA,QACVA,WAAAA,CAAW,2BAA2B,CAAA,KAAA,EAAQ,IAAA,CAAK,EAAE,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,EAAE;AAAA,OACrF;AACA,MAAA,cAAA,CAAe,IAAA,CAAK;AAAA,QAClB,QAAQ,IAAA,CAAK,EAAA;AAAA,QACb,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,MAAA,EAAQ,OAAA;AAAA,QACR,YAAA,EAAc,CAAA;AAAA,QACd,GAAI,SAAS,GAAA,GAAM,EAAE,OAAO,QAAA,CAAS,GAAA,CAAI,KAAA,EAAM,GAAI;AAAC,OACrD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,OAAO,WAAA,CAAY,KAAA,EAAO,WAAA,EAAa,QAAA,CAAS,KAAK,cAAc,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,KAAA,CAAM,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,OAAA,EAAS,KAAK,CAAU,CAAC,CAAA;AAC3F,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,IAAA,CAAK,eAAA,CAAgB,SAAS,CAAC,CAAA;AAC/D,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,cAAA,EAAgB,WAAA,EAAa,eAAe,MAAM,CAAA;AAC5E,EAAA,MAAM,MAAA,GAA2B,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,MAAA;AAE/D,EAAA,OAAO;AAAA,IACL,IAAI,MAAA,KAAW,MAAA;AAAA,IACf,MAAA;AAAA,IACA,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA;AAAA,IACnB,GAAI,SAAS,GAAA,GAAM,EAAE,OAAO,QAAA,CAAS,GAAA,CAAI,KAAA,EAAM,GAAI,EAAC;AAAA,IACpD,OAAA;AAAA,IACA,QAAA,EAAU,cAAA;AAAA,IACV,WAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACr/FA,SAAS,aAAa,KAAA,EAAsC;AAC1D,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,MAAA;AAClC,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,KAAK,IAAA,EAAK,KAAM,IAAI,OAAO,MAAA;AAC3D,IAAA,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,aAAA,CACP,QACA,SAAA,EACsB;AACtB,EAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAML,SAAQ,KAAA,CAAM,UAAA;AACpB,IAAA,IAAI,CAACA,MAAAA,IAAS,OAAOA,MAAAA,KAAU,QAAA,EAAU;AACzC,IAAA,MAAM,MAAA,GAAS,YAAA,CAAaA,MAAAA,CAAM,SAAS,CAAC,CAAA;AAC5C,IAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,IAAA,MAAM,MAAA,GACJA,MAAAA,CAAM,QAAA,IAAY,OAAOA,MAAAA,CAAM,QAAA,KAAa,QAAA,GACxC,YAAA,CAAcA,MAAAA,CAAM,QAAA,CAAqC,SAAS,CAAC,CAAA,GACnE,MAAA;AACN,IAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,IAAA,CACP,MAAA,EACA,OAAA,EACA,QAAA,EACA,UACA,MAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa,EAAC;AAAA,IAC7C,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,IACzC,QAAA,EAAU,CAAC,GAAG,QAAQ;AAAA,GACxB;AACF;AAEA,SAAS,aAAa,MAAA,EAAqC;AACzD,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,MAAM,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAC/D;AAEA,SAAS,QAAA,CAAS,MAAyB,KAAA,EAAmC;AAC5E,EAAA,MAAM,CAAA,GAAI,aAAa,IAAI,CAAA;AAC3B,EAAA,MAAM,CAAA,GAAI,aAAa,KAAK,CAAA;AAC5B,EAAA,OAAO,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,KAAU,CAAA,CAAE,KAAK,CAAC,CAAA;AAC9E;AAKO,SAAS,oBAAA,CACd,MAAA,EACA,KAAA,EACAQ,YAAAA,EACA,gBAAA,EACqB;AACrB,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,MAAM,WACJ,KAAA,CAAM,aAAA,IACN,aAAA,CAAc,MAAA,EAAQ,MAAM,sBAAsB,CAAA;AACpD,EAAA,MAAM,WACJ,KAAA,CAAM,aAAA,IACN,aAAA,CAAc,MAAA,EAAQ,MAAM,sBAAsB,CAAA;AAEpD,EAAA,IAAI,MAAM,8BAAA,EAAgC;AACxC,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,MAAA,EAAW;AACpD,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,IAAA;AAAA,UACE,6CAAA;AAAA,UACA,6DAAA;AAAA,UACAA,YAAAA;AAAA,UACA,EAAE,eAAA,EAAiB,QAAA,KAAa,MAAA,EAAW,eAAA,EAAiB,aAAa,MAAA,EAAU;AAAA,UACnF,EAAE,MAAM,uCAAA;AAAwC;AAClD,OACF;AAAA,IACF,CAAA,MAAA,IAAW,CAAC,QAAA,CAAS,QAAA,EAAU,QAAQ,CAAA,EAAG;AACxC,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,IAAA;AAAA,UACE,6CAAA;AAAA,UACA,4CAAA;AAAA,UACAA,YAAAA;AAAA,UACA,aAAa,QAAQ,CAAA;AAAA,UACrB,aAAa,QAAQ;AAAA;AACvB,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,YAAA;AAAA,IACpB,OACG,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,MAAA,IAAU,KAAA,CAAM,MAAA,KAAW,SAAS,EACrE,GAAA,CAAI,CAAC,KAAA,KAAU,wBAAA,CAAyB,KAAK,CAAC;AAAA,GACnD;AAEA,EAAA,IAAI,MAAM,6BAAA,EAA+B;AACvC,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,IAAA;AAAA,UACE,4CAAA;AAAA,UACA,mEAAA;AAAA,UACAA,YAAAA;AAAA,UACA,MAAA;AAAA,UACA,EAAE,MAAM,uCAAA;AAAwC;AAClD,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,QAAQ,CAAA;AACpC,MAAA,MAAM,OAAA,GAAU,cAAc,MAAA,CAAO,CAAC,SAAS,CAAC,WAAA,CAAY,GAAA,CAAI,IAAI,CAAC,CAAA;AACrE,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,IAAA;AAAA,YACE,4CAAA;AAAA,YACA,CAAA,2CAAA,EAA8C,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,YAChEA,YAAAA;AAAA,YACA,aAAa,QAAQ,CAAA;AAAA,YACrB;AAAA;AACF,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,6BAAA,EAA+B;AACvC,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,IAAA;AAAA,UACE,4CAAA;AAAA,UACA,mEAAA;AAAA,UACAA,YAAAA;AAAA,UACA,MAAA;AAAA,UACA,EAAE,MAAM,uCAAA;AAAwC;AAClD,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,QAAQ,CAAA;AACpC,MAAA,MAAM,OAAA,GAAU,cAAc,MAAA,CAAO,CAAC,SAAS,CAAC,WAAA,CAAY,GAAA,CAAI,IAAI,CAAC,CAAA;AACrE,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,IAAA;AAAA,YACE,4CAAA;AAAA,YACA,CAAA,qCAAA,EAAwC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,YAC1DA,YAAAA;AAAA,YACA,aAAa,QAAQ,CAAA;AAAA,YACrB;AAAA;AACF,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,cAAA,IAAkB,EAAC,EAAG;AAC9C,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,CAAA,QAAA,EAAW,MAAM,KAAK,CAAA,CAAA;AAC/D,IAAA,IAAI,CAAC,gBAAA,CAAiB,GAAA,CAAI,WAAW,CAAA,EAAG;AACtC,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,IAAA;AAAA,UACE,CAAA,wBAAA,EAA2B,MAAM,KAAK,CAAA,CAAA;AAAA,UACtC,+CAA+C,WAAW,CAAA,CAAA,CAAA;AAAA,UAC1DA,YAAAA;AAAA,UACA,WAAA;AAAA,UACA,CAAC,GAAG,gBAAgB;AAAA;AACtB,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;;;AC3LA,SAASC,KAAAA,CACP,MAAA,EACA,OAAA,EACA,QAAA,EACA,UACA,MAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa,EAAC;AAAA,IAC7C,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,IACzC,QAAA,EAAU,CAAC,GAAG,QAAQ;AAAA,GACxB;AACF;AAEA,SAAS,YAAY,KAAA,EAAuD;AAC1E,EAAA,MAAMT,SAAQ,KAAA,CAAM,UAAA;AACpB,EAAA,IAAI,CAACA,MAAAA,IAAS,OAAOA,MAAAA,KAAU,QAAA,SAAiB,EAAC;AACjD,EAAA,MAAM,MAAA,GAAS,+BAA+BA,MAAK,CAAA;AACnD,EAAA,MAAM,MAAA,GACJA,MAAAA,CAAM,QAAA,IAAY,OAAOA,MAAAA,CAAM,aAAa,QAAA,GACxC,8BAAA,CAA+BA,MAAAA,CAAM,QAAmC,CAAA,GACxE,MAAA;AACN,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,GAAG,MAAA,EAAO;AAChC;AAEA,SAAS,uBAAuB,KAAA,EAAuC;AACrE,EAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAClC,EAAA,IAAI,OAAO,SAAS,cAAA,KAAmB,QAAA,IAAY,SAAS,cAAA,CAAe,IAAA,OAAW,EAAA,EAAI;AACxF,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAMA,MAAAA,GAAQ,KAAA,CAAM,UAAA,IAAc,EAAC;AACnC,EAAA,IAAIA,MAAAA,CAAM,YAAA,KAAiB,IAAA,EAAM,OAAO,IAAA;AACxC,EAAA,IAAIA,MAAAA,CAAM,UAAA,KAAe,KAAA,EAAO,OAAO,IAAA;AACvC,EAAA,OAAO,KAAA;AACT;AAEA,SAASU,eAAc,KAAA,EAAkD;AACvE,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,QAAQ,KAAA,CAAM;AAAA,GAChB;AACF;AAEA,SAAS,UAAU,KAAA,EAAsC;AACvD,EAAA,OAAO,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,SAAA,IAAa,EAAA;AAC/C;AAEA,SAAS,WAAW,MAAA,EAAmE;AACrF,EAAA,OAAO,CAAC,GAAG,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,SAAA,CAAU,CAAC,CAAA,CAAE,aAAA,CAAc,SAAA,CAAU,CAAC,CAAC,CAAC,CAAA;AAC5E;AAEA,SAAS,gBAAgB,KAAA,EAAkD;AACzE,EAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,IAAiB,QAAA,CAAS,OAAA;AACjD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,MAAA;AACvE;AAEA,SAAS,YAAY,KAAA,EAAkD;AACrE,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAK,CAAA,CAAE,SAAA;AACjC,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAK,KAAM,KAAK,KAAA,GAAQ,MAAA;AACpE;AAMO,SAAS,uBAAuB,OAAA,EAAmD;AACxF,EAAA,MAAM,aAAa,IAAI,GAAA;AAAA,IACrB,OAAA,CACG,GAAA,CAAI,CAAC,KAAA,KAAU,WAAA,CAAY,KAAK,CAAC,CAAA,CACjC,MAAA,CAAO,CAAC,KAAA,KAA2B,KAAA,KAAU,MAAS;AAAA,GAC3D;AACA,EAAA,IAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACvB,IAAA,OAAO,UAAA,CAAW,IAAA;AAAA,EACpB;AAEA,EAAA,MAAM,OAAA,GAAU,QACb,GAAA,CAAI,CAAC,UAAU,eAAA,CAAgB,KAAK,CAAC,CAAA,CACrC,MAAA,CAAO,CAAC,KAAA,KAA2B,KAAA,KAAU,MAAS,CAAA,CACtD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACvB,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,SAAS,CAAC,GAAG,IAAI,GAAA,CAAI,OAAO,CAAC,CAAA;AACnC,IAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AACpC,IAAA,MAAM,UAAA,GACJ,MAAA,CAAO,MAAA,KAAW,GAAA,GAAM,GAAA,GAAM,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,KAAU,MAAM,KAAK,CAAA;AACzF,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IAChB;AACA,IAAA,OAAO,MAAA,CAAO,MAAA;AAAA,EAChB;AAEA,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,MAAA,IAAU,KAAA,CAAM,IAAA,KAAS,KAAK,CAAA,CAAE,MAAA;AAClF;AAUO,SAAS,oBAAA,CACd,KAAA,EACA,YAAA,EACA,UAAA,EACqB;AACrB,EAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAClC,EAAA,MAAM,aAAA,GAAgB,gBAAgB,KAAK,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,YAAY,KAAK,CAAA;AACnC,EAAA,MAAM,UAAU,QAAA,CAAS,OAAA;AAEzB,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,IAAA,OAAW,EAAA,EAAI;AACxD,IAAA,MAAM,SAAS,UAAA,CAAW,IAAA;AAAA,MACxB,CAAC,SAAA,KACC,SAAA,CAAU,OAAA,KAAY,OAAA,IACtB,WAAA,CAAY,SAAS,CAAA,KAAM,OAAA,IAC3B,WAAA,CAAY,SAAS,CAAA,CAAE,WAAA,KAAgB;AAAA,KAC3C;AACA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,wBAAA,EAAyB;AAAA,IAC7D;AACA,IAAA,IAAI,SAAA,CAAU,MAAM,CAAA,GAAI,SAAA,CAAU,KAAK,CAAA,EAAG;AACxC,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,uCAAA,EAAwC;AAAA,IAC5E;AACA,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EACzB;AAEA,EAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,IAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,MAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,IACzB;AACA,IAAA,IAAI,kBAAkB,CAAA,EAAG;AACvB,MAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,IAAA,CAAK,CAAC,SAAA,KAAc;AACrD,MAAA,MAAM,OAAA,GAAU,YAAY,SAAS,CAAA;AACrC,MAAA,OAAO,OAAA,KAAY,UAAa,OAAA,KAAY,SAAA;AAAA,IAC9C,CAAC,CAAA;AACD,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,IACzB;AACA,IAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,MAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,MAAM,gBAAgB,YAAA,CAAa,MAAA;AAAA,IACjC,CAAC,SAAA,KAAc,SAAA,CAAU,MAAA,KAAW,IAAA,IAAQ,UAAU,MAAA,KAAW;AAAA,GACnE;AACA,EAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EACzB;AACA,EAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EACzB;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,4BAAA,EAA6B;AACjE;AAEA,SAAS,uBAAuB,OAAA,EAAoD;AAClF,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,EAAA,GAAK,YAAY,KAAK,CAAA;AAC5B,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG,OAAO,IAAA;AACzB,IAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AAAA,EACb;AACA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,wBAAA,CACd,MAAA,EACA,KAAA,EACA,YAAA,EACqB;AACrB,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAqC;AAE7D,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAClC,IAAA,MAAM,cAAc,QAAA,CAAS,WAAA;AAC7B,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,WAAW,KAAK,EAAC;AAC9C,IAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,IAAA,WAAA,CAAY,GAAA,CAAI,aAAa,IAAI,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,KAAA,CAAM,gBAAgB,MAAA,EAAW;AACnC,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,OAAO,CAAA,IAAK,WAAA,EAAa;AAChD,MAAA,IAAI,sBAAA,CAAuB,OAAO,CAAA,EAAG;AACnC,QAAA,QAAA,CAAS,IAAA;AAAA,UACPD,KAAAA;AAAA,YACE,qCAAA;AAAA,YACA,aAAa,WAAW,CAAA,gCAAA,CAAA;AAAA,YACxB,QAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAIC,cAAa,CAAA;AAAA,YACrC,kBAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,uBAAuB,OAAO,CAAA;AAC5C,MAAA,IAAI,KAAA,GAAQ,MAAM,WAAA,EAAa;AAC7B,QAAA,QAAA,CAAS,IAAA;AAAA,UACPD,KAAAA;AAAA,YACE,6BAAA;AAAA,YACA,CAAA,UAAA,EAAa,WAAW,CAAA,sBAAA,EAAyB,KAAA,CAAM,WAAW,CAAA,CAAA,CAAA;AAAA,YAClE,QAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAIC,cAAa,CAAA;AAAA,YACrC,KAAA,CAAM,WAAA;AAAA,YACN;AAAA;AACF,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,qBAAA,EAAuB;AAC/B,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,OAAO,CAAA,IAAK,WAAA,EAAa;AAChD,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,IAAA,CAAK,CAAC,KAAA,KAAU,MAAM,MAAA,KAAW,IAAA,IAAQ,KAAA,CAAM,MAAA,KAAW,OAAO,CAAA;AAC7F,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,QAAA,CAAS,IAAA;AAAA,UACPD,KAAAA;AAAA,YACE,gCAAA;AAAA,YACA,aAAa,WAAW,CAAA,iCAAA,CAAA;AAAA,YACxB,QAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAIC,cAAa,CAAA;AAAA,YACrC,UAAA;AAAA,YACA,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,MAAM;AAAA;AACrC,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,wBAAA,EAA0B;AAClC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAClC,MAAA,MAAM,aAAa,QAAA,CAAS,UAAA;AAC5B,MAAA,IAAI,CAAC,UAAA,EAAY;AACjB,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,UAAU,KAAK,EAAC;AAC9C,MAAA,MAAM,aAAA,GAAgB,UAAU,KAAK,CAAA;AACrC,MAAA,MAAM,iBAAiB,KAAA,CAAM,IAAA;AAAA,QAC3B,CAAC,SAAA,KACC,SAAA,CAAU,MAAA,KAAW,OAAA,IACrB,SAAA,CAAU,SAAS,CAAA,KAAM,EAAA,IACzB,aAAA,KAAkB,EAAA,IAClB,SAAA,CAAU,SAAS,CAAA,GAAI;AAAA,OAC3B;AACA,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,QAAA,CAAS,IAAA;AAAA,UACPD,KAAAA;AAAA,YACE,uCAAA;AAAA,YACA,gBAAgB,UAAU,CAAA,8DAAA,CAAA;AAAA,YAC1B,CAACC,cAAAA,CAAc,KAAK,CAAC,CAAA;AAAA,YACrB,uBAAA;AAAA,YACA,EAAE,UAAA;AAAW;AACf,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,gBAAgB,IAAI,GAAA,CAAI,KAAA,CAAM,kBAAA,IAAsB,EAAE,CAAA;AAC5D,EAAA,IAAI,aAAA,CAAc,IAAA,GAAO,CAAA,IAAK,KAAA,CAAM,kCAAA,EAAoC;AACtE,IAAA,MAAM,aAAa,MAAA,CAAO,MAAA;AAAA,MACxB,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,MAAM,MAAA,KAAW;AAAA,KACvD;AACA,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAqC;AAC1D,IAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAC9B,MAAA,MAAM,IAAA,GAAO,yBAAyB,KAAK,CAAA;AAC3C,MAAA,MAAM,QAAA,GAAW,YAAY,KAAK,CAAA;AAClC,MAAA,MAAM,MAAM,CAAA,EAAG,QAAA,CAAS,WAAA,IAAe,IAAI,KAAK,IAAI,CAAA,CAAA;AACpD,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,GAAG,KAAK,EAAC;AACnC,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,MAAA,QAAA,CAAS,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACxB;AACA,IAAA,KAAA,MAAW,GAAG,OAAO,CAAA,IAAK,QAAA,EAAU;AAClC,MAAA,MAAM,OAAA,GAAU,WAAW,OAAO,CAAA;AAClC,MAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,MAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,MAAA,MAAM,QAAiC,EAAC;AACxC,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,MAAM,IAAA,GAAO,yBAAyB,KAAK,CAAA;AAC3C,QAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA;AAEjE,QAAA,IAAI,cAAA,CAAe,IAAA,KAAS,SAAA,IAAa,KAAA,CAAM,kCAAA,EAAoC;AACjF,UAAA,QAAA,CAAS,IAAA;AAAA,YACPD,KAAAA;AAAA,cACE,mCAAA;AAAA,cACA,uCAAuC,IAAI,CAAA,oCAAA,CAAA;AAAA,cAC3C,CAACC,cAAAA,CAAc,KAAK,CAAC,CAAA;AAAA,cACrB,2BAAA;AAAA,cACA,cAAA,CAAe;AAAA;AACjB,WACF;AAAA,QACF;AAEA,QAAA,MAAM,OAAA,GAAU,eAAe,IAAA,KAAS,OAAA;AACxC,QAAA,IAAI,WAAW,KAAA,CAAM,kCAAA,IAAsC,CAAC,sBAAA,CAAuB,KAAK,CAAA,EAAG;AACzF,UAAA,QAAA,CAAS,IAAA;AAAA,YACPD,KAAAA;AAAA,cACE,qCAAA;AAAA,cACA,iBAAiB,IAAI,CAAA,8CAAA,CAAA;AAAA,cACrB,CAACC,cAAAA,CAAc,KAAK,CAAC,CAAA;AAAA,cACrB,6BAAA;AAAA,cACA,EAAE,MAAM,qCAAA;AAAsC;AAChD,WACF;AAAA,QACF;AAEA,QAAA,IAAI,KAAA,IAAS,cAAc,GAAA,CAAI,IAAI,KAAK,eAAA,IAAmB,CAAC,sBAAA,CAAuB,KAAK,CAAA,EAAG;AACzF,UAAA,QAAA,CAAS,IAAA;AAAA,YACPD,KAAAA;AAAA,cACE,2CAAA;AAAA,cACA,gCAAgC,IAAI,CAAA,kCAAA,CAAA;AAAA,cACpC,CAACC,cAAAA,CAAc,KAAK,CAAC,CAAA;AAAA,cACrB,4BAAA;AAAA,cACA;AAAA;AACF,WACF;AAAA,QACF;AAEA,QAAA,IAAI,KAAA,CAAM,WAAW,IAAA,EAAM;AACzB,UAAA,KAAA,GAAQ,IAAA;AACR,UAAA,IAAI,cAAc,GAAA,CAAI,IAAI,KAAK,CAAC,sBAAA,CAAuB,KAAK,CAAA,EAAG;AAC7D,YAAA,eAAA,GAAkB,IAAA;AAAA,UACpB;AAAA,QACF;AACA,QAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,8BAAA,EAAgC;AACxC,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,OAAO,CAAA,IAAK,WAAA,EAAa;AAChD,MAAA,MAAM,OAAA,GAAU,WAAW,OAAO,CAAA;AAClC,MAAA,MAAM,UAAU,OAAA,CAAQ,MAAA;AAAA,QACtB,CAAC,KAAA,KAAA,CACE,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,IAAA,KAAS,KAAA,MACxC,KAAA,CAAM,MAAA,KAAW,IAAA,IAAQ,KAAA,CAAM,MAAA,KAAW,OAAA;AAAA,OAC/C;AACA,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AAExB,MAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,MAAA,IAAI,oBAAA,GAAuB,KAAA;AAC3B,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,IAAI,KAAA,CAAM,WAAW,OAAA,EAAS;AAC5B,UAAA,eAAA,GAAkB,IAAA;AAAA,QACpB,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,KAAW,IAAA,IAAQ,eAAA,EAAiB;AACnD,UAAA,oBAAA,GAAuB,IAAA;AAAA,QACzB;AAAA,MACF;AAEA,MAAA,MAAM,QAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,IAAI,CAAA;AAC3D,MAAA,MAAM,UAAA,GACJ,OAAA,CAAQ,IAAA,CAAK,CAAC,KAAA,KAAU;AACtB,QAAA,MAAM,IAAA,GAAO,YAAY,KAAK,CAAA;AAC9B,QAAA,OACE,IAAA,CAAK,SAAA,KAAc,MAAA,IACnB,IAAA,CAAK,aAAA,KAAkB,UACvB,IAAA,CAAK,OAAA,KAAY,MAAA,IACjB,IAAA,CAAK,OAAA,KAAY,MAAA;AAAA,MAErB,CAAC,CAAA,IAAK,OAAA,CAAQ,MAAA,GAAS,CAAA;AAEzB,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,KAAA,EAAO;AAE3B,MAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,QAAA,QAAA,CAAS,IAAA;AAAA,UACPD,KAAAA;AAAA,YACE,0CAAA;AAAA,YACA,aAAa,WAAW,CAAA,iFAAA,CAAA;AAAA,YACxB,QAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAIC,cAAa,CAAA;AAAA,YACrC,6BAAA;AAAA,YACA;AAAA,cACE,eAAA;AAAA,cACA,UAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,MAAM;AAAA;AAC/C;AACF,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;;;AClYA,SAAS,mBAAA,CACP,MAAA,EACA,OAAA,EACA,QAAA,EACA,UACA,MAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,KAAa,EAAC;AAAA,IAC7C,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW,EAAC;AAAA,IACzC,QAAA,EAAU,CAAC,GAAG,QAAQ;AAAA,GACxB;AACF;AA0MA,SAAS,gBAAgB,MAAA,EAA4C;AACnE,EAAA,IAAI,WAAW,IAAA,IAAQ,MAAA,KAAW,OAAA,IAAW,MAAA,KAAW,WAAW,OAAO,MAAA;AAC1E,EAAA,IAAI,MAAA,KAAW,WAAW,OAAO,IAAA;AACjC,EAAA,IAAI,MAAA,KAAW,UAAU,OAAO,OAAA;AAChC,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,UAAU,IAAA,EAA4C;AAC7D,EAAA,OAAO;AAAA,IACL,GAAI,IAAA,CAAK,GAAA,GAAM,EAAE,GAAA,EAAK,EAAE,GAAG,IAAA,CAAK,GAAA,EAAI,EAAE,GAAI,EAAC;AAAA,IAC3C,GAAI,KAAK,KAAA,GACL;AAAA,MACE,KAAA,EAAO;AAAA,QACL,GAAG,IAAA,CAAK,KAAA;AAAA,QACR,GAAI,IAAA,CAAK,KAAA,CAAM,YAAY,EAAE,SAAA,EAAW,KAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,CAAC,UAAU,EAAE,GAAG,MAAK,CAAE,CAAA,KAAM,EAAC;AAAA,QAC/F,GAAI,IAAA,CAAK,KAAA,CAAM,aACX,EAAE,UAAA,EAAY,KAAK,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAAC,UAAU,EAAE,GAAG,MAAK,CAAE,CAAA,KAC/D;AAAC;AACP,QAEF,EAAC;AAAA,IACL,GAAI,IAAA,CAAK,GAAA,GAAM,EAAE,GAAA,EAAK,EAAE,GAAG,IAAA,CAAK,GAAA,EAAI,EAAE,GAAI,EAAC;AAAA,IAC3C,GAAI,KAAK,YAAA,GACL;AAAA,MACE,YAAA,EAAc;AAAA,QACZ,GAAG,IAAA,CAAK,YAAA;AAAA,QACR,GAAI,IAAA,CAAK,YAAA,CAAa,iBAAA,GAClB,EAAE,iBAAA,EAAmB,EAAE,GAAG,IAAA,CAAK,YAAA,CAAa,iBAAA,EAAkB,KAC9D;AAAC;AACP,QAEF,EAAC;AAAA,IACL,GAAI,KAAK,QAAA,GACL;AAAA,MACE,QAAA,EAAU;AAAA,QACR,GAAG,IAAA,CAAK,QAAA;AAAA,QACR,GAAI,IAAA,CAAK,QAAA,CAAS,aAAA,GACd,EAAE,aAAA,EAAe,CAAC,GAAG,IAAA,CAAK,QAAA,CAAS,aAAa,CAAA,KAChD,EAAC;AAAA,QACL,GAAI,IAAA,CAAK,QAAA,CAAS,aAAA,GACd,EAAE,aAAA,EAAe,CAAC,GAAG,IAAA,CAAK,QAAA,CAAS,aAAa,CAAA,KAChD,EAAC;AAAA,QACL,GAAI,IAAA,CAAK,QAAA,CAAS,iBACd,EAAE,cAAA,EAAgB,KAAK,QAAA,CAAS,cAAA,CAAe,GAAA,CAAI,CAAC,UAAU,EAAE,GAAG,MAAK,CAAE,CAAA,KAC1E;AAAC;AACP,QAEF,EAAC;AAAA,IACL,GAAI,KAAK,KAAA,GACL;AAAA,MACE,KAAA,EAAO;AAAA,QACL,GAAG,IAAA,CAAK,KAAA;AAAA,QACR,GAAI,IAAA,CAAK,KAAA,CAAM,kBAAA,GACX,EAAE,kBAAA,EAAoB,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,kBAAkB,CAAA,KACvD;AAAC;AACP,QAEF;AAAC,GACP;AACF;AAEA,SAAS,aAAa,IAAA,EAAkC;AACtD,EAAA,OACE,KAAK,GAAA,KAAQ,MAAA,IACb,IAAA,CAAK,KAAA,KAAU,UACf,IAAA,CAAK,GAAA,KAAQ,MAAA,IACb,IAAA,CAAK,iBAAiB,MAAA,IACtB,IAAA,CAAK,QAAA,KAAa,MAAA,IAClB,KAAK,KAAA,KAAU,MAAA;AAEnB;AAEA,IAAM,sBAAA,GAAyB,EAAA;AAC/B,IAAM,iBAAA,GAAoB,IAAI,GAAA,CAAY,wBAAwB,CAAA;AAOlE,SAAS,sBAAsB,QAAA,EAAqC;AAClE,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,IAAA,EAAM;AAC/C,IAAA,OAAO,EAAE,QAAQ,SAAA,EAAU;AAAA,EAC7B;AACA,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,MAAM,OAAA,GAAU,SAAS,IAAA,EAAK;AAC9B,IAAA,IAAI,YAAY,EAAA,EAAI;AAClB,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,uBAAA,EAAwB;AAAA,IAC9D;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,CAAC,OAAO,CAAA,EAAE;AAAA,EAC7C;AACA,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3D,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,QAAA;AACf,EAAA,IAAI,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,EAAU;AACtC,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAK;AACpC,IAAA,IAAI,YAAY,EAAA,EAAI;AAClB,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,wBAAA,EAAyB;AAAA,IAC/D;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,CAAC,OAAO,CAAA,EAAE;AAAA,EAC7C;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,EAAG;AAClC,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAChC,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,yBAAA,EAA0B;AAAA,IAChE;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,sBAAA,EAAwB;AACnD,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,MAAA,EAAQ,sCAAsC,sBAAsB,CAAA;AAAA,OACtE;AAAA,IACF;AACA,IAAA,MAAM,WAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,QAAA,EAAU;AAClC,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAClD,QAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,4CAAA,EAA6C;AAAA,MACnF;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,IAC3B;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAS;AAAA,EAClC;AACA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,SAAS,4BAAA,CACP,OAAA,EACA,iBAAA,EACA,aAAA,EACqB;AACrB,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,MAAM,YAAA,GAAqC;AAAA,IACzC;AAAA,MACE,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,SAAS,OAAA,CAAQ,SAAA;AAAA,MACjB,IAAA,EAAM,SAAA;AAAA,MACN,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,IAAA,EAAM,CAAA,QAAA,EAAW,OAAA,CAAQ,IAAI,CAAA;AAAA;AAC/B,GACF;AAEA,EAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,IAAA,IAAI,QAAQ,MAAA,KAAW,MAAA,IAAa,QAAQ,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AAChE,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,mBAAA;AAAA,UACE,wCAAA;AAAA,UACA,CAAA,YAAA,EAAe,QAAQ,IAAI,CAAA,gCAAA,CAAA;AAAA,UAC3B,YAAA;AAAA,UACA,EAAE,QAAQ,IAAA,EAAK;AAAA,UACf,EAAE,IAAA,EAAM,OAAA,CAAQ,MAAM,MAAA,EAAQ,OAAA,CAAQ,UAAU,IAAA;AAAK;AACvD,OACF;AAAA,IACF,WAAW,CAAC,iBAAA,CAAkB,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,mBAAA;AAAA,UACE,wCAAA;AAAA,UACA,CAAA,YAAA,EAAe,OAAA,CAAQ,IAAI,CAAA,QAAA,EAAW,QAAQ,MAAM,CAAA,yDAAA,CAAA;AAAA,UACpD,YAAA;AAAA,UACA,EAAE,gBAAA,EAAkB,CAAC,GAAG,wBAAwB,CAAA,EAAE;AAAA,UAClD,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,QAAQ,MAAA;AAAO;AAC/C,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,iBAAA,CAAkB,QAAA,IAAY,iBAAA,CAAkB,qBAAA,EAAuB;AACzE,IAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,OAAA,CAAQ,QAAQ,CAAA;AACrD,IAAA,IAAI,MAAA,CAAO,WAAW,SAAA,EAAW;AAC/B,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,mBAAA;AAAA,UACE,0CAAA;AAAA,UACA,CAAA,YAAA,EAAe,QAAQ,IAAI,CAAA,wCAAA,CAAA;AAAA,UAC3B,YAAA;AAAA,UACA,EAAE,UAAU,IAAA,EAAK;AAAA,UACjB,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,UAAU,IAAA;AAAK;AACvC,OACF;AAAA,IACF,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,KAAW,SAAA,EAAW;AACtC,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,mBAAA;AAAA,UACE,0CAAA;AAAA,UACA,CAAA,YAAA,EAAe,OAAA,CAAQ,IAAI,CAAA,4CAAA,EAA+C,OAAO,MAAM,CAAA,EAAA,CAAA;AAAA,UACvF,YAAA;AAAA,UACA,EAAE,UAAU,IAAA,EAAK;AAAA,UACjB,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,MAAA,EAAQ,OAAO,MAAA;AAAO;AAC9C,OACF;AAAA,IACF,CAAA,MAAA,IAAW,kBAAkB,qBAAA,EAAuB;AAClD,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,CAAC,YAAY,CAAC,aAAA,CAAc,GAAA,CAAI,OAAO,CAAC,CAAA;AAC/E,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,mBAAA;AAAA,YACE,0CAAA;AAAA,YACA,eAAe,OAAA,CAAQ,IAAI,oDAAoD,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,YACjG,YAAA;AAAA,YACA,EAAE,qBAAA,EAAuB,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA,EAAS;AAAA,YACzD,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,OAAA;AAAQ;AAChC,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,gBAAgB,QAAA,EAA+C;AACtE,EAAA,MAAM,QAA0B,EAAC;AAEjC,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,GAAA,EAAK,eAAA,IAAmB,EAAC;AAC1D,EAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,mBAAA,CAAoB;AAAA,QAClB,QAAA,EAAU,eAAA,CAAgB,eAAA,CAAgB,CAAC,CAAE,CAAA;AAAA,QAC7C,eAAA,EAAiB,QAAA,CAAS,GAAA,EAAK,gBAAA,KAAqB;AAAA,OACrD;AAAA,KACH;AAAA,EACF,CAAA,MAAA,IAAW,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACrC,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,IAAI,IAAI,eAAA,CAAgB,GAAA,CAAI,eAAe,CAAC,CAAC,CAAA;AAClE,IAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,GAAA,EAAK,gBAAA,KAAqB,KAAA;AAC3D,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,8BAAA;AAAA,MACJ,QAAA,EAAU,KAAA;AAAA,MACV,eAAA,EAAiB,OAAA;AAAA,MACjB,SAAS,OAAA,EAAS;AAChB,QAAA,MAAM,WAAgC,EAAC;AACvC,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,WAAA,EAAa,MAAA,IAAU,SAAA;AAC9C,QAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,MAAoC,CAAA,EAAG;AAC5D,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,mBAAA;AAAA,cACE,8BAAA;AAAA,cACA,cAAc,MAAM,CAAA,qCAAA,EAAwC,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,cAC/E,QAAQ,WAAA,GACJ;AAAA,gBACE;AAAA,kBACE,KAAA,EAAO,QAAQ,WAAA,CAAY,KAAA;AAAA,kBAC3B,IAAA,EAAM,KAAA;AAAA,kBACN,IAAA,EAAM,QAAQ,WAAA,CAAY,IAAA;AAAA,kBAC1B,MAAA,EAAQ,QAAQ,WAAA,CAAY;AAAA;AAC9B,kBAEF,EAAC;AAAA,cACL,QAAA;AAAA,cACA;AAAA;AACF,WACF;AAAA,QACF;AACA,QAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,UAAA,MAAM,OAAA,GAAA,CAAW,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,MAAA,EAAQ,MAAA;AAAA,YACxD,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW;AAAA,WAC9B;AACA,UAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,YAAA,QAAA,CAAS,IAAA;AAAA,cACP,mBAAA;AAAA,gBACE,8BAAA;AAAA,gBACA,yCAAA;AAAA,gBACA,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,kBACtB,OAAO,KAAA,CAAM,KAAA;AAAA,kBACb,SAAS,KAAA,CAAM,OAAA;AAAA,kBACf,MAAM,KAAA,CAAM,IAAA;AAAA,kBACZ,MAAM,KAAA,CAAM,IAAA;AAAA,kBACZ,QAAQ,KAAA,CAAM;AAAA,iBAChB,CAAE,CAAA;AAAA,gBACF,mBAAA;AAAA,gBACA,OAAA,CAAQ;AAAA;AACV,aACF;AAAA,UACF;AAAA,QACF;AACA,QAAA,OAAO,QAAA;AAAA,MACT;AAAA,KACD,CAAA;AAAA,EACH,CAAA,MAAA,IAAW,QAAA,CAAS,GAAA,EAAK,gBAAA,KAAqB,KAAA,EAAO;AACnD,IAAA,KAAA,CAAM,KAAK,mBAAA,CAAoB,EAAE,eAAA,EAAiB,KAAA,EAAO,CAAC,CAAA;AAAA,EAC5D;AAEA,EAAA,IAAI,QAAA,CAAS,GAAA,EAAK,aAAA,KAAkB,MAAA,EAAW;AAC7C,IAAA,KAAA,CAAM,IAAA,CAAK,sBAAsB,EAAE,aAAA,EAAe,SAAS,GAAA,CAAI,aAAA,EAAe,CAAC,CAAA;AAAA,EACjF;AAEA,EAAA,IAAI,QAAA,CAAS,GAAA,EAAK,gBAAA,KAAqB,IAAA,EAAM;AAC3C,IAAA,KAAA,CAAM,KAAK,6BAAA,CAA8B,EAAE,wBAAA,EAA0B,IAAA,EAAM,CAAC,CAAA;AAAA,EAC9E;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,aAAA,IAAiB,EAAC;AAC/C,IAAA,MAAM,iBAAA,GAAoB,QAAA,CAAS,KAAA,CAAM,iBAAA,IAAqB,kBAAA;AAC9D,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,UAAA,IAAc,EAAC;AACjD,IAAA,MAAM,mBAAmB,UAAA,CACtB,MAAA,CAAO,CAAC,IAAA,KAAS,KAAK,gBAAA,KAAqB,KAAK,CAAA,CAChD,OAAA,CAAQ,CAAC,IAAA,KAAS,CAAC,KAAK,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9C,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,uBAAO,GAAA,CAAI;AAAA,QACT,GAAI,QAAA,CAAS,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,QAChC,GAAI,QAAA,CAAS,KAAA,CAAM,aAAA,IAAiB,EAAC;AAAA,QACrC,GAAG,KAAA;AAAA,QACH,GAAG;AAAA,OACJ;AAAA,KACH;AACA,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,GAAI,QAAA,CAAS,KAAA,CAAM,SAAA,IAAa,EAAC;AAAA,MACjC,GAAI,QAAA,CAAS,KAAA,CAAM,cAAA,IAAkB;AAAC,KACxC;AACA,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,mBAAA,CAAoB;AAAA,QAClB,GAAI,QAAA,CAAS,MAAA,GAAS,IAAI,EAAE,QAAA,KAAa,EAAC;AAAA,QAC1C,GAAI,SAAA,CAAU,MAAA,GAAS,IAAI,EAAE,SAAA,KAAc,EAAC;AAAA,QAC5C,GAAI,QAAA,CAAS,KAAA,CAAM,OAAA,GAAU,EAAE,SAAS,QAAA,CAAS,KAAA,CAAM,OAAA,EAAQ,GAAI,EAAC;AAAA,QACpE,GAAI,QAAA,CAAS,KAAA,CAAM,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,QAAA,CAAS,KAAA,CAAM,QAAA,EAAS,GAAI;AAAC,OACtF;AAAA,KACH;AACA,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,EAAG;AAC5C,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,sBAAA,CAAuB;AAAA,UACrB,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,UACf,KAAA,EAAO,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA;AAAA,UAClB,EAAA,EAAI,uBAAuB,CAAC,CAAA,CAAA;AAAA,UAC5B,IAAA,EAAM;AAAA,SACP;AAAA,OACH;AAAA,IACF;AACA,IAAA,MAAM,qBAAA,GACJ,QAAA,CAAS,KAAA,CAAM,qBAAA,IAAyB,iBAAA;AAC1C,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,UAAA,CAAW,SAAQ,EAAG;AAChD,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,sBAAA,CAAuB;AAAA,UACrB,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,EAAA,EAAI,2BAA2B,KAAK,CAAA,CAAA;AAAA,UACpC,IAAA,EAAM,KAAK,cAAA,IAAkB;AAAA,SAC9B;AAAA,OACH;AAAA,IACF;AACA,IAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,KAAA,CAAM,SAAA,IAAa,EAAC;AACpD,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,yBAAA;AAAA,QACJ,QAAA,EAAU,MAAA;AAAA,QACV,eAAA,EAAiB,OAAA;AAAA,QACjB,SAAS,OAAA,EAAS;AAChB,UAAA,MAAM,KAAA,GAAA,CAAS,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,MAAA,EAAQ,MAAA;AAAA,YACtD,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,MAAM,MAAA,KAAW;AAAA,WACvD;AACA,UAAA,MAAM,WAAgC,EAAC;AACvC,UAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,cAAA,CAAe,SAAQ,EAAG;AACrD,YAAA,MAAM,UAAU,KAAA,CAAM,MAAA;AAAA,cACpB,CAAC,KAAA,KAAU,wBAAA,CAAyB,KAAK,MAAM,KAAA,CAAM;AAAA,aACvD;AACA,YAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,cAAA,QAAA,CAAS,IAAA;AAAA,gBACP,mBAAA;AAAA,kBACE,2BAA2B,KAAK,CAAA,CAAA;AAAA,kBAChC,CAAA,uBAAA,EAA0B,MAAM,IAAI,CAAA,oBAAA,CAAA;AAAA,kBACpC,QAAQ,WAAA,GACJ;AAAA,oBACE;AAAA,sBACE,KAAA,EAAO,QAAQ,WAAA,CAAY,KAAA;AAAA,sBAC3B,IAAA,EAAM,KAAA;AAAA,sBACN,IAAA,EAAM,QAAQ,WAAA,CAAY;AAAA;AAC5B,sBAEF,EAAC;AAAA,kBACL,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,kBACrC,EAAE,WAAW,CAAA;AAAE;AACjB,eACF;AACA,cAAA;AAAA,YACF;AACA,YAAA,MAAM,UAAA,GAAa,MAAM,UAAA,IAAc,KAAA;AACvC,YAAA,MAAM,WACJ,UAAA,KAAe,OAAA,GACX,CAAC,OAAA,CAAQ,CAAC,CAAE,CAAA,GACZ,UAAA,KAAe,MAAA,GACb,CAAC,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAE,CAAA,GAC7B,OAAA;AACR,YAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU;AACtC,cAAA,MAAM,OAAA,GAAU,2BAA2B,KAAK,CAAA;AAChD,cAAA,OAAO,yBAAA;AAAA,gBACL,OAAA,CAAQ,KAAA;AAAA,gBACR,KAAA;AAAA,gBACA,OAAA,CAAQ;AAAA,eACV;AAAA,YACF,CAAC,CAAA;AACD,YAAA,IAAI,eAAe,KAAA,EAAO;AACxB,cAAA,IAAI,QAAQ,IAAA,CAAK,CAAC,WAAW,MAAA,CAAO,MAAA,KAAW,MAAM,CAAA,EAAG;AACxD,cAAA,MAAM,YAAY,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,WAAW,MAAM,CAAA;AACnE,cAAA,QAAA,CAAS,IAAA;AAAA,gBACP,mBAAA;AAAA,kBACE,2BAA2B,KAAK,CAAA,CAAA;AAAA,kBAChC,SAAA,CAAU,OAAA;AAAA,kBACV,SAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,oBACnC,OAAO,KAAA,CAAM,KAAA;AAAA,oBACb,SAAS,KAAA,CAAM,OAAA;AAAA,oBACf,MAAM,KAAA,CAAM,IAAA;AAAA,oBACZ,MAAM,KAAA,CAAM,IAAA;AAAA,oBACZ,MAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAI,CAAA,EAAG,MAAM,IAAI,CAAA;AAAA,mBACvC,CAAE,CAAA;AAAA,kBACF,EAAE,MAAM,KAAA,CAAM,IAAA,EAAM,MAAM,KAAA,CAAM,IAAA,EAAM,QAAA,EAAU,KAAA,CAAM,QAAA,EAAS;AAAA,kBAC/D,EAAE,IAAA,EAAM,SAAA,CAAU,IAAA;AAAK;AACzB,eACF;AACA,cAAA;AAAA,YACF;AACA,YAAA,KAAA,MAAW,CAAC,QAAA,EAAU,MAAM,CAAA,IAAK,OAAA,CAAQ,SAAQ,EAAG;AAClD,cAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAQ;AAC9B,cAAA,MAAM,KAAA,GAAQ,SAAS,QAAQ,CAAA;AAC/B,cAAA,QAAA,CAAS,IAAA;AAAA,gBACP,mBAAA;AAAA,kBACE,2BAA2B,KAAK,CAAA,CAAA;AAAA,kBAChC,MAAA,CAAO,OAAA;AAAA,kBACP;AAAA,oBACE;AAAA,sBACE,OAAO,KAAA,CAAM,KAAA;AAAA,sBACb,SAAS,KAAA,CAAM,OAAA;AAAA,sBACf,MAAM,KAAA,CAAM,IAAA;AAAA,sBACZ,MAAM,KAAA,CAAM,IAAA;AAAA,sBACZ,MAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,IAAI,CAAA,EAAG,MAAM,IAAI,CAAA;AAAA;AACvC,mBACF;AAAA,kBACA,EAAE,MAAM,KAAA,CAAM,IAAA,EAAM,MAAM,KAAA,CAAM,IAAA,EAAM,QAAA,EAAU,KAAA,CAAM,QAAA,EAAS;AAAA,kBAC/D,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA;AAAK;AACtB,eACF;AAAA,YACF;AAAA,UACF;AACA,UAAA,OAAO,QAAA;AAAA,QACT;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,GAAA,EAAK;AAChB,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,kBAAA,CAAmB;AAAA,QACjB,GAAI,QAAA,CAAS,GAAA,CAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,QAAA,EAAS,GAAI,EAAC;AAAA,QACjF,GAAI,QAAA,CAAS,GAAA,CAAI,cAAA,KAAmB,MAAA,GAChC,EAAE,cAAA,EAAgB,QAAA,CAAS,GAAA,CAAI,cAAA,EAAe,GAC9C,EAAC;AAAA,QACL,GAAI,QAAA,CAAS,GAAA,CAAI,aAAA,GAAgB,EAAE,eAAe,QAAA,CAAS,GAAA,CAAI,aAAA,EAAc,GAAI;AAAC,OACnF;AAAA,KACH;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,YAAA,EAAc;AACzB,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,YAAA,CAAa,QAAA,IAAY,EAAC;AACpD,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,+BAAA;AAAA,QACJ,QAAA,EAAU,KAAA;AAAA,QACV,eAAA,EAAiB,OAAA;AAAA,QACjB,SAAS,OAAA,EAAS;AAChB,UAAA,MAAM,QAAA,GAAW,kCAAA,CAAmC,OAAA,CAAQ,MAAM,CAAA;AAClE,UAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AACvD,UAAA,MAAM,OAAA,GAAU,SAAS,MAAA,CAAO,CAAC,SAAS,CAAC,KAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1D,UAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAClC,UAAA,OAAO;AAAA,YACL,mBAAA;AAAA,cACE,+BAAA;AAAA,cACA,CAAA,+BAAA,EAAkC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,cACpD,QAAQ,WAAA,GACJ,CAAC,EAAE,KAAA,EAAO,QAAQ,WAAA,CAAY,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAM,OAAA,CAAQ,WAAA,CAAY,IAAA,EAAM,IAClF,EAAC;AAAA,cACL,QAAA;AAAA,cACA,CAAC,GAAG,KAAK;AAAA;AACX,WACF;AAAA,QACF;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,IAAI,QAAA,CAAS,YAAA,CAAa,MAAA,EAAQ,MAAA,EAAQ;AACxC,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,yBAAA,CAA0B;AAAA,UACxB,MAAA,EAAQ,QAAA,CAAS,YAAA,CAAa,MAAA,CAAO,MAAA;AAAA,YACnC,CAAC,MAAA,KACC,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,aAAa,MAAA,KAAW;AAAA;AAC9D,SACD;AAAA,OACH;AAAA,IACF;AACA,IAAA,MAAM,iBAAA,GAAoB,SAAS,YAAA,CAAa,iBAAA;AAChD,IAAA,IACE,sBACC,iBAAA,CAAkB,MAAA,IACjB,iBAAA,CAAkB,QAAA,IAClB,kBAAkB,qBAAA,CAAA,EACpB;AACA,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,iCAAA;AAAA,QACJ,QAAA,EAAU,KAAA;AAAA,QACV,eAAA,EAAiB,OAAA;AAAA,QACjB,SAAS,OAAA,EAAS;AAChB,UAAA,MAAM,QAAA,GAAW,kCAAA,CAAmC,OAAA,CAAQ,MAAM,CAAA;AAClE,UAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,CAAC,CAAA;AAC1E,UAAA,MAAM,OAAA,GACJ,QAAA,CAAS,MAAA,GAAS,CAAA,GACd,QAAA,CAAS,MAAA,CAAO,CAAC,OAAA,KAAY,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAC,CAAA,GAC5D,QAAA;AACN,UAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,YAAQ,CAAC,OAAA,KACtB,4BAAA,CAA6B,OAAA,EAAS,mBAAmB,aAAa;AAAA,WACxE;AAAA,QACF;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,MAAM,WAAW,QAAA,CAAS,QAAA;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,mBAAA;AAAA,MACJ,QAAA,EAAU,KAAA;AAAA,MACV,eAAA,EAAiB,OAAA;AAAA,MACjB,SAAS,OAAA,EAAS;AAChB,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,MAAA;AAChD,QAAA,MAAM,QAAA,GAAW,kCAAA,CAAmC,OAAA,CAAQ,MAAM,CAAA;AAClE,QAAA,MAAM,gBAAA,GAAmB,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AAClE,QAAA,MAAMF,YAAAA,GAAoC,QAAQ,WAAA,GAC9C;AAAA,UACE;AAAA,YACE,KAAA,EAAO,QAAQ,WAAA,CAAY,KAAA;AAAA,YAC3B,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM,QAAQ,WAAA,CAAY;AAAA;AAC5B,YAEF,EAAC;AACL,QAAA,OAAO,oBAAA,CAAqB,MAAA,EAAQ,QAAA,EAAUA,YAAAA,EAAa,gBAAgB,CAAA;AAAA,MAC7E;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,QAAQ,QAAA,CAAS,KAAA;AACvB,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,gBAAA;AAAA,MACJ,QAAA,EAAU,KAAA;AAAA,MACV,eAAA,EAAiB,OAAA;AAAA,MACjB,SAAS,OAAA,EAAS;AAChB,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,MAAA;AAChD,QAA0C,QAAQ,WAAA,GAC9C;AAAA,UACE;AAAA,YACE,KAAA,EAAO,QAAQ,WAAA,CAAY,KAAA;AAAA,YAC3B,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM,QAAQ,WAAA,CAAY;AAAA;AAC5B,YAEF;AACJ,QAAA,OAAO,wBAAA,CAAyB,MAAA,EAAQ,KAAkB,CAAA;AAAA,MAC5D;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,mBACP,KAAA,EAC+B;AAC/B,EAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAO,EAAC;AACjC,EAAA,MAAM,WAAA,GACH,OAAO,KAAA,CAAM,KAAA,KAAU,YAAY,KAAA,CAAM,KAAA,CAAM,MAAK,KAAM,EAAA,IAC1D,OAAO,KAAA,CAAM,UAAA,KAAe,YAAY,KAAA,CAAM,UAAA,CAAW,MAAK,KAAM,EAAA,IACpE,OAAO,KAAA,CAAM,OAAA,KAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAK,KAAM,EAAA,IAC9D,OAAO,KAAA,CAAM,YAAA,KAAiB,YAAY,KAAA,CAAM,YAAA,CAAa,MAAK,KAAM,EAAA,IACxE,OAAO,KAAA,CAAM,WAAA,KAAgB,YAAY,KAAA,CAAM,WAAA,CAAY,MAAK,KAAM,EAAA;AACzE,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,sBAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EACE,2GAAA;AAAA,QACF,IAAA,EAAM;AAAA;AACR,KACF;AAAA,EACF;AACA,EAAA,OAAO,EAAC;AACV;AAEA,SAAS,wBACP,YAAA,EAC+B;AAC/B,EAAA,MAAM,cAA6C,EAAC;AACpD,EAAA,MAAM,aAAa,YAAA,EAAc,iBAAA;AACjC,EAAA,IAAI,CAAC,YAAY,OAAO,WAAA;AACxB,EAAA,MAAM,OAAA,GACJ,WAAW,MAAA,KAAW,IAAA,IACtB,WAAW,QAAA,KAAa,IAAA,IACxB,WAAW,qBAAA,KAA0B,IAAA;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,uCAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAS,iEAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,IAAI,UAAA,CAAW,qBAAA,KAA0B,IAAA,IAAQ,UAAA,CAAW,aAAa,IAAA,EAAM;AAC7E,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,2DAAA;AAAA,MACN,QAAA,EAAU,MAAA;AAAA,MACV,OAAA,EACE,oGAAA;AAAA,MACF,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,IAAI,OAAA,IAAA,CAAY,YAAA,EAAc,QAAA,EAAU,MAAA,IAAU,OAAO,CAAA,EAAG;AAC1D,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,kDAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EACE,6FAAA;AAAA,MACF,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,0BACP,YAAA,EAC+B;AAC/B,EAAA,MAAM,cAA6C,EAAC;AACpD,EAAA,IAAI,YAAA,KAAiB,QAAW,OAAO,WAAA;AACvC,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAA,IAAS,EAAC;AACxC,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,6BAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS,sDAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO,WAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,MAAM,CAAA,IAAK,QAAA,CAAS,SAAQ,EAAG;AAChD,IAAA,MAAM,IAAA,GAAO,sBAAsB,KAAK,CAAA,CAAA,CAAA;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ,EAAA,IAAM,OAAO,EAAA,CAAG,IAAA,OAAW,EAAA,EAAI;AAC1C,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,kCAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,yDAAA;AAAA,QACT;AAAA,OACD,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AACvB,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,oCAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,CAAA,wCAAA,EAA2C,MAAA,CAAO,EAAE,CAAA,CAAA;AAAA,QAC7D,IAAA,EAAM,GAAG,IAAI,CAAA,GAAA;AAAA,OACd,CAAA;AAAA,IACH;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,OAAO,EAAE,CAAA;AAClB,IAAA,IAAI,CAAC,YAAA,CAAa,MAAA,CAAO,QAAA,IAAY,EAAE,CAAA,EAAG;AACxC,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,oCAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,CAAA,OAAA,EAAU,MAAA,CAAO,EAAE,CAAA,0EAAA,CAAA;AAAA,QAC5B,IAAA,EAAM,GAAG,IAAI,CAAA,SAAA;AAAA,OACd,CAAA;AAAA,IACH;AACA,IAAA,MAAM,MAAA,GAAU,OAAO,QAAA,EACnB,YAAA;AACJ,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,8BAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EACE,+EAAA;AAAA,QACF,IAAA,EAAM,GAAG,IAAI,CAAA,sBAAA;AAAA,OACd,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAwB,KAAA,EAAkC;AACjF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,MAAA,EAAQ,MAAA;AAAA,IACR,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA;AAAA,IACnB,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,IACvC,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,cAAA,EAAgB,CAAA,EAAE;AAAA,IAC3E,UAAU,EAAC;AAAA,IACX,aAAa,EAAC;AAAA,IACd,gBAAgB;AAAC,GACnB;AACF;AAEA,SAAS,oBAAA,CACP,KAAA,EACA,KAAA,EACA,aAAA,GAA8C,EAAC,EAC7B;AAClB,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,QAAQ,CAAA,EAAG,GAAG,aAAa,CAAA;AAC7E,EAAA,MAAM,cAAc,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,KAAK,WAAW,CAAA;AAC5D,EAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,KAAK,cAAc,CAAA;AAClE,EAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AAAA,IACtB,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,QAAQ,QAAA,KAAa;AAAA,GACjE,CAAE,MAAA;AACF,EAAA,MAAM,MAAA,GAAS,YAAY,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,QAAA,KAAa,OAAO,CAAA,CAAE,MAAA;AACvE,EAAA,MAAM,SACJ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA,GAAS,IAAI,MAAA,GAAS,MAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,KAAA,KAAU,MAAS,CAAA,EAAG,KAAA;AAC9D,EAAA,OAAO;AAAA,IACL,IAAI,MAAA,KAAW,MAAA;AAAA,IACf,MAAA;AAAA,IACA,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA;AAAA,IACnB,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,IACvC,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,SAAS,MAAA,CAAO,CAAC,YAAY,OAAA,CAAQ,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAAA,MAChE,MAAA;AAAA,MACA,UAAU,QAAA,CAAS,MAAA;AAAA,QACjB,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,KAAW,SAAA,IAAa,QAAQ,QAAA,KAAa;AAAA,OACpE,CAAE,MAAA;AAAA,MACF,MAAA;AAAA,MACA,gBAAgB,cAAA,CAAe;AAAA,KACjC;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,YAAA,CACP,KAAA,EACA,IAAA,EACA,OAAA,GAA8B,EAAC,EACb;AAClB,EAAA,MAAM,KAAA,GAAQ,gBAAgB,IAAI,CAAA;AAClC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,eAAe,KAAA,EAAO;AAAA,IAC3B,KAAA;AAAA,IACA,GAAI,QAAQ,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM,GAAI;AAAC,GAC/D,CAAA;AACH;AAOO,SAAS,oBAAoB,KAAA,EAA0C;AAC5E,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAG,yBAAA,CAA0B,KAAA,CAAM,YAAY,CAAA;AAAA,IAC/C,GAAG,kBAAA,CAAmB,KAAA,CAAM,KAAK,CAAA;AAAA,IACjC,GAAG,uBAAA,CAAwB,KAAA,CAAM,YAAY;AAAA,IAC7C,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,OAAO,CAAA;AAC5C,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,SAAA,CAAU,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACvE;AACA,EAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,MAAM,YAAA,GAAe,MAAM,YAAA,GACvB;AAAA,IACE,OAAO,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MAC/C,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,GAAI,OAAO,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,MAAA,CAAO,WAAA,EAAY,GAAI,EAAC;AAAA,MAC9E,QAAA,EAAU,SAAA,CAAU,MAAA,CAAO,QAAQ;AAAA,KACrC,CAAE;AAAA,GACJ,GACA,MAAA;AACJ,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,GAChB;AAAA,IACE,GAAI,KAAA,CAAM,KAAA,CAAM,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,KAAA,EAAM,GAAI,EAAC;AAAA,IACtE,GAAI,KAAA,CAAM,KAAA,CAAM,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,KAAA,CAAM,KAAA,CAAM,UAAA,EAAW,GAAI,EAAC;AAAA,IACrF,GAAI,KAAA,CAAM,KAAA,CAAM,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,OAAA,EAAQ,GAAI,EAAC;AAAA,IAC5E,GAAI,KAAA,CAAM,KAAA,CAAM,YAAA,KAAiB,MAAA,GAC7B,EAAE,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,YAAA,EAAa,GACzC,EAAC;AAAA,IACL,GAAI,KAAA,CAAM,KAAA,CAAM,WAAA,KAAgB,MAAA,GAC5B,EAAE,WAAA,EAAa,KAAA,CAAM,KAAA,CAAM,WAAA,EAAY,GACvC;AAAC,GACP,GACA,MAAA;AACJ,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,IACzB,GAAI,YAAA,GAAe,EAAE,YAAA,KAAiB;AAAC,GACzC;AACF;AAUO,SAAS,qBAAA,CACd,KAAA,EACA,QAAA,EACA,OAAA,GAA8B,EAAC,EACb;AAClB,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAG,yBAAA,CAA0B,QAAA,CAAS,YAAY,CAAA;AAAA,IAClD,GAAG,kBAAA,CAAmB,QAAA,CAAS,KAAK,CAAA;AAAA,IACpC,GAAG,uBAAA,CAAwB,QAAA,CAAS,YAAY;AAAA,IAChD,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,OAAO,CAAA;AAC5C,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA;AAAA,MACnB,GAAI,QAAQ,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM,GAAI,EAAC;AAAA,MAC9D,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA,EAAU,CAAA;AAAA,QACV,QAAQ,WAAA,CAAY,MAAA;AAAA,QACpB,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,UAAU,EAAC;AAAA,MACX,WAAA,EAAa,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QACtC,IAAA,EAAM,yBAAA;AAAA,QACN,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,QAAA,EAAU,OAAA;AAAA,QACV,QAAQ,IAAA,CAAK;AAAA,OACf,CAAE,CAAA;AAAA,MACF,gBAAgB;AAAC,KACnB;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,KAAA,EAAO,QAAA,CAAS,KAAK,CAAA;AAC9D,EAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA;AAAA,MACnB,GAAI,QAAQ,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM,GAAI,EAAC;AAAA,MAC9D,GAAI,MAAA,CAAO,QAAA,EAAU,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,EAAM,GAAI,EAAC;AAAA,MAC/E,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,CAAA;AAAA,QACR,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA,EAAU,CAAA;AAAA,QACV,MAAA,EAAQ,OAAO,WAAA,CAAY,MAAA;AAAA,QAC3B,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,UAAU,EAAC;AAAA,MACX,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,gBAAgB;AAAC,KACnB;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,QAAA,EAAU,KAAA,IAAS,KAAA;AACjD,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,QAAA,EAAU,KAAA,IAAS,OAAA,CAAQ,KAAA;AACzD,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,cAAA,EAAgB,QAAA,EAAU;AAAA,IAClD,GAAI,cAAA,KAAmB,MAAA,GAAY,EAAE,KAAA,EAAO,cAAA,KAAmB;AAAC,GACjE,CAAA;AACD,EAAA,MAAM,YAAA,GAA8C,OAAO,QAAA,GACvD;AAAA,IACE,MAAA,EAAQ,yBAAA;AAAA,IACR,QAAA,EAAU,MAAA;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,kBAAkB,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,MAAA,CAAO,SAAS,kBAAkB,CAAA,mBAAA,CAAA;AAAA,IAC3F,QAAA,EAAU,OAAO,QAAA,CAAS,gBAAA;AAAA,IAC1B,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,OAAO,QAAA,CAAS,KAAA;AAAA,MACvB,kBAAA,EAAoB,OAAO,QAAA,CAAS,kBAAA;AAAA,MACpC,GAAI,MAAA,CAAO,QAAA,CAAS,WAAA,KAAgB,MAAA,GAChC,EAAE,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,WAAA,EAAY,GAC3C;AAAC,KACP;AAAA,IACA,QAAA,EAAU;AAAA,MACR;AAAA,QACE,KAAA,EAAO,OAAO,QAAA,CAAS,KAAA;AAAA,QACvB,IAAA,EAAM,KAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR;AACF,GACF,GACA,MAAA;AAEJ,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,YAAA,EAAc,KAAA,IAAS,EAAC;AAClD,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,YAAA,GACH,qBAAqB,cAAA,EAAgB,CAAC,IAAI,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA,GAC3D,IAAA;AAAA,EACN;AAEA,EAAA,MAAM,iBAAA,GAAoB,QAAA,CAAS,GAAA,CAAI,CAAC,MAAA,KAAW;AACjD,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,cAAA,EAAgB,MAAA,CAAO,QAAA,EAAU;AAAA,MAC3D,GAAI,cAAA,KAAmB,MAAA,GAAY,EAAE,KAAA,EAAO,cAAA,KAAmB;AAAC,KACjE,CAAA;AACD,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAAA,EAC1B,CAAC,CAAA;AACD,EAAA,MAAM,YAAY,iBAAA,CACf,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,EAAA,IAAM,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,MAAM,CAAA,CAChE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,EAAE,CAAA;AAC/B,EAAA,MAAM,iBAAiB,iBAAA,CAAkB,MAAA;AAAA,IACvC,CAAC,SAAS,EAAE,IAAA,CAAK,OAAO,EAAA,IAAM,IAAA,CAAK,OAAO,MAAA,KAAW,MAAA;AAAA,GACvD;AAEA,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,MAAM,WAAA,GAAiC;AAAA,MACrC,MAAA,EAAQ,6BAAA;AAAA,MACR,QAAA,EAAU,MAAA;AAAA,MACV,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,CAAA,kCAAA,EAAqC,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MAClE,QAAA,EAAU,EAAE,KAAA,EAAO,QAAA,CAAS,IAAI,CAAC,MAAA,KAAW,MAAA,CAAO,EAAE,CAAA,EAAE;AAAA,MACvD,MAAA,EAAQ;AAAA,QACN,SAAA;AAAA,QACA,QAAQ,cAAA,CAAe,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,EAAE;AAAA,OACrD;AAAA,MACA,UAAU;AAAC,KACb;AACA,IAAA,OAAO,oBAAA;AAAA,MACL,cAAA;AAAA,MACA,CAAC,IAAI,CAAA;AAAA,MACL,CAAC,GAAI,YAAA,GAAe,CAAC,YAAY,CAAA,GAAI,IAAK,WAAW;AAAA,KACvD;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAiC;AAAA,IACrC,MAAA,EAAQ,sCAAA;AAAA,IACR,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,4DAAA;AAAA,IACT,QAAA,EAAU,EAAE,KAAA,EAAO,QAAA,CAAS,IAAI,CAAC,MAAA,KAAW,MAAA,CAAO,EAAE,CAAA,EAAE;AAAA,IACvD,MAAA,EAAQ;AAAA,MACN,gBAAgB,MAAA,CAAO,WAAA;AAAA,QACrB,cAAA,CAAe,GAAA,CAAI,CAAC,IAAA,KAAS;AAAA,UAC3B,KAAK,MAAA,CAAO,EAAA;AAAA,UACZ,IAAA,CAAK,MAAA,CAAO,QAAA,CACT,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,KAAW,MAAM,CAAA,CAC7C,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,YACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,YAChB,SAAS,OAAA,CAAQ;AAAA,WACnB,CAAE;AAAA,SACL;AAAA;AACH,KACF;AAAA,IACA,UAAU;AAAC,GACb;AACA,EAAA,MAAM,yBAAyB,cAAA,CAAe,OAAA;AAAA,IAAQ,CAAC,IAAA,KACrD,IAAA,CAAK,MAAA,CAAO,SACT,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,KAAW,MAAM,CAAA,CAC7C,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,MACjB,GAAG,OAAA;AAAA,MACH,QAAQ,CAAA,sBAAA,EAAyB,IAAA,CAAK,OAAO,EAAE,CAAA,CAAA,EAAI,QAAQ,MAAM,CAAA;AAAA,KACnE,CAAE;AAAA,GACN;AACA,EAAA,OAAO,oBAAA;AAAA,IACL,cAAA;AAAA,IACA,CAAC,IAAI,CAAA;AAAA,IACL,CAAC,GAAI,YAAA,GAAe,CAAC,YAAY,IAAI,EAAC,EAAI,WAAA,EAAa,GAAG,sBAAsB;AAAA,GAClF;AACF;AAOO,SAAS,yBAAA,CACd,IAAA,EACA,QAAA,EACA,OAAA,GAA8B,EAAC,EACb;AAClB,EAAA,OAAO,qBAAA,CAAsB,EAAE,IAAA,EAAK,EAAG,UAAU,OAAO,CAAA;AAC1D;AAOO,SAAS,kBAAkB,QAAA,EAAwD;AACxF,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAG,yBAAA,CAA0B,QAAA,CAAS,YAAY,CAAA;AAAA,IAClD,GAAG,kBAAA,CAAmB,QAAA,CAAS,KAAK,CAAA;AAAA,IACpC,GAAG,uBAAA,CAAwB,QAAA,CAAS,YAAY;AAAA,GAClD;AACA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,YAAA,EAAc,KAAA,IAAS,EAAC;AAClD,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,qCAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EACE,8FAAA;AAAA,MACF,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,GAAI,QAAA,CAAS,KAAA,EAAO,QAAA,IAAY,EAAC;AAAA,IACjC,GAAI,QAAA,CAAS,KAAA,EAAO,aAAA,IAAiB;AAAC,GACxC;AACA,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAChD,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,yCAAA;AAAA,MACN,QAAA,EAAU,MAAA;AAAA,MACV,OAAA,EACE,qGAAA;AAAA,MACF,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,EAAO,aAAA,IAAiB,EAAC;AAChD,EAAA,IAAI,MAAM,MAAA,IAAU,CAAA,IAAK,QAAA,CAAS,KAAA,EAAO,sBAAsB,MAAA,EAAW;AACxE,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,IAAA,EAAM,2CAAA;AAAA,MACN,QAAA,EAAU,MAAA;AAAA,MACV,OAAA,EACE,kGAAA;AAAA,MACF,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,EAAO,UAAA,IAAc,EAAC;AAClD,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,IAAI,CAAA,IAAK,UAAA,CAAW,SAAQ,EAAG;AAChD,IAAA,MAAM,MAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAA,EAAK,KAAK,KAAK,CAAA,CAAA;AACzC,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG;AACtB,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,qCAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,SAAS,CAAA,0BAAA,EAA6B,IAAA,CAAK,MAAM,CAAA,QAAA,EAAM,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,QACjE,IAAA,EAAM,oBAAoB,KAAK,CAAA,CAAA;AAAA,OAChC,CAAA;AAAA,IACH;AACA,IAAA,SAAA,CAAU,IAAI,GAAG,CAAA;AACjB,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,gCAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,0CAAA;AAAA,QACT,IAAA,EAAM,oBAAoB,KAAK,CAAA,CAAA;AAAA,OAChC,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,SAAA,EAAW,MAAA,IAAU,KAAK,CAAA,EAAG;AAChD,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAA,CAAM,QAAA,CAAS,OAAO,SAAA,IAAa,EAAC,EAAG,OAAA,EAAQ,EAAG;AACxE,MAAA,IAAI,CAAC,MAAM,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,KAAA,CAAM,SAAS,EAAA,EAAI;AACpD,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,IAAA,EAAM,+BAAA;AAAA,UACN,QAAA,EAAU,OAAA;AAAA,UACV,OAAA,EAAS,qEAAA;AAAA,UACT,IAAA,EAAM,mBAAmB,KAAK,CAAA,MAAA;AAAA,SAC/B,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,WAAA;AACT;AAOO,SAAS,qBAAqB,QAAA,EAAmC;AACtE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,CACxC,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,EAAK,KAAM,EAAE,CAAA,CACtE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAC1C,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,KAAK,CAAA,wBAAA,EAA2B,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAAA,IAC9E;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,EAAK,gBAAA,KAAqB,KAAA,EAAO;AAC5C,IAAA,KAAA,CAAM,KAAK,8CAA8C,CAAA;AAAA,EAC3D;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,EAAK,eAAA,EAAiB,MAAA,EAAQ;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK,wBAAwB,QAAA,CAAS,GAAA,CAAI,gBAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,EAAK,aAAA,KAAkB,MAAA,EAAW;AAC7C,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,sBAAA,EAAyB,QAAA,CAAS,GAAA,CAAI,aAAa,CAAA,GAAA,CAAK,CAAA;AAAA,EACrE;AACA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,uBAAO,GAAA,CAAI;AAAA,QACT,GAAI,QAAA,CAAS,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,QAChC,GAAI,QAAA,CAAS,KAAA,CAAM,aAAA,IAAiB,EAAC;AAAA,QACrC,GAAI,QAAA,CAAS,KAAA,CAAM,aAAA,IAAiB;AAAC,OACtC;AAAA,KACH;AACA,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,KAAK,CAAA,sBAAA,EAAyB,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,IAC7D;AACA,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,GAAI,QAAA,CAAS,KAAA,CAAM,SAAA,IAAa,EAAC;AAAA,MACjC,GAAI,QAAA,CAAS,KAAA,CAAM,cAAA,IAAkB;AAAC,KACxC;AACA,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,KAAA,CAAM,KAAK,CAAA,uBAAA,EAA0B,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,IAC/D;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,aAAA,EAAe,MAAA,IAAU,MAAM,CAAA,EAAG;AACpD,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,iBAAA,IAAqB,kBAAA;AACjD,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,CAAA,qBAAA,EAAwB,SAAS,KAAA,CAAM,aAAA,CAAe,KAAK,UAAK,CAAC,UAAU,IAAI,CAAA,CAAA;AAAA,OACjF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,UAAA,EAAY,MAAA,IAAU,KAAK,CAAA,EAAG;AAChD,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,qBAAA,IAAyB,kBAAA;AAC5D,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,SAAS,QAAA,CAAS,KAAA,CAAM,UAAA,CAAY,MAAM,sCAAsC,WAAW,CAAA,EAAA;AAAA,OAC7F;AAAA,IACF;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,SAAA,EAAW,MAAA,IAAU,KAAK,CAAA,EAAG;AAC/C,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,CAAA,MAAA,EAAS,QAAA,CAAS,KAAA,CAAM,SAAA,CAAW,MAAM,CAAA,mCAAA;AAAA,OAC3C;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,SAAS,GAAA,EAAK;AAChB,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,QAAA,KAAa,MAAA,EAAW;AACvC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IAC3D;AACA,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,cAAA,KAAmB,MAAA,EAAW;AAC7C,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,yBAAA,EAA4B,QAAA,CAAS,GAAA,CAAI,cAAc,CAAA,CAAA,CAAG,CAAA;AAAA,IACvE;AACA,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,aAAA,EAAe,MAAA,EAAQ;AACtC,MAAA,KAAA,CAAM,IAAA,CAAK,4BAA4B,QAAA,CAAS,GAAA,CAAI,cAAc,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,IAClF;AAAA,EACF;AACA,EAAA,IAAI,QAAA,CAAS,YAAA,EAAc,QAAA,EAAU,MAAA,EAAQ;AAC3C,IAAA,KAAA,CAAM,IAAA,CAAK,gCAAgC,QAAA,CAAS,YAAA,CAAa,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EAC1F;AACA,EAAA,IAAI,QAAA,CAAS,YAAA,EAAc,MAAA,EAAQ,MAAA,EAAQ;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK,+BAA+B,QAAA,CAAS,YAAA,CAAa,OAAO,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EACvF;AACA,EAAA,IAAI,QAAA,CAAS,cAAc,iBAAA,EAAmB;AAC5C,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,QAAA,CAAS,YAAA,CAAa,iBAAA,CAAkB,MAAA,GAAS,QAAA,GAAW,MAAA;AAAA,MAC5D,QAAA,CAAS,YAAA,CAAa,iBAAA,CAAkB,QAAA,GAAW,UAAA,GAAa,MAAA;AAAA,MAChE,QAAA,CAAS,YAAA,CAAa,iBAAA,CAAkB,qBAAA,GACpC,uBAAA,GACA;AAAA,KACN,CAAE,MAAA,CAAO,CAAC,IAAA,KAAyB,SAAS,MAAS,CAAA;AACrD,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,CAAA,iDAAA,EAAoD,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,uBAAA;AAAA,OACtE;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,KAAA,CAAM,KAAK,wDAAwD,CAAA;AAAA,EACrE;AACA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,KAAA,CAAM,KAAK,gDAAgD,CAAA;AAAA,EAC7D;AACA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,YAAA,EAAc,KAAA,IAAS,EAAC;AAClD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,+BAAA,EAAkC,QAAA,CAAS,GAAA,CAAI,CAAC,MAAA,KAAW,OAAO,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,kBAAA;AAAA,KAClF;AACA,IAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,SAAS,MAAA,CAAO,WAAA,GAAc,CAAA,QAAA,EAAM,MAAA,CAAO,WAAW,CAAA,CAAA,GAAK,EAAA;AACjE,MAAA,KAAA,CAAM,KAAK,CAAA,SAAA,EAAY,MAAA,CAAO,EAAE,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AAAA,IAC7C;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,KAAA,CAAM,KAAK,oDAAoD,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,KAAA;AACT","file":"chunk-LHSXRIYU.mjs","sourcesContent":["import type { SessionWorkflowMetadata } from \"./types.js\";\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction finitePositiveInt(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 1) {\n return undefined;\n }\n return Math.trunc(value);\n}\n\n/** Extracts session/workflow metadata from a run metadata or attributes bag. */\nexport function extractSessionWorkflowMetadata(\n record: Record<string, unknown> | undefined,\n): SessionWorkflowMetadata | undefined {\n if (!record) return undefined;\n\n const out: SessionWorkflowMetadata = {};\n let found = false;\n\n const assignString = (\n key: Exclude<keyof SessionWorkflowMetadata, \"attempt\" | \"attemptNumber\">,\n value: unknown,\n ): void => {\n if (isNonEmptyString(value)) {\n out[key] = value.trim();\n found = true;\n }\n };\n\n assignString(\"sessionId\", record.sessionId);\n assignString(\"conversationId\", record.conversationId);\n assignString(\"groupId\", record.groupId);\n assignString(\"parentGroupId\", record.parentGroupId);\n assignString(\"retryOf\", record.retryOf);\n assignString(\"retryReason\", record.retryReason);\n assignString(\"handoffFrom\", record.handoffFrom);\n assignString(\"handoffTo\", record.handoffTo);\n assignString(\"subAgentId\", record.subAgentId);\n assignString(\"subAgentName\", record.subAgentName);\n assignString(\"jobId\", record.jobId);\n assignString(\"queueName\", record.queueName);\n assignString(\"workflowName\", record.workflowName);\n assignString(\"workflowStep\", record.workflowStep);\n assignString(\"toolCallId\", record.toolCallId);\n assignString(\"mcpToolCallId\", record.mcpToolCallId);\n assignString(\"linkedStepId\", record.linkedStepId);\n assignString(\"operationId\", record.operationId);\n assignString(\"attemptId\", record.attemptId);\n assignString(\"fallbackOf\", record.fallbackOf);\n assignString(\"idempotencyKey\", record.idempotencyKey);\n assignString(\"correlationId\", record.correlationId);\n assignString(\"requestId\", record.requestId);\n assignString(\"decisionId\", record.decisionId);\n\n const attempt = finitePositiveInt(record.attempt);\n if (attempt !== undefined) {\n out.attempt = attempt;\n found = true;\n }\n const attemptNumber = finitePositiveInt(record.attemptNumber);\n if (attemptNumber !== undefined) {\n out.attemptNumber = attemptNumber;\n found = true;\n }\n\n return found ? out : undefined;\n}\n\nexport function sessionKeyForRun(\n meta: SessionWorkflowMetadata | undefined,\n options?: { correlateByGroupId?: boolean },\n): string | undefined {\n if (meta?.sessionId) return meta.sessionId;\n if (options?.correlateByGroupId && meta?.groupId) {\n return `group:${meta.groupId}`;\n }\n return undefined;\n}\n","/**\n * Logical lifecycle projection for trace checks.\n *\n * Projects raw persisted rows (including v0.1 start/complete bridges) into\n * completed lifecycle events for semantic/structure rules. Does not mutate\n * input; does not replace public experimental `events` (raw rows).\n *\n * @experimental Available through `agent-inspect/checks`; may evolve.\n */\n\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport { formatProgrammaticDiagnostic } from \"../diagnostics/programmatic.js\";\n\n/**\n * Diagnostic emitted while projecting logical lifecycle events.\n *\n * @experimental\n */\nexport interface LogicalProjectionDiagnostic {\n code:\n | \"AI_LOGICAL_PAIR_AMBIGUOUS\"\n | \"AI_LOGICAL_PAIR_UNMATCHED_START\"\n | \"AI_LOGICAL_PAIR_UNMATCHED_COMPLETE\"\n | \"AI_LOGICAL_PARENT_REMAPPED\"\n | \"AI_LOGICAL_PARENT_UNRESOLVED\"\n | \"AI_LOGICAL_SELF_PARENT_REMOVED\";\n message: string;\n eventIds?: readonly string[];\n}\n\n/**\n * A persisted event after lifecycle pairing and parent normalization.\n * Compatible with rule helpers that read PersistedInspectEvent fields.\n *\n * @experimental\n */\nexport type LogicalTraceEvent = PersistedInspectEvent & {\n /** Raw event ids merged into this logical row (start first when paired). */\n readonly sourceEventIds: readonly string[];\n readonly projection: {\n readonly paired: boolean;\n readonly absorbedEventIds: readonly string[];\n readonly parentNormalized: boolean;\n readonly originalParentId?: string;\n };\n};\n\nexport interface ProjectLogicalEventsResult {\n readonly logicalEvents: readonly LogicalTraceEvent[];\n readonly diagnostics: readonly LogicalProjectionDiagnostic[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction legacyEvent(event: PersistedInspectEvent): string | undefined {\n const value = event.attributes?.legacyEvent;\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction stepIdOf(event: PersistedInspectEvent): string | undefined {\n const value = event.attributes?.stepId;\n if (typeof value === \"string\" && value.trim() !== \"\") return value;\n return undefined;\n}\n\nfunction cloneEvent(event: PersistedInspectEvent): PersistedInspectEvent {\n return {\n ...event,\n ...(event.attributes !== undefined\n ? { attributes: { ...event.attributes } }\n : {}),\n ...(event.error !== undefined ? { error: { ...event.error } } : {}),\n ...(event.tokenUsage !== undefined\n ? { tokenUsage: { ...event.tokenUsage } }\n : {}),\n ...(event.source !== undefined ? { source: { ...event.source } } : {}),\n };\n}\n\nfunction mergeAttributes(\n start: PersistedInspectEvent,\n complete: PersistedInspectEvent,\n): Record<string, unknown> | undefined {\n const merged: Record<string, unknown> = {\n ...(isRecord(complete.attributes) ? complete.attributes : {}),\n ...(isRecord(start.attributes) ? start.attributes : {}),\n };\n // Prefer start kind/name identity; keep completion markers for debugging.\n merged.legacyEvent = start.attributes?.legacyEvent ?? complete.attributes?.legacyEvent;\n merged.legacyCompleteEvent = complete.attributes?.legacyEvent;\n if (complete.attributes?.errorStack !== undefined) {\n merged.errorStack = complete.attributes.errorStack;\n }\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction pairStartComplete(\n start: PersistedInspectEvent,\n complete: PersistedInspectEvent,\n): LogicalTraceEvent {\n const attributes = mergeAttributes(start, complete);\n const paired: PersistedInspectEvent = {\n ...cloneEvent(start),\n status: complete.status,\n timestamp: complete.timestamp ?? start.timestamp,\n ...(complete.endedAt !== undefined ? { endedAt: complete.endedAt } : {}),\n ...(complete.durationMs !== undefined\n ? { durationMs: complete.durationMs }\n : {}),\n ...(complete.error !== undefined ? { error: { ...complete.error } } : {}),\n ...(complete.tokenUsage !== undefined && start.tokenUsage === undefined\n ? { tokenUsage: { ...complete.tokenUsage } }\n : {}),\n ...(attributes !== undefined ? { attributes } : {}),\n };\n\n return {\n ...paired,\n sourceEventIds: Object.freeze([start.eventId, complete.eventId]),\n projection: {\n paired: true,\n absorbedEventIds: Object.freeze([complete.eventId]),\n parentNormalized: false,\n ...(start.parentId !== undefined\n ? { originalParentId: start.parentId }\n : {}),\n },\n };\n}\n\nfunction asLogical(\n event: PersistedInspectEvent,\n extras?: { parentNormalized?: boolean; originalParentId?: string },\n): LogicalTraceEvent {\n return {\n ...cloneEvent(event),\n sourceEventIds: Object.freeze([event.eventId]),\n projection: {\n paired: false,\n absorbedEventIds: Object.freeze([]),\n parentNormalized: extras?.parentNormalized === true,\n ...(extras?.originalParentId !== undefined\n ? { originalParentId: extras.originalParentId }\n : {}),\n },\n };\n}\n\n/**\n * Pair v0.1 run/step start+complete rows and normalize parent references.\n *\n * - Keeps start kind/name; applies terminal status/timing/error from complete.\n * - Absorbs matching complete rows (not emitted as separate logical events).\n * - Remaps parentId from stepId or absorbed complete eventId → logical eventId.\n */\nexport function projectLogicalEvents(\n events: readonly PersistedInspectEvent[],\n): ProjectLogicalEventsResult {\n const diagnostics: LogicalProjectionDiagnostic[] = [];\n const byRun = new Map<string, PersistedInspectEvent[]>();\n for (const event of events) {\n const list = byRun.get(event.runId) ?? [];\n list.push(event);\n byRun.set(event.runId, list);\n }\n\n const absorbedIds = new Set<string>();\n const logicalByRawId = new Map<string, LogicalTraceEvent>();\n const stepIdToLogicalId = new Map<string, string>();\n const logical: LogicalTraceEvent[] = [];\n\n const orderedRuns = [...byRun.keys()].sort((a, b) => a.localeCompare(b));\n for (const runId of orderedRuns) {\n const runEvents = byRun.get(runId) ?? [];\n const starts: PersistedInspectEvent[] = [];\n const completes: PersistedInspectEvent[] = [];\n const others: PersistedInspectEvent[] = [];\n\n for (const event of runEvents) {\n const legacy = legacyEvent(event);\n if (\n legacy === \"step_started\" ||\n (legacy === \"run_started\" && event.status === \"running\")\n ) {\n starts.push(event);\n } else if (legacy === \"step_completed\" || legacy === \"run_completed\") {\n completes.push(event);\n } else {\n others.push(event);\n }\n }\n\n const usedCompletes = new Set<string>();\n\n for (const start of starts) {\n const stepId = stepIdOf(start);\n let match: PersistedInspectEvent | undefined;\n\n if (legacyEvent(start) === \"run_started\") {\n const candidates = completes.filter(\n (c) =>\n !usedCompletes.has(c.eventId) && legacyEvent(c) === \"run_completed\",\n );\n if (candidates.length > 1) {\n diagnostics.push({\n code: \"AI_LOGICAL_PAIR_AMBIGUOUS\",\n message: `Multiple run_completed rows for run ${runId}; using first by eventId.`,\n eventIds: candidates.map((c) => c.eventId),\n });\n candidates.sort((a, b) => a.eventId.localeCompare(b.eventId));\n }\n match = candidates[0];\n } else if (stepId) {\n const candidates = completes.filter(\n (c) =>\n !usedCompletes.has(c.eventId) &&\n legacyEvent(c) === \"step_completed\" &&\n stepIdOf(c) === stepId,\n );\n if (candidates.length > 1) {\n diagnostics.push({\n code: \"AI_LOGICAL_PAIR_AMBIGUOUS\",\n message: `Multiple step_completed rows for stepId ${stepId}; using first by eventId.`,\n eventIds: candidates.map((c) => c.eventId),\n });\n candidates.sort((a, b) => a.eventId.localeCompare(b.eventId));\n }\n match = candidates[0];\n }\n\n if (match) {\n usedCompletes.add(match.eventId);\n absorbedIds.add(match.eventId);\n const paired = pairStartComplete(start, match);\n logical.push(paired);\n logicalByRawId.set(start.eventId, paired);\n logicalByRawId.set(match.eventId, paired);\n if (stepId) stepIdToLogicalId.set(`${runId}:${stepId}`, paired.eventId);\n } else {\n diagnostics.push({\n code: \"AI_LOGICAL_PAIR_UNMATCHED_START\",\n message: `No matching complete for start ${start.eventId}.`,\n eventIds: [start.eventId],\n });\n const alone = asLogical(start);\n logical.push(alone);\n logicalByRawId.set(start.eventId, alone);\n if (stepId) stepIdToLogicalId.set(`${runId}:${stepId}`, alone.eventId);\n }\n }\n\n for (const complete of completes) {\n if (usedCompletes.has(complete.eventId)) continue;\n diagnostics.push({\n code: \"AI_LOGICAL_PAIR_UNMATCHED_COMPLETE\",\n message: `No matching start for complete ${complete.eventId}.`,\n eventIds: [complete.eventId],\n });\n const alone = asLogical(complete);\n logical.push(alone);\n logicalByRawId.set(complete.eventId, alone);\n const stepId = stepIdOf(complete);\n if (stepId && !stepIdToLogicalId.has(`${runId}:${stepId}`)) {\n stepIdToLogicalId.set(`${runId}:${stepId}`, alone.eventId);\n }\n }\n\n for (const event of others) {\n const alone = asLogical(event);\n logical.push(alone);\n logicalByRawId.set(event.eventId, alone);\n const stepId = stepIdOf(event);\n if (stepId && !stepIdToLogicalId.has(`${runId}:${stepId}`)) {\n stepIdToLogicalId.set(`${runId}:${stepId}`, alone.eventId);\n }\n }\n }\n\n // Parent / forest normalization over the logical set.\n const logicalById = new Map(logical.map((e) => [e.eventId, e]));\n const normalized: LogicalTraceEvent[] = [];\n\n for (const event of logical) {\n const originalParentId = event.parentId;\n if (!originalParentId) {\n normalized.push(event);\n continue;\n }\n\n let nextParent = originalParentId;\n let remapped = false;\n\n // Absorbed complete eventId → paired start eventId\n const viaAbsorbed = logicalByRawId.get(originalParentId);\n if (viaAbsorbed && viaAbsorbed.eventId !== originalParentId) {\n nextParent = viaAbsorbed.eventId;\n remapped = true;\n } else if (!logicalById.has(originalParentId)) {\n // Treat parentId as stepId within the same run\n const viaStep = stepIdToLogicalId.get(`${event.runId}:${originalParentId}`);\n if (viaStep) {\n nextParent = viaStep;\n remapped = true;\n }\n }\n\n if (!remapped) {\n if (originalParentId === event.eventId) {\n diagnostics.push({\n code: \"AI_LOGICAL_SELF_PARENT_REMOVED\",\n message: formatProgrammaticDiagnostic(\n \"AI_TRACE_RELATIONSHIP_SELF_PARENT\",\n `Removed self-parent edge on ${event.eventId}.`,\n ),\n eventIds: [event.eventId],\n });\n const { parentId: _drop, ...rest } = event;\n normalized.push({\n ...rest,\n projection: {\n ...event.projection,\n parentNormalized: true,\n originalParentId,\n },\n });\n continue;\n }\n if (!logicalById.has(originalParentId) && !logicalByRawId.has(originalParentId)) {\n const mapping = event.attributes?.parentMapping;\n const unresolved =\n mapping === \"unresolved\" ||\n event.attributes?.parentUnresolved === true ||\n event.attributes?.unresolvedParent === true ||\n // LangGraph/framework scaffolding sentinel labels are not event ids.\n /^LangGraph$/i.test(originalParentId) ||\n originalParentId.startsWith(\"unresolved:\");\n if (!unresolved) {\n diagnostics.push({\n code: \"AI_LOGICAL_PARENT_UNRESOLVED\",\n message: `Parent ${originalParentId} unresolved for ${event.eventId}.`,\n eventIds: [event.eventId],\n });\n }\n }\n normalized.push(event);\n continue;\n }\n\n if (nextParent === event.eventId) {\n diagnostics.push({\n code: \"AI_LOGICAL_SELF_PARENT_REMOVED\",\n message: formatProgrammaticDiagnostic(\n \"AI_TRACE_RELATIONSHIP_SELF_PARENT\",\n `Removed self-parent edge on ${event.eventId} (was ${originalParentId}).`,\n ),\n eventIds: [event.eventId],\n });\n const { parentId: _drop, ...rest } = event;\n normalized.push({\n ...rest,\n projection: {\n ...event.projection,\n parentNormalized: true,\n originalParentId,\n },\n });\n continue;\n }\n\n diagnostics.push({\n code: \"AI_LOGICAL_PARENT_REMAPPED\",\n message: `Remapped parent ${originalParentId} → ${nextParent} for ${event.eventId}.`,\n eventIds: [event.eventId],\n });\n\n normalized.push({\n ...event,\n parentId: nextParent,\n projection: {\n ...event.projection,\n parentNormalized: true,\n originalParentId,\n },\n });\n }\n\n // Stable order: original raw encounter order by first source event index.\n const rawIndex = new Map(events.map((e, i) => [e.eventId, i]));\n normalized.sort((a, b) => {\n const ai = rawIndex.get(a.sourceEventIds[0]!) ?? 0;\n const bi = rawIndex.get(b.sourceEventIds[0]!) ?? 0;\n return ai - bi || a.eventId.localeCompare(b.eventId);\n });\n\n return {\n logicalEvents: Object.freeze(normalized),\n diagnostics: Object.freeze(diagnostics),\n };\n}\n\n/**\n * Resolve a human-meaningful tool name from a (logical or raw) event.\n * Precedence: toolName → tool → metadata.toolName → metadata.tool → name prefixes.\n *\n * @experimental\n */\nexport function resolveCanonicalToolName(event: PersistedInspectEvent): string {\n const attrs = event.attributes;\n const direct = pickString(attrs, [\"toolName\", \"tool\"]);\n if (direct) return direct;\n\n const metadata = attrs?.metadata;\n if (isRecord(metadata)) {\n const nested = pickString(metadata, [\"toolName\", \"tool\"]);\n if (nested) return nested;\n }\n\n for (const prefix of [\"tool:\", \"function:\", \"mcp-tools:\"] as const) {\n if (event.name.startsWith(prefix)) return event.name.slice(prefix.length);\n }\n return event.name;\n}\n\nfunction pickString(\n record: Record<string, unknown> | undefined,\n keys: readonly string[],\n): string | undefined {\n if (!record) return undefined;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === \"string\" && value.trim() !== \"\") return value.trim();\n }\n return undefined;\n}\n","/**\n * Read-time derived failure roles for TraceFacts (6.19).\n *\n * Failure roles classify recorded error events using explicit or conservatively\n * correlated retry/recovery relationships. They never rewrite persisted status.\n *\n * @experimental Available through `agent-inspect/checks`.\n */\n\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport {\n resolveCanonicalToolName,\n type LogicalTraceEvent,\n} from \"./logical-events.js\";\n\n/**\n * Derived classification of a recorded failure.\n *\n * @experimental\n */\nexport type DerivedFailureRole =\n | \"transient\"\n | \"recovered\"\n | \"terminal\"\n | \"unknown\";\n\n/**\n * Confidence for a derived failure classification.\n *\n * @experimental\n */\nexport type DerivedFailureConfidence =\n | \"explicit\"\n | \"correlated\"\n | \"unknown\";\n\n/**\n * One derived failure fact over a logical error event.\n *\n * @experimental\n */\nexport interface DerivedFailureFact {\n readonly eventId: string;\n readonly runId: string;\n readonly name: string;\n readonly kind: LogicalTraceEvent[\"kind\"];\n readonly role: DerivedFailureRole;\n readonly confidence: DerivedFailureConfidence;\n readonly basis: readonly string[];\n readonly recoveryEventIds: readonly string[];\n readonly retryRunIds: readonly string[];\n}\n\n/**\n * Bounded role counts for MCP / Evidence parity.\n *\n * @experimental\n */\nexport interface FailureRoleCounts {\n readonly transient: number;\n readonly recovered: number;\n readonly terminal: number;\n readonly unknown: number;\n}\n\ninterface RunContext {\n runId: string;\n name: string;\n status?: PersistedInspectEvent[\"status\"];\n retryOf?: string;\n attempt?: number;\n sessionId?: string;\n groupId?: string;\n parentGroupId?: string;\n fallbackOf?: string;\n}\n\ninterface LinkCandidate {\n event: LogicalTraceEvent;\n basis: string;\n confidence: DerivedFailureConfidence;\n viaRunId?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction pickString(\n record: Record<string, unknown> | undefined,\n keys: readonly string[],\n): string | undefined {\n if (!record) return undefined;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === \"string\" && value.trim() !== \"\") return value;\n }\n return undefined;\n}\n\nfunction pickNumber(\n record: Record<string, unknown> | undefined,\n keys: readonly string[],\n): number | undefined {\n if (!record) return undefined;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === \"number\" && Number.isFinite(value) && value > 0) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction eventMetadata(event: PersistedInspectEvent): Record<string, unknown> {\n const attrs = isRecord(event.attributes) ? event.attributes : undefined;\n const nested = attrs !== undefined && isRecord(attrs.metadata) ? attrs.metadata : undefined;\n return {\n ...(attrs ?? {}),\n ...(nested ?? {}),\n };\n}\n\nfunction canonicalName(event: PersistedInspectEvent): string {\n if (event.kind === \"TOOL\") return resolveCanonicalToolName(event);\n return event.name;\n}\n\nfunction linkKeys(event: PersistedInspectEvent): string[] {\n const meta = eventMetadata(event);\n const keys: string[] = [];\n for (const key of [\"linkedStepId\", \"toolCallId\", \"mcpToolCallId\"] as const) {\n const value = pickString(meta, [key]);\n if (value !== undefined) keys.push(`${key}:${value}`);\n }\n const stepId = pickString(meta, [\"stepId\"]);\n if (stepId !== undefined) keys.push(`stepId:${stepId}`);\n return keys;\n}\n\nfunction buildRunContexts(\n logicalEvents: readonly LogicalTraceEvent[],\n): Map<string, RunContext> {\n const byRun = new Map<string, RunContext>();\n\n for (const event of logicalEvents) {\n const existing = byRun.get(event.runId) ?? {\n runId: event.runId,\n name: event.name,\n };\n const meta = eventMetadata(event);\n\n if (event.kind === \"RUN\" || existing.name === event.runId) {\n existing.name = event.name || existing.name;\n }\n if (event.kind === \"RUN\" && event.status !== undefined && event.status !== \"running\") {\n existing.status = event.status;\n }\n existing.retryOf ??= pickString(meta, [\"retryOf\"]);\n existing.attempt ??= pickNumber(meta, [\"attempt\", \"retryAttempt\", \"retryCount\"]);\n existing.sessionId ??= pickString(meta, [\"sessionId\", \"conversationId\"]);\n existing.groupId ??= pickString(meta, [\"groupId\"]);\n existing.parentGroupId ??= pickString(meta, [\"parentGroupId\"]);\n existing.fallbackOf ??= pickString(meta, [\"fallbackOf\", \"fallbackFrom\"]);\n byRun.set(event.runId, existing);\n }\n\n return byRun;\n}\n\nfunction sameCorrelationScope(a: RunContext, b: RunContext): boolean {\n if (a.sessionId && b.sessionId && a.sessionId === b.sessionId) return true;\n if (a.groupId && b.groupId && a.groupId === b.groupId) return true;\n if (a.parentGroupId && b.parentGroupId && a.parentGroupId === b.parentGroupId) {\n return true;\n }\n return false;\n}\n\nfunction isSuccessful(event: LogicalTraceEvent): boolean {\n return event.status === \"ok\";\n}\n\nfunction isFailure(event: LogicalTraceEvent): boolean {\n return event.status === \"error\";\n}\n\nfunction compareEventOrder(a: LogicalTraceEvent, b: LogicalTraceEvent): number {\n const byTime = a.timestamp.localeCompare(b.timestamp);\n if (byTime !== 0) return byTime;\n return a.eventId.localeCompare(b.eventId);\n}\n\nfunction collectCandidates(\n failure: LogicalTraceEvent,\n logicalEvents: readonly LogicalTraceEvent[],\n runs: ReadonlyMap<string, RunContext>,\n): LinkCandidate[] {\n const failureRun = runs.get(failure.runId);\n const failureLinks = new Set(linkKeys(failure));\n const failureName = canonicalName(failure);\n const failureAttempt =\n pickNumber(eventMetadata(failure), [\"attempt\", \"retryAttempt\", \"retryCount\"]) ??\n failureRun?.attempt;\n const candidates: LinkCandidate[] = [];\n\n for (const event of logicalEvents) {\n if (event.eventId === failure.eventId) continue;\n if (event.status === \"running\") continue;\n\n const eventRun = runs.get(event.runId);\n const eventMeta = eventMetadata(event);\n const sameRun = event.runId === failure.runId;\n\n // Cross-run explicit retry / fallback (may not share timestamps with the failure).\n if (eventRun?.retryOf === failure.runId) {\n candidates.push({\n event,\n basis: \"retryOf\",\n confidence: \"explicit\",\n viaRunId: event.runId,\n });\n continue;\n }\n if (\n eventRun?.fallbackOf === failure.runId ||\n pickString(eventMeta, [\"fallbackOf\", \"fallbackFrom\"]) === failure.runId\n ) {\n candidates.push({\n event,\n basis: \"fallbackOf\",\n confidence: \"explicit\",\n viaRunId: event.runId,\n });\n continue;\n }\n\n // Same-run successors must appear after the failure in deterministic order.\n if (sameRun && compareEventOrder(failure, event) >= 0) continue;\n\n const eventLinks = linkKeys(event);\n const sharedLink = eventLinks.find((key) => failureLinks.has(key));\n if (sharedLink !== undefined) {\n candidates.push({\n event,\n basis: sharedLink.split(\":\")[0] ?? \"linkedId\",\n confidence: \"explicit\",\n });\n continue;\n }\n\n const eventAttempt =\n pickNumber(eventMeta, [\"attempt\", \"retryAttempt\", \"retryCount\"]) ??\n eventRun?.attempt;\n const sameParent =\n failure.parentId !== undefined &&\n event.parentId !== undefined &&\n failure.parentId === event.parentId;\n const differentParent =\n failure.parentId !== undefined &&\n event.parentId !== undefined &&\n failure.parentId !== event.parentId;\n const sessionScoped =\n failureRun !== undefined &&\n eventRun !== undefined &&\n sameCorrelationScope(failureRun, eventRun);\n\n // Same name alone is insufficient. Attempt progression requires a shared\n // parent/session/group (or same-run when parents are not both present and conflicting).\n if (\n canonicalName(event) === failureName &&\n failureAttempt !== undefined &&\n eventAttempt !== undefined &&\n eventAttempt > failureAttempt &&\n !differentParent &&\n (sameParent || sessionScoped || sameRun)\n ) {\n candidates.push({\n event,\n basis: \"attempt-progression\",\n confidence: \"correlated\",\n ...(event.runId !== failure.runId ? { viaRunId: event.runId } : {}),\n });\n }\n }\n\n const byId = new Map<string, LinkCandidate>();\n for (const candidate of candidates) {\n const prev = byId.get(candidate.event.eventId);\n if (!prev || (prev.confidence !== \"explicit\" && candidate.confidence === \"explicit\")) {\n byId.set(candidate.event.eventId, candidate);\n }\n }\n return [...byId.values()].sort((a, b) => compareEventOrder(a.event, b.event));\n}\n\nfunction classifyFailure(\n failure: LogicalTraceEvent,\n candidates: readonly LinkCandidate[],\n runs: ReadonlyMap<string, RunContext>,\n logicalEvents: readonly LogicalTraceEvent[],\n): DerivedFailureFact {\n const successful = candidates.filter((c) => isSuccessful(c.event));\n const unsuccessful = candidates.filter((c) => !isSuccessful(c.event));\n const retryRunIds = Object.freeze(\n [...new Set(candidates.map((c) => c.viaRunId).filter((id): id is string => id !== undefined))].sort(\n (a, b) => a.localeCompare(b),\n ),\n );\n\n if (successful.length > 1) {\n const distinctRuns = new Set(successful.map((c) => c.event.runId));\n const distinctParents = new Set(\n successful.map((c) => c.event.parentId ?? \"\").filter((id) => id !== \"\"),\n );\n if (distinctRuns.size > 1 || distinctParents.size > 1) {\n return {\n eventId: failure.eventId,\n runId: failure.runId,\n name: failure.name,\n kind: failure.kind,\n role: \"unknown\",\n confidence: \"unknown\",\n basis: Object.freeze([\"ambiguous-recovery-candidates\"]),\n recoveryEventIds: Object.freeze(\n successful.map((c) => c.event.eventId).sort((a, b) => a.localeCompare(b)),\n ),\n retryRunIds,\n };\n }\n }\n\n if (successful.length >= 1) {\n const best = successful[0]!;\n return {\n eventId: failure.eventId,\n runId: failure.runId,\n name: failure.name,\n kind: failure.kind,\n role: \"recovered\",\n confidence: best.confidence,\n basis: Object.freeze([best.basis]),\n recoveryEventIds: Object.freeze(\n successful.map((c) => c.event.eventId).sort((a, b) => a.localeCompare(b)),\n ),\n retryRunIds,\n };\n }\n\n if (candidates.length > 0) {\n const best = candidates[0]!;\n return {\n eventId: failure.eventId,\n runId: failure.runId,\n name: failure.name,\n kind: failure.kind,\n role: \"transient\",\n confidence: best.confidence,\n basis: Object.freeze([\n best.basis,\n unsuccessful.some((c) => c.event.status === undefined)\n ? \"retry-incomplete\"\n : \"retry-without-success\",\n ]),\n recoveryEventIds: Object.freeze([]),\n retryRunIds,\n };\n }\n\n // Declared successor run id present on the failure, but missing from selected input.\n const failureMeta = eventMetadata(failure);\n const declaredSuccessor = pickString(failureMeta, [\n \"retriedBy\",\n \"nextRetryRunId\",\n \"retryRunId\",\n ]);\n if (declaredSuccessor !== undefined && !runs.has(declaredSuccessor)) {\n return {\n eventId: failure.eventId,\n runId: failure.runId,\n name: failure.name,\n kind: failure.kind,\n role: \"transient\",\n confidence: \"explicit\",\n basis: Object.freeze([\"retry-declared\", \"retry-run-missing\"]),\n recoveryEventIds: Object.freeze([]),\n retryRunIds: Object.freeze([declaredSuccessor]),\n };\n }\n\n // Declared retryOf successor missing from selected input.\n for (const run of runs.values()) {\n if (run.retryOf === failure.runId) {\n return {\n eventId: failure.eventId,\n runId: failure.runId,\n name: failure.name,\n kind: failure.kind,\n role: \"transient\",\n confidence: \"explicit\",\n basis: Object.freeze([\"retryOf\", \"retry-run-missing-or-empty\"]),\n recoveryEventIds: Object.freeze([]),\n retryRunIds: Object.freeze([run.runId]),\n };\n }\n }\n\n // Terminal: final unrecovered member of an explicit retry chain when enclosing run is error.\n const failureRun = runs.get(failure.runId);\n const hasSuccessorDeclared = [...runs.values()].some((run) => run.retryOf === failure.runId);\n const isFinalInChain =\n failureRun !== undefined &&\n !hasSuccessorDeclared &&\n (failureRun.retryOf !== undefined ||\n (failureRun.attempt !== undefined && failureRun.attempt > 1) ||\n pickNumber(eventMetadata(failure), [\"attempt\"]) !== undefined);\n\n if (\n isFinalInChain &&\n failureRun?.status === \"error\" &&\n !logicalEvents.some(\n (event) =>\n event.runId === failure.runId &&\n event.eventId !== failure.eventId &&\n isSuccessful(event) &&\n canonicalName(event) === canonicalName(failure),\n )\n ) {\n return {\n eventId: failure.eventId,\n runId: failure.runId,\n name: failure.name,\n kind: failure.kind,\n role: \"terminal\",\n confidence: failureRun.retryOf !== undefined ? \"explicit\" : \"correlated\",\n basis: Object.freeze([\"final-retry-chain-member\", \"enclosing-run-error\"]),\n recoveryEventIds: Object.freeze([]),\n retryRunIds: Object.freeze(\n failureRun.retryOf !== undefined ? [failureRun.retryOf] : [],\n ),\n };\n }\n\n return {\n eventId: failure.eventId,\n runId: failure.runId,\n name: failure.name,\n kind: failure.kind,\n role: \"unknown\",\n confidence: \"unknown\",\n basis: Object.freeze([\"no-explicit-or-correlated-recovery\"]),\n recoveryEventIds: Object.freeze([]),\n retryRunIds: Object.freeze([]),\n };\n}\n\n/**\n * Derive conservative failure roles over logical events.\n *\n * @experimental\n */\nexport function deriveFailureFacts(\n logicalEvents: readonly LogicalTraceEvent[],\n): {\n failureFacts: readonly DerivedFailureFact[];\n failuresByRole: ReadonlyMap<DerivedFailureRole, readonly DerivedFailureFact[]>;\n failureRoleCounts: FailureRoleCounts;\n} {\n const runs = buildRunContexts(logicalEvents);\n const failures = logicalEvents\n .filter((event) => isFailure(event))\n .sort(compareEventOrder);\n\n const failureFacts = failures.map((failure) =>\n classifyFailure(failure, collectCandidates(failure, logicalEvents, runs), runs, logicalEvents),\n );\n\n const byRole = new Map<DerivedFailureRole, DerivedFailureFact[]>([\n [\"transient\", []],\n [\"recovered\", []],\n [\"terminal\", []],\n [\"unknown\", []],\n ]);\n for (const fact of failureFacts) {\n byRole.get(fact.role)!.push(fact);\n }\n for (const [role, list] of byRole) {\n byRole.set(\n role,\n Object.freeze(\n [...list].sort((a, b) => {\n const byRun = a.runId.localeCompare(b.runId);\n if (byRun !== 0) return byRun;\n return a.eventId.localeCompare(b.eventId);\n }),\n ) as DerivedFailureFact[],\n );\n }\n\n const failureRoleCounts: FailureRoleCounts = {\n transient: byRole.get(\"transient\")!.length,\n recovered: byRole.get(\"recovered\")!.length,\n terminal: byRole.get(\"terminal\")!.length,\n unknown: byRole.get(\"unknown\")!.length,\n };\n\n return {\n failureFacts: Object.freeze(failureFacts) as readonly DerivedFailureFact[],\n failuresByRole: byRole,\n failureRoleCounts,\n };\n}\n","/**\n * Read-time typed relationship facts (6.22).\n *\n * Facts never rewrite parent hierarchy. Confidence is explicit or correlated only —\n * never inferred from timestamps alone.\n *\n * @experimental Available through `agent-inspect/checks`.\n */\n\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\n\nexport type TraceRelationshipType =\n | \"parent-child\"\n | \"source-lineage\"\n | \"attempt-of\"\n | \"retry-of\"\n | \"fallback-of\"\n | \"remediation-of\"\n | \"evidence-for\"\n | \"accepted-by\"\n | \"supersedes\";\n\nexport type TraceRelationshipConfidence = \"explicit\" | \"correlated\" | \"unknown\";\n\n/**\n * Bounded relationship edge derived at read time.\n *\n * @experimental\n */\nexport interface TraceRelationship {\n type: TraceRelationshipType;\n fromEventId: string;\n toEventId?: string;\n externalRef?: string;\n confidence: TraceRelationshipConfidence;\n basis: readonly string[];\n}\n\nexport interface TraceRelationshipDiagnostic {\n code: string;\n message: string;\n eventId?: string;\n}\n\nfunction attrs(event: PersistedInspectEvent): Record<string, unknown> {\n return event.attributes && typeof event.attributes === \"object\"\n ? event.attributes\n : {};\n}\n\nfunction stringAttr(record: Record<string, unknown>, key: string): string | undefined {\n const value = record[key];\n return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\n/**\n * Derive typed relationship facts from persisted events without mutating hierarchy.\n */\nexport function deriveRelationshipFacts(\n events: readonly PersistedInspectEvent[],\n): {\n relationships: readonly TraceRelationship[];\n diagnostics: readonly TraceRelationshipDiagnostic[];\n} {\n const relationships: TraceRelationship[] = [];\n const diagnostics: TraceRelationshipDiagnostic[] = [];\n const byId = new Map(events.map((event) => [event.eventId, event]));\n const seen = new Set<string>();\n\n const push = (edge: TraceRelationship): void => {\n const key = `${edge.type}:${edge.fromEventId}:${edge.toEventId ?? \"\"}:${edge.externalRef ?? \"\"}`;\n if (seen.has(key)) return;\n seen.add(key);\n relationships.push(edge);\n };\n\n for (const event of events) {\n if (event.parentId) {\n push({\n type: \"parent-child\",\n fromEventId: event.parentId,\n toEventId: event.eventId,\n confidence: byId.has(event.parentId) ? \"explicit\" : \"unknown\",\n basis: [\"persisted.parentId\"],\n });\n if (!byId.has(event.parentId)) {\n diagnostics.push({\n code: \"AI_RELATIONSHIP_PARENT_MISSING\",\n message: `parentId ${event.parentId} is not present in the event set.`,\n eventId: event.eventId,\n });\n }\n }\n\n const bag = attrs(event);\n const meta = extractSessionWorkflowMetadata(bag) ?? {};\n const nested =\n bag.metadata && typeof bag.metadata === \"object\"\n ? extractSessionWorkflowMetadata(bag.metadata as Record<string, unknown>)\n : undefined;\n const workflow = { ...meta, ...nested };\n\n if (workflow.retryOf) {\n const target = events.find((candidate) => candidate.runId === workflow.retryOf);\n push({\n type: \"retry-of\",\n fromEventId: event.eventId,\n ...(target ? { toEventId: target.eventId } : {}),\n externalRef: workflow.retryOf,\n confidence: target ? \"explicit\" : \"correlated\",\n basis: [\"attributes.retryOf\"],\n });\n }\n\n const attemptOf = stringAttr(bag, \"attemptOf\") ?? stringAttr(bag, \"operationId\");\n if (attemptOf && workflow.attempt !== undefined) {\n push({\n type: \"attempt-of\",\n fromEventId: event.eventId,\n externalRef: attemptOf,\n confidence: \"explicit\",\n basis: workflow.attempt !== undefined ? [\"attributes.attempt\", \"attributes.operationId\"] : [\"attributes.operationId\"],\n });\n }\n\n const fallbackOf = stringAttr(bag, \"fallbackOf\");\n if (fallbackOf) {\n push({\n type: \"fallback-of\",\n fromEventId: event.eventId,\n externalRef: fallbackOf,\n confidence: \"explicit\",\n basis: [\"attributes.fallbackOf\"],\n });\n }\n\n const remediationOf = stringAttr(bag, \"remediationOf\");\n if (remediationOf) {\n push({\n type: \"remediation-of\",\n fromEventId: event.eventId,\n externalRef: remediationOf,\n confidence: \"explicit\",\n basis: [\"attributes.remediationOf\"],\n });\n }\n\n const evidenceFor = stringAttr(bag, \"evidenceFor\");\n if (evidenceFor) {\n push({\n type: \"evidence-for\",\n fromEventId: event.eventId,\n ...(byId.has(evidenceFor) ? { toEventId: evidenceFor } : { externalRef: evidenceFor }),\n confidence: byId.has(evidenceFor) ? \"explicit\" : \"correlated\",\n basis: [\"attributes.evidenceFor\"],\n });\n }\n\n const acceptedBy = stringAttr(bag, \"acceptedBy\");\n if (acceptedBy) {\n push({\n type: \"accepted-by\",\n fromEventId: event.eventId,\n ...(byId.has(acceptedBy) ? { toEventId: acceptedBy } : { externalRef: acceptedBy }),\n confidence: byId.has(acceptedBy) ? \"explicit\" : \"correlated\",\n basis: [\"attributes.acceptedBy\"],\n });\n }\n\n const supersedes = stringAttr(bag, \"supersedes\");\n if (supersedes) {\n push({\n type: \"supersedes\",\n fromEventId: event.eventId,\n ...(byId.has(supersedes) ? { toEventId: supersedes } : { externalRef: supersedes }),\n confidence: byId.has(supersedes) ? \"explicit\" : \"correlated\",\n basis: [\"attributes.supersedes\"],\n });\n }\n\n const sourceLineage = stringAttr(bag, \"sourceLineage\") ?? stringAttr(bag, \"sourceEventId\");\n if (sourceLineage) {\n push({\n type: \"source-lineage\",\n fromEventId: event.eventId,\n externalRef: sourceLineage,\n confidence: \"explicit\",\n basis: [\"attributes.sourceLineage\"],\n });\n }\n\n const unsupported = stringAttr(bag, \"relationshipType\");\n if (\n unsupported &&\n unsupported !== \"parent-child\" &&\n ![\n \"source-lineage\",\n \"attempt-of\",\n \"retry-of\",\n \"fallback-of\",\n \"remediation-of\",\n \"evidence-for\",\n \"accepted-by\",\n \"supersedes\",\n ].includes(unsupported)\n ) {\n diagnostics.push({\n code: \"AI_RELATIONSHIP_UNSUPPORTED_TYPE\",\n message: `Unsupported relationshipType ${unsupported} was reported without flattening.`,\n eventId: event.eventId,\n });\n }\n }\n\n return {\n relationships: Object.freeze(relationships),\n diagnostics: Object.freeze(diagnostics),\n };\n}\n","/**\n * Shared semantic parity summary over logical lifecycle projection.\n *\n * @experimental Available through `agent-inspect/checks`; formal TraceFacts in 6.13.\n */\n\nimport type { TraceReadResult } from \"../readers/index.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport { formatProgrammaticDiagnostic } from \"../diagnostics/programmatic.js\";\nimport {\n deriveFailureFacts,\n type DerivedFailureFact,\n type DerivedFailureRole,\n type FailureRoleCounts,\n} from \"./derived-failure.js\";\nimport {\n deriveRelationshipFacts,\n type TraceRelationship,\n type TraceRelationshipDiagnostic,\n} from \"./relationship-facts.js\";\nimport {\n projectLogicalEvents,\n resolveCanonicalToolName,\n type LogicalProjectionDiagnostic,\n type LogicalTraceEvent,\n} from \"./logical-events.js\";\n\nexport type {\n DerivedFailureConfidence,\n DerivedFailureFact,\n DerivedFailureRole,\n FailureRoleCounts,\n} from \"./derived-failure.js\";\nexport { deriveFailureFacts } from \"./derived-failure.js\";\nexport type {\n TraceRelationship,\n TraceRelationshipConfidence,\n TraceRelationshipDiagnostic,\n TraceRelationshipType,\n} from \"./relationship-facts.js\";\nexport { deriveRelationshipFacts } from \"./relationship-facts.js\";\n\n/**\n * Bounded semantic counts shared by check / contract / MCP / Evidence consumers.\n *\n * @experimental\n */\nexport interface SemanticParitySummary {\n readonly rawEventCount: number;\n readonly logicalEventCount: number;\n readonly runningLogicalCount: number;\n readonly finishedToolNames: readonly string[];\n readonly finishedToolCount: number;\n readonly pairedCount: number;\n readonly parentRemapCount: number;\n readonly diagnostics: readonly LogicalProjectionDiagnostic[];\n /**\n * Bounded derived failure role counts (6.19+). Additive; older readers ignore.\n *\n * @experimental\n */\n readonly failureRoleCounts?: FailureRoleCounts;\n}\n\n/**\n * Summarize logical projection for cross-surface parity assertions.\n *\n * @experimental\n */\nexport function summarizeSemanticParity(\n events: readonly PersistedInspectEvent[],\n): SemanticParitySummary {\n const projection = projectLogicalEvents(events);\n const logical = projection.logicalEvents;\n const finishedTools = logical.filter(\n (event) => event.kind === \"TOOL\" && event.status !== \"running\",\n );\n const finishedToolNames = Object.freeze(\n finishedTools.map((event) => resolveCanonicalToolName(event)).sort((a, b) => a.localeCompare(b)),\n );\n const derived = deriveFailureFacts(logical);\n return {\n rawEventCount: events.length,\n logicalEventCount: logical.length,\n runningLogicalCount: logical.filter((event) => event.status === \"running\").length,\n finishedToolNames,\n finishedToolCount: finishedTools.length,\n pairedCount: logical.filter((event) => event.projection.paired).length,\n parentRemapCount: projection.diagnostics.filter(\n (item) => item.code === \"AI_LOGICAL_PARENT_REMAPPED\",\n ).length,\n diagnostics: projection.diagnostics,\n failureRoleCounts: derived.failureRoleCounts,\n };\n}\n\n/**\n * Experimental TraceFacts foundation (6.13): indexes over logical events.\n *\n * Extends the 6.12.2 projection rather than introducing a parallel evaluator.\n *\n * @experimental\n */\nexport interface TraceFacts {\n readonly rawEvents: readonly PersistedInspectEvent[];\n readonly logicalEvents: readonly LogicalTraceEvent[];\n readonly diagnostics: readonly LogicalProjectionDiagnostic[];\n readonly toolsByName: ReadonlyMap<string, readonly LogicalTraceEvent[]>;\n readonly llmEvents: readonly LogicalTraceEvent[];\n readonly outcomeEvents: readonly LogicalTraceEvent[];\n readonly summary: SemanticParitySummary;\n /**\n * Read-time derived failure classifications. Does not rewrite persisted status.\n *\n * @experimental Additive in 6.19.\n */\n readonly failureFacts: readonly DerivedFailureFact[];\n /**\n * Derived failure facts grouped by role.\n *\n * @experimental Additive in 6.19.\n */\n readonly failuresByRole: ReadonlyMap<\n DerivedFailureRole,\n readonly DerivedFailureFact[]\n >;\n /**\n * Read-time typed relationship facts. Does not rewrite parent hierarchy.\n *\n * @experimental Additive in 6.22.\n */\n readonly relationships: readonly TraceRelationship[];\n /**\n * Diagnostics for unsupported or unresolved relationships.\n *\n * @experimental Additive in 6.22.\n */\n readonly relationshipDiagnostics: readonly TraceRelationshipDiagnostic[];\n}\n\nconst TRACE_FACTS_INPUT_NOT_NORMALIZED = formatProgrammaticDiagnostic(\n \"AI_TRACE_FACTS_INPUT_NOT_NORMALIZED\",\n);\n\nfunction isTraceReadResult(input: unknown): input is TraceReadResult {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n return false;\n }\n const record = input as {\n events?: unknown;\n runs?: unknown;\n format?: unknown;\n warnings?: unknown;\n };\n return (\n Array.isArray(record.events) &&\n Array.isArray(record.runs) &&\n typeof record.format === \"string\" &&\n Array.isArray(record.warnings)\n );\n}\n\nfunction looksLikeRawV01TraceEvents(input: unknown): boolean {\n if (!Array.isArray(input) || input.length === 0) return false;\n const first = input[0];\n if (typeof first !== \"object\" || first === null) return false;\n const row = first as { event?: unknown; schemaVersion?: unknown; eventId?: unknown };\n return (\n typeof row.event === \"string\" &&\n (row.schemaVersion === \"0.1\" || row.eventId === undefined)\n );\n}\n\nfunction isPersistedInspectEventArray(\n input: unknown,\n): input is readonly PersistedInspectEvent[] {\n if (!Array.isArray(input)) return false;\n if (input.length === 0) return true;\n const first = input[0];\n if (typeof first !== \"object\" || first === null) return false;\n const row = first as { eventId?: unknown; schemaVersion?: unknown; event?: unknown };\n return (\n typeof row.eventId === \"string\" &&\n (row.schemaVersion === \"0.2\" ||\n row.schemaVersion === \"1.0\" ||\n row.schemaVersion === \"0.1\") &&\n typeof row.event !== \"string\"\n );\n}\n\nfunction resolveTraceFactsEvents(\n input: TraceReadResult | readonly PersistedInspectEvent[],\n): readonly PersistedInspectEvent[] {\n if (isTraceReadResult(input)) {\n return input.events;\n }\n if (looksLikeRawV01TraceEvents(input)) {\n throw new TypeError(TRACE_FACTS_INPUT_NOT_NORMALIZED);\n }\n if (isPersistedInspectEventArray(input)) {\n return input;\n }\n throw new TypeError(TRACE_FACTS_INPUT_NOT_NORMALIZED);\n}\n\n/**\n * Build TraceFacts from a TraceReadResult or normalized persisted events.\n *\n * @experimental\n */\nexport function buildTraceFacts(input: TraceReadResult): TraceFacts;\nexport function buildTraceFacts(\n input: readonly PersistedInspectEvent[],\n): TraceFacts;\nexport function buildTraceFacts(\n input: TraceReadResult | readonly PersistedInspectEvent[],\n): TraceFacts {\n const events = resolveTraceFactsEvents(input);\n const projection = projectLogicalEvents(events);\n const toolsByName = new Map<string, LogicalTraceEvent[]>();\n const llmEvents: LogicalTraceEvent[] = [];\n const outcomeEvents: LogicalTraceEvent[] = [];\n\n for (const event of projection.logicalEvents) {\n if (event.kind === \"TOOL\" && event.status !== \"running\") {\n const name = resolveCanonicalToolName(event);\n const list = toolsByName.get(name) ?? [];\n list.push(event);\n toolsByName.set(name, list);\n }\n if (event.kind === \"LLM\" && event.status !== \"running\") {\n llmEvents.push(event);\n }\n if (event.kind === \"OUTCOME\") {\n outcomeEvents.push(event);\n }\n }\n\n for (const [name, list] of [...toolsByName.entries()]) {\n toolsByName.set(name, Object.freeze([...list]) as LogicalTraceEvent[]);\n }\n\n const derived = deriveFailureFacts(projection.logicalEvents);\n const relationship = deriveRelationshipFacts(events);\n const summary = summarizeSemanticParity(events);\n\n return {\n rawEvents: Object.freeze([...events]),\n logicalEvents: projection.logicalEvents,\n diagnostics: projection.diagnostics,\n toolsByName,\n llmEvents: Object.freeze(llmEvents),\n outcomeEvents: Object.freeze(outcomeEvents),\n summary: {\n ...summary,\n failureRoleCounts: derived.failureRoleCounts,\n },\n failureFacts: derived.failureFacts,\n failuresByRole: derived.failuresByRole,\n relationships: relationship.relationships,\n relationshipDiagnostics: relationship.diagnostics,\n };\n}\n","import type { TraceCheckDiagnostic, TraceCheckInput } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { SessionWorkflowMetadata } from \"../sessions/types.js\";\n\n/**\n * Explicit actor/run projection for TraceContract evaluation (#320).\n *\n * Selectors use only declared metadata (or explicit event ids). Zero matches\n * and singular-actor ambiguity fail closed. No timestamp or display-name\n * inference.\n *\n * @experimental\n */\nexport interface TraceContractScope {\n runId?: string;\n subAgentId?: string;\n groupId?: string;\n workflowStep?: string;\n /** Explicit root event id; evaluation projects to that event and descendants. */\n rootEventId?: string;\n}\n\nexport interface ResolvedContractScope {\n runId: string;\n rootEventId?: string;\n matchedSelectors: Record<string, string>;\n evidenceEventCount: number;\n input: TraceCheckInput;\n}\n\nfunction diagnostic(\n code: TraceCheckDiagnostic[\"code\"],\n message: string,\n ruleId?: string,\n): TraceCheckDiagnostic {\n return {\n code,\n message,\n severity: \"error\",\n ...(ruleId !== undefined ? { ruleId } : {}),\n };\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim() !== \"\";\n}\n\nfunction scopeEntries(scope: TraceContractScope): Array<[string, string]> {\n const out: Array<[string, string]> = [];\n if (isNonEmptyString(scope.runId)) out.push([\"runId\", scope.runId.trim()]);\n if (isNonEmptyString(scope.subAgentId)) out.push([\"subAgentId\", scope.subAgentId.trim()]);\n if (isNonEmptyString(scope.groupId)) out.push([\"groupId\", scope.groupId.trim()]);\n if (isNonEmptyString(scope.workflowStep)) {\n out.push([\"workflowStep\", scope.workflowStep.trim()]);\n }\n if (isNonEmptyString(scope.rootEventId)) {\n out.push([\"rootEventId\", scope.rootEventId.trim()]);\n }\n return out;\n}\n\nfunction mergeWorkflowMeta(\n into: SessionWorkflowMetadata,\n from: SessionWorkflowMetadata | undefined,\n): void {\n if (!from) return;\n for (const [key, value] of Object.entries(from) as Array<\n [keyof SessionWorkflowMetadata, SessionWorkflowMetadata[keyof SessionWorkflowMetadata]]\n >) {\n if (value === undefined) continue;\n if (into[key] === undefined) {\n (into as Record<string, unknown>)[key] = value;\n }\n }\n}\n\n/**\n * Collect explicit session/workflow metadata for a run from persisted events.\n * Prefers RUN-kind attributes; never invents identity from timestamps.\n */\nexport function workflowMetadataForRun(\n events: readonly PersistedInspectEvent[],\n runId: string,\n): SessionWorkflowMetadata {\n const preferred: SessionWorkflowMetadata = {};\n const fallback: SessionWorkflowMetadata = {};\n for (const event of events) {\n if (event.runId !== runId) continue;\n const attrs = event.attributes;\n if (!attrs || typeof attrs !== \"object\") continue;\n const direct = extractSessionWorkflowMetadata(attrs);\n const nested =\n attrs.metadata && typeof attrs.metadata === \"object\"\n ? extractSessionWorkflowMetadata(attrs.metadata as Record<string, unknown>)\n : undefined;\n const bag: SessionWorkflowMetadata = {};\n mergeWorkflowMeta(bag, direct);\n mergeWorkflowMeta(bag, nested);\n if (event.kind === \"RUN\") {\n mergeWorkflowMeta(preferred, bag);\n } else {\n mergeWorkflowMeta(fallback, bag);\n }\n }\n mergeWorkflowMeta(preferred, fallback);\n return preferred;\n}\n\nfunction flattenNodes(nodes: readonly InspectNode[]): InspectNode[] {\n return nodes.flatMap((node) => [node, ...flattenNodes(node.children)]);\n}\n\nfunction collectSubtreeEventIds(\n run: InspectRunTree,\n rootEventId: string,\n): Set<string> | undefined {\n const nodes = flattenNodes(run.children);\n const byId = new Map(nodes.map((node) => [node.event.eventId, node]));\n const root = byId.get(rootEventId);\n if (!root) return undefined;\n const ids = new Set<string>();\n const visit = (node: InspectNode): void => {\n ids.add(node.event.eventId);\n for (const child of node.children) visit(child);\n };\n visit(root);\n return ids;\n}\n\nfunction filterTree(nodes: readonly InspectNode[], keep: Set<string>): InspectNode[] {\n const out: InspectNode[] = [];\n for (const node of nodes) {\n if (!keep.has(node.event.eventId)) continue;\n out.push({\n ...node,\n children: filterTree(node.children, keep),\n });\n }\n return out;\n}\n\nfunction projectInput(\n input: TraceCheckInput,\n run: InspectRunTree,\n eventIds: Set<string> | undefined,\n): { input: TraceCheckInput; evidenceEventCount: number } {\n const runEvents = input.read.events.filter((event) => event.runId === run.runId);\n const projectedEvents =\n eventIds === undefined\n ? runEvents\n : runEvents.filter((event) => eventIds.has(event.eventId) || event.kind === \"RUN\");\n const projectedChildren =\n eventIds === undefined ? run.children : filterTree(run.children, eventIds);\n const projectedRun: InspectRunTree = {\n ...run,\n children: projectedChildren,\n metadata: {\n ...run.metadata,\n totalEvents: flattenNodes(projectedChildren).length,\n },\n };\n return {\n evidenceEventCount: projectedEvents.length,\n input: {\n ...input,\n selectedRun: projectedRun,\n read: {\n ...input.read,\n runs: [projectedRun],\n events: projectedEvents,\n },\n },\n };\n}\n\n/**\n * Resolve TraceContract `scope` against a check input.\n * Returns diagnostics on zero/ambiguous matches or missing root events.\n */\nexport function resolveTraceContractScope(\n input: TraceCheckInput,\n scope: TraceContractScope | undefined,\n): { resolved?: ResolvedContractScope; diagnostics: TraceCheckDiagnostic[] } {\n if (scope === undefined) {\n return { diagnostics: [] };\n }\n const entries = scopeEntries(scope);\n if (entries.length === 0) {\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_INVALID_CONFIG\",\n \"TraceContract scope requires at least one explicit selector (runId, subAgentId, groupId, workflowStep, or rootEventId).\",\n \"contract.scope.empty\",\n ),\n ],\n };\n }\n\n const matchedSelectors = Object.fromEntries(entries);\n const actorKeys = entries.filter(([key]) => key !== \"rootEventId\");\n const rootEventId = matchedSelectors.rootEventId;\n\n let candidates = [...input.read.runs];\n\n if (matchedSelectors.runId) {\n candidates = candidates.filter((run) => run.runId === matchedSelectors.runId);\n }\n\n for (const [key, value] of actorKeys) {\n if (key === \"runId\") continue;\n candidates = candidates.filter((run) => {\n const meta = workflowMetadataForRun(input.read.events, run.runId);\n const actual = meta[key as \"subAgentId\" | \"groupId\" | \"workflowStep\"];\n return actual === value;\n });\n }\n\n // rootEventId alone selects among runs that contain that event.\n if (rootEventId && actorKeys.length === 0) {\n candidates = candidates.filter((run) =>\n flattenNodes(run.children).some((node) => node.event.eventId === rootEventId),\n );\n }\n\n if (candidates.length === 0) {\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n `TraceContract scope matched zero actors for ${JSON.stringify(matchedSelectors)}. Missing actor metadata does not fall back to the whole session.`,\n \"contract.scope.zero-match\",\n ),\n ],\n };\n }\n\n if (candidates.length > 1) {\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n `TraceContract scope matched ${candidates.length} actors for ${JSON.stringify(matchedSelectors)} (runIds: ${candidates\n .map((run) => run.runId)\n .sort()\n .join(\", \")}). Singular actor selectors must resolve to exactly one run.`,\n \"contract.scope.ambiguous\",\n ),\n ],\n };\n }\n\n const run = candidates[0]!;\n let eventIds: Set<string> | undefined;\n if (rootEventId) {\n eventIds = collectSubtreeEventIds(run, rootEventId);\n if (eventIds === undefined) {\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_INVALID_ARGUMENTS\",\n `TraceContract scope rootEventId ${rootEventId} was not found in run ${run.runId}.`,\n \"contract.scope.root-missing\",\n ),\n ],\n };\n }\n }\n\n const projected = projectInput(input, run, eventIds);\n return {\n resolved: {\n runId: run.runId,\n ...(rootEventId !== undefined ? { rootEventId } : {}),\n matchedSelectors,\n evidenceEventCount: projected.evidenceEventCount,\n input: projected.input,\n },\n diagnostics: [],\n };\n}\n","/**\n * Bounded JSON Pointer evaluation for TraceContract tool-argument checks (6.23).\n *\n * No JSONPath, regex, or arbitrary code execution.\n *\n * @experimental\n */\n\nexport type JsonPointerValue =\n | string\n | number\n | boolean\n | null\n | readonly JsonPointerValue[]\n | { readonly [key: string]: JsonPointerValue };\n\nfunction decodeToken(token: string): string {\n return token.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\n\n/**\n * Resolve an RFC 6901 JSON Pointer against a JSON-like value.\n * Returns `{ found: false }` when the path does not exist.\n */\nexport function resolveJsonPointer(\n document: unknown,\n pointer: string,\n): { found: true; value: unknown } | { found: false } {\n if (pointer === \"\") {\n return { found: true, value: document };\n }\n if (!pointer.startsWith(\"/\")) {\n return { found: false };\n }\n const tokens = pointer.slice(1).split(\"/\").map(decodeToken);\n let current: unknown = document;\n for (const token of tokens) {\n if (current === null || current === undefined) {\n return { found: false };\n }\n if (Array.isArray(current)) {\n if (!/^(0|[1-9][0-9]*)$/.test(token)) {\n return { found: false };\n }\n const index = Number(token);\n if (index >= current.length) {\n return { found: false };\n }\n current = current[index];\n continue;\n }\n if (typeof current !== \"object\") {\n return { found: false };\n }\n const record = current as Record<string, unknown>;\n if (!Object.prototype.hasOwnProperty.call(record, token)) {\n return { found: false };\n }\n current = record[token];\n }\n return { found: true, value: current };\n}\n\nexport type ToolArgumentOperator = \"exists\" | \"type\" | \"equals\" | \"oneOf\";\nexport type ToolArgumentOccurrence = \"first\" | \"last\" | \"any\" | \"all\";\n\nexport interface ToolArgumentCheck {\n tool: string;\n path: string;\n operator: ToolArgumentOperator;\n occurrence?: ToolArgumentOccurrence;\n /** Required for `equals`. */\n expected?: unknown;\n /** Required for `oneOf`. */\n oneOf?: readonly unknown[];\n /** Required for `type` (`string` | `number` | `boolean` | `object` | `array` | `null`). */\n type?: \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\" | \"null\";\n}\n\nfunction jsonType(value: unknown): string {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"array\";\n return typeof value;\n}\n\nfunction valuesEqual(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nexport type ToolArgumentEval =\n | { status: \"pass\" }\n | { status: \"fail\"; message: string; code: string }\n | { status: \"unavailable\"; message: string; code: \"AI_CHECK_TOOL_ARGUMENT_EVIDENCE_UNAVAILABLE\" };\n\n/**\n * Extract structured tool-argument evidence from a tool event.\n * Preview-only strings and digests do not count as structured evidence.\n */\nexport function extractToolArgumentPayload(event: {\n attributes?: Record<string, unknown>;\n inputSummary?: unknown;\n}): { present: boolean; value: unknown } {\n const attrs = event.attributes ?? {};\n for (const key of [\"arguments\", \"input\", \"toolArguments\"] as const) {\n const candidate = attrs[key];\n if (candidate !== undefined && candidate !== null && typeof candidate === \"object\") {\n return { present: true, value: candidate };\n }\n }\n if (\n event.inputSummary !== undefined &&\n event.inputSummary !== null &&\n typeof event.inputSummary === \"object\"\n ) {\n return { present: true, value: event.inputSummary };\n }\n return { present: false, value: undefined };\n}\n\nexport function evaluateToolArgumentValue(\n value: unknown,\n check: ToolArgumentCheck,\n evidencePresent: boolean,\n): ToolArgumentEval {\n if (!evidencePresent) {\n return {\n status: \"unavailable\",\n code: \"AI_CHECK_TOOL_ARGUMENT_EVIDENCE_UNAVAILABLE\",\n message: `Structured argument evidence unavailable for tool ${check.tool} at ${check.path}.`,\n };\n }\n const resolved = resolveJsonPointer(value, check.path);\n if (check.operator === \"exists\") {\n return resolved.found\n ? { status: \"pass\" }\n : {\n status: \"fail\",\n code: \"AI_CHECK_TOOL_ARGUMENT_MISSING\",\n message: `Expected path ${check.path} to exist on tool ${check.tool}.`,\n };\n }\n if (!resolved.found) {\n return {\n status: \"unavailable\",\n code: \"AI_CHECK_TOOL_ARGUMENT_EVIDENCE_UNAVAILABLE\",\n message: `Path ${check.path} missing for tool ${check.tool}.`,\n };\n }\n if (check.operator === \"type\") {\n const actual = jsonType(resolved.value);\n if (check.type === undefined) {\n return {\n status: \"fail\",\n code: \"AI_CHECK_TOOL_ARGUMENT_INVALID_CONFIG\",\n message: \"type operator requires check.type\",\n };\n }\n return actual === check.type\n ? { status: \"pass\" }\n : {\n status: \"fail\",\n code: \"AI_CHECK_TOOL_ARGUMENT_TYPE\",\n message: `Expected type ${check.type} at ${check.path} for tool ${check.tool}; found ${actual}.`,\n };\n }\n if (check.operator === \"equals\") {\n return valuesEqual(resolved.value, check.expected)\n ? { status: \"pass\" }\n : {\n status: \"fail\",\n code: \"AI_CHECK_TOOL_ARGUMENT_EQUALS\",\n message: `Value at ${check.path} for tool ${check.tool} did not equal expected (bounded comparison).`,\n };\n }\n if (check.operator === \"oneOf\") {\n const options = check.oneOf ?? [];\n if (options.length === 0) {\n return {\n status: \"fail\",\n code: \"AI_CHECK_TOOL_ARGUMENT_INVALID_CONFIG\",\n message: \"oneOf operator requires a non-empty oneOf array\",\n };\n }\n return options.some((option) => valuesEqual(resolved.value, option))\n ? { status: \"pass\" }\n : {\n status: \"fail\",\n code: \"AI_CHECK_TOOL_ARGUMENT_ONE_OF\",\n message: `Value at ${check.path} for tool ${check.tool} was not in the allowed oneOf set.`,\n };\n }\n return {\n status: \"fail\",\n code: \"AI_CHECK_TOOL_ARGUMENT_INVALID_CONFIG\",\n message: `Unsupported operator.`,\n };\n}\n","/**\n * Contextual sensitive-key classification for safety checks and redaction.\n *\n * Avoids treating model token-configuration fields (ls_max_tokens, max_tokens,\n * token_count, …) as credentials solely because they contain the substring\n * \"token\". Value-based secret detectors remain separate.\n *\n * @experimental Shared classifier used by checks (6.14.2+); parity across\n * surfaces lands in the same patch train.\n */\n\n/** True when the original key already uses an explicit separator. */\nfunction keyHasExplicitSeparator(value: string): boolean {\n return /[_\\-.]/.test(value);\n}\n\n/**\n * Canonicalize field names so camelCase / kebab / dot / snake forms share a\n * snake_case shape the compound matcher can recognize (`userPassword` →\n * `user_password`).\n */\nexport function normalizeSensitiveKey(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n}\n\n/** Model / usage configuration keys that are not credentials by key alone. */\nexport const NON_CREDENTIAL_TOKEN_CONFIG_KEYS: ReadonlySet<string> = new Set(\n [\n \"tokens\",\n \"max_tokens\",\n \"min_tokens\",\n \"ls_max_tokens\",\n \"token_count\",\n \"token_limit\",\n \"token_budget\",\n \"input_tokens\",\n \"output_tokens\",\n \"total_tokens\",\n \"cached_tokens\",\n \"prompt_tokens\",\n \"completion_tokens\",\n ].map(normalizeSensitiveKey),\n);\n\nexport const DEFAULT_CREDENTIAL_SENSITIVE_KEYS = [\n \"authorization\",\n \"cookie\",\n \"token\",\n \"access_token\",\n \"accesstoken\",\n \"auth_token\",\n \"authtoken\",\n \"refresh_token\",\n \"refreshtoken\",\n \"id_token\",\n \"idtoken\",\n \"bearer_token\",\n \"bearertoken\",\n \"api_token\",\n \"apitoken\",\n \"apikey\",\n \"api_key\",\n \"password\",\n \"secret\",\n \"email\",\n] as const;\n\nfunction isTokenCredentialKey(normalized: string): boolean {\n if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n if (normalized === \"token\") return true;\n // access_token / refreshToken → *token, but not *tokens (max_tokens → max_tokens)\n if (normalized.endsWith(\"tokens\")) return false;\n return normalized.endsWith(\"token\");\n}\n\n/**\n * True when the field name looks credential-sensitive under the shared policy.\n *\n * Suffix compounds (`user_password`, `userPassword`) always match. Prefix\n * compounds (`email_note`) match only when the original key already contained\n * an explicit separator, so camelCase topic fields like `emailNote` stay for\n * value detectors instead of key redaction.\n */\nexport function isCredentialSensitiveKey(\n key: string | undefined,\n sensitiveKeys: readonly string[] = DEFAULT_CREDENTIAL_SENSITIVE_KEYS,\n): boolean {\n if (!key) return false;\n const normalized = normalizeSensitiveKey(key);\n if (!normalized) return false;\n if (NON_CREDENTIAL_TOKEN_CONFIG_KEYS.has(normalized)) return false;\n\n const allowPrefixCompound = keyHasExplicitSeparator(key);\n\n for (const sensitive of sensitiveKeys) {\n const s = normalizeSensitiveKey(sensitive);\n if (!s) continue;\n if (s === \"token\") {\n if (isTokenCredentialKey(normalized)) return true;\n continue;\n }\n if (normalized === s) return true;\n // Compound keys with explicit separators, plus camelCase owner+secret suffixes.\n if (normalized.endsWith(`_${s}`)) return true;\n if (allowPrefixCompound && normalized.startsWith(`${s}_`)) return true;\n }\n return false;\n}\n","import type { TraceReadResult, TraceReadWarning } from \"../readers/index.js\";\nimport type {\n AttributionConfidence,\n InspectNode,\n InspectRunTree,\n} from \"../types/inspect-event.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport { formatProgrammaticDiagnostic } from \"../diagnostics/programmatic.js\";\nimport {\n extractOutcomesFromPersistedEvents,\n outcomesMatchingStatus,\n type ObservedOutcomeStatus,\n} from \"../outcomes/index.js\";\nimport {\n DEFAULT_CREDENTIAL_SENSITIVE_KEYS,\n isCredentialSensitiveKey,\n} from \"../safety/sensitive-key.js\";\nimport {\n projectLogicalEvents,\n resolveCanonicalToolName,\n type LogicalProjectionDiagnostic,\n type LogicalTraceEvent,\n} from \"./logical-events.js\";\n\nexport type { LogicalProjectionDiagnostic, LogicalTraceEvent } from \"./logical-events.js\";\nexport { projectLogicalEvents, resolveCanonicalToolName } from \"./logical-events.js\";\nexport type {\n DerivedFailureConfidence,\n DerivedFailureFact,\n DerivedFailureRole,\n FailureRoleCounts,\n SemanticParitySummary,\n TraceFacts,\n TraceRelationship,\n TraceRelationshipConfidence,\n TraceRelationshipDiagnostic,\n TraceRelationshipType,\n} from \"./trace-facts.js\";\nexport {\n buildTraceFacts,\n deriveFailureFacts,\n deriveRelationshipFacts,\n summarizeSemanticParity,\n} from \"./trace-facts.js\";\nexport type {\n ProgrammaticDiagnosticCode,\n ProgrammaticDiagnosticSpec,\n} from \"../diagnostics/programmatic.js\";\nexport {\n PROGRAMMATIC_DIAGNOSTIC_SPECS,\n formatProgrammaticDiagnostic,\n} from \"../diagnostics/programmatic.js\";\nexport {\n DEFAULT_CREDENTIAL_SENSITIVE_KEYS,\n isCredentialSensitiveKey,\n NON_CREDENTIAL_TOKEN_CONFIG_KEYS,\n normalizeSensitiveKey,\n} from \"../safety/sensitive-key.js\";\n\n/**\n * Experimental trace-check finding severity.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckSeverity = \"error\" | \"warning\" | \"info\";\n\n/**\n * Experimental trace-check rule category.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckRuleCategory =\n | \"run\"\n | \"tool\"\n | \"llm\"\n | \"structure\"\n | \"baseline\"\n | \"safety\"\n | \"reader\";\n\n/**\n * Experimental safety finding taxonomy (additive on `TraceCheckFinding`).\n *\n * Distinct from `TraceCheckRuleCategory` (which classifies rules, not findings).\n *\n * @experimental Available through `agent-inspect/checks`; see `docs/SAFETY-POLICY.md`.\n */\nexport type SafetyFindingCategory =\n | \"credential\"\n | \"personal-data\"\n | \"identifier\"\n | \"raw-content\"\n | \"path\"\n | \"size\"\n | \"structure\";\n\n/**\n * Experimental detector confidence for safety findings.\n *\n * @experimental Available through `agent-inspect/checks`; see `docs/SAFETY-POLICY.md`.\n */\nexport type SafetyFindingConfidence = \"high\" | \"medium\" | \"low\";\n\n/**\n * Experimental trace-check finding status.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckFindingStatus = \"pass\" | \"fail\" | \"warning\";\n\n/**\n * Experimental trace-check aggregate status.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckStatus = \"pass\" | \"fail\" | \"error\";\n\n/**\n * Experimental stable diagnostic code for check execution and input errors.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckDiagnosticCode =\n | \"AI_CHECK_INVALID_ARGUMENTS\"\n | \"AI_CHECK_INVALID_CONFIG\"\n | \"AI_CHECK_CONFIG_LOAD_FAILED\"\n | \"AI_CHECK_CONFIG_UNKNOWN_KEY\"\n | \"AI_CHECK_CONFIG_INVALID_VALUE\"\n | \"AI_CHECK_CONFIG_NO_EFFECTIVE_RULES\"\n | \"AI_CHECK_NO_RULES_EVALUATED\"\n | \"AI_CHECK_TRACE_UNREADABLE\"\n | \"AI_CHECK_UNSUPPORTED_FORMAT\"\n | \"AI_CHECK_AMBIGUOUS_FORMAT\"\n | \"AI_CHECK_RUN_SELECTION_REQUIRED\"\n | \"AI_CHECK_BASELINE_UNREADABLE\"\n | \"AI_CHECK_BASELINE_INCOMPATIBLE\"\n | \"AI_CHECK_RULE_FAILED\"\n | \"AI_CHECK_INTERNAL_ERROR\";\n\n/**\n * Experimental evidence pointing at trace data relevant to a finding.\n *\n * Evidence intentionally identifies runs/events/spans and bounded paths rather\n * than embedding raw prompts, outputs, request bodies, headers, or tool payloads.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckEvidence {\n runId?: string;\n eventId?: string;\n parentId?: string;\n traceId?: string;\n spanId?: string;\n kind?: string;\n name?: string;\n status?: string;\n path?: string;\n}\n\n/**\n * Experimental finding emitted by a trace-check rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckFinding {\n ruleId: string;\n severity: TraceCheckSeverity;\n status: TraceCheckFindingStatus;\n message: string;\n expected?: unknown;\n actual?: unknown;\n evidence: TraceCheckEvidence[];\n /**\n * Additive safety taxonomy (6.9+). Omitted for non-safety / structural rules.\n *\n * @experimental\n */\n category?: SafetyFindingCategory;\n /**\n * Additive detector confidence (6.9+).\n *\n * @experimental\n */\n confidence?: SafetyFindingConfidence;\n /**\n * Detector id when known (rule id or redaction detector id).\n *\n * @experimental\n */\n detector?: string;\n /**\n * Recommended remediation action (e.g. redact, review, keep).\n *\n * @experimental\n */\n action?: string;\n}\n\n/**\n * Experimental diagnostic emitted when check execution cannot complete normally.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckDiagnostic {\n code: TraceCheckDiagnosticCode;\n message: string;\n severity: TraceCheckSeverity;\n ruleId?: string;\n}\n\n/**\n * Experimental input projection for trace checks.\n *\n * The `read` value must come from `agent-inspect/readers` or an equivalent\n * already-normalized `TraceReadResult`. The checks engine does not read files\n * or reparse source payloads.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckInput {\n read: TraceReadResult;\n selectedRun?: InspectRunTree;\n sourceLabel?: string;\n}\n\n/**\n * Experimental normalized facts available to trace-check rules.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckFacts {\n format: string;\n runs: readonly InspectRunTree[];\n /**\n * Raw persisted rows (public experimental contract; unchanged meaning).\n */\n events: readonly PersistedInspectEvent[];\n /**\n * Lifecycle-paired projection for built-in semantic/structure rules.\n *\n * @experimental Additive in 6.12.2; formal TraceFacts land in 6.13.\n */\n logicalEvents: readonly LogicalTraceEvent[];\n /**\n * Non-fatal projection notes (ambiguous pairs, remapped parents, etc.).\n *\n * @experimental\n */\n logicalProjectionDiagnostics: readonly LogicalProjectionDiagnostic[];\n readerWarnings: readonly TraceReadWarning[];\n unsupportedFields: readonly string[];\n sourceFiles: readonly string[];\n nodesByEventId: ReadonlyMap<string, InspectNode>;\n childrenByParentId: ReadonlyMap<string, readonly InspectNode[]>;\n rootNodes: readonly InspectNode[];\n}\n\n/**\n * Experimental rule evaluation context.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckContext extends TraceCheckFacts {\n selectedRun?: InspectRunTree;\n sourceLabel?: string;\n}\n\n/**\n * Experimental trace-check rule definition.\n *\n * Rules are synchronous and pure: they receive normalized facts and return\n * findings without reading files, mutating input, or performing network I/O.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckRule {\n id: string;\n category: TraceCheckRuleCategory;\n defaultSeverity: TraceCheckSeverity;\n evaluate(context: TraceCheckContext): readonly TraceCheckFinding[];\n}\n\n/**\n * Experimental options for `runTraceChecks`.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunTraceChecksOptions {\n rules?: readonly TraceCheckRule[];\n select?: readonly string[];\n runId?: string;\n}\n\n/**\n * Experimental options for the built-in run status rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunStatusRuleOptions {\n expected?: \"ok\" | \"error\" | \"running\";\n allowIncomplete?: boolean;\n}\n\n/**\n * Experimental options for the built-in run duration rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunDurationRuleOptions {\n maxDurationMs: number;\n}\n\n/**\n * Experimental options for the built-in max step duration rule.\n */\nexport interface MaxStepDurationRuleOptions {\n maxDurationMs: number;\n}\n\n/**\n * Experimental options for stall detection (running / incomplete events).\n */\nexport interface StallDetectionRuleOptions {\n /** When true, events with startedAt but no endedAt also fail. */\n requireEndedAt?: boolean;\n}\n\n/**\n * Experimental options for the built-in event count rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunEventCountRuleOptions {\n kind?: PersistedInspectEvent[\"kind\"];\n min?: number;\n max?: number;\n}\n\n/**\n * Experimental options for the built-in run depth rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RunDepthRuleOptions {\n maxDepth: number;\n}\n\n/**\n * Experimental options for the built-in tool usage rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface ToolUsageRuleOptions {\n required?: readonly string[];\n forbidden?: readonly string[];\n allowed?: readonly string[];\n minCount?: number;\n maxCount?: number;\n}\n\n/**\n * Experimental options for the built-in tool ordering rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface ToolOrderingRuleOptions {\n before: string;\n after: string;\n /**\n * Explicit rule id. Defaults to `tool.order`. TraceContract-generated\n * adjacent pairs use unique ids such as `contract.tool.order.0`.\n */\n id?: string;\n /**\n * Ordering semantics. `first-occurrence` preserves first-occurrence encounter\n * ordering, `happens-before` requires the first before event to finish before\n * the first after event starts, and `all-occurrences` applies that causal\n * boundary to every matching occurrence.\n *\n * @defaultValue `\"first-occurrence\"`\n * @experimental Available through `agent-inspect/checks`.\n */\n mode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n}\n\n/**\n * Experimental options for the built-in tool failure rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface ToolFailureRuleOptions {\n maxFailures?: number;\n maxRetries?: number;\n}\n\n/**\n * Experimental options for the built-in LLM usage rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface LlmUsageRuleOptions {\n allowedModels?: readonly string[];\n allowedProviders?: readonly string[];\n maxCalls?: number;\n maxInputTokens?: number;\n maxOutputTokens?: number;\n maxTotalTokens?: number;\n maxCachedTokens?: number;\n finishReasons?: readonly string[];\n}\n\n/**\n * Experimental options for the built-in structure incomplete rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface StructureIncompleteRuleOptions {\n allowRunning?: boolean;\n requireEndedAtForStarted?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure orphan rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface StructureOrphanRuleOptions {\n allowMarkedUnresolved?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure relationship rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface StructureRelationshipRuleOptions {\n minConfidence?: AttributionConfidence;\n requireParentBeforeChild?: boolean;\n requireTraceParentSpan?: boolean;\n}\n\n/**\n * Experimental options for the built-in structure parallel-width rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface StructureParallelWidthRuleOptions {\n maxChildren?: number;\n maxConcurrent?: number;\n}\n\n/**\n * Experimental options shared by built-in signal rules.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceSignalRuleOptions {\n required?: readonly string[];\n forbidden?: readonly string[];\n allowed?: readonly string[];\n minCount?: number;\n maxCount?: number;\n}\n\n/**\n * Experimental options for the built-in retrieval signal rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface RetrievalRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in guardrail signal rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface GuardrailRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in decision signal rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface DecisionRuleOptions extends TraceSignalRuleOptions {}\n\n/**\n * Experimental options for the built-in safety redaction rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetyRedactionRuleOptions {\n sensitiveKeys?: readonly string[];\n redactedMarkers?: readonly string[];\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in raw content path rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetyRawContentRuleOptions {\n forbiddenKeys?: readonly string[];\n /**\n * Path prefixes (dot-separated, case-insensitive) whose terminal keys are\n * treated as metrics rather than raw prompts (e.g. `tokenUsage`, `usage`).\n */\n safePathPrefixes?: readonly string[];\n includeSummaries?: boolean;\n maxFindings?: number;\n}\n\n/**\n * Experimental secret pattern used by the built-in secret safety rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetySecretPattern {\n id: string;\n pattern: RegExp;\n}\n\n/**\n * Experimental options for the built-in secret pattern safety rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetySecretPatternRuleOptions {\n patterns?: readonly SafetySecretPattern[];\n maxStringLength?: number;\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in oversized attribute safety rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface SafetyOversizedAttributeRuleOptions {\n maxStringLength?: number;\n maxArrayLength?: number;\n maxObjectKeys?: number;\n maxSerializedBytes?: number;\n maxFindings?: number;\n}\n\n/**\n * Experimental options for the built-in baseline regression rule.\n *\n * The baseline must already be normalized through `agent-inspect/readers` or an\n * equivalent `TraceReadResult`; this rule does not read files or parse traces.\n * `durationToleranceMs` defaults to `0`, meaning exact duration comparison.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface BaselineRegressionRuleOptions {\n baseline: TraceCheckInput;\n baselineRunId?: string;\n durationToleranceMs?: number;\n compareFormat?: boolean;\n}\n\n/**\n * Per-rule execution status recorded on every check result.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport type TraceCheckRuleExecutionStatus = \"pass\" | \"warning\" | \"fail\" | \"error\";\n\n/**\n * Evidence that a specific rule was evaluated (or failed before evaluation).\n *\n * Distinguishes “all intended rules passed” from “no intended rules ran.”\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckRuleExecution {\n ruleId: string;\n category: TraceCheckRule[\"category\"];\n status: TraceCheckRuleExecutionStatus;\n findingCount: number;\n runId?: string;\n}\n\n/**\n * Experimental aggregate counts for trace-check results.\n *\n * `passed` / `failed` / `warnings` count findings. `rulesEvaluated` counts\n * rules that were selected and executed (or attempted).\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckSummary {\n passed: number;\n failed: number;\n warnings: number;\n errors: number;\n rulesEvaluated: number;\n}\n\n/**\n * Experimental trace-check result.\n *\n * `status: \"fail\"` means rules ran and at least one error-severity finding\n * failed. `status: \"error\"` means execution could not complete because of\n * invalid input, invalid rule selection, zero rules selected, or a thrown\n * rule error.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport interface TraceCheckResult {\n ok: boolean;\n status: TraceCheckStatus;\n format: string;\n runId?: string;\n summary: TraceCheckSummary;\n findings: TraceCheckFinding[];\n diagnostics: TraceCheckDiagnostic[];\n ruleExecutions: TraceCheckRuleExecution[];\n}\n\nconst SEVERITY_RANK: Record<TraceCheckSeverity, number> = {\n error: 0,\n warning: 1,\n info: 2,\n};\n\nconst STATUS_RANK: Record<TraceCheckFindingStatus, number> = {\n fail: 0,\n warning: 1,\n pass: 2,\n};\n\nconst CONFIDENCE_RANK: Record<AttributionConfidence, number> = {\n unknown: 0,\n heuristic: 1,\n correlated: 2,\n explicit: 3,\n};\n\nconst DEFAULT_SENSITIVE_KEYS = DEFAULT_CREDENTIAL_SENSITIVE_KEYS;\n\nconst DEFAULT_RAW_CONTENT_KEYS = [\n \"body\",\n \"headers\",\n \"input\",\n \"messages\",\n \"output\",\n \"payload\",\n \"prompt\",\n \"requestbody\",\n \"request_body\",\n \"responsebody\",\n \"response_body\",\n \"rawprompt\",\n \"raw_prompt\",\n \"rawoutput\",\n \"raw_output\",\n \"toolinput\",\n \"tool_input\",\n \"tooloutput\",\n \"tool_output\",\n // Framework / agent metadata that carries user or task text\n \"currenttask\",\n \"current_task\",\n \"task\",\n \"userinput\",\n \"user_input\",\n \"requesttext\",\n \"request_text\",\n \"conversationtext\",\n \"conversation_text\",\n];\n\n/** Parent path segments that hold token/usage metrics, not prompts. */\nconst DEFAULT_SAFE_RAW_CONTENT_PATH_PREFIXES = [\n \"tokenUsage\",\n \"usage\",\n \"tokens\",\n] as const;\n\nconst SAFE_USAGE_LEAF_KEYS = new Set([\n \"input\",\n \"output\",\n \"total\",\n \"cached\",\n \"input_tokens\",\n \"inputtokens\",\n \"output_tokens\",\n \"outputtokens\",\n \"total_tokens\",\n \"totaltokens\",\n \"prompt_tokens\",\n \"prompttokens\",\n \"completion_tokens\",\n \"completiontokens\",\n]);\n\nconst DEFAULT_SECRET_PATTERNS: readonly SafetySecretPattern[] = [\n { id: \"bearer-token\", pattern: /Bearer\\s+[A-Za-z0-9._~+/-]{12,}=*/ },\n { id: \"openai-key\", pattern: /sk-[A-Za-z0-9_-]{16,}/ },\n { id: \"aws-access-key\", pattern: /AKIA[0-9A-Z]{16}/ },\n { id: \"github-token\", pattern: /gh[opsu]_[A-Za-z0-9_]{20,}/ },\n // Keep in sync with packages/redact/src/key-value-secret.ts (KEY_VALUE_SECRET_PATTERN_SOURCE).\n {\n id: \"key-value-secret\",\n pattern:\n /\\b(?:api[_-]?key|internal[_-]?token|access[_-]?token|auth[_-]?token|password|secret|token)=([^\\s\"'\\\\]{8,})/i,\n },\n];\n\ntype EventValueEntry = {\n event: PersistedInspectEvent;\n path: string;\n key?: string;\n value: unknown;\n};\n\nfunction compareStrings(a: string | undefined, b: string | undefined): number {\n return (a ?? \"\").localeCompare(b ?? \"\");\n}\n\nfunction diagnostic(\n code: TraceCheckDiagnosticCode,\n message: string,\n ruleId?: string,\n): TraceCheckDiagnostic {\n return {\n code,\n message,\n severity: \"error\",\n ...(ruleId ? { ruleId } : {}),\n };\n}\n\nfunction emptySummary(): TraceCheckSummary {\n return {\n passed: 0,\n failed: 0,\n warnings: 0,\n errors: 0,\n rulesEvaluated: 0,\n };\n}\n\nfunction errorResult(\n input: TraceCheckInput,\n diagnostics: readonly TraceCheckDiagnostic[],\n selectedRun?: InspectRunTree,\n ruleExecutions: readonly TraceCheckRuleExecution[] = [],\n): TraceCheckResult {\n return {\n ok: false,\n status: \"error\",\n format: input.read.format,\n ...(selectedRun ? { runId: selectedRun.runId } : {}),\n summary: {\n ...emptySummary(),\n errors: diagnostics.filter((item) => item.severity === \"error\").length,\n rulesEvaluated: ruleExecutions.length,\n },\n findings: [],\n diagnostics: [...diagnostics],\n ruleExecutions: [...ruleExecutions],\n };\n}\n\nfunction flattenNodes(nodes: readonly InspectNode[]): InspectNode[] {\n return nodes.flatMap((node) => [node, ...flattenNodes(node.children)]);\n}\n\nfunction buildFacts(input: TraceCheckInput, selectedRun?: InspectRunTree): TraceCheckFacts {\n const scopedRuns = selectedRun ? [selectedRun] : input.read.runs;\n const scopedRunIds = new Set(scopedRuns.map((run) => run.runId));\n const scopedEvents =\n selectedRun === undefined\n ? input.read.events\n : input.read.events.filter((event) => scopedRunIds.has(event.runId));\n const nodes = flattenNodes(scopedRuns.flatMap((run) => run.children));\n const nodesByEventId = new Map<string, InspectNode>();\n const childrenByParentId = new Map<string, InspectNode[]>();\n\n for (const node of nodes) {\n nodesByEventId.set(node.event.eventId, node);\n const parentId = node.event.parentId;\n if (parentId) {\n const children = childrenByParentId.get(parentId) ?? [];\n children.push(node);\n childrenByParentId.set(parentId, children);\n }\n }\n\n const projection = projectLogicalEvents(scopedEvents);\n return {\n format: input.read.format,\n runs: Object.freeze([...input.read.runs]),\n events: Object.freeze([...scopedEvents]),\n logicalEvents: projection.logicalEvents,\n logicalProjectionDiagnostics: projection.diagnostics,\n readerWarnings: Object.freeze([...input.read.warnings]),\n unsupportedFields: Object.freeze([...input.read.unsupportedFields]),\n sourceFiles: Object.freeze([...input.read.sourceFiles]),\n nodesByEventId,\n childrenByParentId,\n rootNodes: Object.freeze(scopedRuns.flatMap((run) => run.children)),\n };\n}\n\nfunction resolveSelectedRun(\n input: TraceCheckInput,\n runId?: string,\n): { run?: InspectRunTree; diagnostics: TraceCheckDiagnostic[] } {\n if (input.selectedRun) {\n if (runId && input.selectedRun.runId !== runId) {\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_INVALID_ARGUMENTS\",\n `Selected run ${input.selectedRun.runId} does not match requested run ${runId}.`,\n ),\n ],\n };\n }\n return { run: input.selectedRun, diagnostics: [] };\n }\n\n if (runId) {\n const run = input.read.runs.find((candidate) => candidate.runId === runId);\n if (!run) {\n return {\n diagnostics: [\n diagnostic(\"AI_CHECK_RUN_SELECTION_REQUIRED\", `Run not found: ${runId}.`),\n ],\n };\n }\n return { run, diagnostics: [] };\n }\n\n if (input.read.runs.length === 1) {\n return { run: input.read.runs[0], diagnostics: [] };\n }\n\n if (input.read.runs.length === 0) {\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n formatProgrammaticDiagnostic(\n \"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED\",\n \"No runs are available for checks.\",\n ),\n ),\n ],\n };\n }\n\n return {\n diagnostics: [\n diagnostic(\n \"AI_CHECK_RUN_SELECTION_REQUIRED\",\n formatProgrammaticDiagnostic(\"AI_TRACE_CONTRACT_RUN_SELECTION_REQUIRED\"),\n ),\n ],\n };\n}\n\nfunction selectRules(\n rules: readonly TraceCheckRule[],\n selectedIds: readonly string[] | undefined,\n): { rules: TraceCheckRule[]; diagnostics: TraceCheckDiagnostic[] } {\n const diagnostics: TraceCheckDiagnostic[] = [];\n const byId = new Map<string, TraceCheckRule>();\n\n for (const rule of rules) {\n if (byId.has(rule.id)) {\n diagnostics.push(\n diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Duplicate trace check rule id: ${rule.id}.`, rule.id),\n );\n continue;\n }\n byId.set(rule.id, rule);\n }\n\n if (selectedIds && selectedIds.length > 0) {\n const selected = new Set(selectedIds);\n for (const id of selected) {\n if (!byId.has(id)) {\n diagnostics.push(\n diagnostic(\"AI_CHECK_INVALID_CONFIG\", `Unknown trace check rule id: ${id}.`, id),\n );\n }\n }\n return {\n rules: [...byId.values()].filter((rule) => selected.has(rule.id)).sort(compareRules),\n diagnostics,\n };\n }\n\n return { rules: [...byId.values()].sort(compareRules), diagnostics };\n}\n\nfunction compareRules(a: TraceCheckRule, b: TraceCheckRule): number {\n return a.id.localeCompare(b.id);\n}\n\nfunction eventTimestamp(\n finding: TraceCheckFinding,\n eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): string {\n const eventId = finding.evidence[0]?.eventId;\n return eventId ? eventById.get(eventId)?.timestamp ?? \"\" : \"\";\n}\n\nfunction compareFindings(\n eventById: ReadonlyMap<string, PersistedInspectEvent>,\n): (a: TraceCheckFinding, b: TraceCheckFinding) => number {\n return (a, b) => {\n if (SEVERITY_RANK[a.severity] !== SEVERITY_RANK[b.severity]) {\n return SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity];\n }\n const byRule = a.ruleId.localeCompare(b.ruleId);\n if (byRule !== 0) return byRule;\n if (STATUS_RANK[a.status] !== STATUS_RANK[b.status]) {\n return STATUS_RANK[a.status] - STATUS_RANK[b.status];\n }\n const byRun = compareStrings(a.evidence[0]?.runId, b.evidence[0]?.runId);\n if (byRun !== 0) return byRun;\n const byTime = eventTimestamp(a, eventById).localeCompare(eventTimestamp(b, eventById));\n if (byTime !== 0) return byTime;\n const byEvent = compareStrings(a.evidence[0]?.eventId, b.evidence[0]?.eventId);\n if (byEvent !== 0) return byEvent;\n return compareStrings(a.evidence[0]?.path, b.evidence[0]?.path);\n };\n}\n\nfunction normalizeFinding(rule: TraceCheckRule, finding: TraceCheckFinding): TraceCheckFinding {\n return {\n ruleId: finding.ruleId || rule.id,\n severity: finding.severity ?? rule.defaultSeverity,\n status: finding.status,\n message: finding.message,\n ...(finding.expected !== undefined ? { expected: finding.expected } : {}),\n ...(finding.actual !== undefined ? { actual: finding.actual } : {}),\n evidence: [...(finding.evidence ?? [])],\n ...(finding.category !== undefined ? { category: finding.category } : {}),\n ...(finding.confidence !== undefined ? { confidence: finding.confidence } : {}),\n ...(finding.detector !== undefined ? { detector: finding.detector } : {}),\n ...(finding.action !== undefined ? { action: finding.action } : {}),\n };\n}\n\nfunction summarize(\n findings: readonly TraceCheckFinding[],\n diagnostics: readonly TraceCheckDiagnostic[],\n rulesEvaluated: number,\n): TraceCheckSummary {\n return {\n passed: findings.filter((finding) => finding.status === \"pass\").length,\n failed: findings.filter(\n (finding) => finding.status === \"fail\" && finding.severity === \"error\",\n ).length,\n warnings: findings.filter(\n (finding) => finding.status === \"warning\" || finding.severity === \"warning\",\n ).length,\n errors: diagnostics.filter((item) => item.severity === \"error\").length,\n rulesEvaluated,\n };\n}\n\nfunction classifyRuleExecution(\n findings: readonly TraceCheckFinding[],\n threw: boolean,\n): TraceCheckRuleExecutionStatus {\n if (threw) return \"error\";\n if (findings.some((finding) => finding.status === \"fail\" && finding.severity === \"error\")) {\n return \"fail\";\n }\n if (\n findings.some(\n (finding) => finding.status === \"warning\" || finding.severity === \"warning\",\n )\n ) {\n return \"warning\";\n }\n return \"pass\";\n}\n\nfunction stringAttr(event: PersistedInspectEvent, keys: readonly string[]): string | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"string\" && value.trim() !== \"\") return value;\n }\n return undefined;\n}\n\n/**\n * Reads a string from `attributes.metadata`. v0.1 traces carry LLM identity\n * (model/provider/finishReason) under nested `metadata`, which the bridge keeps\n * at `attributes.metadata.*` rather than promoting to a top-level attribute the\n * way it promotes tokens to `tokenUsage`. Checks must look there too.\n */\nfunction metadataStringAttr(\n event: PersistedInspectEvent,\n keys: readonly string[],\n): string | undefined {\n const metadata = event.attributes?.metadata;\n if (typeof metadata !== \"object\" || metadata === null || Array.isArray(metadata)) {\n return undefined;\n }\n const record = metadata as Record<string, unknown>;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === \"string\" && value.trim() !== \"\") return value;\n }\n return undefined;\n}\n\nfunction numericAttr(event: PersistedInspectEvent, keys: readonly string[]): number | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n }\n return undefined;\n}\n\nfunction booleanAttr(event: PersistedInspectEvent, keys: readonly string[]): boolean | undefined {\n for (const key of keys) {\n const value = event.attributes?.[key];\n if (typeof value === \"boolean\") return value;\n }\n return undefined;\n}\n\nfunction stripPrefix(name: string, prefixes: readonly string[]): string {\n for (const prefix of prefixes) {\n if (name.startsWith(prefix)) return name.slice(prefix.length);\n }\n return name;\n}\n\nfunction eventEvidence(event: PersistedInspectEvent, path?: string): TraceCheckEvidence {\n return {\n runId: event.runId,\n eventId: event.eventId,\n parentId: event.parentId,\n traceId: event.trace?.traceId,\n spanId: event.trace?.spanId,\n kind: event.kind,\n name: event.name,\n status: event.status,\n ...(path ? { path } : {}),\n };\n}\n\nfunction runEvidence(run: InspectRunTree | undefined): TraceCheckEvidence[] {\n return run ? [{ runId: run.runId, name: run.name, status: run.status }] : [];\n}\n\ninterface SafetyFindingMeta {\n category?: SafetyFindingCategory;\n confidence?: SafetyFindingConfidence;\n detector?: string;\n action?: string;\n severity?: TraceCheckSeverity;\n status?: TraceCheckFindingStatus;\n}\n\nfunction failFinding(\n ruleId: string,\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected?: unknown,\n actual?: unknown,\n meta?: SafetyFindingMeta,\n): TraceCheckFinding {\n return {\n ruleId,\n severity: meta?.severity ?? \"error\",\n status: meta?.status ?? \"fail\",\n message,\n ...(expected !== undefined ? { expected } : {}),\n ...(actual !== undefined ? { actual } : {}),\n evidence: [...evidence],\n ...(meta?.category !== undefined ? { category: meta.category } : {}),\n ...(meta?.confidence !== undefined ? { confidence: meta.confidence } : {}),\n ...(meta?.detector !== undefined ? { detector: meta.detector } : {}),\n ...(meta?.action !== undefined ? { action: meta.action } : {}),\n };\n}\n\nfunction toolName(event: PersistedInspectEvent): string {\n return resolveCanonicalToolName(event);\n}\n\n/**\n * Events for built-in semantic/structure rules (logical projection when present).\n * Safety rules continue to walk raw `context.events`.\n */\nfunction semanticEvents(\n context: TraceCheckContext,\n): readonly PersistedInspectEvent[] {\n return context.logicalEvents ?? context.events;\n}\n\nfunction llmModel(event: PersistedInspectEvent): string | undefined {\n const keys = [\"model\", \"modelId\", \"responseModelId\", \"modelName\", \"model_name\"];\n return (\n stringAttr(event, keys) ??\n metadataStringAttr(event, keys) ??\n stripPrefix(event.name, [\"llm:\", \"generation:\", \"transcription:\", \"speech:\"])\n );\n}\n\nfunction llmProvider(event: PersistedInspectEvent): string | undefined {\n const keys = [\"provider\", \"providerName\", \"provider_name\"];\n return stringAttr(event, keys) ?? metadataStringAttr(event, keys);\n}\n\nfunction llmFinishReason(event: PersistedInspectEvent): string | undefined {\n const keys = [\"finishReason\", \"rawFinishReason\", \"finish_reason\"];\n return stringAttr(event, keys) ?? metadataStringAttr(event, keys);\n}\n\nfunction retryCount(event: PersistedInspectEvent): number | undefined {\n return numericAttr(event, [\"retryCount\", \"retryAttempt\", \"retry_attempt\", \"attempt\"]);\n}\n\nfunction finishedEvents(context: TraceCheckContext, kind?: PersistedInspectEvent[\"kind\"]): PersistedInspectEvent[] {\n return semanticEvents(context).filter(\n (event) =>\n (kind === undefined || event.kind === kind) &&\n event.status !== \"running\",\n );\n}\n\n/**\n * All logical tool invocations, including still-running ones.\n * Used for presence, forbidden, allowed, and invocation-count policy.\n */\nfunction toolInvocationEvents(context: TraceCheckContext): PersistedInspectEvent[] {\n return semanticEvents(context).filter((event) => event.kind === \"TOOL\");\n}\n\nfunction firstIndexByName(events: readonly PersistedInspectEvent[]): Map<string, number> {\n const index = new Map<string, number>();\n for (const [position, event] of events.entries()) {\n const name = toolName(event);\n if (!index.has(name)) index.set(name, position);\n }\n return index;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction eventMap(events: readonly PersistedInspectEvent[]): Map<string, PersistedInspectEvent> {\n return new Map(events.map((event) => [event.eventId, event]));\n}\n\nfunction parseEventTime(value: string | undefined): number | undefined {\n if (!value) return undefined;\n const parsed = Date.parse(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction eventStartMs(event: PersistedInspectEvent): number | undefined {\n return parseEventTime(event.startedAt) ?? parseEventTime(event.timestamp);\n}\n\nfunction eventEndMs(event: PersistedInspectEvent): number | undefined {\n const endedAt = parseEventTime(event.endedAt);\n if (endedAt !== undefined) return endedAt;\n const startedAt = eventStartMs(event);\n if (\n startedAt !== undefined &&\n event.durationMs !== undefined &&\n Number.isFinite(event.durationMs)\n ) {\n return startedAt + event.durationMs;\n }\n return undefined;\n}\n\nfunction sortedStrings(values: readonly string[] | undefined): string[] {\n return [...(values ?? [])].sort((a, b) => a.localeCompare(b));\n}\n\nfunction normalizedKey(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9_]/g, \"\");\n}\n\nfunction lastPathSegment(path: string): string {\n const parts = path.split(\".\");\n return parts[parts.length - 1] ?? path;\n}\n\nfunction valueType(value: unknown): string {\n if (Array.isArray(value)) return \"array\";\n if (value === null) return \"null\";\n return typeof value;\n}\n\nfunction serializedByteLength(value: unknown): number | undefined {\n try {\n return Buffer.byteLength(JSON.stringify(value), \"utf-8\");\n } catch {\n return undefined;\n }\n}\n\nfunction pushValueEntries(\n entries: EventValueEntry[],\n event: PersistedInspectEvent,\n value: unknown,\n path: string,\n key?: string,\n depth = 0,\n): void {\n entries.push({ event, path, key, value });\n if (depth >= 8) return;\n\n if (Array.isArray(value)) {\n for (const [index, item] of value.entries()) {\n pushValueEntries(entries, event, item, `${path}.${index}`, String(index), depth + 1);\n }\n return;\n }\n\n if (!isRecord(value)) return;\n for (const nestedKey of Object.keys(value).sort((a, b) => a.localeCompare(b))) {\n pushValueEntries(\n entries,\n event,\n value[nestedKey],\n `${path}.${nestedKey}`,\n nestedKey,\n depth + 1,\n );\n }\n}\n\nfunction eventValueEntries(\n event: PersistedInspectEvent,\n options: { includeSummaries?: boolean; includeError?: boolean } = {},\n): EventValueEntry[] {\n const entries: EventValueEntry[] = [];\n if (event.attributes !== undefined) {\n pushValueEntries(entries, event, event.attributes, \"attributes\", \"attributes\");\n }\n if (options.includeSummaries) {\n if (event.inputSummary !== undefined) {\n pushValueEntries(entries, event, event.inputSummary, \"inputSummary\", \"inputSummary\");\n }\n if (event.outputSummary !== undefined) {\n pushValueEntries(entries, event, event.outputSummary, \"outputSummary\", \"outputSummary\");\n }\n }\n if (options.includeError && event.error !== undefined) {\n pushValueEntries(entries, event, event.error, \"error\", \"error\");\n }\n return entries;\n}\n\nfunction limitFindings(\n findings: TraceCheckFinding[],\n maxFindings: number | undefined,\n): TraceCheckFinding[] {\n if (maxFindings === undefined || findings.length <= maxFindings) return findings;\n return findings.slice(0, Math.max(0, maxFindings));\n}\n\nfunction hasRedactionMarker(value: string, markers: readonly string[]): boolean {\n return markers.some((marker) => value.includes(marker)) || /^\\[HASH:[A-Za-z0-9_-]+\\]$/.test(value);\n}\n\nfunction isSensitiveKey(key: string | undefined, sensitiveKeys: readonly string[]): boolean {\n return isCredentialSensitiveKey(key, sensitiveKeys);\n}\n\nfunction isRawContentKey(key: string | undefined, forbiddenKeys: readonly string[]): boolean {\n if (!key) return false;\n const normalized = normalizedKey(key);\n return forbiddenKeys.some((forbidden) => normalized === normalizedKey(forbidden));\n}\n\n/**\n * True when the entry is under a metrics path (tokenUsage / usage) whose leaf\n * is a count field — not a raw prompt/output payload.\n */\nfunction isSafeRawContentMetricPath(\n path: string,\n key: string | undefined,\n safePathPrefixes: readonly string[],\n): boolean {\n const leaf = normalizedKey(key ?? lastPathSegment(path));\n if (!SAFE_USAGE_LEAF_KEYS.has(leaf)) return false;\n\n const parts = path.split(\".\").filter(Boolean);\n if (parts.length < 2) return false;\n const parent = parts[parts.length - 2] ?? \"\";\n const parentNorm = normalizedKey(parent);\n return safePathPrefixes.some((prefix) => parentNorm === normalizedKey(prefix));\n}\n\nfunction isRawContentPath(\n path: string,\n key: string | undefined,\n forbiddenKeys: readonly string[],\n safePathPrefixes: readonly string[],\n): boolean {\n if (isSafeRawContentMetricPath(path, key, safePathPrefixes)) return false;\n return isRawContentKey(key ?? lastPathSegment(path), forbiddenKeys);\n}\n\nfunction parentMarkedUnresolved(event: PersistedInspectEvent): boolean {\n if (\n booleanAttr(event, [\n \"parentUnresolved\",\n \"unresolvedParent\",\n \"relationshipUnresolved\",\n \"unresolvedRelationship\",\n ]) === true\n ) {\n return true;\n }\n const resolution = stringAttr(event, [\n \"parentResolution\",\n \"relationshipResolution\",\n \"relationshipStatus\",\n ]);\n return resolution === \"unresolved\" || resolution === \"missing-parent\";\n}\n\nfunction signalName(\n event: PersistedInspectEvent,\n attributeKeys: readonly string[],\n prefixes: readonly string[],\n): string {\n return stringAttr(event, attributeKeys) ?? stripPrefix(event.name, prefixes);\n}\n\nfunction guardrailEvents(context: TraceCheckContext): PersistedInspectEvent[] {\n return finishedEvents(context).filter((event) => {\n const name = event.name.toLowerCase();\n if (name.startsWith(\"guardrail:\") || name.includes(\".guardrail.\")) return true;\n return stringAttr(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"]) !== undefined;\n });\n}\n\nfunction retryValue(event: PersistedInspectEvent): number {\n return retryCount(event) ?? 0;\n}\n\nfunction eventDurationMs(event: PersistedInspectEvent): number | undefined {\n if (event.durationMs !== undefined) return event.durationMs;\n const start = eventStartMs(event);\n const end = eventEndMs(event);\n return start !== undefined && end !== undefined && end >= start ? end - start : undefined;\n}\n\nfunction treeShape(nodes: readonly InspectNode[]): string[] {\n const lines: string[] = [];\n const visit = (node: InspectNode, path: string) => {\n lines.push(`${path}:${node.event.kind}:${node.event.name}:${node.event.status ?? \"unknown\"}`);\n node.children.forEach((child, index) => visit(child, `${path}.${index}`));\n };\n nodes.forEach((node, index) => visit(node, String(index)));\n return lines;\n}\n\nfunction statusShape(context: TraceCheckContext): string[] {\n return semanticEvents(context)\n .map((event) => `${event.kind}:${event.name}:${event.status ?? \"unknown\"}`)\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction toolShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"TOOL\").map((event) =>\n [\n toolName(event),\n event.status ?? \"unknown\",\n retryValue(event),\n eventDurationMs(event) ?? \"unknown\",\n ].join(\":\"),\n );\n}\n\nfunction llmShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"LLM\").map((event) =>\n [\n llmProvider(event) ?? \"unknown\",\n llmModel(event) ?? \"unknown\",\n llmFinishReason(event) ?? \"unknown\",\n event.tokenUsage?.input ?? 0,\n event.tokenUsage?.output ?? 0,\n event.tokenUsage?.total ?? 0,\n event.tokenUsage?.cached ?? 0,\n ].join(\":\"),\n );\n}\n\nfunction errorShape(context: TraceCheckContext): string[] {\n return semanticEvents(context)\n .filter((event) => event.status === \"error\" || event.error !== undefined)\n .map((event) =>\n [\n event.kind,\n event.name,\n event.error?.name ?? \"Error\",\n event.error?.code ?? \"unknown\",\n ].join(\":\"),\n )\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction retrievalShape(context: TraceCheckContext): string[] {\n return finishedEvents(context, \"RETRIEVER\")\n .map((event) =>\n signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n )\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction guardrailShape(context: TraceCheckContext): string[] {\n return guardrailEvents(context)\n .map((event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]))\n .sort((a, b) => a.localeCompare(b));\n}\n\nfunction firstEvidenceForKind(\n context: TraceCheckContext,\n kind: PersistedInspectEvent[\"kind\"],\n path: string,\n): TraceCheckEvidence[] {\n const event = semanticEvents(context).find((candidate) => candidate.kind === kind);\n return event ? [eventEvidence(event, path)] : runEvidence(context.selectedRun);\n}\n\nfunction baselineDiffFinding(\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected: unknown,\n actual: unknown,\n): TraceCheckFinding {\n return failFinding(\"baseline.regression\", message, evidence, expected, actual);\n}\n\n/**\n * Create the experimental built-in run status rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRunStatusRule(options: RunStatusRuleOptions = {}): TraceCheckRule {\n const expected = options.expected ?? \"ok\";\n const allowIncomplete = options.allowIncomplete === true;\n return {\n id: \"run.status\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const actual = context.selectedRun?.status ?? \"unknown\";\n if (actual !== expected) {\n findings.push(\n failFinding(\n \"run.status\",\n `Run status ${actual} did not match expected ${expected}.`,\n runEvidence(context.selectedRun),\n expected,\n actual,\n ),\n );\n }\n if (!allowIncomplete) {\n const running = semanticEvents(context).filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.status\",\n \"Run contains incomplete running events.\",\n running.map((event) => eventEvidence(event)),\n \"no running events\",\n running.length,\n ),\n );\n }\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in run duration rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRunDurationRule(options: RunDurationRuleOptions): TraceCheckRule {\n return {\n id: \"run.duration\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const actual = context.selectedRun?.durationMs;\n if (actual === undefined || actual <= options.maxDurationMs) return [];\n return [\n failFinding(\n \"run.duration\",\n `Run duration ${actual}ms exceeded ${options.maxDurationMs}ms.`,\n runEvidence(context.selectedRun),\n { maxDurationMs: options.maxDurationMs },\n actual,\n ),\n ];\n },\n };\n}\n\n/**\n * Fail when any step duration exceeds the configured maximum.\n */\nexport function createMaxStepDurationRule(options: MaxStepDurationRuleOptions): TraceCheckRule {\n return {\n id: \"run.maxStepDuration\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const over = semanticEvents(context).filter((event) => {\n const duration = eventDurationMs(event);\n return duration !== undefined && duration > options.maxDurationMs;\n });\n if (over.length === 0) return [];\n return [\n failFinding(\n \"run.maxStepDuration\",\n `${over.length} step(s) exceeded max duration ${options.maxDurationMs}ms.`,\n over.map((event) => eventEvidence(event, \"durationMs\")),\n { maxDurationMs: options.maxDurationMs },\n over.map((event) => ({\n eventId: event.eventId,\n name: event.name,\n durationMs: eventDurationMs(event),\n })),\n ),\n ];\n },\n };\n}\n\n/**\n * Detect stalled runs: running events and optionally started-but-unended events.\n */\nexport function createStallDetectionRule(\n options: StallDetectionRuleOptions = {},\n): TraceCheckRule {\n const requireEndedAt = options.requireEndedAt === true;\n return {\n id: \"run.stall\",\n category: \"run\",\n defaultSeverity: \"warning\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const running = semanticEvents(context).filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.stall\",\n `Found ${running.length} event(s) still running (possible stall).`,\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n if (requireEndedAt) {\n const incomplete = semanticEvents(context).filter(\n (event) =>\n event.startedAt !== undefined &&\n event.endedAt === undefined &&\n event.status !== \"running\",\n );\n if (incomplete.length > 0) {\n findings.push(\n failFinding(\n \"run.stall\",\n `Found ${incomplete.length} started event(s) without endedAt.`,\n incomplete.map((event) => eventEvidence(event, \"endedAt\")),\n \"endedAt for started events\",\n incomplete.length,\n ),\n );\n }\n }\n return findings;\n },\n };\n}\n\n/**\n * Require a completed run with no running events.\n */\nexport function createRequireCompletedRule(): TraceCheckRule {\n return {\n id: \"run.requireCompleted\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const runStatus = context.selectedRun?.status;\n if (runStatus === \"running\") {\n findings.push(\n failFinding(\n \"run.requireCompleted\",\n \"Run is still running.\",\n runEvidence(context.selectedRun),\n \"completed run\",\n runStatus,\n ),\n );\n }\n const running = semanticEvents(context).filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"run.requireCompleted\",\n `Run has ${running.length} incomplete running event(s).`,\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in event count rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRunEventCountRule(options: RunEventCountRuleOptions): TraceCheckRule {\n return {\n id: \"run.eventCount\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const count = semanticEvents(context).filter(\n (event) => options.kind === undefined || event.kind === options.kind,\n ).length;\n const findings: TraceCheckFinding[] = [];\n if (options.min !== undefined && count < options.min) {\n findings.push(\n failFinding(\n \"run.eventCount\",\n `Event count ${count} was below minimum ${options.min}.`,\n runEvidence(context.selectedRun),\n { kind: options.kind, min: options.min },\n count,\n ),\n );\n }\n if (options.max !== undefined && count > options.max) {\n findings.push(\n failFinding(\n \"run.eventCount\",\n `Event count ${count} exceeded maximum ${options.max}.`,\n runEvidence(context.selectedRun),\n { kind: options.kind, max: options.max },\n count,\n ),\n );\n }\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in run depth rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRunDepthRule(options: RunDepthRuleOptions): TraceCheckRule {\n return {\n id: \"run.depth\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const nodes = [...context.nodesByEventId.values()];\n const maxDepth = nodes.reduce((max, node) => Math.max(max, node.depth), 0);\n if (maxDepth <= options.maxDepth) return [];\n const deepest = nodes.filter((node) => node.depth === maxDepth);\n return [\n failFinding(\n \"run.depth\",\n `Run depth ${maxDepth} exceeded ${options.maxDepth}.`,\n deepest.map((node) => ({\n runId: node.event.runId,\n eventId: node.event.eventId,\n parentId: node.event.parentId,\n kind: node.event.kind,\n name: node.event.name,\n status: node.event.status,\n })),\n { maxDepth: options.maxDepth },\n maxDepth,\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in tool usage rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createToolUsageRule(options: ToolUsageRuleOptions): TraceCheckRule {\n return {\n id: \"tool.usage\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n // Policy rules observe invocation, including unfinished/running tools.\n const tools = toolInvocationEvents(context);\n const names = tools.map(toolName);\n const nameSet = new Set(names);\n const findings: TraceCheckFinding[] = [];\n\n for (const required of options.required ?? []) {\n if (!nameSet.has(required)) {\n findings.push(\n failFinding(\"tool.usage\", `Required tool ${required} did not appear.`, runEvidence(context.selectedRun), required, names),\n );\n }\n }\n\n const forbidden = new Set(options.forbidden ?? []);\n // Empty allowlist means \"no restriction\", not \"reject everything\".\n const allowed = options.allowed?.length ? new Set(options.allowed) : undefined;\n for (const event of tools) {\n const name = toolName(event);\n if (forbidden.has(name)) {\n findings.push(\n failFinding(\"tool.usage\", `Forbidden tool ${name} appeared.`, [eventEvidence(event)], \"tool absent\", name),\n );\n }\n if (allowed && !allowed.has(name)) {\n findings.push(\n failFinding(\"tool.usage\", `Tool ${name} is not in the allowed tool set.`, [eventEvidence(event)], [...allowed].sort(), name),\n );\n }\n }\n\n if (options.minCount !== undefined && tools.length < options.minCount) {\n findings.push(\n failFinding(\"tool.usage\", `Tool count ${tools.length} was below minimum ${options.minCount}.`, runEvidence(context.selectedRun), { minCount: options.minCount }, tools.length),\n );\n }\n if (options.maxCount !== undefined && tools.length > options.maxCount) {\n findings.push(\n failFinding(\"tool.usage\", `Tool count ${tools.length} exceeded maximum ${options.maxCount}.`, tools.map((event) => eventEvidence(event)), { maxCount: options.maxCount }, tools.length),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in tool ordering rule.\n *\n * Low-level default: first-occurrence start/encounter order among finished\n * tool events. Missing endpoints yield no finding (compositional). TraceContract\n * `requiredOrder` additionally requires presence of listed tools.\n *\n * When order passes by encounter order but intervals overlap, emits a\n * non-failing `tool.order.overlap` warning (not causal happens-before).\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createToolOrderingRule(options: ToolOrderingRuleOptions): TraceCheckRule {\n const ruleId = options.id ?? \"tool.order\";\n const mode = options.mode ?? \"first-occurrence\";\n return {\n id: ruleId,\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const index = firstIndexByName(tools);\n const beforeIndex = index.get(options.before);\n const afterIndex = index.get(options.after);\n if (beforeIndex === undefined || afterIndex === undefined) {\n return [];\n }\n\n if (mode === \"first-occurrence\" && beforeIndex >= afterIndex) {\n return [\n failFinding(\n ruleId,\n `Tool ${options.before} must appear before ${options.after}.`,\n [eventEvidence(tools[beforeIndex]!), eventEvidence(tools[afterIndex]!)],\n { before: options.before, after: options.after },\n tools.map(toolName),\n ),\n ];\n }\n\n const beforeEvent = tools[beforeIndex]!;\n const afterEvent = tools[afterIndex]!;\n const beforeEnd = eventEndMs(beforeEvent);\n const afterStart = eventStartMs(afterEvent);\n\n if (mode === \"happens-before\") {\n const expected = {\n before: options.before,\n after: options.after,\n mode,\n relation: \"before.end <= after.start\",\n };\n if (options.before === options.after) {\n return [\n failFinding(\n ruleId,\n `Tool ${options.before} cannot causally happen before itself.`,\n [eventEvidence(beforeEvent)],\n expected,\n { code: \"tool.order.same-tool\" },\n ),\n ];\n }\n if (beforeEnd === undefined || afterStart === undefined) {\n return [\n failFinding(\n ruleId,\n `Tool order ${options.before} before ${options.after} could not establish causal timing.`,\n [eventEvidence(beforeEvent), eventEvidence(afterEvent)],\n expected,\n {\n code: \"tool.order.interval-unresolved\",\n beforeEndResolved: beforeEnd !== undefined,\n afterStartResolved: afterStart !== undefined,\n },\n ),\n ];\n }\n if (beforeEnd > afterStart) {\n return [\n failFinding(\n ruleId,\n `Tool ${options.before} must finish before ${options.after} starts.`,\n [eventEvidence(beforeEvent), eventEvidence(afterEvent)],\n expected,\n {\n beforeEndedAt: new Date(beforeEnd).toISOString(),\n afterStartedAt: new Date(afterStart).toISOString(),\n },\n ),\n ];\n }\n return [];\n }\n\n if (mode === \"all-occurrences\") {\n const beforeEvents = tools.filter((event) => toolName(event) === options.before);\n const afterEvents = tools.filter((event) => toolName(event) === options.after);\n const expected = {\n before: options.before,\n after: options.after,\n mode,\n relation: \"max(before.end) <= min(after.start)\",\n };\n if (options.before === options.after) {\n return [\n failFinding(\n ruleId,\n `Tool ${options.before} cannot causally happen before itself.`,\n [eventEvidence(beforeEvent)],\n expected,\n { code: \"tool.order.same-tool\" },\n ),\n ];\n }\n\n let latestBefore: { event: PersistedInspectEvent; end: number } | undefined;\n let earliestAfter: { event: PersistedInspectEvent; start: number } | undefined;\n let missingBeforeEnds = 0;\n let missingAfterStarts = 0;\n let firstMissingBefore: PersistedInspectEvent | undefined;\n let firstMissingAfter: PersistedInspectEvent | undefined;\n\n for (const event of beforeEvents) {\n const end = eventEndMs(event);\n if (end === undefined) {\n missingBeforeEnds += 1;\n firstMissingBefore ??= event;\n } else if (latestBefore === undefined || end > latestBefore.end) {\n latestBefore = { event, end };\n }\n }\n for (const event of afterEvents) {\n const start = eventStartMs(event);\n if (start === undefined) {\n missingAfterStarts += 1;\n firstMissingAfter ??= event;\n } else if (earliestAfter === undefined || start < earliestAfter.start) {\n earliestAfter = { event, start };\n }\n }\n\n if (\n missingBeforeEnds > 0 ||\n missingAfterStarts > 0 ||\n latestBefore === undefined ||\n earliestAfter === undefined\n ) {\n return [\n failFinding(\n ruleId,\n `Tool order ${options.before} before ${options.after} could not establish all causal intervals.`,\n [firstMissingBefore, firstMissingAfter]\n .filter((event): event is PersistedInspectEvent => event !== undefined)\n .map((event) => eventEvidence(event)),\n expected,\n {\n code: \"tool.order.interval-unresolved\",\n missingBeforeEnds,\n missingAfterStarts,\n },\n ),\n ];\n }\n if (latestBefore.end > earliestAfter.start) {\n return [\n failFinding(\n ruleId,\n `Every ${options.before} tool call must finish before any ${options.after} tool call starts.`,\n [eventEvidence(latestBefore.event), eventEvidence(earliestAfter.event)],\n expected,\n {\n latestBeforeEndedAt: new Date(latestBefore.end).toISOString(),\n earliestAfterStartedAt: new Date(earliestAfter.start).toISOString(),\n },\n ),\n ];\n }\n return [];\n }\n\n if (\n beforeEnd !== undefined &&\n afterStart !== undefined &&\n beforeEnd > afterStart\n ) {\n return [\n {\n ruleId,\n severity: \"warning\",\n status: \"warning\",\n message:\n `Tool order ${options.before} before ${options.after} satisfied start/encounter order, ` +\n `but intervals overlap so causal completion before the next tool was not established.`,\n expected: { before: options.before, after: options.after, mode: \"first-occurrence\" },\n actual: {\n code: \"tool.order.overlap\",\n beforeEndedAt: beforeEvent.endedAt,\n afterStartedAt: afterEvent.startedAt ?? afterEvent.timestamp,\n },\n evidence: [eventEvidence(beforeEvent), eventEvidence(afterEvent)],\n },\n ];\n }\n\n return [];\n },\n };\n}\n\n/**\n * Create the experimental built-in tool failure/retry rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createToolFailureRule(options: ToolFailureRuleOptions): TraceCheckRule {\n return {\n id: \"tool.failures\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = finishedEvents(context, \"TOOL\");\n const failures = tools.filter((event) => event.status === \"error\");\n const retries = tools\n .map((event) => ({ event, count: retryCount(event) }))\n .filter((item): item is { event: PersistedInspectEvent; count: number } => item.count !== undefined);\n const findings: TraceCheckFinding[] = [];\n\n if (options.maxFailures !== undefined && failures.length > options.maxFailures) {\n findings.push(\n failFinding(\n \"tool.failures\",\n `Tool failure count ${failures.length} exceeded ${options.maxFailures}.`,\n failures.map((event) => eventEvidence(event)),\n { maxFailures: options.maxFailures },\n failures.length,\n ),\n );\n }\n\n if (options.maxRetries !== undefined) {\n const excessiveRetries = retries.filter((item) => item.count > options.maxRetries!);\n if (excessiveRetries.length > 0) {\n findings.push(\n failFinding(\n \"tool.failures\",\n `Tool retry count exceeded ${options.maxRetries}.`,\n excessiveRetries.map((item) => eventEvidence(item.event, \"attributes.retryCount\")),\n { maxRetries: options.maxRetries },\n excessiveRetries.map((item) => ({ tool: toolName(item.event), retries: item.count })),\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in LLM usage rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createLlmUsageRule(options: LlmUsageRuleOptions): TraceCheckRule {\n return {\n id: \"llm.usage\",\n category: \"llm\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const llms = finishedEvents(context, \"LLM\");\n const findings: TraceCheckFinding[] = [];\n // An empty allowlist means \"no restriction\", not \"reject everything\".\n // Callers (CLI --max-total-tokens with no --allowed-model, config, or\n // contract) may pass [], and an empty array is truthy, so guard on length.\n const allowedModels = options.allowedModels?.length ? new Set(options.allowedModels) : undefined;\n const allowedProviders = options.allowedProviders?.length ? new Set(options.allowedProviders) : undefined;\n const finishReasons = options.finishReasons?.length ? new Set(options.finishReasons) : undefined;\n\n if (options.maxCalls !== undefined && llms.length > options.maxCalls) {\n findings.push(\n failFinding(\n \"llm.usage\",\n `LLM call count ${llms.length} exceeded ${options.maxCalls}.`,\n llms.map((event) => eventEvidence(event)),\n { maxCalls: options.maxCalls },\n llms.length,\n ),\n );\n }\n\n for (const event of llms) {\n const model = llmModel(event);\n const provider = llmProvider(event);\n const finishReason = llmFinishReason(event);\n if (allowedModels && (!model || !allowedModels.has(model))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM model ${model ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.model\")], [...allowedModels].sort(), model ?? \"unknown\"),\n );\n }\n if (allowedProviders && (!provider || !allowedProviders.has(provider))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM provider ${provider ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.provider\")], [...allowedProviders].sort(), provider ?? \"unknown\"),\n );\n }\n if (finishReasons && (!finishReason || !finishReasons.has(finishReason))) {\n findings.push(\n failFinding(\"llm.usage\", `LLM finish reason ${finishReason ?? \"unknown\"} is not allowed.`, [eventEvidence(event, \"attributes.finishReason\")], [...finishReasons].sort(), finishReason ?? \"unknown\"),\n );\n }\n }\n\n const tokenTotals = llms.reduce(\n (totals, event) => ({\n input: totals.input + (event.tokenUsage?.input ?? 0),\n output: totals.output + (event.tokenUsage?.output ?? 0),\n total: totals.total + (event.tokenUsage?.total ?? 0),\n cached: totals.cached + (event.tokenUsage?.cached ?? 0),\n }),\n { input: 0, output: 0, total: 0, cached: 0 },\n );\n const tokenLimits = [\n [\"input\", options.maxInputTokens],\n [\"output\", options.maxOutputTokens],\n [\"total\", options.maxTotalTokens],\n [\"cached\", options.maxCachedTokens],\n ] as const;\n for (const [key, limit] of tokenLimits) {\n if (limit !== undefined && tokenTotals[key] > limit) {\n findings.push(\n failFinding(\n \"llm.usage\",\n `LLM ${key} token count ${tokenTotals[key]} exceeded ${limit}.`,\n llms.map((event) => eventEvidence(event, `tokenUsage.${key}`)),\n { [`max${key[0]!.toUpperCase()}${key.slice(1)}Tokens`]: limit },\n tokenTotals[key],\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure incomplete rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureIncompleteRule(\n options: StructureIncompleteRuleOptions = {},\n): TraceCheckRule {\n return {\n id: \"structure.incomplete\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n if (!options.allowRunning) {\n const running = semanticEvents(context).filter((event) => event.status === \"running\");\n if (running.length > 0) {\n findings.push(\n failFinding(\n \"structure.incomplete\",\n \"Trace contains incomplete running events.\",\n running.map((event) => eventEvidence(event, \"status\")),\n \"no running events\",\n running.length,\n ),\n );\n }\n }\n\n if (options.requireEndedAtForStarted) {\n const missingEndedAt = semanticEvents(context).filter(\n (event) =>\n event.startedAt !== undefined &&\n event.endedAt === undefined &&\n event.status !== \"running\",\n );\n if (missingEndedAt.length > 0) {\n findings.push(\n failFinding(\n \"structure.incomplete\",\n \"Trace contains events with startedAt but no endedAt.\",\n missingEndedAt.map((event) => eventEvidence(event, \"endedAt\")),\n \"endedAt for started events\",\n missingEndedAt.length,\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure orphan rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureOrphanRule(\n options: StructureOrphanRuleOptions = {},\n): TraceCheckRule {\n const allowMarkedUnresolved = options.allowMarkedUnresolved ?? true;\n return {\n id: \"structure.orphan\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(semanticEvents(context));\n const orphans = semanticEvents(context).filter((event) => {\n if (!event.parentId || byId.has(event.parentId)) return false;\n return !(allowMarkedUnresolved && parentMarkedUnresolved(event));\n });\n if (orphans.length === 0) return [];\n return [\n failFinding(\n \"structure.orphan\",\n \"Trace contains events whose parentId is not present in the selected run.\",\n orphans.map((event) => eventEvidence(event, \"parentId\")),\n \"parentId resolves to an event in the selected run\",\n orphans.length,\n ),\n ];\n },\n };\n}\n\n/**\n * Create the experimental built-in structure cycle rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureCycleRule(): TraceCheckRule {\n return {\n id: \"structure.cycle\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(semanticEvents(context));\n const seenCycles = new Set<string>();\n const findings: TraceCheckFinding[] = [];\n\n for (const event of [...semanticEvents(context)].sort((a, b) => a.eventId.localeCompare(b.eventId))) {\n const path: PersistedInspectEvent[] = [];\n const seenAt = new Map<string, number>();\n let current: PersistedInspectEvent | undefined = event;\n\n while (current) {\n const existing = seenAt.get(current.eventId);\n if (existing !== undefined) {\n const cycle = path.slice(existing);\n const key = cycle.map((item) => item.eventId).sort().join(\"\\0\");\n if (!seenCycles.has(key)) {\n seenCycles.add(key);\n findings.push(\n failFinding(\n \"structure.cycle\",\n formatProgrammaticDiagnostic(\"AI_TRACE_RELATIONSHIP_CYCLE\"),\n cycle.map((item) => eventEvidence(item, \"parentId\")),\n \"acyclic parentId graph\",\n cycle.map((item) => item.eventId).sort(),\n ),\n );\n }\n break;\n }\n seenAt.set(current.eventId, path.length);\n path.push(current);\n current = current.parentId ? byId.get(current.parentId) : undefined;\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure relationship rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureRelationshipRule(\n options: StructureRelationshipRuleOptions = {},\n): TraceCheckRule {\n return {\n id: \"structure.relationship\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const byId = eventMap(semanticEvents(context));\n const findings: TraceCheckFinding[] = [];\n const minConfidence = options.minConfidence;\n\n for (const event of semanticEvents(context)) {\n if (\n minConfidence &&\n CONFIDENCE_RANK[event.confidence] < CONFIDENCE_RANK[minConfidence]\n ) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n `Event confidence ${event.confidence} is below ${minConfidence}.`,\n [eventEvidence(event, \"confidence\")],\n { minConfidence },\n event.confidence,\n ),\n );\n }\n\n if (!event.parentId) continue;\n if (event.parentId === event.eventId) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Event parentId points to itself.\",\n [eventEvidence(event, \"parentId\")],\n \"parentId references a distinct event\",\n \"self\",\n ),\n );\n continue;\n }\n\n const parent = byId.get(event.parentId);\n if (!parent) continue;\n\n if (options.requireParentBeforeChild) {\n const parentTime = eventStartMs(parent);\n const childTime = eventStartMs(event);\n if (\n parentTime !== undefined &&\n childTime !== undefined &&\n parentTime > childTime\n ) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Parent event starts after child event.\",\n [eventEvidence(parent), eventEvidence(event, \"parentId\")],\n \"parent start <= child start\",\n { parentEventId: parent.eventId, childEventId: event.eventId },\n ),\n );\n }\n }\n\n if (options.requireTraceParentSpan && parent.trace?.spanId && event.trace) {\n const actual = event.trace.parentSpanId;\n if (actual !== parent.trace.spanId) {\n findings.push(\n failFinding(\n \"structure.relationship\",\n \"Trace parentSpanId does not match parent spanId.\",\n [eventEvidence(event, \"trace.parentSpanId\")],\n { parentSpanId: parent.trace.spanId },\n actual ?? \"missing\",\n ),\n );\n }\n }\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in structure parallel-width rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createStructureParallelWidthRule(\n options: StructureParallelWidthRuleOptions,\n): TraceCheckRule {\n return {\n id: \"structure.parallelWidth\",\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const byId = eventMap(semanticEvents(context));\n\n if (options.maxChildren !== undefined) {\n for (const [parentId, children] of context.childrenByParentId.entries()) {\n if (children.length <= options.maxChildren) continue;\n const parent = byId.get(parentId);\n findings.push(\n failFinding(\n \"structure.parallelWidth\",\n `Parent ${parentId} has ${children.length} children, exceeding ${options.maxChildren}.`,\n [\n ...(parent ? [eventEvidence(parent)] : [{ runId: context.selectedRun?.runId, eventId: parentId }]),\n ...children.map((child) => ({\n runId: child.event.runId,\n eventId: child.event.eventId,\n parentId: child.event.parentId,\n kind: child.event.kind,\n name: child.event.name,\n status: child.event.status,\n })),\n ],\n { maxChildren: options.maxChildren },\n children.length,\n ),\n );\n }\n }\n\n if (options.maxConcurrent !== undefined) {\n const intervals = semanticEvents(context)\n .map((event) => ({ event, start: eventStartMs(event), end: eventEndMs(event) }))\n .filter(\n (item): item is { event: PersistedInspectEvent; start: number; end: number } =>\n item.start !== undefined && item.end !== undefined && item.end > item.start,\n );\n const points = intervals.flatMap((item) => [\n { time: item.start, delta: 1, event: item.event },\n { time: item.end, delta: -1, event: item.event },\n ]);\n points.sort((a, b) => {\n const byTime = a.time - b.time;\n if (byTime !== 0) return byTime;\n const byDelta = a.delta - b.delta;\n if (byDelta !== 0) return byDelta;\n return a.event.eventId.localeCompare(b.event.eventId);\n });\n\n const active = new Map<string, PersistedInspectEvent>();\n let maxActive: PersistedInspectEvent[] = [];\n for (const point of points) {\n if (point.delta > 0) {\n active.set(point.event.eventId, point.event);\n if (active.size > maxActive.length) {\n maxActive = [...active.values()].sort((a, b) => a.eventId.localeCompare(b.eventId));\n }\n } else {\n active.delete(point.event.eventId);\n }\n }\n\n if (maxActive.length > options.maxConcurrent) {\n findings.push(\n failFinding(\n \"structure.parallelWidth\",\n `Concurrent event width ${maxActive.length} exceeded ${options.maxConcurrent}.`,\n maxActive.map((event) => eventEvidence(event)),\n { maxConcurrent: options.maxConcurrent },\n maxActive.length,\n ),\n );\n }\n }\n\n return findings;\n },\n };\n}\n\nfunction createSignalRule(\n ruleId: \"structure.retrieval\" | \"structure.guardrail\" | \"structure.decision\",\n label: string,\n options: TraceSignalRuleOptions,\n selectEvents: (context: TraceCheckContext) => PersistedInspectEvent[],\n nameForEvent: (event: PersistedInspectEvent) => string,\n): TraceCheckRule {\n return {\n id: ruleId,\n category: \"structure\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const events = selectEvents(context);\n const names = events.map(nameForEvent);\n const nameSet = new Set(names);\n const findings: TraceCheckFinding[] = [];\n\n for (const required of sortedStrings(options.required)) {\n if (!nameSet.has(required)) {\n findings.push(\n failFinding(\n ruleId,\n `Required ${label} ${required} did not appear.`,\n runEvidence(context.selectedRun),\n required,\n names,\n ),\n );\n }\n }\n\n const forbidden = new Set(options.forbidden ?? []);\n // Empty allowlist means \"no restriction\", not \"reject everything\".\n const allowed = options.allowed?.length ? new Set(options.allowed) : undefined;\n for (const event of events) {\n const name = nameForEvent(event);\n if (forbidden.has(name)) {\n findings.push(\n failFinding(\n ruleId,\n `Forbidden ${label} ${name} appeared.`,\n [eventEvidence(event)],\n `${label} absent`,\n name,\n ),\n );\n }\n if (allowed && !allowed.has(name)) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} ${name} is not in the allowed set.`,\n [eventEvidence(event)],\n [...allowed].sort(),\n name,\n ),\n );\n }\n }\n\n if (options.minCount !== undefined && events.length < options.minCount) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} was below minimum ${options.minCount}.`,\n runEvidence(context.selectedRun),\n { minCount: options.minCount },\n events.length,\n ),\n );\n }\n if (options.maxCount !== undefined && events.length > options.maxCount) {\n findings.push(\n failFinding(\n ruleId,\n `${label[0]!.toUpperCase()}${label.slice(1)} count ${events.length} exceeded maximum ${options.maxCount}.`,\n events.map((event) => eventEvidence(event)),\n { maxCount: options.maxCount },\n events.length,\n ),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Create the experimental built-in retrieval signal rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createRetrievalRule(options: RetrievalRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.retrieval\",\n \"retrieval\",\n options,\n (context) => finishedEvents(context, \"RETRIEVER\"),\n (event) => signalName(event, [\"retrievalName\", \"retrieverName\", \"retriever\"], [\"retriever:\", \"retrieval:\"]),\n );\n}\n\n/**\n * Create the experimental built-in guardrail signal rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createGuardrailRule(options: GuardrailRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.guardrail\",\n \"guardrail\",\n options,\n guardrailEvents,\n (event) => signalName(event, [\"guardrailName\", \"guardrail\", \"guardrailId\"], [\"guardrail:\"]),\n );\n}\n\n/**\n * Create the experimental built-in decision signal rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createDecisionRule(options: DecisionRuleOptions): TraceCheckRule {\n return createSignalRule(\n \"structure.decision\",\n \"decision\",\n options,\n (context) => finishedEvents(context, \"DECISION\"),\n (event) => signalName(event, [\"decisionName\", \"decision\", \"decisionId\"], [\"decision:\"]),\n );\n}\n\n/**\n * Create the experimental built-in safety redaction rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createSafetyRedactionRule(\n options: SafetyRedactionRuleOptions = {},\n): TraceCheckRule {\n const sensitiveKeys = options.sensitiveKeys ?? DEFAULT_SENSITIVE_KEYS;\n const markers = options.redactedMarkers ?? [\"[REDACTED]\", \"[REDACTED:\"];\n return {\n id: \"safety.redaction\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (!isSensitiveKey(entry.key ?? lastPathSegment(entry.path), sensitiveKeys)) continue;\n if (typeof entry.value === \"string\" && hasRedactionMarker(entry.value, markers)) continue;\n findings.push(\n failFinding(\n \"safety.redaction\",\n `Sensitive-looking field at ${entry.path} is not redacted.`,\n [eventEvidence(event, entry.path)],\n \"redaction marker\",\n { path: entry.path, valueType: valueType(entry.value) },\n {\n category: \"credential\",\n confidence: \"high\",\n detector: \"safety.redaction\",\n action: \"redact\",\n },\n ),\n );\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in raw content path safety rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createSafetyRawContentRule(\n options: SafetyRawContentRuleOptions = {},\n): TraceCheckRule {\n const forbiddenKeys = options.forbiddenKeys ?? DEFAULT_RAW_CONTENT_KEYS;\n const safePathPrefixes = options.safePathPrefixes ?? DEFAULT_SAFE_RAW_CONTENT_PATH_PREFIXES;\n return {\n id: \"safety.rawPrompt\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: options.includeSummaries })) {\n const key = entry.key ?? lastPathSegment(entry.path);\n if (!isRawContentPath(entry.path, key, forbiddenKeys, safePathPrefixes)) continue;\n findings.push(\n failFinding(\n \"safety.rawPrompt\",\n `Raw content-like field ${entry.path} is present.`,\n [eventEvidence(event, entry.path)],\n \"metadata-only trace fields\",\n { path: entry.path, valueType: valueType(entry.value) },\n {\n category: \"raw-content\",\n confidence: \"high\",\n detector: \"safety.rawPrompt\",\n action: \"redact-or-omit\",\n },\n ),\n );\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in secret pattern safety rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createSafetySecretPatternRule(\n options: SafetySecretPatternRuleOptions = {},\n): TraceCheckRule {\n const patterns = options.patterns ?? DEFAULT_SECRET_PATTERNS;\n const maxStringLength = options.maxStringLength ?? 4_096;\n return {\n id: \"safety.secretPattern\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (typeof entry.value !== \"string\") continue;\n const sample = entry.value.slice(0, maxStringLength);\n for (const pattern of patterns) {\n pattern.pattern.lastIndex = 0;\n if (!pattern.pattern.test(sample)) continue;\n pattern.pattern.lastIndex = 0;\n findings.push(\n failFinding(\n \"safety.secretPattern\",\n `Secret-like pattern ${pattern.id} matched at ${entry.path}.`,\n [eventEvidence(event, entry.path)],\n \"no secret-like strings\",\n { pattern: pattern.id, path: entry.path },\n {\n category: \"credential\",\n confidence: \"high\",\n detector: pattern.id,\n action: \"redact\",\n },\n ),\n );\n break;\n }\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in oversized attribute safety rule.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createSafetyOversizedAttributeRule(\n options: SafetyOversizedAttributeRuleOptions,\n): TraceCheckRule {\n return {\n id: \"safety.oversizedAttribute\",\n category: \"safety\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n for (const event of context.events) {\n for (const entry of eventValueEntries(event, { includeSummaries: true, includeError: true })) {\n if (\n typeof entry.value === \"string\" &&\n options.maxStringLength !== undefined &&\n entry.value.length > options.maxStringLength\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `String at ${entry.path} exceeds ${options.maxStringLength} characters.`,\n [eventEvidence(event, entry.path)],\n { maxStringLength: options.maxStringLength },\n { path: entry.path, length: entry.value.length },\n {\n category: \"size\",\n confidence: \"high\",\n detector: \"safety.oversizedAttribute\",\n action: \"truncate-or-omit\",\n },\n ),\n );\n }\n\n if (\n Array.isArray(entry.value) &&\n options.maxArrayLength !== undefined &&\n entry.value.length > options.maxArrayLength\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Array at ${entry.path} exceeds ${options.maxArrayLength} items.`,\n [eventEvidence(event, entry.path)],\n { maxArrayLength: options.maxArrayLength },\n { path: entry.path, length: entry.value.length },\n {\n category: \"size\",\n confidence: \"high\",\n detector: \"safety.oversizedAttribute\",\n action: \"truncate-or-omit\",\n },\n ),\n );\n }\n\n if (\n isRecord(entry.value) &&\n options.maxObjectKeys !== undefined &&\n Object.keys(entry.value).length > options.maxObjectKeys\n ) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Object at ${entry.path} exceeds ${options.maxObjectKeys} keys.`,\n [eventEvidence(event, entry.path)],\n { maxObjectKeys: options.maxObjectKeys },\n { path: entry.path, keys: Object.keys(entry.value).length },\n {\n category: \"size\",\n confidence: \"high\",\n detector: \"safety.oversizedAttribute\",\n action: \"truncate-or-omit\",\n },\n ),\n );\n }\n\n if (options.maxSerializedBytes !== undefined) {\n const bytes = serializedByteLength(entry.value);\n if (bytes !== undefined && bytes > options.maxSerializedBytes) {\n findings.push(\n failFinding(\n \"safety.oversizedAttribute\",\n `Value at ${entry.path} exceeds ${options.maxSerializedBytes} serialized bytes.`,\n [eventEvidence(event, entry.path)],\n { maxSerializedBytes: options.maxSerializedBytes },\n { path: entry.path, bytes },\n {\n category: \"size\",\n confidence: \"high\",\n detector: \"safety.oversizedAttribute\",\n action: \"truncate-or-omit\",\n },\n ),\n );\n }\n }\n }\n }\n return limitFindings(findings, options.maxFindings);\n },\n };\n}\n\n/**\n * Create the experimental built-in baseline regression rule.\n *\n * The rule compares safe structural summaries from a normalized baseline\n * against the candidate context. It intentionally ignores raw prompt/output,\n * request/response body, header, and tool payload text.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function createBaselineRegressionRule(\n options: BaselineRegressionRuleOptions,\n): TraceCheckRule {\n return {\n id: \"baseline.regression\",\n category: \"baseline\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const baselineSelection = resolveSelectedRun(options.baseline, options.baselineRunId);\n if (baselineSelection.diagnostics.length > 0 || !baselineSelection.run) {\n return [\n failFinding(\n \"baseline.regression\",\n \"Baseline run could not be selected.\",\n runEvidence(context.selectedRun),\n \"selectable baseline run\",\n baselineSelection.diagnostics.map((item) => item.code),\n ),\n ];\n }\n\n const baselineFacts = buildFacts(options.baseline, baselineSelection.run);\n const baselineContext: TraceCheckContext = {\n ...baselineFacts,\n selectedRun: baselineSelection.run,\n sourceLabel: options.baseline.sourceLabel,\n };\n const findings: TraceCheckFinding[] = [];\n const durationToleranceMs = options.durationToleranceMs ?? 0;\n\n if (options.compareFormat && baselineContext.format !== context.format) {\n findings.push(\n baselineDiffFinding(\n \"Trace format differs from baseline.\",\n runEvidence(context.selectedRun),\n baselineContext.format,\n context.format,\n ),\n );\n }\n\n const baselineRunStatus = baselineContext.selectedRun?.status ?? \"unknown\";\n const candidateRunStatus = context.selectedRun?.status ?? \"unknown\";\n if (baselineRunStatus !== candidateRunStatus) {\n findings.push(\n baselineDiffFinding(\n \"Run status differs from baseline.\",\n runEvidence(context.selectedRun),\n baselineRunStatus,\n candidateRunStatus,\n ),\n );\n }\n\n const baselineDuration = baselineContext.selectedRun?.durationMs;\n const candidateDuration = context.selectedRun?.durationMs;\n if (\n baselineDuration !== undefined &&\n candidateDuration !== undefined &&\n Math.abs(candidateDuration - baselineDuration) > durationToleranceMs\n ) {\n findings.push(\n baselineDiffFinding(\n \"Run duration differs from baseline beyond tolerance.\",\n runEvidence(context.selectedRun),\n { durationMs: baselineDuration, toleranceMs: durationToleranceMs },\n candidateDuration,\n ),\n );\n }\n\n const comparisons = [\n {\n label: \"Tree shape\",\n path: \"tree\",\n expected: treeShape(baselineContext.rootNodes),\n actual: treeShape(context.rootNodes),\n evidence: runEvidence(context.selectedRun),\n },\n {\n label: \"Event statuses\",\n path: \"status\",\n expected: statusShape(baselineContext),\n actual: statusShape(context),\n evidence: runEvidence(context.selectedRun),\n },\n {\n label: \"Tool usage\",\n path: \"tool\",\n expected: toolShape(baselineContext),\n actual: toolShape(context),\n evidence: firstEvidenceForKind(context, \"TOOL\", \"tool\"),\n },\n {\n label: \"LLM usage\",\n path: \"llm\",\n expected: llmShape(baselineContext),\n actual: llmShape(context),\n evidence: firstEvidenceForKind(context, \"LLM\", \"llm\"),\n },\n {\n label: \"Error profile\",\n path: \"error\",\n expected: errorShape(baselineContext),\n actual: errorShape(context),\n evidence: firstEvidenceForKind(context, \"ERROR\", \"error\"),\n },\n {\n label: \"Retrieval signals\",\n path: \"retrieval\",\n expected: retrievalShape(baselineContext),\n actual: retrievalShape(context),\n evidence: firstEvidenceForKind(context, \"RETRIEVER\", \"retrieval\"),\n },\n {\n label: \"Guardrail signals\",\n path: \"guardrail\",\n expected: guardrailShape(baselineContext),\n actual: guardrailShape(context),\n evidence: guardrailEvents(context)[0]\n ? [eventEvidence(guardrailEvents(context)[0]!, \"guardrail\")]\n : runEvidence(context.selectedRun),\n },\n ];\n\n for (const comparison of comparisons) {\n if (JSON.stringify(comparison.expected) === JSON.stringify(comparison.actual)) {\n continue;\n }\n findings.push(\n baselineDiffFinding(\n `${comparison.label} differs from baseline.`,\n comparison.evidence.length > 0\n ? comparison.evidence\n : [{ runId: context.selectedRun?.runId, path: comparison.path }],\n comparison.expected,\n comparison.actual,\n ),\n );\n }\n\n return findings;\n },\n };\n}\n\n/**\n * Experimental rule for observed real-world outcomes (v4.4+).\n */\nexport interface ObservedOutcomeRuleOptions {\n failOn?: readonly ObservedOutcomeStatus[];\n /**\n * When true, fail if the trace contains zero observed outcomes.\n * Default false preserves low-level programmatic compatibility.\n * CLI `--fail-on-observation` sets this to true.\n */\n requireAny?: boolean;\n}\n\nexport function createObservedOutcomeRule(\n options: ObservedOutcomeRuleOptions = {},\n): TraceCheckRule {\n const failOn = options.failOn ?? ([\"failed\"] as const);\n const requireAny = options.requireAny === true;\n return {\n id: \"outcome.status\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const outcomes = extractOutcomesFromPersistedEvents(context.events);\n if (requireAny && outcomes.length === 0) {\n return [\n failFinding(\n \"outcome.status\",\n \"Expected at least one observed outcome.\",\n runEvidence(context.selectedRun),\n { requireAny: true, expected: \"at least one observed outcome\" },\n { code: \"outcome.missing\", actual: 0 },\n ),\n ];\n }\n const matching = outcomesMatchingStatus(outcomes, failOn);\n if (matching.length === 0) return [];\n return [\n failFinding(\n \"outcome.status\",\n `Observed outcome count ${matching.length} matched [${failOn.join(\", \")}].`,\n matching.map((outcome) => ({\n runId: outcome.runId,\n eventId: outcome.outcomeId,\n ...(outcome.parentId !== undefined ? { parentId: outcome.parentId } : {}),\n kind: \"OUTCOME\",\n name: outcome.name,\n status: outcome.status,\n path: `outcome.${outcome.name}`,\n })),\n { failOn },\n matching.map((outcome) => ({\n name: outcome.name,\n status: outcome.status,\n expectation: outcome.expectation,\n })),\n ),\n ];\n },\n };\n}\n\n/**\n * Run experimental deterministic trace checks against normalized reader output.\n *\n * The engine is local-only and pure: it does not discover config files, read\n * trace files, call providers, perform network I/O, or mutate input objects.\n *\n * @experimental Available through `agent-inspect/checks`. Additive changes may ship in minor releases; breaking changes require a future major.\n */\nexport function runTraceChecks(\n input: TraceCheckInput,\n options: RunTraceChecksOptions = {},\n): TraceCheckResult {\n const selected = resolveSelectedRun(input, options.runId);\n if (selected.diagnostics.length > 0) {\n return errorResult(input, selected.diagnostics, selected.run);\n }\n\n const rules = selectRules(options.rules ?? [], options.select);\n if (rules.diagnostics.length > 0) {\n return errorResult(input, rules.diagnostics, selected.run);\n }\n\n if (rules.rules.length === 0) {\n return errorResult(\n input,\n [\n diagnostic(\n \"AI_CHECK_NO_RULES_EVALUATED\",\n \"No trace check rules were evaluated. Configure at least one rule, contract, or CLI check option.\",\n ),\n ],\n selected.run,\n );\n }\n\n const facts = buildFacts(input, selected.run);\n const context: TraceCheckContext = {\n ...facts,\n ...(selected.run ? { selectedRun: selected.run } : {}),\n ...(input.sourceLabel ? { sourceLabel: input.sourceLabel } : {}),\n };\n const diagnostics: TraceCheckDiagnostic[] = [];\n const findings: TraceCheckFinding[] = [];\n const ruleExecutions: TraceCheckRuleExecution[] = [];\n\n for (const rule of rules.rules) {\n try {\n const ruleFindings = rule.evaluate(context).map((finding) => normalizeFinding(rule, finding));\n findings.push(...ruleFindings);\n ruleExecutions.push({\n ruleId: rule.id,\n category: rule.category,\n status: classifyRuleExecution(ruleFindings, false),\n findingCount: ruleFindings.length,\n ...(selected.run ? { runId: selected.run.runId } : {}),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push(\n diagnostic(\"AI_CHECK_INTERNAL_ERROR\", `Rule ${rule.id} failed: ${message}`, rule.id),\n );\n ruleExecutions.push({\n ruleId: rule.id,\n category: rule.category,\n status: \"error\",\n findingCount: 0,\n ...(selected.run ? { runId: selected.run.runId } : {}),\n });\n }\n }\n\n if (diagnostics.length > 0) {\n return errorResult(input, diagnostics, selected.run, ruleExecutions);\n }\n\n const eventById = new Map(input.read.events.map((event) => [event.eventId, event] as const));\n const sortedFindings = findings.sort(compareFindings(eventById));\n const summary = summarize(sortedFindings, diagnostics, ruleExecutions.length);\n const status: TraceCheckStatus = summary.failed > 0 ? \"fail\" : \"pass\";\n\n return {\n ok: status === \"pass\",\n status,\n format: input.read.format,\n ...(selected.run ? { runId: selected.run.runId } : {}),\n summary,\n findings: sortedFindings,\n diagnostics,\n ruleExecutions,\n };\n}\n\nexport {\n defineTraceContract,\n evaluateTraceContract,\n evaluateTraceContractRead,\n explainTraceContract,\n lintTraceContract,\n resolveTraceContractScope,\n workflowMetadataForRun,\n evaluateToolArgumentValue,\n extractToolArgumentPayload,\n resolveJsonPointer,\n type TraceContract,\n type TraceContractAlternativeBranch,\n type TraceContractAlternatives,\n type TraceContractBody,\n type TraceContractControlRules,\n type TraceContractInput,\n type TraceContractLintDiagnostic,\n type TraceContractLlmRules,\n type TraceContractObservationProvenance,\n type TraceContractObservationRules,\n type TraceContractRetryRules,\n type TraceContractRunRules,\n type TraceContractScope,\n type TraceContractToolRules,\n type ControlStage,\n type ToolArgumentCheck,\n type ToolArgumentOccurrence,\n type ToolArgumentOperator,\n} from \"./contract.js\";\n","/**\n * Declared-versus-enforced control checks for TraceContract (6.23).\n *\n * A stored declaration is not proof of enforcement.\n *\n * @experimental\n */\n\nimport type { TraceCheckEvidence, TraceCheckFinding } from \"./index.js\";\nimport { resolveCanonicalToolName } from \"./logical-events.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\n\nexport type ControlStage =\n | \"declared\"\n | \"presented\"\n | \"validated\"\n | \"enforced\"\n | \"observed\"\n | \"accepted\";\n\nexport interface TraceContractControlRules {\n /**\n * Tools declared/presented to the agent (inline). Distinct from `enforcedTools`.\n */\n declaredTools?: string[];\n /**\n * Tools the harness claims to enforce (inline allowlist).\n */\n enforcedTools?: string[];\n /**\n * RUN/event attribute holding a string[] of declared tool names.\n * Used when `declaredTools` is omitted.\n */\n declaredToolsAttribute?: string;\n /**\n * RUN/event attribute holding a string[] of enforced tool names.\n */\n enforcedToolsAttribute?: string;\n /**\n * Fail when both declared and enforced sets resolve and differ.\n */\n requireDeclaredMatchesEnforced?: boolean;\n /**\n * Fail when any observed finished tool is outside the enforced set.\n */\n requireObservedWithinEnforced?: boolean;\n /**\n * Fail when any observed finished tool is outside the declared set.\n */\n requireObservedWithinDeclared?: boolean;\n /**\n * Require observation names for control stages (default `control.<stage>`).\n */\n requiredStages?: Array<{\n stage: ControlStage;\n /** Observation name; defaults to `control.<stage>`. */\n observation?: string;\n }>;\n}\n\nfunction asStringList(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: string[] = [];\n for (const item of value) {\n if (typeof item !== \"string\" || item.trim() === \"\") return undefined;\n out.push(item.trim());\n }\n return out;\n}\n\nfunction attributeList(\n events: readonly PersistedInspectEvent[],\n attribute: string | undefined,\n): string[] | undefined {\n if (!attribute) return undefined;\n for (const event of events) {\n const attrs = event.attributes;\n if (!attrs || typeof attrs !== \"object\") continue;\n const direct = asStringList(attrs[attribute]);\n if (direct) return direct;\n const nested =\n attrs.metadata && typeof attrs.metadata === \"object\"\n ? asStringList((attrs.metadata as Record<string, unknown>)[attribute])\n : undefined;\n if (nested) return nested;\n }\n return undefined;\n}\n\nfunction fail(\n ruleId: string,\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected?: unknown,\n actual?: unknown,\n): TraceCheckFinding {\n return {\n ruleId,\n severity: \"error\",\n status: \"fail\",\n message,\n ...(expected !== undefined ? { expected } : {}),\n ...(actual !== undefined ? { actual } : {}),\n evidence: [...evidence],\n };\n}\n\nfunction sortedUnique(values: readonly string[]): string[] {\n return [...new Set(values)].sort((a, b) => a.localeCompare(b));\n}\n\nfunction setEqual(left: readonly string[], right: readonly string[]): boolean {\n const a = sortedUnique(left);\n const b = sortedUnique(right);\n return a.length === b.length && a.every((value, index) => value === b[index]);\n}\n\n/**\n * Evaluate declared/enforced/stage control invariants.\n */\nexport function evaluateControlRules(\n events: readonly PersistedInspectEvent[],\n rules: TraceContractControlRules,\n runEvidence: readonly TraceCheckEvidence[],\n observationNames: ReadonlySet<string>,\n): TraceCheckFinding[] {\n const findings: TraceCheckFinding[] = [];\n const declared =\n rules.declaredTools ??\n attributeList(events, rules.declaredToolsAttribute);\n const enforced =\n rules.enforcedTools ??\n attributeList(events, rules.enforcedToolsAttribute);\n\n if (rules.requireDeclaredMatchesEnforced) {\n if (declared === undefined || enforced === undefined) {\n findings.push(\n fail(\n \"contract.controls.declared-matches-enforced\",\n \"Declared and enforced tool sets could not both be resolved.\",\n runEvidence,\n { declaredDefined: declared !== undefined, enforcedDefined: enforced !== undefined },\n { code: \"AI_CHECK_CONTROL_EVIDENCE_UNAVAILABLE\" },\n ),\n );\n } else if (!setEqual(declared, enforced)) {\n findings.push(\n fail(\n \"contract.controls.declared-matches-enforced\",\n \"Declared tools differ from enforced tools.\",\n runEvidence,\n sortedUnique(declared),\n sortedUnique(enforced),\n ),\n );\n }\n }\n\n const observedTools = sortedUnique(\n events\n .filter((event) => event.kind === \"TOOL\" && event.status !== \"running\")\n .map((event) => resolveCanonicalToolName(event)),\n );\n\n if (rules.requireObservedWithinEnforced) {\n if (enforced === undefined) {\n findings.push(\n fail(\n \"contract.controls.observed-within-enforced\",\n \"Enforced tool set unavailable for observed-within-enforced check.\",\n runEvidence,\n undefined,\n { code: \"AI_CHECK_CONTROL_EVIDENCE_UNAVAILABLE\" },\n ),\n );\n } else {\n const enforcedSet = new Set(enforced);\n const outside = observedTools.filter((name) => !enforcedSet.has(name));\n if (outside.length > 0) {\n findings.push(\n fail(\n \"contract.controls.observed-within-enforced\",\n `Observed tools outside enforced allowlist: ${outside.join(\", \")}.`,\n runEvidence,\n sortedUnique(enforced),\n outside,\n ),\n );\n }\n }\n }\n\n if (rules.requireObservedWithinDeclared) {\n if (declared === undefined) {\n findings.push(\n fail(\n \"contract.controls.observed-within-declared\",\n \"Declared tool set unavailable for observed-within-declared check.\",\n runEvidence,\n undefined,\n { code: \"AI_CHECK_CONTROL_EVIDENCE_UNAVAILABLE\" },\n ),\n );\n } else {\n const declaredSet = new Set(declared);\n const outside = observedTools.filter((name) => !declaredSet.has(name));\n if (outside.length > 0) {\n findings.push(\n fail(\n \"contract.controls.observed-within-declared\",\n `Observed tools outside declared set: ${outside.join(\", \")}.`,\n runEvidence,\n sortedUnique(declared),\n outside,\n ),\n );\n }\n }\n }\n\n for (const stage of rules.requiredStages ?? []) {\n const observation = stage.observation ?? `control.${stage.stage}`;\n if (!observationNames.has(observation)) {\n findings.push(\n fail(\n `contract.controls.stage.${stage.stage}`,\n `Required control stage observation missing: ${observation}.`,\n runEvidence,\n observation,\n [...observationNames],\n ),\n );\n }\n }\n\n return findings;\n}\n","/**\n * Retry / side-effect safety checks for TraceContract (6.23+; corrected in 6.25.1).\n *\n * Uses explicit attempt identity from session workflow metadata.\n * AgentInspect evaluates; it does not perform retries.\n *\n * @experimental\n */\n\nimport type { TraceCheckEvidence, TraceCheckFinding } from \"./index.js\";\nimport { resolveCanonicalToolName } from \"./logical-events.js\";\nimport { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\nimport type { SessionWorkflowMetadata } from \"../sessions/types.js\";\n\nexport interface TraceContractRetryRules {\n /**\n * Maximum attempts per `operationId` (or `attemptOf` grouping).\n * Prefers distinct `attemptId` values, else validated contiguous `attemptNumber`s,\n * else finished tool/LLM events in the operation.\n */\n maxAttempts?: number;\n /**\n * When true, every operation with attempts must include a non-running terminal event.\n */\n requireTerminalResult?: boolean;\n /**\n * Fail when `fallbackOf` is set without an earlier failure for the referenced operation\n * that chronologically precedes the fallback event.\n */\n fallbackOnlyAfterFailure?: boolean;\n /**\n * Tool names treated as non-idempotent. A later attempt after an `ok` occurrence fails\n * unless idempotency / no-side-effect evidence is present on the retry.\n */\n nonIdempotentTools?: string[];\n /**\n * When true, genuine retries (including error→success) require `idempotencyKey`\n * or `attributes.noSideEffect === true` / `sideEffect === false`.\n * A client key alone is not proof of exactly-once mutation.\n */\n requireIdempotencyEvidenceForRetry?: boolean;\n /**\n * When true, recovered success paths must retain an earlier error attempt in the\n * same operation/retry chain (not merely coexistence of ok+error).\n */\n requireRecoveredFailureVisible?: boolean;\n}\n\nfunction fail(\n ruleId: string,\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected?: unknown,\n actual?: unknown,\n): TraceCheckFinding {\n return {\n ruleId,\n severity: \"error\",\n status: \"fail\",\n message,\n ...(expected !== undefined ? { expected } : {}),\n ...(actual !== undefined ? { actual } : {}),\n evidence: [...evidence],\n };\n}\n\nfunction workflowFor(event: PersistedInspectEvent): SessionWorkflowMetadata {\n const attrs = event.attributes;\n if (!attrs || typeof attrs !== \"object\") return {};\n const direct = extractSessionWorkflowMetadata(attrs);\n const nested =\n attrs.metadata && typeof attrs.metadata === \"object\"\n ? extractSessionWorkflowMetadata(attrs.metadata as Record<string, unknown>)\n : undefined;\n return { ...nested, ...direct };\n}\n\nfunction hasIdempotencyEvidence(event: PersistedInspectEvent): boolean {\n const workflow = workflowFor(event);\n if (typeof workflow.idempotencyKey === \"string\" && workflow.idempotencyKey.trim() !== \"\") {\n return true;\n }\n const attrs = event.attributes ?? {};\n if (attrs.noSideEffect === true) return true;\n if (attrs.sideEffect === false) return true;\n return false;\n}\n\nfunction eventEvidence(event: PersistedInspectEvent): TraceCheckEvidence {\n return {\n runId: event.runId,\n eventId: event.eventId,\n kind: event.kind,\n name: event.name,\n status: event.status,\n };\n}\n\nfunction eventTime(event: PersistedInspectEvent): string {\n return event.startedAt ?? event.timestamp ?? \"\";\n}\n\nfunction sortByTime(events: readonly PersistedInspectEvent[]): PersistedInspectEvent[] {\n return [...events].sort((a, b) => eventTime(a).localeCompare(eventTime(b)));\n}\n\nfunction attemptNumberOf(event: PersistedInspectEvent): number | undefined {\n const workflow = workflowFor(event);\n const value = workflow.attemptNumber ?? workflow.attempt;\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction attemptIdOf(event: PersistedInspectEvent): string | undefined {\n const value = workflowFor(event).attemptId;\n return typeof value === \"string\" && value.trim() !== \"\" ? value : undefined;\n}\n\n/**\n * Count attempts with identity preference (6.25.1).\n * Does not use Math.max(attemptNumber) without validating contiguous identity.\n */\nexport function countOperationAttempts(members: readonly PersistedInspectEvent[]): number {\n const attemptIds = new Set(\n members\n .map((event) => attemptIdOf(event))\n .filter((value): value is string => value !== undefined),\n );\n if (attemptIds.size > 0) {\n return attemptIds.size;\n }\n\n const numbers = members\n .map((event) => attemptNumberOf(event))\n .filter((value): value is number => value !== undefined)\n .sort((a, b) => a - b);\n if (numbers.length > 0) {\n const unique = [...new Set(numbers)];\n const min = unique[0]!;\n const max = unique[unique.length - 1]!;\n const contiguous =\n unique.length === max - min + 1 && unique.every((value, index) => value === min + index);\n if (contiguous) {\n return unique.length;\n }\n return unique.length;\n }\n\n return members.filter((event) => event.kind === \"TOOL\" || event.kind === \"LLM\").length;\n}\n\ntype RetryClassification =\n | { kind: \"first\" }\n | { kind: \"retry\" }\n | { kind: \"unknown\"; reason: string };\n\n/**\n * Classify whether an event is a retry within an ordered same-tool/operation group.\n */\nexport function classifyRetryAttempt(\n event: PersistedInspectEvent,\n priorOrdered: readonly PersistedInspectEvent[],\n allMembers: readonly PersistedInspectEvent[],\n): RetryClassification {\n const workflow = workflowFor(event);\n const attemptNumber = attemptNumberOf(event);\n const attemptId = attemptIdOf(event);\n const retryOf = workflow.retryOf;\n\n if (typeof retryOf === \"string\" && retryOf.trim() !== \"\") {\n const target = allMembers.find(\n (candidate) =>\n candidate.eventId === retryOf ||\n attemptIdOf(candidate) === retryOf ||\n workflowFor(candidate).operationId === retryOf,\n );\n if (!target) {\n return { kind: \"unknown\", reason: \"retryOf target missing\" };\n }\n if (eventTime(target) > eventTime(event)) {\n return { kind: \"unknown\", reason: \"retryOf target does not precede retry\" };\n }\n return { kind: \"retry\" };\n }\n\n if (attemptNumber !== undefined) {\n if (attemptNumber > 1) {\n return { kind: \"retry\" };\n }\n if (attemptNumber === 1) {\n return { kind: \"first\" };\n }\n }\n\n if (attemptId !== undefined) {\n const priorDistinct = priorOrdered.some((candidate) => {\n const priorId = attemptIdOf(candidate);\n return priorId !== undefined && priorId !== attemptId;\n });\n if (priorDistinct) {\n return { kind: \"retry\" };\n }\n if (priorOrdered.length === 0) {\n return { kind: \"first\" };\n }\n }\n\n const priorFinished = priorOrdered.filter(\n (candidate) => candidate.status === \"ok\" || candidate.status === \"error\",\n );\n if (priorFinished.length > 0) {\n return { kind: \"retry\" };\n }\n if (priorOrdered.length === 0) {\n return { kind: \"first\" };\n }\n return { kind: \"unknown\", reason: \"ambiguous attempt identity\" };\n}\n\nfunction hasDuplicateAttemptIds(members: readonly PersistedInspectEvent[]): boolean {\n const seen = new Set<string>();\n for (const event of members) {\n const id = attemptIdOf(event);\n if (!id) continue;\n if (seen.has(id)) return true;\n seen.add(id);\n }\n return false;\n}\n\n/**\n * Evaluate retry / side-effect safety invariants.\n */\nexport function evaluateRetrySafetyRules(\n events: readonly PersistedInspectEvent[],\n rules: TraceContractRetryRules,\n _runEvidence: readonly TraceCheckEvidence[],\n): TraceCheckFinding[] {\n const findings: TraceCheckFinding[] = [];\n const byOperation = new Map<string, PersistedInspectEvent[]>();\n\n for (const event of events) {\n const workflow = workflowFor(event);\n const operationId = workflow.operationId;\n if (!operationId) continue;\n const list = byOperation.get(operationId) ?? [];\n list.push(event);\n byOperation.set(operationId, list);\n }\n\n if (rules.maxAttempts !== undefined) {\n for (const [operationId, members] of byOperation) {\n if (hasDuplicateAttemptIds(members)) {\n findings.push(\n fail(\n \"contract.retry.duplicate-attempt-id\",\n `Operation ${operationId} has duplicate attemptId values.`,\n members.slice(0, 4).map(eventEvidence),\n \"unique attemptId\",\n \"duplicate\",\n ),\n );\n }\n const count = countOperationAttempts(members);\n if (count > rules.maxAttempts) {\n findings.push(\n fail(\n \"contract.retry.max-attempts\",\n `Operation ${operationId} exceeded maxAttempts ${rules.maxAttempts}.`,\n members.slice(0, 4).map(eventEvidence),\n rules.maxAttempts,\n count,\n ),\n );\n }\n }\n }\n\n if (rules.requireTerminalResult) {\n for (const [operationId, members] of byOperation) {\n const hasTerminal = members.some((event) => event.status === \"ok\" || event.status === \"error\");\n if (!hasTerminal) {\n findings.push(\n fail(\n \"contract.retry.terminal-result\",\n `Operation ${operationId} has no terminal ok/error result.`,\n members.slice(0, 4).map(eventEvidence),\n \"ok|error\",\n members.map((event) => event.status),\n ),\n );\n }\n }\n }\n\n if (rules.fallbackOnlyAfterFailure) {\n for (const event of events) {\n const workflow = workflowFor(event);\n const fallbackOf = workflow.fallbackOf;\n if (!fallbackOf) continue;\n const prior = byOperation.get(fallbackOf) ?? [];\n const fallbackStart = eventTime(event);\n const earlierFailure = prior.some(\n (candidate) =>\n candidate.status === \"error\" &&\n eventTime(candidate) !== \"\" &&\n fallbackStart !== \"\" &&\n eventTime(candidate) < fallbackStart,\n );\n if (!earlierFailure) {\n findings.push(\n fail(\n \"contract.retry.fallback-after-failure\",\n `Fallback for ${fallbackOf} appeared without an earlier failure in the related operation.`,\n [eventEvidence(event)],\n \"earlier error attempt\",\n { fallbackOf },\n ),\n );\n }\n }\n }\n\n const nonIdempotent = new Set(rules.nonIdempotentTools ?? []);\n if (nonIdempotent.size > 0 || rules.requireIdempotencyEvidenceForRetry) {\n const toolEvents = events.filter(\n (event) => event.kind === \"TOOL\" && event.status !== \"running\",\n );\n const byToolOp = new Map<string, PersistedInspectEvent[]>();\n for (const event of toolEvents) {\n const name = resolveCanonicalToolName(event);\n const workflow = workflowFor(event);\n const key = `${workflow.operationId ?? name}::${name}`;\n const list = byToolOp.get(key) ?? [];\n list.push(event);\n byToolOp.set(key, list);\n }\n for (const [, members] of byToolOp) {\n const ordered = sortByTime(members);\n let sawOk = false;\n let sawSideEffectOk = false;\n const prior: PersistedInspectEvent[] = [];\n for (const event of ordered) {\n const name = resolveCanonicalToolName(event);\n const classification = classifyRetryAttempt(event, prior, members);\n\n if (classification.kind === \"unknown\" && rules.requireIdempotencyEvidenceForRetry) {\n findings.push(\n fail(\n \"contract.retry.ambiguous-identity\",\n `Ambiguous attempt identity for tool ${name}; strict retry evidence cannot pass.`,\n [eventEvidence(event)],\n \"explicit attempt identity\",\n classification.reason,\n ),\n );\n }\n\n const isRetry = classification.kind === \"retry\";\n if (isRetry && rules.requireIdempotencyEvidenceForRetry && !hasIdempotencyEvidence(event)) {\n findings.push(\n fail(\n \"contract.retry.idempotency-evidence\",\n `Retry of tool ${name} lacks idempotencyKey / noSideEffect evidence.`,\n [eventEvidence(event)],\n \"idempotencyKey|noSideEffect\",\n { code: \"AI_CHECK_RETRY_EVIDENCE_UNAVAILABLE\" },\n ),\n );\n }\n\n if (sawOk && nonIdempotent.has(name) && sawSideEffectOk && !hasIdempotencyEvidence(event)) {\n findings.push(\n fail(\n \"contract.retry.non-idempotent-side-effect\",\n `Retry of non-idempotent tool ${name} after a confirmed ok side effect.`,\n [eventEvidence(event)],\n \"no retry after side effect\",\n name,\n ),\n );\n }\n\n if (event.status === \"ok\") {\n sawOk = true;\n if (nonIdempotent.has(name) && !hasIdempotencyEvidence(event)) {\n sawSideEffectOk = true;\n }\n }\n prior.push(event);\n }\n }\n }\n\n if (rules.requireRecoveredFailureVisible) {\n for (const [operationId, members] of byOperation) {\n const ordered = sortByTime(members);\n const toolish = ordered.filter(\n (event) =>\n (event.kind === \"TOOL\" || event.kind === \"LLM\") &&\n (event.status === \"ok\" || event.status === \"error\"),\n );\n if (toolish.length < 2) continue;\n\n let sawEarlierError = false;\n let sawLaterOkAfterError = false;\n for (const event of toolish) {\n if (event.status === \"error\") {\n sawEarlierError = true;\n } else if (event.status === \"ok\" && sawEarlierError) {\n sawLaterOkAfterError = true;\n }\n }\n\n const hasOk = toolish.some((event) => event.status === \"ok\");\n const attemptish =\n toolish.some((event) => {\n const meta = workflowFor(event);\n return (\n meta.attemptId !== undefined ||\n meta.attemptNumber !== undefined ||\n meta.attempt !== undefined ||\n meta.retryOf !== undefined\n );\n }) || toolish.length > 1;\n\n if (!attemptish || !hasOk) continue;\n\n if (!sawLaterOkAfterError) {\n findings.push(\n fail(\n \"contract.retry.recovered-failure-visible\",\n `Operation ${operationId} does not show an earlier error attempt before a later success in the same chain.`,\n members.slice(0, 4).map(eventEvidence),\n \"earlier error then later ok\",\n {\n sawEarlierError,\n statuses: toolish.map((event) => event.status),\n },\n ),\n );\n }\n }\n }\n\n return findings;\n}\n","import type {\n TraceCheckEvidence,\n TraceCheckFinding,\n TraceCheckInput,\n TraceCheckResult,\n TraceCheckRule,\n} from \"./index.js\";\nimport {\n createLlmUsageRule,\n createObservedOutcomeRule,\n createRunDurationRule,\n createRunStatusRule,\n createStructureIncompleteRule,\n createToolOrderingRule,\n createToolUsageRule,\n runTraceChecks,\n} from \"./index.js\";\nimport {\n resolveTraceContractScope,\n type TraceContractScope,\n} from \"./contract-scope.js\";\nimport { resolveCanonicalToolName } from \"./logical-events.js\";\nimport {\n evaluateControlRules,\n type TraceContractControlRules,\n} from \"./control-rules.js\";\nimport {\n evaluateRetrySafetyRules,\n type TraceContractRetryRules,\n} from \"./retry-safety.js\";\nimport {\n evaluateToolArgumentValue,\n extractToolArgumentPayload,\n type ToolArgumentCheck,\n} from \"./tool-arguments.js\";\nimport {\n OBSERVED_OUTCOME_METHODS,\n extractOutcomesFromPersistedEvents,\n type ObservedOutcome,\n} from \"../outcomes/index.js\";\nimport type { TraceReadResult } from \"../readers/index.js\";\n\nexport type { TraceContractScope } from \"./contract-scope.js\";\nexport { resolveTraceContractScope, workflowMetadataForRun } from \"./contract-scope.js\";\nexport type {\n ControlStage,\n TraceContractControlRules,\n} from \"./control-rules.js\";\nexport type { TraceContractRetryRules } from \"./retry-safety.js\";\nexport type {\n ToolArgumentCheck,\n ToolArgumentOccurrence,\n ToolArgumentOperator,\n} from \"./tool-arguments.js\";\nexport {\n evaluateToolArgumentValue,\n extractToolArgumentPayload,\n resolveJsonPointer,\n} from \"./tool-arguments.js\";\n\nfunction contractFailFinding(\n ruleId: string,\n message: string,\n evidence: readonly TraceCheckEvidence[],\n expected?: unknown,\n actual?: unknown,\n): TraceCheckFinding {\n return {\n ruleId,\n severity: \"error\",\n status: \"fail\",\n message,\n ...(expected !== undefined ? { expected } : {}),\n ...(actual !== undefined ? { actual } : {}),\n evidence: [...evidence],\n };\n}\n\n/**\n * @experimental Typed trace contract input. Evolves during v6.5.x.\n */\nexport interface TraceContractRunRules {\n requireCompleted?: boolean;\n allowedStatuses?: string[];\n maxDurationMs?: number;\n}\n\nexport interface TraceContractToolRules {\n /**\n * Unconditional tool presence invariant. Every named tool must appear at least\n * once. Do not use for cache-hit or alternate-path shortcuts — prefer\n * `alternatives.anyOf` or `observations.required` when a legitimate path may\n * skip the tool.\n *\n * @see docs/TRACE-CONTRACTS.md\n */\n required?: string[];\n /** Alias of `required` (TraceContract v2 normalization). */\n requiredTools?: string[];\n forbidden?: string[];\n /** Alias of `forbidden`. */\n forbiddenTools?: string[];\n allowed?: string[];\n maxCalls?: number;\n /**\n * Required tool order expanded into adjacent pairs.\n *\n * `[A, B, C]` expands to “A before B” and “B before C”, each comparing the\n * selected `requiredOrderMode` to every pair. Unlisted intermediate tools\n * are allowed.\n *\n * TraceContract `requiredOrder` **implies presence**: every listed name is\n * added to the effective required-tool set. Low-level `createToolOrderingRule`\n * alone may still pass vacuously when an endpoint is missing.\n *\n * The default `first-occurrence` mode preserves first-occurrence encounter\n * ordering; overlapping intervals emit a non-failing warning. `happens-before`\n * requires the first before event to finish before the first after event starts.\n * `all-occurrences` applies that causal boundary to every occurrence.\n *\n * @see docs/TRACE-CONTRACTS.md\n * @beta Available through `agent-inspect/checks`. Additive changes may ship\n * in minor releases; breaking changes require a future major.\n */\n requiredOrder?: string[];\n /**\n * Ordering semantics applied to every adjacent pair in `requiredOrder`.\n * Causal modes fail closed when a required interval boundary is unavailable.\n *\n * @defaultValue `\"first-occurrence\"`\n * @beta Available through `agent-inspect/checks`.\n */\n requiredOrderMode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n /**\n * Bounded structured tool-argument checks (JSON Pointer + limited operators).\n *\n * Missing structured evidence fails closed as unevaluable (not pass).\n * Findings never embed full actual inputs.\n *\n * @experimental Additive in 6.23.\n */\n arguments?: ToolArgumentCheck[];\n /**\n * Default occurrence mode for `orderRules` when a rule omits `occurrenceMode`.\n *\n * @experimental Additive in 6.23.\n */\n defaultOccurrenceMode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n /**\n * Mixed per-pair ordering rules (additive alongside `requiredOrder`).\n *\n * @experimental Additive in 6.23.\n */\n orderRules?: Array<{\n before: string;\n after: string;\n occurrenceMode?: \"first-occurrence\" | \"happens-before\" | \"all-occurrences\";\n requireEndpoints?: boolean;\n }>;\n}\n\nexport interface TraceContractLlmRules {\n maxCalls?: number;\n maxTotalTokens?: number;\n allowedModels?: string[];\n}\n\n/**\n * Structural provenance requirements for named observed outcomes (#321).\n *\n * These checks prove method/evidence linkage was recorded. They do **not**\n * prove the claim is semantically true, authorized, complete, or externally\n * trusted.\n *\n * @experimental\n */\nexport interface TraceContractObservationProvenance {\n /** Require a non-empty method from the bounded ObservedOutcomeMethod vocabulary. */\n method?: boolean;\n /**\n * Require bounded evidence references. Supported shapes:\n * `string` event id, `{ eventId }`, or `{ eventIds: string[] }` (max 16 ids).\n */\n evidence?: boolean;\n /** When true with evidence, each referenced event id must exist in the same run. */\n sameRunEventReference?: boolean;\n}\n\nexport interface TraceContractObservationRules {\n required?: string[];\n failOn?: Array<\"failed\" | \"unknown\" | \"skipped\">;\n /**\n * Structural provenance gates for `required` observation names.\n *\n * @experimental\n */\n requireProvenance?: TraceContractObservationProvenance;\n}\n\n/**\n * One deterministic alternate path. Branch contracts are one level only —\n * nested `alternatives` are rejected.\n *\n * @experimental\n */\nexport interface TraceContractAlternativeBranch {\n /** Unique branch id within `alternatives.anyOf`. */\n id: string;\n description?: string;\n /** Branch body: run/tools/llm/observations only (no nested alternatives). */\n contract: TraceContractBody;\n}\n\n/**\n * Bounded alternative valid paths for legitimate shortcuts (GitHub #309).\n *\n * @experimental\n */\nexport interface TraceContractAlternatives {\n /**\n * One level of named branches. The overall contract passes when the base\n * rules pass and **at least one** complete branch passes.\n */\n anyOf: TraceContractAlternativeBranch[];\n}\n\n/** Contract body without alternatives (base or branch). */\nexport type TraceContractBody = {\n run?: TraceContractRunRules;\n tools?: TraceContractToolRules;\n llm?: TraceContractLlmRules;\n observations?: TraceContractObservationRules;\n /**\n * Declared-versus-enforced control invariants.\n *\n * @experimental Additive in 6.23.\n */\n controls?: TraceContractControlRules;\n /**\n * Retry / side-effect safety using explicit attempt identity.\n *\n * @experimental Additive in 6.23.\n */\n retry?: TraceContractRetryRules;\n};\n\nexport interface TraceContractInput extends TraceContractBody {\n /**\n * Optional actor/run projection applied before evaluation (#320).\n *\n * @experimental\n */\n scope?: TraceContractScope;\n alternatives?: TraceContractAlternatives;\n}\n\nexport interface TraceContract extends TraceContractBody {\n /**\n * Optional actor/run projection applied before evaluation (#320).\n *\n * @experimental\n */\n scope?: TraceContractScope;\n alternatives?: TraceContractAlternatives;\n}\n\n/**\n * Lint diagnostic for brittle or invalid TraceContract shapes.\n *\n * @experimental\n */\nexport interface TraceContractLintDiagnostic {\n code: string;\n severity: \"error\" | \"warning\" | \"info\";\n message: string;\n path?: string;\n}\n\nfunction normalizeStatus(status: string): \"ok\" | \"error\" | \"running\" {\n if (status === \"ok\" || status === \"error\" || status === \"running\") return status;\n if (status === \"success\") return \"ok\";\n if (status === \"failed\") return \"error\";\n return \"error\";\n}\n\nfunction cloneBody(body: TraceContractBody): TraceContractBody {\n return {\n ...(body.run ? { run: { ...body.run } } : {}),\n ...(body.tools\n ? {\n tools: {\n ...body.tools,\n ...(body.tools.arguments ? { arguments: body.tools.arguments.map((item) => ({ ...item })) } : {}),\n ...(body.tools.orderRules\n ? { orderRules: body.tools.orderRules.map((item) => ({ ...item })) }\n : {}),\n },\n }\n : {}),\n ...(body.llm ? { llm: { ...body.llm } } : {}),\n ...(body.observations\n ? {\n observations: {\n ...body.observations,\n ...(body.observations.requireProvenance\n ? { requireProvenance: { ...body.observations.requireProvenance } }\n : {}),\n },\n }\n : {}),\n ...(body.controls\n ? {\n controls: {\n ...body.controls,\n ...(body.controls.declaredTools\n ? { declaredTools: [...body.controls.declaredTools] }\n : {}),\n ...(body.controls.enforcedTools\n ? { enforcedTools: [...body.controls.enforcedTools] }\n : {}),\n ...(body.controls.requiredStages\n ? { requiredStages: body.controls.requiredStages.map((item) => ({ ...item })) }\n : {}),\n },\n }\n : {}),\n ...(body.retry\n ? {\n retry: {\n ...body.retry,\n ...(body.retry.nonIdempotentTools\n ? { nonIdempotentTools: [...body.retry.nonIdempotentTools] }\n : {}),\n },\n }\n : {}),\n };\n}\n\nfunction bodyHasRules(body: TraceContractBody): boolean {\n return (\n body.run !== undefined ||\n body.tools !== undefined ||\n body.llm !== undefined ||\n body.observations !== undefined ||\n body.controls !== undefined ||\n body.retry !== undefined\n );\n}\n\nconst MAX_EVIDENCE_EVENT_IDS = 16;\nconst METHOD_VOCABULARY = new Set<string>(OBSERVED_OUTCOME_METHODS);\n\ntype EvidenceRefParse =\n | { status: \"missing\" }\n | { status: \"invalid\"; reason: string }\n | { status: \"ok\"; eventIds: string[] };\n\nfunction parseEvidenceEventIds(evidence: unknown): EvidenceRefParse {\n if (evidence === undefined || evidence === null) {\n return { status: \"missing\" };\n }\n if (typeof evidence === \"string\") {\n const trimmed = evidence.trim();\n if (trimmed === \"\") {\n return { status: \"invalid\", reason: \"empty evidence string\" };\n }\n return { status: \"ok\", eventIds: [trimmed] };\n }\n if (typeof evidence !== \"object\" || Array.isArray(evidence)) {\n return {\n status: \"invalid\",\n reason: \"evidence must be a string event id or { eventId } / { eventIds }\",\n };\n }\n const record = evidence as Record<string, unknown>;\n if (typeof record.eventId === \"string\") {\n const trimmed = record.eventId.trim();\n if (trimmed === \"\") {\n return { status: \"invalid\", reason: \"empty evidence.eventId\" };\n }\n return { status: \"ok\", eventIds: [trimmed] };\n }\n if (Array.isArray(record.eventIds)) {\n if (record.eventIds.length === 0) {\n return { status: \"invalid\", reason: \"empty evidence.eventIds\" };\n }\n if (record.eventIds.length > MAX_EVIDENCE_EVENT_IDS) {\n return {\n status: \"invalid\",\n reason: `evidence.eventIds exceeds bound of ${MAX_EVIDENCE_EVENT_IDS}`,\n };\n }\n const eventIds: string[] = [];\n for (const item of record.eventIds) {\n if (typeof item !== \"string\" || item.trim() === \"\") {\n return { status: \"invalid\", reason: \"evidence.eventIds contains a non-string id\" };\n }\n eventIds.push(item.trim());\n }\n return { status: \"ok\", eventIds };\n }\n return {\n status: \"invalid\",\n reason: \"evidence must include eventId or eventIds\",\n };\n}\n\nfunction provenanceFindingsForOutcome(\n outcome: ObservedOutcome,\n requireProvenance: TraceContractObservationProvenance,\n knownEventIds: ReadonlySet<string>,\n): TraceCheckFinding[] {\n const findings: TraceCheckFinding[] = [];\n const evidenceBase: TraceCheckEvidence[] = [\n {\n runId: outcome.runId,\n eventId: outcome.outcomeId,\n kind: \"OUTCOME\",\n name: outcome.name,\n path: `outcome.${outcome.name}`,\n },\n ];\n\n if (requireProvenance.method) {\n if (outcome.method === undefined || outcome.method.trim() === \"\") {\n findings.push(\n contractFailFinding(\n \"contract.observation.provenance.method\",\n `Observation ${outcome.name} is missing a structural method.`,\n evidenceBase,\n { method: true },\n { name: outcome.name, method: outcome.method ?? null },\n ),\n );\n } else if (!METHOD_VOCABULARY.has(outcome.method)) {\n findings.push(\n contractFailFinding(\n \"contract.observation.provenance.method\",\n `Observation ${outcome.name} method ${outcome.method} is outside the bounded ObservedOutcomeMethod vocabulary.`,\n evidenceBase,\n { methodVocabulary: [...OBSERVED_OUTCOME_METHODS] },\n { name: outcome.name, method: outcome.method },\n ),\n );\n }\n }\n\n if (requireProvenance.evidence || requireProvenance.sameRunEventReference) {\n const parsed = parseEvidenceEventIds(outcome.evidence);\n if (parsed.status === \"missing\") {\n findings.push(\n contractFailFinding(\n \"contract.observation.provenance.evidence\",\n `Observation ${outcome.name} is missing bounded evidence references.`,\n evidenceBase,\n { evidence: true },\n { name: outcome.name, evidence: null },\n ),\n );\n } else if (parsed.status === \"invalid\") {\n findings.push(\n contractFailFinding(\n \"contract.observation.provenance.evidence\",\n `Observation ${outcome.name} evidence is not a bounded event reference (${parsed.reason}).`,\n evidenceBase,\n { evidence: true },\n { name: outcome.name, reason: parsed.reason },\n ),\n );\n } else if (requireProvenance.sameRunEventReference) {\n const missing = parsed.eventIds.filter((eventId) => !knownEventIds.has(eventId));\n if (missing.length > 0) {\n findings.push(\n contractFailFinding(\n \"contract.observation.provenance.same-run\",\n `Observation ${outcome.name} references event ids missing from the same run: ${missing.join(\", \")}.`,\n evidenceBase,\n { sameRunEventReference: true, eventIds: parsed.eventIds },\n { name: outcome.name, missing },\n ),\n );\n }\n }\n }\n\n return findings;\n}\n\nfunction contractToRules(contract: TraceContractBody): TraceCheckRule[] {\n const rules: TraceCheckRule[] = [];\n\n const allowedStatuses = contract.run?.allowedStatuses ?? [];\n if (allowedStatuses.length === 1) {\n rules.push(\n createRunStatusRule({\n expected: normalizeStatus(allowedStatuses[0]!),\n allowIncomplete: contract.run?.requireCompleted === false,\n }),\n );\n } else if (allowedStatuses.length > 1) {\n const expected = [...new Set(allowedStatuses.map(normalizeStatus))];\n const allowIncomplete = contract.run?.requireCompleted === false;\n rules.push({\n id: \"contract.run.allowedStatuses\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const findings: TraceCheckFinding[] = [];\n const actual = context.selectedRun?.status ?? \"unknown\";\n if (!expected.includes(actual as \"ok\" | \"error\" | \"running\")) {\n findings.push(\n contractFailFinding(\n \"contract.run.allowedStatuses\",\n `Run status ${actual} is not one of the allowed statuses: ${expected.join(\", \")}.`,\n context.selectedRun\n ? [\n {\n runId: context.selectedRun.runId,\n kind: \"RUN\",\n name: context.selectedRun.name,\n status: context.selectedRun.status,\n },\n ]\n : [],\n expected,\n actual,\n ),\n );\n }\n if (!allowIncomplete) {\n const running = (context.logicalEvents ?? context.events).filter(\n (event) => event.status === \"running\",\n );\n if (running.length > 0) {\n findings.push(\n contractFailFinding(\n \"contract.run.allowedStatuses\",\n \"Run contains incomplete running events.\",\n running.map((event) => ({\n runId: event.runId,\n eventId: event.eventId,\n kind: event.kind,\n name: event.name,\n status: event.status,\n })),\n \"no running events\",\n running.length,\n ),\n );\n }\n }\n return findings;\n },\n });\n } else if (contract.run?.requireCompleted !== false) {\n rules.push(createRunStatusRule({ allowIncomplete: false }));\n }\n\n if (contract.run?.maxDurationMs !== undefined) {\n rules.push(createRunDurationRule({ maxDurationMs: contract.run.maxDurationMs }));\n }\n\n if (contract.run?.requireCompleted === true) {\n rules.push(createStructureIncompleteRule({ requireEndedAtForStarted: true }));\n }\n\n if (contract.tools) {\n const order = contract.tools.requiredOrder ?? [];\n const requiredOrderMode = contract.tools.requiredOrderMode ?? \"first-occurrence\";\n const orderRules = contract.tools.orderRules ?? [];\n const endpointRequired = orderRules\n .filter((rule) => rule.requireEndpoints !== false)\n .flatMap((rule) => [rule.before, rule.after]);\n const required = [\n ...new Set([\n ...(contract.tools.required ?? []),\n ...(contract.tools.requiredTools ?? []),\n ...order,\n ...endpointRequired,\n ]),\n ];\n const forbidden = [\n ...(contract.tools.forbidden ?? []),\n ...(contract.tools.forbiddenTools ?? []),\n ];\n rules.push(\n createToolUsageRule({\n ...(required.length > 0 ? { required } : {}),\n ...(forbidden.length > 0 ? { forbidden } : {}),\n ...(contract.tools.allowed ? { allowed: contract.tools.allowed } : {}),\n ...(contract.tools.maxCalls !== undefined ? { maxCount: contract.tools.maxCalls } : {}),\n }),\n );\n for (let i = 0; i < order.length - 1; i += 1) {\n rules.push(\n createToolOrderingRule({\n before: order[i]!,\n after: order[i + 1]!,\n id: `contract.tool.order.${i}`,\n mode: requiredOrderMode,\n }),\n );\n }\n const defaultOccurrenceMode =\n contract.tools.defaultOccurrenceMode ?? requiredOrderMode;\n for (const [index, rule] of orderRules.entries()) {\n rules.push(\n createToolOrderingRule({\n before: rule.before,\n after: rule.after,\n id: `contract.tool.orderRule.${index}`,\n mode: rule.occurrenceMode ?? defaultOccurrenceMode,\n }),\n );\n }\n const argumentChecks = contract.tools.arguments ?? [];\n if (argumentChecks.length > 0) {\n rules.push({\n id: \"contract.tool.arguments\",\n category: \"tool\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const tools = (context.logicalEvents ?? context.events).filter(\n (event) => event.kind === \"TOOL\" && event.status !== \"running\",\n );\n const findings: TraceCheckFinding[] = [];\n for (const [index, check] of argumentChecks.entries()) {\n const matches = tools.filter(\n (event) => resolveCanonicalToolName(event) === check.tool,\n );\n if (matches.length === 0) {\n findings.push(\n contractFailFinding(\n `contract.tool.arguments.${index}`,\n `No finished tool named ${check.tool} for argument check.`,\n context.selectedRun\n ? [\n {\n runId: context.selectedRun.runId,\n kind: \"RUN\",\n name: context.selectedRun.name,\n },\n ]\n : [],\n { tool: check.tool, path: check.path },\n { toolCount: 0 },\n ),\n );\n continue;\n }\n const occurrence = check.occurrence ?? \"all\";\n const selected =\n occurrence === \"first\"\n ? [matches[0]!]\n : occurrence === \"last\"\n ? [matches[matches.length - 1]!]\n : matches;\n const results = selected.map((event) => {\n const payload = extractToolArgumentPayload(event);\n return evaluateToolArgumentValue(\n payload.value,\n check,\n payload.present,\n );\n });\n if (occurrence === \"any\") {\n if (results.some((result) => result.status === \"pass\")) continue;\n const firstFail = results.find((result) => result.status !== \"pass\")!;\n findings.push(\n contractFailFinding(\n `contract.tool.arguments.${index}`,\n firstFail.message,\n selected.slice(0, 1).map((event) => ({\n runId: event.runId,\n eventId: event.eventId,\n kind: event.kind,\n name: event.name,\n path: `tool.${check.tool}${check.path}`,\n })),\n { tool: check.tool, path: check.path, operator: check.operator },\n { code: firstFail.code },\n ),\n );\n continue;\n }\n for (const [selIndex, result] of results.entries()) {\n if (result.status === \"pass\") continue;\n const event = selected[selIndex]!;\n findings.push(\n contractFailFinding(\n `contract.tool.arguments.${index}`,\n result.message,\n [\n {\n runId: event.runId,\n eventId: event.eventId,\n kind: event.kind,\n name: event.name,\n path: `tool.${check.tool}${check.path}`,\n },\n ],\n { tool: check.tool, path: check.path, operator: check.operator },\n { code: result.code },\n ),\n );\n }\n }\n return findings;\n },\n });\n }\n }\n\n if (contract.llm) {\n rules.push(\n createLlmUsageRule({\n ...(contract.llm.maxCalls !== undefined ? { maxCalls: contract.llm.maxCalls } : {}),\n ...(contract.llm.maxTotalTokens !== undefined\n ? { maxTotalTokens: contract.llm.maxTotalTokens }\n : {}),\n ...(contract.llm.allowedModels ? { allowedModels: contract.llm.allowedModels } : {}),\n }),\n );\n }\n\n if (contract.observations) {\n const required = contract.observations.required ?? [];\n if (required.length > 0) {\n rules.push({\n id: \"contract.observation.required\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const outcomes = extractOutcomesFromPersistedEvents(context.events);\n const names = new Set(outcomes.map((item) => item.name));\n const missing = required.filter((name) => !names.has(name));\n if (missing.length === 0) return [];\n return [\n contractFailFinding(\n \"contract.observation.required\",\n `Required observations missing: ${missing.join(\", \")}`,\n context.selectedRun\n ? [{ runId: context.selectedRun.runId, kind: \"RUN\", name: context.selectedRun.name }]\n : [],\n required,\n [...names],\n ),\n ];\n },\n });\n }\n if (contract.observations.failOn?.length) {\n rules.push(\n createObservedOutcomeRule({\n failOn: contract.observations.failOn.filter(\n (status): status is \"failed\" | \"unknown\" | \"skipped\" =>\n status === \"failed\" || status === \"unknown\" || status === \"skipped\",\n ),\n }),\n );\n }\n const requireProvenance = contract.observations.requireProvenance;\n if (\n requireProvenance &&\n (requireProvenance.method ||\n requireProvenance.evidence ||\n requireProvenance.sameRunEventReference)\n ) {\n rules.push({\n id: \"contract.observation.provenance\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const outcomes = extractOutcomesFromPersistedEvents(context.events);\n const knownEventIds = new Set(context.events.map((event) => event.eventId));\n const targets =\n required.length > 0\n ? outcomes.filter((outcome) => required.includes(outcome.name))\n : outcomes;\n return targets.flatMap((outcome) =>\n provenanceFindingsForOutcome(outcome, requireProvenance, knownEventIds),\n );\n },\n });\n }\n }\n\n if (contract.controls) {\n const controls = contract.controls;\n rules.push({\n id: \"contract.controls\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const events = context.logicalEvents ?? context.events;\n const outcomes = extractOutcomesFromPersistedEvents(context.events);\n const observationNames = new Set(outcomes.map((item) => item.name));\n const runEvidence: TraceCheckEvidence[] = context.selectedRun\n ? [\n {\n runId: context.selectedRun.runId,\n kind: \"RUN\",\n name: context.selectedRun.name,\n },\n ]\n : [];\n return evaluateControlRules(events, controls, runEvidence, observationNames);\n },\n });\n }\n\n if (contract.retry) {\n const retry = contract.retry;\n rules.push({\n id: \"contract.retry\",\n category: \"run\",\n defaultSeverity: \"error\",\n evaluate(context) {\n const events = context.logicalEvents ?? context.events;\n const runEvidence: TraceCheckEvidence[] = context.selectedRun\n ? [\n {\n runId: context.selectedRun.runId,\n kind: \"RUN\",\n name: context.selectedRun.name,\n },\n ]\n : [];\n return evaluateRetrySafetyRules(events, retry, runEvidence);\n },\n });\n }\n\n return rules;\n}\n\nfunction validateScopeShape(\n scope: TraceContractScope | undefined,\n): TraceContractLintDiagnostic[] {\n if (scope === undefined) return [];\n const hasSelector =\n (typeof scope.runId === \"string\" && scope.runId.trim() !== \"\") ||\n (typeof scope.subAgentId === \"string\" && scope.subAgentId.trim() !== \"\") ||\n (typeof scope.groupId === \"string\" && scope.groupId.trim() !== \"\") ||\n (typeof scope.workflowStep === \"string\" && scope.workflowStep.trim() !== \"\") ||\n (typeof scope.rootEventId === \"string\" && scope.rootEventId.trim() !== \"\");\n if (!hasSelector) {\n return [\n {\n code: \"contract.scope.empty\",\n severity: \"error\",\n message:\n \"scope requires at least one explicit selector (runId, subAgentId, groupId, workflowStep, or rootEventId).\",\n path: \"scope\",\n },\n ];\n }\n return [];\n}\n\nfunction validateProvenanceShape(\n observations: TraceContractObservationRules | undefined,\n): TraceContractLintDiagnostic[] {\n const diagnostics: TraceContractLintDiagnostic[] = [];\n const provenance = observations?.requireProvenance;\n if (!provenance) return diagnostics;\n const enabled =\n provenance.method === true ||\n provenance.evidence === true ||\n provenance.sameRunEventReference === true;\n if (!enabled) {\n diagnostics.push({\n code: \"contract.observation.provenance.empty\",\n severity: \"warning\",\n message: \"observations.requireProvenance is set but no flags are enabled.\",\n path: \"observations.requireProvenance\",\n });\n }\n if (provenance.sameRunEventReference === true && provenance.evidence !== true) {\n diagnostics.push({\n code: \"contract.observation.provenance.same-run-without-evidence\",\n severity: \"info\",\n message:\n \"sameRunEventReference implies evidence checking; set requireProvenance.evidence: true for clarity.\",\n path: \"observations.requireProvenance.sameRunEventReference\",\n });\n }\n if (enabled && (observations?.required?.length ?? 0) === 0) {\n diagnostics.push({\n code: \"contract.observation.provenance.without-required\",\n severity: \"warning\",\n message:\n \"requireProvenance without observations.required applies to every observed outcome in scope.\",\n path: \"observations.requireProvenance\",\n });\n }\n return diagnostics;\n}\n\nfunction validateAlternativesShape(\n alternatives: TraceContractAlternatives | undefined,\n): TraceContractLintDiagnostic[] {\n const diagnostics: TraceContractLintDiagnostic[] = [];\n if (alternatives === undefined) return diagnostics;\n const branches = alternatives.anyOf ?? [];\n if (branches.length === 0) {\n diagnostics.push({\n code: \"contract.alternatives.empty\",\n severity: \"error\",\n message: \"alternatives.anyOf must contain at least one branch.\",\n path: \"alternatives.anyOf\",\n });\n return diagnostics;\n }\n const seen = new Set<string>();\n for (const [index, branch] of branches.entries()) {\n const path = `alternatives.anyOf[${index}]`;\n if (!branch?.id || branch.id.trim() === \"\") {\n diagnostics.push({\n code: \"contract.alternatives.missing-id\",\n severity: \"error\",\n message: \"Each alternatives.anyOf branch requires a non-empty id.\",\n path,\n });\n continue;\n }\n if (seen.has(branch.id)) {\n diagnostics.push({\n code: \"contract.alternatives.duplicate-id\",\n severity: \"error\",\n message: `Duplicate alternatives.anyOf branch id: ${branch.id}`,\n path: `${path}.id`,\n });\n }\n seen.add(branch.id);\n if (!bodyHasRules(branch.contract ?? {})) {\n diagnostics.push({\n code: \"contract.alternatives.empty-branch\",\n severity: \"error\",\n message: `Branch ${branch.id} must declare at least one run/tools/llm/observations/controls/retry rule.`,\n path: `${path}.contract`,\n });\n }\n const nested = (branch.contract as TraceContractBody & { alternatives?: unknown })\n ?.alternatives;\n if (nested !== undefined) {\n diagnostics.push({\n code: \"contract.alternatives.nested\",\n severity: \"error\",\n message:\n \"Nested alternatives.anyOf is not supported. Keep one alternatives level only.\",\n path: `${path}.contract.alternatives`,\n });\n }\n }\n return diagnostics;\n}\n\nfunction emptyPassResult(input: TraceCheckInput, runId?: string): TraceCheckResult {\n return {\n ok: true,\n status: \"pass\",\n format: input.read.format,\n ...(runId !== undefined ? { runId } : {}),\n summary: { passed: 0, failed: 0, warnings: 0, errors: 0, rulesEvaluated: 0 },\n findings: [],\n diagnostics: [],\n ruleExecutions: [],\n };\n}\n\nfunction mergeContractResults(\n input: TraceCheckInput,\n parts: readonly TraceCheckResult[],\n extraFindings: readonly TraceCheckFinding[] = [],\n): TraceCheckResult {\n const findings = [...parts.flatMap((part) => part.findings), ...extraFindings];\n const diagnostics = parts.flatMap((part) => part.diagnostics);\n const ruleExecutions = parts.flatMap((part) => part.ruleExecutions);\n const failed = findings.filter(\n (finding) => finding.status === \"fail\" && finding.severity === \"error\",\n ).length;\n const errors = diagnostics.filter((item) => item.severity === \"error\").length;\n const status: TraceCheckResult[\"status\"] =\n errors > 0 ? \"error\" : failed > 0 ? \"fail\" : \"pass\";\n const runId = parts.find((part) => part.runId !== undefined)?.runId;\n return {\n ok: status === \"pass\",\n status,\n format: input.read.format,\n ...(runId !== undefined ? { runId } : {}),\n summary: {\n passed: findings.filter((finding) => finding.status === \"pass\").length,\n failed,\n warnings: findings.filter(\n (finding) => finding.status === \"warning\" || finding.severity === \"warning\",\n ).length,\n errors,\n rulesEvaluated: ruleExecutions.length,\n },\n findings,\n diagnostics,\n ruleExecutions,\n };\n}\n\nfunction evaluateBody(\n input: TraceCheckInput,\n body: TraceContractBody,\n options: { runId?: string } = {},\n): TraceCheckResult {\n const rules = contractToRules(body);\n if (rules.length === 0) {\n return emptyPassResult(input, options.runId);\n }\n return runTraceChecks(input, {\n rules,\n ...(options.runId !== undefined ? { runId: options.runId } : {}),\n });\n}\n\n/**\n * Define a normalized trace contract object.\n *\n * @experimental\n */\nexport function defineTraceContract(input: TraceContractInput): TraceContract {\n const shapeErrors = [\n ...validateAlternativesShape(input.alternatives),\n ...validateScopeShape(input.scope),\n ...validateProvenanceShape(input.observations),\n ].filter((item) => item.severity === \"error\");\n if (shapeErrors.length > 0) {\n throw new TypeError(shapeErrors.map((item) => item.message).join(\" \"));\n }\n const body = cloneBody(input);\n const alternatives = input.alternatives\n ? {\n anyOf: input.alternatives.anyOf.map((branch) => ({\n id: branch.id,\n ...(branch.description !== undefined ? { description: branch.description } : {}),\n contract: cloneBody(branch.contract),\n })),\n }\n : undefined;\n const scope = input.scope\n ? {\n ...(input.scope.runId !== undefined ? { runId: input.scope.runId } : {}),\n ...(input.scope.subAgentId !== undefined ? { subAgentId: input.scope.subAgentId } : {}),\n ...(input.scope.groupId !== undefined ? { groupId: input.scope.groupId } : {}),\n ...(input.scope.workflowStep !== undefined\n ? { workflowStep: input.scope.workflowStep }\n : {}),\n ...(input.scope.rootEventId !== undefined\n ? { rootEventId: input.scope.rootEventId }\n : {}),\n }\n : undefined;\n return {\n ...body,\n ...(scope ? { scope } : {}),\n ...(alternatives ? { alternatives } : {}),\n };\n}\n\n/**\n * Evaluate a trace contract against an opened trace read result.\n *\n * Base rules always apply. When `alternatives.anyOf` is present, at least one\n * complete branch must also pass.\n *\n * @experimental\n */\nexport function evaluateTraceContract(\n input: TraceCheckInput,\n contract: TraceContract,\n options: { runId?: string } = {},\n): TraceCheckResult {\n const shapeErrors = [\n ...validateAlternativesShape(contract.alternatives),\n ...validateScopeShape(contract.scope),\n ...validateProvenanceShape(contract.observations),\n ].filter((item) => item.severity === \"error\");\n if (shapeErrors.length > 0) {\n return {\n ok: false,\n status: \"error\",\n format: input.read.format,\n ...(options.runId !== undefined ? { runId: options.runId } : {}),\n summary: {\n passed: 0,\n failed: 0,\n warnings: 0,\n errors: shapeErrors.length,\n rulesEvaluated: 0,\n },\n findings: [],\n diagnostics: shapeErrors.map((item) => ({\n code: \"AI_CHECK_INVALID_CONFIG\",\n message: item.message,\n severity: \"error\" as const,\n ruleId: item.code,\n })),\n ruleExecutions: [],\n };\n }\n\n const scoped = resolveTraceContractScope(input, contract.scope);\n if (scoped.diagnostics.length > 0) {\n return {\n ok: false,\n status: \"error\",\n format: input.read.format,\n ...(options.runId !== undefined ? { runId: options.runId } : {}),\n ...(scoped.resolved?.runId !== undefined ? { runId: scoped.resolved.runId } : {}),\n summary: {\n passed: 0,\n failed: 0,\n warnings: 0,\n errors: scoped.diagnostics.length,\n rulesEvaluated: 0,\n },\n findings: [],\n diagnostics: scoped.diagnostics,\n ruleExecutions: [],\n };\n }\n\n const effectiveInput = scoped.resolved?.input ?? input;\n const effectiveRunId = scoped.resolved?.runId ?? options.runId;\n const base = evaluateBody(effectiveInput, contract, {\n ...(effectiveRunId !== undefined ? { runId: effectiveRunId } : {}),\n });\n const scopeFinding: TraceCheckFinding | undefined = scoped.resolved\n ? {\n ruleId: \"contract.scope.selected\",\n severity: \"info\",\n status: \"pass\",\n message: `Selected actor ${scoped.resolved.runId} with ${scoped.resolved.evidenceEventCount} evidence event(s).`,\n expected: scoped.resolved.matchedSelectors,\n actual: {\n runId: scoped.resolved.runId,\n evidenceEventCount: scoped.resolved.evidenceEventCount,\n ...(scoped.resolved.rootEventId !== undefined\n ? { rootEventId: scoped.resolved.rootEventId }\n : {}),\n },\n evidence: [\n {\n runId: scoped.resolved.runId,\n kind: \"RUN\",\n path: \"scope\",\n },\n ],\n }\n : undefined;\n\n const branches = contract.alternatives?.anyOf ?? [];\n if (branches.length === 0) {\n return scopeFinding\n ? mergeContractResults(effectiveInput, [base], [scopeFinding])\n : base;\n }\n\n const branchEvaluations = branches.map((branch) => {\n const result = evaluateBody(effectiveInput, branch.contract, {\n ...(effectiveRunId !== undefined ? { runId: effectiveRunId } : {}),\n });\n return { branch, result };\n });\n const satisfied = branchEvaluations\n .filter((item) => item.result.ok && item.result.status === \"pass\")\n .map((item) => item.branch.id);\n const failedBranches = branchEvaluations.filter(\n (item) => !(item.result.ok && item.result.status === \"pass\"),\n );\n\n if (satisfied.length > 0) {\n const passFinding: TraceCheckFinding = {\n ruleId: \"contract.alternatives.anyOf\",\n severity: \"info\",\n status: \"pass\",\n message: `Satisfied alternative branch(es): ${satisfied.join(\", \")}.`,\n expected: { anyOf: branches.map((branch) => branch.id) },\n actual: {\n satisfied,\n failed: failedBranches.map((item) => item.branch.id),\n },\n evidence: [],\n };\n return mergeContractResults(\n effectiveInput,\n [base],\n [...(scopeFinding ? [scopeFinding] : []), passFinding],\n );\n }\n\n const noneFinding: TraceCheckFinding = {\n ruleId: \"contract.alternatives.none-satisfied\",\n severity: \"error\",\n status: \"fail\",\n message: \"No alternatives.anyOf branch fully satisfied its contract.\",\n expected: { anyOf: branches.map((branch) => branch.id) },\n actual: {\n branchFailures: Object.fromEntries(\n failedBranches.map((item) => [\n item.branch.id,\n item.result.findings\n .filter((finding) => finding.status === \"fail\")\n .map((finding) => ({\n ruleId: finding.ruleId,\n message: finding.message,\n })),\n ]),\n ),\n },\n evidence: [],\n };\n const prefixedBranchFindings = failedBranches.flatMap((item) =>\n item.result.findings\n .filter((finding) => finding.status === \"fail\")\n .map((finding) => ({\n ...finding,\n ruleId: `contract.alternatives.${item.branch.id}.${finding.ruleId}`,\n })),\n );\n return mergeContractResults(\n effectiveInput,\n [base],\n [...(scopeFinding ? [scopeFinding] : []), noneFinding, ...prefixedBranchFindings],\n );\n}\n\n/**\n * Convenience: evaluate a contract against a TraceReadResult directly.\n *\n * @experimental Additive wrapper over `evaluateTraceContract({ read }, …)`.\n */\nexport function evaluateTraceContractRead(\n read: TraceReadResult,\n contract: TraceContract,\n options: { runId?: string } = {},\n): TraceCheckResult {\n return evaluateTraceContract({ read }, contract, options);\n}\n\n/**\n * Lint a TraceContract for invalid or brittle shapes (does not evaluate a trace).\n *\n * @experimental\n */\nexport function lintTraceContract(contract: TraceContract): TraceContractLintDiagnostic[] {\n const diagnostics = [\n ...validateAlternativesShape(contract.alternatives),\n ...validateScopeShape(contract.scope),\n ...validateProvenanceShape(contract.observations),\n ];\n const branches = contract.alternatives?.anyOf ?? [];\n if (branches.length === 1) {\n diagnostics.push({\n code: \"contract.alternatives.single-branch\",\n severity: \"warning\",\n message:\n \"alternatives.anyOf has a single branch. Prefer base rules unless a second valid path exists.\",\n path: \"alternatives.anyOf\",\n });\n }\n const required = [\n ...(contract.tools?.required ?? []),\n ...(contract.tools?.requiredTools ?? []),\n ];\n if (required.length > 0 && branches.length === 0) {\n diagnostics.push({\n code: \"contract.brittle.unconditional-required\",\n severity: \"info\",\n message:\n \"tools.required is unconditional. Use alternatives.anyOf when a legitimate shortcut may skip a tool.\",\n path: \"tools.required\",\n });\n }\n const order = contract.tools?.requiredOrder ?? [];\n if (order.length >= 2 && contract.tools?.requiredOrderMode === undefined) {\n diagnostics.push({\n code: \"contract.brittle.first-occurrence-default\",\n severity: \"info\",\n message:\n \"requiredOrder defaults to first-occurrence. Set requiredOrderMode when repeated calls must fail.\",\n path: \"tools.requiredOrderMode\",\n });\n }\n const orderRules = contract.tools?.orderRules ?? [];\n const seenPairs = new Set<string>();\n for (const [index, rule] of orderRules.entries()) {\n const key = `${rule.before}\\0${rule.after}`;\n if (seenPairs.has(key)) {\n diagnostics.push({\n code: \"contract.tools.orderRules.duplicate\",\n severity: \"warning\",\n message: `Duplicate orderRules pair ${rule.before} → ${rule.after}.`,\n path: `tools.orderRules[${index}]`,\n });\n }\n seenPairs.add(key);\n if (rule.before === rule.after) {\n diagnostics.push({\n code: \"contract.tools.orderRules.self\",\n severity: \"error\",\n message: \"orderRules before and after must differ.\",\n path: `tools.orderRules[${index}]`,\n });\n }\n }\n if ((contract.tools?.arguments?.length ?? 0) > 0) {\n for (const [index, check] of (contract.tools?.arguments ?? []).entries()) {\n if (!check.path.startsWith(\"/\") && check.path !== \"\") {\n diagnostics.push({\n code: \"contract.tools.arguments.path\",\n severity: \"error\",\n message: \"tools.arguments path must be a JSON Pointer (\\\"\\\" or start with \\\"/\\\").\",\n path: `tools.arguments[${index}].path`,\n });\n }\n }\n }\n return diagnostics;\n}\n\n/**\n * Explain a TraceContract as short human-readable lines (does not evaluate a trace).\n *\n * @experimental\n */\nexport function explainTraceContract(contract: TraceContract): string[] {\n const lines: string[] = [];\n if (contract.scope) {\n const parts = Object.entries(contract.scope)\n .filter(([, value]) => typeof value === \"string\" && value.trim() !== \"\")\n .map(([key, value]) => `${key}=${value}`);\n if (parts.length > 0) {\n lines.push(`Scope: select actor by [${parts.join(\", \")}] before evaluation.`);\n }\n }\n if (contract.run?.requireCompleted !== false) {\n lines.push(\"Base: run must complete (no running events).\");\n }\n if (contract.run?.allowedStatuses?.length) {\n lines.push(`Base: run status in [${contract.run.allowedStatuses.join(\", \")}].`);\n }\n if (contract.run?.maxDurationMs !== undefined) {\n lines.push(`Base: run duration <= ${contract.run.maxDurationMs}ms.`);\n }\n if (contract.tools) {\n const required = [\n ...new Set([\n ...(contract.tools.required ?? []),\n ...(contract.tools.requiredTools ?? []),\n ...(contract.tools.requiredOrder ?? []),\n ]),\n ];\n if (required.length > 0) {\n lines.push(`Base: required tools [${required.join(\", \")}].`);\n }\n const forbidden = [\n ...(contract.tools.forbidden ?? []),\n ...(contract.tools.forbiddenTools ?? []),\n ];\n if (forbidden.length > 0) {\n lines.push(`Base: forbidden tools [${forbidden.join(\", \")}].`);\n }\n if ((contract.tools.requiredOrder?.length ?? 0) >= 2) {\n const mode = contract.tools.requiredOrderMode ?? \"first-occurrence\";\n lines.push(\n `Base: requiredOrder [${contract.tools.requiredOrder!.join(\" → \")}] mode=${mode}.`,\n );\n }\n if ((contract.tools.orderRules?.length ?? 0) > 0) {\n const defaultMode = contract.tools.defaultOccurrenceMode ?? \"first-occurrence\";\n lines.push(\n `Base: ${contract.tools.orderRules!.length} orderRules (defaultOccurrenceMode=${defaultMode}).`,\n );\n }\n if ((contract.tools.arguments?.length ?? 0) > 0) {\n lines.push(\n `Base: ${contract.tools.arguments!.length} structured tool-argument check(s).`,\n );\n }\n }\n if (contract.llm) {\n if (contract.llm.maxCalls !== undefined) {\n lines.push(`Base: LLM maxCalls=${contract.llm.maxCalls}.`);\n }\n if (contract.llm.maxTotalTokens !== undefined) {\n lines.push(`Base: LLM maxTotalTokens=${contract.llm.maxTotalTokens}.`);\n }\n if (contract.llm.allowedModels?.length) {\n lines.push(`Base: LLM allowedModels [${contract.llm.allowedModels.join(\", \")}].`);\n }\n }\n if (contract.observations?.required?.length) {\n lines.push(`Base: required observations [${contract.observations.required.join(\", \")}].`);\n }\n if (contract.observations?.failOn?.length) {\n lines.push(`Base: fail on observations [${contract.observations.failOn.join(\", \")}].`);\n }\n if (contract.observations?.requireProvenance) {\n const flags = [\n contract.observations.requireProvenance.method ? \"method\" : undefined,\n contract.observations.requireProvenance.evidence ? \"evidence\" : undefined,\n contract.observations.requireProvenance.sameRunEventReference\n ? \"sameRunEventReference\"\n : undefined,\n ].filter((item): item is string => item !== undefined);\n if (flags.length > 0) {\n lines.push(\n `Base: require structural observation provenance [${flags.join(\", \")}] (not semantic truth).`,\n );\n }\n }\n if (contract.controls) {\n lines.push(\"Base: declared-versus-enforced control checks enabled.\");\n }\n if (contract.retry) {\n lines.push(\"Base: retry/side-effect safety checks enabled.\");\n }\n const branches = contract.alternatives?.anyOf ?? [];\n if (branches.length > 0) {\n lines.push(\n `Alternatives: at least one of [${branches.map((branch) => branch.id).join(\", \")}] must fully pass.`,\n );\n for (const branch of branches) {\n const detail = branch.description ? ` — ${branch.description}` : \"\";\n lines.push(` branch ${branch.id}${detail}`);\n }\n }\n if (lines.length === 0) {\n lines.push(\"Empty contract: no base rules and no alternatives.\");\n }\n return lines;\n}\n"]}
|