@humain/humain-code 0.3.7 → 0.4.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 +45 -0
- package/dist/bundle/agent-monitor.js +1 -1
- package/dist/bundle/chunks/bedrock-converse-stream.js +18 -17
- package/dist/bundle/chunks/{chunk-I2VOYPDI.js → chunk-2KKLZK2N.js} +1 -1
- package/dist/bundle/chunks/{chunk-UDTXD6EF.js → chunk-2Q2O3GZ4.js} +721 -717
- package/dist/bundle/chunks/{chunk-IYCS4ZUX.js → chunk-3ZI2TEVB.js} +1 -1
- package/dist/bundle/chunks/{chunk-ANSL5PYD.js → chunk-DUZY4PDA.js} +18 -18
- package/dist/bundle/chunks/{chunk-ZWHFLRTK.js → chunk-E22S6D55.js} +1 -1
- package/dist/bundle/chunks/{chunk-6PGWVVGK.js → chunk-E7WGCXWK.js} +1 -1
- package/dist/bundle/chunks/{chunk-MNB52OYZ.js → chunk-ERT2BD7V.js} +36 -36
- package/dist/bundle/chunks/{chunk-B44UVTZL.js → chunk-H5CZL7M5.js} +1 -1
- package/dist/bundle/chunks/{chunk-IPWO7ULX.js → chunk-HA5AW36V.js} +397 -356
- package/dist/bundle/chunks/{chunk-7VMWPYCR.js → chunk-IAI7MTU4.js} +3 -3
- package/dist/bundle/chunks/{chunk-6FTYU7I7.js → chunk-ICLZNV4V.js} +2 -2
- package/dist/bundle/chunks/{chunk-DMAZLWJY.js → chunk-JQZ7BIAI.js} +2 -13
- package/dist/bundle/chunks/{chunk-E6ZGTXQP.js → chunk-N23FFKJU.js} +40 -25
- package/dist/bundle/chunks/{chunk-RCJ2GKUP.js → chunk-OXJXKCLB.js} +1 -1
- package/dist/bundle/chunks/{chunk-7CYWKPFS.js → chunk-UBQSONVR.js} +9 -8
- package/dist/bundle/chunks/{chunk-LTQ2YA2G.js → chunk-VZV7GLZT.js} +2 -2
- package/dist/bundle/chunks/{chunk-FF26YENK.js → chunk-W2QRCQBX.js} +4 -3
- package/dist/bundle/chunks/{cli-JPMYGPAI.js → cli-5YRA5PFB.js} +2 -2
- package/dist/bundle/chunks/{compat-VHCHB5WQ.js → compat-TCOK5LFD.js} +1 -1
- package/dist/bundle/chunks/dist-33CBPO23.js +1928 -0
- package/dist/bundle/chunks/{easter-egg-3d-XXETTDXE.js → easter-egg-3d-ARXMB2RN.js} +1 -1
- package/dist/bundle/chunks/{esm-763X2IA7.js → esm-NCUV2DF7.js} +1 -1
- package/dist/bundle/chunks/{event-streams-4Q22QRY2.js → event-streams-CGCQQL5M.js} +1 -1
- package/dist/bundle/chunks/{execute-G3YZLU7S.js → execute-KEUC5IWA.js} +1 -1
- package/dist/bundle/chunks/{extract-SJF4DY5M.js → extract-WUAT5T4V.js} +4 -4
- package/dist/bundle/chunks/{google-generative-ai-ICWD4YIE.js → google-generative-ai-MDUVUFFQ.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-XIACVW6H.js → google-vertex-UQGG6LEW.js} +1 -1
- package/dist/bundle/chunks/{host-M54XD7HV.js → host-SPBJ4YAA.js} +1 -1
- package/dist/bundle/chunks/{node-W47VUEGE.js → node-XGNY74WT.js} +1 -1
- package/dist/bundle/chunks/{runtime-POHTHFKR.js → runtime-HBWXEJT3.js} +1 -1
- package/dist/bundle/chunks/{virtual-modules-ORGE66B4.js → virtual-modules-I5YD7JGC.js} +2 -2
- package/dist/bundle/cli-runtime.js +2 -2
- package/dist/bundle/flow/agents/.gitkeep +0 -0
- package/dist/bundle/flow/agents/orch-architect.md +33 -0
- package/dist/bundle/flow/agents/orch-implementation-fast.md +13 -0
- package/dist/bundle/flow/agents/orch-implementation-strong.md +28 -0
- package/dist/bundle/flow/agents/orch-qa-agent.md +29 -0
- package/dist/bundle/flow/agents/orch-scout.md +35 -0
- package/dist/bundle/flow/agents/orch-security-review.md +28 -0
- package/dist/bundle/flow/agents/orch-technical-lead.md +37 -0
- package/dist/bundle/flow/agents/orch-technical-review.md +28 -0
- package/dist/bundle/flow/agents/orch-worker.md +13 -0
- package/dist/bundle/flow/agents/orchestrator-lead.md +55 -0
- package/dist/bundle/flow/assets/.gitkeep +0 -0
- package/dist/bundle/flow/assets/contract.json +84 -0
- package/dist/bundle/flow/assets/forge-protocol-schema.sha256 +1 -0
- package/dist/bundle/flow/assets/method.json +193 -0
- package/dist/bundle/flow/assets/orchestrator-profiles.json +131 -0
- package/dist/bundle/flow/assets/profiles/anthropic.json +189 -0
- package/dist/bundle/flow/assets/profiles/openai.json +177 -0
- package/dist/bundle/flow/assets/profiles/oss-first.json +236 -0
- package/dist/bundle/flow/assets/profiles/premium.json +203 -0
- package/dist/bundle/flow/package.json +48 -0
- package/dist/bundle/index.js +5 -5
- package/dist/bundle/rpc-entry.js +2 -2
- package/dist/config.d.ts +17 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -2
- package/dist/config.js.map +1 -1
- package/dist/core/tools/subagent.d.ts +20 -0
- package/dist/core/tools/subagent.d.ts.map +1 -1
- package/dist/core/tools/subagent.js +124 -12
- package/dist/core/tools/subagent.js.map +1 -1
- package/dist/humain/flow-loader.d.ts +62 -0
- package/dist/humain/flow-loader.d.ts.map +1 -0
- package/dist/humain/flow-loader.js +291 -0
- package/dist/humain/flow-loader.js.map +1 -0
- package/dist/humain/index.d.ts.map +1 -1
- package/dist/humain/index.js +2 -0
- package/dist/humain/index.js.map +1 -1
- package/dist/humain/trace-capture/child-launch.d.ts +1 -0
- package/dist/humain/trace-capture/child-launch.d.ts.map +1 -1
- package/dist/humain/trace-capture/child-launch.js +2 -1
- package/dist/humain/trace-capture/child-launch.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +136 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +3 -1
- package/dist/utils/version-check.js.map +1 -1
- package/docs/docs.json +8 -0
- package/docs/environment-variables.md +1 -0
- package/docs/flow-profiles.md +173 -0
- package/docs/flow.md +112 -0
- package/docs/humain-code.md +1 -1
- package/docs/index.md +2 -0
- package/npm-shrinkwrap.json +6 -6
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EACN,qCAAqC,GAGrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAA2B,MAAM,8CAA8C,CAAC;AACjH,OAAO,EAAE,gBAAgB,EAAc,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACN,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,sBAAsB,EACtB,iCAAiC,EACjC,8BAA8B,GAK9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAyB,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACN,sBAAsB,EACtB,aAAa,GAIb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC;AACtC,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC;AA2BnC,SAAS,iBAAiB,CAAC,GAAW,EAAE,MAA0B;IACjE,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,WAAW,GAAyB,EAAE,CAAC;IAE7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACJ,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YAAE,SAAS;QAEzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACJ,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;QAED,IAAI,WAAmC,CAAC;QACxC,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACJ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAyB,OAAO,CAAC,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,yEAAyE;YACzE,mEAAmE;YACnE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC;YACtF,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/D,SAAS;QACV,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,WAAW,CAAC,WAAW,IAAI,aAAa,CAAC;iBACtF,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,OAAO,CAAC,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,0CAA0C,OAAO,EAAE;gBAC5D,IAAI,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK;YAC9B,EAAE,KAAK,CAAC,GAAG,CAAC;aACX,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;QAElB,MAAM,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACpD,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,YAAY,EAAE,IAAI;YAClB,MAAM;YACN,QAAQ;SACR,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC7B,IAAI,CAAC;QACJ,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,2BAA2B,CAAC,GAAW;IAC/C,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QACnE,IAAI,WAAW,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QAC1C,UAAU,GAAG,SAAS,CAAC;IACxB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,KAAiB;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAE1D,MAAM,WAAW,GAAqB,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACtE,MAAM,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1F,MAAM,aAAa,GAClB,KAAK,KAAK,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAEtG,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEhD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvE,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;SAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACP,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO;QACN,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,gBAAgB;QAChB,WAAW,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC;KACtE,CAAC;AACH,CAAC;AAED,6BAA6B;AAE7B,SAAS,YAAY,CAAC,KAAa;IAClC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1C,IAAI,KAAK,GAAG,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,IAAI,KAAK,GAAG,OAAO;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3D,OAAO,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,SAAS,gBAAgB,CACxB,KAQC,EACD,KAAc;IAEd,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,cAAc,CACtB,QAAgB,EAChB,IAA6B,EAC7B,OAA6C;IAE7C,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,KAAK,CAAC;YAClD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAW,CAAC;YACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAA2B,CAAC;YAC/C,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,CAAC;gBAC9B,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACzC,CAAC;QACD,KAAK,OAAO,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAW,CAAC;YACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAW,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACzC,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACpE,IAAI,KAAK,GAAG,CAAC;gBAAE,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACb,CAAC;QACD,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAW,CAAC;YACjE,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,IAAI,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAW,CAAC;YAC7C,OAAO,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,CAAW,CAAC;YAChD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAW,CAAC;YAC7C,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAW,CAAC;YAC/C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAW,CAAC;YAC7C,OAAO,CACN,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;gBACzB,OAAO,CAAC,QAAQ,EAAE,IAAI,OAAO,GAAG,CAAC;gBACjC,OAAO,CAAC,KAAK,EAAE,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAC7C,CAAC;QACH,CAAC;QACD,SAAS,CAAC;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,OAAO,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;IACF,CAAC;AACF,CAAC;AAED,yGAAyG;AACzG,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,8FAA8F;AAC9F,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAAC;AAmG1C,SAAS,oBAAoB,CAAC,IAAY,EAAE,IAAqB;IAChE,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAEtE,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAS,GACZ,IAAI,KAAK,OAAO;QACf,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;QAClD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,EAAE,CAAC;QAC1E,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;AACnE,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,OAA+B;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;QAChD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;KACxE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,OAAqB;IACxE,MAAM,KAAK,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChC,IAAI,OAAO,EAAE,KAAK,EAAE,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3G,IAAI,OAAO,EAAE,UAAU,EAAE,MAAM;QAC9B,KAAK,CAAC,IAAI,CAAC,yBAAyB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,IAAI,OAAO,EAAE,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,cAAc,CAAC,QAAmB;IAC1C,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAC,IAAI,CAAC;YAC5C,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAC,MAAgF;IACvG,OAAO,CACN,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;QAC5B,MAAM,CAAC,QAAQ,KAAK,CAAC;QACrB,MAAM,CAAC,UAAU,KAAK,OAAO;QAC7B,MAAM,CAAC,UAAU,KAAK,SAAS,CAC/B,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAA4B;IACpD,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC;IACjG,CAAC;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC;AACzD,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,UAAU,IAAI,mBAAmB;QAAE,OAAO,MAAM,CAAC;IAErD,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QACnE,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,GAAG,SAAS,0BAA0B,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,yDAAyD,CAAC;AACzJ,CAAC;AAID,SAAS,eAAe,CAAC,QAAmB;IAC3C,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;qBACnE,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5G,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAID,SAAS,gBAAgB,CAAC,MAA6B;IACtD,OAAO,YAAY,IAAI,MAAM,CAAC;AAC/B,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA6B;IAC3D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA6B;IAC1D,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvF,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,SAAiB,EAAE,MAAc;IACrE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,QAAQ,KAAK,CAAC,CAAC;IAC5D,MAAM,qBAAqB,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc;IACvC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,kBAAkB,GAAG,aAAa,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACtE,IAAI,aAAa,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/D,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC;AAoCD,SAAS,kBAAkB;IAC1B,OAAO;QACN,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,KAAK;QACf,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,KAAK;QACvB,kBAAkB,EAAE,KAAK;QACzB,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,kBAAkB,EAAE,IAAI;KACxB,CAAC;AACH,CAAC;AAiBD,KAAK,UAAU,cAAc,CAC5B,UAAkB,EAClB,MAAqB,EACrB,gBAAsC,EACtC,SAAiB,EACjB,IAAY,EACZ,GAAuB,EACvB,SAAwC,EACxC,IAAwB,EACxB,KAAyB,EACzB,WAAuB,EACvB,MAA+B,EAC/B,QAAsC,EACtC,mBAAmF,EACnF,UAAkB,EAClB,UAAkB,EAClB,OAAqB;IAErB,MAAM,UAAU,GAAG,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,aAAa,EAAE,IAAI,UAAU,CAAC;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAEvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;QACxE,MAAM,WAAW,GAChB,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAC1B,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,mDAAmD,gBAAgB;iBAC7F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,gBAAgB,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC;iBAC1D,IAAI,CAAC,IAAI,CAAC,GAAG;YAChB,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACN,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,SAAS;YACtB,IAAI;YACJ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY;YACZ,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,mBAAmB,SAAS,wBAAwB,SAAS,IAAI,WAAW,EAAE;YACtF,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAChG,IAAI;YACJ,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY;SAC3C,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,GAA4B,IAAI,CAAC;IAC7C,IAAI,uBAAqD,CAAC;IAC1D,MAAM,SAAS,GAAG,GAAG,IAAI,UAAU,CAAC;IACpC,IAAI,QAAQ,GAAG,SAAS,CAAC;IACzB,MAAM,IAAI,GAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAChE,IAAI,KAAK,EAAE,CAAC;QACX,mEAAmE;QACnE,mEAAmE;QACnE,uEAAuE;QACvE,kDAAkD;QAClD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;SAAM,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,IAAI,OAAO,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEhE,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,aAAa,GAAkB,IAAI,CAAC;IAExC,MAAM,aAAa,GAAyB;QAC3C,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY;QACZ,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAChG,KAAK,EAAE,KAAK,IAAI,GAAG,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,EAAE,EAAE;QAC3D,IAAI;QACJ,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY;KAC3C,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACvB,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,eAAe,GAAG,iBAAiB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3D,QAAQ,CAAC;gBACR,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;gBAClF,OAAO,EAAE,mBAAmB,CAAC,eAAe,CAAC;aAC7C,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC;QACJ,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,QAAQ,GAAG,MAAM,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,UAAU,IAAI,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC7F,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC;gBACxB,aAAa,CAAC,SAAS,GAAG,UAAU,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACP,uBAAuB,GAAG,gBAAgB,CAAC;YAC5C,CAAC;QACF,CAAC;QACD,IAAI,uBAAuB;YAAE,aAAa,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QAC7F,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YACxE,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC;YACvB,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAsB;YAC9B,GAAG,OAAO,CAAC,GAAG;YACd,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;YACxC,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM;YAC7B,CAAC,kBAAkB,CAAC,EAAE,YAAY;SAClC,CAAC;QACF,IAAI,OAAO,CAAC,OAAO,EAAE,YAAY;YAAE,GAAG,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;;YACzF,OAAO,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACxC,iFAAiF;QACjF,OAAO,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK;gBAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5G,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,MAAM,CAAC;YAC3C,GAAG,UAAU;YACb,GAAG,EAAE,QAAQ;YACb,GAAG;YACH,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;SACd,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACtD,IAAI,QAAQ;gBAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC;gBACJ,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACR,yCAAyC;YAC1C,CAAC;YACD,MAAM,IAAI,GACT,QAAQ,EAAE,OAAO;gBACjB,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE;oBAC1C,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;oBACjC,GAAG;iBACH,CAAC,CAAC;YACJ,IAAI,QAAQ;gBAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvC,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,oGAAoG;YACpG,iGAAiG;YACjG,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,MAAM,cAAc,GAAG,GAAG,EAAE;gBAC3B,IAAI,CAAC;oBACJ,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAClE,CAAC;gBAAC,MAAM,CAAC;oBACR,yCAAyC;gBAC1C,CAAC;YACF,CAAC,CAAC;YAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE;gBACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,OAAO;gBACzB,IAAI,KAAU,CAAC;gBACf,IAAI,CAAC;oBACJ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACR,OAAO;gBACR,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAkB,CAAC;oBACrC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEjC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBAC9B,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;wBACxB,IAAI,KAAK,EAAE,CAAC;4BACX,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;4BAC9C,aAAa,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;4BAChD,aAAa,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;4BACtD,aAAa,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;4BACxD,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;4BACnD,aAAa,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;wBAC5D,CAAC;wBACD,IAAI,GAAG,CAAC,KAAK;4BAAE,aAAa,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,KAAK,CAAC;wBACpE,IAAI,GAAG,CAAC,UAAU;4BAAE,aAAa,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;wBAC9D,aAAa,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;wBAC9C,cAAc,EAAE,CAAC;oBAClB,CAAC;oBACD,UAAU,EAAE,CAAC;gBACd,CAAC;gBAED,gGAAgG;gBAChG,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBAC3C,SAAS,EAAE,CAAC;oBACZ,cAAc,EAAE,CAAC;gBAClB,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACvD,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAkB,CAAC,CAAC;oBACtD,UAAU,EAAE,CAAC;gBACd,CAAC;YACF,CAAC,CAAC;YAEF,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,KAAK,GAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACpC,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBAC/D,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;oBACvD,IAAI,CAAC,cAAc,EAAE,CAAC;wBACrB,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;4BAC1D,MAAM,GAAG,EAAE,CAAC;4BACZ,cAAc,GAAG,IAAI,CAAC;4BACtB,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC;wBACtC,CAAC;6BAAM,CAAC;4BACP,MAAM,IAAI,KAAK,CAAC;wBACjB,CAAC;oBACF,CAAC;oBACD,IAAI,OAAO,KAAK,CAAC,CAAC;wBAAE,SAAS;oBAC7B,IAAI,cAAc,EAAE,CAAC;wBACpB,cAAc,GAAG,KAAK,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACP,MAAM,IAAI,GAAG,MAAM,CAAC;wBACpB,MAAM,GAAG,EAAE,CAAC;wBACZ,WAAW,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;gBACF,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxD,IAAI,QAAQ,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;oBAC9C,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC;oBAC/D,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACP,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACjC,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,aAAuC,CAAC;YAC5C,IAAI,SAAoD,CAAC;YACzD,MAAM,YAAY,GAAG,GAAG,EAAE;gBACzB,IAAI,MAAM,IAAI,aAAa;oBAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAChF,IAAI,SAAS;oBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;gBACtC,uFAAuF;gBACvF,gFAAgF;gBAChF,MAAM,eAAe,GAAG,CAAC,OAAO,CAAC;gBACjC,IAAI,QAAQ,IAAI,eAAe,EAAE,CAAC;oBACjC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;oBACvB,QAAQ,CAAC,SAAS,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC5D,QAAQ,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC;oBAC3C,QAAQ,CAAC,kBAAkB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB,CAAC;gBACtF,CAAC;gBACD,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,IAAI,MAAM,CAAC,IAAI,EAAE;oBAAE,WAAW,CAAC,MAAM,CAAC,CAAC;gBACvC,2FAA2F;gBAC3F,0FAA0F;gBAC1F,6FAA6F;gBAC7F,IAAI,QAAQ,IAAI,eAAe,IAAI,CAAC,QAAQ,CAAC,kBAAkB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClF,QAAQ,CAAC,cAAc,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAChG,IAAI,QAAQ,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;wBAC1C,QAAQ,CAAC,kBAAkB,GAAG,aAAa,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;oBACtG,CAAC;gBACF,CAAC;gBACD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrB,wFAAwF;gBACxF,gGAAgG;gBAChG,IAAI,QAAQ,IAAI,CAAC,OAAO;oBAAE,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC;gBACvE,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,OAAO,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,GAAG,EAAE;oBACrB,IAAI,OAAO;wBAAE,OAAO;oBACpB,UAAU,GAAG,IAAI,CAAC;oBAClB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;wBAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;4BACd,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;4BAChD,IAAI,QAAQ,IAAI,SAAS;gCAAE,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAC7D,CAAC;oBACF,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;oBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;oBAChD,IAAI,QAAQ,IAAI,SAAS;wBAAE,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7D,CAAC,CAAC;gBACF,aAAa,GAAG,QAAQ,CAAC;gBACzB,IAAI,MAAM,CAAC,OAAO;oBAAE,QAAQ,EAAE,CAAC;;oBAC1B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAClC,IAAI,UAAU,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACnC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC3B,aAAa,CAAC,UAAU,GAAG,SAAS,CAAC;YACrC,aAAa,CAAC,YAAY,GAAG,sBAAsB,CAAC;QACrD,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC3B,aAAa,CAAC,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpF,IAAI,UAAU,IAAI,MAAM,EAAE,OAAO;YAAE,aAAa,CAAC,UAAU,GAAG,SAAS,CAAC;IACzE,CAAC;YAAS,CAAC;QACV,IAAI,QAAQ,EAAE,CAAC;YACd,8FAA8F;YAC9F,+FAA+F;YAC/F,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;YACtC,IAAI,QAA0E,CAAC;YAC/E,IAAI,IAAI,EAAE,kBAAkB,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACJ,QAAQ,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACR,4DAA4D;gBAC7D,CAAC;YACF,CAAC;YACD,IAAI,CAAC;gBACJ,IAAI,cAAc,CAAC,aAAa,CAAC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACtD,aAAa,CAAC,YAAY,GAAG,SAAS,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACP,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;oBAC1C,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;oBAC5C,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;oBACjD,IAAI,MAAM,CAAC,SAAS;wBAAE,aAAa,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;oBACjE,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;wBACnC,IAAI,QAAQ;4BAAE,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;wBAC1C,aAAa,CAAC,YAAY,GAAG,4BAA4B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gEAAgE,MAAM,CAAC,SAAS,EAAE,CAAC;oBAC3K,CAAC;gBACF,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,QAAQ;oBAAE,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC1C,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC3B,aAAa,CAAC,YAAY,GAAG,SAAS,CAAC;gBACvC,aAAa,CAAC,YAAY,GAAG,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjH,CAAC;oBAAS,CAAC;gBACV,IAAI,QAAQ,IAAI,IAAI,EAAE,kBAAkB,EAAE,CAAC;oBAC1C,IAAI,CAAC;wBACJ,MAAM,IAAI,CAAC,kBAAkB,CAAC;4BAC7B,UAAU;4BACV,GAAG,QAAQ;4BACX,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;yBAC/F,CAAC,CAAC;oBACJ,CAAC;oBAAC,MAAM,CAAC;wBACR,4DAA4D;oBAC7D,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC;oBACJ,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC1B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;oBAC3B,MAAM,YAAY,GAAG,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnH,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;oBACrD,aAAa,CAAC,YAAY;wBACzB,aAAa,KAAK,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,KAAK,YAAY,EAAE,CAAC;gBACvF,CAAC;YACF,CAAC;QACF,CAAC;QACD,IAAI,aAAa;YAChB,IAAI,CAAC;gBACJ,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACR,YAAY;YACb,CAAC;QACF,IAAI,YAAY;YACf,IAAI,CAAC;gBACJ,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACR,YAAY;YACb,CAAC;IACH,CAAC;IACD,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,aAAa,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAChF,OAAO,aAAa,CAAC;AACtB,CAAC;AAED,MAAM,mBAAmB,GAAG,UAAU,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAU,EAAE;IAC5G,WAAW,EACV,yGAAyG;CAC1G,CAAC,CAAC;AASH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAClE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IACnE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAChB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4EAA4E,EAAE,CAAC,CAC1G;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5C,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EAAE,0FAA0F;KACvG,CAAC,CACF;IACD,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC,CAAC;IAC3F,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,UAAU,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAU,EAAE;QAC3C,WAAW,EACV,iKAAiK;KAClK,CAAC,CACF;IACD,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;QACzB,WAAW,EAAE,8EAA8E;KAC3F,CAAC,CACF;IACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;QACzB,WAAW,EACV,qHAAqH;KACtH,CAAC,CACF;IACD,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,MAAM,CACV;QACC,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,MAAM,CAAC;YACX,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC,CAAC;YAC7F,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;SAC5C,CAAC,CACF;QACD,WAAW,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC,CACvG;KACD,EACD;QACC,WAAW,EACV,0GAA0G;KAC3G,CACD,CACD;IACD,OAAO,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,MAAM,CACV;QACC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC,CAAC;QACtG,UAAU,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC,CACzF;QACD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC,CAAC;KAC3G,EACD,EAAE,WAAW,EAAE,wCAAwC,EAAE,CACzD,CACD;CACD,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAClE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4DAA4D,EAAE,CAAC;IAChG,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EAAE,0FAA0F;KACvG,CAAC,CACF;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5C,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC,CAAC;CAC3F,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,UAAU,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAU,EAAE;IACzE,WAAW,EAAE,8FAA8F;IAC3G,OAAO,EAAE,MAAM;CACf,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+CAA+C,EAAE,CAAC,CAAC;IACnG,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC,CAAC;IACvF,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EAAE,0FAA0F;KACvG,CAAC,CACF;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,+CAA+C,EAAE,CAAC,CAAC;IAC5G,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC,CAAC;IAC/G,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC3C,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAClC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,4DAA4D,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAC1G;IACD,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uDAAuD,EAAE,CAAC,CAAC;IACzG,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,UAAU,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAU,EAAE;QAC3C,WAAW,EACV,iKAAiK;KAClK,CAAC,CACF;CACD,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAwB;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACxF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,SAAS,CACjB,MAA4B,EAC5B,QAAyB;IAEzB,IAAI,QAAQ,CAAC,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC7E,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO;YACN,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,MAAM,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB;SACjG,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC9G,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC;IAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAChG,CAAC;AAED,2GAA2G;AAC3G,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC;;;;GAIG;AACH,SAAS,mBAAmB,CAC3B,MAA8B,EAC9B,MAA4B,EAC5B,QAAyB,EACzB,WAAoB,EACpB,OAAgB;IAEhB,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO;IAC5B,IAAI,CAAC;QACJ,iGAAiG;QACjG,2FAA2F;QAC3F,+FAA+F;QAC/F,2FAA2F;QAC3F,IACC,QAAQ,CAAC,QAAQ;YACjB,CAAC,QAAQ,CAAC,UAAU;YACpB,QAAQ,CAAC,MAAM;YACf,QAAQ,CAAC,SAAS,KAAK,IAAI;YAC3B,CAAC,CACA,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC;gBACjE,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CACjE,EACA,CAAC;YACF,OAAO;QACR,CAAC;QACD,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,cAAc,EAAE,CAAC;YACjB,OAAO;QACR,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,EAAE;YACvB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC;QACF,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAI,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBAC5D,mGAAmG;gBACnG,iGAAiG;gBACjG,iGAAiG;gBACjG,8DAA8D;gBAC9D,iGAAiG;gBACjG,mGAAmG;gBACnG,gGAAgG;gBAChG,6FAA6F;gBAC7F,IACC,QAAQ,CAAC,kBAAkB;oBAC3B,CAAC,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC;wBACjE,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC;wBACjE,CAAC,QAAQ,CAAC,WAAW,KAAK,IAAI;4BAC7B,QAAQ,CAAC,SAAS,KAAK,yBAAyB;4BAChD,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAC5B,CAAC;oBACF,MAAM,CAAC,wBAAwB,EAAE,CAAC;gBACnC,CAAC;gBACD,OAAO;YACR,CAAC;YACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACzB,UAAU,EAAE,CAAC;gBACb,OAAO;YACR,CAAC;YACD,yFAAyF;YACzF,4FAA4F;YAC5F,oBAAoB;YACpB,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACtC,IAAI,OAAO,IAAI,QAAQ,CAAC,cAAc,KAAK,WAAW;oBAAE,cAAc,EAAE,CAAC;;oBACpE,UAAU,EAAE,CAAC;YACnB,CAAC;YACD,OAAO;QACR,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW;gBAAE,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChD,OAAO;QACR,CAAC;QACD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACR,yCAAyC;IAC1C,CAAC;AACF,CAAC;AAED,+DAA+D;AAC/D,SAAS,mBAAmB,CAAC,MAA8B;IAC1D,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IACnC,MAAM,KAAK,GACV,CAAsB,MAA4B,EAAE,EAAE,CACtD,CAAC,GAAG,IAAO,EAAQ,EAAE;QACpB,IAAI,CAAC;YACJ,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACR,yCAAyC;QAC1C,CAAC;IACF,CAAC,CAAC;IACH,OAAO;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACxB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACxB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACxB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC;QAC1C,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC;QACxD,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC;KAChE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,mBAAmB;IACP,UAAU,CAAyC;IACnD,MAAM,CAA0B;IACzC,GAAG,CAAkC;IAC5B,OAAO,GAA6B,EAAE,CAAC;IAChD,aAAa,CAA2B;IACxC,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,UAAkD,EAAE,MAA+B;QAC9F,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,4EAA4E;IAC5E,KAAK,CACJ,QAAsC,EACtC,IAAmD;QAEnD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,QAAQ,CAAC;QACtC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,OAAO;gBAAE,OAAO,QAAQ,CAAC;YAClC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,MAAM,EAAE,CAAC;gBACZ,6FAA6F;gBAC7F,MAAM,QAAQ,GAAG,GAAG,EAAE;oBACrB,IAAI,CAAC;wBACJ,GAAG,CAAC,aAAa,EAAE,CAAC;oBACrB,CAAC;oBAAC,MAAM,CAAC;wBACR,yCAAyC;oBAC1C,CAAC;gBACF,CAAC,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;gBAC9B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,IAAI,MAAM,CAAC,OAAO;oBAAE,QAAQ,EAAE,CAAC;YAChC,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/B,OAAO,CAAC,OAAO,EAAE,EAAE;YAClB,IAAI,CAAC;gBACJ,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACR,yCAAyC;YAC1C,CAAC;YACD,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC,CAAC;IACH,CAAC;IAED,yFAAyF;IACzF,WAAW,CAAC,IAAwB;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG;YAAE,OAAO,iCAAiC,CAAC;QACnD,IAAI,MAAM,GAAG,iCAAiC,CAAC;QAC/C,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACR,yCAAyC;QAC1C,CAAC;QACD,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,qCAAqC;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3F,OAAO,MAAM,CAAC;IACf,CAAC;IAED,+EAA+E;IAC/E,QAAQ,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iCAAiC,CAAC;IACjE,CAAC;IAED,kEAAkE;IAClE,eAAe,CAAC,KAAa;QAC5B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,CAAC;IAED,2FAA2F;IAC3F,4BAA4B,CAAC,KAAa;QACzC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;IAC1F,CAAC;IAED;;OAEG;IACH,MAAM,CAAmB,MAAU;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACpG,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAI,MAAM;gBAAE,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACR,yCAAyC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;CACD;AAID,kGAAkG;AAClG,SAAS,wBAAwB,CAChC,KAAsG;IAEtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;QAC1D,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACzF,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YACnF,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,WAAW,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAW;IACvD,OAAO;QACN,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE;YACZ,gEAAgE;YAChE,uGAAuG;YACvG,sRAAsR;YACtR,sFAAsF;YACtF,uCAAuC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,IAAI;YAC7E,qCAAqC,eAAe,iDAAiD;SACrG,CAAC,IAAI,CAAC,GAAG,CAAC;QACX,aAAa,EACZ,4IAA4I;QAC7I,gBAAgB,EAAE;YACjB,kQAAkQ;SAClQ;QACD,UAAU,EAAE,cAAc;QAE1B,OAAO,EAAE,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;YAClG,MAAM,UAAU,GAAe,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;YAC3D,MAAM,UAAU,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC;YACnC,MAAM,WAAW,GAAG,GAAG,EAAE,KAAK,CAAC;YAC/B,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,IAAI,CAAC;YACjE,MAAM,mBAAmB,GAAG,QAAmD,CAAC;YAEhF,kEAAkE;YAClE,qEAAqE;YACrE,2DAA2D;YAC3D,MAAM,iBAAiB,GAAG,GAA4E,EAAE;gBACvG,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;wBAClC,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,UAAU,IAAI,CAAC,EAAE;qBACpC,CAAC,CAAC,CAAC;gBACL,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;wBAClC,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,EAAE;qBAC5B,CAAC,CAAC,CAAC;gBACL,IAAI,MAAM,CAAC,KAAK;oBAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC,CAAC;gBACjG,OAAO,EAAE,CAAC;YACX,CAAC,CAAC;YACF,MAAM,UAAU,GAAG,CAClB,KAAuE,EACvE,YAAoB,EACG,EAAE,CAAC,CAAC;gBAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,GAAG,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxF,YAAY,EAAE,aAAa,EAAE,IAAI,UAAU;gBAC3C,KAAK,EAAE,oBAAoB,EAAE,GAAG,CAAC;gBACjC,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBAChG,YAAY;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,QAAQ;aACnB,CAAC,CAAC;YACH,MAAM,eAAe,GAAG,CAAC,YAAoB,EAA0B,EAAE,CACxE,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;YAErE,MAAM,WAAW,GAChB,CAAC,IAAqC,EAAE,EAAE,CAC1C,CAAC,OAA+B,EAAmB,EAAE,CAAC,CAAC;gBACtD,IAAI;gBACJ,UAAU;gBACV,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;gBAC5C,OAAO;aACP,CAAC,CAAC;YACJ,MAAM,mBAAmB,GACxB,CAAC,IAAqC,EAAE,EAAE,CAC1C,CAAC,OAAiC,EAAE,UAAgC,EAA2B,EAAE,CAAC,CAAC;gBAClG,IAAI;gBACJ,UAAU;gBACV,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;gBAC5C,OAAO;gBACP,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrC,CAAC,CAAC;YAEJ,IAAI,oBAAoB,EAAE,IAAI,gBAAgB,EAAE,EAAE,CAAC;gBAClD,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,0CAA0C,oBAAoB,EAAE,OAAO,gBAAgB,EAAE,gCAAgC;yBAC/H;qBACD;oBACD,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBAClC,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAE1E,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;gBACpF,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,oEAAoE,SAAS,EAAE;yBACrF;qBACD;oBACD,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAC7B,eAAe,CAAC,wDAAwD,CAAC,CACzE;iBACD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,QAAQ,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,2DAA2D,CAAC;gBACjF,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;oBAC/C,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAC1E,eAAe,CAAC,YAAY,CAAC,CAC7B;oBACD,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,IACC,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,MAAM,CAAC;gBACnD,oBAAoB;gBACpB,GAAG,EAAE,KAAK;gBACV,CAAC,GAAG,CAAC,gBAAgB,EAAE,EACtB,CAAC;gBACF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC9C,IAAI,MAAM,CAAC,KAAK;oBAAE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;wBAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvF,IAAI,MAAM,CAAC,KAAK;oBAAE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK;wBAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACjF,IAAI,MAAM,CAAC,KAAK;oBAAE,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAExD,MAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;qBAC5D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;qBAClD,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;gBAE3D,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvC,MAAM,KAAK,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnE,MAAM,GAAG,GAAG,SAAS,CAAC,gBAAgB,IAAI,WAAW,CAAC;oBACtD,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAC9B,2BAA2B,EAC3B,WAAW,KAAK,aAAa,GAAG,iFAAiF,CACjH,CAAC;oBACF,IAAI,CAAC,EAAE;wBACN,OAAO;4BACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8CAA8C,EAAE,CAAC;4BACjF,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAC1E,eAAe,CAAC,6CAA6C,CAAC,CAC9D;4BACD,OAAO,EAAE,IAAI;yBACb,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,0FAA0F;YAC1F,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7G,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;YACnC,IAAI,YAAY,IAAI,MAAM,CAAC,KAAM,CAAC,MAAM,GAAG,OAAO;gBACjD,OAAO;oBACN,OAAO,EAAE;wBACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,MAAM,CAAC,KAAM,CAAC,MAAM,aAAa,OAAO,GAAG,EAAE;qBAC/F;oBACD,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,yCAAyC,OAAO,GAAG,CAAC,CAAC;oBACtG,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,MAAM,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvE,GAAG,CAAC;gBACJ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,UAAU,IAAI,CAAC,EAAE;gBAChC,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;gBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;gBAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;aACtB,CAAC,CAAC,CAAC;YACJ,IAAI,YAAY,EAAE,CAAC;gBAClB,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,UAAU,EAAE,CAAC;oBAChB,OAAO;wBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,UAAU,GAAG,EAAE,CAAC;wBACvE,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,gCAAgC,UAAU,GAAG,CAAC,CAAC;wBAChG,OAAO,EAAE,IAAI;qBACb,CAAC;gBACH,CAAC;YACF,CAAC;YAED,4FAA4F;YAC5F,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE;gBAC/D,UAAU;gBACV,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;aAC/D,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,2GAA2G;gBAC3G,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;oBAAE,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjG,MAAM,OAAO,GAA2B,EAAE,CAAC;gBAC3C,IAAI,cAAc,GAAG,EAAE,CAAC;gBAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;oBAE3E,4DAA4D;oBAC5D,MAAM,WAAW,GAAiC,gBAAgB;wBACjE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE;4BACZ,+DAA+D;4BAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;4BAClD,IAAI,aAAa,EAAE,CAAC;gCACnB,gBAAgB,CAAC;oCAChB,OAAO,EAAE,OAAO,CAAC,OAAO;oCACxB,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;iCACrF,CAAC,CAAC;4BACJ,CAAC;wBACF,CAAC;wBACF,CAAC,CAAC,SAAS,CAAC;oBAEb,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACvC,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,MAAM,cAAc,CAClC,UAAU,EACV,MAAM,EACN,SAAS,CAAC,WAAW,EACrB,IAAI,CAAC,KAAK,EACV,eAAe,EACf,IAAI,CAAC,GAAG,EACR,SAAS,EACT,CAAC,GAAG,CAAC,EACL,IAAI,CAAC,KAAK,EACV,WAAW,EACX,MAAM,EACN,WAAW,EACX,mBAAmB,CAAC,OAAO,CAAC,EAC5B,UAAU,EACV,CAAC,EACD;wBACC,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,EAAE;wBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,QAAQ,EAAE,MAAM;wBAChB,QAAQ;wBACR,UAAU,EAAE,wBAAwB,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC;wBAC1E,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC;qBAC1D,CACD,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAErB,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;oBACvC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;oBAC1F,IAAI,OAAO,EAAE,CAAC;wBACb,kFAAkF;wBAClF,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI;4BAAE,WAAW,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;;4BACzE,WAAW,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;wBACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK;6BAC1B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;6BACZ,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAClB,UAAU,CACT,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,EACtD,kCAAkC,CAAC,GAAG,CAAC,EAAE,CACzC,CACD,CAAC;wBACH,OAAO;4BACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,MAAM,QAAQ,EAAE,EAAE,CAAC;4BAChG,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;4BACvD,OAAO,EAAE,IAAI;yBACb,CAAC;oBACH,CAAC;oBACD,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAClD,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;oBACxG,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;iBACtC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,oBAAoB,EAAE,GAAG,CAAC,CAAC;gBAC9C,6FAA6F;gBAC7F,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;gBAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,qCAAqC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxF,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACnC,CAAC;gBAED,MAAM,UAAU,GAAwB,EAAE,CAAC;gBAC3C,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAE,EAAE;oBAClD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC,CAAC;gBACF,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;oBACtC,aAAa,CAAC;wBACb,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,CAAC,CAAC,EAAE;wBACZ,SAAS,EAAE,CAAC,CAAC,SAAS;wBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY;wBACrC,EAAE,EAAE,GAAG,EAAE;qBACT,CAAC,CAAC;oBACH,wFAAwF;oBACxF,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzF,CAAC;gBAED,MAAM,UAAU,GAA2B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5D,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM,EAAE,CAAC,CAAC,EAAE;oBACZ,YAAY,EAAE,aAAa,EAAE,IAAI,UAAU;oBAC3C,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,CAAC,CAAC,EAAE,qBAAqB;oBACnC,QAAQ,EAAE,EAAE;oBACZ,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;oBAChG,SAAS,EAAE,QAAQ;iBACnB,CAAC,CAAC,CAAC;gBAEJ,MAAM,iBAAiB,GAAG,CAAC,OAA+B,EAAmB,EAAE,CAAC,CAAC;oBAChF,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;oBACnC,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC;iBAC3B,CAAC,CAAC;gBACH,MAAM,yBAAyB,GAAG,CAAC,OAAiC,EAA2B,EAAE,CAChG,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;gBAE3D,MAAM,kBAAkB,GAAG,CAAC,eAAe,GAAG,iBAAiB,CAAC,UAAU,CAAC,EAAE,EAAE;oBAC9E,IAAI,gBAAgB,EAAE,CAAC;wBACtB,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;wBACnE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;wBAChE,gBAAgB,CAAC;4BAChB,OAAO,EAAE;gCACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,IAAI,IAAI,UAAU,CAAC,MAAM,UAAU,OAAO,aAAa,EAAE;6BAC5F;4BACD,OAAO,EAAE,yBAAyB,CAAC,eAAe,CAAC;yBACnD,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC,CAAC;gBAEF,IAAI,OAA+B,CAAC;gBACpC,IAAI,CAAC;oBACJ,OAAO,GAAG,MAAM,MAAM,CACrB,KAAK,EACL,EAAE,WAAW,EAAE,sBAAsB,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,EAC5E,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;wBAClB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC5E,IAAI,OAAO,GAAG,CAAC,CAAC;wBAChB,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;wBACpB,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;wBAC1B,IAAI,MAA4B,CAAC;wBACjC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAC3C,IAAI,QAAQ,GAAG,kBAAkB,EAAE,CAAC;wBACpC,IAAI,WAAW,GAAG,KAAK,CAAC;wBACxB,MAAM,UAAU,GAAG,wBAAwB,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;wBAClF,SAAS,CAAC;4BACT,QAAQ,GAAG,kBAAkB,EAAE,CAAC;4BAChC,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;4BACnE,MAAM,GAAG,MAAM,cAAc,CAC5B,UAAU,EACV,MAAM,EACN,SAAS,CAAC,WAAW,EACrB,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,GAAG,EACL,CAAC,CAAC,SAAS,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,MAAM,EACN,CAAC,OAAO,EAAE,EAAE;gCACX,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;gCAClD,IAAI,aAAa,EAAE,CAAC;oCACnB,MAAM,eAAe,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;oCACtD,eAAe,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC;oCACvC,kBAAkB,CAAC,eAAe,CAAC,CAAC;gCACrC,CAAC;4BACF,CAAC,EACD,yBAAyB,EACzB,UAAU,EACV,KAAK,EACL;gCACC,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,QAAQ;gCACR,OAAO;gCACP,OAAO,EAAE,CAAC,CAAC,OAAO;gCAClB,QAAQ,EAAE,MAAM;gCAChB,QAAQ;gCACR,UAAU;gCACV,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC;6BAC1D,CACD,CAAC;4BACF,WAAW,KAAK,QAAQ,CAAC,OAAO,CAAC;4BACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gCAC7B,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gCACtE,MAAM;4BACP,CAAC;4BACD,aAAa,CAAC;gCACb,IAAI,EAAE,MAAM;gCACZ,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,OAAO;gCACP,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gCAC7C,EAAE,EAAE,GAAG,EAAE;6BACT,CAAC,CAAC;4BACH,IAAI,OAAO,IAAI,WAAW,IAAI,MAAM,EAAE,OAAO;gCAAE,MAAM;4BACrD,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;4BACzB,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,KAAK,CAAC;4BAC/C,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,IAAI,QAAQ,CAAC;4BACxD,aAAa,CAAC;gCACb,IAAI,EAAE,UAAU;gCAChB,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,WAAW,EAAE,OAAO;gCACpB,SAAS,EAAE,IAAI;gCACf,KAAK,EAAE,KAAK,IAAI,GAAG,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,EAAE,EAAE;gCAC3D,QAAQ;gCACR,EAAE,EAAE,GAAG,EAAE;6BACT,CAAC,CAAC;4BACH,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;4BAChC,OAAO,GAAG,IAAI,CAAC;wBAChB,CAAC;wBACD,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;wBACrF,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;wBAC3B,kBAAkB,EAAE,CAAC;wBACrB,OAAO,MAAM,CAAC;oBACf,CAAC,EACD,cAAc,EACd,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE;wBAC9B,MAAM,IAAI,GAAG,UAAU,CACtB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAC9C,wBAAwB,gBAAgB,UAAU,CAClD,CAAC;wBACF,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;wBACzB,kBAAkB,EAAE,CAAC;wBACrB,OAAO,IAAI,CAAC;oBACb,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;wBACT,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;4BACxB,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;6BAChF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;4BAClC,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;6BAClF,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;4BAC7B,aAAa,CAAC;gCACb,IAAI,EAAE,MAAM;gCACZ,MAAM,EAAE,KAAK,CAAC,EAAE;gCAChB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gCACxC,EAAE,EAAE,GAAG,EAAE;6BACT,CAAC,CAAC;wBACJ,oEAAoE;wBACpE,6EAA6E;wBAC7E,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;4BACzD,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BAClC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;oBACF,CAAC,EACD,MAAM,EACN,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;wBACZ,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,CAAC;wBACnD,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,+BAA+B,CAAC,CAAC;oBACpG,CAAC,CACD,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjE,OAAO;wBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,OAAO,EAAE,EAAE,CAAC;wBAC3E,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAC,+BAA+B,OAAO,GAAG,CAAC,CAAC;wBACtF,OAAO,EAAE,IAAI;qBACb,CAAC;gBACH,CAAC;gBAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACnC,MAAM,MAAM,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;wBAC/B,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBAC/E,CAAC,CAAC,WAAW,CAAC;oBACf,OAAO,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,OAAO,MAAM,EAAE,CAAC;gBAClD,CAAC,CAAC,CAAC;gBACH,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,aAAa,YAAY,IAAI,OAAO,CAAC,MAAM,iBAAiB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;yBACjG;qBACD;oBACD,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC;oBACnC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM;iBACxC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnF,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,MAAM,cAAc,CAClC,UAAU,EACV,MAAM,EACN,SAAS,CAAC,WAAW,EACrB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,SAAS,EAChB,SAAS,EACT,MAAM,CAAC,KAAK,EACZ,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,mBAAmB,CAAC,QAAQ,CAAC,EAC7B,UAAU,EACV,CAAC,EACD;oBACC,MAAM,EAAE,GAAG,UAAU,IAAI;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM;oBAChB,QAAQ;oBACR,UAAU,EAAE,wBAAwB,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC;oBAC1E,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC;iBAC1D,CACD,CAAC;gBACF,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBACvC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;gBAC1F,IAAI,OAAO,EAAE,CAAC;oBACb,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;oBACzC,OAAO;wBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,CAAC,UAAU,IAAI,QAAQ,KAAK,QAAQ,EAAE,EAAE,CAAC;wBACxF,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACxC,OAAO,EAAE,IAAI;qBACb,CAAC;gBACH,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;oBACnF,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;iBACxC,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;YACpF,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yCAAyC,SAAS,EAAE,EAAE,CAAC;gBACvF,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;aAClC,CAAC;QACH,CAAC,CAAC;QAEF,UAAU,CAAC,IAAI,EAAE,KAAY,EAAE,QAAQ;YACtC,MAAM,KAAK,GAAe,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;YACpD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,IAAI,GACP,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC9C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;oBACxD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,8CAA8C;oBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChE,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;oBACnF,IAAI;wBACH,MAAM;4BACN,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;4BAC9B,GAAG;4BACH,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC;4BAC9B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpG,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,IAAI,GACP,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC9C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;oBAC3D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;gBAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC1E,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/E,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpG,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzG,IAAI,IAAI,GACP,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC7B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;YAClC,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAY,EAAE,QAAQ;YACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgE,CAAC;YACxF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;YAEnC,MAAM,kBAAkB,GAAG,CAAC,KAAoB,EAAE,KAAc,EAAE,EAAE;gBACnE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnD,MAAM,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,OAAO,GAAG,CAAC;oBAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,OAAO,kBAAkB,CAAC,CAAC;gBAC7E,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACpF,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACP,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;oBACrG,CAAC;gBACF,CAAC;gBACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/D,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBACzE,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBAE5C,IAAI,QAAQ,EAAE,CAAC;oBACd,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;oBAClC,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBAChH,IAAI,OAAO,IAAI,CAAC,CAAC,UAAU;wBAAE,MAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;oBACpF,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,OAAO,IAAI,CAAC,CAAC,YAAY;wBAC5B,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACnF,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACtE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5D,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBAC/C,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACtE,CAAC;yBAAM,CAAC;wBACP,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;4BACjC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gCAC3B,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACpF,CAAC,EACD,CAAC,CACD,CACD,CAAC;wBACJ,CAAC;wBACD,IAAI,WAAW,EAAE,CAAC;4BACjB,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;wBACrE,CAAC;oBACF,CAAC;oBACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACpD,IAAI,QAAQ,EAAE,CAAC;wBACd,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/D,CAAC;oBACD,OAAO,SAAS,CAAC;gBAClB,CAAC;gBAED,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC9G,IAAI,OAAO,IAAI,CAAC,CAAC,UAAU;oBAAE,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBAClF,IAAI,OAAO,IAAI,CAAC,CAAC,YAAY;oBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;qBACvF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;oBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;qBAC/E,CAAC;oBACL,IAAI,IAAI,KAAK,kBAAkB,CAAC,YAAY,EAAE,oBAAoB,CAAC,EAAE,CAAC;oBACtE,IAAI,YAAY,CAAC,MAAM,GAAG,oBAAoB;wBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBACxG,CAAC;gBACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,QAAQ;oBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACvD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,cAAc,GAAG,CAAC,OAAgC,EAAE,EAAE;gBAC3D,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACtF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACzB,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;oBAC7B,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;oBACrC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;oBACvC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC3B,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC9B,CAAC;gBACD,OAAO,KAAK,CAAC;YACd,CAAC,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC5E,MAAM,IAAI,GAAG,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAEzG,IAAI,QAAQ,EAAE,CAAC;oBACd,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;oBAClC,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,IAAI;wBACH,GAAG;wBACH,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC3C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,EACtE,CAAC,EACD,CAAC,CACD,CACD,CAAC;oBAEF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACjC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;wBACnF,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;wBAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;wBAE5C,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,EACrF,CAAC,EACD,CAAC,CACD,CACD,CAAC;wBACF,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAE1F,kBAAkB;wBAClB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;4BACjC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gCAC9B,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACpF,CAAC,EACD,CAAC,CACD,CACD,CAAC;4BACH,CAAC;wBACF,CAAC;wBAED,gCAAgC;wBAChC,IAAI,WAAW,EAAE,CAAC;4BACjB,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;wBACrE,CAAC;wBAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;wBACrD,IAAI,SAAS;4BAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/E,CAAC;oBAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,IAAI,QAAQ,EAAE,CAAC;wBACd,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC3E,CAAC;oBACD,OAAO,SAAS,CAAC;gBAClB,CAAC;gBAED,iBAAiB;gBACjB,IAAI,IAAI,GACP,IAAI;oBACJ,GAAG;oBACH,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;gBACvE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACjC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACnF,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;oBAClG,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;wBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;;wBAC1E,IAAI,IAAI,KAAK,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzD,CAAC;gBACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnE,IAAI,QAAQ;oBAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACrE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBACvD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACxE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACnG,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC/F,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,SAAS;oBACrB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;oBAC1B,CAAC,CAAC,SAAS,GAAG,CAAC;wBACd,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;wBAC1B,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,SAAS;oBACvB,CAAC,CAAC,GAAG,YAAY,GAAG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,UAAU,OAAO,UAAU;oBAClF,CAAC,CAAC,GAAG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC;gBAErD,IAAI,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC5B,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;oBAClC,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EACxF,CAAC,EACD,CAAC,CACD,CACD,CAAC;oBAEF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACjC,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;wBACpF,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;wBAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;wBAE5C,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CACrF,CAAC;wBACF,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAE1F,kBAAkB;wBAClB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;4BACjC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gCAC9B,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACpF,CAAC,EACD,CAAC,CACD,CACD,CAAC;4BACH,CAAC;wBACF,CAAC;wBAED,gCAAgC;wBAChC,IAAI,WAAW,EAAE,CAAC;4BACjB,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;wBACrE,CAAC;wBAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;wBACrD,IAAI,SAAS;4BAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/E,CAAC;oBAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,IAAI,QAAQ,EAAE,CAAC;wBACd,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC3E,CAAC;oBACD,OAAO,SAAS,CAAC;gBAClB,CAAC;gBAED,oCAAoC;gBACpC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;gBACpG,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACjC,MAAM,KAAK,GACV,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;wBAChB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;wBAC1B,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;4BAClB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC;4BACxB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBAC9B,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;oBAClF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;wBAC5B,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;;wBACjF,IAAI,IAAI,KAAK,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzD,CAAC;gBACD,IAAI,CAAC,SAAS,EAAE,CAAC;oBAChB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,IAAI,QAAQ;wBAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACtE,CAAC;gBACD,IAAI,CAAC,QAAQ;oBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBACtE,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC7C,OAAO,kBAAkB,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["/**\n * Subagent Tool - Delegate tasks to specialized agents\n *\n * Spawns a separate humain-code process for each subagent invocation,\n * giving it an isolated context window.\n *\n * Supports three modes:\n * - Single: { agent: \"name\", task: \"...\" }\n * - Parallel: { tasks: [{ agent: \"name\", task: \"...\" }, ...] }\n * - Chain: { chain: [{ agent: \"name\", task: \"... {previous} ...\" }, ...] }\n *\n * Uses JSON mode to capture structured output from subagents.\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Message, Model } from \"@earendil-works/pi-ai\";\nimport { StringEnum } from \"@earendil-works/pi-ai\";\nimport { Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport {\n\tSUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN,\n\ttype SubagentFailureKind,\n\ttype SubagentRunMode,\n} from \"@humain/humain-code-contracts\";\nimport { Type } from \"typebox\";\nimport { resolveCliCommand } from \"../../cli/deprecation.ts\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport { createSubagentTraceChild, type SubagentTraceChild } from \"../../humain/trace-capture/subagent-trace.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport type { ResourceDiagnostic } from \"../diagnostics.ts\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport { TRACE_ENV } from \"../trace/config.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport { shortenPath } from \"./render-utils.ts\";\nimport {\n\tcurrentSubagentDepth,\n\tcurrentTaskId,\n\tmaxParallelTasks,\n\tmaxSubagentConcurrency,\n\tmaxSubagentDepth,\n\tmaxSubagentWorktrees,\n\tPARENT_TASK_ID_ENV,\n\tSUBAGENT_DEPTH_ENV,\n\tTASK_BASE_REVISION_ENV,\n\tTASK_ID_ENV,\n} from \"./subagent-env.ts\";\nimport {\n\tattachSubagentProgress,\n\tDISABLED_SUBAGENT_WORKER_OBSERVER,\n\treadSubagentProgressCapability,\n\ttype SubagentProgressCapability,\n\ttype SubagentRunObserver,\n\ttype SubagentWorkerMeta,\n\ttype SubagentWorkerObserver,\n} from \"./subagent-progress.ts\";\nimport { runDag, validateTaskGraph } from \"./subagent-scheduler.ts\";\n\nexport { SUBAGENT_DEPTH_ENV } from \"./subagent-env.ts\";\n\nimport { type FileEvidenceSink, getFileEvidenceSink } from \"./file-evidence.ts\";\nimport {\n\tcreateSubagentWorktree,\n\tisGitWorkTree,\n\ttype SubagentIsolation,\n\ttype SubagentMergeOutcome,\n\ttype SubagentWorktree,\n} from \"./subagent-worktree.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst COLLAPSED_ITEM_COUNT = 10;\nconst PER_TASK_OUTPUT_CAP = 50 * 1024;\nconst PROGRESS_TEXT_CAP = 2 * 1024;\n\n// --- Agent discovery ---\n\nexport type AgentScope = \"user\" | \"project\" | \"both\";\n\nexport interface AgentConfig {\n\tname: string;\n\tdescription: string;\n\ttools?: string[];\n\tmodel?: string;\n\tsystemPrompt: string;\n\tsource: \"user\" | \"project\";\n\tfilePath: string;\n}\n\nexport interface AgentDiscoveryResult {\n\tagents: AgentConfig[];\n\tprojectAgentsDir: string | null;\n\tdiagnostics: ResourceDiagnostic[];\n}\n\ninterface LoadAgentsResult {\n\tagents: AgentConfig[];\n\tdiagnostics: ResourceDiagnostic[];\n}\n\nfunction loadAgentsFromDir(dir: string, source: \"user\" | \"project\"): LoadAgentsResult {\n\tconst agents: AgentConfig[] = [];\n\tconst diagnostics: ResourceDiagnostic[] = [];\n\n\tif (!fs.existsSync(dir)) {\n\t\treturn { agents, diagnostics };\n\t}\n\n\tlet entries: fs.Dirent[];\n\ttry {\n\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn { agents, diagnostics };\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.name.endsWith(\".md\")) continue;\n\t\tif (!entry.isFile() && !entry.isSymbolicLink()) continue;\n\n\t\tconst filePath = path.join(dir, entry.name);\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = fs.readFileSync(filePath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet frontmatter: Record<string, string>;\n\t\tlet body: string;\n\t\ttry {\n\t\t\t({ frontmatter, body } = parseFrontmatter<Record<string, string>>(content));\n\t\t} catch (error) {\n\t\t\t// Malformed frontmatter (e.g. invalid YAML) must not take down the whole\n\t\t\t// directory — skip this one file and surface a diagnostic instead.\n\t\t\tconst message = error instanceof Error ? error.message : \"failed to parse agent file\";\n\t\t\tdiagnostics.push({ type: \"warning\", message, path: filePath });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!frontmatter.name || !frontmatter.description) {\n\t\t\tconst missing = [!frontmatter.name && \"name\", !frontmatter.description && \"description\"]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" and \");\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"warning\",\n\t\t\t\tmessage: `missing required frontmatter field(s): ${missing}`,\n\t\t\t\tpath: filePath,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tools = frontmatter.tools\n\t\t\t?.split(\",\")\n\t\t\t.map((t: string) => t.trim())\n\t\t\t.filter(Boolean);\n\n\t\tagents.push({\n\t\t\tname: frontmatter.name,\n\t\t\tdescription: frontmatter.description,\n\t\t\ttools: tools && tools.length > 0 ? tools : undefined,\n\t\t\tmodel: frontmatter.model,\n\t\t\tsystemPrompt: body,\n\t\t\tsource,\n\t\t\tfilePath,\n\t\t});\n\t}\n\n\treturn { agents, diagnostics };\n}\n\nfunction isDirectory(p: string): boolean {\n\ttry {\n\t\treturn fs.statSync(p).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction findNearestProjectAgentsDir(cwd: string): string | null {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = path.join(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\tif (isDirectory(candidate)) return candidate;\n\n\t\tconst parentDir = path.dirname(currentDir);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\nexport function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult {\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir = findNearestProjectAgentsDir(cwd);\n\n\tconst emptyResult: LoadAgentsResult = { agents: [], diagnostics: [] };\n\tconst userResult = scope === \"project\" ? emptyResult : loadAgentsFromDir(userDir, \"user\");\n\tconst projectResult =\n\t\tscope === \"user\" || !projectAgentsDir ? emptyResult : loadAgentsFromDir(projectAgentsDir, \"project\");\n\n\tconst agentMap = new Map<string, AgentConfig>();\n\n\tif (scope === \"both\") {\n\t\tfor (const agent of userResult.agents) agentMap.set(agent.name, agent);\n\t\tfor (const agent of projectResult.agents) agentMap.set(agent.name, agent);\n\t} else if (scope === \"user\") {\n\t\tfor (const agent of userResult.agents) agentMap.set(agent.name, agent);\n\t} else {\n\t\tfor (const agent of projectResult.agents) agentMap.set(agent.name, agent);\n\t}\n\n\treturn {\n\t\tagents: Array.from(agentMap.values()),\n\t\tprojectAgentsDir,\n\t\tdiagnostics: [...userResult.diagnostics, ...projectResult.diagnostics],\n\t};\n}\n\n// --- Formatting helpers ---\n\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\treturn `${(count / 1000000).toFixed(1)}M`;\n}\n\nfunction formatUsageStats(\n\tusage: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\tcost: number;\n\t\tcontextTokens?: number;\n\t\tturns?: number;\n\t},\n\tmodel?: string,\n): string {\n\tconst parts: string[] = [];\n\tif (usage.turns) parts.push(`${usage.turns} turn${usage.turns > 1 ? \"s\" : \"\"}`);\n\tif (usage.input) parts.push(`↑${formatTokens(usage.input)}`);\n\tif (usage.output) parts.push(`↓${formatTokens(usage.output)}`);\n\tif (usage.cacheRead) parts.push(`R${formatTokens(usage.cacheRead)}`);\n\tif (usage.cacheWrite) parts.push(`W${formatTokens(usage.cacheWrite)}`);\n\tif (usage.cost) parts.push(`$${usage.cost.toFixed(4)}`);\n\tif (usage.contextTokens && usage.contextTokens > 0) {\n\t\tparts.push(`ctx:${formatTokens(usage.contextTokens)}`);\n\t}\n\tif (model) parts.push(model);\n\treturn parts.join(\" \");\n}\n\nfunction formatToolCall(\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tthemeFg: (color: any, text: string) => string,\n): string {\n\tswitch (toolName) {\n\t\tcase \"bash\": {\n\t\t\tconst command = (args.command as string) || \"...\";\n\t\t\tconst preview = command.length > 60 ? `${command.slice(0, 60)}...` : command;\n\t\t\treturn themeFg(\"muted\", \"$ \") + themeFg(\"toolOutput\", preview);\n\t\t}\n\t\tcase \"read\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst offset = args.offset as number | undefined;\n\t\t\tconst limit = args.limit as number | undefined;\n\t\t\tlet text = themeFg(\"accent\", filePath);\n\t\t\tif (offset !== undefined || limit !== undefined) {\n\t\t\t\tconst startLine = offset ?? 1;\n\t\t\t\tconst endLine = limit !== undefined ? startLine + limit - 1 : \"\";\n\t\t\t\ttext += themeFg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n\t\t\t}\n\t\t\treturn themeFg(\"muted\", \"read \") + text;\n\t\t}\n\t\tcase \"write\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst content = (args.content || \"\") as string;\n\t\t\tconst lines = content.split(\"\\n\").length;\n\t\t\tlet text = themeFg(\"muted\", \"write \") + themeFg(\"accent\", filePath);\n\t\t\tif (lines > 1) text += themeFg(\"dim\", ` (${lines} lines)`);\n\t\t\treturn text;\n\t\t}\n\t\tcase \"edit\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\treturn themeFg(\"muted\", \"edit \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"ls\": {\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"ls \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"find\": {\n\t\t\tconst pattern = (args.pattern || \"*\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"find \") + themeFg(\"accent\", pattern) + themeFg(\"dim\", ` in ${shortenPath(rawPath)}`);\n\t\t}\n\t\tcase \"grep\": {\n\t\t\tconst pattern = (args.pattern || \"\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn (\n\t\t\t\tthemeFg(\"muted\", \"grep \") +\n\t\t\t\tthemeFg(\"accent\", `/${pattern}/`) +\n\t\t\t\tthemeFg(\"dim\", ` in ${shortenPath(rawPath)}`)\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tconst argsStr = JSON.stringify(args);\n\t\t\tconst preview = argsStr.length > 50 ? `${argsStr.slice(0, 50)}...` : argsStr;\n\t\t\treturn themeFg(\"accent\", toolName) + themeFg(\"dim\", ` ${preview}`);\n\t\t}\n\t}\n}\n\n/** Child stderr is retained up to this many trailing characters; older output is dropped and flagged. */\nconst STDERR_RETENTION_CHARS = 64 * 1024;\n/** A child stdout line longer than this is dropped (never buffered unbounded) and flagged. */\nconst STDOUT_LINE_MAX_CHARS = 1024 * 1024;\n\nexport interface SubagentUsageStats {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tcontextTokens: number;\n\tturns: number;\n}\n\nexport interface SubagentSingleResult {\n\tagent: string;\n\tagentSource: \"user\" | \"project\" | \"unknown\";\n\ttask: string;\n\t/** Stable id for this child; defaults to `${toolCallId}-${childIndex}`. */\n\ttaskId: string;\n\t/** The task id of the process that spawned this child, or its tool call id at depth 0. */\n\tparentTaskId?: string;\n\t/** Depth the child runs at (parent depth + 1). */\n\tdepth: number;\n\tthinking?: string;\n\tattempt?: number;\n\texitCode: number;\n\tmessages: Message[];\n\tstderr: string;\n\t/** True when `stderr` dropped its oldest output to stay within the retention bound. */\n\tstderrTruncated?: boolean;\n\t/** True when at least one child stdout line exceeded the line bound and was dropped. */\n\tstdoutTruncated?: boolean;\n\tusage: SubagentUsageStats;\n\tmodel?: string;\n\tstopReason?: string;\n\terrorMessage?: string;\n\tstep?: number;\n\tisolation: SubagentIsolation;\n\tisolationDegradedReason?: \"not-a-git-repo\";\n\tmergeOutcome?: SubagentMergeOutcome;\n\tchangedFiles?: string[];\n\tpatchPath?: string;\n\tbaseRevision?: string;\n}\n\nexport type SubagentTaskEvent =\n\t| { type: \"schedule\"; taskId: string; dependsOn: string[]; ownerPaths: string[]; baseRevision?: string; at: number }\n\t| { type: \"wait\"; taskId: string; reason: \"concurrency\"; at: number }\n\t| { type: \"serialize\"; taskId: string; after: string[]; at: number }\n\t| { type: \"start\"; taskId: string; attempt: number; at: number }\n\t| { type: \"complete\"; taskId: string; attempt: number; at: number }\n\t| { type: \"fail\"; taskId: string; attempt: number; reason: string; at: number }\n\t| {\n\t\t\ttype: \"escalate\";\n\t\t\ttaskId: string;\n\t\t\tfromAttempt: number;\n\t\t\ttoAttempt: number;\n\t\t\tmodel?: string;\n\t\t\tthinking?: string;\n\t\t\tat: number;\n\t }\n\t| { type: \"skip\"; taskId: string; failedDependency: string; at: number };\n\nexport interface SubagentDetails {\n\tmode: \"single\" | \"parallel\" | \"chain\";\n\tagentScope: AgentScope;\n\tprojectAgentsDir: string | null;\n\tresults: SubagentSingleResult[];\n\ttaskEvents?: SubagentTaskEvent[];\n}\n\n/** Compact child result emitted while a subagent is still running. */\nexport interface SubagentProgressResult {\n\tagent: string;\n\tagentSource: \"user\" | \"project\" | \"unknown\";\n\ttask: string;\n\ttaskId: string;\n\tparentTaskId?: string;\n\tdepth: number;\n\tthinking?: string;\n\tattempt?: number;\n\texitCode: number;\n\tusage: SubagentUsageStats;\n\tmodel?: string;\n\tstopReason?: string;\n\terrorMessage?: string;\n\tstep?: number;\n\tisolation: SubagentIsolation;\n\tlatestText: string;\n}\n\n/** Compact details emitted for tool execution updates. Final results use SubagentDetails. */\nexport interface SubagentProgressDetails {\n\tmode: \"single\" | \"parallel\" | \"chain\";\n\tagentScope: AgentScope;\n\tprojectAgentsDir: string | null;\n\tresults: SubagentProgressResult[];\n\ttaskEvents?: SubagentTaskEvent[];\n}\n\nfunction truncateProgressText(text: string, keep: \"start\" | \"end\"): string {\n\tif (Buffer.byteLength(text, \"utf8\") <= PROGRESS_TEXT_CAP) return text;\n\n\tconst marker = \"…\";\n\tlet truncated =\n\t\tkeep === \"start\"\n\t\t\t? text.slice(0, PROGRESS_TEXT_CAP - marker.length)\n\t\t\t: text.slice(-PROGRESS_TEXT_CAP + marker.length);\n\twhile (Buffer.byteLength(truncated + marker, \"utf8\") > PROGRESS_TEXT_CAP) {\n\t\ttruncated = keep === \"start\" ? truncated.slice(0, -1) : truncated.slice(1);\n\t}\n\treturn keep === \"start\" ? truncated + marker : marker + truncated;\n}\n\n/** Convert full child results into bounded update payloads without their message histories. */\nexport function toProgressDetails(results: SubagentSingleResult[]): SubagentProgressResult[] {\n\treturn results.map((result) => ({\n\t\tagent: result.agent,\n\t\tagentSource: result.agentSource,\n\t\ttask: truncateProgressText(result.task, \"start\"),\n\t\ttaskId: result.taskId,\n\t\tparentTaskId: result.parentTaskId,\n\t\tdepth: result.depth,\n\t\tthinking: result.thinking,\n\t\tattempt: result.attempt,\n\t\texitCode: result.exitCode,\n\t\tusage: result.usage,\n\t\tmodel: result.model,\n\t\tstopReason: result.stopReason,\n\t\terrorMessage: result.errorMessage,\n\t\tstep: result.step,\n\t\tisolation: result.isolation,\n\t\tlatestText: truncateProgressText(getFinalOutput(result.messages), \"end\"),\n\t}));\n}\n\nexport function renderTaskWithContext(task: string, context?: TaskContext): string {\n\tconst parts = [`Task: ${task}`];\n\tif (context?.files?.length) parts.push(`Context files:\\n${context.files.map((f) => `- ${f}`).join(\"\\n\")}`);\n\tif (context?.acceptance?.length)\n\t\tparts.push(`Acceptance criteria:\\n${context.acceptance.map((a) => `- ${a}`).join(\"\\n\")}`);\n\tif (context?.baseRevision) parts.push(`Base revision: ${context.baseRevision}`);\n\treturn parts.join(\"\\n\\n\");\n}\n\nfunction getFinalOutput(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") return part.text;\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction isFailedResult(result: Pick<SubagentProgressResult, \"errorMessage\" | \"exitCode\" | \"stopReason\">): boolean {\n\treturn (\n\t\tBoolean(result.errorMessage) ||\n\t\tresult.exitCode !== 0 ||\n\t\tresult.stopReason === \"error\" ||\n\t\tresult.stopReason === \"aborted\"\n\t);\n}\n\nfunction getResultOutput(result: SubagentSingleResult): string {\n\tif (isFailedResult(result)) {\n\t\treturn result.errorMessage || result.stderr || getFinalOutput(result.messages) || \"(no output)\";\n\t}\n\treturn getFinalOutput(result.messages) || \"(no output)\";\n}\n\nfunction truncateParallelOutput(output: string): string {\n\tconst byteLength = Buffer.byteLength(output, \"utf8\");\n\tif (byteLength <= PER_TASK_OUTPUT_CAP) return output;\n\n\tlet truncated = output.slice(0, PER_TASK_OUTPUT_CAP);\n\twhile (Buffer.byteLength(truncated, \"utf8\") > PER_TASK_OUTPUT_CAP) {\n\t\ttruncated = truncated.slice(0, -1);\n\t}\n\treturn `${truncated}\\n\\n[Output truncated: ${byteLength - Buffer.byteLength(truncated, \"utf8\")} bytes omitted. Full output preserved in tool details.]`;\n}\n\ntype DisplayItem = { type: \"text\"; text: string } | { type: \"toolCall\"; name: string; args: Record<string, any> };\n\nfunction getDisplayItems(messages: Message[]): DisplayItem[] {\n\tconst items: DisplayItem[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") items.push({ type: \"text\", text: part.text });\n\t\t\t\telse if (part.type === \"toolCall\") items.push({ type: \"toolCall\", name: part.name, args: part.arguments });\n\t\t\t}\n\t\t}\n\t}\n\treturn items;\n}\n\ntype SubagentDisplayResult = SubagentSingleResult | SubagentProgressResult;\n\nfunction isProgressResult(result: SubagentDisplayResult): result is SubagentProgressResult {\n\treturn \"latestText\" in result;\n}\n\nfunction getResultDisplayItems(result: SubagentDisplayResult): DisplayItem[] {\n\tif (!isProgressResult(result)) return getDisplayItems(result.messages);\n\treturn result.latestText ? [{ type: \"text\", text: result.latestText }] : [];\n}\n\nfunction getResultFinalOutput(result: SubagentDisplayResult): string {\n\treturn isProgressResult(result) ? result.latestText : getFinalOutput(result.messages);\n}\n\nasync function writePromptToTempFile(agentName: string, prompt: string): Promise<{ dir: string; filePath: string }> {\n\tconst tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"humain-subagent-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/g, \"_\");\n\tconst filePath = path.join(tmpDir, `prompt-${safeName}.md`);\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, prompt, { encoding: \"utf-8\", mode: 0o600 });\n\t});\n\treturn { dir: tmpDir, filePath };\n}\n\nfunction getCliInvocation(args: string[]): { command: string; args: string[] } {\n\tconst currentScript = process.argv[1];\n\tconst isBunVirtualScript = currentScript?.startsWith(\"/$bunfs/root/\");\n\tif (currentScript && !isBunVirtualScript && fs.existsSync(currentScript)) {\n\t\treturn { command: process.execPath, args: [currentScript, ...args] };\n\t}\n\n\tconst execName = path.basename(process.execPath).toLowerCase();\n\tconst isGenericRuntime = /^(node|bun)(\\.exe)?$/.test(execName);\n\tif (!isGenericRuntime) {\n\t\treturn { command: process.execPath, args };\n\t}\n\n\treturn { command: resolveCliCommand(), args };\n}\n\ntype OnUpdateCallback = (partial: AgentToolResult<SubagentProgressDetails>) => void;\n\n/** Direct-worker facts for one attempt. Written by runSingleAgent, read by the caller once the attempt loop ends. */\ninterface AttemptEvidence {\n\t/** The worker observer was told the attempt started (immediately before spawn). */\n\tstarted: boolean;\n\t/** spawn() returned a process. */\n\tlaunched: boolean;\n\t/** `proc.kill(\"SIGTERM\")` from the abort path reported delivery. A false return is not delivery. */\n\tsigtermDelivered: boolean;\n\t/** `proc.kill(\"SIGKILL\")` from the escalation timer reported delivery. A false return is not delivery. */\n\tsigkillDelivered: boolean;\n\t/** The direct worker's close event arrived after at least one termination signal was delivered. */\n\tcloseAfterDelivery: boolean;\n\t/** The direct worker's close event arrived. */\n\tclosed: boolean;\n\tcloseCode: number | null;\n\tcloseSignal: string | null;\n\t/**\n\t * Outcome of a close that carried a numeric exit code before any termination signal was delivered;\n\t * null otherwise (including a signal close this code did not send, which is not attributable).\n\t */\n\tnaturalOutcome: \"completed\" | \"failed\" | null;\n\t/** An error before the OS created a child (no PID), not a failed signal or other post-spawn error. */\n\tspawnError: boolean;\n\t/** The worktree merge-back reported a conflict or threw, after the direct worker closed. */\n\tmergeFailed: boolean;\n\t/**\n\t * Failure kind of a natural (pre-kill) failed close, from the child's own stop reason. Recorded at close\n\t * because a later abort overwrites the result's stop reason.\n\t */\n\tnaturalFailureKind: SubagentFailureKind | null;\n}\n\nfunction newAttemptEvidence(): AttemptEvidence {\n\treturn {\n\t\tstarted: false,\n\t\tlaunched: false,\n\t\tsigtermDelivered: false,\n\t\tsigkillDelivered: false,\n\t\tcloseAfterDelivery: false,\n\t\tclosed: false,\n\t\tcloseCode: null,\n\t\tcloseSignal: null,\n\t\tnaturalOutcome: null,\n\t\tspawnError: false,\n\t\tmergeFailed: false,\n\t\tnaturalFailureKind: null,\n\t};\n}\n\ninterface ChildOptions {\n\ttaskId: string;\n\tthinking?: string;\n\tcontext?: TaskContext;\n\tattempt?: number;\n\t/** Lifecycle observer for this worker; absent when nothing observes the run. */\n\tobserver?: SubagentWorkerObserver;\n\t/** Out-object receiving this attempt's direct-worker evidence. */\n\tevidence?: AttemptEvidence;\n\t/** Trace bookkeeping for this task; absent when trace capture is off. */\n\ttraceChild?: SubagentTraceChild;\n\t/** Evidence sink of the owning session, resolved when the tool started. */\n\tfileEvidenceSink?: FileEvidenceSink;\n}\n\nasync function runSingleAgent(\n\tdefaultCwd: string,\n\tagents: AgentConfig[],\n\tagentDiagnostics: ResourceDiagnostic[],\n\tagentName: string,\n\ttask: string,\n\tcwd: string | undefined,\n\tisolation: SubagentIsolation | undefined,\n\tstep: number | undefined,\n\tmodel: string | undefined,\n\tparentModel: Model<Api>,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: OnUpdateCallback | undefined,\n\tmakeProgressDetails: (results: SubagentProgressResult[]) => SubagentProgressDetails,\n\ttoolCallId: string,\n\tchildIndex: number,\n\toptions: ChildOptions,\n): Promise<SubagentSingleResult> {\n\tconst childDepth = currentSubagentDepth() + 1;\n\tconst parentTaskId = currentTaskId() ?? toolCallId;\n\tconst agent = agents.find((a) => a.name === agentName);\n\n\tif (!agent) {\n\t\tconst available = agents.map((a) => `\"${a.name}\"`).join(\", \") || \"none\";\n\t\tconst skippedNote =\n\t\t\tagentDiagnostics.length > 0\n\t\t\t\t? ` ${agentDiagnostics.length} agent file(s) failed to load and were skipped: ${agentDiagnostics\n\t\t\t\t\t\t.map((d) => `${d.path ?? \"(unknown path)\"} (${d.message})`)\n\t\t\t\t\t\t.join(\"; \")}.`\n\t\t\t\t: \"\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: \"unknown\",\n\t\t\ttask,\n\t\t\ttaskId: options.taskId,\n\t\t\tparentTaskId,\n\t\t\tdepth: childDepth,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: `Unknown agent: \"${agentName}\". Available agents: ${available}.${skippedNote}`,\n\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\tstep,\n\t\t\tisolation: \"shared\",\n\t\t\tthinking: options.thinking,\n\t\t\tattempt: options.attempt,\n\t\t\tbaseRevision: options.context?.baseRevision,\n\t\t};\n\t}\n\tlet worktree: SubagentWorktree | null = null;\n\tlet isolationDegradedReason: \"not-a-git-repo\" | undefined;\n\tconst parentCwd = cwd ?? defaultCwd;\n\tlet childCwd = parentCwd;\n\tconst args: string[] = [\"--mode\", \"json\", \"-p\", \"--no-session\"];\n\tif (model) {\n\t\t// Canonical \"provider/modelId\" handle: split on the FIRST slash so\n\t\t// provider-prefixed ids (e.g. \"bedrock/global.anthropic....\") pass\n\t\t// through `--provider`/`--model` instead of being fuzzy-matched as one\n\t\t// string (see model-resolver.ts resolveCliModel).\n\t\tconst slashIndex = model.indexOf(\"/\");\n\t\tif (slashIndex !== -1) {\n\t\t\targs.push(\"--provider\", model.slice(0, slashIndex), \"--model\", model.slice(slashIndex + 1));\n\t\t} else {\n\t\t\targs.push(\"--model\", model);\n\t\t}\n\t} else {\n\t\targs.push(\"--provider\", parentModel.provider, \"--model\", parentModel.id);\n\t}\n\tif (agent.tools && agent.tools.length > 0) args.push(\"--tools\", agent.tools.join(\",\"));\n\tif (options.thinking) args.push(\"--thinking\", options.thinking);\n\n\tlet tmpPromptDir: string | null = null;\n\tlet tmpPromptPath: string | null = null;\n\n\tconst currentResult: SubagentSingleResult = {\n\t\tagent: agentName,\n\t\tagentSource: agent.source,\n\t\ttask,\n\t\ttaskId: options.taskId,\n\t\tparentTaskId,\n\t\tdepth: childDepth,\n\t\tthinking: options.thinking,\n\t\tattempt: options.attempt,\n\t\texitCode: 0,\n\t\tmessages: [],\n\t\tstderr: \"\",\n\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\tmodel: model ?? `${parentModel.provider}/${parentModel.id}`,\n\t\tstep,\n\t\tisolation: \"shared\",\n\t\tbaseRevision: options.context?.baseRevision,\n\t};\n\n\tconst emitUpdate = () => {\n\t\tif (onUpdate) {\n\t\t\tconst progressResults = toProgressDetails([currentResult]);\n\t\t\tonUpdate({\n\t\t\t\tcontent: [{ type: \"text\", text: progressResults[0].latestText || \"(running...)\" }],\n\t\t\t\tdetails: makeProgressDetails(progressResults),\n\t\t\t});\n\t\t}\n\t};\n\n\tconst evidence = options.evidence;\n\tlet wasAborted = false;\n\ttry {\n\t\tif (isolation === \"worktree\") {\n\t\t\tif (await isGitWorkTree(parentCwd)) {\n\t\t\t\tworktree = await createSubagentWorktree({ parentCwd, label: `${toolCallId}-${childIndex}` });\n\t\t\t\tchildCwd = worktree.cwd;\n\t\t\t\tcurrentResult.isolation = \"worktree\";\n\t\t\t} else {\n\t\t\t\tisolationDegradedReason = \"not-a-git-repo\";\n\t\t\t}\n\t\t}\n\t\tif (isolationDegradedReason) currentResult.isolationDegradedReason = isolationDegradedReason;\n\t\tif (signal?.aborted) throw new Error(\"Subagent was aborted\");\n\t\tif (agent.systemPrompt.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);\n\t\t\ttmpPromptDir = tmp.dir;\n\t\t\ttmpPromptPath = tmp.filePath;\n\t\t\targs.push(\"--append-system-prompt\", tmpPromptPath);\n\t\t}\n\n\t\targs.push(renderTaskWithContext(task, options.context));\n\n\t\tconst invocation = getCliInvocation(args);\n\t\tconst env: NodeJS.ProcessEnv = {\n\t\t\t...process.env,\n\t\t\t[SUBAGENT_DEPTH_ENV]: String(childDepth),\n\t\t\t[TASK_ID_ENV]: options.taskId,\n\t\t\t[PARENT_TASK_ID_ENV]: parentTaskId,\n\t\t};\n\t\tif (options.context?.baseRevision) env[TASK_BASE_REVISION_ENV] = options.context.baseRevision;\n\t\telse delete env[TASK_BASE_REVISION_ENV];\n\t\t// Ingest credentials never reach a child, whether or not tracing is active here.\n\t\tdelete env[TRACE_ENV.ingestToken];\n\t\tdelete env[TRACE_ENV.ingestUrl];\n\t\tconst traceEnv = options.traceChild?.beginAttempt(options.attempt ?? 1);\n\t\tif (traceEnv) {\n\t\t\tObject.assign(env, traceEnv.set);\n\t\t\tfor (const key of traceEnv.unset) delete env[key];\n\t\t}\n\t\tconst launchHandle = await options.traceChild?.prepareLaunch?.(`${options.taskId}-${options.attempt ?? 1}`);\n\t\tconst launched = await launchHandle?.launch({\n\t\t\t...invocation,\n\t\t\tcwd: childCwd,\n\t\t\tenv,\n\t\t\tstdout: \"pipe\",\n\t\t\tstderr: \"pipe\",\n\t\t});\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tif (evidence) evidence.started = true;\n\t\t\ttry {\n\t\t\t\toptions.observer?.start(options.attempt ?? 1, { model: currentResult.model });\n\t\t\t} catch {\n\t\t\t\t/* observation never affects execution */\n\t\t\t}\n\t\t\tconst proc =\n\t\t\t\tlaunched?.process ??\n\t\t\t\tspawn(invocation.command, invocation.args, {\n\t\t\t\t\tcwd: childCwd,\n\t\t\t\t\tshell: false,\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\t\tenv,\n\t\t\t\t});\n\t\t\tif (evidence) evidence.launched = true;\n\t\t\tlet buffer = \"\";\n\t\t\tlet discardingLine = false;\n\t\t\tlet settled = false;\n\t\t\t// Activity source: the child's JSON event stream. One assistant `message_end` is one turn (the same\n\t\t\t// count as usage.turns) and one `tool_execution_start` is one tool call. Counts are per attempt.\n\t\t\tlet toolCalls = 0;\n\t\t\tconst reportActivity = () => {\n\t\t\t\ttry {\n\t\t\t\t\toptions.observer?.activity(currentResult.usage.turns, toolCalls);\n\t\t\t\t} catch {\n\t\t\t\t\t/* observation never affects execution */\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst processLine = (line: string) => {\n\t\t\t\tif (!line.trim()) return;\n\t\t\t\tlet event: any;\n\t\t\t\ttry {\n\t\t\t\t\tevent = JSON.parse(line);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"message_end\" && event.message) {\n\t\t\t\t\tconst msg = event.message as Message;\n\t\t\t\t\tcurrentResult.messages.push(msg);\n\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tcurrentResult.usage.turns++;\n\t\t\t\t\t\tconst usage = msg.usage;\n\t\t\t\t\t\tif (usage) {\n\t\t\t\t\t\t\tcurrentResult.usage.input += usage.input || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.output += usage.output || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheRead += usage.cacheRead || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cacheWrite += usage.cacheWrite || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.cost += usage.cost?.total || 0;\n\t\t\t\t\t\t\tcurrentResult.usage.contextTokens = usage.totalTokens || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (msg.model) currentResult.model = msg.responseModel ?? msg.model;\n\t\t\t\t\t\tif (msg.stopReason) currentResult.stopReason = msg.stopReason;\n\t\t\t\t\t\tcurrentResult.errorMessage = msg.errorMessage;\n\t\t\t\t\t\treportActivity();\n\t\t\t\t\t}\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\n\t\t\t\t// Counted without emitting: the new count rides along with the next update that is sent anyway.\n\t\t\t\tif (event.type === \"tool_execution_start\") {\n\t\t\t\t\ttoolCalls++;\n\t\t\t\t\treportActivity();\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"tool_result_end\" && event.message) {\n\t\t\t\t\tcurrentResult.messages.push(event.message as Message);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tproc.stdout!.on(\"data\", (data) => {\n\t\t\t\tlet chunk: string = data.toString();\n\t\t\t\twhile (chunk.length > 0) {\n\t\t\t\t\tconst newline = chunk.indexOf(\"\\n\");\n\t\t\t\t\tconst piece = newline === -1 ? chunk : chunk.slice(0, newline);\n\t\t\t\t\tchunk = newline === -1 ? \"\" : chunk.slice(newline + 1);\n\t\t\t\t\tif (!discardingLine) {\n\t\t\t\t\t\tif (buffer.length + piece.length > STDOUT_LINE_MAX_CHARS) {\n\t\t\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\t\t\tdiscardingLine = true;\n\t\t\t\t\t\t\tcurrentResult.stdoutTruncated = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbuffer += piece;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (newline === -1) continue;\n\t\t\t\t\tif (discardingLine) {\n\t\t\t\t\t\tdiscardingLine = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst line = buffer;\n\t\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\t\tprocessLine(line);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tproc.stderr!.on(\"data\", (data) => {\n\t\t\t\tconst combined = currentResult.stderr + data.toString();\n\t\t\t\tif (combined.length > STDERR_RETENTION_CHARS) {\n\t\t\t\t\tcurrentResult.stderr = combined.slice(-STDERR_RETENTION_CHARS);\n\t\t\t\t\tcurrentResult.stderrTruncated = true;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentResult.stderr = combined;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet abortListener: (() => void) | undefined;\n\t\t\tlet killTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t\tconst cleanupAbort = () => {\n\t\t\t\tif (signal && abortListener) signal.removeEventListener(\"abort\", abortListener);\n\t\t\t\tif (killTimer) clearTimeout(killTimer);\n\t\t\t};\n\n\t\t\tproc.on(\"close\", (code, closeSignal) => {\n\t\t\t\t// First settlement owns observation evidence. Late close/error events must not rewrite\n\t\t\t\t// attribution; the existing execution handlers still process/resolve as before.\n\t\t\t\tconst firstSettlement = !settled;\n\t\t\t\tif (evidence && firstSettlement) {\n\t\t\t\t\tevidence.closed = true;\n\t\t\t\t\tevidence.closeCode = typeof code === \"number\" ? code : null;\n\t\t\t\t\tevidence.closeSignal = closeSignal ?? null;\n\t\t\t\t\tevidence.closeAfterDelivery = evidence.sigtermDelivered || evidence.sigkillDelivered;\n\t\t\t\t}\n\t\t\t\tsettled = true;\n\t\t\t\tcleanupAbort();\n\t\t\t\tif (buffer.trim()) processLine(buffer);\n\t\t\t\t// Recorded before runSingleAgent overwrites an abort-raced result as aborted. An attempted\n\t\t\t\t// kill that was not delivered does not make the close any less natural. A null code means\n\t\t\t\t// signal termination we did not deliver (external SIGINT, OOM SIGKILL): no reliable outcome.\n\t\t\t\tif (evidence && firstSettlement && !evidence.closeAfterDelivery && code !== null) {\n\t\t\t\t\tevidence.naturalOutcome = code === 0 && !isFailedResult(currentResult) ? \"completed\" : \"failed\";\n\t\t\t\t\tif (evidence.naturalOutcome === \"failed\") {\n\t\t\t\t\t\tevidence.naturalFailureKind = currentResult.stopReason === \"error\" ? \"model_error\" : \"process_error\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresolve(code ?? 0);\n\t\t\t});\n\n\t\t\tproc.on(\"error\", () => {\n\t\t\t\t// Node exposes the PID before 'spawn' and retains it after exit. A failed kill can emit\n\t\t\t\t// 'error' synchronously without ending that process, so only no-PID errors prove spawn failure.\n\t\t\t\tif (evidence && !settled) evidence.spawnError = proc.pid === undefined;\n\t\t\t\tsettled = true;\n\t\t\t\tcleanupAbort();\n\t\t\t\tresolve(1);\n\t\t\t});\n\n\t\t\tif (signal) {\n\t\t\t\tconst killProc = () => {\n\t\t\t\t\tif (settled) return;\n\t\t\t\t\twasAborted = true;\n\t\t\t\t\tkillTimer = setTimeout(() => {\n\t\t\t\t\t\tif (!settled) {\n\t\t\t\t\t\t\tconst delivered = proc.kill(\"SIGKILL\") === true;\n\t\t\t\t\t\t\tif (evidence && delivered) evidence.sigkillDelivered = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 5000);\n\t\t\t\t\tkillTimer.unref?.();\n\t\t\t\t\tconst delivered = proc.kill(\"SIGTERM\") === true;\n\t\t\t\t\tif (evidence && delivered) evidence.sigtermDelivered = true;\n\t\t\t\t};\n\t\t\t\tabortListener = killProc;\n\t\t\t\tif (signal.aborted) killProc();\n\t\t\t\telse signal.addEventListener(\"abort\", killProc, { once: true });\n\t\t\t}\n\t\t});\n\n\t\tcurrentResult.exitCode = exitCode;\n\t\tif (wasAborted || signal?.aborted) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tcurrentResult.errorMessage = \"Subagent was aborted\";\n\t\t}\n\t} catch (error) {\n\t\tcurrentResult.exitCode = 1;\n\t\tcurrentResult.errorMessage = error instanceof Error ? error.message : String(error);\n\t\tif (wasAborted || signal?.aborted) currentResult.stopReason = \"aborted\";\n\t} finally {\n\t\tif (worktree) {\n\t\t\t// Retain base/end revisions and the bounded diff before merge/disposal, whatever the outcome.\n\t\t\t// The outcome is reported after the merge, so a conflict or merge error is recorded as failed.\n\t\t\tconst sink = options.fileEvidenceSink;\n\t\t\tlet observed: Awaited<ReturnType<typeof worktree.captureEvidence>> | undefined;\n\t\t\tif (sink?.onWorktreeEvidence) {\n\t\t\t\ttry {\n\t\t\t\t\tobserved = await worktree.captureEvidence();\n\t\t\t\t} catch {\n\t\t\t\t\t/* observation failure never changes the subagent outcome */\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (isFailedResult(currentResult) || signal?.aborted) {\n\t\t\t\t\tcurrentResult.mergeOutcome = \"skipped\";\n\t\t\t\t} else {\n\t\t\t\t\tconst merged = await worktree.mergeBack();\n\t\t\t\t\tcurrentResult.mergeOutcome = merged.outcome;\n\t\t\t\t\tcurrentResult.changedFiles = merged.changedFiles;\n\t\t\t\t\tif (merged.patchPath) currentResult.patchPath = merged.patchPath;\n\t\t\t\t\tif (merged.outcome === \"conflict\") {\n\t\t\t\t\t\tif (evidence) evidence.mergeFailed = true;\n\t\t\t\t\t\tcurrentResult.errorMessage = `subagent merge conflict: ${merged.changedFiles.join(\", \")} could not be applied to the parent workspace; patch kept at ${merged.patchPath}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (evidence) evidence.mergeFailed = true;\n\t\t\t\tcurrentResult.exitCode = 1;\n\t\t\t\tcurrentResult.mergeOutcome = \"skipped\";\n\t\t\t\tcurrentResult.errorMessage = `subagent merge failed: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t} finally {\n\t\t\t\tif (observed && sink?.onWorktreeEvidence) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait sink.onWorktreeEvidence({\n\t\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\t...observed,\n\t\t\t\t\t\t\toutcome: signal?.aborted ? \"cancelled\" : isFailedResult(currentResult) ? \"failed\" : \"succeeded\",\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* observation failure never changes the subagent outcome */\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait worktree.dispose();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcurrentResult.exitCode = 1;\n\t\t\t\t\tconst cleanupError = `subagent worktree cleanup failed: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t\t\tconst primaryOutput = getResultOutput(currentResult);\n\t\t\t\t\tcurrentResult.errorMessage =\n\t\t\t\t\t\tprimaryOutput === \"(no output)\" ? cleanupError : `${primaryOutput}\\n${cleanupError}`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (tmpPromptPath)\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpPromptPath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\tif (tmpPromptDir)\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(tmpPromptDir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t}\n\toptions.traceChild?.finishAttempt(currentResult, isFailedResult(currentResult));\n\treturn currentResult;\n}\n\nconst ThinkingLevelSchema = StringEnum([\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const, {\n\tdescription:\n\t\t\"Reasoning effort for this child. Maps to the CLI --thinking level. Defaults to the child's own default.\",\n});\n\n/** Bounded context handed to a child. Strings are rendered verbatim into the child's task text; callers must not pass untrusted multi-line content. */\nexport interface TaskContext {\n\tfiles?: string[];\n\tacceptance?: string[];\n\tbaseRevision?: string;\n}\n\nconst TaskItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task to delegate to the agent\" }),\n\tid: Type.Optional(\n\t\tType.String({ description: \"Stable task id. Defaults to <toolCallId>-<index>. Referenced by dependsOn.\" }),\n\t),\n\tthinking: Type.Optional(ThinkingLevelSchema),\n\tmodel: Type.Optional(\n\t\tType.String({\n\t\t\tdescription: \"Optional canonical provider/model for this child. Defaults to the parent provider/model.\",\n\t\t}),\n\t),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n\tisolation: Type.Optional(\n\t\tStringEnum([\"shared\", \"worktree\"] as const, {\n\t\t\tdescription:\n\t\t\t\t\"Filesystem isolation for this child. 'worktree' runs it in a disposable git worktree and merges its changes back; the caller's policy sets this, not the model.\",\n\t\t}),\n\t),\n\tdependsOn: Type.Optional(\n\t\tType.Array(Type.String(), {\n\t\t\tdescription: \"Ids of sibling tasks that must complete successfully before this one starts.\",\n\t\t}),\n\t),\n\townerPaths: Type.Optional(\n\t\tType.Array(Type.String(), {\n\t\t\tdescription:\n\t\t\t\t\"Repo-relative paths this task owns. Siblings whose ownerPaths overlap run one after another instead of in parallel.\",\n\t\t}),\n\t),\n\tonFailure: Type.Optional(\n\t\tType.Object(\n\t\t\t{\n\t\t\t\tretryWith: Type.Optional(\n\t\t\t\t\tType.Object({\n\t\t\t\t\t\tmodel: Type.Optional(Type.String({ description: \"Canonical provider/model for the retry.\" })),\n\t\t\t\t\t\tthinking: Type.Optional(ThinkingLevelSchema),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t\tmaxAttempts: Type.Optional(\n\t\t\t\t\tType.Integer({ minimum: 1, maximum: 3, description: \"Total attempts including the first. Default 1.\" }),\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Retry only this task on failure with a different model or thinking level. The caller's policy sets this.\",\n\t\t\t},\n\t\t),\n\t),\n\tcontext: Type.Optional(\n\t\tType.Object(\n\t\t\t{\n\t\t\t\tfiles: Type.Optional(Type.Array(Type.String(), { description: \"Files the child should read first.\" })),\n\t\t\t\tacceptance: Type.Optional(\n\t\t\t\t\tType.Array(Type.String(), { description: \"Acceptance criteria the child must satisfy.\" }),\n\t\t\t\t),\n\t\t\t\tbaseRevision: Type.Optional(Type.String({ description: \"Git revision the packet was assembled against.\" })),\n\t\t\t},\n\t\t\t{ description: \"Bounded context packet for this child.\" },\n\t\t),\n\t),\n});\n\nconst ChainItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task with optional {previous} placeholder for prior output\" }),\n\tmodel: Type.Optional(\n\t\tType.String({\n\t\t\tdescription: \"Optional canonical provider/model for this child. Defaults to the parent provider/model.\",\n\t\t}),\n\t),\n\tthinking: Type.Optional(ThinkingLevelSchema),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst AgentScopeSchema = StringEnum([\"user\", \"project\", \"both\"] as const, {\n\tdescription: 'Which agent directories to use. Default: \"user\". Use \"both\" to include project-local agents.',\n\tdefault: \"user\",\n});\n\nconst SubagentParams = Type.Object({\n\tagent: Type.Optional(Type.String({ description: \"Name of the agent to invoke (for single mode)\" })),\n\ttask: Type.Optional(Type.String({ description: \"Task to delegate (for single mode)\" })),\n\tmodel: Type.Optional(\n\t\tType.String({\n\t\t\tdescription: \"Optional canonical provider/model for this child. Defaults to the parent provider/model.\",\n\t\t}),\n\t),\n\tthinking: Type.Optional(ThinkingLevelSchema),\n\ttasks: Type.Optional(Type.Array(TaskItem, { description: \"Array of {agent, task} for parallel execution\" })),\n\tchain: Type.Optional(Type.Array(ChainItem, { description: \"Array of {agent, task} for sequential execution\" })),\n\tagentScope: Type.Optional(AgentScopeSchema),\n\tconfirmProjectAgents: Type.Optional(\n\t\tType.Boolean({ description: \"Prompt before running project-local agents. Default: true.\", default: true }),\n\t),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process (single mode)\" })),\n\tisolation: Type.Optional(\n\t\tStringEnum([\"shared\", \"worktree\"] as const, {\n\t\t\tdescription:\n\t\t\t\t\"Filesystem isolation for this child. 'worktree' runs it in a disposable git worktree and merges its changes back; the caller's policy sets this, not the model.\",\n\t\t}),\n\t),\n});\n\nconst PREVIEW_SOURCE_CAP = 1024;\nconst PREVIEW_SCAN_WINDOW = 4096;\n\n/**\n * First line containing a non-whitespace character within the first `PREVIEW_SCAN_WINDOW` code units of `text`,\n * cut to `PREVIEW_SOURCE_CAP`; only that bounded prefix is ever split or scanned. The registry sanitizes and\n * truncates the result to the contract maximum. Used only for the worker's own final assistant output.\n */\nfunction firstNonEmptyLine(text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tfor (const line of text.slice(0, PREVIEW_SCAN_WINDOW).split(/\\r\\n|[\\n\\r\\u2028\\u2029]/)) {\n\t\tconst trimmed = line.trimStart();\n\t\tif (trimmed) return trimmed.slice(0, PREVIEW_SOURCE_CAP);\n\t}\n\treturn undefined;\n}\n\n/**\n * Failure kind and preview for a failed worker. Spawn error -> spawn_failed; worktree merge conflict or\n * failure -> merge_failed; stopReason \"error\" -> model_error; any other failed close -> process_error.\n * Previews are fixed strings only (\"Model request failed\", \"Worktree merge conflict\", \"Worktree merge failed\",\n * \"Exited with code N\"). Child error messages, stderr, worktree and patch paths never reach a preview: provider\n * errors can carry credentials, paths or response bodies. The only other preview source is the worker's own final\n * assistant output on completion (see `settleWorkerOutcome`).\n */\nfunction failureOf(\n\tresult: SubagentSingleResult,\n\tevidence: AttemptEvidence,\n): { kind: SubagentFailureKind; preview: string | undefined } {\n\tif (evidence.spawnError) return { kind: \"spawn_failed\", preview: undefined };\n\tif (evidence.mergeFailed) {\n\t\treturn {\n\t\t\tkind: \"merge_failed\",\n\t\t\tpreview: result.mergeOutcome === \"conflict\" ? \"Worktree merge conflict\" : \"Worktree merge failed\",\n\t\t};\n\t}\n\tconst kind = evidence.naturalFailureKind ?? (result.stopReason === \"error\" ? \"model_error\" : \"process_error\");\n\tif (kind === \"model_error\") return { kind, preview: \"Model request failed\" };\n\tconst code = evidence.closeCode;\n\treturn { kind, preview: code !== null && code !== 0 ? `Exited with code ${code}` : undefined };\n}\n\n/** Exit status of a Node child that trapped SIGTERM and exited through its own handler (print-mode.ts). */\nconst TRAPPED_SIGTERM_EXIT_CODE = 143;\n\n/**\n * Settles one worker's observation from the last attempt's direct-worker evidence.\n * Intermediate retry failures are never reported; the worker stays running until the attempt loop ends.\n * Observation only: errors are swallowed and no claim is made about descendants.\n */\nfunction settleWorkerOutcome(\n\tworker: SubagentWorkerObserver,\n\tresult: SubagentSingleResult,\n\tevidence: AttemptEvidence,\n\teverStarted: boolean,\n\taborted: boolean,\n): void {\n\tif (!worker.enabled) return;\n\ttry {\n\t\t// A launched worker that closed without a numeric exit code and without a signal matching one we\n\t\t// delivered has neither a reliable attribution nor a reliable outcome: leave it for settle\n\t\t// (unresolved). This precedes the non-failed-result shortcut, since the result of such a close\n\t\t// is a success result (`resolve(code ?? 0)`) that says nothing about how the worker ended.\n\t\tif (\n\t\t\tevidence.launched &&\n\t\t\t!evidence.spawnError &&\n\t\t\tevidence.closed &&\n\t\t\tevidence.closeCode === null &&\n\t\t\t!(\n\t\t\t\t(evidence.closeSignal === \"SIGTERM\" && evidence.sigtermDelivered) ||\n\t\t\t\t(evidence.closeSignal === \"SIGKILL\" && evidence.sigkillDelivered)\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst completeWorker = () => worker.complete(firstNonEmptyLine(getFinalOutput(result.messages)));\n\t\tif (!isFailedResult(result)) {\n\t\t\tcompleteWorker();\n\t\t\treturn;\n\t\t}\n\t\tconst failWorker = () => {\n\t\t\tconst failure = failureOf(result, evidence);\n\t\t\tworker.fail(failure.kind, failure.preview);\n\t\t};\n\t\tif (evidence.launched) {\n\t\t\tif (evidence.sigtermDelivered || evidence.sigkillDelivered) {\n\t\t\t\t// Attributable only when the direct worker closed after a delivered kill, and either died from the\n\t\t\t\t// very signal we delivered, or (F-5) trapped our delivered SIGTERM and exited with its handler's\n\t\t\t\t// code 143 instead of dying by signal (real json/print-mode children do). Any other code after a\n\t\t\t\t// delivered kill is left for settle (unresolved/unconfirmed).\n\t\t\t\t// Evidence level (F-5, accepted): the child CLI exits 143 only from its own SIGTERM handler, and\n\t\t\t\t// requiring a delivered SIGTERM followed by a close is the same evidence as the signal-death close\n\t\t\t\t// above. Neither proves exclusive causation: a concurrent external SIGTERM to the same child is\n\t\t\t\t// indistinguishable from ours. The claim is limited to the direct worker, never descendants.\n\t\t\t\tif (\n\t\t\t\t\tevidence.closeAfterDelivery &&\n\t\t\t\t\t((evidence.closeSignal === \"SIGTERM\" && evidence.sigtermDelivered) ||\n\t\t\t\t\t\t(evidence.closeSignal === \"SIGKILL\" && evidence.sigkillDelivered) ||\n\t\t\t\t\t\t(evidence.closeSignal === null &&\n\t\t\t\t\t\t\tevidence.closeCode === TRAPPED_SIGTERM_EXIT_CODE &&\n\t\t\t\t\t\t\tevidence.sigtermDelivered))\n\t\t\t\t) {\n\t\t\t\t\tworker.terminatedByCancellation();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (evidence.spawnError) {\n\t\t\t\tfailWorker();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// No kill was delivered. The result is failed here; if the close was natural but a later\n\t\t\t// abort (or an undelivered kill attempt) overwrote the result, the recorded natural outcome\n\t\t\t// is authoritative.\n\t\t\tif (evidence.naturalOutcome !== null) {\n\t\t\t\tif (aborted && evidence.naturalOutcome === \"completed\") completeWorker();\n\t\t\t\telse failWorker();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (aborted) {\n\t\t\tif (!everStarted) worker.cancelledBeforeStart();\n\t\t\treturn;\n\t\t}\n\t\tworker.spawnFailed(false);\n\t} catch {\n\t\t/* observation never affects execution */\n\t}\n}\n\n/** Wraps an observer so no method can throw into execution. */\nfunction guardWorkerObserver(worker: SubagentWorkerObserver): SubagentWorkerObserver {\n\tif (!worker.enabled) return worker;\n\tconst guard =\n\t\t<A extends unknown[]>(method: (...args: A) => void) =>\n\t\t(...args: A): void => {\n\t\t\ttry {\n\t\t\t\tmethod.apply(worker, args);\n\t\t\t} catch {\n\t\t\t\t/* observation never affects execution */\n\t\t\t}\n\t\t};\n\treturn {\n\t\tenabled: true,\n\t\twait: guard(worker.wait),\n\t\tstart: guard(worker.start),\n\t\tactivity: guard(worker.activity),\n\t\tspawnFailed: guard(worker.spawnFailed),\n\t\tskip: guard(worker.skip),\n\t\tcomplete: guard(worker.complete),\n\t\tfail: guard(worker.fail),\n\t\trequestCancel: guard(worker.requestCancel),\n\t\tcancelledBeforeStart: guard(worker.cancelledBeforeStart),\n\t\tterminatedByCancellation: guard(worker.terminatedByCancellation),\n\t};\n}\n\n/**\n * Per-invocation lifecycle observation. Inert without a capability. Holds at most one observer per\n * admitted worker slot (bounded by SUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN); never throws into execution.\n */\nclass SubagentObservation {\n\tprivate readonly capability: SubagentProgressCapability | undefined;\n\tprivate readonly signal: AbortSignal | undefined;\n\tprivate run: SubagentRunObserver | undefined;\n\tprivate readonly workers: SubagentWorkerObserver[] = [];\n\tprivate abortListener: (() => void) | undefined;\n\tprivate settled = false;\n\n\tconstructor(capability: SubagentProgressCapability | undefined, signal: AbortSignal | undefined) {\n\t\tthis.capability = capability;\n\t\tthis.signal = signal;\n\t}\n\n\t/** Admits the run and returns the onUpdate callback to use from here on. */\n\tadmit(\n\t\tonUpdate: OnUpdateCallback | undefined,\n\t\tmeta: { toolCallId: string; mode: SubagentRunMode },\n\t): OnUpdateCallback | undefined {\n\t\tif (!this.capability) return onUpdate;\n\t\ttry {\n\t\t\tconst run = this.capability.admitRun(meta);\n\t\t\tif (!run.enabled) return onUpdate;\n\t\t\tthis.run = run;\n\t\t\tconst signal = this.signal;\n\t\t\tif (signal) {\n\t\t\t\t// Registered before any worker launches, so it runs ahead of runSingleAgent's kill listener.\n\t\t\t\tconst listener = () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trun.requestCancel();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* observation never affects execution */\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.abortListener = listener;\n\t\t\t\tsignal.addEventListener(\"abort\", listener, { once: true });\n\t\t\t\tif (signal.aborted) listener();\n\t\t\t}\n\t\t} catch {\n\t\t\treturn onUpdate;\n\t\t}\n\t\tif (!onUpdate) return onUpdate;\n\t\treturn (partial) => {\n\t\t\ttry {\n\t\t\t\tattachSubagentProgress(partial, this.run?.snapshot());\n\t\t\t} catch {\n\t\t\t\t/* observation never affects execution */\n\t\t\t}\n\t\t\tonUpdate(partial);\n\t\t};\n\t}\n\n\t/** Admits the next worker in scheduling order; only the first slots keep an observer. */\n\tadmitWorker(meta: SubagentWorkerMeta): SubagentWorkerObserver {\n\t\tconst run = this.run;\n\t\tif (!run) return DISABLED_SUBAGENT_WORKER_OBSERVER;\n\t\tlet worker = DISABLED_SUBAGENT_WORKER_OBSERVER;\n\t\ttry {\n\t\t\tworker = run.admitWorker(meta);\n\t\t} catch {\n\t\t\t/* observation never affects execution */\n\t\t}\n\t\tworker = guardWorkerObserver(worker);\n\t\tif (this.workers.length < SUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN) this.workers.push(worker);\n\t\treturn worker;\n\t}\n\n\t/** The observer admitted at scheduling position `index`, or a disabled one. */\n\tworkerAt(index: number): SubagentWorkerObserver {\n\t\treturn this.workers[index] ?? DISABLED_SUBAGENT_WORKER_OBSERVER;\n\t}\n\n\t/** Marks every admitted worker from `start` onward as skipped. */\n\tskipWorkersFrom(start: number): void {\n\t\tfor (let i = start; i < this.workers.length; i++) this.workers[i].skip();\n\t}\n\n\t/** Marks every admitted worker from `start` onward as cancelled before it ever started. */\n\tcancelWorkersFromBeforeStart(start: number): void {\n\t\tfor (let i = start; i < this.workers.length; i++) this.workers[i].cancelledBeforeStart();\n\t}\n\n\t/**\n\t * Settles the run exactly once and attaches the final snapshot to `result`.\n\t */\n\tsettle<T extends object>(result?: T): T | undefined {\n\t\tconst run = this.run;\n\t\tif (!run || this.settled) return result;\n\t\tthis.settled = true;\n\t\ttry {\n\t\t\tif (this.signal && this.abortListener) this.signal.removeEventListener(\"abort\", this.abortListener);\n\t\t\tconst snapshot = run.settle();\n\t\t\tif (result) attachSubagentProgress(result, snapshot);\n\t\t} catch {\n\t\t\t/* observation never affects execution */\n\t\t}\n\t\treturn result;\n\t}\n}\n\ntype SubagentExecute = ToolDefinition<typeof SubagentParams, SubagentDetails>[\"execute\"];\n\n/** Wraps the subagent executor so the run observation settles exactly once on return or throw. */\nfunction observeSubagentExecution(\n\tinner: (...args: [...Parameters<SubagentExecute>, SubagentObservation]) => ReturnType<SubagentExecute>,\n): SubagentExecute {\n\treturn async (toolCallId, params, signal, onUpdate, ctx) => {\n\t\tconst observation = new SubagentObservation(readSubagentProgressCapability(ctx), signal);\n\t\ttry {\n\t\t\tconst result = await inner(toolCallId, params, signal, onUpdate, ctx, observation);\n\t\t\tobservation.settle(result);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tobservation.settle();\n\t\t\tthrow error;\n\t\t}\n\t};\n}\n\nexport function createSubagentToolDefinition(cwd: string): ToolDefinition<typeof SubagentParams, SubagentDetails> {\n\treturn {\n\t\tname: \"subagent\",\n\t\tlabel: \"Subagent\",\n\t\tdescription: [\n\t\t\t\"Delegate tasks to specialized subagents with isolated context.\",\n\t\t\t\"Modes: single (agent + task), parallel (tasks array), chain (sequential with {previous} placeholder).\",\n\t\t\t\"Parallel tasks may declare id, dependsOn (start after those ids succeed), ownerPaths (overlapping siblings run one at a time), thinking (reasoning level), context (files, acceptance criteria, base revision) and onFailure (retry this task with another model or thinking level).\",\n\t\t\t\"The optional isolation, thinking and onFailure fields are policy-set for each child.\",\n\t\t\t`Default agent scope is \"user\" (from ${path.join(getAgentDir(), \"agents\")}).`,\n\t\t\t`To enable project-local agents in ${CONFIG_DIR_NAME}/agents, set agentScope: \"both\" (or \"project\").`,\n\t\t].join(\" \"),\n\t\tpromptSnippet:\n\t\t\t\"subagent: delegate work to isolated subagents — single task, parallel batch (tasks array), or sequential chain with {previous} placeholder\",\n\t\tpromptGuidelines: [\n\t\t\t\"Use subagent to fan out independent work in parallel (tasks array) or run multi-step pipelines (chain). Subagents run with isolated context. Nested delegation is allowed only up to the configured depth; a child at the limit must complete its task directly.\",\n\t\t],\n\t\tparameters: SubagentParams,\n\n\t\texecute: observeSubagentExecution(async (toolCallId, params, signal, onUpdate, ctx, observation) => {\n\t\t\tconst agentScope: AgentScope = params.agentScope ?? \"user\";\n\t\t\tconst defaultCwd = ctx?.cwd ?? cwd;\n\t\t\tconst parentModel = ctx?.model;\n\t\t\tconst discovery = discoverAgents(defaultCwd, agentScope);\n\t\t\tconst agents = discovery.agents;\n\t\t\tconst confirmProjectAgents = params.confirmProjectAgents ?? true;\n\t\t\tconst rawProgressOnUpdate = onUpdate as unknown as OnUpdateCallback | undefined;\n\n\t\t\t// Every requested child must appear in details.results, even when\n\t\t\t// nothing ran: external consumers fan out per-child bookkeeping from\n\t\t\t// the tool args and reconcile it against results by index.\n\t\t\tconst requestedChildren = (): Array<{ agent: string; task?: string; step?: number; taskId?: string }> => {\n\t\t\t\tif (params.tasks && params.tasks.length > 0)\n\t\t\t\t\treturn params.tasks.map((t, i) => ({\n\t\t\t\t\t\tagent: t.agent,\n\t\t\t\t\t\ttask: t.task,\n\t\t\t\t\t\ttaskId: t.id ?? `${toolCallId}-${i}`,\n\t\t\t\t\t}));\n\t\t\t\tif (params.chain && params.chain.length > 0)\n\t\t\t\t\treturn params.chain.map((s, i) => ({\n\t\t\t\t\t\tagent: s.agent,\n\t\t\t\t\t\ttask: s.task,\n\t\t\t\t\t\tstep: i + 1,\n\t\t\t\t\t\ttaskId: `${toolCallId}-${i}`,\n\t\t\t\t\t}));\n\t\t\t\tif (params.agent) return [{ agent: params.agent, task: params.task, taskId: `${toolCallId}-0` }];\n\t\t\t\treturn [];\n\t\t\t};\n\t\t\tconst stubResult = (\n\t\t\t\tchild: { agent: string; task?: string; step?: number; taskId?: string },\n\t\t\t\terrorMessage: string,\n\t\t\t): SubagentSingleResult => ({\n\t\t\t\tagent: child.agent,\n\t\t\t\tagentSource: \"unknown\",\n\t\t\t\ttask: child.task ?? \"\",\n\t\t\t\ttaskId: child.taskId ?? `${toolCallId}-${child.step !== undefined ? child.step - 1 : 0}`,\n\t\t\t\tparentTaskId: currentTaskId() ?? toolCallId,\n\t\t\t\tdepth: currentSubagentDepth() + 1,\n\t\t\t\texitCode: 1,\n\t\t\t\tmessages: [],\n\t\t\t\tstderr: \"\",\n\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\terrorMessage,\n\t\t\t\tstep: child.step,\n\t\t\t\tisolation: \"shared\",\n\t\t\t});\n\t\t\tconst stubAllChildren = (errorMessage: string): SubagentSingleResult[] =>\n\t\t\t\trequestedChildren().map((child) => stubResult(child, errorMessage));\n\n\t\t\tconst makeDetails =\n\t\t\t\t(mode: \"single\" | \"parallel\" | \"chain\") =>\n\t\t\t\t(results: SubagentSingleResult[]): SubagentDetails => ({\n\t\t\t\t\tmode,\n\t\t\t\t\tagentScope,\n\t\t\t\t\tprojectAgentsDir: discovery.projectAgentsDir,\n\t\t\t\t\tresults,\n\t\t\t\t});\n\t\t\tconst makeProgressDetails =\n\t\t\t\t(mode: \"single\" | \"parallel\" | \"chain\") =>\n\t\t\t\t(results: SubagentProgressResult[], taskEvents?: SubagentTaskEvent[]): SubagentProgressDetails => ({\n\t\t\t\t\tmode,\n\t\t\t\t\tagentScope,\n\t\t\t\t\tprojectAgentsDir: discovery.projectAgentsDir,\n\t\t\t\t\tresults,\n\t\t\t\t\t...(taskEvents ? { taskEvents } : {}),\n\t\t\t\t});\n\n\t\t\tif (currentSubagentDepth() >= maxSubagentDepth()) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Nested delegation limit reached (depth ${currentSubagentDepth()} of ${maxSubagentDepth()}). Complete the task directly.`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst hasChain = (params.chain?.length ?? 0) > 0;\n\t\t\tconst hasTasks = (params.tasks?.length ?? 0) > 0;\n\t\t\tconst hasSingle = Boolean(params.agent && params.task);\n\t\t\tconst modeCount = Number(hasChain) + Number(hasTasks) + Number(hasSingle);\n\n\t\t\tif (modeCount !== 1) {\n\t\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Invalid parameters. Provide exactly one mode.\\nAvailable agents: ${available}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")(\n\t\t\t\t\t\tstubAllChildren(\"not run: invalid parameters (provide exactly one mode)\"),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (!parentModel?.provider || !parentModel.id) {\n\t\t\t\tconst errorMessage = \"Cannot run subagents without a parent provider and model.\";\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\tdetails: makeDetails(hasChain ? \"chain\" : hasTasks ? \"parallel\" : \"single\")(\n\t\t\t\t\t\tstubAllChildren(errorMessage),\n\t\t\t\t\t),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(agentScope === \"project\" || agentScope === \"both\") &&\n\t\t\t\tconfirmProjectAgents &&\n\t\t\t\tctx?.hasUI &&\n\t\t\t\t!ctx.isProjectTrusted()\n\t\t\t) {\n\t\t\t\tconst requestedAgentNames = new Set<string>();\n\t\t\t\tif (params.chain) for (const step of params.chain) requestedAgentNames.add(step.agent);\n\t\t\t\tif (params.tasks) for (const t of params.tasks) requestedAgentNames.add(t.agent);\n\t\t\t\tif (params.agent) requestedAgentNames.add(params.agent);\n\n\t\t\t\tconst projectAgentsRequested = Array.from(requestedAgentNames)\n\t\t\t\t\t.map((name) => agents.find((a) => a.name === name))\n\t\t\t\t\t.filter((a): a is AgentConfig => a?.source === \"project\");\n\n\t\t\t\tif (projectAgentsRequested.length > 0) {\n\t\t\t\t\tconst names = projectAgentsRequested.map((a) => a.name).join(\", \");\n\t\t\t\t\tconst dir = discovery.projectAgentsDir ?? \"(unknown)\";\n\t\t\t\t\tconst ok = await ctx.ui.confirm(\n\t\t\t\t\t\t\"Run project-local agents?\",\n\t\t\t\t\t\t`Agents: ${names}\\nSource: ${dir}\\n\\nProject agents are repo-controlled. Only continue for trusted repositories.`,\n\t\t\t\t\t);\n\t\t\t\t\tif (!ok)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Canceled: project-local agents not approved.\" }],\n\t\t\t\t\t\t\tdetails: makeDetails(hasChain ? \"chain\" : hasTasks ? \"parallel\" : \"single\")(\n\t\t\t\t\t\t\t\tstubAllChildren(\"canceled: project-local agents not approved\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Parallel-mode validation runs before admission so rejected requests never create a run.\n\t\t\tconst runsParallel = !(params.chain && params.chain.length > 0) && !!params.tasks && params.tasks.length > 0;\n\t\t\tconst taskCap = maxParallelTasks();\n\t\t\tif (runsParallel && params.tasks!.length > taskCap)\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{ type: \"text\", text: `Too many parallel tasks (${params.tasks!.length}). Max is ${taskCap}.` },\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"parallel\")(stubAllChildren(`not run: too many parallel tasks (max ${taskCap})`)),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\tconst graph = (runsParallel ? (params.tasks ?? []) : []).map((t, i) => ({\n\t\t\t\t...t,\n\t\t\t\tid: t.id ?? `${toolCallId}-${i}`,\n\t\t\t\tdependsOn: t.dependsOn ?? [],\n\t\t\t\townerPaths: t.ownerPaths ?? [],\n\t\t\t\tisolation: t.isolation,\n\t\t\t}));\n\t\t\tif (runsParallel) {\n\t\t\t\tconst graphError = validateTaskGraph(graph);\n\t\t\t\tif (graphError) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Invalid task graph: ${graphError}.` }],\n\t\t\t\t\t\tdetails: makeDetails(\"parallel\")(stubAllChildren(`not run: invalid task graph (${graphError})`)),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Every early validation return has passed: admit the run immediately before mode dispatch.\n\t\t\tconst progressOnUpdate = observation.admit(rawProgressOnUpdate, {\n\t\t\t\ttoolCallId,\n\t\t\t\tmode: hasChain ? \"chain\" : runsParallel ? \"parallel\" : \"single\",\n\t\t\t});\n\n\t\t\tif (params.chain && params.chain.length > 0) {\n\t\t\t\t// The template text, before {previous} substitution: a prior worker's output never reaches the projection.\n\t\t\t\tfor (const step of params.chain) observation.admitWorker({ agent: step.agent, task: step.task });\n\t\t\t\tconst results: SubagentSingleResult[] = [];\n\t\t\t\tlet previousOutput = \"\";\n\n\t\t\t\tfor (let i = 0; i < params.chain.length; i++) {\n\t\t\t\t\tconst step = params.chain[i];\n\t\t\t\t\tconst taskWithContext = step.task.replace(/\\{previous\\}/g, previousOutput);\n\n\t\t\t\t\t// Create update callback that includes all previous results\n\t\t\t\t\tconst chainUpdate: OnUpdateCallback | undefined = progressOnUpdate\n\t\t\t\t\t\t? (partial) => {\n\t\t\t\t\t\t\t\t// Combine completed results with the current streaming result.\n\t\t\t\t\t\t\t\tconst currentResult = partial.details?.results[0];\n\t\t\t\t\t\t\t\tif (currentResult) {\n\t\t\t\t\t\t\t\t\tprogressOnUpdate({\n\t\t\t\t\t\t\t\t\t\tcontent: partial.content,\n\t\t\t\t\t\t\t\t\t\tdetails: makeProgressDetails(\"chain\")([...toProgressDetails(results), currentResult]),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tconst worker = observation.workerAt(i);\n\t\t\t\t\tconst evidence = newAttemptEvidence();\n\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\tagents,\n\t\t\t\t\t\tdiscovery.diagnostics,\n\t\t\t\t\t\tstep.agent,\n\t\t\t\t\t\ttaskWithContext,\n\t\t\t\t\t\tstep.cwd,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\ti + 1,\n\t\t\t\t\t\tstep.model,\n\t\t\t\t\t\tparentModel,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tchainUpdate,\n\t\t\t\t\t\tmakeProgressDetails(\"chain\"),\n\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttaskId: `${toolCallId}-${i}`,\n\t\t\t\t\t\t\tthinking: step.thinking,\n\t\t\t\t\t\t\tobserver: worker,\n\t\t\t\t\t\t\tevidence,\n\t\t\t\t\t\t\ttraceChild: createSubagentTraceChild(toolCallId, ctx?.sessionManager, ctx),\n\t\t\t\t\t\t\tfileEvidenceSink: getFileEvidenceSink(ctx?.sessionManager),\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tresults.push(result);\n\n\t\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\t\tsettleWorkerOutcome(worker, result, evidence, evidence.started, signal?.aborted === true);\n\t\t\t\t\tif (isError) {\n\t\t\t\t\t\t// Cancellation confirmed before later steps launch is not a dependency exclusion.\n\t\t\t\t\t\tif (signal?.aborted === true) observation.cancelWorkersFromBeforeStart(i + 1);\n\t\t\t\t\t\telse observation.skipWorkersFrom(i + 1);\n\t\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\t\tconst skipped = params.chain\n\t\t\t\t\t\t\t.slice(i + 1)\n\t\t\t\t\t\t\t.map((s, offset) =>\n\t\t\t\t\t\t\t\tstubResult(\n\t\t\t\t\t\t\t\t\t{ agent: s.agent, task: s.task, step: i + 2 + offset },\n\t\t\t\t\t\t\t\t\t`not run: chain stopped at step ${i + 1}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Chain stopped at step ${i + 1} (${step.agent}): ${errorMsg}` }],\n\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")([...results, ...skipped]),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tpreviousOutput = getFinalOutput(result.messages);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(results[results.length - 1].messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"chain\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.tasks && params.tasks.length > 0) {\n\t\t\t\tconst childDepth = currentSubagentDepth() + 1;\n\t\t\t\t// Only the first SUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN tasks hold observers; ids are unique.\n\t\t\t\tconst observedSlots = new Map<string, number>();\n\t\t\t\tfor (let i = 0; i < Math.min(graph.length, SUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN); i++) {\n\t\t\t\t\tobservedSlots.set(graph[i].id, i);\n\t\t\t\t}\n\n\t\t\t\tconst taskEvents: SubagentTaskEvent[] = [];\n\t\t\t\tconst emitTaskEvent = (event: SubagentTaskEvent) => {\n\t\t\t\t\ttaskEvents.push(event);\n\t\t\t\t};\n\t\t\t\tconst now = () => Date.now();\n\t\t\t\tfor (const [i, g] of graph.entries()) {\n\t\t\t\t\temitTaskEvent({\n\t\t\t\t\t\ttype: \"schedule\",\n\t\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\t\tdependsOn: g.dependsOn,\n\t\t\t\t\t\townerPaths: g.ownerPaths,\n\t\t\t\t\t\tbaseRevision: g.context?.baseRevision,\n\t\t\t\t\t\tat: now(),\n\t\t\t\t\t});\n\t\t\t\t\t// Only a caller-provided id is a label; the defaulted `<toolCallId>-<index>` id is not.\n\t\t\t\t\tobservation.admitWorker({ agent: g.agent, label: params.tasks?.[i]?.id, task: g.task });\n\t\t\t\t}\n\n\t\t\t\tconst allResults: SubagentSingleResult[] = graph.map((g) => ({\n\t\t\t\t\tagent: g.agent,\n\t\t\t\t\tagentSource: \"unknown\",\n\t\t\t\t\ttask: g.task,\n\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\tparentTaskId: currentTaskId() ?? toolCallId,\n\t\t\t\t\tdepth: childDepth,\n\t\t\t\t\texitCode: -1, // -1 = still running\n\t\t\t\t\tmessages: [],\n\t\t\t\t\tstderr: \"\",\n\t\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\t\tisolation: \"shared\",\n\t\t\t\t}));\n\n\t\t\t\tconst detailsWithEvents = (results: SubagentSingleResult[]): SubagentDetails => ({\n\t\t\t\t\t...makeDetails(\"parallel\")(results),\n\t\t\t\t\ttaskEvents: [...taskEvents],\n\t\t\t\t});\n\t\t\t\tconst progressDetailsWithEvents = (results: SubagentProgressResult[]): SubagentProgressDetails =>\n\t\t\t\t\tmakeProgressDetails(\"parallel\")(results, [...taskEvents]);\n\n\t\t\t\tconst emitParallelUpdate = (progressResults = toProgressDetails(allResults)) => {\n\t\t\t\t\tif (progressOnUpdate) {\n\t\t\t\t\t\tconst running = allResults.filter((r) => r.exitCode === -1).length;\n\t\t\t\t\t\tconst done = allResults.filter((r) => r.exitCode !== -1).length;\n\t\t\t\t\t\tprogressOnUpdate({\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{ type: \"text\", text: `Parallel: ${done}/${allResults.length} done, ${running} running...` },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: progressDetailsWithEvents(progressResults),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet results: SubagentSingleResult[];\n\t\t\t\ttry {\n\t\t\t\t\tresults = await runDag(\n\t\t\t\t\t\tgraph,\n\t\t\t\t\t\t{ concurrency: maxSubagentConcurrency(), worktrees: maxSubagentWorktrees() },\n\t\t\t\t\t\tasync (g, index) => {\n\t\t\t\t\t\t\tconst maxAttempts = Math.min(3, Math.max(1, g.onFailure?.maxAttempts ?? 1));\n\t\t\t\t\t\t\tlet attempt = 1;\n\t\t\t\t\t\t\tlet model = g.model;\n\t\t\t\t\t\t\tlet thinking = g.thinking;\n\t\t\t\t\t\t\tlet result: SubagentSingleResult;\n\t\t\t\t\t\t\tconst worker = observation.workerAt(index);\n\t\t\t\t\t\t\tlet evidence = newAttemptEvidence();\n\t\t\t\t\t\t\tlet everStarted = false;\n\t\t\t\t\t\t\tconst traceChild = createSubagentTraceChild(toolCallId, ctx?.sessionManager, ctx);\n\t\t\t\t\t\t\tfor (;;) {\n\t\t\t\t\t\t\t\tevidence = newAttemptEvidence();\n\t\t\t\t\t\t\t\temitTaskEvent({ type: \"start\", taskId: g.id, attempt, at: now() });\n\t\t\t\t\t\t\t\tresult = await runSingleAgent(\n\t\t\t\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\t\t\t\tagents,\n\t\t\t\t\t\t\t\t\tdiscovery.diagnostics,\n\t\t\t\t\t\t\t\t\tg.agent,\n\t\t\t\t\t\t\t\t\tg.task,\n\t\t\t\t\t\t\t\t\tg.cwd,\n\t\t\t\t\t\t\t\t\tg.isolation,\n\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\tparentModel,\n\t\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t\t\t(partial) => {\n\t\t\t\t\t\t\t\t\t\tconst currentResult = partial.details?.results[0];\n\t\t\t\t\t\t\t\t\t\tif (currentResult) {\n\t\t\t\t\t\t\t\t\t\t\tconst progressResults = toProgressDetails(allResults);\n\t\t\t\t\t\t\t\t\t\t\tprogressResults[index] = currentResult;\n\t\t\t\t\t\t\t\t\t\t\temitParallelUpdate(progressResults);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tprogressDetailsWithEvents,\n\t\t\t\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\t\t\t\t\t\tthinking,\n\t\t\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\t\t\tcontext: g.context,\n\t\t\t\t\t\t\t\t\t\tobserver: worker,\n\t\t\t\t\t\t\t\t\t\tevidence,\n\t\t\t\t\t\t\t\t\t\ttraceChild,\n\t\t\t\t\t\t\t\t\t\tfileEvidenceSink: getFileEvidenceSink(ctx?.sessionManager),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\teverStarted ||= evidence.started;\n\t\t\t\t\t\t\t\tif (!isFailedResult(result)) {\n\t\t\t\t\t\t\t\t\temitTaskEvent({ type: \"complete\", taskId: g.id, attempt, at: now() });\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\temitTaskEvent({\n\t\t\t\t\t\t\t\t\ttype: \"fail\",\n\t\t\t\t\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\t\treason: getResultOutput(result).slice(0, 200),\n\t\t\t\t\t\t\t\t\tat: now(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (attempt >= maxAttempts || signal?.aborted) break;\n\t\t\t\t\t\t\t\tconst next = attempt + 1;\n\t\t\t\t\t\t\t\tmodel = g.onFailure?.retryWith?.model ?? model;\n\t\t\t\t\t\t\t\tthinking = g.onFailure?.retryWith?.thinking ?? thinking;\n\t\t\t\t\t\t\t\temitTaskEvent({\n\t\t\t\t\t\t\t\t\ttype: \"escalate\",\n\t\t\t\t\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\t\t\t\t\tfromAttempt: attempt,\n\t\t\t\t\t\t\t\t\ttoAttempt: next,\n\t\t\t\t\t\t\t\t\tmodel: model ?? `${parentModel.provider}/${parentModel.id}`,\n\t\t\t\t\t\t\t\t\tthinking,\n\t\t\t\t\t\t\t\t\tat: now(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\ttraceChild?.scheduleRetry(next);\n\t\t\t\t\t\t\t\tattempt = next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsettleWorkerOutcome(worker, result, evidence, everStarted, signal?.aborted === true);\n\t\t\t\t\t\t\tallResults[index] = result;\n\t\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisFailedResult,\n\t\t\t\t\t\t(g, index, failedDependency) => {\n\t\t\t\t\t\t\tconst stub = stubResult(\n\t\t\t\t\t\t\t\t{ agent: g.agent, task: g.task, taskId: g.id },\n\t\t\t\t\t\t\t\t`not run: dependency \"${failedDependency}\" failed`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tallResults[index] = stub;\n\t\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\t\treturn stub;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(event) => {\n\t\t\t\t\t\t\tif (event.type === \"wait\")\n\t\t\t\t\t\t\t\temitTaskEvent({ type: \"wait\", taskId: event.id, reason: \"concurrency\", at: now() });\n\t\t\t\t\t\t\telse if (event.type === \"serialize\")\n\t\t\t\t\t\t\t\temitTaskEvent({ type: \"serialize\", taskId: event.id, after: event.after, at: now() });\n\t\t\t\t\t\t\telse if (event.type === \"skip\")\n\t\t\t\t\t\t\t\temitTaskEvent({\n\t\t\t\t\t\t\t\t\ttype: \"skip\",\n\t\t\t\t\t\t\t\t\ttaskId: event.id,\n\t\t\t\t\t\t\t\t\tfailedDependency: event.failedDependency,\n\t\t\t\t\t\t\t\t\tat: now(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// \"start\" is emitted inside run() together with the attempt number.\n\t\t\t\t\t\t\t// Task ids are unique (validated), so the graph position is the worker slot.\n\t\t\t\t\t\t\tif (event.type === \"wait\" || event.type === \"serialize\") {\n\t\t\t\t\t\t\t\tobservation.workerAt(observedSlots.get(event.id) ?? -1).wait();\n\t\t\t\t\t\t\t} else if (event.type === \"skip\") {\n\t\t\t\t\t\t\t\tobservation.workerAt(observedSlots.get(event.id) ?? -1).skip();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t(g, index) => {\n\t\t\t\t\t\t\tobservation.workerAt(index).cancelledBeforeStart();\n\t\t\t\t\t\t\treturn stubResult({ agent: g.agent, task: g.task, taskId: g.id }, \"not run: subagent was aborted\");\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Parallel scheduling failed: ${message}` }],\n\t\t\t\t\t\tdetails: detailsWithEvents(stubAllChildren(`not run: scheduling failed (${message})`)),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst successCount = results.filter((r) => !isFailedResult(r)).length;\n\t\t\t\tconst summaries = results.map((r) => {\n\t\t\t\t\tconst output = truncateParallelOutput(getResultOutput(r));\n\t\t\t\t\tconst status = isFailedResult(r)\n\t\t\t\t\t\t? `failed${r.stopReason && r.stopReason !== \"end\" ? ` (${r.stopReason})` : \"\"}`\n\t\t\t\t\t\t: \"completed\";\n\t\t\t\t\treturn `### [${r.agent}] ${status}\\n\\n${output}`;\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Parallel: ${successCount}/${results.length} succeeded\\n\\n${summaries.join(\"\\n\\n---\\n\\n\")}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: detailsWithEvents(results),\n\t\t\t\t\tisError: successCount !== results.length,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.agent && params.task) {\n\t\t\t\tconst worker = observation.admitWorker({ agent: params.agent, task: params.task });\n\t\t\t\tconst evidence = newAttemptEvidence();\n\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\tdefaultCwd,\n\t\t\t\t\tagents,\n\t\t\t\t\tdiscovery.diagnostics,\n\t\t\t\t\tparams.agent,\n\t\t\t\t\tparams.task,\n\t\t\t\t\tparams.cwd,\n\t\t\t\t\tparams.isolation,\n\t\t\t\t\tundefined,\n\t\t\t\t\tparams.model,\n\t\t\t\t\tparentModel,\n\t\t\t\t\tsignal,\n\t\t\t\t\tprogressOnUpdate,\n\t\t\t\t\tmakeProgressDetails(\"single\"),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\t0,\n\t\t\t\t\t{\n\t\t\t\t\t\ttaskId: `${toolCallId}-0`,\n\t\t\t\t\t\tthinking: params.thinking,\n\t\t\t\t\t\tobserver: worker,\n\t\t\t\t\t\tevidence,\n\t\t\t\t\t\ttraceChild: createSubagentTraceChild(toolCallId, ctx?.sessionManager, ctx),\n\t\t\t\t\t\tfileEvidenceSink: getFileEvidenceSink(ctx?.sessionManager),\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\tsettleWorkerOutcome(worker, result, evidence, evidence.started, signal?.aborted === true);\n\t\t\t\tif (isError) {\n\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Agent ${result.stopReason || \"failed\"}: ${errorMsg}` }],\n\t\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(result.messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Invalid parameters. Available agents: ${available}` }],\n\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t};\n\t\t}),\n\n\t\trenderCall(args, theme: Theme, _context) {\n\t\t\tconst scope: AgentScope = args.agentScope ?? \"user\";\n\t\t\tif (args.chain && args.chain.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `chain (${args.chain.length} steps)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (let i = 0; i < Math.min(args.chain.length, 3); i++) {\n\t\t\t\t\tconst step = args.chain[i];\n\t\t\t\t\t// Clean up {previous} placeholder for display\n\t\t\t\t\tconst cleanTask = step.task.replace(/\\{previous\\}/g, \"\").trim();\n\t\t\t\t\tconst preview = cleanTask.length > 40 ? `${cleanTask.slice(0, 40)}...` : cleanTask;\n\t\t\t\t\ttext +=\n\t\t\t\t\t\t\"\\n \" +\n\t\t\t\t\t\ttheme.fg(\"muted\", `${i + 1}.`) +\n\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\ttheme.fg(\"accent\", step.agent) +\n\t\t\t\t\t\ttheme.fg(\"dim\", ` ${preview}`);\n\t\t\t\t}\n\t\t\t\tif (args.chain.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.chain.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tif (args.tasks && args.tasks.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `parallel (${args.tasks.length} tasks)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (const t of args.tasks.slice(0, 3)) {\n\t\t\t\t\tconst preview = t.task.length > 40 ? `${t.task.slice(0, 40)}...` : t.task;\n\t\t\t\t\ttext += `\\n ${theme.fg(\"accent\", t.agent)}${theme.fg(\"dim\", ` ${preview}`)}`;\n\t\t\t\t}\n\t\t\t\tif (args.tasks.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.tasks.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tconst agentName = args.agent || \"...\";\n\t\t\tconst preview = args.task ? (args.task.length > 60 ? `${args.task.slice(0, 60)}...` : args.task) : \"...\";\n\t\t\tlet text =\n\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\ttheme.fg(\"accent\", agentName) +\n\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\ttext += `\\n ${theme.fg(\"dim\", preview)}`;\n\t\t\treturn new Text(text, 0, 0);\n\t\t},\n\n\t\trenderResult(result, { expanded }, theme: Theme, _context) {\n\t\t\tconst details = result.details as SubagentDetails | SubagentProgressDetails | undefined;\n\t\t\tif (!details || details.results.length === 0) {\n\t\t\t\tconst text = result.content[0];\n\t\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t\t}\n\n\t\t\tconst mdTheme = getMarkdownTheme();\n\n\t\t\tconst renderDisplayItems = (items: DisplayItem[], limit?: number) => {\n\t\t\t\tconst toShow = limit ? items.slice(-limit) : items;\n\t\t\t\tconst skipped = limit && items.length > limit ? items.length - limit : 0;\n\t\t\t\tlet text = \"\";\n\t\t\t\tif (skipped > 0) text += theme.fg(\"muted\", `... ${skipped} earlier items\\n`);\n\t\t\t\tfor (const item of toShow) {\n\t\t\t\t\tif (item.type === \"text\") {\n\t\t\t\t\t\tconst preview = expanded ? item.text : item.text.split(\"\\n\").slice(0, 3).join(\"\\n\");\n\t\t\t\t\t\ttext += `${theme.fg(\"toolOutput\", preview)}\\n`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext += `${theme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme))}\\n`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn text.trimEnd();\n\t\t\t};\n\n\t\t\tif (details.mode === \"single\" && details.results.length === 1) {\n\t\t\t\tconst r = details.results[0];\n\t\t\t\tconst isError = isFailedResult(r);\n\t\t\t\tconst icon = isError ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\tconst finalOutput = getResultFinalOutput(r);\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tlet header = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\t\tif (isError && r.stopReason) header += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\t\tcontainer.addChild(new Text(header, 0, 0));\n\t\t\t\t\tif (isError && r.errorMessage)\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"error\", `Error: ${r.errorMessage}`), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Task ───\"), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", r.task), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Output ───\"), 0, 0));\n\t\t\t\t\tif (displayItems.length === 0 && !finalOutput) {\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"(no output)\"), 0, 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\")\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", usageStr), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\tif (isError && r.stopReason) text += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\tif (isError && r.errorMessage) text += `\\n${theme.fg(\"error\", `Error: ${r.errorMessage}`)}`;\n\t\t\t\telse if (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\telse {\n\t\t\t\t\ttext += `\\n${renderDisplayItems(displayItems, COLLAPSED_ITEM_COUNT)}`;\n\t\t\t\t\tif (displayItems.length > COLLAPSED_ITEM_COUNT) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\tif (usageStr) text += `\\n${theme.fg(\"dim\", usageStr)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst aggregateUsage = (results: SubagentDisplayResult[]) => {\n\t\t\t\tconst total = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n\t\t\t\tfor (const r of results) {\n\t\t\t\t\ttotal.input += r.usage.input;\n\t\t\t\t\ttotal.output += r.usage.output;\n\t\t\t\t\ttotal.cacheRead += r.usage.cacheRead;\n\t\t\t\t\ttotal.cacheWrite += r.usage.cacheWrite;\n\t\t\t\t\ttotal.cost += r.usage.cost;\n\t\t\t\t\ttotal.turns += r.usage.turns;\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t};\n\n\t\t\tif (details.mode === \"chain\") {\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode === 0).length;\n\t\t\t\tconst icon = successCount === details.results.length ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`),\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\t\t\tconst finalOutput = getResultFinalOutput(r);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t`${theme.fg(\"muted\", `─── Step ${r.step}: `) + theme.fg(\"accent\", r.agent)} ${rIcon}`,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst stepUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (stepUsage) container.addChild(new Text(theme.fg(\"dim\", stepUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view\n\t\t\t\tlet text =\n\t\t\t\t\ticon +\n\t\t\t\t\t\" \" +\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`);\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", `─── Step ${r.step}: `)}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\ttext += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tif (details.mode === \"parallel\") {\n\t\t\t\tconst running = details.results.filter((r) => r.exitCode === -1).length;\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode !== -1 && !isFailedResult(r)).length;\n\t\t\t\tconst failCount = details.results.filter((r) => r.exitCode !== -1 && isFailedResult(r)).length;\n\t\t\t\tconst isRunning = running > 0;\n\t\t\t\tconst icon = isRunning\n\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t: failCount > 0\n\t\t\t\t\t\t? theme.fg(\"warning\", \"◐\")\n\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\tconst status = isRunning\n\t\t\t\t\t? `${successCount + failCount}/${details.results.length} done, ${running} running`\n\t\t\t\t\t: `${successCount}/${details.results.length} tasks`;\n\n\t\t\t\tif (expanded && !isRunning) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t`${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = isFailedResult(r) ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\t\t\tconst finalOutput = getResultFinalOutput(r);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(`${theme.fg(\"muted\", \"─── \") + theme.fg(\"accent\", r.agent)} ${rIcon}`, 0, 0),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst taskUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (taskUsage) container.addChild(new Text(theme.fg(\"dim\", taskUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view (or still running)\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`;\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon =\n\t\t\t\t\t\tr.exitCode === -1\n\t\t\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t\t\t: isFailedResult(r)\n\t\t\t\t\t\t\t\t? theme.fg(\"error\", \"✗\")\n\t\t\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", \"─── \")}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0)\n\t\t\t\t\t\ttext += `\\n${theme.fg(\"muted\", r.exitCode === -1 ? \"(running...)\" : \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tif (!isRunning) {\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\t}\n\t\t\t\tif (!expanded) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst text = result.content[0];\n\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t},\n\t};\n}\n\nexport function createSubagentTool(cwd: string) {\n\treturn wrapToolDefinition(createSubagentToolDefinition(cwd));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/core/tools/subagent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EACN,qCAAqC,GAGrC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAA2B,MAAM,8CAA8C,CAAC;AACjH,OAAO,EAAE,gBAAgB,EAAc,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACN,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,sBAAsB,EACtB,iCAAiC,EACjC,8BAA8B,GAK9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAyB,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACN,sBAAsB,EACtB,aAAa,GAIb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC;AACtC,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC;AA2BnC,SAAS,iBAAiB,CAAC,GAAW,EAAE,MAA0B;IACjE,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,WAAW,GAAyB,EAAE,CAAC;IAE7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACJ,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;YAAE,SAAS;QAEzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACJ,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;QAED,IAAI,WAAmC,CAAC;QACxC,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACJ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAyB,OAAO,CAAC,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,yEAAyE;YACzE,mEAAmE;YACnE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC;YACtF,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/D,SAAS;QACV,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,WAAW,CAAC,WAAW,IAAI,aAAa,CAAC;iBACtF,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,OAAO,CAAC,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,0CAA0C,OAAO,EAAE;gBAC5D,IAAI,EAAE,QAAQ;aACd,CAAC,CAAC;YACH,SAAS;QACV,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK;YAC9B,EAAE,KAAK,CAAC,GAAG,CAAC;aACX,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;QAElB,MAAM,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACpD,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,YAAY,EAAE,IAAI;YAClB,MAAM;YACN,QAAQ;SACR,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC7B,IAAI,CAAC;QACJ,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,2BAA2B,CAAC,GAAW;IAC/C,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QACnE,IAAI,WAAW,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QAC1C,UAAU,GAAG,SAAS,CAAC;IACxB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAE3E,SAAS,iBAAiB;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO;YACN,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,sBAAsB,2BAA2B,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;SAC5G,CAAC;IACH,CAAC;IACD,OAAO,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,KAAiB;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAE1D,MAAM,WAAW,GAAqB,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACtE,MAAM,aAAa,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAC9E,MAAM,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1F,MAAM,aAAa,GAClB,KAAK,KAAK,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAEtG,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEhD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1E,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvE,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3G,CAAC;IACF,CAAC;SAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1E,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACP,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO;QACN,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,gBAAgB;QAChB,WAAW,EAAE,CAAC,GAAG,aAAa,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC;KACpG,CAAC;AACH,CAAC;AAED,6BAA6B;AAE7B,SAAS,YAAY,CAAC,KAAa;IAClC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1C,IAAI,KAAK,GAAG,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,IAAI,KAAK,GAAG,OAAO;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3D,OAAO,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,SAAS,gBAAgB,CACxB,KAQC,EACD,KAAc;IAEd,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,cAAc,CACtB,QAAgB,EAChB,IAA6B,EAC7B,OAA6C;IAE7C,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,KAAK,CAAC;YAClD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAW,CAAC;YACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAA2B,CAAC;YAC/C,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,CAAC;gBAC9B,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACzC,CAAC;QACD,KAAK,OAAO,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAW,CAAC;YACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAW,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACzC,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACpE,IAAI,KAAK,GAAG,CAAC;gBAAE,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACb,CAAC;QACD,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAW,CAAC;YACjE,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,IAAI,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAW,CAAC;YAC7C,OAAO,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,CAAW,CAAC;YAChD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAW,CAAC;YAC7C,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,KAAK,MAAM,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAW,CAAC;YAC/C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAW,CAAC;YAC7C,OAAO,CACN,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;gBACzB,OAAO,CAAC,QAAQ,EAAE,IAAI,OAAO,GAAG,CAAC;gBACjC,OAAO,CAAC,KAAK,EAAE,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAC7C,CAAC;QACH,CAAC;QACD,SAAS,CAAC;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,OAAO,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;IACF,CAAC;AACF,CAAC;AAED,yGAAyG;AACzG,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,8FAA8F;AAC9F,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAAC;AAsG1C,SAAS,oBAAoB,CAAC,IAAY,EAAE,IAAqB;IAChE,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAEtE,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAS,GACZ,IAAI,KAAK,OAAO;QACf,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;QAClD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,EAAE,CAAC;QAC1E,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;AACnE,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,OAA+B;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;QAChD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;KACxE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,OAAqB;IACxE,MAAM,KAAK,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChC,IAAI,OAAO,EAAE,KAAK,EAAE,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3G,IAAI,OAAO,EAAE,UAAU,EAAE,MAAM;QAC9B,KAAK,CAAC,IAAI,CAAC,yBAAyB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,IAAI,OAAO,EAAE,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,cAAc,CAAC,QAAmB;IAC1C,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAC,IAAI,CAAC;YAC5C,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAC,MAAgF;IACvG,OAAO,CACN,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;QAC5B,MAAM,CAAC,QAAQ,KAAK,CAAC;QACrB,MAAM,CAAC,UAAU,KAAK,OAAO;QAC7B,MAAM,CAAC,UAAU,KAAK,SAAS,CAC/B,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAA4B;IACpD,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC;IACjG,CAAC;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC;AACzD,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,UAAU,IAAI,mBAAmB;QAAE,OAAO,MAAM,CAAC;IAErD,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;QACnE,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,GAAG,SAAS,0BAA0B,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,yDAAyD,CAAC;AACzJ,CAAC;AAID,SAAS,eAAe,CAAC,QAAmB;IAC3C,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;qBACnE,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5G,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAID,SAAS,gBAAgB,CAAC,MAA6B;IACtD,OAAO,YAAY,IAAI,MAAM,CAAC;AAC/B,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA6B;IAC3D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA6B;IAC1D,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvF,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,MAAM,wBAAwB,GAAG,kCAAkC,CAAC;AAE3E,yHAAyH;AACzH,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,GAAG,IAAI,CAAC;AACxD,gHAAgH;AAChH,MAAM,CAAC,MAAM,2BAA2B,GAAG,gCAAgC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAsB;IAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAS,EAAE;QACrC,MAAM,IAAI,KAAK,CAAC,sDAAsD,wBAAwB,KAAK,GAAG,GAAG,CAAC,CAAC;IAC5G,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,oBAAoB;QACzE,OAAO,MAAM,CAAC,gDAAgD,CAAC,CAAC;IACjE,IAAI,EAAsB,CAAC;IAC3B,IAAI,CAAC;QACJ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAClG,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC;YACrF,OAAO,MAAM,CAAC,kDAAkD,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,IAAI,GAAG,6BAA6B;YAAE,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,6BAA6B,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,IAAI,6BAA6B,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;YACxF,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM;YACnB,IAAI,IAAI,CAAC,CAAC;QACX,CAAC;QACD,IAAI,IAAI,GAAG,6BAA6B;YAAE,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;IACzG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,6BAA6B,CAAC;YAAE,MAAM,KAAK,CAAC;QACnG,OAAO,MAAM,CAAC,mBAAoB,KAA+B,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC;IACvF,CAAC;YAAS,CAAC;QACV,IAAI,EAAE,KAAK,SAAS;YAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;AACF,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,SAAiB,EAAE,MAAc;IACrE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,QAAQ,KAAK,CAAC,CAAC;IAC5D,MAAM,qBAAqB,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc;IACvC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,kBAAkB,GAAG,aAAa,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACtE,IAAI,aAAa,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/D,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC;AAoCD,SAAS,kBAAkB;IAC1B,OAAO;QACN,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,KAAK;QACf,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,KAAK;QACvB,kBAAkB,EAAE,KAAK;QACzB,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,kBAAkB,EAAE,IAAI;KACxB,CAAC;AACH,CAAC;AAiBD,KAAK,UAAU,cAAc,CAC5B,UAAkB,EAClB,MAAqB,EACrB,gBAAsC,EACtC,SAAiB,EACjB,IAAY,EACZ,GAAuB,EACvB,SAAwC,EACxC,IAAwB,EACxB,KAAyB,EACzB,WAAuB,EACvB,MAA+B,EAC/B,QAAsC,EACtC,mBAAmF,EACnF,UAAkB,EAClB,UAAkB,EAClB,OAAqB;IAErB,MAAM,UAAU,GAAG,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,aAAa,EAAE,IAAI,UAAU,CAAC;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAEvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;QACxE,MAAM,WAAW,GAChB,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAC1B,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,mDAAmD,gBAAgB;iBAC7F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,gBAAgB,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC;iBAC1D,IAAI,CAAC,IAAI,CAAC,GAAG;YAChB,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACN,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,SAAS;YACtB,IAAI;YACJ,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY;YACZ,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,mBAAmB,SAAS,wBAAwB,SAAS,IAAI,WAAW,EAAE;YACtF,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAChG,IAAI;YACJ,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY;SAC3C,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,GAA4B,IAAI,CAAC;IAC7C,IAAI,uBAAqD,CAAC;IAC1D,MAAM,SAAS,GAAG,GAAG,IAAI,UAAU,CAAC;IACpC,IAAI,QAAQ,GAAG,SAAS,CAAC;IACzB,MAAM,IAAI,GAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAChE,IAAI,KAAK,EAAE,CAAC;QACX,mEAAmE;QACnE,mEAAmE;QACnE,uEAAuE;QACvE,kDAAkD;QAClD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;SAAM,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,IAAI,OAAO,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEhE,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,aAAa,GAAkB,IAAI,CAAC;IAExC,MAAM,aAAa,GAAyB;QAC3C,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY;QACZ,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAChG,KAAK,EAAE,KAAK,IAAI,GAAG,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,EAAE,EAAE;QAC3D,IAAI;QACJ,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY;KAC3C,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACvB,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,eAAe,GAAG,iBAAiB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3D,QAAQ,CAAC;gBACR,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;gBAClF,OAAO,EAAE,mBAAmB,CAAC,eAAe,CAAC;aAC7C,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC;QACJ,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,QAAQ,GAAG,MAAM,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,UAAU,IAAI,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC7F,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC;gBACxB,aAAa,CAAC,SAAS,GAAG,UAAU,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACP,uBAAuB,GAAG,gBAAgB,CAAC;YAC5C,CAAC;QACF,CAAC;QACD,IAAI,uBAAuB;YAAE,aAAa,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QAC7F,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC7D,qGAAqG;QACrG,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC;YAChF,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC;YACvB,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YACxE,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC;YACvB,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAsB;YAC9B,GAAG,OAAO,CAAC,GAAG;YACd,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;YACxC,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM;YAC7B,CAAC,kBAAkB,CAAC,EAAE,YAAY;SAClC,CAAC;QACF,IAAI,OAAO,CAAC,OAAO,EAAE,YAAY;YAAE,GAAG,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;;YACzF,OAAO,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACxC,iFAAiF;QACjF,OAAO,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAClC,OAAO,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK;gBAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5G,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,MAAM,CAAC;YAC3C,GAAG,UAAU;YACb,GAAG,EAAE,QAAQ;YACb,GAAG;YACH,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;SACd,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACtD,IAAI,QAAQ;gBAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC;gBACJ,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACR,yCAAyC;YAC1C,CAAC;YACD,MAAM,IAAI,GACT,QAAQ,EAAE,OAAO;gBACjB,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE;oBAC1C,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;oBACjC,GAAG;iBACH,CAAC,CAAC;YACJ,IAAI,QAAQ;gBAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvC,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,oGAAoG;YACpG,iGAAiG;YACjG,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,MAAM,cAAc,GAAG,GAAG,EAAE;gBAC3B,IAAI,CAAC;oBACJ,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAClE,CAAC;gBAAC,MAAM,CAAC;oBACR,yCAAyC;gBAC1C,CAAC;YACF,CAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,CAAC,KAAiC,EAAE,EAAE;gBACtD,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAU,EAAE,CAAC;oBAC3E,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;oBAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;wBACzE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;;wBAC9B,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC3C,CAAC;gBACD,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;YACrD,CAAC,CAAC;YAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE;gBACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,OAAO;gBACzB,IAAI,KAAgF,CAAC;gBACrF,IAAI,CAAC;oBACJ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACR,OAAO;gBACR,CAAC;gBAED,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,OAAO;gBAChD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;oBAC5D,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC7B,UAAU,EAAE,CAAC;gBACd,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAkB,CAAC;oBACrC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEjC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBAC9B,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;wBAC5B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACpB,IAAI,GAAG,CAAC,KAAK;4BAAE,aAAa,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;wBAC9E,IAAI,GAAG,CAAC,KAAK;4BAAE,aAAa,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,KAAK,CAAC;wBACpE,IAAI,GAAG,CAAC,UAAU;4BAAE,aAAa,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;wBAC9D,aAAa,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;wBAC9C,cAAc,EAAE,CAAC;oBAClB,CAAC;oBACD,UAAU,EAAE,CAAC;gBACd,CAAC;gBAED,gGAAgG;gBAChG,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;oBAC3C,SAAS,EAAE,CAAC;oBACZ,cAAc,EAAE,CAAC;gBAClB,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACvD,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAkB,CAAC,CAAC;oBACtD,UAAU,EAAE,CAAC;gBACd,CAAC;YACF,CAAC,CAAC;YAEF,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,KAAK,GAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACpC,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBAC/D,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;oBACvD,IAAI,CAAC,cAAc,EAAE,CAAC;wBACrB,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;4BAC1D,MAAM,GAAG,EAAE,CAAC;4BACZ,cAAc,GAAG,IAAI,CAAC;4BACtB,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC;wBACtC,CAAC;6BAAM,CAAC;4BACP,MAAM,IAAI,KAAK,CAAC;wBACjB,CAAC;oBACF,CAAC;oBACD,IAAI,OAAO,KAAK,CAAC,CAAC;wBAAE,SAAS;oBAC7B,IAAI,cAAc,EAAE,CAAC;wBACpB,cAAc,GAAG,KAAK,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACP,MAAM,IAAI,GAAG,MAAM,CAAC;wBACpB,MAAM,GAAG,EAAE,CAAC;wBACZ,WAAW,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;gBACF,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxD,IAAI,QAAQ,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;oBAC9C,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC;oBAC/D,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACP,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACjC,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,IAAI,aAAuC,CAAC;YAC5C,IAAI,SAAoD,CAAC;YACzD,MAAM,YAAY,GAAG,GAAG,EAAE;gBACzB,IAAI,MAAM,IAAI,aAAa;oBAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAChF,IAAI,SAAS;oBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;gBACtC,uFAAuF;gBACvF,gFAAgF;gBAChF,MAAM,eAAe,GAAG,CAAC,OAAO,CAAC;gBACjC,IAAI,QAAQ,IAAI,eAAe,EAAE,CAAC;oBACjC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;oBACvB,QAAQ,CAAC,SAAS,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC5D,QAAQ,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC;oBAC3C,QAAQ,CAAC,kBAAkB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB,CAAC;gBACtF,CAAC;gBACD,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,IAAI,MAAM,CAAC,IAAI,EAAE;oBAAE,WAAW,CAAC,MAAM,CAAC,CAAC;gBACvC,2FAA2F;gBAC3F,0FAA0F;gBAC1F,6FAA6F;gBAC7F,IAAI,QAAQ,IAAI,eAAe,IAAI,CAAC,QAAQ,CAAC,kBAAkB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClF,QAAQ,CAAC,cAAc,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAChG,IAAI,QAAQ,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;wBAC1C,QAAQ,CAAC,kBAAkB,GAAG,aAAa,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;oBACtG,CAAC;gBACF,CAAC;gBACD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrB,wFAAwF;gBACxF,gGAAgG;gBAChG,IAAI,QAAQ,IAAI,CAAC,OAAO;oBAAE,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC;gBACvE,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,OAAO,CAAC,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,GAAG,EAAE;oBACrB,IAAI,OAAO;wBAAE,OAAO;oBACpB,UAAU,GAAG,IAAI,CAAC;oBAClB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;wBAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;4BACd,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;4BAChD,IAAI,QAAQ,IAAI,SAAS;gCAAE,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAC7D,CAAC;oBACF,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;oBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;oBAChD,IAAI,QAAQ,IAAI,SAAS;wBAAE,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7D,CAAC,CAAC;gBACF,aAAa,GAAG,QAAQ,CAAC;gBACzB,IAAI,MAAM,CAAC,OAAO;oBAAE,QAAQ,EAAE,CAAC;;oBAC1B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAClC,IAAI,UAAU,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACnC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC3B,aAAa,CAAC,UAAU,GAAG,SAAS,CAAC;YACrC,aAAa,CAAC,YAAY,GAAG,sBAAsB,CAAC;QACrD,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC3B,aAAa,CAAC,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpF,IAAI,UAAU,IAAI,MAAM,EAAE,OAAO;YAAE,aAAa,CAAC,UAAU,GAAG,SAAS,CAAC;IACzE,CAAC;YAAS,CAAC;QACV,IAAI,QAAQ,EAAE,CAAC;YACd,8FAA8F;YAC9F,+FAA+F;YAC/F,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;YACtC,IAAI,QAA0E,CAAC;YAC/E,IAAI,IAAI,EAAE,kBAAkB,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACJ,QAAQ,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACR,4DAA4D;gBAC7D,CAAC;YACF,CAAC;YACD,IAAI,CAAC;gBACJ,IAAI,cAAc,CAAC,aAAa,CAAC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACtD,aAAa,CAAC,YAAY,GAAG,SAAS,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACP,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;oBAC1C,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;oBAC5C,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;oBACjD,IAAI,MAAM,CAAC,SAAS;wBAAE,aAAa,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;oBACjE,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;wBACnC,IAAI,QAAQ;4BAAE,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;wBAC1C,aAAa,CAAC,YAAY,GAAG,4BAA4B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gEAAgE,MAAM,CAAC,SAAS,EAAE,CAAC;oBAC3K,CAAC;gBACF,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,QAAQ;oBAAE,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC1C,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC3B,aAAa,CAAC,YAAY,GAAG,SAAS,CAAC;gBACvC,aAAa,CAAC,YAAY,GAAG,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjH,CAAC;oBAAS,CAAC;gBACV,IAAI,QAAQ,IAAI,IAAI,EAAE,kBAAkB,EAAE,CAAC;oBAC1C,IAAI,CAAC;wBACJ,MAAM,IAAI,CAAC,kBAAkB,CAAC;4BAC7B,UAAU;4BACV,GAAG,QAAQ;4BACX,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW;yBAC/F,CAAC,CAAC;oBACJ,CAAC;oBAAC,MAAM,CAAC;wBACR,4DAA4D;oBAC7D,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC;oBACJ,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC1B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;oBAC3B,MAAM,YAAY,GAAG,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnH,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;oBACrD,aAAa,CAAC,YAAY;wBACzB,aAAa,KAAK,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,KAAK,YAAY,EAAE,CAAC;gBACvF,CAAC;YACF,CAAC;QACF,CAAC;QACD,IAAI,aAAa;YAChB,IAAI,CAAC;gBACJ,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACR,YAAY;YACb,CAAC;QACF,IAAI,YAAY;YACf,IAAI,CAAC;gBACJ,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACR,YAAY;YACb,CAAC;QACF,IAAI,aAAa;YAChB,IAAI,CAAC;gBACJ,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACR,YAAY;YACb,CAAC;QACF,IAAI,YAAY;YACf,IAAI,CAAC;gBACJ,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACR,YAAY;YACb,CAAC;IACH,CAAC;IACD,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,aAAa,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAChF,OAAO,aAAa,CAAC;AACtB,CAAC;AAED,MAAM,mBAAmB,GAAG,UAAU,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAU,EAAE;IAC5G,WAAW,EACV,yGAAyG;CAC1G,CAAC,CAAC;AASH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAClE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IACnE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAChB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4EAA4E,EAAE,CAAC,CAC1G;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5C,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EAAE,0FAA0F;KACvG,CAAC,CACF;IACD,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC,CAAC;IAC3F,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,UAAU,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAU,EAAE;QAC3C,WAAW,EACV,iKAAiK;KAClK,CAAC,CACF;IACD,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;QACzB,WAAW,EAAE,8EAA8E;KAC3F,CAAC,CACF;IACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;QACzB,WAAW,EACV,qHAAqH;KACtH,CAAC,CACF;IACD,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,MAAM,CACV;QACC,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,MAAM,CAAC;YACX,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC,CAAC;YAC7F,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;SAC5C,CAAC,CACF;QACD,WAAW,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC,CACvG;KACD,EACD;QACC,WAAW,EACV,0GAA0G;KAC3G,CACD,CACD;IACD,OAAO,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,MAAM,CACV;QACC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC,CAAC;QACtG,UAAU,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC,CACzF;QACD,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC,CAAC;KAC3G,EACD,EAAE,WAAW,EAAE,wCAAwC,EAAE,CACzD,CACD;CACD,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAClE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4DAA4D,EAAE,CAAC;IAChG,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EAAE,0FAA0F;KACvG,CAAC,CACF;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5C,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC,CAAC;CAC3F,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,UAAU,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAU,EAAE;IACzE,WAAW,EAAE,8FAA8F;IAC3G,OAAO,EAAE,MAAM;CACf,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+CAA+C,EAAE,CAAC,CAAC;IACnG,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC,CAAC;IACvF,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC;QACX,WAAW,EAAE,0FAA0F;KACvG,CAAC,CACF;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC5C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,+CAA+C,EAAE,CAAC,CAAC;IAC5G,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC,CAAC;IAC/G,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC3C,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAClC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,4DAA4D,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAC1G;IACD,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uDAAuD,EAAE,CAAC,CAAC;IACzG,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,UAAU,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAU,EAAE;QAC3C,WAAW,EACV,iKAAiK;KAClK,CAAC,CACF;CACD,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAwB;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACxF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,SAAS,CACjB,MAA4B,EAC5B,QAAyB;IAEzB,IAAI,QAAQ,CAAC,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC7E,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO;YACN,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,MAAM,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB;SACjG,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC9G,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC;IAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAChG,CAAC;AAED,2GAA2G;AAC3G,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC;;;;GAIG;AACH,SAAS,mBAAmB,CAC3B,MAA8B,EAC9B,MAA4B,EAC5B,QAAyB,EACzB,WAAoB,EACpB,OAAgB;IAEhB,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO;IAC5B,IAAI,CAAC;QACJ,iGAAiG;QACjG,2FAA2F;QAC3F,+FAA+F;QAC/F,2FAA2F;QAC3F,IACC,QAAQ,CAAC,QAAQ;YACjB,CAAC,QAAQ,CAAC,UAAU;YACpB,QAAQ,CAAC,MAAM;YACf,QAAQ,CAAC,SAAS,KAAK,IAAI;YAC3B,CAAC,CACA,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC;gBACjE,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CACjE,EACA,CAAC;YACF,OAAO;QACR,CAAC;QACD,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,cAAc,EAAE,CAAC;YACjB,OAAO;QACR,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,EAAE;YACvB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC;QACF,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAI,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBAC5D,mGAAmG;gBACnG,iGAAiG;gBACjG,iGAAiG;gBACjG,8DAA8D;gBAC9D,iGAAiG;gBACjG,mGAAmG;gBACnG,gGAAgG;gBAChG,6FAA6F;gBAC7F,IACC,QAAQ,CAAC,kBAAkB;oBAC3B,CAAC,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC;wBACjE,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC;wBACjE,CAAC,QAAQ,CAAC,WAAW,KAAK,IAAI;4BAC7B,QAAQ,CAAC,SAAS,KAAK,yBAAyB;4BAChD,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAC5B,CAAC;oBACF,MAAM,CAAC,wBAAwB,EAAE,CAAC;gBACnC,CAAC;gBACD,OAAO;YACR,CAAC;YACD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACzB,UAAU,EAAE,CAAC;gBACb,OAAO;YACR,CAAC;YACD,yFAAyF;YACzF,4FAA4F;YAC5F,oBAAoB;YACpB,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACtC,IAAI,OAAO,IAAI,QAAQ,CAAC,cAAc,KAAK,WAAW;oBAAE,cAAc,EAAE,CAAC;;oBACpE,UAAU,EAAE,CAAC;YACnB,CAAC;YACD,OAAO;QACR,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW;gBAAE,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChD,OAAO;QACR,CAAC;QACD,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACR,yCAAyC;IAC1C,CAAC;AACF,CAAC;AAED,+DAA+D;AAC/D,SAAS,mBAAmB,CAAC,MAA8B;IAC1D,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IACnC,MAAM,KAAK,GACV,CAAsB,MAA4B,EAAE,EAAE,CACtD,CAAC,GAAG,IAAO,EAAQ,EAAE;QACpB,IAAI,CAAC;YACJ,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACR,yCAAyC;QAC1C,CAAC;IACF,CAAC,CAAC;IACH,OAAO;QACN,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACxB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACxB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACxB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC;QAC1C,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC;QACxD,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC;KAChE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,mBAAmB;IACP,UAAU,CAAyC;IACnD,MAAM,CAA0B;IACzC,GAAG,CAAkC;IAC5B,OAAO,GAA6B,EAAE,CAAC;IAChD,aAAa,CAA2B;IACxC,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,UAAkD,EAAE,MAA+B;QAC9F,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,4EAA4E;IAC5E,KAAK,CACJ,QAAsC,EACtC,IAAmD;QAEnD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,QAAQ,CAAC;QACtC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,OAAO;gBAAE,OAAO,QAAQ,CAAC;YAClC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,MAAM,EAAE,CAAC;gBACZ,6FAA6F;gBAC7F,MAAM,QAAQ,GAAG,GAAG,EAAE;oBACrB,IAAI,CAAC;wBACJ,GAAG,CAAC,aAAa,EAAE,CAAC;oBACrB,CAAC;oBAAC,MAAM,CAAC;wBACR,yCAAyC;oBAC1C,CAAC;gBACF,CAAC,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;gBAC9B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,IAAI,MAAM,CAAC,OAAO;oBAAE,QAAQ,EAAE,CAAC;YAChC,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/B,OAAO,CAAC,OAAO,EAAE,EAAE;YAClB,IAAI,CAAC;gBACJ,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACR,yCAAyC;YAC1C,CAAC;YACD,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC,CAAC;IACH,CAAC;IAED,yFAAyF;IACzF,WAAW,CAAC,IAAwB;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG;YAAE,OAAO,iCAAiC,CAAC;QACnD,IAAI,MAAM,GAAG,iCAAiC,CAAC;QAC/C,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACR,yCAAyC;QAC1C,CAAC;QACD,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,qCAAqC;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3F,OAAO,MAAM,CAAC;IACf,CAAC;IAED,+EAA+E;IAC/E,QAAQ,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,iCAAiC,CAAC;IACjE,CAAC;IAED,kEAAkE;IAClE,eAAe,CAAC,KAAa;QAC5B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,CAAC;IAED,2FAA2F;IAC3F,4BAA4B,CAAC,KAAa;QACzC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;IAC1F,CAAC;IAED;;OAEG;IACH,MAAM,CAAmB,MAAU;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACpG,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAI,MAAM;gBAAE,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACR,yCAAyC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;CACD;AAID,kGAAkG;AAClG,SAAS,wBAAwB,CAChC,KAAsG;IAEtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;QAC1D,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACzF,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YACnF,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,WAAW,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAW;IACvD,OAAO;QACN,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE;YACZ,gEAAgE;YAChE,uGAAuG;YACvG,sRAAsR;YACtR,sFAAsF;YACtF,uCAAuC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,IAAI;YAC7E,qCAAqC,eAAe,iDAAiD;SACrG,CAAC,IAAI,CAAC,GAAG,CAAC;QACX,aAAa,EACZ,4IAA4I;QAC7I,gBAAgB,EAAE;YACjB,kQAAkQ;SAClQ;QACD,UAAU,EAAE,cAAc;QAE1B,OAAO,EAAE,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;YAClG,MAAM,UAAU,GAAe,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;YAC3D,MAAM,UAAU,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC;YACnC,MAAM,WAAW,GAAG,GAAG,EAAE,KAAK,CAAC;YAC/B,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,IAAI,CAAC;YACjE,MAAM,mBAAmB,GAAG,QAAmD,CAAC;YAEhF,kEAAkE;YAClE,qEAAqE;YACrE,2DAA2D;YAC3D,MAAM,iBAAiB,GAAG,GAA4E,EAAE;gBACvG,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;wBAClC,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,UAAU,IAAI,CAAC,EAAE;qBACpC,CAAC,CAAC,CAAC;gBACL,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;wBAClC,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,EAAE;qBAC5B,CAAC,CAAC,CAAC;gBACL,IAAI,MAAM,CAAC,KAAK;oBAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC,CAAC;gBACjG,OAAO,EAAE,CAAC;YACX,CAAC,CAAC;YACF,MAAM,UAAU,GAAG,CAClB,KAAuE,EACvE,YAAoB,EACG,EAAE,CAAC,CAAC;gBAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,GAAG,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxF,YAAY,EAAE,aAAa,EAAE,IAAI,UAAU;gBAC3C,KAAK,EAAE,oBAAoB,EAAE,GAAG,CAAC;gBACjC,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBAChG,YAAY;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,QAAQ;aACnB,CAAC,CAAC;YACH,MAAM,eAAe,GAAG,CAAC,YAAoB,EAA0B,EAAE,CACxE,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;YAErE,MAAM,WAAW,GAChB,CAAC,IAAqC,EAAE,EAAE,CAC1C,CAAC,OAA+B,EAAmB,EAAE,CAAC,CAAC;gBACtD,IAAI;gBACJ,UAAU;gBACV,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;gBAC5C,OAAO;aACP,CAAC,CAAC;YACJ,MAAM,mBAAmB,GACxB,CAAC,IAAqC,EAAE,EAAE,CAC1C,CAAC,OAAiC,EAAE,UAAgC,EAA2B,EAAE,CAAC,CAAC;gBAClG,IAAI;gBACJ,UAAU;gBACV,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;gBAC5C,OAAO;gBACP,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrC,CAAC,CAAC;YAEJ,IAAI,oBAAoB,EAAE,IAAI,gBAAgB,EAAE,EAAE,CAAC;gBAClD,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,0CAA0C,oBAAoB,EAAE,OAAO,gBAAgB,EAAE,gCAAgC;yBAC/H;qBACD;oBACD,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBAClC,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAE1E,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;gBACpF,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,oEAAoE,SAAS,EAAE;yBACrF;qBACD;oBACD,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAC7B,eAAe,CAAC,wDAAwD,CAAC,CACzE;iBACD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,QAAQ,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,2DAA2D,CAAC;gBACjF,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;oBAC/C,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAC1E,eAAe,CAAC,YAAY,CAAC,CAC7B;oBACD,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,CAAC;YAED,IACC,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,MAAM,CAAC;gBACnD,oBAAoB;gBACpB,GAAG,EAAE,KAAK;gBACV,CAAC,GAAG,CAAC,gBAAgB,EAAE,EACtB,CAAC;gBACF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC9C,IAAI,MAAM,CAAC,KAAK;oBAAE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;wBAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvF,IAAI,MAAM,CAAC,KAAK;oBAAE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK;wBAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACjF,IAAI,MAAM,CAAC,KAAK;oBAAE,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAExD,MAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;qBAC5D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;qBAClD,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;gBAE3D,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvC,MAAM,KAAK,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnE,MAAM,GAAG,GAAG,SAAS,CAAC,gBAAgB,IAAI,WAAW,CAAC;oBACtD,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CAC9B,2BAA2B,EAC3B,WAAW,KAAK,aAAa,GAAG,iFAAiF,CACjH,CAAC;oBACF,IAAI,CAAC,EAAE;wBACN,OAAO;4BACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8CAA8C,EAAE,CAAC;4BACjF,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAC1E,eAAe,CAAC,6CAA6C,CAAC,CAC9D;4BACD,OAAO,EAAE,IAAI;yBACb,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,0FAA0F;YAC1F,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7G,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;YACnC,IAAI,YAAY,IAAI,MAAM,CAAC,KAAM,CAAC,MAAM,GAAG,OAAO;gBACjD,OAAO;oBACN,OAAO,EAAE;wBACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,MAAM,CAAC,KAAM,CAAC,MAAM,aAAa,OAAO,GAAG,EAAE;qBAC/F;oBACD,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,yCAAyC,OAAO,GAAG,CAAC,CAAC;oBACtG,OAAO,EAAE,IAAI;iBACb,CAAC;YACH,MAAM,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvE,GAAG,CAAC;gBACJ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,UAAU,IAAI,CAAC,EAAE;gBAChC,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;gBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;gBAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;aACtB,CAAC,CAAC,CAAC;YACJ,IAAI,YAAY,EAAE,CAAC;gBAClB,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,UAAU,EAAE,CAAC;oBAChB,OAAO;wBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,UAAU,GAAG,EAAE,CAAC;wBACvE,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,gCAAgC,UAAU,GAAG,CAAC,CAAC;wBAChG,OAAO,EAAE,IAAI;qBACb,CAAC;gBACH,CAAC;YACF,CAAC;YAED,4FAA4F;YAC5F,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE;gBAC/D,UAAU;gBACV,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;aAC/D,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,2GAA2G;gBAC3G,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;oBAAE,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjG,MAAM,OAAO,GAA2B,EAAE,CAAC;gBAC3C,IAAI,cAAc,GAAG,EAAE,CAAC;gBAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;oBAE3E,4DAA4D;oBAC5D,MAAM,WAAW,GAAiC,gBAAgB;wBACjE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE;4BACZ,+DAA+D;4BAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;4BAClD,IAAI,aAAa,EAAE,CAAC;gCACnB,gBAAgB,CAAC;oCAChB,OAAO,EAAE,OAAO,CAAC,OAAO;oCACxB,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;iCACrF,CAAC,CAAC;4BACJ,CAAC;wBACF,CAAC;wBACF,CAAC,CAAC,SAAS,CAAC;oBAEb,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACvC,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,MAAM,cAAc,CAClC,UAAU,EACV,MAAM,EACN,SAAS,CAAC,WAAW,EACrB,IAAI,CAAC,KAAK,EACV,eAAe,EACf,IAAI,CAAC,GAAG,EACR,SAAS,EACT,CAAC,GAAG,CAAC,EACL,IAAI,CAAC,KAAK,EACV,WAAW,EACX,MAAM,EACN,WAAW,EACX,mBAAmB,CAAC,OAAO,CAAC,EAC5B,UAAU,EACV,CAAC,EACD;wBACC,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,EAAE;wBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,QAAQ,EAAE,MAAM;wBAChB,QAAQ;wBACR,UAAU,EAAE,wBAAwB,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC;wBAC1E,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC;qBAC1D,CACD,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAErB,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;oBACvC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;oBAC1F,IAAI,OAAO,EAAE,CAAC;wBACb,kFAAkF;wBAClF,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI;4BAAE,WAAW,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;;4BACzE,WAAW,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;wBACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK;6BAC1B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;6BACZ,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAClB,UAAU,CACT,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,EACtD,kCAAkC,CAAC,GAAG,CAAC,EAAE,CACzC,CACD,CAAC;wBACH,OAAO;4BACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,MAAM,QAAQ,EAAE,EAAE,CAAC;4BAChG,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;4BACvD,OAAO,EAAE,IAAI;yBACb,CAAC;oBACH,CAAC;oBACD,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAClD,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;oBACxG,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;iBACtC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,oBAAoB,EAAE,GAAG,CAAC,CAAC;gBAC9C,6FAA6F;gBAC7F,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;gBAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,qCAAqC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxF,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACnC,CAAC;gBAED,MAAM,UAAU,GAAwB,EAAE,CAAC;gBAC3C,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAE,EAAE;oBAClD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC,CAAC;gBACF,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;oBACtC,aAAa,CAAC;wBACb,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,CAAC,CAAC,EAAE;wBACZ,SAAS,EAAE,CAAC,CAAC,SAAS;wBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY;wBACrC,EAAE,EAAE,GAAG,EAAE;qBACT,CAAC,CAAC;oBACH,wFAAwF;oBACxF,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzF,CAAC;gBAED,MAAM,UAAU,GAA2B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5D,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM,EAAE,CAAC,CAAC,EAAE;oBACZ,YAAY,EAAE,aAAa,EAAE,IAAI,UAAU;oBAC3C,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,CAAC,CAAC,EAAE,qBAAqB;oBACnC,QAAQ,EAAE,EAAE;oBACZ,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;oBAChG,SAAS,EAAE,QAAQ;iBACnB,CAAC,CAAC,CAAC;gBAEJ,MAAM,iBAAiB,GAAG,CAAC,OAA+B,EAAmB,EAAE,CAAC,CAAC;oBAChF,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;oBACnC,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC;iBAC3B,CAAC,CAAC;gBACH,MAAM,yBAAyB,GAAG,CAAC,OAAiC,EAA2B,EAAE,CAChG,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;gBAE3D,MAAM,kBAAkB,GAAG,CAAC,eAAe,GAAG,iBAAiB,CAAC,UAAU,CAAC,EAAE,EAAE;oBAC9E,IAAI,gBAAgB,EAAE,CAAC;wBACtB,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;wBACnE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;wBAChE,gBAAgB,CAAC;4BAChB,OAAO,EAAE;gCACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,IAAI,IAAI,UAAU,CAAC,MAAM,UAAU,OAAO,aAAa,EAAE;6BAC5F;4BACD,OAAO,EAAE,yBAAyB,CAAC,eAAe,CAAC;yBACnD,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC,CAAC;gBAEF,IAAI,OAA+B,CAAC;gBACpC,IAAI,CAAC;oBACJ,OAAO,GAAG,MAAM,MAAM,CACrB,KAAK,EACL,EAAE,WAAW,EAAE,sBAAsB,EAAE,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,EAC5E,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;wBAClB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC5E,IAAI,OAAO,GAAG,CAAC,CAAC;wBAChB,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;wBACpB,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;wBAC1B,IAAI,MAA4B,CAAC;wBACjC,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAC3C,IAAI,QAAQ,GAAG,kBAAkB,EAAE,CAAC;wBACpC,IAAI,WAAW,GAAG,KAAK,CAAC;wBACxB,MAAM,UAAU,GAAG,wBAAwB,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;wBAClF,SAAS,CAAC;4BACT,QAAQ,GAAG,kBAAkB,EAAE,CAAC;4BAChC,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;4BACnE,MAAM,GAAG,MAAM,cAAc,CAC5B,UAAU,EACV,MAAM,EACN,SAAS,CAAC,WAAW,EACrB,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,GAAG,EACL,CAAC,CAAC,SAAS,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,MAAM,EACN,CAAC,OAAO,EAAE,EAAE;gCACX,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;gCAClD,IAAI,aAAa,EAAE,CAAC;oCACnB,MAAM,eAAe,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;oCACtD,eAAe,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC;oCACvC,kBAAkB,CAAC,eAAe,CAAC,CAAC;gCACrC,CAAC;4BACF,CAAC,EACD,yBAAyB,EACzB,UAAU,EACV,KAAK,EACL;gCACC,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,QAAQ;gCACR,OAAO;gCACP,OAAO,EAAE,CAAC,CAAC,OAAO;gCAClB,QAAQ,EAAE,MAAM;gCAChB,QAAQ;gCACR,UAAU;gCACV,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC;6BAC1D,CACD,CAAC;4BACF,WAAW,KAAK,QAAQ,CAAC,OAAO,CAAC;4BACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gCAC7B,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gCACtE,MAAM;4BACP,CAAC;4BACD,aAAa,CAAC;gCACb,IAAI,EAAE,MAAM;gCACZ,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,OAAO;gCACP,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gCAC7C,EAAE,EAAE,GAAG,EAAE;6BACT,CAAC,CAAC;4BACH,IAAI,OAAO,IAAI,WAAW,IAAI,MAAM,EAAE,OAAO;gCAAE,MAAM;4BACrD,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;4BACzB,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,KAAK,CAAC;4BAC/C,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,IAAI,QAAQ,CAAC;4BACxD,aAAa,CAAC;gCACb,IAAI,EAAE,UAAU;gCAChB,MAAM,EAAE,CAAC,CAAC,EAAE;gCACZ,WAAW,EAAE,OAAO;gCACpB,SAAS,EAAE,IAAI;gCACf,KAAK,EAAE,KAAK,IAAI,GAAG,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,EAAE,EAAE;gCAC3D,QAAQ;gCACR,EAAE,EAAE,GAAG,EAAE;6BACT,CAAC,CAAC;4BACH,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;4BAChC,OAAO,GAAG,IAAI,CAAC;wBAChB,CAAC;wBACD,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;wBACrF,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;wBAC3B,kBAAkB,EAAE,CAAC;wBACrB,OAAO,MAAM,CAAC;oBACf,CAAC,EACD,cAAc,EACd,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE;wBAC9B,MAAM,IAAI,GAAG,UAAU,CACtB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAC9C,wBAAwB,gBAAgB,UAAU,CAClD,CAAC;wBACF,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;wBACzB,kBAAkB,EAAE,CAAC;wBACrB,OAAO,IAAI,CAAC;oBACb,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;wBACT,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;4BACxB,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;6BAChF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;4BAClC,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;6BAClF,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;4BAC7B,aAAa,CAAC;gCACb,IAAI,EAAE,MAAM;gCACZ,MAAM,EAAE,KAAK,CAAC,EAAE;gCAChB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gCACxC,EAAE,EAAE,GAAG,EAAE;6BACT,CAAC,CAAC;wBACJ,oEAAoE;wBACpE,6EAA6E;wBAC7E,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;4BACzD,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BAClC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;oBACF,CAAC,EACD,MAAM,EACN,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;wBACZ,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,CAAC;wBACnD,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,+BAA+B,CAAC,CAAC;oBACpG,CAAC,CACD,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjE,OAAO;wBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,OAAO,EAAE,EAAE,CAAC;wBAC3E,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAC,+BAA+B,OAAO,GAAG,CAAC,CAAC;wBACtF,OAAO,EAAE,IAAI;qBACb,CAAC;gBACH,CAAC;gBAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACnC,MAAM,MAAM,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;wBAC/B,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBAC/E,CAAC,CAAC,WAAW,CAAC;oBACf,OAAO,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,OAAO,MAAM,EAAE,CAAC;gBAClD,CAAC,CAAC,CAAC;gBACH,OAAO;oBACN,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,aAAa,YAAY,IAAI,OAAO,CAAC,MAAM,iBAAiB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;yBACjG;qBACD;oBACD,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC;oBACnC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM;iBACxC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACnF,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,MAAM,cAAc,CAClC,UAAU,EACV,MAAM,EACN,SAAS,CAAC,WAAW,EACrB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,SAAS,EAChB,SAAS,EACT,MAAM,CAAC,KAAK,EACZ,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,mBAAmB,CAAC,QAAQ,CAAC,EAC7B,UAAU,EACV,CAAC,EACD;oBACC,MAAM,EAAE,GAAG,UAAU,IAAI;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,QAAQ,EAAE,MAAM;oBAChB,QAAQ;oBACR,UAAU,EAAE,wBAAwB,CAAC,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC;oBAC1E,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC;iBAC1D,CACD,CAAC;gBACF,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBACvC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;gBAC1F,IAAI,OAAO,EAAE,CAAC;oBACb,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;oBACzC,OAAO;wBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,CAAC,UAAU,IAAI,QAAQ,KAAK,QAAQ,EAAE,EAAE,CAAC;wBACxF,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACxC,OAAO,EAAE,IAAI;qBACb,CAAC;gBACH,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;oBACnF,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;iBACxC,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;YACpF,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yCAAyC,SAAS,EAAE,EAAE,CAAC;gBACvF,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;aAClC,CAAC;QACH,CAAC,CAAC;QAEF,UAAU,CAAC,IAAI,EAAE,KAAY,EAAE,QAAQ;YACtC,MAAM,KAAK,GAAe,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;YACpD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,IAAI,GACP,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC9C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;oBACxD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,8CAA8C;oBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChE,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;oBACnF,IAAI;wBACH,MAAM;4BACN,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;4BAC9B,GAAG;4BACH,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC;4BAC9B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;gBACjC,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpG,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,IAAI,GACP,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC9C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;oBAC3D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;gBAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC1E,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC/E,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpG,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzG,IAAI,IAAI,GACP,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC7B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;YAClC,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAY,EAAE,QAAQ;YACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAgE,CAAC;YACxF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;YAEnC,MAAM,kBAAkB,GAAG,CAAC,KAAoB,EAAE,KAAc,EAAE,EAAE;gBACnE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnD,MAAM,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,OAAO,GAAG,CAAC;oBAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,OAAO,kBAAkB,CAAC,CAAC;gBAC7E,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACpF,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACP,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;oBACrG,CAAC;gBACF,CAAC;gBACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/D,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBACzE,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBAE5C,IAAI,QAAQ,EAAE,CAAC;oBACd,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;oBAClC,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBAChH,IAAI,OAAO,IAAI,CAAC,CAAC,UAAU;wBAAE,MAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;oBACpF,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,OAAO,IAAI,CAAC,CAAC,YAAY;wBAC5B,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACnF,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACtE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5D,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;wBAC/C,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACtE,CAAC;yBAAM,CAAC;wBACP,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;4BACjC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gCAC3B,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACpF,CAAC,EACD,CAAC,CACD,CACD,CAAC;wBACJ,CAAC;wBACD,IAAI,WAAW,EAAE,CAAC;4BACjB,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;wBACrE,CAAC;oBACF,CAAC;oBACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACpD,IAAI,QAAQ,EAAE,CAAC;wBACd,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/D,CAAC;oBACD,OAAO,SAAS,CAAC;gBAClB,CAAC;gBAED,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC9G,IAAI,OAAO,IAAI,CAAC,CAAC,UAAU;oBAAE,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBAClF,IAAI,OAAO,IAAI,CAAC,CAAC,YAAY;oBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;qBACvF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;oBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;qBAC/E,CAAC;oBACL,IAAI,IAAI,KAAK,kBAAkB,CAAC,YAAY,EAAE,oBAAoB,CAAC,EAAE,CAAC;oBACtE,IAAI,YAAY,CAAC,MAAM,GAAG,oBAAoB;wBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBACxG,CAAC;gBACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,QAAQ;oBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACvD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,cAAc,GAAG,CAAC,OAAgC,EAAE,EAAE;gBAC3D,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACtF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACzB,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;oBAC7B,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;oBACrC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;oBACvC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC3B,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC9B,CAAC;gBACD,OAAO,KAAK,CAAC;YACd,CAAC,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC5E,MAAM,IAAI,GAAG,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAEzG,IAAI,QAAQ,EAAE,CAAC;oBACd,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;oBAClC,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,IAAI;wBACH,GAAG;wBACH,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC3C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,EACtE,CAAC,EACD,CAAC,CACD,CACD,CAAC;oBAEF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACjC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;wBACnF,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;wBAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;wBAE5C,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,EACrF,CAAC,EACD,CAAC,CACD,CACD,CAAC;wBACF,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAE1F,kBAAkB;wBAClB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;4BACjC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gCAC9B,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACpF,CAAC,EACD,CAAC,CACD,CACD,CAAC;4BACH,CAAC;wBACF,CAAC;wBAED,gCAAgC;wBAChC,IAAI,WAAW,EAAE,CAAC;4BACjB,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;wBACrE,CAAC;wBAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;wBACrD,IAAI,SAAS;4BAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/E,CAAC;oBAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,IAAI,QAAQ,EAAE,CAAC;wBACd,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC3E,CAAC;oBACD,OAAO,SAAS,CAAC;gBAClB,CAAC;gBAED,iBAAiB;gBACjB,IAAI,IAAI,GACP,IAAI;oBACJ,GAAG;oBACH,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3C,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;gBACvE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACjC,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACnF,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;oBAClG,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;wBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;;wBAC1E,IAAI,IAAI,KAAK,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzD,CAAC;gBACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnE,IAAI,QAAQ;oBAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACrE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBACvD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACxE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACnG,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC/F,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,SAAS;oBACrB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;oBAC1B,CAAC,CAAC,SAAS,GAAG,CAAC;wBACd,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;wBAC1B,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,SAAS;oBACvB,CAAC,CAAC,GAAG,YAAY,GAAG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,UAAU,OAAO,UAAU;oBAClF,CAAC,CAAC,GAAG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC;gBAErD,IAAI,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC5B,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;oBAClC,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EACxF,CAAC,EACD,CAAC,CACD,CACD,CAAC;oBAEF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACjC,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;wBACpF,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;wBAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;wBAE5C,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CACrF,CAAC;wBACF,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAE1F,kBAAkB;wBAClB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;4BACjC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gCAC9B,SAAS,CAAC,QAAQ,CACjB,IAAI,IAAI,CACP,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACpF,CAAC,EACD,CAAC,CACD,CACD,CAAC;4BACH,CAAC;wBACF,CAAC;wBAED,gCAAgC;wBAChC,IAAI,WAAW,EAAE,CAAC;4BACjB,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;wBACrE,CAAC;wBAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;wBACrD,IAAI,SAAS;4BAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/E,CAAC;oBAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,IAAI,QAAQ,EAAE,CAAC;wBACd,SAAS,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC3E,CAAC;oBACD,OAAO,SAAS,CAAC;gBAClB,CAAC;gBAED,oCAAoC;gBACpC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;gBACpG,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACjC,MAAM,KAAK,GACV,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;wBAChB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;wBAC1B,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;4BAClB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC;4BACxB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBAC9B,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;oBAClF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;wBAC5B,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;;wBACjF,IAAI,IAAI,KAAK,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzD,CAAC;gBACD,IAAI,CAAC,SAAS,EAAE,CAAC;oBAChB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,IAAI,QAAQ;wBAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACtE,CAAC;gBACD,IAAI,CAAC,QAAQ;oBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,CAAC;gBACtE,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC7C,OAAO,kBAAkB,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["/**\n * Subagent Tool - Delegate tasks to specialized agents\n *\n * Spawns a separate humain-code process for each subagent invocation,\n * giving it an isolated context window.\n *\n * Supports three modes:\n * - Single: { agent: \"name\", task: \"...\" }\n * - Parallel: { tasks: [{ agent: \"name\", task: \"...\" }, ...] }\n * - Chain: { chain: [{ agent: \"name\", task: \"... {previous} ...\" }, ...] }\n *\n * Uses JSON mode to capture structured output from subagents.\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Message, Model, Usage } from \"@earendil-works/pi-ai\";\nimport { StringEnum } from \"@earendil-works/pi-ai\";\nimport { Container, Markdown, Spacer, Text } from \"@earendil-works/pi-tui\";\nimport {\n\tSUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN,\n\ttype SubagentFailureKind,\n\ttype SubagentRunMode,\n} from \"@humain/humain-code-contracts\";\nimport { Type } from \"typebox\";\nimport { resolveCliCommand } from \"../../cli/deprecation.ts\";\nimport { CONFIG_DIR_NAME, getAgentDir } from \"../../config.ts\";\nimport { createSubagentTraceChild, type SubagentTraceChild } from \"../../humain/trace-capture/subagent-trace.ts\";\nimport { getMarkdownTheme, type Theme } from \"../../modes/interactive/theme/theme.ts\";\nimport { parseFrontmatter } from \"../../utils/frontmatter.ts\";\nimport type { ResourceDiagnostic } from \"../diagnostics.ts\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport { TRACE_ENV } from \"../trace/config.ts\";\nimport { withFileMutationQueue } from \"./file-mutation-queue.ts\";\nimport { shortenPath } from \"./render-utils.ts\";\nimport {\n\tcurrentSubagentDepth,\n\tcurrentTaskId,\n\tmaxParallelTasks,\n\tmaxSubagentConcurrency,\n\tmaxSubagentDepth,\n\tmaxSubagentWorktrees,\n\tPARENT_TASK_ID_ENV,\n\tSUBAGENT_DEPTH_ENV,\n\tTASK_BASE_REVISION_ENV,\n\tTASK_ID_ENV,\n} from \"./subagent-env.ts\";\nimport {\n\tattachSubagentProgress,\n\tDISABLED_SUBAGENT_WORKER_OBSERVER,\n\treadSubagentProgressCapability,\n\ttype SubagentProgressCapability,\n\ttype SubagentRunObserver,\n\ttype SubagentWorkerMeta,\n\ttype SubagentWorkerObserver,\n} from \"./subagent-progress.ts\";\nimport { runDag, validateTaskGraph } from \"./subagent-scheduler.ts\";\n\nexport { SUBAGENT_DEPTH_ENV } from \"./subagent-env.ts\";\n\nimport { type FileEvidenceSink, getFileEvidenceSink } from \"./file-evidence.ts\";\nimport {\n\tcreateSubagentWorktree,\n\tisGitWorkTree,\n\ttype SubagentIsolation,\n\ttype SubagentMergeOutcome,\n\ttype SubagentWorktree,\n} from \"./subagent-worktree.ts\";\nimport { wrapToolDefinition } from \"./tool-definition-wrapper.ts\";\n\nconst COLLAPSED_ITEM_COUNT = 10;\nconst PER_TASK_OUTPUT_CAP = 50 * 1024;\nconst PROGRESS_TEXT_CAP = 2 * 1024;\n\n// --- Agent discovery ---\n\nexport type AgentScope = \"user\" | \"project\" | \"both\";\n\nexport interface AgentConfig {\n\tname: string;\n\tdescription: string;\n\ttools?: string[];\n\tmodel?: string;\n\tsystemPrompt: string;\n\tsource: \"user\" | \"project\";\n\tfilePath: string;\n}\n\nexport interface AgentDiscoveryResult {\n\tagents: AgentConfig[];\n\tprojectAgentsDir: string | null;\n\tdiagnostics: ResourceDiagnostic[];\n}\n\ninterface LoadAgentsResult {\n\tagents: AgentConfig[];\n\tdiagnostics: ResourceDiagnostic[];\n}\n\nfunction loadAgentsFromDir(dir: string, source: \"user\" | \"project\"): LoadAgentsResult {\n\tconst agents: AgentConfig[] = [];\n\tconst diagnostics: ResourceDiagnostic[] = [];\n\n\tif (!fs.existsSync(dir)) {\n\t\treturn { agents, diagnostics };\n\t}\n\n\tlet entries: fs.Dirent[];\n\ttry {\n\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t} catch {\n\t\treturn { agents, diagnostics };\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.name.endsWith(\".md\")) continue;\n\t\tif (!entry.isFile() && !entry.isSymbolicLink()) continue;\n\n\t\tconst filePath = path.join(dir, entry.name);\n\t\tlet content: string;\n\t\ttry {\n\t\t\tcontent = fs.readFileSync(filePath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet frontmatter: Record<string, string>;\n\t\tlet body: string;\n\t\ttry {\n\t\t\t({ frontmatter, body } = parseFrontmatter<Record<string, string>>(content));\n\t\t} catch (error) {\n\t\t\t// Malformed frontmatter (e.g. invalid YAML) must not take down the whole\n\t\t\t// directory — skip this one file and surface a diagnostic instead.\n\t\t\tconst message = error instanceof Error ? error.message : \"failed to parse agent file\";\n\t\t\tdiagnostics.push({ type: \"warning\", message, path: filePath });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!frontmatter.name || !frontmatter.description) {\n\t\t\tconst missing = [!frontmatter.name && \"name\", !frontmatter.description && \"description\"]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" and \");\n\t\t\tdiagnostics.push({\n\t\t\t\ttype: \"warning\",\n\t\t\t\tmessage: `missing required frontmatter field(s): ${missing}`,\n\t\t\t\tpath: filePath,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst tools = frontmatter.tools\n\t\t\t?.split(\",\")\n\t\t\t.map((t: string) => t.trim())\n\t\t\t.filter(Boolean);\n\n\t\tagents.push({\n\t\t\tname: frontmatter.name,\n\t\t\tdescription: frontmatter.description,\n\t\t\ttools: tools && tools.length > 0 ? tools : undefined,\n\t\t\tmodel: frontmatter.model,\n\t\t\tsystemPrompt: body,\n\t\t\tsource,\n\t\t\tfilePath,\n\t\t});\n\t}\n\n\treturn { agents, diagnostics };\n}\n\nfunction isDirectory(p: string): boolean {\n\ttry {\n\t\treturn fs.statSync(p).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction findNearestProjectAgentsDir(cwd: string): string | null {\n\tlet currentDir = cwd;\n\twhile (true) {\n\t\tconst candidate = path.join(currentDir, CONFIG_DIR_NAME, \"agents\");\n\t\tif (isDirectory(candidate)) return candidate;\n\n\t\tconst parentDir = path.dirname(currentDir);\n\t\tif (parentDir === currentDir) return null;\n\t\tcurrentDir = parentDir;\n\t}\n}\n\n/**\n * Absolute directory of trusted packaged agents, set by a parent process that ships personas (Flow). Loaded at\n * user trust: below the user agents dir, above project agents, which can never shadow a name defined here.\n */\nexport const TRUSTED_AGENTS_DIR_ENV = \"HUMAIN_TERMINAL_TRUSTED_AGENTS_DIR\";\n\nfunction loadTrustedAgents(): LoadAgentsResult {\n\tconst dir = process.env[TRUSTED_AGENTS_DIR_ENV];\n\tif (!dir) return { agents: [], diagnostics: [] };\n\tif (!path.isAbsolute(dir)) {\n\t\treturn {\n\t\t\tagents: [],\n\t\t\tdiagnostics: [{ type: \"warning\", message: `${TRUSTED_AGENTS_DIR_ENV} must be an absolute path`, path: dir }],\n\t\t};\n\t}\n\treturn loadAgentsFromDir(dir, \"user\");\n}\n\nexport function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult {\n\tconst userDir = path.join(getAgentDir(), \"agents\");\n\tconst projectAgentsDir = findNearestProjectAgentsDir(cwd);\n\n\tconst emptyResult: LoadAgentsResult = { agents: [], diagnostics: [] };\n\tconst trustedResult = scope === \"project\" ? emptyResult : loadTrustedAgents();\n\tconst userResult = scope === \"project\" ? emptyResult : loadAgentsFromDir(userDir, \"user\");\n\tconst projectResult =\n\t\tscope === \"user\" || !projectAgentsDir ? emptyResult : loadAgentsFromDir(projectAgentsDir, \"project\");\n\n\tconst agentMap = new Map<string, AgentConfig>();\n\n\tif (scope === \"both\") {\n\t\tfor (const agent of trustedResult.agents) agentMap.set(agent.name, agent);\n\t\tfor (const agent of userResult.agents) agentMap.set(agent.name, agent);\n\t\tfor (const agent of projectResult.agents) {\n\t\t\tif (!trustedResult.agents.some((trusted) => trusted.name === agent.name)) agentMap.set(agent.name, agent);\n\t\t}\n\t} else if (scope === \"user\") {\n\t\tfor (const agent of trustedResult.agents) agentMap.set(agent.name, agent);\n\t\tfor (const agent of userResult.agents) agentMap.set(agent.name, agent);\n\t} else {\n\t\tfor (const agent of projectResult.agents) agentMap.set(agent.name, agent);\n\t}\n\n\treturn {\n\t\tagents: Array.from(agentMap.values()),\n\t\tprojectAgentsDir,\n\t\tdiagnostics: [...trustedResult.diagnostics, ...userResult.diagnostics, ...projectResult.diagnostics],\n\t};\n}\n\n// --- Formatting helpers ---\n\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\treturn `${(count / 1000000).toFixed(1)}M`;\n}\n\nfunction formatUsageStats(\n\tusage: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\tcost: number;\n\t\tcontextTokens?: number;\n\t\tturns?: number;\n\t},\n\tmodel?: string,\n): string {\n\tconst parts: string[] = [];\n\tif (usage.turns) parts.push(`${usage.turns} turn${usage.turns > 1 ? \"s\" : \"\"}`);\n\tif (usage.input) parts.push(`↑${formatTokens(usage.input)}`);\n\tif (usage.output) parts.push(`↓${formatTokens(usage.output)}`);\n\tif (usage.cacheRead) parts.push(`R${formatTokens(usage.cacheRead)}`);\n\tif (usage.cacheWrite) parts.push(`W${formatTokens(usage.cacheWrite)}`);\n\tif (usage.cost) parts.push(`$${usage.cost.toFixed(4)}`);\n\tif (usage.contextTokens && usage.contextTokens > 0) {\n\t\tparts.push(`ctx:${formatTokens(usage.contextTokens)}`);\n\t}\n\tif (model) parts.push(model);\n\treturn parts.join(\" \");\n}\n\nfunction formatToolCall(\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tthemeFg: (color: any, text: string) => string,\n): string {\n\tswitch (toolName) {\n\t\tcase \"bash\": {\n\t\t\tconst command = (args.command as string) || \"...\";\n\t\t\tconst preview = command.length > 60 ? `${command.slice(0, 60)}...` : command;\n\t\t\treturn themeFg(\"muted\", \"$ \") + themeFg(\"toolOutput\", preview);\n\t\t}\n\t\tcase \"read\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst offset = args.offset as number | undefined;\n\t\t\tconst limit = args.limit as number | undefined;\n\t\t\tlet text = themeFg(\"accent\", filePath);\n\t\t\tif (offset !== undefined || limit !== undefined) {\n\t\t\t\tconst startLine = offset ?? 1;\n\t\t\t\tconst endLine = limit !== undefined ? startLine + limit - 1 : \"\";\n\t\t\t\ttext += themeFg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n\t\t\t}\n\t\t\treturn themeFg(\"muted\", \"read \") + text;\n\t\t}\n\t\tcase \"write\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\tconst filePath = shortenPath(rawPath);\n\t\t\tconst content = (args.content || \"\") as string;\n\t\t\tconst lines = content.split(\"\\n\").length;\n\t\t\tlet text = themeFg(\"muted\", \"write \") + themeFg(\"accent\", filePath);\n\t\t\tif (lines > 1) text += themeFg(\"dim\", ` (${lines} lines)`);\n\t\t\treturn text;\n\t\t}\n\t\tcase \"edit\": {\n\t\t\tconst rawPath = (args.file_path || args.path || \"...\") as string;\n\t\t\treturn themeFg(\"muted\", \"edit \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"ls\": {\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"ls \") + themeFg(\"accent\", shortenPath(rawPath));\n\t\t}\n\t\tcase \"find\": {\n\t\t\tconst pattern = (args.pattern || \"*\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn themeFg(\"muted\", \"find \") + themeFg(\"accent\", pattern) + themeFg(\"dim\", ` in ${shortenPath(rawPath)}`);\n\t\t}\n\t\tcase \"grep\": {\n\t\t\tconst pattern = (args.pattern || \"\") as string;\n\t\t\tconst rawPath = (args.path || \".\") as string;\n\t\t\treturn (\n\t\t\t\tthemeFg(\"muted\", \"grep \") +\n\t\t\t\tthemeFg(\"accent\", `/${pattern}/`) +\n\t\t\t\tthemeFg(\"dim\", ` in ${shortenPath(rawPath)}`)\n\t\t\t);\n\t\t}\n\t\tdefault: {\n\t\t\tconst argsStr = JSON.stringify(args);\n\t\t\tconst preview = argsStr.length > 50 ? `${argsStr.slice(0, 50)}...` : argsStr;\n\t\t\treturn themeFg(\"accent\", toolName) + themeFg(\"dim\", ` ${preview}`);\n\t\t}\n\t}\n}\n\n/** Child stderr is retained up to this many trailing characters; older output is dropped and flagged. */\nconst STDERR_RETENTION_CHARS = 64 * 1024;\n/** A child stdout line longer than this is dropped (never buffered unbounded) and flagged. */\nconst STDOUT_LINE_MAX_CHARS = 1024 * 1024;\n\nexport interface SubagentUsageStats {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: number;\n\tcontextTokens: number;\n\tturns: number;\n}\n\nexport interface SubagentSingleResult {\n\tagent: string;\n\tagentSource: \"user\" | \"project\" | \"unknown\";\n\ttask: string;\n\t/** Stable id for this child; defaults to `${toolCallId}-${childIndex}`. */\n\ttaskId: string;\n\t/** The task id of the process that spawned this child, or its tool call id at depth 0. */\n\tparentTaskId?: string;\n\t/** Depth the child runs at (parent depth + 1). */\n\tdepth: number;\n\tthinking?: string;\n\tattempt?: number;\n\texitCode: number;\n\tmessages: Message[];\n\tstderr: string;\n\t/** True when `stderr` dropped its oldest output to stay within the retention bound. */\n\tstderrTruncated?: boolean;\n\t/** True when at least one child stdout line exceeded the line bound and was dropped. */\n\tstdoutTruncated?: boolean;\n\tusage: SubagentUsageStats;\n\t/** At least one received request had missing or invalid token counters. */\n\tusageIncomplete?: boolean;\n\tmodel?: string;\n\tstopReason?: string;\n\terrorMessage?: string;\n\tstep?: number;\n\tisolation: SubagentIsolation;\n\tisolationDegradedReason?: \"not-a-git-repo\";\n\tmergeOutcome?: SubagentMergeOutcome;\n\tchangedFiles?: string[];\n\tpatchPath?: string;\n\tbaseRevision?: string;\n}\n\nexport type SubagentTaskEvent =\n\t| { type: \"schedule\"; taskId: string; dependsOn: string[]; ownerPaths: string[]; baseRevision?: string; at: number }\n\t| { type: \"wait\"; taskId: string; reason: \"concurrency\"; at: number }\n\t| { type: \"serialize\"; taskId: string; after: string[]; at: number }\n\t| { type: \"start\"; taskId: string; attempt: number; at: number }\n\t| { type: \"complete\"; taskId: string; attempt: number; at: number }\n\t| { type: \"fail\"; taskId: string; attempt: number; reason: string; at: number }\n\t| {\n\t\t\ttype: \"escalate\";\n\t\t\ttaskId: string;\n\t\t\tfromAttempt: number;\n\t\t\ttoAttempt: number;\n\t\t\tmodel?: string;\n\t\t\tthinking?: string;\n\t\t\tat: number;\n\t }\n\t| { type: \"skip\"; taskId: string; failedDependency: string; at: number };\n\nexport interface SubagentDetails {\n\tmode: \"single\" | \"parallel\" | \"chain\";\n\tagentScope: AgentScope;\n\tprojectAgentsDir: string | null;\n\tresults: SubagentSingleResult[];\n\ttaskEvents?: SubagentTaskEvent[];\n}\n\n/** Compact child result emitted while a subagent is still running. */\nexport interface SubagentProgressResult {\n\tagent: string;\n\tagentSource: \"user\" | \"project\" | \"unknown\";\n\ttask: string;\n\ttaskId: string;\n\tparentTaskId?: string;\n\tdepth: number;\n\tthinking?: string;\n\tattempt?: number;\n\texitCode: number;\n\tusage: SubagentUsageStats;\n\tusageIncomplete?: boolean;\n\tmodel?: string;\n\tstopReason?: string;\n\terrorMessage?: string;\n\tstep?: number;\n\tisolation: SubagentIsolation;\n\tlatestText: string;\n}\n\n/** Compact details emitted for tool execution updates. Final results use SubagentDetails. */\nexport interface SubagentProgressDetails {\n\tmode: \"single\" | \"parallel\" | \"chain\";\n\tagentScope: AgentScope;\n\tprojectAgentsDir: string | null;\n\tresults: SubagentProgressResult[];\n\ttaskEvents?: SubagentTaskEvent[];\n}\n\nfunction truncateProgressText(text: string, keep: \"start\" | \"end\"): string {\n\tif (Buffer.byteLength(text, \"utf8\") <= PROGRESS_TEXT_CAP) return text;\n\n\tconst marker = \"…\";\n\tlet truncated =\n\t\tkeep === \"start\"\n\t\t\t? text.slice(0, PROGRESS_TEXT_CAP - marker.length)\n\t\t\t: text.slice(-PROGRESS_TEXT_CAP + marker.length);\n\twhile (Buffer.byteLength(truncated + marker, \"utf8\") > PROGRESS_TEXT_CAP) {\n\t\ttruncated = keep === \"start\" ? truncated.slice(0, -1) : truncated.slice(1);\n\t}\n\treturn keep === \"start\" ? truncated + marker : marker + truncated;\n}\n\n/** Convert full child results into bounded update payloads without their message histories. */\nexport function toProgressDetails(results: SubagentSingleResult[]): SubagentProgressResult[] {\n\treturn results.map((result) => ({\n\t\tagent: result.agent,\n\t\tagentSource: result.agentSource,\n\t\ttask: truncateProgressText(result.task, \"start\"),\n\t\ttaskId: result.taskId,\n\t\tparentTaskId: result.parentTaskId,\n\t\tdepth: result.depth,\n\t\tthinking: result.thinking,\n\t\tattempt: result.attempt,\n\t\texitCode: result.exitCode,\n\t\tusage: result.usage,\n\t\t...(result.usageIncomplete ? { usageIncomplete: true } : {}),\n\t\tmodel: result.model,\n\t\tstopReason: result.stopReason,\n\t\terrorMessage: result.errorMessage,\n\t\tstep: result.step,\n\t\tisolation: result.isolation,\n\t\tlatestText: truncateProgressText(getFinalOutput(result.messages), \"end\"),\n\t}));\n}\n\nexport function renderTaskWithContext(task: string, context?: TaskContext): string {\n\tconst parts = [`Task: ${task}`];\n\tif (context?.files?.length) parts.push(`Context files:\\n${context.files.map((f) => `- ${f}`).join(\"\\n\")}`);\n\tif (context?.acceptance?.length)\n\t\tparts.push(`Acceptance criteria:\\n${context.acceptance.map((a) => `- ${a}`).join(\"\\n\")}`);\n\tif (context?.baseRevision) parts.push(`Base revision: ${context.baseRevision}`);\n\treturn parts.join(\"\\n\\n\");\n}\n\nfunction getFinalOutput(messages: Message[]): string {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") return part.text;\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\";\n}\n\nfunction isFailedResult(result: Pick<SubagentProgressResult, \"errorMessage\" | \"exitCode\" | \"stopReason\">): boolean {\n\treturn (\n\t\tBoolean(result.errorMessage) ||\n\t\tresult.exitCode !== 0 ||\n\t\tresult.stopReason === \"error\" ||\n\t\tresult.stopReason === \"aborted\"\n\t);\n}\n\nfunction getResultOutput(result: SubagentSingleResult): string {\n\tif (isFailedResult(result)) {\n\t\treturn result.errorMessage || result.stderr || getFinalOutput(result.messages) || \"(no output)\";\n\t}\n\treturn getFinalOutput(result.messages) || \"(no output)\";\n}\n\nfunction truncateParallelOutput(output: string): string {\n\tconst byteLength = Buffer.byteLength(output, \"utf8\");\n\tif (byteLength <= PER_TASK_OUTPUT_CAP) return output;\n\n\tlet truncated = output.slice(0, PER_TASK_OUTPUT_CAP);\n\twhile (Buffer.byteLength(truncated, \"utf8\") > PER_TASK_OUTPUT_CAP) {\n\t\ttruncated = truncated.slice(0, -1);\n\t}\n\treturn `${truncated}\\n\\n[Output truncated: ${byteLength - Buffer.byteLength(truncated, \"utf8\")} bytes omitted. Full output preserved in tool details.]`;\n}\n\ntype DisplayItem = { type: \"text\"; text: string } | { type: \"toolCall\"; name: string; args: Record<string, any> };\n\nfunction getDisplayItems(messages: Message[]): DisplayItem[] {\n\tconst items: DisplayItem[] = [];\n\tfor (const msg of messages) {\n\t\tif (msg.role === \"assistant\") {\n\t\t\tfor (const part of msg.content) {\n\t\t\t\tif (part.type === \"text\") items.push({ type: \"text\", text: part.text });\n\t\t\t\telse if (part.type === \"toolCall\") items.push({ type: \"toolCall\", name: part.name, args: part.arguments });\n\t\t\t}\n\t\t}\n\t}\n\treturn items;\n}\n\ntype SubagentDisplayResult = SubagentSingleResult | SubagentProgressResult;\n\nfunction isProgressResult(result: SubagentDisplayResult): result is SubagentProgressResult {\n\treturn \"latestText\" in result;\n}\n\nfunction getResultDisplayItems(result: SubagentDisplayResult): DisplayItem[] {\n\tif (!isProgressResult(result)) return getDisplayItems(result.messages);\n\treturn result.latestText ? [{ type: \"text\", text: result.latestText }] : [];\n}\n\nfunction getResultFinalOutput(result: SubagentDisplayResult): string {\n\treturn isProgressResult(result) ? result.latestText : getFinalOutput(result.messages);\n}\n\n/** Env var Flow sets to the verified approved-inputs file; inherited by every nested child. */\nexport const FLOW_APPROVED_INPUTS_ENV = \"HUMAIN_FLOW_APPROVED_INPUTS_FILE\";\n\n/** Mirrors MAX_APPROVED_INPUT_BYTES in packages/flow/src/run-admission.ts; coding-agent must not import @humain/flow. */\nexport const MAX_FLOW_APPROVED_INPUT_BYTES = 256 * 1024;\n/** Mirrors APPROVED_INPUTS_HEADER in packages/flow/src/run-admission.ts (first line of approvedInputsBlock). */\nexport const FLOW_APPROVED_INPUTS_HEADER = \"## Approved inputs (mandatory)\";\n\n/**\n * Snapshot the Flow approved-inputs file named by the env var. Unset -> undefined. Set but anything fails\n * (absolute path, basename, no symlink, regular file, owner, mode 0600, size, header) -> throws, so a child\n * never launches without its mandatory inputs. Bytes are read once from the opened fd.\n */\nexport function readFlowApprovedInputs(env: NodeJS.ProcessEnv): string | undefined {\n\tconst file = env[FLOW_APPROVED_INPUTS_ENV];\n\tif (file === undefined) return undefined;\n\tconst refuse = (why: string): never => {\n\t\tthrow new Error(`Refusing to launch subagent: Flow approved inputs (${FLOW_APPROVED_INPUTS_ENV}) ${why}.`);\n\t};\n\tif (!path.isAbsolute(file) || path.basename(file) !== \"approved-inputs.md\")\n\t\treturn refuse(\"must be an absolute path to approved-inputs.md\");\n\tlet fd: number | undefined;\n\ttry {\n\t\tfd = fs.openSync(file, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);\n\t\tconst stat = fs.fstatSync(fd);\n\t\tif (!stat.isFile()) return refuse(\"is not a regular file\");\n\t\tif (process.getuid && (stat.uid !== process.getuid() || (stat.mode & 0o777) !== 0o600))\n\t\t\treturn refuse(\"must be owned by the current user with mode 0600\");\n\t\tif (stat.size > MAX_FLOW_APPROVED_INPUT_BYTES) return refuse(\"is too large\");\n\t\tconst buffer = Buffer.alloc(MAX_FLOW_APPROVED_INPUT_BYTES + 1);\n\t\tlet size = 0;\n\t\twhile (size <= MAX_FLOW_APPROVED_INPUT_BYTES) {\n\t\t\tconst n = fs.readSync(fd, buffer, size, MAX_FLOW_APPROVED_INPUT_BYTES + 1 - size, null);\n\t\t\tif (n === 0) break;\n\t\t\tsize += n;\n\t\t}\n\t\tif (size > MAX_FLOW_APPROVED_INPUT_BYTES) return refuse(\"is too large\");\n\t\tconst text = buffer.subarray(0, size).toString(\"utf-8\");\n\t\treturn text.startsWith(FLOW_APPROVED_INPUTS_HEADER) ? text : refuse(\"lacks the approved-inputs header\");\n\t} catch (error) {\n\t\tif (error instanceof Error && error.message.startsWith(\"Refusing to launch subagent\")) throw error;\n\t\treturn refuse(`cannot be read (${(error as NodeJS.ErrnoException).code ?? \"error\"})`);\n\t} finally {\n\t\tif (fd !== undefined) fs.closeSync(fd);\n\t}\n}\n\nasync function writePromptToTempFile(agentName: string, prompt: string): Promise<{ dir: string; filePath: string }> {\n\tconst tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"humain-subagent-\"));\n\tconst safeName = agentName.replace(/[^\\w.-]+/g, \"_\");\n\tconst filePath = path.join(tmpDir, `prompt-${safeName}.md`);\n\tawait withFileMutationQueue(filePath, async () => {\n\t\tawait fs.promises.writeFile(filePath, prompt, { encoding: \"utf-8\", mode: 0o600 });\n\t});\n\treturn { dir: tmpDir, filePath };\n}\n\nfunction getCliInvocation(args: string[]): { command: string; args: string[] } {\n\tconst currentScript = process.argv[1];\n\tconst isBunVirtualScript = currentScript?.startsWith(\"/$bunfs/root/\");\n\tif (currentScript && !isBunVirtualScript && fs.existsSync(currentScript)) {\n\t\treturn { command: process.execPath, args: [currentScript, ...args] };\n\t}\n\n\tconst execName = path.basename(process.execPath).toLowerCase();\n\tconst isGenericRuntime = /^(node|bun)(\\.exe)?$/.test(execName);\n\tif (!isGenericRuntime) {\n\t\treturn { command: process.execPath, args };\n\t}\n\n\treturn { command: resolveCliCommand(), args };\n}\n\ntype OnUpdateCallback = (partial: AgentToolResult<SubagentProgressDetails>) => void;\n\n/** Direct-worker facts for one attempt. Written by runSingleAgent, read by the caller once the attempt loop ends. */\ninterface AttemptEvidence {\n\t/** The worker observer was told the attempt started (immediately before spawn). */\n\tstarted: boolean;\n\t/** spawn() returned a process. */\n\tlaunched: boolean;\n\t/** `proc.kill(\"SIGTERM\")` from the abort path reported delivery. A false return is not delivery. */\n\tsigtermDelivered: boolean;\n\t/** `proc.kill(\"SIGKILL\")` from the escalation timer reported delivery. A false return is not delivery. */\n\tsigkillDelivered: boolean;\n\t/** The direct worker's close event arrived after at least one termination signal was delivered. */\n\tcloseAfterDelivery: boolean;\n\t/** The direct worker's close event arrived. */\n\tclosed: boolean;\n\tcloseCode: number | null;\n\tcloseSignal: string | null;\n\t/**\n\t * Outcome of a close that carried a numeric exit code before any termination signal was delivered;\n\t * null otherwise (including a signal close this code did not send, which is not attributable).\n\t */\n\tnaturalOutcome: \"completed\" | \"failed\" | null;\n\t/** An error before the OS created a child (no PID), not a failed signal or other post-spawn error. */\n\tspawnError: boolean;\n\t/** The worktree merge-back reported a conflict or threw, after the direct worker closed. */\n\tmergeFailed: boolean;\n\t/**\n\t * Failure kind of a natural (pre-kill) failed close, from the child's own stop reason. Recorded at close\n\t * because a later abort overwrites the result's stop reason.\n\t */\n\tnaturalFailureKind: SubagentFailureKind | null;\n}\n\nfunction newAttemptEvidence(): AttemptEvidence {\n\treturn {\n\t\tstarted: false,\n\t\tlaunched: false,\n\t\tsigtermDelivered: false,\n\t\tsigkillDelivered: false,\n\t\tcloseAfterDelivery: false,\n\t\tclosed: false,\n\t\tcloseCode: null,\n\t\tcloseSignal: null,\n\t\tnaturalOutcome: null,\n\t\tspawnError: false,\n\t\tmergeFailed: false,\n\t\tnaturalFailureKind: null,\n\t};\n}\n\ninterface ChildOptions {\n\ttaskId: string;\n\tthinking?: string;\n\tcontext?: TaskContext;\n\tattempt?: number;\n\t/** Lifecycle observer for this worker; absent when nothing observes the run. */\n\tobserver?: SubagentWorkerObserver;\n\t/** Out-object receiving this attempt's direct-worker evidence. */\n\tevidence?: AttemptEvidence;\n\t/** Trace bookkeeping for this task; absent when trace capture is off. */\n\ttraceChild?: SubagentTraceChild;\n\t/** Evidence sink of the owning session, resolved when the tool started. */\n\tfileEvidenceSink?: FileEvidenceSink;\n}\n\nasync function runSingleAgent(\n\tdefaultCwd: string,\n\tagents: AgentConfig[],\n\tagentDiagnostics: ResourceDiagnostic[],\n\tagentName: string,\n\ttask: string,\n\tcwd: string | undefined,\n\tisolation: SubagentIsolation | undefined,\n\tstep: number | undefined,\n\tmodel: string | undefined,\n\tparentModel: Model<Api>,\n\tsignal: AbortSignal | undefined,\n\tonUpdate: OnUpdateCallback | undefined,\n\tmakeProgressDetails: (results: SubagentProgressResult[]) => SubagentProgressDetails,\n\ttoolCallId: string,\n\tchildIndex: number,\n\toptions: ChildOptions,\n): Promise<SubagentSingleResult> {\n\tconst childDepth = currentSubagentDepth() + 1;\n\tconst parentTaskId = currentTaskId() ?? toolCallId;\n\tconst agent = agents.find((a) => a.name === agentName);\n\n\tif (!agent) {\n\t\tconst available = agents.map((a) => `\"${a.name}\"`).join(\", \") || \"none\";\n\t\tconst skippedNote =\n\t\t\tagentDiagnostics.length > 0\n\t\t\t\t? ` ${agentDiagnostics.length} agent file(s) failed to load and were skipped: ${agentDiagnostics\n\t\t\t\t\t\t.map((d) => `${d.path ?? \"(unknown path)\"} (${d.message})`)\n\t\t\t\t\t\t.join(\"; \")}.`\n\t\t\t\t: \"\";\n\t\treturn {\n\t\t\tagent: agentName,\n\t\t\tagentSource: \"unknown\",\n\t\t\ttask,\n\t\t\ttaskId: options.taskId,\n\t\t\tparentTaskId,\n\t\t\tdepth: childDepth,\n\t\t\texitCode: 1,\n\t\t\tmessages: [],\n\t\t\tstderr: `Unknown agent: \"${agentName}\". Available agents: ${available}.${skippedNote}`,\n\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\tstep,\n\t\t\tisolation: \"shared\",\n\t\t\tthinking: options.thinking,\n\t\t\tattempt: options.attempt,\n\t\t\tbaseRevision: options.context?.baseRevision,\n\t\t};\n\t}\n\tlet worktree: SubagentWorktree | null = null;\n\tlet isolationDegradedReason: \"not-a-git-repo\" | undefined;\n\tconst parentCwd = cwd ?? defaultCwd;\n\tlet childCwd = parentCwd;\n\tconst args: string[] = [\"--mode\", \"json\", \"-p\", \"--no-session\"];\n\tif (model) {\n\t\t// Canonical \"provider/modelId\" handle: split on the FIRST slash so\n\t\t// provider-prefixed ids (e.g. \"bedrock/global.anthropic....\") pass\n\t\t// through `--provider`/`--model` instead of being fuzzy-matched as one\n\t\t// string (see model-resolver.ts resolveCliModel).\n\t\tconst slashIndex = model.indexOf(\"/\");\n\t\tif (slashIndex !== -1) {\n\t\t\targs.push(\"--provider\", model.slice(0, slashIndex), \"--model\", model.slice(slashIndex + 1));\n\t\t} else {\n\t\t\targs.push(\"--model\", model);\n\t\t}\n\t} else {\n\t\targs.push(\"--provider\", parentModel.provider, \"--model\", parentModel.id);\n\t}\n\tif (agent.tools && agent.tools.length > 0) args.push(\"--tools\", agent.tools.join(\",\"));\n\tif (options.thinking) args.push(\"--thinking\", options.thinking);\n\n\tlet tmpPromptDir: string | null = null;\n\tlet tmpPromptPath: string | null = null;\n\tlet tmpInputsDir: string | null = null;\n\tlet tmpInputsPath: string | null = null;\n\n\tconst currentResult: SubagentSingleResult = {\n\t\tagent: agentName,\n\t\tagentSource: agent.source,\n\t\ttask,\n\t\ttaskId: options.taskId,\n\t\tparentTaskId,\n\t\tdepth: childDepth,\n\t\tthinking: options.thinking,\n\t\tattempt: options.attempt,\n\t\texitCode: 0,\n\t\tmessages: [],\n\t\tstderr: \"\",\n\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\tmodel: model ?? `${parentModel.provider}/${parentModel.id}`,\n\t\tstep,\n\t\tisolation: \"shared\",\n\t\tbaseRevision: options.context?.baseRevision,\n\t};\n\n\tconst emitUpdate = () => {\n\t\tif (onUpdate) {\n\t\t\tconst progressResults = toProgressDetails([currentResult]);\n\t\t\tonUpdate({\n\t\t\t\tcontent: [{ type: \"text\", text: progressResults[0].latestText || \"(running...)\" }],\n\t\t\t\tdetails: makeProgressDetails(progressResults),\n\t\t\t});\n\t\t}\n\t};\n\n\tconst evidence = options.evidence;\n\tlet wasAborted = false;\n\ttry {\n\t\tif (isolation === \"worktree\") {\n\t\t\tif (await isGitWorkTree(parentCwd)) {\n\t\t\t\tworktree = await createSubagentWorktree({ parentCwd, label: `${toolCallId}-${childIndex}` });\n\t\t\t\tchildCwd = worktree.cwd;\n\t\t\t\tcurrentResult.isolation = \"worktree\";\n\t\t\t} else {\n\t\t\t\tisolationDegradedReason = \"not-a-git-repo\";\n\t\t\t}\n\t\t}\n\t\tif (isolationDegradedReason) currentResult.isolationDegradedReason = isolationDegradedReason;\n\t\tif (signal?.aborted) throw new Error(\"Subagent was aborted\");\n\t\t// Snapshot into a subagent-owned temp file; the env path itself is never passed on the command line.\n\t\tconst approvedInputs = readFlowApprovedInputs(process.env);\n\t\tif (approvedInputs !== undefined) {\n\t\t\tconst tmp = await writePromptToTempFile(\"flow-approved-inputs\", approvedInputs);\n\t\t\ttmpInputsDir = tmp.dir;\n\t\t\ttmpInputsPath = tmp.filePath;\n\t\t\targs.push(\"--append-system-prompt\", tmpInputsPath);\n\t\t}\n\t\tif (agent.systemPrompt.trim()) {\n\t\t\tconst tmp = await writePromptToTempFile(agent.name, agent.systemPrompt);\n\t\t\ttmpPromptDir = tmp.dir;\n\t\t\ttmpPromptPath = tmp.filePath;\n\t\t\targs.push(\"--append-system-prompt\", tmpPromptPath);\n\t\t}\n\n\t\targs.push(renderTaskWithContext(task, options.context));\n\n\t\tconst invocation = getCliInvocation(args);\n\t\tconst env: NodeJS.ProcessEnv = {\n\t\t\t...process.env,\n\t\t\t[SUBAGENT_DEPTH_ENV]: String(childDepth),\n\t\t\t[TASK_ID_ENV]: options.taskId,\n\t\t\t[PARENT_TASK_ID_ENV]: parentTaskId,\n\t\t};\n\t\tif (options.context?.baseRevision) env[TASK_BASE_REVISION_ENV] = options.context.baseRevision;\n\t\telse delete env[TASK_BASE_REVISION_ENV];\n\t\t// Ingest credentials never reach a child, whether or not tracing is active here.\n\t\tdelete env[TRACE_ENV.ingestToken];\n\t\tdelete env[TRACE_ENV.ingestUrl];\n\t\tconst traceEnv = options.traceChild?.beginAttempt(options.attempt ?? 1);\n\t\tif (traceEnv) {\n\t\t\tObject.assign(env, traceEnv.set);\n\t\t\tfor (const key of traceEnv.unset) delete env[key];\n\t\t}\n\t\tconst launchHandle = await options.traceChild?.prepareLaunch?.(`${options.taskId}-${options.attempt ?? 1}`);\n\t\tconst launched = await launchHandle?.launch({\n\t\t\t...invocation,\n\t\t\tcwd: childCwd,\n\t\t\tenv,\n\t\t\tstdout: \"pipe\",\n\t\t\tstderr: \"pipe\",\n\t\t});\n\t\tconst exitCode = await new Promise<number>((resolve) => {\n\t\t\tif (evidence) evidence.started = true;\n\t\t\ttry {\n\t\t\t\toptions.observer?.start(options.attempt ?? 1, { model: currentResult.model });\n\t\t\t} catch {\n\t\t\t\t/* observation never affects execution */\n\t\t\t}\n\t\t\tconst proc =\n\t\t\t\tlaunched?.process ??\n\t\t\t\tspawn(invocation.command, invocation.args, {\n\t\t\t\t\tcwd: childCwd,\n\t\t\t\t\tshell: false,\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\t\tenv,\n\t\t\t\t});\n\t\t\tif (evidence) evidence.launched = true;\n\t\t\tlet buffer = \"\";\n\t\t\tlet discardingLine = false;\n\t\t\tlet settled = false;\n\t\t\t// Activity source: the child's JSON event stream. One assistant `message_end` is one turn (the same\n\t\t\t// count as usage.turns) and one `tool_execution_start` is one tool call. Counts are per attempt.\n\t\t\tlet toolCalls = 0;\n\t\t\tconst reportActivity = () => {\n\t\t\t\ttry {\n\t\t\t\t\toptions.observer?.activity(currentResult.usage.turns, toolCalls);\n\t\t\t\t} catch {\n\t\t\t\t\t/* observation never affects execution */\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst addUsage = (usage: Partial<Usage> | undefined) => {\n\t\t\t\tfor (const key of [\"input\", \"output\", \"cacheRead\", \"cacheWrite\"] as const) {\n\t\t\t\t\tconst count = usage?.[key];\n\t\t\t\t\tif (typeof count === \"number\" && Number.isSafeInteger(count) && count >= 0)\n\t\t\t\t\t\tcurrentResult.usage[key] += count;\n\t\t\t\t\telse currentResult.usageIncomplete = true;\n\t\t\t\t}\n\t\t\t\tcurrentResult.usage.cost += usage?.cost?.total || 0;\n\t\t\t};\n\n\t\t\tconst processLine = (line: string) => {\n\t\t\t\tif (!line.trim()) return;\n\t\t\t\tlet event: { type?: string; message?: Message; result?: { usage?: Partial<Usage> } };\n\t\t\t\ttry {\n\t\t\t\t\tevent = JSON.parse(line);\n\t\t\t\t} catch {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!event || typeof event !== \"object\") return;\n\t\t\t\tif (event.type === \"compaction_end\" && event.result?.usage) {\n\t\t\t\t\taddUsage(event.result.usage);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"message_end\" && event.message) {\n\t\t\t\t\tconst msg = event.message as Message;\n\t\t\t\t\tcurrentResult.messages.push(msg);\n\n\t\t\t\t\tif (msg.role === \"assistant\") {\n\t\t\t\t\t\tcurrentResult.usage.turns++;\n\t\t\t\t\t\taddUsage(msg.usage);\n\t\t\t\t\t\tif (msg.usage) currentResult.usage.contextTokens = msg.usage.totalTokens || 0;\n\t\t\t\t\t\tif (msg.model) currentResult.model = msg.responseModel ?? msg.model;\n\t\t\t\t\t\tif (msg.stopReason) currentResult.stopReason = msg.stopReason;\n\t\t\t\t\t\tcurrentResult.errorMessage = msg.errorMessage;\n\t\t\t\t\t\treportActivity();\n\t\t\t\t\t}\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\n\t\t\t\t// Counted without emitting: the new count rides along with the next update that is sent anyway.\n\t\t\t\tif (event.type === \"tool_execution_start\") {\n\t\t\t\t\ttoolCalls++;\n\t\t\t\t\treportActivity();\n\t\t\t\t}\n\n\t\t\t\tif (event.type === \"tool_result_end\" && event.message) {\n\t\t\t\t\tcurrentResult.messages.push(event.message as Message);\n\t\t\t\t\temitUpdate();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tproc.stdout!.on(\"data\", (data) => {\n\t\t\t\tlet chunk: string = data.toString();\n\t\t\t\twhile (chunk.length > 0) {\n\t\t\t\t\tconst newline = chunk.indexOf(\"\\n\");\n\t\t\t\t\tconst piece = newline === -1 ? chunk : chunk.slice(0, newline);\n\t\t\t\t\tchunk = newline === -1 ? \"\" : chunk.slice(newline + 1);\n\t\t\t\t\tif (!discardingLine) {\n\t\t\t\t\t\tif (buffer.length + piece.length > STDOUT_LINE_MAX_CHARS) {\n\t\t\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\t\t\tdiscardingLine = true;\n\t\t\t\t\t\t\tcurrentResult.stdoutTruncated = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbuffer += piece;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (newline === -1) continue;\n\t\t\t\t\tif (discardingLine) {\n\t\t\t\t\t\tdiscardingLine = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst line = buffer;\n\t\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\t\tprocessLine(line);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tproc.stderr!.on(\"data\", (data) => {\n\t\t\t\tconst combined = currentResult.stderr + data.toString();\n\t\t\t\tif (combined.length > STDERR_RETENTION_CHARS) {\n\t\t\t\t\tcurrentResult.stderr = combined.slice(-STDERR_RETENTION_CHARS);\n\t\t\t\t\tcurrentResult.stderrTruncated = true;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentResult.stderr = combined;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet abortListener: (() => void) | undefined;\n\t\t\tlet killTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t\tconst cleanupAbort = () => {\n\t\t\t\tif (signal && abortListener) signal.removeEventListener(\"abort\", abortListener);\n\t\t\t\tif (killTimer) clearTimeout(killTimer);\n\t\t\t};\n\n\t\t\tproc.on(\"close\", (code, closeSignal) => {\n\t\t\t\t// First settlement owns observation evidence. Late close/error events must not rewrite\n\t\t\t\t// attribution; the existing execution handlers still process/resolve as before.\n\t\t\t\tconst firstSettlement = !settled;\n\t\t\t\tif (evidence && firstSettlement) {\n\t\t\t\t\tevidence.closed = true;\n\t\t\t\t\tevidence.closeCode = typeof code === \"number\" ? code : null;\n\t\t\t\t\tevidence.closeSignal = closeSignal ?? null;\n\t\t\t\t\tevidence.closeAfterDelivery = evidence.sigtermDelivered || evidence.sigkillDelivered;\n\t\t\t\t}\n\t\t\t\tsettled = true;\n\t\t\t\tcleanupAbort();\n\t\t\t\tif (buffer.trim()) processLine(buffer);\n\t\t\t\t// Recorded before runSingleAgent overwrites an abort-raced result as aborted. An attempted\n\t\t\t\t// kill that was not delivered does not make the close any less natural. A null code means\n\t\t\t\t// signal termination we did not deliver (external SIGINT, OOM SIGKILL): no reliable outcome.\n\t\t\t\tif (evidence && firstSettlement && !evidence.closeAfterDelivery && code !== null) {\n\t\t\t\t\tevidence.naturalOutcome = code === 0 && !isFailedResult(currentResult) ? \"completed\" : \"failed\";\n\t\t\t\t\tif (evidence.naturalOutcome === \"failed\") {\n\t\t\t\t\t\tevidence.naturalFailureKind = currentResult.stopReason === \"error\" ? \"model_error\" : \"process_error\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresolve(code ?? 0);\n\t\t\t});\n\n\t\t\tproc.on(\"error\", () => {\n\t\t\t\t// Node exposes the PID before 'spawn' and retains it after exit. A failed kill can emit\n\t\t\t\t// 'error' synchronously without ending that process, so only no-PID errors prove spawn failure.\n\t\t\t\tif (evidence && !settled) evidence.spawnError = proc.pid === undefined;\n\t\t\t\tsettled = true;\n\t\t\t\tcleanupAbort();\n\t\t\t\tresolve(1);\n\t\t\t});\n\n\t\t\tif (signal) {\n\t\t\t\tconst killProc = () => {\n\t\t\t\t\tif (settled) return;\n\t\t\t\t\twasAborted = true;\n\t\t\t\t\tkillTimer = setTimeout(() => {\n\t\t\t\t\t\tif (!settled) {\n\t\t\t\t\t\t\tconst delivered = proc.kill(\"SIGKILL\") === true;\n\t\t\t\t\t\t\tif (evidence && delivered) evidence.sigkillDelivered = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 5000);\n\t\t\t\t\tkillTimer.unref?.();\n\t\t\t\t\tconst delivered = proc.kill(\"SIGTERM\") === true;\n\t\t\t\t\tif (evidence && delivered) evidence.sigtermDelivered = true;\n\t\t\t\t};\n\t\t\t\tabortListener = killProc;\n\t\t\t\tif (signal.aborted) killProc();\n\t\t\t\telse signal.addEventListener(\"abort\", killProc, { once: true });\n\t\t\t}\n\t\t});\n\n\t\tcurrentResult.exitCode = exitCode;\n\t\tif (wasAborted || signal?.aborted) {\n\t\t\tcurrentResult.exitCode = 1;\n\t\t\tcurrentResult.stopReason = \"aborted\";\n\t\t\tcurrentResult.errorMessage = \"Subagent was aborted\";\n\t\t}\n\t} catch (error) {\n\t\tcurrentResult.exitCode = 1;\n\t\tcurrentResult.errorMessage = error instanceof Error ? error.message : String(error);\n\t\tif (wasAborted || signal?.aborted) currentResult.stopReason = \"aborted\";\n\t} finally {\n\t\tif (worktree) {\n\t\t\t// Retain base/end revisions and the bounded diff before merge/disposal, whatever the outcome.\n\t\t\t// The outcome is reported after the merge, so a conflict or merge error is recorded as failed.\n\t\t\tconst sink = options.fileEvidenceSink;\n\t\t\tlet observed: Awaited<ReturnType<typeof worktree.captureEvidence>> | undefined;\n\t\t\tif (sink?.onWorktreeEvidence) {\n\t\t\t\ttry {\n\t\t\t\t\tobserved = await worktree.captureEvidence();\n\t\t\t\t} catch {\n\t\t\t\t\t/* observation failure never changes the subagent outcome */\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (isFailedResult(currentResult) || signal?.aborted) {\n\t\t\t\t\tcurrentResult.mergeOutcome = \"skipped\";\n\t\t\t\t} else {\n\t\t\t\t\tconst merged = await worktree.mergeBack();\n\t\t\t\t\tcurrentResult.mergeOutcome = merged.outcome;\n\t\t\t\t\tcurrentResult.changedFiles = merged.changedFiles;\n\t\t\t\t\tif (merged.patchPath) currentResult.patchPath = merged.patchPath;\n\t\t\t\t\tif (merged.outcome === \"conflict\") {\n\t\t\t\t\t\tif (evidence) evidence.mergeFailed = true;\n\t\t\t\t\t\tcurrentResult.errorMessage = `subagent merge conflict: ${merged.changedFiles.join(\", \")} could not be applied to the parent workspace; patch kept at ${merged.patchPath}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (evidence) evidence.mergeFailed = true;\n\t\t\t\tcurrentResult.exitCode = 1;\n\t\t\t\tcurrentResult.mergeOutcome = \"skipped\";\n\t\t\t\tcurrentResult.errorMessage = `subagent merge failed: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t} finally {\n\t\t\t\tif (observed && sink?.onWorktreeEvidence) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait sink.onWorktreeEvidence({\n\t\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\t...observed,\n\t\t\t\t\t\t\toutcome: signal?.aborted ? \"cancelled\" : isFailedResult(currentResult) ? \"failed\" : \"succeeded\",\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* observation failure never changes the subagent outcome */\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait worktree.dispose();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcurrentResult.exitCode = 1;\n\t\t\t\t\tconst cleanupError = `subagent worktree cleanup failed: ${error instanceof Error ? error.message : String(error)}`;\n\t\t\t\t\tconst primaryOutput = getResultOutput(currentResult);\n\t\t\t\t\tcurrentResult.errorMessage =\n\t\t\t\t\t\tprimaryOutput === \"(no output)\" ? cleanupError : `${primaryOutput}\\n${cleanupError}`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (tmpPromptPath)\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpPromptPath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\tif (tmpPromptDir)\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(tmpPromptDir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\tif (tmpInputsPath)\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpInputsPath);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t\tif (tmpInputsDir)\n\t\t\ttry {\n\t\t\t\tfs.rmdirSync(tmpInputsDir);\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\t}\n\toptions.traceChild?.finishAttempt(currentResult, isFailedResult(currentResult));\n\treturn currentResult;\n}\n\nconst ThinkingLevelSchema = StringEnum([\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"] as const, {\n\tdescription:\n\t\t\"Reasoning effort for this child. Maps to the CLI --thinking level. Defaults to the child's own default.\",\n});\n\n/** Bounded context handed to a child. Strings are rendered verbatim into the child's task text; callers must not pass untrusted multi-line content. */\nexport interface TaskContext {\n\tfiles?: string[];\n\tacceptance?: string[];\n\tbaseRevision?: string;\n}\n\nconst TaskItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task to delegate to the agent\" }),\n\tid: Type.Optional(\n\t\tType.String({ description: \"Stable task id. Defaults to <toolCallId>-<index>. Referenced by dependsOn.\" }),\n\t),\n\tthinking: Type.Optional(ThinkingLevelSchema),\n\tmodel: Type.Optional(\n\t\tType.String({\n\t\t\tdescription: \"Optional canonical provider/model for this child. Defaults to the parent provider/model.\",\n\t\t}),\n\t),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n\tisolation: Type.Optional(\n\t\tStringEnum([\"shared\", \"worktree\"] as const, {\n\t\t\tdescription:\n\t\t\t\t\"Filesystem isolation for this child. 'worktree' runs it in a disposable git worktree and merges its changes back; the caller's policy sets this, not the model.\",\n\t\t}),\n\t),\n\tdependsOn: Type.Optional(\n\t\tType.Array(Type.String(), {\n\t\t\tdescription: \"Ids of sibling tasks that must complete successfully before this one starts.\",\n\t\t}),\n\t),\n\townerPaths: Type.Optional(\n\t\tType.Array(Type.String(), {\n\t\t\tdescription:\n\t\t\t\t\"Repo-relative paths this task owns. Siblings whose ownerPaths overlap run one after another instead of in parallel.\",\n\t\t}),\n\t),\n\tonFailure: Type.Optional(\n\t\tType.Object(\n\t\t\t{\n\t\t\t\tretryWith: Type.Optional(\n\t\t\t\t\tType.Object({\n\t\t\t\t\t\tmodel: Type.Optional(Type.String({ description: \"Canonical provider/model for the retry.\" })),\n\t\t\t\t\t\tthinking: Type.Optional(ThinkingLevelSchema),\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t\tmaxAttempts: Type.Optional(\n\t\t\t\t\tType.Integer({ minimum: 1, maximum: 3, description: \"Total attempts including the first. Default 1.\" }),\n\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t\"Retry only this task on failure with a different model or thinking level. The caller's policy sets this.\",\n\t\t\t},\n\t\t),\n\t),\n\tcontext: Type.Optional(\n\t\tType.Object(\n\t\t\t{\n\t\t\t\tfiles: Type.Optional(Type.Array(Type.String(), { description: \"Files the child should read first.\" })),\n\t\t\t\tacceptance: Type.Optional(\n\t\t\t\t\tType.Array(Type.String(), { description: \"Acceptance criteria the child must satisfy.\" }),\n\t\t\t\t),\n\t\t\t\tbaseRevision: Type.Optional(Type.String({ description: \"Git revision the packet was assembled against.\" })),\n\t\t\t},\n\t\t\t{ description: \"Bounded context packet for this child.\" },\n\t\t),\n\t),\n});\n\nconst ChainItem = Type.Object({\n\tagent: Type.String({ description: \"Name of the agent to invoke\" }),\n\ttask: Type.String({ description: \"Task with optional {previous} placeholder for prior output\" }),\n\tmodel: Type.Optional(\n\t\tType.String({\n\t\t\tdescription: \"Optional canonical provider/model for this child. Defaults to the parent provider/model.\",\n\t\t}),\n\t),\n\tthinking: Type.Optional(ThinkingLevelSchema),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process\" })),\n});\n\nconst AgentScopeSchema = StringEnum([\"user\", \"project\", \"both\"] as const, {\n\tdescription: 'Which agent directories to use. Default: \"user\". Use \"both\" to include project-local agents.',\n\tdefault: \"user\",\n});\n\nconst SubagentParams = Type.Object({\n\tagent: Type.Optional(Type.String({ description: \"Name of the agent to invoke (for single mode)\" })),\n\ttask: Type.Optional(Type.String({ description: \"Task to delegate (for single mode)\" })),\n\tmodel: Type.Optional(\n\t\tType.String({\n\t\t\tdescription: \"Optional canonical provider/model for this child. Defaults to the parent provider/model.\",\n\t\t}),\n\t),\n\tthinking: Type.Optional(ThinkingLevelSchema),\n\ttasks: Type.Optional(Type.Array(TaskItem, { description: \"Array of {agent, task} for parallel execution\" })),\n\tchain: Type.Optional(Type.Array(ChainItem, { description: \"Array of {agent, task} for sequential execution\" })),\n\tagentScope: Type.Optional(AgentScopeSchema),\n\tconfirmProjectAgents: Type.Optional(\n\t\tType.Boolean({ description: \"Prompt before running project-local agents. Default: true.\", default: true }),\n\t),\n\tcwd: Type.Optional(Type.String({ description: \"Working directory for the agent process (single mode)\" })),\n\tisolation: Type.Optional(\n\t\tStringEnum([\"shared\", \"worktree\"] as const, {\n\t\t\tdescription:\n\t\t\t\t\"Filesystem isolation for this child. 'worktree' runs it in a disposable git worktree and merges its changes back; the caller's policy sets this, not the model.\",\n\t\t}),\n\t),\n});\n\nconst PREVIEW_SOURCE_CAP = 1024;\nconst PREVIEW_SCAN_WINDOW = 4096;\n\n/**\n * First line containing a non-whitespace character within the first `PREVIEW_SCAN_WINDOW` code units of `text`,\n * cut to `PREVIEW_SOURCE_CAP`; only that bounded prefix is ever split or scanned. The registry sanitizes and\n * truncates the result to the contract maximum. Used only for the worker's own final assistant output.\n */\nfunction firstNonEmptyLine(text: string | undefined): string | undefined {\n\tif (!text) return undefined;\n\tfor (const line of text.slice(0, PREVIEW_SCAN_WINDOW).split(/\\r\\n|[\\n\\r\\u2028\\u2029]/)) {\n\t\tconst trimmed = line.trimStart();\n\t\tif (trimmed) return trimmed.slice(0, PREVIEW_SOURCE_CAP);\n\t}\n\treturn undefined;\n}\n\n/**\n * Failure kind and preview for a failed worker. Spawn error -> spawn_failed; worktree merge conflict or\n * failure -> merge_failed; stopReason \"error\" -> model_error; any other failed close -> process_error.\n * Previews are fixed strings only (\"Model request failed\", \"Worktree merge conflict\", \"Worktree merge failed\",\n * \"Exited with code N\"). Child error messages, stderr, worktree and patch paths never reach a preview: provider\n * errors can carry credentials, paths or response bodies. The only other preview source is the worker's own final\n * assistant output on completion (see `settleWorkerOutcome`).\n */\nfunction failureOf(\n\tresult: SubagentSingleResult,\n\tevidence: AttemptEvidence,\n): { kind: SubagentFailureKind; preview: string | undefined } {\n\tif (evidence.spawnError) return { kind: \"spawn_failed\", preview: undefined };\n\tif (evidence.mergeFailed) {\n\t\treturn {\n\t\t\tkind: \"merge_failed\",\n\t\t\tpreview: result.mergeOutcome === \"conflict\" ? \"Worktree merge conflict\" : \"Worktree merge failed\",\n\t\t};\n\t}\n\tconst kind = evidence.naturalFailureKind ?? (result.stopReason === \"error\" ? \"model_error\" : \"process_error\");\n\tif (kind === \"model_error\") return { kind, preview: \"Model request failed\" };\n\tconst code = evidence.closeCode;\n\treturn { kind, preview: code !== null && code !== 0 ? `Exited with code ${code}` : undefined };\n}\n\n/** Exit status of a Node child that trapped SIGTERM and exited through its own handler (print-mode.ts). */\nconst TRAPPED_SIGTERM_EXIT_CODE = 143;\n\n/**\n * Settles one worker's observation from the last attempt's direct-worker evidence.\n * Intermediate retry failures are never reported; the worker stays running until the attempt loop ends.\n * Observation only: errors are swallowed and no claim is made about descendants.\n */\nfunction settleWorkerOutcome(\n\tworker: SubagentWorkerObserver,\n\tresult: SubagentSingleResult,\n\tevidence: AttemptEvidence,\n\teverStarted: boolean,\n\taborted: boolean,\n): void {\n\tif (!worker.enabled) return;\n\ttry {\n\t\t// A launched worker that closed without a numeric exit code and without a signal matching one we\n\t\t// delivered has neither a reliable attribution nor a reliable outcome: leave it for settle\n\t\t// (unresolved). This precedes the non-failed-result shortcut, since the result of such a close\n\t\t// is a success result (`resolve(code ?? 0)`) that says nothing about how the worker ended.\n\t\tif (\n\t\t\tevidence.launched &&\n\t\t\t!evidence.spawnError &&\n\t\t\tevidence.closed &&\n\t\t\tevidence.closeCode === null &&\n\t\t\t!(\n\t\t\t\t(evidence.closeSignal === \"SIGTERM\" && evidence.sigtermDelivered) ||\n\t\t\t\t(evidence.closeSignal === \"SIGKILL\" && evidence.sigkillDelivered)\n\t\t\t)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst completeWorker = () => worker.complete(firstNonEmptyLine(getFinalOutput(result.messages)));\n\t\tif (!isFailedResult(result)) {\n\t\t\tcompleteWorker();\n\t\t\treturn;\n\t\t}\n\t\tconst failWorker = () => {\n\t\t\tconst failure = failureOf(result, evidence);\n\t\t\tworker.fail(failure.kind, failure.preview);\n\t\t};\n\t\tif (evidence.launched) {\n\t\t\tif (evidence.sigtermDelivered || evidence.sigkillDelivered) {\n\t\t\t\t// Attributable only when the direct worker closed after a delivered kill, and either died from the\n\t\t\t\t// very signal we delivered, or (F-5) trapped our delivered SIGTERM and exited with its handler's\n\t\t\t\t// code 143 instead of dying by signal (real json/print-mode children do). Any other code after a\n\t\t\t\t// delivered kill is left for settle (unresolved/unconfirmed).\n\t\t\t\t// Evidence level (F-5, accepted): the child CLI exits 143 only from its own SIGTERM handler, and\n\t\t\t\t// requiring a delivered SIGTERM followed by a close is the same evidence as the signal-death close\n\t\t\t\t// above. Neither proves exclusive causation: a concurrent external SIGTERM to the same child is\n\t\t\t\t// indistinguishable from ours. The claim is limited to the direct worker, never descendants.\n\t\t\t\tif (\n\t\t\t\t\tevidence.closeAfterDelivery &&\n\t\t\t\t\t((evidence.closeSignal === \"SIGTERM\" && evidence.sigtermDelivered) ||\n\t\t\t\t\t\t(evidence.closeSignal === \"SIGKILL\" && evidence.sigkillDelivered) ||\n\t\t\t\t\t\t(evidence.closeSignal === null &&\n\t\t\t\t\t\t\tevidence.closeCode === TRAPPED_SIGTERM_EXIT_CODE &&\n\t\t\t\t\t\t\tevidence.sigtermDelivered))\n\t\t\t\t) {\n\t\t\t\t\tworker.terminatedByCancellation();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (evidence.spawnError) {\n\t\t\t\tfailWorker();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// No kill was delivered. The result is failed here; if the close was natural but a later\n\t\t\t// abort (or an undelivered kill attempt) overwrote the result, the recorded natural outcome\n\t\t\t// is authoritative.\n\t\t\tif (evidence.naturalOutcome !== null) {\n\t\t\t\tif (aborted && evidence.naturalOutcome === \"completed\") completeWorker();\n\t\t\t\telse failWorker();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (aborted) {\n\t\t\tif (!everStarted) worker.cancelledBeforeStart();\n\t\t\treturn;\n\t\t}\n\t\tworker.spawnFailed(false);\n\t} catch {\n\t\t/* observation never affects execution */\n\t}\n}\n\n/** Wraps an observer so no method can throw into execution. */\nfunction guardWorkerObserver(worker: SubagentWorkerObserver): SubagentWorkerObserver {\n\tif (!worker.enabled) return worker;\n\tconst guard =\n\t\t<A extends unknown[]>(method: (...args: A) => void) =>\n\t\t(...args: A): void => {\n\t\t\ttry {\n\t\t\t\tmethod.apply(worker, args);\n\t\t\t} catch {\n\t\t\t\t/* observation never affects execution */\n\t\t\t}\n\t\t};\n\treturn {\n\t\tenabled: true,\n\t\twait: guard(worker.wait),\n\t\tstart: guard(worker.start),\n\t\tactivity: guard(worker.activity),\n\t\tspawnFailed: guard(worker.spawnFailed),\n\t\tskip: guard(worker.skip),\n\t\tcomplete: guard(worker.complete),\n\t\tfail: guard(worker.fail),\n\t\trequestCancel: guard(worker.requestCancel),\n\t\tcancelledBeforeStart: guard(worker.cancelledBeforeStart),\n\t\tterminatedByCancellation: guard(worker.terminatedByCancellation),\n\t};\n}\n\n/**\n * Per-invocation lifecycle observation. Inert without a capability. Holds at most one observer per\n * admitted worker slot (bounded by SUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN); never throws into execution.\n */\nclass SubagentObservation {\n\tprivate readonly capability: SubagentProgressCapability | undefined;\n\tprivate readonly signal: AbortSignal | undefined;\n\tprivate run: SubagentRunObserver | undefined;\n\tprivate readonly workers: SubagentWorkerObserver[] = [];\n\tprivate abortListener: (() => void) | undefined;\n\tprivate settled = false;\n\n\tconstructor(capability: SubagentProgressCapability | undefined, signal: AbortSignal | undefined) {\n\t\tthis.capability = capability;\n\t\tthis.signal = signal;\n\t}\n\n\t/** Admits the run and returns the onUpdate callback to use from here on. */\n\tadmit(\n\t\tonUpdate: OnUpdateCallback | undefined,\n\t\tmeta: { toolCallId: string; mode: SubagentRunMode },\n\t): OnUpdateCallback | undefined {\n\t\tif (!this.capability) return onUpdate;\n\t\ttry {\n\t\t\tconst run = this.capability.admitRun(meta);\n\t\t\tif (!run.enabled) return onUpdate;\n\t\t\tthis.run = run;\n\t\t\tconst signal = this.signal;\n\t\t\tif (signal) {\n\t\t\t\t// Registered before any worker launches, so it runs ahead of runSingleAgent's kill listener.\n\t\t\t\tconst listener = () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trun.requestCancel();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* observation never affects execution */\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.abortListener = listener;\n\t\t\t\tsignal.addEventListener(\"abort\", listener, { once: true });\n\t\t\t\tif (signal.aborted) listener();\n\t\t\t}\n\t\t} catch {\n\t\t\treturn onUpdate;\n\t\t}\n\t\tif (!onUpdate) return onUpdate;\n\t\treturn (partial) => {\n\t\t\ttry {\n\t\t\t\tattachSubagentProgress(partial, this.run?.snapshot());\n\t\t\t} catch {\n\t\t\t\t/* observation never affects execution */\n\t\t\t}\n\t\t\tonUpdate(partial);\n\t\t};\n\t}\n\n\t/** Admits the next worker in scheduling order; only the first slots keep an observer. */\n\tadmitWorker(meta: SubagentWorkerMeta): SubagentWorkerObserver {\n\t\tconst run = this.run;\n\t\tif (!run) return DISABLED_SUBAGENT_WORKER_OBSERVER;\n\t\tlet worker = DISABLED_SUBAGENT_WORKER_OBSERVER;\n\t\ttry {\n\t\t\tworker = run.admitWorker(meta);\n\t\t} catch {\n\t\t\t/* observation never affects execution */\n\t\t}\n\t\tworker = guardWorkerObserver(worker);\n\t\tif (this.workers.length < SUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN) this.workers.push(worker);\n\t\treturn worker;\n\t}\n\n\t/** The observer admitted at scheduling position `index`, or a disabled one. */\n\tworkerAt(index: number): SubagentWorkerObserver {\n\t\treturn this.workers[index] ?? DISABLED_SUBAGENT_WORKER_OBSERVER;\n\t}\n\n\t/** Marks every admitted worker from `start` onward as skipped. */\n\tskipWorkersFrom(start: number): void {\n\t\tfor (let i = start; i < this.workers.length; i++) this.workers[i].skip();\n\t}\n\n\t/** Marks every admitted worker from `start` onward as cancelled before it ever started. */\n\tcancelWorkersFromBeforeStart(start: number): void {\n\t\tfor (let i = start; i < this.workers.length; i++) this.workers[i].cancelledBeforeStart();\n\t}\n\n\t/**\n\t * Settles the run exactly once and attaches the final snapshot to `result`.\n\t */\n\tsettle<T extends object>(result?: T): T | undefined {\n\t\tconst run = this.run;\n\t\tif (!run || this.settled) return result;\n\t\tthis.settled = true;\n\t\ttry {\n\t\t\tif (this.signal && this.abortListener) this.signal.removeEventListener(\"abort\", this.abortListener);\n\t\t\tconst snapshot = run.settle();\n\t\t\tif (result) attachSubagentProgress(result, snapshot);\n\t\t} catch {\n\t\t\t/* observation never affects execution */\n\t\t}\n\t\treturn result;\n\t}\n}\n\ntype SubagentExecute = ToolDefinition<typeof SubagentParams, SubagentDetails>[\"execute\"];\n\n/** Wraps the subagent executor so the run observation settles exactly once on return or throw. */\nfunction observeSubagentExecution(\n\tinner: (...args: [...Parameters<SubagentExecute>, SubagentObservation]) => ReturnType<SubagentExecute>,\n): SubagentExecute {\n\treturn async (toolCallId, params, signal, onUpdate, ctx) => {\n\t\tconst observation = new SubagentObservation(readSubagentProgressCapability(ctx), signal);\n\t\ttry {\n\t\t\tconst result = await inner(toolCallId, params, signal, onUpdate, ctx, observation);\n\t\t\tobservation.settle(result);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tobservation.settle();\n\t\t\tthrow error;\n\t\t}\n\t};\n}\n\nexport function createSubagentToolDefinition(cwd: string): ToolDefinition<typeof SubagentParams, SubagentDetails> {\n\treturn {\n\t\tname: \"subagent\",\n\t\tlabel: \"Subagent\",\n\t\tdescription: [\n\t\t\t\"Delegate tasks to specialized subagents with isolated context.\",\n\t\t\t\"Modes: single (agent + task), parallel (tasks array), chain (sequential with {previous} placeholder).\",\n\t\t\t\"Parallel tasks may declare id, dependsOn (start after those ids succeed), ownerPaths (overlapping siblings run one at a time), thinking (reasoning level), context (files, acceptance criteria, base revision) and onFailure (retry this task with another model or thinking level).\",\n\t\t\t\"The optional isolation, thinking and onFailure fields are policy-set for each child.\",\n\t\t\t`Default agent scope is \"user\" (from ${path.join(getAgentDir(), \"agents\")}).`,\n\t\t\t`To enable project-local agents in ${CONFIG_DIR_NAME}/agents, set agentScope: \"both\" (or \"project\").`,\n\t\t].join(\" \"),\n\t\tpromptSnippet:\n\t\t\t\"subagent: delegate work to isolated subagents — single task, parallel batch (tasks array), or sequential chain with {previous} placeholder\",\n\t\tpromptGuidelines: [\n\t\t\t\"Use subagent to fan out independent work in parallel (tasks array) or run multi-step pipelines (chain). Subagents run with isolated context. Nested delegation is allowed only up to the configured depth; a child at the limit must complete its task directly.\",\n\t\t],\n\t\tparameters: SubagentParams,\n\n\t\texecute: observeSubagentExecution(async (toolCallId, params, signal, onUpdate, ctx, observation) => {\n\t\t\tconst agentScope: AgentScope = params.agentScope ?? \"user\";\n\t\t\tconst defaultCwd = ctx?.cwd ?? cwd;\n\t\t\tconst parentModel = ctx?.model;\n\t\t\tconst discovery = discoverAgents(defaultCwd, agentScope);\n\t\t\tconst agents = discovery.agents;\n\t\t\tconst confirmProjectAgents = params.confirmProjectAgents ?? true;\n\t\t\tconst rawProgressOnUpdate = onUpdate as unknown as OnUpdateCallback | undefined;\n\n\t\t\t// Every requested child must appear in details.results, even when\n\t\t\t// nothing ran: external consumers fan out per-child bookkeeping from\n\t\t\t// the tool args and reconcile it against results by index.\n\t\t\tconst requestedChildren = (): Array<{ agent: string; task?: string; step?: number; taskId?: string }> => {\n\t\t\t\tif (params.tasks && params.tasks.length > 0)\n\t\t\t\t\treturn params.tasks.map((t, i) => ({\n\t\t\t\t\t\tagent: t.agent,\n\t\t\t\t\t\ttask: t.task,\n\t\t\t\t\t\ttaskId: t.id ?? `${toolCallId}-${i}`,\n\t\t\t\t\t}));\n\t\t\t\tif (params.chain && params.chain.length > 0)\n\t\t\t\t\treturn params.chain.map((s, i) => ({\n\t\t\t\t\t\tagent: s.agent,\n\t\t\t\t\t\ttask: s.task,\n\t\t\t\t\t\tstep: i + 1,\n\t\t\t\t\t\ttaskId: `${toolCallId}-${i}`,\n\t\t\t\t\t}));\n\t\t\t\tif (params.agent) return [{ agent: params.agent, task: params.task, taskId: `${toolCallId}-0` }];\n\t\t\t\treturn [];\n\t\t\t};\n\t\t\tconst stubResult = (\n\t\t\t\tchild: { agent: string; task?: string; step?: number; taskId?: string },\n\t\t\t\terrorMessage: string,\n\t\t\t): SubagentSingleResult => ({\n\t\t\t\tagent: child.agent,\n\t\t\t\tagentSource: \"unknown\",\n\t\t\t\ttask: child.task ?? \"\",\n\t\t\t\ttaskId: child.taskId ?? `${toolCallId}-${child.step !== undefined ? child.step - 1 : 0}`,\n\t\t\t\tparentTaskId: currentTaskId() ?? toolCallId,\n\t\t\t\tdepth: currentSubagentDepth() + 1,\n\t\t\t\texitCode: 1,\n\t\t\t\tmessages: [],\n\t\t\t\tstderr: \"\",\n\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\terrorMessage,\n\t\t\t\tstep: child.step,\n\t\t\t\tisolation: \"shared\",\n\t\t\t});\n\t\t\tconst stubAllChildren = (errorMessage: string): SubagentSingleResult[] =>\n\t\t\t\trequestedChildren().map((child) => stubResult(child, errorMessage));\n\n\t\t\tconst makeDetails =\n\t\t\t\t(mode: \"single\" | \"parallel\" | \"chain\") =>\n\t\t\t\t(results: SubagentSingleResult[]): SubagentDetails => ({\n\t\t\t\t\tmode,\n\t\t\t\t\tagentScope,\n\t\t\t\t\tprojectAgentsDir: discovery.projectAgentsDir,\n\t\t\t\t\tresults,\n\t\t\t\t});\n\t\t\tconst makeProgressDetails =\n\t\t\t\t(mode: \"single\" | \"parallel\" | \"chain\") =>\n\t\t\t\t(results: SubagentProgressResult[], taskEvents?: SubagentTaskEvent[]): SubagentProgressDetails => ({\n\t\t\t\t\tmode,\n\t\t\t\t\tagentScope,\n\t\t\t\t\tprojectAgentsDir: discovery.projectAgentsDir,\n\t\t\t\t\tresults,\n\t\t\t\t\t...(taskEvents ? { taskEvents } : {}),\n\t\t\t\t});\n\n\t\t\tif (currentSubagentDepth() >= maxSubagentDepth()) {\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Nested delegation limit reached (depth ${currentSubagentDepth()} of ${maxSubagentDepth()}). Complete the task directly.`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst hasChain = (params.chain?.length ?? 0) > 0;\n\t\t\tconst hasTasks = (params.tasks?.length ?? 0) > 0;\n\t\t\tconst hasSingle = Boolean(params.agent && params.task);\n\t\t\tconst modeCount = Number(hasChain) + Number(hasTasks) + Number(hasSingle);\n\n\t\t\tif (modeCount !== 1) {\n\t\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Invalid parameters. Provide exactly one mode.\\nAvailable agents: ${available}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"single\")(\n\t\t\t\t\t\tstubAllChildren(\"not run: invalid parameters (provide exactly one mode)\"),\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (!parentModel?.provider || !parentModel.id) {\n\t\t\t\tconst errorMessage = \"Cannot run subagents without a parent provider and model.\";\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\tdetails: makeDetails(hasChain ? \"chain\" : hasTasks ? \"parallel\" : \"single\")(\n\t\t\t\t\t\tstubAllChildren(errorMessage),\n\t\t\t\t\t),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(agentScope === \"project\" || agentScope === \"both\") &&\n\t\t\t\tconfirmProjectAgents &&\n\t\t\t\tctx?.hasUI &&\n\t\t\t\t!ctx.isProjectTrusted()\n\t\t\t) {\n\t\t\t\tconst requestedAgentNames = new Set<string>();\n\t\t\t\tif (params.chain) for (const step of params.chain) requestedAgentNames.add(step.agent);\n\t\t\t\tif (params.tasks) for (const t of params.tasks) requestedAgentNames.add(t.agent);\n\t\t\t\tif (params.agent) requestedAgentNames.add(params.agent);\n\n\t\t\t\tconst projectAgentsRequested = Array.from(requestedAgentNames)\n\t\t\t\t\t.map((name) => agents.find((a) => a.name === name))\n\t\t\t\t\t.filter((a): a is AgentConfig => a?.source === \"project\");\n\n\t\t\t\tif (projectAgentsRequested.length > 0) {\n\t\t\t\t\tconst names = projectAgentsRequested.map((a) => a.name).join(\", \");\n\t\t\t\t\tconst dir = discovery.projectAgentsDir ?? \"(unknown)\";\n\t\t\t\t\tconst ok = await ctx.ui.confirm(\n\t\t\t\t\t\t\"Run project-local agents?\",\n\t\t\t\t\t\t`Agents: ${names}\\nSource: ${dir}\\n\\nProject agents are repo-controlled. Only continue for trusted repositories.`,\n\t\t\t\t\t);\n\t\t\t\t\tif (!ok)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Canceled: project-local agents not approved.\" }],\n\t\t\t\t\t\t\tdetails: makeDetails(hasChain ? \"chain\" : hasTasks ? \"parallel\" : \"single\")(\n\t\t\t\t\t\t\t\tstubAllChildren(\"canceled: project-local agents not approved\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Parallel-mode validation runs before admission so rejected requests never create a run.\n\t\t\tconst runsParallel = !(params.chain && params.chain.length > 0) && !!params.tasks && params.tasks.length > 0;\n\t\t\tconst taskCap = maxParallelTasks();\n\t\t\tif (runsParallel && params.tasks!.length > taskCap)\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{ type: \"text\", text: `Too many parallel tasks (${params.tasks!.length}). Max is ${taskCap}.` },\n\t\t\t\t\t],\n\t\t\t\t\tdetails: makeDetails(\"parallel\")(stubAllChildren(`not run: too many parallel tasks (max ${taskCap})`)),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\tconst graph = (runsParallel ? (params.tasks ?? []) : []).map((t, i) => ({\n\t\t\t\t...t,\n\t\t\t\tid: t.id ?? `${toolCallId}-${i}`,\n\t\t\t\tdependsOn: t.dependsOn ?? [],\n\t\t\t\townerPaths: t.ownerPaths ?? [],\n\t\t\t\tisolation: t.isolation,\n\t\t\t}));\n\t\t\tif (runsParallel) {\n\t\t\t\tconst graphError = validateTaskGraph(graph);\n\t\t\t\tif (graphError) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Invalid task graph: ${graphError}.` }],\n\t\t\t\t\t\tdetails: makeDetails(\"parallel\")(stubAllChildren(`not run: invalid task graph (${graphError})`)),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Every early validation return has passed: admit the run immediately before mode dispatch.\n\t\t\tconst progressOnUpdate = observation.admit(rawProgressOnUpdate, {\n\t\t\t\ttoolCallId,\n\t\t\t\tmode: hasChain ? \"chain\" : runsParallel ? \"parallel\" : \"single\",\n\t\t\t});\n\n\t\t\tif (params.chain && params.chain.length > 0) {\n\t\t\t\t// The template text, before {previous} substitution: a prior worker's output never reaches the projection.\n\t\t\t\tfor (const step of params.chain) observation.admitWorker({ agent: step.agent, task: step.task });\n\t\t\t\tconst results: SubagentSingleResult[] = [];\n\t\t\t\tlet previousOutput = \"\";\n\n\t\t\t\tfor (let i = 0; i < params.chain.length; i++) {\n\t\t\t\t\tconst step = params.chain[i];\n\t\t\t\t\tconst taskWithContext = step.task.replace(/\\{previous\\}/g, previousOutput);\n\n\t\t\t\t\t// Create update callback that includes all previous results\n\t\t\t\t\tconst chainUpdate: OnUpdateCallback | undefined = progressOnUpdate\n\t\t\t\t\t\t? (partial) => {\n\t\t\t\t\t\t\t\t// Combine completed results with the current streaming result.\n\t\t\t\t\t\t\t\tconst currentResult = partial.details?.results[0];\n\t\t\t\t\t\t\t\tif (currentResult) {\n\t\t\t\t\t\t\t\t\tprogressOnUpdate({\n\t\t\t\t\t\t\t\t\t\tcontent: partial.content,\n\t\t\t\t\t\t\t\t\t\tdetails: makeProgressDetails(\"chain\")([...toProgressDetails(results), currentResult]),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tconst worker = observation.workerAt(i);\n\t\t\t\t\tconst evidence = newAttemptEvidence();\n\t\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\tagents,\n\t\t\t\t\t\tdiscovery.diagnostics,\n\t\t\t\t\t\tstep.agent,\n\t\t\t\t\t\ttaskWithContext,\n\t\t\t\t\t\tstep.cwd,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\ti + 1,\n\t\t\t\t\t\tstep.model,\n\t\t\t\t\t\tparentModel,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tchainUpdate,\n\t\t\t\t\t\tmakeProgressDetails(\"chain\"),\n\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\ti,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttaskId: `${toolCallId}-${i}`,\n\t\t\t\t\t\t\tthinking: step.thinking,\n\t\t\t\t\t\t\tobserver: worker,\n\t\t\t\t\t\t\tevidence,\n\t\t\t\t\t\t\ttraceChild: createSubagentTraceChild(toolCallId, ctx?.sessionManager, ctx),\n\t\t\t\t\t\t\tfileEvidenceSink: getFileEvidenceSink(ctx?.sessionManager),\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tresults.push(result);\n\n\t\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\t\tsettleWorkerOutcome(worker, result, evidence, evidence.started, signal?.aborted === true);\n\t\t\t\t\tif (isError) {\n\t\t\t\t\t\t// Cancellation confirmed before later steps launch is not a dependency exclusion.\n\t\t\t\t\t\tif (signal?.aborted === true) observation.cancelWorkersFromBeforeStart(i + 1);\n\t\t\t\t\t\telse observation.skipWorkersFrom(i + 1);\n\t\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\t\tconst skipped = params.chain\n\t\t\t\t\t\t\t.slice(i + 1)\n\t\t\t\t\t\t\t.map((s, offset) =>\n\t\t\t\t\t\t\t\tstubResult(\n\t\t\t\t\t\t\t\t\t{ agent: s.agent, task: s.task, step: i + 2 + offset },\n\t\t\t\t\t\t\t\t\t`not run: chain stopped at step ${i + 1}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Chain stopped at step ${i + 1} (${step.agent}): ${errorMsg}` }],\n\t\t\t\t\t\t\tdetails: makeDetails(\"chain\")([...results, ...skipped]),\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tpreviousOutput = getFinalOutput(result.messages);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(results[results.length - 1].messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"chain\")(results),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.tasks && params.tasks.length > 0) {\n\t\t\t\tconst childDepth = currentSubagentDepth() + 1;\n\t\t\t\t// Only the first SUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN tasks hold observers; ids are unique.\n\t\t\t\tconst observedSlots = new Map<string, number>();\n\t\t\t\tfor (let i = 0; i < Math.min(graph.length, SUBAGENT_PROGRESS_MAX_WORKERS_PER_RUN); i++) {\n\t\t\t\t\tobservedSlots.set(graph[i].id, i);\n\t\t\t\t}\n\n\t\t\t\tconst taskEvents: SubagentTaskEvent[] = [];\n\t\t\t\tconst emitTaskEvent = (event: SubagentTaskEvent) => {\n\t\t\t\t\ttaskEvents.push(event);\n\t\t\t\t};\n\t\t\t\tconst now = () => Date.now();\n\t\t\t\tfor (const [i, g] of graph.entries()) {\n\t\t\t\t\temitTaskEvent({\n\t\t\t\t\t\ttype: \"schedule\",\n\t\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\t\tdependsOn: g.dependsOn,\n\t\t\t\t\t\townerPaths: g.ownerPaths,\n\t\t\t\t\t\tbaseRevision: g.context?.baseRevision,\n\t\t\t\t\t\tat: now(),\n\t\t\t\t\t});\n\t\t\t\t\t// Only a caller-provided id is a label; the defaulted `<toolCallId>-<index>` id is not.\n\t\t\t\t\tobservation.admitWorker({ agent: g.agent, label: params.tasks?.[i]?.id, task: g.task });\n\t\t\t\t}\n\n\t\t\t\tconst allResults: SubagentSingleResult[] = graph.map((g) => ({\n\t\t\t\t\tagent: g.agent,\n\t\t\t\t\tagentSource: \"unknown\",\n\t\t\t\t\ttask: g.task,\n\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\tparentTaskId: currentTaskId() ?? toolCallId,\n\t\t\t\t\tdepth: childDepth,\n\t\t\t\t\texitCode: -1, // -1 = still running\n\t\t\t\t\tmessages: [],\n\t\t\t\t\tstderr: \"\",\n\t\t\t\t\tusage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, contextTokens: 0, turns: 0 },\n\t\t\t\t\tisolation: \"shared\",\n\t\t\t\t}));\n\n\t\t\t\tconst detailsWithEvents = (results: SubagentSingleResult[]): SubagentDetails => ({\n\t\t\t\t\t...makeDetails(\"parallel\")(results),\n\t\t\t\t\ttaskEvents: [...taskEvents],\n\t\t\t\t});\n\t\t\t\tconst progressDetailsWithEvents = (results: SubagentProgressResult[]): SubagentProgressDetails =>\n\t\t\t\t\tmakeProgressDetails(\"parallel\")(results, [...taskEvents]);\n\n\t\t\t\tconst emitParallelUpdate = (progressResults = toProgressDetails(allResults)) => {\n\t\t\t\t\tif (progressOnUpdate) {\n\t\t\t\t\t\tconst running = allResults.filter((r) => r.exitCode === -1).length;\n\t\t\t\t\t\tconst done = allResults.filter((r) => r.exitCode !== -1).length;\n\t\t\t\t\t\tprogressOnUpdate({\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{ type: \"text\", text: `Parallel: ${done}/${allResults.length} done, ${running} running...` },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: progressDetailsWithEvents(progressResults),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet results: SubagentSingleResult[];\n\t\t\t\ttry {\n\t\t\t\t\tresults = await runDag(\n\t\t\t\t\t\tgraph,\n\t\t\t\t\t\t{ concurrency: maxSubagentConcurrency(), worktrees: maxSubagentWorktrees() },\n\t\t\t\t\t\tasync (g, index) => {\n\t\t\t\t\t\t\tconst maxAttempts = Math.min(3, Math.max(1, g.onFailure?.maxAttempts ?? 1));\n\t\t\t\t\t\t\tlet attempt = 1;\n\t\t\t\t\t\t\tlet model = g.model;\n\t\t\t\t\t\t\tlet thinking = g.thinking;\n\t\t\t\t\t\t\tlet result: SubagentSingleResult;\n\t\t\t\t\t\t\tconst worker = observation.workerAt(index);\n\t\t\t\t\t\t\tlet evidence = newAttemptEvidence();\n\t\t\t\t\t\t\tlet everStarted = false;\n\t\t\t\t\t\t\tconst traceChild = createSubagentTraceChild(toolCallId, ctx?.sessionManager, ctx);\n\t\t\t\t\t\t\tfor (;;) {\n\t\t\t\t\t\t\t\tevidence = newAttemptEvidence();\n\t\t\t\t\t\t\t\temitTaskEvent({ type: \"start\", taskId: g.id, attempt, at: now() });\n\t\t\t\t\t\t\t\tresult = await runSingleAgent(\n\t\t\t\t\t\t\t\t\tdefaultCwd,\n\t\t\t\t\t\t\t\t\tagents,\n\t\t\t\t\t\t\t\t\tdiscovery.diagnostics,\n\t\t\t\t\t\t\t\t\tg.agent,\n\t\t\t\t\t\t\t\t\tg.task,\n\t\t\t\t\t\t\t\t\tg.cwd,\n\t\t\t\t\t\t\t\t\tg.isolation,\n\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\t\tparentModel,\n\t\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t\t\t(partial) => {\n\t\t\t\t\t\t\t\t\t\tconst currentResult = partial.details?.results[0];\n\t\t\t\t\t\t\t\t\t\tif (currentResult) {\n\t\t\t\t\t\t\t\t\t\t\tconst progressResults = toProgressDetails(allResults);\n\t\t\t\t\t\t\t\t\t\t\tprogressResults[index] = currentResult;\n\t\t\t\t\t\t\t\t\t\t\temitParallelUpdate(progressResults);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tprogressDetailsWithEvents,\n\t\t\t\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\t\t\t\t\t\tthinking,\n\t\t\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\t\t\tcontext: g.context,\n\t\t\t\t\t\t\t\t\t\tobserver: worker,\n\t\t\t\t\t\t\t\t\t\tevidence,\n\t\t\t\t\t\t\t\t\t\ttraceChild,\n\t\t\t\t\t\t\t\t\t\tfileEvidenceSink: getFileEvidenceSink(ctx?.sessionManager),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\teverStarted ||= evidence.started;\n\t\t\t\t\t\t\t\tif (!isFailedResult(result)) {\n\t\t\t\t\t\t\t\t\temitTaskEvent({ type: \"complete\", taskId: g.id, attempt, at: now() });\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\temitTaskEvent({\n\t\t\t\t\t\t\t\t\ttype: \"fail\",\n\t\t\t\t\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\t\treason: getResultOutput(result).slice(0, 200),\n\t\t\t\t\t\t\t\t\tat: now(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (attempt >= maxAttempts || signal?.aborted) break;\n\t\t\t\t\t\t\t\tconst next = attempt + 1;\n\t\t\t\t\t\t\t\tmodel = g.onFailure?.retryWith?.model ?? model;\n\t\t\t\t\t\t\t\tthinking = g.onFailure?.retryWith?.thinking ?? thinking;\n\t\t\t\t\t\t\t\temitTaskEvent({\n\t\t\t\t\t\t\t\t\ttype: \"escalate\",\n\t\t\t\t\t\t\t\t\ttaskId: g.id,\n\t\t\t\t\t\t\t\t\tfromAttempt: attempt,\n\t\t\t\t\t\t\t\t\ttoAttempt: next,\n\t\t\t\t\t\t\t\t\tmodel: model ?? `${parentModel.provider}/${parentModel.id}`,\n\t\t\t\t\t\t\t\t\tthinking,\n\t\t\t\t\t\t\t\t\tat: now(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\ttraceChild?.scheduleRetry(next);\n\t\t\t\t\t\t\t\tattempt = next;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsettleWorkerOutcome(worker, result, evidence, everStarted, signal?.aborted === true);\n\t\t\t\t\t\t\tallResults[index] = result;\n\t\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisFailedResult,\n\t\t\t\t\t\t(g, index, failedDependency) => {\n\t\t\t\t\t\t\tconst stub = stubResult(\n\t\t\t\t\t\t\t\t{ agent: g.agent, task: g.task, taskId: g.id },\n\t\t\t\t\t\t\t\t`not run: dependency \"${failedDependency}\" failed`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tallResults[index] = stub;\n\t\t\t\t\t\t\temitParallelUpdate();\n\t\t\t\t\t\t\treturn stub;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(event) => {\n\t\t\t\t\t\t\tif (event.type === \"wait\")\n\t\t\t\t\t\t\t\temitTaskEvent({ type: \"wait\", taskId: event.id, reason: \"concurrency\", at: now() });\n\t\t\t\t\t\t\telse if (event.type === \"serialize\")\n\t\t\t\t\t\t\t\temitTaskEvent({ type: \"serialize\", taskId: event.id, after: event.after, at: now() });\n\t\t\t\t\t\t\telse if (event.type === \"skip\")\n\t\t\t\t\t\t\t\temitTaskEvent({\n\t\t\t\t\t\t\t\t\ttype: \"skip\",\n\t\t\t\t\t\t\t\t\ttaskId: event.id,\n\t\t\t\t\t\t\t\t\tfailedDependency: event.failedDependency,\n\t\t\t\t\t\t\t\t\tat: now(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// \"start\" is emitted inside run() together with the attempt number.\n\t\t\t\t\t\t\t// Task ids are unique (validated), so the graph position is the worker slot.\n\t\t\t\t\t\t\tif (event.type === \"wait\" || event.type === \"serialize\") {\n\t\t\t\t\t\t\t\tobservation.workerAt(observedSlots.get(event.id) ?? -1).wait();\n\t\t\t\t\t\t\t} else if (event.type === \"skip\") {\n\t\t\t\t\t\t\t\tobservation.workerAt(observedSlots.get(event.id) ?? -1).skip();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t(g, index) => {\n\t\t\t\t\t\t\tobservation.workerAt(index).cancelledBeforeStart();\n\t\t\t\t\t\t\treturn stubResult({ agent: g.agent, task: g.task, taskId: g.id }, \"not run: subagent was aborted\");\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Parallel scheduling failed: ${message}` }],\n\t\t\t\t\t\tdetails: detailsWithEvents(stubAllChildren(`not run: scheduling failed (${message})`)),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst successCount = results.filter((r) => !isFailedResult(r)).length;\n\t\t\t\tconst summaries = results.map((r) => {\n\t\t\t\t\tconst output = truncateParallelOutput(getResultOutput(r));\n\t\t\t\t\tconst status = isFailedResult(r)\n\t\t\t\t\t\t? `failed${r.stopReason && r.stopReason !== \"end\" ? ` (${r.stopReason})` : \"\"}`\n\t\t\t\t\t\t: \"completed\";\n\t\t\t\t\treturn `### [${r.agent}] ${status}\\n\\n${output}`;\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: `Parallel: ${successCount}/${results.length} succeeded\\n\\n${summaries.join(\"\\n\\n---\\n\\n\")}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: detailsWithEvents(results),\n\t\t\t\t\tisError: successCount !== results.length,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.agent && params.task) {\n\t\t\t\tconst worker = observation.admitWorker({ agent: params.agent, task: params.task });\n\t\t\t\tconst evidence = newAttemptEvidence();\n\t\t\t\tconst result = await runSingleAgent(\n\t\t\t\t\tdefaultCwd,\n\t\t\t\t\tagents,\n\t\t\t\t\tdiscovery.diagnostics,\n\t\t\t\t\tparams.agent,\n\t\t\t\t\tparams.task,\n\t\t\t\t\tparams.cwd,\n\t\t\t\t\tparams.isolation,\n\t\t\t\t\tundefined,\n\t\t\t\t\tparams.model,\n\t\t\t\t\tparentModel,\n\t\t\t\t\tsignal,\n\t\t\t\t\tprogressOnUpdate,\n\t\t\t\t\tmakeProgressDetails(\"single\"),\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\t0,\n\t\t\t\t\t{\n\t\t\t\t\t\ttaskId: `${toolCallId}-0`,\n\t\t\t\t\t\tthinking: params.thinking,\n\t\t\t\t\t\tobserver: worker,\n\t\t\t\t\t\tevidence,\n\t\t\t\t\t\ttraceChild: createSubagentTraceChild(toolCallId, ctx?.sessionManager, ctx),\n\t\t\t\t\t\tfileEvidenceSink: getFileEvidenceSink(ctx?.sessionManager),\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst isError = isFailedResult(result);\n\t\t\t\tsettleWorkerOutcome(worker, result, evidence, evidence.started, signal?.aborted === true);\n\t\t\t\tif (isError) {\n\t\t\t\t\tconst errorMsg = getResultOutput(result);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Agent ${result.stopReason || \"failed\"}: ${errorMsg}` }],\n\t\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t\t\tisError: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: getFinalOutput(result.messages) || \"(no output)\" }],\n\t\t\t\t\tdetails: makeDetails(\"single\")([result]),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst available = agents.map((a) => `${a.name} (${a.source})`).join(\", \") || \"none\";\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `Invalid parameters. Available agents: ${available}` }],\n\t\t\t\tdetails: makeDetails(\"single\")([]),\n\t\t\t};\n\t\t}),\n\n\t\trenderCall(args, theme: Theme, _context) {\n\t\t\tconst scope: AgentScope = args.agentScope ?? \"user\";\n\t\t\tif (args.chain && args.chain.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `chain (${args.chain.length} steps)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (let i = 0; i < Math.min(args.chain.length, 3); i++) {\n\t\t\t\t\tconst step = args.chain[i];\n\t\t\t\t\t// Clean up {previous} placeholder for display\n\t\t\t\t\tconst cleanTask = step.task.replace(/\\{previous\\}/g, \"\").trim();\n\t\t\t\t\tconst preview = cleanTask.length > 40 ? `${cleanTask.slice(0, 40)}...` : cleanTask;\n\t\t\t\t\ttext +=\n\t\t\t\t\t\t\"\\n \" +\n\t\t\t\t\t\ttheme.fg(\"muted\", `${i + 1}.`) +\n\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\ttheme.fg(\"accent\", step.agent) +\n\t\t\t\t\t\ttheme.fg(\"dim\", ` ${preview}`);\n\t\t\t\t}\n\t\t\t\tif (args.chain.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.chain.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tif (args.tasks && args.tasks.length > 0) {\n\t\t\t\tlet text =\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `parallel (${args.tasks.length} tasks)`) +\n\t\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\t\tfor (const t of args.tasks.slice(0, 3)) {\n\t\t\t\t\tconst preview = t.task.length > 40 ? `${t.task.slice(0, 40)}...` : t.task;\n\t\t\t\t\ttext += `\\n ${theme.fg(\"accent\", t.agent)}${theme.fg(\"dim\", ` ${preview}`)}`;\n\t\t\t\t}\n\t\t\t\tif (args.tasks.length > 3) text += `\\n ${theme.fg(\"muted\", `... +${args.tasks.length - 3} more`)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\t\t\tconst agentName = args.agent || \"...\";\n\t\t\tconst preview = args.task ? (args.task.length > 60 ? `${args.task.slice(0, 60)}...` : args.task) : \"...\";\n\t\t\tlet text =\n\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"subagent \")) +\n\t\t\t\ttheme.fg(\"accent\", agentName) +\n\t\t\t\ttheme.fg(\"muted\", ` [${scope}]`);\n\t\t\ttext += `\\n ${theme.fg(\"dim\", preview)}`;\n\t\t\treturn new Text(text, 0, 0);\n\t\t},\n\n\t\trenderResult(result, { expanded }, theme: Theme, _context) {\n\t\t\tconst details = result.details as SubagentDetails | SubagentProgressDetails | undefined;\n\t\t\tif (!details || details.results.length === 0) {\n\t\t\t\tconst text = result.content[0];\n\t\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t\t}\n\n\t\t\tconst mdTheme = getMarkdownTheme();\n\n\t\t\tconst renderDisplayItems = (items: DisplayItem[], limit?: number) => {\n\t\t\t\tconst toShow = limit ? items.slice(-limit) : items;\n\t\t\t\tconst skipped = limit && items.length > limit ? items.length - limit : 0;\n\t\t\t\tlet text = \"\";\n\t\t\t\tif (skipped > 0) text += theme.fg(\"muted\", `... ${skipped} earlier items\\n`);\n\t\t\t\tfor (const item of toShow) {\n\t\t\t\t\tif (item.type === \"text\") {\n\t\t\t\t\t\tconst preview = expanded ? item.text : item.text.split(\"\\n\").slice(0, 3).join(\"\\n\");\n\t\t\t\t\t\ttext += `${theme.fg(\"toolOutput\", preview)}\\n`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext += `${theme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme))}\\n`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn text.trimEnd();\n\t\t\t};\n\n\t\t\tif (details.mode === \"single\" && details.results.length === 1) {\n\t\t\t\tconst r = details.results[0];\n\t\t\t\tconst isError = isFailedResult(r);\n\t\t\t\tconst icon = isError ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\tconst finalOutput = getResultFinalOutput(r);\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tlet header = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\t\tif (isError && r.stopReason) header += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\t\tcontainer.addChild(new Text(header, 0, 0));\n\t\t\t\t\tif (isError && r.errorMessage)\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"error\", `Error: ${r.errorMessage}`), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Task ───\"), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", r.task), 0, 0));\n\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"─── Output ───\"), 0, 0));\n\t\t\t\t\tif (displayItems.length === 0 && !finalOutput) {\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"(no output)\"), 0, 0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\")\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", usageStr), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(r.agent))}${theme.fg(\"muted\", ` (${r.agentSource})`)}`;\n\t\t\t\tif (isError && r.stopReason) text += ` ${theme.fg(\"error\", `[${r.stopReason}]`)}`;\n\t\t\t\tif (isError && r.errorMessage) text += `\\n${theme.fg(\"error\", `Error: ${r.errorMessage}`)}`;\n\t\t\t\telse if (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\telse {\n\t\t\t\t\ttext += `\\n${renderDisplayItems(displayItems, COLLAPSED_ITEM_COUNT)}`;\n\t\t\t\t\tif (displayItems.length > COLLAPSED_ITEM_COUNT) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(r.usage, r.model);\n\t\t\t\tif (usageStr) text += `\\n${theme.fg(\"dim\", usageStr)}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst aggregateUsage = (results: SubagentDisplayResult[]) => {\n\t\t\t\tconst total = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0, turns: 0 };\n\t\t\t\tfor (const r of results) {\n\t\t\t\t\ttotal.input += r.usage.input;\n\t\t\t\t\ttotal.output += r.usage.output;\n\t\t\t\t\ttotal.cacheRead += r.usage.cacheRead;\n\t\t\t\t\ttotal.cacheWrite += r.usage.cacheWrite;\n\t\t\t\t\ttotal.cost += r.usage.cost;\n\t\t\t\t\ttotal.turns += r.usage.turns;\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t};\n\n\t\t\tif (details.mode === \"chain\") {\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode === 0).length;\n\t\t\t\tconst icon = successCount === details.results.length ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`),\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\t\t\tconst finalOutput = getResultFinalOutput(r);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t`${theme.fg(\"muted\", `─── Step ${r.step}: `) + theme.fg(\"accent\", r.agent)} ${rIcon}`,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst stepUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (stepUsage) container.addChild(new Text(theme.fg(\"dim\", stepUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view\n\t\t\t\tlet text =\n\t\t\t\t\ticon +\n\t\t\t\t\t\" \" +\n\t\t\t\t\ttheme.fg(\"toolTitle\", theme.bold(\"chain \")) +\n\t\t\t\t\ttheme.fg(\"accent\", `${successCount}/${details.results.length} steps`);\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon = r.exitCode === 0 ? theme.fg(\"success\", \"✓\") : theme.fg(\"error\", \"✗\");\n\t\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", `─── Step ${r.step}: `)}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0) text += `\\n${theme.fg(\"muted\", \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\ttext += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tif (details.mode === \"parallel\") {\n\t\t\t\tconst running = details.results.filter((r) => r.exitCode === -1).length;\n\t\t\t\tconst successCount = details.results.filter((r) => r.exitCode !== -1 && !isFailedResult(r)).length;\n\t\t\t\tconst failCount = details.results.filter((r) => r.exitCode !== -1 && isFailedResult(r)).length;\n\t\t\t\tconst isRunning = running > 0;\n\t\t\t\tconst icon = isRunning\n\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t: failCount > 0\n\t\t\t\t\t\t? theme.fg(\"warning\", \"◐\")\n\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\tconst status = isRunning\n\t\t\t\t\t? `${successCount + failCount}/${details.results.length} done, ${running} running`\n\t\t\t\t\t: `${successCount}/${details.results.length} tasks`;\n\n\t\t\t\tif (expanded && !isRunning) {\n\t\t\t\t\tconst container = new Container();\n\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t`${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\t\tconst rIcon = isFailedResult(r) ? theme.fg(\"error\", \"✗\") : theme.fg(\"success\", \"✓\");\n\t\t\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\t\t\tconst finalOutput = getResultFinalOutput(r);\n\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\tnew Text(`${theme.fg(\"muted\", \"─── \") + theme.fg(\"accent\", r.agent)} ${rIcon}`, 0, 0),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"Task: \") + theme.fg(\"dim\", r.task), 0, 0));\n\n\t\t\t\t\t\t// Show tool calls\n\t\t\t\t\t\tfor (const item of displayItems) {\n\t\t\t\t\t\t\tif (item.type === \"toolCall\") {\n\t\t\t\t\t\t\t\tcontainer.addChild(\n\t\t\t\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\t\t\t\ttheme.fg(\"muted\", \"→ \") + formatToolCall(item.name, item.args, theme.fg.bind(theme)),\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show final output as markdown\n\t\t\t\t\t\tif (finalOutput) {\n\t\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\t\tcontainer.addChild(new Markdown(finalOutput.trim(), 0, 0, mdTheme));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst taskUsage = formatUsageStats(r.usage, r.model);\n\t\t\t\t\t\tif (taskUsage) container.addChild(new Text(theme.fg(\"dim\", taskUsage), 0, 0));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) {\n\t\t\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t\t\t\tcontainer.addChild(new Text(theme.fg(\"dim\", `Total: ${usageStr}`), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\treturn container;\n\t\t\t\t}\n\n\t\t\t\t// Collapsed view (or still running)\n\t\t\t\tlet text = `${icon} ${theme.fg(\"toolTitle\", theme.bold(\"parallel \"))}${theme.fg(\"accent\", status)}`;\n\t\t\t\tfor (const r of details.results) {\n\t\t\t\t\tconst rIcon =\n\t\t\t\t\t\tr.exitCode === -1\n\t\t\t\t\t\t\t? theme.fg(\"warning\", \"⏳\")\n\t\t\t\t\t\t\t: isFailedResult(r)\n\t\t\t\t\t\t\t\t? theme.fg(\"error\", \"✗\")\n\t\t\t\t\t\t\t\t: theme.fg(\"success\", \"✓\");\n\t\t\t\t\tconst displayItems = getResultDisplayItems(r);\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"muted\", \"─── \")}${theme.fg(\"accent\", r.agent)} ${rIcon}`;\n\t\t\t\t\tif (displayItems.length === 0)\n\t\t\t\t\t\ttext += `\\n${theme.fg(\"muted\", r.exitCode === -1 ? \"(running...)\" : \"(no output)\")}`;\n\t\t\t\t\telse text += `\\n${renderDisplayItems(displayItems, 5)}`;\n\t\t\t\t}\n\t\t\t\tif (!isRunning) {\n\t\t\t\t\tconst usageStr = formatUsageStats(aggregateUsage(details.results));\n\t\t\t\t\tif (usageStr) text += `\\n\\n${theme.fg(\"dim\", `Total: ${usageStr}`)}`;\n\t\t\t\t}\n\t\t\t\tif (!expanded) text += `\\n${theme.fg(\"muted\", \"(Ctrl+O to expand)\")}`;\n\t\t\t\treturn new Text(text, 0, 0);\n\t\t\t}\n\n\t\t\tconst text = result.content[0];\n\t\t\treturn new Text(text?.type === \"text\" ? text.text : \"(no output)\", 0, 0);\n\t\t},\n\t};\n}\n\nexport function createSubagentTool(cwd: string) {\n\treturn wrapToolDefinition(createSubagentToolDefinition(cwd));\n}\n"]}
|