@caupulican/pi-adaptative 0.80.59 → 0.80.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/core/agent-session.d.ts +6 -0
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +42 -6
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/extension-metadata.d.ts +20 -0
  7. package/dist/core/extension-metadata.d.ts.map +1 -0
  8. package/dist/core/extension-metadata.js +115 -0
  9. package/dist/core/extension-metadata.js.map +1 -0
  10. package/dist/core/extensions/runner.d.ts +1 -0
  11. package/dist/core/extensions/runner.d.ts.map +1 -1
  12. package/dist/core/extensions/runner.js +3 -0
  13. package/dist/core/extensions/runner.js.map +1 -1
  14. package/dist/core/memory/providers/transcript-recall.d.ts +27 -0
  15. package/dist/core/memory/providers/transcript-recall.d.ts.map +1 -0
  16. package/dist/core/memory/providers/transcript-recall.js +154 -0
  17. package/dist/core/memory/providers/transcript-recall.js.map +1 -0
  18. package/dist/core/memory/transcript-index.d.ts +22 -0
  19. package/dist/core/memory/transcript-index.d.ts.map +1 -0
  20. package/dist/core/memory/transcript-index.js +85 -0
  21. package/dist/core/memory/transcript-index.js.map +1 -0
  22. package/dist/core/resource-loader.d.ts +26 -0
  23. package/dist/core/resource-loader.d.ts.map +1 -1
  24. package/dist/core/resource-loader.js +53 -14
  25. package/dist/core/resource-loader.js.map +1 -1
  26. package/dist/core/system-prompt.d.ts +3 -0
  27. package/dist/core/system-prompt.d.ts.map +1 -1
  28. package/dist/core/system-prompt.js +54 -7
  29. package/dist/core/system-prompt.js.map +1 -1
  30. package/dist/modes/interactive/components/profile-resource-editor.d.ts.map +1 -1
  31. package/dist/modes/interactive/components/profile-resource-editor.js +6 -2
  32. package/dist/modes/interactive/components/profile-resource-editor.js.map +1 -1
  33. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  34. package/dist/modes/interactive/interactive-mode.js +6 -3
  35. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  36. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  37. package/dist/modes/rpc/rpc-mode.js +1 -1
  38. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  39. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  40. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  41. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  42. package/examples/extensions/sandbox/package-lock.json +2 -2
  43. package/examples/extensions/sandbox/package.json +1 -1
  44. package/examples/extensions/with-deps/package-lock.json +2 -2
  45. package/examples/extensions/with-deps/package.json +1 -1
  46. package/examples/sdk/12-full-control.ts +3 -0
  47. package/npm-shrinkwrap.json +12 -12
  48. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../../src/core/resource-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAc,MAAM,qCAAqC,CAAC;AAKpF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAiB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACN,sBAAsB,EACtB,kCAAkC,EAClC,aAAa,EACb,wBAAwB,EACxB,cAAc,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAqB,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,6BAA6B,EAG7B,eAAe,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AAqDrE,SAAS,kBAAkB,CAAC,KAAyB,EAAE,WAAmB,EAAsB;IAC/F,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC;YACJ,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,WAAW,SAAS,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9F,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,uBAAuB,GAA8C;IAC1E;QACC,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EACN,6HAA6H;KAC9H;IACD;QACC,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EACN,2IAA2I;KAC5I;IACD;QACC,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,sFAAsF;KAC/F;CACD,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAY;IACjE,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAAA,CACxG;AAED,SAAS,0BAA0B,CAAC,QAAgB,EAAE,OAAe,EAAU;IAC9E,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACjG,OAAO,aAAa,QAAQ,0CAA0C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAAA,CACnH;AAED,SAAS,uBAAuB,CAAC,GAAW,EAA4C;IACvF,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAClG,MAAM,KAAK,GAA6C,EAAE,CAAC;IAC3D,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC;iBACtD,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9E,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,UAAU,uBAAuB,CAAC,OAIvC,EAA6C;IAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvD,MAAM,YAAY,GAA8C,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,KAAK,MAAM,aAAa,IAAI,uBAAuB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACtC,MAAM,oBAAoB,GAA8C,EAAE,CAAC;QAE3E,IAAI,UAAU,GAAG,WAAW,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAE1B,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC,MAAM,CACnE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CACjD,CAAC;YACF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,oBAAoB,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;gBACnD,KAAK,MAAM,WAAW,IAAI,iBAAiB,EAAE,CAAC;oBAC7C,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;YACF,CAAC;YAED,IAAI,UAAU,KAAK,IAAI;gBAAE,MAAM;YAE/B,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,SAAS,KAAK,UAAU;gBAAE,MAAM;YACpC,UAAU,GAAG,SAAS,CAAC;QACxB,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,YAAY,CAAC;AAAA,CACpB;AAuCD,MAAM,OAAO,qBAAqB;IACzB,GAAG,CAAS;IACZ,QAAQ,CAAS;IACjB,eAAe,CAAkB;IACjC,QAAQ,CAAW;IACnB,cAAc,CAAwB;IACtC,wBAAwB,CAAW;IACnC,oBAAoB,CAAW;IAC/B,6BAA6B,CAAW;IACxC,oBAAoB,CAAW;IAC/B,kBAAkB,CAAqB;IACvC,YAAY,CAAU;IACtB,QAAQ,CAAU;IAClB,iBAAiB,CAAU;IAC3B,QAAQ,CAAU;IAClB,cAAc,CAAU;IACxB,kBAAkB,CAAU;IAC5B,wBAAwB,CAAY;IACpC,kBAAkB,CAAwD;IAC1E,cAAc,CAGpB;IACM,eAAe,CAGrB;IACM,cAAc,CAGpB;IACM,mBAAmB,CAEzB;IACM,oBAAoB,CAAoD;IACxE,0BAA0B,CAAgC;IAE1D,gBAAgB,CAAuB;IACvC,MAAM,CAAU;IAChB,gBAAgB,CAAuB;IACvC,OAAO,CAAmB;IAC1B,iBAAiB,CAAuB;IACxC,MAAM,CAAU;IAChB,gBAAgB,CAAuB;IACvC,WAAW,CAA4C;IACvD,YAAY,CAAU;IACtB,kBAAkB,CAAW;IAC7B,cAAc,CAAW;IACzB,yBAAyB,CAA0B;IACnD,0BAA0B,CAA0B;IACpD,yBAAyB,CAA0B;IACnD,eAAe,CAAW;IAC1B,cAAc,CAAW;IACzB,qBAAqB,CAAqC;IAElE,YAAY,OAAqC,EAAE;QAClD,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,IAAI,qBAAqB,CAAC;YAC/C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe;SACrC,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,IAAI,EAAE,CAAC;QACvE,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,6BAA6B,GAAG,OAAO,CAAC,6BAA6B,IAAI,EAAE,CAAC;QACjF,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAC5D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC3D,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;QACzD,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC;QAErE,IAAI,CAAC,gBAAgB,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,CAAC;QAC1F,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,0BAA0B,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5C,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAAA,CACzB;IAED,aAAa,GAAyB;QACrC,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAAA,CAC7B;IAED,SAAS,GAA2D;QACnE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAAA,CACnE;IAED,UAAU,GAAqE;QAC9E,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAAA,CACtE;IAED,SAAS,GAA2D;QACnE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAAA,CACnE;IAED,cAAc,GAA+D;QAC5E,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAAA,CACzC;IAED,eAAe,GAAuB;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC;IAAA,CACzB;IAED,qBAAqB,GAAa;QACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAAA,CAC/B;IAED;;;OAGG;IACH,KAAK,CAAC,6BAA6B,GAAsB;QACxD,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC1D,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,wBAAwB,EAAE;YAC1G,SAAS,EAAE,IAAI;SACf,CAAC,CAAC;QACH,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;YACjD,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,iBAAiB,CAAC,UAAU,EAAE,CAAC;YACrD,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAAA,CAC5B;IAED;;;OAGG;IACH,kBAAkB,CAAC,aAAqB,EAAyB;QAChE,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAC3C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,YAAY,KAAK,aAAa,CACzE,CAAC;IAAA,CACF;IAED;;OAEG;IACH,qBAAqB,CAAC,aAAqB,EAAyB;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CACvD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,YAAY,KAAK,aAAa,CACzE,CAAC;QACF,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChE,OAAO,GAAG,CAAC;IAAA,CACX;IAED;;;OAGG;IACH,KAAK,CAAC,mBAAmB,CAAC,aAAqB,EAAkE;QAChH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;YACzG,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;YAChC,sFAAsF;YACtF,iCAAiC;YACjC,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CACzE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY,CACvE,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,MAAM,CAAC;IAAA,CACd;IAED;;;;;OAKG;IACK,oBAAoB,CAAC,KAAe,EAAE,IAAyB,EAAY;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACzE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACtG,MAAM,OAAO,GAAG,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACzE,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC;QAAA,CAC3B,CAAC,CAAC;IAAA,CACH;IAED,eAAe,CAAC,KAA6B,EAAQ;QACpD,sFAAsF;QACtF,0FAAwF;QACxF,qCAAqC;QACrC,MAAM,SAAS,GAAG,CAAC,KAAuB,EAAE,IAAyB,EAAW,EAAE,CACjF,IAAI,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9G,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACjH,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE9G,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9F,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9F,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CACpC,IAAI,CAAC,cAAc,EACnB,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CACrC,CAAC;YACF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CACrC,IAAI,CAAC,eAAe,EACpB,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CACtC,CAAC;YACF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CACpC,IAAI,CAAC,cAAc,EACnB,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CACrC,CAAC;YACF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;IAAA,CACD;IAEO,cAAc,GAA2B;QAChD,OAAO;YACN,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;YACzD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;YAC3D,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;YACzD,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,cAAc,EAAE,IAAI,CAAC,cAAc;SACnC,CAAC;IAAA,CACF;IAEO,eAAe,CAAC,QAAgC,EAAQ;QAC/D,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,yBAAyB,CAAC;QACpE,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC,0BAA0B,CAAC;QACtE,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,yBAAyB,CAAC;QACpE,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;IAAA,CAC9C;IAED,KAAK,CAAC,YAAY,GAAkB;QACnC,IAAI,CAAC,IAAI,CAAC,qBAAqB;YAAE,OAAO;QACxC,MAAM,kCAAkC,CAAC,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACjG,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAAA,CACvC;IAED,KAAK,CAAC,cAAc,GAAkB;QACrC,IAAI,CAAC,IAAI,CAAC,qBAAqB;YAAE,OAAO;QACxC,MAAM,kCAAkC,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC3E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjD,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAAA,CACvC;IAED,KAAK,CAAC,MAAM,CAAC,OAAO,GAA0B,EAAE,EAAiB;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1D,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBAC1G,SAAS,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,GAAG,EAAwB,CAAC;YAEvD,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;YAC3C,IAAI,CAAC,0BAA0B,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5C,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;YAE3C,qDAAqD;YACrD,MAAM,mBAAmB,GAAG,CAC3B,SAA4E,EACR,EAAE,CAAC;gBACvE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC3B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACxC,CAAC;gBACF,CAAC;gBACD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAA,CAC1C,CAAC;YAEF,MAAM,eAAe,GAAG,CACvB,SAA4E,EACjE,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,iBAAiB,GAAG,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACpE,MAAM,qBAAqB,GAAG,mBAAmB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACxE,MAAM,cAAc,GAAG,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAE5D,MAAM,YAAY,GAAG,CAAC,QAAkD,EAAU,EAAE,CAAC;gBACpF,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACnF,OAAO,QAAQ,CAAC,IAAI,CAAC;gBACtB,CAAC;gBACD,IAAI,CAAC;oBACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC;oBACtB,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,OAAO,QAAQ,CAAC,IAAI,CAAC;gBACtB,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAClD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;wBACpC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAClD,CAAC;oBACD,OAAO,SAAS,CAAC;gBAClB,CAAC;gBACD,OAAO,QAAQ,CAAC,IAAI,CAAC;YAAA,CACrB,CAAC;YAEF,MAAM,aAAa,GAAG,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAE9D,yBAAyB;YACzB,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,UAAU,EAAE,CAAC;gBAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBACxF,CAAC;YACF,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBACxF,CAAC;YACF,CAAC;YAED,MAAM,oBAAoB,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAC3E,MAAM,gBAAgB,GAAG,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACnE,MAAM,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACrE,MAAM,gBAAgB,GAAG,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAEnE,2CAA2C;YAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,iCAAiC,EAAE,CAAC;YAEhF,MAAM,oBAAoB,GAAG,CAAC,KAAe,EAAE,IAAyB,EAAY,EAAE,CACrF,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAExC,+BAA+B;YAC/B,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBACxC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC;wBACJ,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;4BAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;4BAChC,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gCAC5B,IAAI,CAAC;oCACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oCACjD,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gCAC7B,CAAC;gCAAC,MAAM,CAAC;oCACR,SAAS;gCACV,CAAC;4BACF,CAAC;4BACD,IAAI,KAAK,EAAE,CAAC;gCACX,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gCAC3C,IACC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oCACvC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oCACvC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAC1C,CAAC;oCACF,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oCACnC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gCAC3F,CAAC;4BACF,CAAC;wBACF,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC;wBACR,SAAS;oBACV,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY;gBACvC,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE;oBACtC,GAAG,iBAAiB;oBACpB,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,YAAY,CAAC;iBACzD,CAAC,CAAC;YAEL,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvF,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACrF,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACjE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAEzD,gGAAgG;YAChG,8GAA8G;YAC9G,MAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC7E,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC/C,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC3B,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,kCAAkC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBACvG,CAAC;gBACF,CAAC;YACF,CAAC;YACD,MAAM,wBAAwB,GAAG,IAAI,CAAC,kBAAkB;gBACvD,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;gBAC3C,CAAC,CAAC,gBAAgB,CAAC;YACpB,IAAI,OAAO,CAAC,qBAAqB,IAAI,wBAAwB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjF,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM;qBAC7C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;qBACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;qBAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,wBAAwB,CAAC;YACjD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAEhF,2BAA2B;YAC3B,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACvC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACJ,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;wBAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;4BAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;4BAChC,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gCAC5B,IAAI,CAAC;oCACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oCACpD,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gCAC7B,CAAC;gCAAC,MAAM,CAAC;oCACR,SAAS;gCACV,CAAC;4BACF,CAAC;4BACD,IAAI,KAAK,EAAE,CAAC;gCACX,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gCAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gCAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gCACjE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gCAChC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;4BAC5F,CAAC;wBACF,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC;wBACR,SAAS;oBACV,CAAC;gBACF,CAAC;YACF,CAAC;YAED,gFAAgF;YAChF,sFAAsF;YACtF,8FAA8F;YAC9F,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;YAC/C,MAAM,iBAAiB,GAAa,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACJ,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC5E,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;4BAAE,SAAS;wBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;wBACrD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;wBAC9C,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACvE,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,SAAS;gBACV,CAAC;YACF,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ;gBAC/B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,gBAAgB,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAC,UAAU,CACf;oBACC,GAAG,gBAAgB;oBACnB,GAAG,aAAa;oBAChB,GAAG,oBAAoB,CAAC,cAAc,EAAE,QAAQ,CAAC;oBACjD,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,QAAQ,CAAC;iBACpD,EACD,IAAI,CAAC,oBAAoB,CACzB,CAAC;YAEJ,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;YACjC,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC3C,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;wBACtF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACrG,CAAC;gBACF,CAAC;YACF,CAAC;YAED,4BAA4B;YAC5B,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACzC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC5B,MAAM,KAAK,GAAG,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAC3D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACvB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACxB,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;oBACnF,CAAC;gBACF,CAAC;YACF,CAAC;YAED,8FAA8F;YAC9F,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;YACjD,MAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC;gBACvD,CAAC,CAAC,uBAAuB,CAAC,iBAAiB,EAAE,OAAO,CAAC;gBACrD,CAAC,CAAC,EAAE,CAAC;YACN,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB;gBACzC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,6BAA6B,CAAC;gBACxE,CAAC,CAAC,IAAI,CAAC,UAAU,CACf;oBACC,GAAG,iBAAiB;oBACpB,GAAG,cAAc;oBACjB,GAAG,oBAAoB,CAAC,eAAe,EAAE,SAAS,CAAC;oBACnD,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,SAAS,CAAC;iBACtD,EACD,IAAI,CAAC,6BAA6B,CAClC,CAAC;YAEJ,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;YACnC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,6BAA6B,EAAE,CAAC;gBACpD,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;wBACvF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;4BAC3B,IAAI,EAAE,OAAO;4BACb,OAAO,EAAE,qCAAqC;4BAC9C,IAAI,EAAE,QAAQ;yBACd,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;YAED,2BAA2B;YAC3B,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACvC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBAC5D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACvB,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACvB,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;oBACnF,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ;gBAC/B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC;gBAC9D,CAAC,CAAC,IAAI,CAAC,UAAU,CACf,CAAC,GAAG,gBAAgB,EAAE,GAAG,aAAa,EAAE,GAAG,oBAAoB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,EAC1F,IAAI,CAAC,oBAAoB,CACzB,CAAC;YAEJ,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;YACjC,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACtF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACrG,CAAC;YACF,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;gBACzC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,uBAAuB,CAAC;oBACxB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;iBACvD,CAAC,CAAC;YACL,MAAM,qBAAqB,GAA4C,EAAE,CAAC;YAC1E,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,6BAA6B,EAAE,CAAC;YAChF,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACJ,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,0BAA0B,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC,CAAC;oBAClG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAChG,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC,qBAAqB,CAAC,CAAC;YACpF,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YACnF,MAAM,WAAW,GAAG;gBACnB,WAAW,EAAE,cAAc;qBACzB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACjB,MAAM,OAAO,GACZ,kBAAkB,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;wBACrC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9E,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC7F,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC;gBAAA,CAC3B,CAAC;qBACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACf,GAAG,IAAI;oBACP,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;iBAC/E,CAAC,CAAC;aACJ,CAAC;YACF,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAC3G,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC;YAEnD,MAAM,gBAAgB,GAAG,kBAAkB,CAC1C,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAC1D,eAAe,CACf,CAAC;YACF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAE/G,MAAM,aAAa,GAClB,IAAI,CAAC,wBAAwB;gBAC7B,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,EAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzF,MAAM,UAAU,GAAG,aAAa;iBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;iBACzD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,0BAA0B;gBACxD,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;gBAC7C,CAAC,CAAC,UAAU,CAAC;YACd,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACnC,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACP,MAAM,kCAAkC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAChF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBACzD,MAAM,kCAAkC,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC;QACb,CAAC;IAAA,CACD;IAEO,uBAAuB,CAC9B,OAAwD,EACN;QAClD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO;gBACtC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAClF,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YAClB,OAAO;gBACN,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC1C,QAAQ;aACR,CAAC;QAAA,CACF,CAAC,CAAC;IAAA,CACH;IAEO,qBAAqB,CAAC,UAAoB,EAAE,cAA0C,EAAQ;QACrG,IAAI,YAAoE,CAAC;QACzE,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,YAAY,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QAChD,CAAC;aAAM,CAAC;YACP,YAAY,GAAG,UAAU,CAAC;gBACzB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU;gBACV,eAAe,EAAE,KAAK;aACtB,CAAC,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC9F,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnD,GAAG,KAAK;YACR,UAAU,EACT,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAC;gBAC1F,KAAK,CAAC,UAAU;gBAChB,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,QAAQ,CAAC;SACjD,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,WAAW,CAAC;IAAA,CACnD;IAEO,sBAAsB,CAAC,WAAqB,EAAE,cAA0C,EAAQ;QACvG,IAAI,aAA+E,CAAC;QACpF,IAAI,IAAI,CAAC,iBAAiB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,aAAa,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QAClD,CAAC;aAAM,CAAC;YACP,MAAM,UAAU,GAAG,mBAAmB,CAAC;gBACtC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW;gBACX,eAAe,EAAE,KAAK;aACtB,CAAC,CAAC;YACH,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QACnG,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvD,GAAG,MAAM;YACT,UAAU,EACT,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,0BAA0B,EAAE,cAAc,CAAC;gBAC5F,MAAM,CAAC,UAAU;gBACjB,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC;SAClD,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,WAAW,CAAC;IAAA,CACrD;IAEO,qBAAqB,CAAC,UAAoB,EAAE,cAA0C,EAAQ;QACrG,IAAI,YAAoE,CAAC;QACzE,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,YAAY,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QAChD,CAAC;aAAM,CAAC;YACP,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,YAAY,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACzG,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC9F,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACpC,KAAK,CAAC,UAAU,GAAG,UAAU;gBAC5B,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAC;oBACxF,KAAK,CAAC,UAAU;oBAChB,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;gBAC9C,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;YACpB,OAAO,KAAK,CAAC;QAAA,CACb,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,WAAW,CAAC;IAAA,CACnD;IAEO,wBAAwB,CAAC,UAAuB,EAAE,cAAyC,EAAQ;QAC1G,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACpC,SAAS,CAAC,UAAU;gBACnB,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC;oBACrE,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClD,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnD,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YAC3C,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YACxC,CAAC;QACF,CAAC;IAAA,CACD;IAEO,qBAAqB,CAC5B,YAAoB,EACpB,gBAA0C,EAC1C,cAA0C,EACjB;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,gBAAgB,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBACjD,IACC,sBAAsB,KAAK,oBAAoB;oBAC/C,sBAAsB,CAAC,UAAU,CAAC,GAAG,oBAAoB,GAAG,GAAG,EAAE,CAAC,EACjE,CAAC;oBACF,OAAO,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC9C,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC7F,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;YAED,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC/D,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBACjD,IACC,sBAAsB,KAAK,oBAAoB;oBAC/C,sBAAsB,CAAC,UAAU,CAAC,GAAG,oBAAoB,GAAG,GAAG,EAAE,CAAC,EACjE,CAAC;oBACF,OAAO,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACjD,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAC;IAAA,CACjB;IAEO,2BAA2B,CAAC,QAAgB,EAAc;QACjE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO;gBACN,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW;gBAC1D,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,WAAW;aACnB,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG;YAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;SACjC,CAAC;QACF,MAAM,YAAY,GAAG;YACpB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,YAAY,CAAC;SAC7C,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/F,CAAC;QACF,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClG,CAAC;QACF,CAAC;QAED,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;SAChG,CAAC;IAAA,CACF;IAEO,UAAU,CAAC,OAAiB,EAAE,UAAoB,EAAY;QACrE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;gBAAE,SAAS;YACtC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,MAAM,CAAC;IAAA,CACd;IAEO,mBAAmB,CAAC,CAAS,EAAU;QAC9C,OAAO,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAAA,CAChD;IAEO,UAAU,CACjB,KAAe,EACf,eAAe,GAAY,IAAI,EAI9B;QACD,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAyB,EAAE,CAAC;QAC7C,IAAI,eAAe,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;YAE/F,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAClD,CAAC;QACF,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC5F,SAAS;YACV,CAAC;YAED,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACjC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACzB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACP,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,+BAA+B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACjG,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC;gBACrF,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChE,CAAC;QACF,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAA,CAC/B;IAEO,iBAAiB,CAAC,GAAW,EAAE,MAAe,EAAE,WAAiC,EAAQ;QAChG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO;QACR,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACJ,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;oBACnD,CAAC;oBAAC,MAAM,CAAC;wBACR,SAAS;oBACV,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,SAAS;gBACV,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnC,SAAS;gBACV,CAAC;gBACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACpE,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC;YAC1F,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC;IAAA,CACD;IAEO,iBAAiB,CAAC,QAAgB,EAAE,MAAe,EAAE,WAAiC,EAAQ;QACrG,IAAI,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;YAChF,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;IAAA,CACD;IAEO,KAAK,CAAC,sBAAsB,CAAC,OAAyB,EAG3D;QACF,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,MAAM,MAAM,GAA2C,EAAE,CAAC;QAE1D,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;YAClE,MAAM,aAAa,GAAG,WAAW,KAAK,GAAG,CAAC,GAAG,CAAC;YAC9C,IAAI,CAAC;gBACJ,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;gBAC3G,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;gBACpF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAA,CAC9B;IAEO,aAAa,CAAC,OAAyB,EAAoE;QAClH,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0B,CAAC;QAC/C,MAAM,WAAW,GAAyB,EAAE,CAAC;QAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,QAAQ,EAAE,CAAC;gBACd,WAAW,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,aAAa;oBAC3C,IAAI,EAAE,MAAM,CAAC,QAAQ;oBACrB,SAAS,EAAE;wBACV,YAAY,EAAE,QAAQ;wBACtB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,UAAU,EAAE,QAAQ,CAAC,QAAQ;wBAC7B,SAAS,EAAE,MAAM,CAAC,QAAQ;qBAC1B;iBACD,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IAAA,CAC3D;IAEO,YAAY,CAAC,MAAe,EAA0D;QAC7F,MAAM,IAAI,GAAG,IAAI,GAAG,EAAiB,CAAC;QACtC,MAAM,WAAW,GAAyB,EAAE,CAAC;QAE7C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,QAAQ,EAAE,CAAC;gBACd,WAAW,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,SAAS,IAAI,aAAa;oBACnC,IAAI,EAAE,CAAC,CAAC,UAAU;oBAClB,SAAS,EAAE;wBACV,YAAY,EAAE,OAAO;wBACrB,IAAI;wBACJ,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,WAAW;wBAC9C,SAAS,EAAE,CAAC,CAAC,UAAU,IAAI,WAAW;qBACtC;iBACD,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACnB,CAAC;QACF,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IAAA,CAC1D;IAEO,wBAAwB,GAAuB;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACxE,OAAO,WAAW,CAAC;QACpB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,UAAU,CAAC;QACnB,CAAC;QAED,OAAO,SAAS,CAAC;IAAA,CACjB;IAEO,8BAA8B,GAAuB;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACxE,OAAO,WAAW,CAAC;QACpB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,UAAU,CAAC;QACnB,CAAC;QAED,OAAO,SAAS,CAAC;IAAA,CACjB;IAEO,WAAW,CAAC,MAAc,EAAE,IAAY,EAAW;QAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,GAAG,EAAE,CAAC;QACzF,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAAA,CACjC;IAEO,wBAAwB,CAAC,UAAuB,EAA4C;QACnG,MAAM,SAAS,GAA6C,EAAE,CAAC;QAE/D,sDAAsD;QACtD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE7C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,cAAc;YACd,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC/C,IAAI,aAAa,IAAI,aAAa,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;oBACjD,SAAS,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,OAAO,EAAE,SAAS,QAAQ,oBAAoB,aAAa,EAAE;qBAC7D,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACF,CAAC;YAED,cAAc;YACd,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC/C,IAAI,aAAa,IAAI,aAAa,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;oBACjD,SAAS,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,OAAO,EAAE,WAAW,QAAQ,oBAAoB,aAAa,EAAE;qBAC/D,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAC;IAAA,CACjB;CACD;AAED,SAAS,uBAAuB,CAAC,GAAW,EAAE,OAAe,EAAY;IACxE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;gBAAE,SAAS;YAE5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAE5B,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACjC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC5B,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC;oBACR,SAAS;gBACV,CAAC;YACF,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACX,KAAK,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,CAAC;iBAAM,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,SAAS;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb","sourcesContent":["import { existsSync, readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { join, resolve, sep } from \"node:path\";\nimport chalk from \"chalk\";\nimport { CONFIG_DIR_NAME, getBundledPromptsDir, getBundledSkillsDir } from \"../config.ts\";\nimport { loadThemeFromPath, type Theme } from \"../modes/interactive/theme/theme.ts\";\nimport type { ResourceDiagnostic } from \"./diagnostics.ts\";\n\nexport type { ResourceCollision, ResourceDiagnostic } from \"./diagnostics.ts\";\n\nimport { canonicalizePath, isLocalPath, resolvePath } from \"../utils/paths.ts\";\nimport { createEventBus, type EventBus } from \"./event-bus.ts\";\nimport {\n\tcreateExtensionRuntime,\n\tdisposeExtensionEventSubscriptions,\n\tloadExtension,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./extensions/loader.ts\";\nimport type { Extension, ExtensionFactory, ExtensionRuntime, LoadExtensionsResult } from \"./extensions/types.ts\";\nimport { DefaultPackageManager, type PathMetadata } from \"./package-manager.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport { loadPromptTemplates } from \"./prompt-templates.ts\";\nimport {\n\tmergeResourceProfileMap,\n\tparseResourceProfileBlocks,\n\tstripResourceProfileBlocks,\n} from \"./resource-profile-blocks.ts\";\nimport {\n\tmatchesResourceProfilePattern,\n\ttype ResourceProfileKind,\n\ttype ResourceProfileSettings,\n\tSettingsManager,\n} from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport { loadSkills } from \"./skills.ts\";\nimport { createSourceInfo, type SourceInfo } from \"./source-info.ts\";\n\nexport interface ResourceExtensionPaths {\n\tskillPaths?: Array<{ path: string; metadata: PathMetadata }>;\n\tpromptPaths?: Array<{ path: string; metadata: PathMetadata }>;\n\tthemePaths?: Array<{ path: string; metadata: PathMetadata }>;\n}\n\nexport interface ResourceReloadOptions {\n\t/** Throw instead of accepting a hot reload that produced extension load/conflict errors. */\n\tfailOnExtensionErrors?: boolean;\n\t/** Keep the previous extension generation alive until commitReload()/rollbackReload(). */\n\tdeferExtensionDispose?: boolean;\n}\n\nexport interface ResourceLoader {\n\tgetExtensions(): LoadExtensionsResult;\n\tgetSkills(): { skills: Skill[]; diagnostics: ResourceDiagnostic[] };\n\tgetPrompts(): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] };\n\tgetThemes(): { themes: Theme[]; diagnostics: ResourceDiagnostic[] };\n\tgetAgentsFiles(): { agentsFiles: Array<{ path: string; content?: string }> };\n\tgetSystemPrompt(): string | undefined;\n\tgetAppendSystemPrompt(): string[];\n\tgetLoadedExtension(path: string): Extension | undefined;\n\tremoveLoadedExtension(path: string): Extension | undefined;\n\tloadSingleExtension(path: string): Promise<{ extension: Extension | null; error: string | null }>;\n\textendResources(paths: ResourceExtensionPaths): void;\n\treload(options?: ResourceReloadOptions): Promise<void>;\n\tcommitReload?(): void;\n\trollbackReload?(): void;\n\t/** Get all discoverable extension paths (enabled and disabled) */\n\tgetDiscoverableExtensionPaths(): Promise<string[]>;\n}\n\ninterface ResourceLoaderSnapshot {\n\textensionsResult: LoadExtensionsResult;\n\tskills: Skill[];\n\tskillDiagnostics: ResourceDiagnostic[];\n\tprompts: PromptTemplate[];\n\tpromptDiagnostics: ResourceDiagnostic[];\n\tthemes: Theme[];\n\tthemeDiagnostics: ResourceDiagnostic[];\n\tagentsFiles: Array<{ path: string; content?: string }>;\n\tsystemPrompt?: string;\n\tappendSystemPrompt: string[];\n\tlastSkillPaths: string[];\n\textensionSkillSourceInfos: Map<string, SourceInfo>;\n\textensionPromptSourceInfos: Map<string, SourceInfo>;\n\textensionThemeSourceInfos: Map<string, SourceInfo>;\n\tlastPromptPaths: string[];\n\tlastThemePaths: string[];\n}\n\nfunction resolvePromptInput(input: string | undefined, description: string): string | undefined {\n\tif (!input) {\n\t\treturn undefined;\n\t}\n\n\tif (existsSync(input)) {\n\t\ttry {\n\t\t\treturn readFileSync(input, \"utf-8\");\n\t\t} catch (error) {\n\t\t\tconsole.error(chalk.yellow(`Warning: Could not read ${description} file ${input}: ${error}`));\n\t\t\treturn input;\n\t\t}\n\t}\n\n\treturn input;\n}\n\nconst CONTEXT_THREAT_PATTERNS: Array<{ label: string; pattern: RegExp }> = [\n\t{\n\t\tlabel: \"instruction override\",\n\t\tpattern:\n\t\t\t/\\b(?:ignore|disregard|override|bypass)\\b.{0,80}\\b(?:previous|prior|above|system|developer|agent)\\b.{0,80}\\binstructions?\\b/i,\n\t},\n\t{\n\t\tlabel: \"secret exfiltration\",\n\t\tpattern:\n\t\t\t/\\b(?:reveal|print|dump|exfiltrate|send|upload)\\b.{0,80}\\b(?:secrets?|tokens?|api[_ -]?keys?|credentials?|environment variables?|\\.env)\\b/i,\n\t},\n\t{\n\t\tlabel: \"hidden instruction\",\n\t\tpattern: /\\b(?:do not tell|don't tell|hide this from)\\b.{0,80}\\b(?:user|operator|developer)\\b/i,\n\t},\n];\n\nexport function scanContextFileThreats(content: string): string[] {\n\treturn CONTEXT_THREAT_PATTERNS.filter(({ pattern }) => pattern.test(content)).map(({ label }) => label);\n}\n\nfunction sanitizeContextFileContent(filePath: string, content: string): string {\n\tconst profileFreeContent = stripResourceProfileBlocks(content);\n\tconst findings = scanContextFileThreats(profileFreeContent);\n\tif (findings.length === 0) return profileFreeContent;\n\tconsole.error(chalk.yellow(`Warning: Blocked context file ${filePath}: ${findings.join(\", \")}`));\n\treturn `[BLOCKED: ${filePath} contained potential prompt injection (${findings.join(\", \")}). Content not loaded.]`;\n}\n\nfunction loadContextFilesFromDir(dir: string): Array<{ path: string; content: string }> {\n\tconst candidates = [\"AGENTS.md\", \"AGENTS.MD\", \"CLAUDE.md\", \"CLAUDE.MD\", \"GEMINI.md\", \"GEMINI.MD\"];\n\tconst files: Array<{ path: string; content: string }> = [];\n\tfor (const filename of candidates) {\n\t\tconst filePath = join(dir, filename);\n\t\tif (existsSync(filePath)) {\n\t\t\ttry {\n\t\t\t\tconst content = readFileSync(filePath, \"utf-8\");\n\t\t\t\tfiles.push({\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tcontent: sanitizeContextFileContent(filePath, content),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(chalk.yellow(`Warning: Could not read ${filePath}: ${error}`));\n\t\t\t}\n\t\t}\n\t}\n\treturn files;\n}\n\nexport function loadProjectContextFiles(options: {\n\tcwd: string;\n\tagentDir: string;\n\tprojectTrusted?: boolean;\n}): Array<{ path: string; content?: string }> {\n\tconst resolvedCwd = resolvePath(options.cwd);\n\tconst resolvedAgentDir = resolvePath(options.agentDir);\n\n\tconst contextFiles: Array<{ path: string; content?: string }> = [];\n\tconst seenPaths = new Set<string>();\n\n\tfor (const globalContext of loadContextFilesFromDir(resolvedAgentDir)) {\n\t\tcontextFiles.push(globalContext);\n\t\tseenPaths.add(globalContext.path);\n\t}\n\n\tif (options.projectTrusted !== false) {\n\t\tconst ancestorContextFiles: Array<{ path: string; content?: string }> = [];\n\n\t\tlet currentDir = resolvedCwd;\n\t\tconst root = resolve(\"/\");\n\n\t\twhile (true) {\n\t\t\tconst contextFilesInDir = loadContextFilesFromDir(currentDir).filter(\n\t\t\t\t(contextFile) => !seenPaths.has(contextFile.path),\n\t\t\t);\n\t\t\tif (contextFilesInDir.length > 0) {\n\t\t\t\tancestorContextFiles.unshift(...contextFilesInDir);\n\t\t\t\tfor (const contextFile of contextFilesInDir) {\n\t\t\t\t\tseenPaths.add(contextFile.path);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (currentDir === root) break;\n\n\t\t\tconst parentDir = resolve(currentDir, \"..\");\n\t\t\tif (parentDir === currentDir) break;\n\t\t\tcurrentDir = parentDir;\n\t\t}\n\n\t\tcontextFiles.push(...ancestorContextFiles);\n\t}\n\n\treturn contextFiles;\n}\n\nexport interface DefaultResourceLoaderOptions {\n\tcwd: string;\n\tagentDir: string;\n\tsettingsManager?: SettingsManager;\n\teventBus?: EventBus;\n\tadditionalExtensionPaths?: string[];\n\tadditionalSkillPaths?: string[];\n\tadditionalPromptTemplatePaths?: string[];\n\tadditionalThemePaths?: string[];\n\textensionFactories?: ExtensionFactory[];\n\tnoExtensions?: boolean;\n\tnoSkills?: boolean;\n\tnoPromptTemplates?: boolean;\n\tnoThemes?: boolean;\n\tnoContextFiles?: boolean;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string[];\n\textensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;\n\tskillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tskills: Skill[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tpromptsOverride?: (base: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tprompts: PromptTemplate[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tthemesOverride?: (base: { themes: Theme[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tthemes: Theme[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tagentsFilesOverride?: (base: { agentsFiles: Array<{ path: string; content?: string }> }) => {\n\t\tagentsFiles: Array<{ path: string; content?: string }>;\n\t};\n\tsystemPromptOverride?: (base: string | undefined) => string | undefined;\n\tappendSystemPromptOverride?: (base: string[]) => string[];\n}\n\nexport class DefaultResourceLoader implements ResourceLoader {\n\tprivate cwd: string;\n\tprivate agentDir: string;\n\tprivate settingsManager: SettingsManager;\n\tprivate eventBus: EventBus;\n\tprivate packageManager: DefaultPackageManager;\n\tprivate additionalExtensionPaths: string[];\n\tprivate additionalSkillPaths: string[];\n\tprivate additionalPromptTemplatePaths: string[];\n\tprivate additionalThemePaths: string[];\n\tprivate extensionFactories: ExtensionFactory[];\n\tprivate noExtensions: boolean;\n\tprivate noSkills: boolean;\n\tprivate noPromptTemplates: boolean;\n\tprivate noThemes: boolean;\n\tprivate noContextFiles: boolean;\n\tprivate systemPromptSource?: string;\n\tprivate appendSystemPromptSource?: string[];\n\tprivate extensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;\n\tprivate skillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tskills: Skill[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tprivate promptsOverride?: (base: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tprompts: PromptTemplate[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tprivate themesOverride?: (base: { themes: Theme[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tthemes: Theme[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tprivate agentsFilesOverride?: (base: { agentsFiles: Array<{ path: string; content?: string }> }) => {\n\t\tagentsFiles: Array<{ path: string; content?: string }>;\n\t};\n\tprivate systemPromptOverride?: (base: string | undefined) => string | undefined;\n\tprivate appendSystemPromptOverride?: (base: string[]) => string[];\n\n\tprivate extensionsResult: LoadExtensionsResult;\n\tprivate skills: Skill[];\n\tprivate skillDiagnostics: ResourceDiagnostic[];\n\tprivate prompts: PromptTemplate[];\n\tprivate promptDiagnostics: ResourceDiagnostic[];\n\tprivate themes: Theme[];\n\tprivate themeDiagnostics: ResourceDiagnostic[];\n\tprivate agentsFiles: Array<{ path: string; content?: string }>;\n\tprivate systemPrompt?: string;\n\tprivate appendSystemPrompt: string[];\n\tprivate lastSkillPaths: string[];\n\tprivate extensionSkillSourceInfos: Map<string, SourceInfo>;\n\tprivate extensionPromptSourceInfos: Map<string, SourceInfo>;\n\tprivate extensionThemeSourceInfos: Map<string, SourceInfo>;\n\tprivate lastPromptPaths: string[];\n\tprivate lastThemePaths: string[];\n\tprivate pendingReloadSnapshot: ResourceLoaderSnapshot | undefined;\n\n\tconstructor(options: DefaultResourceLoaderOptions) {\n\t\tthis.cwd = resolvePath(options.cwd);\n\t\tthis.agentDir = resolvePath(options.agentDir);\n\t\tthis.settingsManager = options.settingsManager ?? SettingsManager.create(this.cwd, this.agentDir);\n\t\tthis.eventBus = options.eventBus ?? createEventBus();\n\t\tthis.packageManager = new DefaultPackageManager({\n\t\t\tcwd: this.cwd,\n\t\t\tagentDir: this.agentDir,\n\t\t\tsettingsManager: this.settingsManager,\n\t\t});\n\t\tthis.additionalExtensionPaths = options.additionalExtensionPaths ?? [];\n\t\tthis.additionalSkillPaths = options.additionalSkillPaths ?? [];\n\t\tthis.additionalPromptTemplatePaths = options.additionalPromptTemplatePaths ?? [];\n\t\tthis.additionalThemePaths = options.additionalThemePaths ?? [];\n\t\tthis.noExtensions = options.noExtensions ?? false;\n\t\tthis.extensionFactories = options.extensionFactories ?? [];\n\t\tthis.noSkills = options.noSkills ?? false;\n\t\tthis.noPromptTemplates = options.noPromptTemplates ?? false;\n\t\tthis.noThemes = options.noThemes ?? false;\n\t\tthis.noContextFiles = options.noContextFiles ?? false;\n\t\tthis.systemPromptSource = options.systemPrompt;\n\t\tthis.appendSystemPromptSource = options.appendSystemPrompt;\n\t\tthis.extensionsOverride = options.extensionsOverride;\n\t\tthis.skillsOverride = options.skillsOverride;\n\t\tthis.promptsOverride = options.promptsOverride;\n\t\tthis.themesOverride = options.themesOverride;\n\t\tthis.agentsFilesOverride = options.agentsFilesOverride;\n\t\tthis.systemPromptOverride = options.systemPromptOverride;\n\t\tthis.appendSystemPromptOverride = options.appendSystemPromptOverride;\n\n\t\tthis.extensionsResult = { extensions: [], errors: [], runtime: createExtensionRuntime() };\n\t\tthis.skills = [];\n\t\tthis.skillDiagnostics = [];\n\t\tthis.prompts = [];\n\t\tthis.promptDiagnostics = [];\n\t\tthis.themes = [];\n\t\tthis.themeDiagnostics = [];\n\t\tthis.agentsFiles = [];\n\t\tthis.appendSystemPrompt = [];\n\t\tthis.lastSkillPaths = [];\n\t\tthis.extensionSkillSourceInfos = new Map();\n\t\tthis.extensionPromptSourceInfos = new Map();\n\t\tthis.extensionThemeSourceInfos = new Map();\n\t\tthis.lastPromptPaths = [];\n\t\tthis.lastThemePaths = [];\n\t}\n\n\tgetExtensions(): LoadExtensionsResult {\n\t\treturn this.extensionsResult;\n\t}\n\n\tgetSkills(): { skills: Skill[]; diagnostics: ResourceDiagnostic[] } {\n\t\treturn { skills: this.skills, diagnostics: this.skillDiagnostics };\n\t}\n\n\tgetPrompts(): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] } {\n\t\treturn { prompts: this.prompts, diagnostics: this.promptDiagnostics };\n\t}\n\n\tgetThemes(): { themes: Theme[]; diagnostics: ResourceDiagnostic[] } {\n\t\treturn { themes: this.themes, diagnostics: this.themeDiagnostics };\n\t}\n\n\tgetAgentsFiles(): { agentsFiles: Array<{ path: string; content?: string }> } {\n\t\treturn { agentsFiles: this.agentsFiles };\n\t}\n\n\tgetSystemPrompt(): string | undefined {\n\t\treturn this.systemPrompt;\n\t}\n\n\tgetAppendSystemPrompt(): string[] {\n\t\treturn this.appendSystemPrompt;\n\t}\n\n\t/**\n\t * Get all discoverable extension paths (enabled and disabled).\n\t * Used for profile resource filtering to show the full universe of available extensions.\n\t */\n\tasync getDiscoverableExtensionPaths(): Promise<string[]> {\n\t\tawait this.settingsManager.reload();\n\t\tconst resolvedPaths = await this.packageManager.resolve();\n\t\tconst cliExtensionPaths = await this.packageManager.resolveExtensionSources(this.additionalExtensionPaths, {\n\t\t\ttemporary: true,\n\t\t});\n\t\t// Return all paths (enabled and disabled) from both resolved and CLI sources\n\t\tconst allPaths = new Set<string>();\n\t\tfor (const resource of resolvedPaths.extensions) {\n\t\t\tallPaths.add(resource.path);\n\t\t}\n\t\tfor (const resource of cliExtensionPaths.extensions) {\n\t\t\tallPaths.add(resource.path);\n\t\t}\n\t\treturn Array.from(allPaths);\n\t}\n\n\t/**\n\t * Get a loaded extension by path.\n\t * Matches by path or resolvedPath.\n\t */\n\tgetLoadedExtension(extensionPath: string): Extension | undefined {\n\t\treturn this.extensionsResult.extensions.find(\n\t\t\t(ext) => ext.path === extensionPath || ext.resolvedPath === extensionPath,\n\t\t);\n\t}\n\n\t/**\n\t * Remove and return a loaded extension from the extensions array.\n\t */\n\tremoveLoadedExtension(extensionPath: string): Extension | undefined {\n\t\tconst index = this.extensionsResult.extensions.findIndex(\n\t\t\t(ext) => ext.path === extensionPath || ext.resolvedPath === extensionPath,\n\t\t);\n\t\tif (index === -1) return undefined;\n\t\tconst [ext] = this.extensionsResult.extensions.splice(index, 1);\n\t\treturn ext;\n\t}\n\n\t/**\n\t * Load a single extension with fresh import, reusing the shared runtime.\n\t * Returns the loaded extension or null with error details.\n\t */\n\tasync loadSingleExtension(extensionPath: string): Promise<{ extension: Extension | null; error: string | null }> {\n\t\tconst result = await loadExtension(extensionPath, this.cwd, this.eventBus, this.extensionsResult.runtime, {\n\t\t\tfresh: true,\n\t\t});\n\t\tif (result.extension && !result.error) {\n\t\t\tconst loaded = result.extension;\n\t\t\t// Drop any stale generation at the same path, then register the freshly loaded one so\n\t\t\t// _buildRuntime() aggregates it.\n\t\t\tthis.extensionsResult.extensions = this.extensionsResult.extensions.filter(\n\t\t\t\t(e) => e.path !== loaded.path && e.resolvedPath !== loaded.resolvedPath,\n\t\t\t);\n\t\t\tthis.extensionsResult.extensions.push(loaded);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Apply the active resource-profile allow/block to a list of discovered resource paths.\n\t * Used for every source that does NOT pass through the package manager's\n\t * resolve/applyResourceProfileFilters pipeline (external roots, bundled defaults, and\n\t * extension-contributed resources) so no source bypasses the active profile.\n\t */\n\tprivate filterPathsByProfile(paths: string[], kind: ResourceProfileKind): string[] {\n\t\tconst filter = this.settingsManager.getResourceProfileFilter(kind);\n\t\tif (filter.allow.length === 0 && filter.block.length === 0) return paths;\n\t\treturn paths.filter((p) => {\n\t\t\tconst allowed = filter.allow.length === 0 || matchesResourceProfilePattern(p, filter.allow, this.cwd);\n\t\t\tconst blocked = matchesResourceProfilePattern(p, filter.block, this.cwd);\n\t\t\treturn allowed && !blocked;\n\t\t});\n\t}\n\n\textendResources(paths: ResourceExtensionPaths): void {\n\t\t// Extension-contributed resources (via the resources_discover event) must respect the\n\t\t// active resource profile too — otherwise an allowed extension can re-introduce skills/\n\t\t// prompts/themes the profile blocks.\n\t\tconst allowPath = (entry: { path: string }, kind: ResourceProfileKind): boolean =>\n\t\t\tthis.filterPathsByProfile([entry.path], kind).length > 0;\n\t\tconst skillPaths = this.normalizeExtensionPaths(paths.skillPaths ?? []).filter((e) => allowPath(e, \"skills\"));\n\t\tconst promptPaths = this.normalizeExtensionPaths(paths.promptPaths ?? []).filter((e) => allowPath(e, \"prompts\"));\n\t\tconst themePaths = this.normalizeExtensionPaths(paths.themePaths ?? []).filter((e) => allowPath(e, \"themes\"));\n\n\t\tfor (const entry of skillPaths) {\n\t\t\tthis.extensionSkillSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));\n\t\t}\n\t\tfor (const entry of promptPaths) {\n\t\t\tthis.extensionPromptSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));\n\t\t}\n\t\tfor (const entry of themePaths) {\n\t\t\tthis.extensionThemeSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));\n\t\t}\n\n\t\tif (skillPaths.length > 0) {\n\t\t\tthis.lastSkillPaths = this.mergePaths(\n\t\t\t\tthis.lastSkillPaths,\n\t\t\t\tskillPaths.map((entry) => entry.path),\n\t\t\t);\n\t\t\tthis.updateSkillsFromPaths(this.lastSkillPaths);\n\t\t}\n\n\t\tif (promptPaths.length > 0) {\n\t\t\tthis.lastPromptPaths = this.mergePaths(\n\t\t\t\tthis.lastPromptPaths,\n\t\t\t\tpromptPaths.map((entry) => entry.path),\n\t\t\t);\n\t\t\tthis.updatePromptsFromPaths(this.lastPromptPaths);\n\t\t}\n\n\t\tif (themePaths.length > 0) {\n\t\t\tthis.lastThemePaths = this.mergePaths(\n\t\t\t\tthis.lastThemePaths,\n\t\t\t\tthemePaths.map((entry) => entry.path),\n\t\t\t);\n\t\t\tthis.updateThemesFromPaths(this.lastThemePaths);\n\t\t}\n\t}\n\n\tprivate createSnapshot(): ResourceLoaderSnapshot {\n\t\treturn {\n\t\t\textensionsResult: this.extensionsResult,\n\t\t\tskills: this.skills,\n\t\t\tskillDiagnostics: this.skillDiagnostics,\n\t\t\tprompts: this.prompts,\n\t\t\tpromptDiagnostics: this.promptDiagnostics,\n\t\t\tthemes: this.themes,\n\t\t\tthemeDiagnostics: this.themeDiagnostics,\n\t\t\tagentsFiles: this.agentsFiles,\n\t\t\tsystemPrompt: this.systemPrompt,\n\t\t\tappendSystemPrompt: this.appendSystemPrompt,\n\t\t\tlastSkillPaths: this.lastSkillPaths,\n\t\t\textensionSkillSourceInfos: this.extensionSkillSourceInfos,\n\t\t\textensionPromptSourceInfos: this.extensionPromptSourceInfos,\n\t\t\textensionThemeSourceInfos: this.extensionThemeSourceInfos,\n\t\t\tlastPromptPaths: this.lastPromptPaths,\n\t\t\tlastThemePaths: this.lastThemePaths,\n\t\t};\n\t}\n\n\tprivate restoreSnapshot(snapshot: ResourceLoaderSnapshot): void {\n\t\tthis.extensionsResult = snapshot.extensionsResult;\n\t\tthis.skills = snapshot.skills;\n\t\tthis.skillDiagnostics = snapshot.skillDiagnostics;\n\t\tthis.prompts = snapshot.prompts;\n\t\tthis.promptDiagnostics = snapshot.promptDiagnostics;\n\t\tthis.themes = snapshot.themes;\n\t\tthis.themeDiagnostics = snapshot.themeDiagnostics;\n\t\tthis.agentsFiles = snapshot.agentsFiles;\n\t\tthis.systemPrompt = snapshot.systemPrompt;\n\t\tthis.appendSystemPrompt = snapshot.appendSystemPrompt;\n\t\tthis.lastSkillPaths = snapshot.lastSkillPaths;\n\t\tthis.extensionSkillSourceInfos = snapshot.extensionSkillSourceInfos;\n\t\tthis.extensionPromptSourceInfos = snapshot.extensionPromptSourceInfos;\n\t\tthis.extensionThemeSourceInfos = snapshot.extensionThemeSourceInfos;\n\t\tthis.lastPromptPaths = snapshot.lastPromptPaths;\n\t\tthis.lastThemePaths = snapshot.lastThemePaths;\n\t}\n\n\tasync commitReload(): Promise<void> {\n\t\tif (!this.pendingReloadSnapshot) return;\n\t\tawait disposeExtensionEventSubscriptions(this.pendingReloadSnapshot.extensionsResult.extensions);\n\t\tthis.pendingReloadSnapshot = undefined;\n\t}\n\n\tasync rollbackReload(): Promise<void> {\n\t\tif (!this.pendingReloadSnapshot) return;\n\t\tawait disposeExtensionEventSubscriptions(this.extensionsResult.extensions);\n\t\tthis.restoreSnapshot(this.pendingReloadSnapshot);\n\t\tthis.pendingReloadSnapshot = undefined;\n\t}\n\n\tasync reload(options: ResourceReloadOptions = {}): Promise<void> {\n\t\tconst snapshot = this.createSnapshot();\n\t\tthis.pendingReloadSnapshot = undefined;\n\t\ttry {\n\t\t\tawait this.settingsManager.reload();\n\t\t\tconst resolvedPaths = await this.packageManager.resolve();\n\t\t\tconst cliExtensionPaths = await this.packageManager.resolveExtensionSources(this.additionalExtensionPaths, {\n\t\t\t\ttemporary: true,\n\t\t\t});\n\t\t\tconst metadataByPath = new Map<string, PathMetadata>();\n\n\t\t\tthis.extensionSkillSourceInfos = new Map();\n\t\t\tthis.extensionPromptSourceInfos = new Map();\n\t\t\tthis.extensionThemeSourceInfos = new Map();\n\n\t\t\t// Helper to extract enabled paths and store metadata\n\t\t\tconst getEnabledResources = (\n\t\t\t\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\t\t\t): Array<{ path: string; enabled: boolean; metadata: PathMetadata }> => {\n\t\t\t\tfor (const r of resources) {\n\t\t\t\t\tif (!metadataByPath.has(r.path)) {\n\t\t\t\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn resources.filter((r) => r.enabled);\n\t\t\t};\n\n\t\t\tconst getEnabledPaths = (\n\t\t\t\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\t\t\t): string[] => getEnabledResources(resources).map((r) => r.path);\n\t\t\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions);\n\t\t\tconst enabledSkillResources = getEnabledResources(resolvedPaths.skills);\n\t\t\tconst enabledPrompts = getEnabledPaths(resolvedPaths.prompts);\n\t\t\tconst enabledThemes = getEnabledPaths(resolvedPaths.themes);\n\n\t\t\tconst mapSkillPath = (resource: { path: string; metadata: PathMetadata }): string => {\n\t\t\t\tif (resource.metadata.source !== \"auto\" && resource.metadata.origin !== \"package\") {\n\t\t\t\t\treturn resource.path;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = statSync(resource.path);\n\t\t\t\t\tif (!stats.isDirectory()) {\n\t\t\t\t\t\treturn resource.path;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\treturn resource.path;\n\t\t\t\t}\n\t\t\t\tconst skillFile = join(resource.path, \"SKILL.md\");\n\t\t\t\tif (existsSync(skillFile)) {\n\t\t\t\t\tif (!metadataByPath.has(skillFile)) {\n\t\t\t\t\t\tmetadataByPath.set(skillFile, resource.metadata);\n\t\t\t\t\t}\n\t\t\t\t\treturn skillFile;\n\t\t\t\t}\n\t\t\t\treturn resource.path;\n\t\t\t};\n\n\t\t\tconst enabledSkills = enabledSkillResources.map(mapSkillPath);\n\n\t\t\t// Add CLI paths metadata\n\t\t\tfor (const r of cliExtensionPaths.extensions) {\n\t\t\t\tif (!metadataByPath.has(r.path)) {\n\t\t\t\t\tmetadataByPath.set(r.path, { source: \"cli\", scope: \"temporary\", origin: \"top-level\" });\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const r of cliExtensionPaths.skills) {\n\t\t\t\tif (!metadataByPath.has(r.path)) {\n\t\t\t\t\tmetadataByPath.set(r.path, { source: \"cli\", scope: \"temporary\", origin: \"top-level\" });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions);\n\t\t\tconst cliEnabledSkills = getEnabledPaths(cliExtensionPaths.skills);\n\t\t\tconst cliEnabledPrompts = getEnabledPaths(cliExtensionPaths.prompts);\n\t\t\tconst cliEnabledThemes = getEnabledPaths(cliExtensionPaths.themes);\n\n\t\t\t// Gather effective external resource roots\n\t\t\tconst effectiveRoots = this.settingsManager.getEffectiveExternalResourceRoots();\n\n\t\t\tconst filterPathsByProfile = (paths: string[], kind: ResourceProfileKind): string[] =>\n\t\t\t\tthis.filterPathsByProfile(paths, kind);\n\n\t\t\t// Discover external extensions\n\t\t\tconst externalExtensions: string[] = [];\n\t\t\tfor (const root of effectiveRoots) {\n\t\t\t\tconst extDir = join(root, \"extensions\");\n\t\t\t\tif (existsSync(extDir)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst entries = readdirSync(extDir, { withFileTypes: true });\n\t\t\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t\t\tlet isDir = entry.isDirectory();\n\t\t\t\t\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst stats = statSync(join(extDir, entry.name));\n\t\t\t\t\t\t\t\t\tisDir = stats.isDirectory();\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isDir) {\n\t\t\t\t\t\t\t\tconst entryPath = join(extDir, entry.name);\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\texistsSync(join(entryPath, \"index.ts\")) ||\n\t\t\t\t\t\t\t\t\texistsSync(join(entryPath, \"index.js\")) ||\n\t\t\t\t\t\t\t\t\texistsSync(join(entryPath, \"package.json\"))\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\texternalExtensions.push(entryPath);\n\t\t\t\t\t\t\t\t\tmetadataByPath.set(entryPath, { source: \"external\", scope: \"user\", origin: \"top-level\" });\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\t\t\t\t\t} catch {\n\t\t\t\t\t\t// silent\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extensionPaths = this.noExtensions\n\t\t\t\t? cliEnabledExtensions\n\t\t\t\t: this.mergePaths(cliEnabledExtensions, [\n\t\t\t\t\t\t...enabledExtensions,\n\t\t\t\t\t\t...filterPathsByProfile(externalExtensions, \"extensions\"),\n\t\t\t\t\t]);\n\n\t\t\tconst extensionsResult = await loadExtensions(extensionPaths, this.cwd, this.eventBus);\n\t\t\tconst inlineExtensions = await this.loadExtensionFactories(extensionsResult.runtime);\n\t\t\textensionsResult.extensions.push(...inlineExtensions.extensions);\n\t\t\textensionsResult.errors.push(...inlineExtensions.errors);\n\n\t\t\t// Detect extension conflicts (tools, commands, flags with same names from different extensions)\n\t\t\t// Keep all extensions loaded. Conflicts are reported as diagnostics, and precedence is handled by load order.\n\t\t\tconst conflicts = this.detectExtensionConflicts(extensionsResult.extensions);\n\t\t\tfor (const conflict of conflicts) {\n\t\t\t\textensionsResult.errors.push({ path: conflict.path, error: conflict.message });\n\t\t\t}\n\n\t\t\tfor (const p of this.additionalExtensionPaths) {\n\t\t\t\tif (isLocalPath(p)) {\n\t\t\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\t\t\tif (!existsSync(resolved)) {\n\t\t\t\t\t\textensionsResult.errors.push({ path: resolved, error: `Extension path does not exist: ${resolved}` });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst resolvedExtensionsResult = this.extensionsOverride\n\t\t\t\t? this.extensionsOverride(extensionsResult)\n\t\t\t\t: extensionsResult;\n\t\t\tif (options.failOnExtensionErrors && resolvedExtensionsResult.errors.length > 0) {\n\t\t\t\tconst summary = resolvedExtensionsResult.errors\n\t\t\t\t\t.slice(0, 6)\n\t\t\t\t\t.map((error) => `${error.path}: ${error.error}`)\n\t\t\t\t\t.join(\"; \");\n\t\t\t\tthrow new Error(`Extension reload failed preflight: ${summary}`);\n\t\t\t}\n\t\t\tthis.extensionsResult = resolvedExtensionsResult;\n\t\t\tthis.applyExtensionSourceInfo(this.extensionsResult.extensions, metadataByPath);\n\n\t\t\t// Discover external skills\n\t\t\tconst externalSkills: string[] = [];\n\t\t\tfor (const root of effectiveRoots) {\n\t\t\t\tconst skillsDir = join(root, \"skills\");\n\t\t\t\tif (existsSync(skillsDir)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst entries = readdirSync(skillsDir, { withFileTypes: true });\n\t\t\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t\t\tlet isDir = entry.isDirectory();\n\t\t\t\t\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst stats = statSync(join(skillsDir, entry.name));\n\t\t\t\t\t\t\t\t\tisDir = stats.isDirectory();\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isDir) {\n\t\t\t\t\t\t\t\tconst entryPath = join(skillsDir, entry.name);\n\t\t\t\t\t\t\t\tconst skillFile = join(entryPath, \"SKILL.md\");\n\t\t\t\t\t\t\t\tconst targetPath = existsSync(skillFile) ? skillFile : entryPath;\n\t\t\t\t\t\t\t\texternalSkills.push(targetPath);\n\t\t\t\t\t\t\t\tmetadataByPath.set(targetPath, { source: \"external\", scope: \"user\", origin: \"top-level\" });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// silent\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Build skill paths with precedence: CLI > user/project > bundled > additional.\n\t\t\t// Bundled skills are expanded into individual SKILL.md paths so they pass through the\n\t\t\t// resource-profile filter exactly like user/external skills (no source bypasses the profile).\n\t\t\tconst bundledSkillsDir = getBundledSkillsDir();\n\t\t\tconst bundledSkillPaths: string[] = [];\n\t\t\tif (existsSync(bundledSkillsDir)) {\n\t\t\t\ttry {\n\t\t\t\t\tfor (const entry of readdirSync(bundledSkillsDir, { withFileTypes: true })) {\n\t\t\t\t\t\tif (!entry.isDirectory()) continue;\n\t\t\t\t\t\tconst entryPath = join(bundledSkillsDir, entry.name);\n\t\t\t\t\t\tconst skillFile = join(entryPath, \"SKILL.md\");\n\t\t\t\t\t\tbundledSkillPaths.push(existsSync(skillFile) ? skillFile : entryPath);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// silent\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst skillPaths = this.noSkills\n\t\t\t\t? this.mergePaths([...cliEnabledSkills], this.additionalSkillPaths)\n\t\t\t\t: this.mergePaths(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t...cliEnabledSkills,\n\t\t\t\t\t\t\t...enabledSkills,\n\t\t\t\t\t\t\t...filterPathsByProfile(externalSkills, \"skills\"),\n\t\t\t\t\t\t\t...filterPathsByProfile(bundledSkillPaths, \"skills\"),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tthis.additionalSkillPaths,\n\t\t\t\t\t);\n\n\t\t\tthis.lastSkillPaths = skillPaths;\n\t\t\tthis.updateSkillsFromPaths(skillPaths, metadataByPath);\n\t\t\tfor (const p of this.additionalSkillPaths) {\n\t\t\t\tif (isLocalPath(p)) {\n\t\t\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\t\t\tif (!existsSync(resolved) && !this.skillDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\t\tthis.skillDiagnostics.push({ type: \"error\", message: \"Skill path does not exist\", path: resolved });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Discover external prompts\n\t\t\tconst externalPrompts: string[] = [];\n\t\t\tfor (const root of effectiveRoots) {\n\t\t\t\tconst promptsDir = join(root, \"prompts\");\n\t\t\t\tif (existsSync(promptsDir)) {\n\t\t\t\t\tconst files = collectFilesRecursively(promptsDir, /\\.md$/);\n\t\t\t\t\tfor (const f of files) {\n\t\t\t\t\t\texternalPrompts.push(f);\n\t\t\t\t\t\tmetadataByPath.set(f, { source: \"external\", scope: \"user\", origin: \"top-level\" });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Bundled prompts expanded into individual files so they pass through the profile filter too.\n\t\t\tconst bundledPromptsDir = getBundledPromptsDir();\n\t\t\tconst bundledPromptPaths = existsSync(bundledPromptsDir)\n\t\t\t\t? collectFilesRecursively(bundledPromptsDir, /\\.md$/)\n\t\t\t\t: [];\n\t\t\tconst promptPaths = this.noPromptTemplates\n\t\t\t\t? this.mergePaths(cliEnabledPrompts, this.additionalPromptTemplatePaths)\n\t\t\t\t: this.mergePaths(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t...cliEnabledPrompts,\n\t\t\t\t\t\t\t...enabledPrompts,\n\t\t\t\t\t\t\t...filterPathsByProfile(externalPrompts, \"prompts\"),\n\t\t\t\t\t\t\t...filterPathsByProfile(bundledPromptPaths, \"prompts\"),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tthis.additionalPromptTemplatePaths,\n\t\t\t\t\t);\n\n\t\t\tthis.lastPromptPaths = promptPaths;\n\t\t\tthis.updatePromptsFromPaths(promptPaths, metadataByPath);\n\t\t\tfor (const p of this.additionalPromptTemplatePaths) {\n\t\t\t\tif (isLocalPath(p)) {\n\t\t\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\t\t\tif (!existsSync(resolved) && !this.promptDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\t\tthis.promptDiagnostics.push({\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\tmessage: \"Prompt template path does not exist\",\n\t\t\t\t\t\t\tpath: resolved,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Discover external themes\n\t\t\tconst externalThemes: string[] = [];\n\t\t\tfor (const root of effectiveRoots) {\n\t\t\t\tconst themesDir = join(root, \"themes\");\n\t\t\t\tif (existsSync(themesDir)) {\n\t\t\t\t\tconst files = collectFilesRecursively(themesDir, /\\.json$/);\n\t\t\t\t\tfor (const f of files) {\n\t\t\t\t\t\texternalThemes.push(f);\n\t\t\t\t\t\tmetadataByPath.set(f, { source: \"external\", scope: \"user\", origin: \"top-level\" });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst themePaths = this.noThemes\n\t\t\t\t? this.mergePaths(cliEnabledThemes, this.additionalThemePaths)\n\t\t\t\t: this.mergePaths(\n\t\t\t\t\t\t[...cliEnabledThemes, ...enabledThemes, ...filterPathsByProfile(externalThemes, \"themes\")],\n\t\t\t\t\t\tthis.additionalThemePaths,\n\t\t\t\t\t);\n\n\t\t\tthis.lastThemePaths = themePaths;\n\t\t\tthis.updateThemesFromPaths(themePaths, metadataByPath);\n\t\t\tfor (const p of this.additionalThemePaths) {\n\t\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\t\tif (!existsSync(resolved) && !this.themeDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\tthis.themeDiagnostics.push({ type: \"error\", message: \"Theme path does not exist\", path: resolved });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst rawAgentsFiles = this.noContextFiles\n\t\t\t\t? []\n\t\t\t\t: loadProjectContextFiles({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.agentDir,\n\t\t\t\t\t\tprojectTrusted: this.settingsManager.isProjectTrusted(),\n\t\t\t\t\t});\n\t\t\tconst agentEmbeddedProfiles: Record<string, ResourceProfileSettings> = {};\n\t\t\tconst activeProfileNames = this.settingsManager.getActiveResourceProfileNames();\n\t\t\tfor (const file of rawAgentsFiles) {\n\t\t\t\ttry {\n\t\t\t\t\tconst rawContent = readFileSync(file.path, \"utf-8\");\n\t\t\t\t\tconst { profiles } = parseResourceProfileBlocks(rawContent, { profileNames: activeProfileNames });\n\t\t\t\t\tObject.assign(agentEmbeddedProfiles, mergeResourceProfileMap(agentEmbeddedProfiles, profiles));\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t\tthis.settingsManager.addDiscoveredResourceProfileDefinitions(agentEmbeddedProfiles);\n\t\t\tconst agentProfileFilter = this.settingsManager.getResourceProfileFilter(\"agents\");\n\t\t\tconst agentsFiles = {\n\t\t\t\tagentsFiles: rawAgentsFiles\n\t\t\t\t\t.filter((file) => {\n\t\t\t\t\t\tconst allowed =\n\t\t\t\t\t\t\tagentProfileFilter.allow.length === 0 ||\n\t\t\t\t\t\t\tmatchesResourceProfilePattern(file.path, agentProfileFilter.allow, this.cwd);\n\t\t\t\t\t\tconst blocked = matchesResourceProfilePattern(file.path, agentProfileFilter.block, this.cwd);\n\t\t\t\t\t\treturn allowed && !blocked;\n\t\t\t\t\t})\n\t\t\t\t\t.map((file) => ({\n\t\t\t\t\t\t...file,\n\t\t\t\t\t\tcontent: file.content ? stripResourceProfileBlocks(file.content) : file.content,\n\t\t\t\t\t})),\n\t\t\t};\n\t\t\tconst resolvedAgentsFiles = this.agentsFilesOverride ? this.agentsFilesOverride(agentsFiles) : agentsFiles;\n\t\t\tthis.agentsFiles = resolvedAgentsFiles.agentsFiles;\n\n\t\t\tconst baseSystemPrompt = resolvePromptInput(\n\t\t\t\tthis.systemPromptSource ?? this.discoverSystemPromptFile(),\n\t\t\t\t\"system prompt\",\n\t\t\t);\n\t\t\tthis.systemPrompt = this.systemPromptOverride ? this.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;\n\n\t\t\tconst appendSources =\n\t\t\t\tthis.appendSystemPromptSource ??\n\t\t\t\t(this.discoverAppendSystemPromptFile() ? [this.discoverAppendSystemPromptFile()!] : []);\n\t\t\tconst baseAppend = appendSources\n\t\t\t\t.map((s) => resolvePromptInput(s, \"append system prompt\"))\n\t\t\t\t.filter((s): s is string => s !== undefined);\n\t\t\tthis.appendSystemPrompt = this.appendSystemPromptOverride\n\t\t\t\t? this.appendSystemPromptOverride(baseAppend)\n\t\t\t\t: baseAppend;\n\t\t\tif (options.deferExtensionDispose) {\n\t\t\t\tthis.pendingReloadSnapshot = snapshot;\n\t\t\t} else {\n\t\t\t\tawait disposeExtensionEventSubscriptions(snapshot.extensionsResult.extensions);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (this.extensionsResult !== snapshot.extensionsResult) {\n\t\t\t\tawait disposeExtensionEventSubscriptions(this.extensionsResult.extensions);\n\t\t\t}\n\t\t\tthis.restoreSnapshot(snapshot);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate normalizeExtensionPaths(\n\t\tentries: Array<{ path: string; metadata: PathMetadata }>,\n\t): Array<{ path: string; metadata: PathMetadata }> {\n\t\treturn entries.map((entry) => {\n\t\t\tconst metadata = entry.metadata.baseDir\n\t\t\t\t? { ...entry.metadata, baseDir: this.resolveResourcePath(entry.metadata.baseDir) }\n\t\t\t\t: entry.metadata;\n\t\t\treturn {\n\t\t\t\tpath: this.resolveResourcePath(entry.path),\n\t\t\t\tmetadata,\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate updateSkillsFromPaths(skillPaths: string[], metadataByPath?: Map<string, PathMetadata>): void {\n\t\tlet skillsResult: { skills: Skill[]; diagnostics: ResourceDiagnostic[] };\n\t\tif (this.noSkills && skillPaths.length === 0) {\n\t\t\tskillsResult = { skills: [], diagnostics: [] };\n\t\t} else {\n\t\t\tskillsResult = loadSkills({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tagentDir: this.agentDir,\n\t\t\t\tskillPaths,\n\t\t\t\tincludeDefaults: false,\n\t\t\t});\n\t\t}\n\t\tconst resolvedSkills = this.skillsOverride ? this.skillsOverride(skillsResult) : skillsResult;\n\t\tthis.skills = resolvedSkills.skills.map((skill) => ({\n\t\t\t...skill,\n\t\t\tsourceInfo:\n\t\t\t\tthis.findSourceInfoForPath(skill.filePath, this.extensionSkillSourceInfos, metadataByPath) ??\n\t\t\t\tskill.sourceInfo ??\n\t\t\t\tthis.getDefaultSourceInfoForPath(skill.filePath),\n\t\t}));\n\t\tthis.skillDiagnostics = resolvedSkills.diagnostics;\n\t}\n\n\tprivate updatePromptsFromPaths(promptPaths: string[], metadataByPath?: Map<string, PathMetadata>): void {\n\t\tlet promptsResult: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] };\n\t\tif (this.noPromptTemplates && promptPaths.length === 0) {\n\t\t\tpromptsResult = { prompts: [], diagnostics: [] };\n\t\t} else {\n\t\t\tconst allPrompts = loadPromptTemplates({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tagentDir: this.agentDir,\n\t\t\t\tpromptPaths,\n\t\t\t\tincludeDefaults: false,\n\t\t\t});\n\t\t\tpromptsResult = this.dedupePrompts(allPrompts);\n\t\t}\n\t\tconst resolvedPrompts = this.promptsOverride ? this.promptsOverride(promptsResult) : promptsResult;\n\t\tthis.prompts = resolvedPrompts.prompts.map((prompt) => ({\n\t\t\t...prompt,\n\t\t\tsourceInfo:\n\t\t\t\tthis.findSourceInfoForPath(prompt.filePath, this.extensionPromptSourceInfos, metadataByPath) ??\n\t\t\t\tprompt.sourceInfo ??\n\t\t\t\tthis.getDefaultSourceInfoForPath(prompt.filePath),\n\t\t}));\n\t\tthis.promptDiagnostics = resolvedPrompts.diagnostics;\n\t}\n\n\tprivate updateThemesFromPaths(themePaths: string[], metadataByPath?: Map<string, PathMetadata>): void {\n\t\tlet themesResult: { themes: Theme[]; diagnostics: ResourceDiagnostic[] };\n\t\tif (this.noThemes && themePaths.length === 0) {\n\t\t\tthemesResult = { themes: [], diagnostics: [] };\n\t\t} else {\n\t\t\tconst loaded = this.loadThemes(themePaths, false);\n\t\t\tconst deduped = this.dedupeThemes(loaded.themes);\n\t\t\tthemesResult = { themes: deduped.themes, diagnostics: [...loaded.diagnostics, ...deduped.diagnostics] };\n\t\t}\n\t\tconst resolvedThemes = this.themesOverride ? this.themesOverride(themesResult) : themesResult;\n\t\tthis.themes = resolvedThemes.themes.map((theme) => {\n\t\t\tconst sourcePath = theme.sourcePath;\n\t\t\ttheme.sourceInfo = sourcePath\n\t\t\t\t? (this.findSourceInfoForPath(sourcePath, this.extensionThemeSourceInfos, metadataByPath) ??\n\t\t\t\t\ttheme.sourceInfo ??\n\t\t\t\t\tthis.getDefaultSourceInfoForPath(sourcePath))\n\t\t\t\t: theme.sourceInfo;\n\t\t\treturn theme;\n\t\t});\n\t\tthis.themeDiagnostics = resolvedThemes.diagnostics;\n\t}\n\n\tprivate applyExtensionSourceInfo(extensions: Extension[], metadataByPath: Map<string, PathMetadata>): void {\n\t\tfor (const extension of extensions) {\n\t\t\textension.sourceInfo =\n\t\t\t\tthis.findSourceInfoForPath(extension.path, undefined, metadataByPath) ??\n\t\t\t\tthis.getDefaultSourceInfoForPath(extension.path);\n\t\t\tfor (const command of extension.commands.values()) {\n\t\t\t\tcommand.sourceInfo = extension.sourceInfo;\n\t\t\t}\n\t\t\tfor (const tool of extension.tools.values()) {\n\t\t\t\ttool.sourceInfo = extension.sourceInfo;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate findSourceInfoForPath(\n\t\tresourcePath: string,\n\t\textraSourceInfos?: Map<string, SourceInfo>,\n\t\tmetadataByPath?: Map<string, PathMetadata>,\n\t): SourceInfo | undefined {\n\t\tif (!resourcePath) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (resourcePath.startsWith(\"<\")) {\n\t\t\treturn this.getDefaultSourceInfoForPath(resourcePath);\n\t\t}\n\n\t\tconst normalizedResourcePath = resolve(resourcePath);\n\t\tif (extraSourceInfos) {\n\t\t\tfor (const [sourcePath, sourceInfo] of extraSourceInfos.entries()) {\n\t\t\t\tconst normalizedSourcePath = resolve(sourcePath);\n\t\t\t\tif (\n\t\t\t\t\tnormalizedResourcePath === normalizedSourcePath ||\n\t\t\t\t\tnormalizedResourcePath.startsWith(`${normalizedSourcePath}${sep}`)\n\t\t\t\t) {\n\t\t\t\t\treturn { ...sourceInfo, path: resourcePath };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (metadataByPath) {\n\t\t\tconst exact = metadataByPath.get(normalizedResourcePath) ?? metadataByPath.get(resourcePath);\n\t\t\tif (exact) {\n\t\t\t\treturn createSourceInfo(resourcePath, exact);\n\t\t\t}\n\n\t\t\tfor (const [sourcePath, metadata] of metadataByPath.entries()) {\n\t\t\t\tconst normalizedSourcePath = resolve(sourcePath);\n\t\t\t\tif (\n\t\t\t\t\tnormalizedResourcePath === normalizedSourcePath ||\n\t\t\t\t\tnormalizedResourcePath.startsWith(`${normalizedSourcePath}${sep}`)\n\t\t\t\t) {\n\t\t\t\t\treturn createSourceInfo(resourcePath, metadata);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate getDefaultSourceInfoForPath(filePath: string): SourceInfo {\n\t\tif (filePath.startsWith(\"<\") && filePath.endsWith(\">\")) {\n\t\t\treturn {\n\t\t\t\tpath: filePath,\n\t\t\t\tsource: filePath.slice(1, -1).split(\":\")[0] || \"temporary\",\n\t\t\t\tscope: \"temporary\",\n\t\t\t\torigin: \"top-level\",\n\t\t\t};\n\t\t}\n\n\t\tconst normalizedPath = resolve(filePath);\n\t\tconst agentRoots = [\n\t\t\tjoin(this.agentDir, \"skills\"),\n\t\t\tjoin(this.agentDir, \"prompts\"),\n\t\t\tjoin(this.agentDir, \"themes\"),\n\t\t\tjoin(this.agentDir, \"extensions\"),\n\t\t];\n\t\tconst projectRoots = [\n\t\t\tjoin(this.cwd, CONFIG_DIR_NAME, \"skills\"),\n\t\t\tjoin(this.cwd, CONFIG_DIR_NAME, \"prompts\"),\n\t\t\tjoin(this.cwd, CONFIG_DIR_NAME, \"themes\"),\n\t\t\tjoin(this.cwd, CONFIG_DIR_NAME, \"extensions\"),\n\t\t];\n\n\t\tfor (const root of agentRoots) {\n\t\t\tif (this.isUnderPath(normalizedPath, root)) {\n\t\t\t\treturn { path: filePath, source: \"local\", scope: \"user\", origin: \"top-level\", baseDir: root };\n\t\t\t}\n\t\t}\n\n\t\tfor (const root of projectRoots) {\n\t\t\tif (this.isUnderPath(normalizedPath, root)) {\n\t\t\t\treturn { path: filePath, source: \"local\", scope: \"project\", origin: \"top-level\", baseDir: root };\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tpath: filePath,\n\t\t\tsource: \"local\",\n\t\t\tscope: \"temporary\",\n\t\t\torigin: \"top-level\",\n\t\t\tbaseDir: statSync(normalizedPath).isDirectory() ? normalizedPath : resolve(normalizedPath, \"..\"),\n\t\t};\n\t}\n\n\tprivate mergePaths(primary: string[], additional: string[]): string[] {\n\t\tconst merged: string[] = [];\n\t\tconst seen = new Set<string>();\n\n\t\tfor (const p of [...primary, ...additional]) {\n\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\tconst canonicalPath = canonicalizePath(resolved);\n\t\t\tif (seen.has(canonicalPath)) continue;\n\t\t\tseen.add(canonicalPath);\n\t\t\tmerged.push(resolved);\n\t\t}\n\n\t\treturn merged;\n\t}\n\n\tprivate resolveResourcePath(p: string): string {\n\t\treturn resolvePath(p, this.cwd, { trim: true });\n\t}\n\n\tprivate loadThemes(\n\t\tpaths: string[],\n\t\tincludeDefaults: boolean = true,\n\t): {\n\t\tthemes: Theme[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t} {\n\t\tconst themes: Theme[] = [];\n\t\tconst diagnostics: ResourceDiagnostic[] = [];\n\t\tif (includeDefaults) {\n\t\t\tconst defaultDirs = [join(this.agentDir, \"themes\"), join(this.cwd, CONFIG_DIR_NAME, \"themes\")];\n\n\t\t\tfor (const dir of defaultDirs) {\n\t\t\t\tthis.loadThemesFromDir(dir, themes, diagnostics);\n\t\t\t}\n\t\t}\n\n\t\tfor (const p of paths) {\n\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\tif (!existsSync(resolved)) {\n\t\t\t\tdiagnostics.push({ type: \"warning\", message: \"theme path does not exist\", path: resolved });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst stats = statSync(resolved);\n\t\t\t\tif (stats.isDirectory()) {\n\t\t\t\t\tthis.loadThemesFromDir(resolved, themes, diagnostics);\n\t\t\t\t} else if (stats.isFile() && resolved.endsWith(\".json\")) {\n\t\t\t\t\tthis.loadThemeFromFile(resolved, themes, diagnostics);\n\t\t\t\t} else {\n\t\t\t\t\tdiagnostics.push({ type: \"warning\", message: \"theme path is not a json file\", path: resolved });\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : \"failed to read theme path\";\n\t\t\t\tdiagnostics.push({ type: \"warning\", message, path: resolved });\n\t\t\t}\n\t\t}\n\n\t\treturn { themes, diagnostics };\n\t}\n\n\tprivate loadThemesFromDir(dir: string, themes: Theme[], diagnostics: ResourceDiagnostic[]): void {\n\t\tif (!existsSync(dir)) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst entries = readdirSync(dir, { withFileTypes: true });\n\t\t\tfor (const entry of entries) {\n\t\t\t\tlet isFile = entry.isFile();\n\t\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tisFile = statSync(join(dir, entry.name)).isFile();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isFile) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!entry.name.endsWith(\".json\")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.loadThemeFromFile(join(dir, entry.name), themes, diagnostics);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"failed to read theme directory\";\n\t\t\tdiagnostics.push({ type: \"warning\", message, path: dir });\n\t\t}\n\t}\n\n\tprivate loadThemeFromFile(filePath: string, themes: Theme[], diagnostics: ResourceDiagnostic[]): void {\n\t\ttry {\n\t\t\tthemes.push(loadThemeFromPath(filePath));\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"failed to load theme\";\n\t\t\tdiagnostics.push({ type: \"warning\", message, path: filePath });\n\t\t}\n\t}\n\n\tprivate async loadExtensionFactories(runtime: ExtensionRuntime): Promise<{\n\t\textensions: Extension[];\n\t\terrors: Array<{ path: string; error: string }>;\n\t}> {\n\t\tconst extensions: Extension[] = [];\n\t\tconst errors: Array<{ path: string; error: string }> = [];\n\n\t\tfor (const [index, factory] of this.extensionFactories.entries()) {\n\t\t\tconst extensionPath = `<inline:${index + 1}>`;\n\t\t\ttry {\n\t\t\t\tconst extension = await loadExtensionFromFactory(factory, this.cwd, this.eventBus, runtime, extensionPath);\n\t\t\t\textensions.push(extension);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : \"failed to load extension\";\n\t\t\t\terrors.push({ path: extensionPath, error: message });\n\t\t\t}\n\t\t}\n\n\t\treturn { extensions, errors };\n\t}\n\n\tprivate dedupePrompts(prompts: PromptTemplate[]): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] } {\n\t\tconst seen = new Map<string, PromptTemplate>();\n\t\tconst diagnostics: ResourceDiagnostic[] = [];\n\n\t\tfor (const prompt of prompts) {\n\t\t\tconst existing = seen.get(prompt.name);\n\t\t\tif (existing) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\ttype: \"collision\",\n\t\t\t\t\tmessage: `name \"/${prompt.name}\" collision`,\n\t\t\t\t\tpath: prompt.filePath,\n\t\t\t\t\tcollision: {\n\t\t\t\t\t\tresourceType: \"prompt\",\n\t\t\t\t\t\tname: prompt.name,\n\t\t\t\t\t\twinnerPath: existing.filePath,\n\t\t\t\t\t\tloserPath: prompt.filePath,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tseen.set(prompt.name, prompt);\n\t\t\t}\n\t\t}\n\n\t\treturn { prompts: Array.from(seen.values()), diagnostics };\n\t}\n\n\tprivate dedupeThemes(themes: Theme[]): { themes: Theme[]; diagnostics: ResourceDiagnostic[] } {\n\t\tconst seen = new Map<string, Theme>();\n\t\tconst diagnostics: ResourceDiagnostic[] = [];\n\n\t\tfor (const t of themes) {\n\t\t\tconst name = t.name ?? \"unnamed\";\n\t\t\tconst existing = seen.get(name);\n\t\t\tif (existing) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\ttype: \"collision\",\n\t\t\t\t\tmessage: `name \"${name}\" collision`,\n\t\t\t\t\tpath: t.sourcePath,\n\t\t\t\t\tcollision: {\n\t\t\t\t\t\tresourceType: \"theme\",\n\t\t\t\t\t\tname,\n\t\t\t\t\t\twinnerPath: existing.sourcePath ?? \"<builtin>\",\n\t\t\t\t\t\tloserPath: t.sourcePath ?? \"<builtin>\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tseen.set(name, t);\n\t\t\t}\n\t\t}\n\n\t\treturn { themes: Array.from(seen.values()), diagnostics };\n\t}\n\n\tprivate discoverSystemPromptFile(): string | undefined {\n\t\tconst projectPath = join(this.cwd, CONFIG_DIR_NAME, \"SYSTEM.md\");\n\t\tif (this.settingsManager.isProjectTrusted() && existsSync(projectPath)) {\n\t\t\treturn projectPath;\n\t\t}\n\n\t\tconst globalPath = join(this.agentDir, \"SYSTEM.md\");\n\t\tif (existsSync(globalPath)) {\n\t\t\treturn globalPath;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate discoverAppendSystemPromptFile(): string | undefined {\n\t\tconst projectPath = join(this.cwd, CONFIG_DIR_NAME, \"APPEND_SYSTEM.md\");\n\t\tif (this.settingsManager.isProjectTrusted() && existsSync(projectPath)) {\n\t\t\treturn projectPath;\n\t\t}\n\n\t\tconst globalPath = join(this.agentDir, \"APPEND_SYSTEM.md\");\n\t\tif (existsSync(globalPath)) {\n\t\t\treturn globalPath;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate isUnderPath(target: string, root: string): boolean {\n\t\tconst normalizedRoot = resolve(root);\n\t\tif (target === normalizedRoot) {\n\t\t\treturn true;\n\t\t}\n\t\tconst prefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\t\treturn target.startsWith(prefix);\n\t}\n\n\tprivate detectExtensionConflicts(extensions: Extension[]): Array<{ path: string; message: string }> {\n\t\tconst conflicts: Array<{ path: string; message: string }> = [];\n\n\t\t// Track which extension registered each tool and flag\n\t\tconst toolOwners = new Map<string, string>();\n\t\tconst flagOwners = new Map<string, string>();\n\n\t\tfor (const ext of extensions) {\n\t\t\t// Check tools\n\t\t\tfor (const toolName of ext.tools.keys()) {\n\t\t\t\tconst existingOwner = toolOwners.get(toolName);\n\t\t\t\tif (existingOwner && existingOwner !== ext.path) {\n\t\t\t\t\tconflicts.push({\n\t\t\t\t\t\tpath: ext.path,\n\t\t\t\t\t\tmessage: `Tool \"${toolName}\" conflicts with ${existingOwner}`,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttoolOwners.set(toolName, ext.path);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check flags\n\t\t\tfor (const flagName of ext.flags.keys()) {\n\t\t\t\tconst existingOwner = flagOwners.get(flagName);\n\t\t\t\tif (existingOwner && existingOwner !== ext.path) {\n\t\t\t\t\tconflicts.push({\n\t\t\t\t\t\tpath: ext.path,\n\t\t\t\t\t\tmessage: `Flag \"--${flagName}\" conflicts with ${existingOwner}`,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tflagOwners.set(flagName, ext.path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn conflicts;\n\t}\n}\n\nfunction collectFilesRecursively(dir: string, pattern: RegExp): string[] {\n\tconst files: string[] = [];\n\tif (!existsSync(dir)) return files;\n\n\ttry {\n\t\tconst entries = readdirSync(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.name.startsWith(\".\")) continue;\n\t\t\tif (entry.name === \"node_modules\") continue;\n\n\t\t\tconst fullPath = join(dir, entry.name);\n\t\t\tlet isDir = entry.isDirectory();\n\t\t\tlet isFile = entry.isFile();\n\n\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = statSync(fullPath);\n\t\t\t\t\tisDir = stats.isDirectory();\n\t\t\t\t\tisFile = stats.isFile();\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isDir) {\n\t\t\t\tfiles.push(...collectFilesRecursively(fullPath, pattern));\n\t\t\t} else if (isFile && pattern.test(entry.name)) {\n\t\t\t\tfiles.push(fullPath);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// silent\n\t}\n\treturn files;\n}\n"]}
1
+ {"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../../src/core/resource-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAc,MAAM,qCAAqC,CAAC;AAKpF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAiB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACN,sBAAsB,EACtB,kCAAkC,EAClC,aAAa,EACb,wBAAwB,EACxB,cAAc,GACd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAqB,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACN,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,6BAA6B,EAG7B,eAAe,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AA2DrE,SAAS,kBAAkB,CAAC,KAAyB,EAAE,WAAmB,EAAsB;IAC/F,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC;YACJ,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,WAAW,SAAS,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9F,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,uBAAuB,GAA8C;IAC1E;QACC,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EACN,6HAA6H;KAC9H;IACD;QACC,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EACN,2IAA2I;KAC5I;IACD;QACC,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,sFAAsF;KAC/F;CACD,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAY;IACjE,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAAA,CACxG;AAED,SAAS,0BAA0B,CAAC,QAAgB,EAAE,OAAe,EAAU;IAC9E,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACjG,OAAO,aAAa,QAAQ,0CAA0C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAAA,CACnH;AAED,SAAS,uBAAuB,CAAC,GAAW,EAA4C;IACvF,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAClG,MAAM,KAAK,GAA6C,EAAE,CAAC;IAC3D,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC;iBACtD,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9E,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,UAAU,uBAAuB,CAAC,OAIvC,EAA6C;IAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvD,MAAM,YAAY,GAA8C,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,KAAK,MAAM,aAAa,IAAI,uBAAuB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACtC,MAAM,oBAAoB,GAA8C,EAAE,CAAC;QAE3E,IAAI,UAAU,GAAG,WAAW,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAE1B,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC,MAAM,CACnE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CACjD,CAAC;YACF,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,oBAAoB,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;gBACnD,KAAK,MAAM,WAAW,IAAI,iBAAiB,EAAE,CAAC;oBAC7C,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;YACF,CAAC;YAED,IAAI,UAAU,KAAK,IAAI;gBAAE,MAAM;YAE/B,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,SAAS,KAAK,UAAU;gBAAE,MAAM;YACpC,UAAU,GAAG,SAAS,CAAC;QACxB,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,YAAY,CAAC;AAAA,CACpB;AAuCD,MAAM,OAAO,qBAAqB;IACzB,GAAG,CAAS;IACZ,QAAQ,CAAS;IACjB,eAAe,CAAkB;IACjC,QAAQ,CAAW;IACnB,cAAc,CAAwB;IACtC,wBAAwB,CAAW;IACnC,oBAAoB,CAAW;IAC/B,6BAA6B,CAAW;IACxC,oBAAoB,CAAW;IAC/B,kBAAkB,CAAqB;IACvC,YAAY,CAAU;IACtB,QAAQ,CAAU;IAClB,iBAAiB,CAAU;IAC3B,QAAQ,CAAU;IAClB,cAAc,CAAU;IACxB,kBAAkB,CAAU;IAC5B,wBAAwB,CAAY;IACpC,kBAAkB,CAAwD;IAC1E,cAAc,CAGpB;IACM,eAAe,CAGrB;IACM,cAAc,CAGpB;IACM,mBAAmB,CAEzB;IACM,oBAAoB,CAAoD;IACxE,0BAA0B,CAAgC;IAE1D,gBAAgB,CAAuB;IACvC,MAAM,CAAU;IAChB,gBAAgB,CAAuB;IACvC,OAAO,CAAmB;IAC1B,iBAAiB,CAAuB;IACxC,MAAM,CAAU;IAChB,gBAAgB,CAAuB;IACvC,WAAW,CAA4C;IACvD,YAAY,CAAU;IACtB,kBAAkB,CAAW;IAC7B,cAAc,CAAW;IACzB,yBAAyB,CAA0B;IACnD,0BAA0B,CAA0B;IACpD,yBAAyB,CAA0B;IACnD,eAAe,CAAW;IAC1B,cAAc,CAAW;IACzB,qBAAqB,CAAqC;IAElE,YAAY,OAAqC,EAAE;QAClD,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,IAAI,qBAAqB,CAAC;YAC/C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe,EAAE,IAAI,CAAC,eAAe;SACrC,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,IAAI,EAAE,CAAC;QACvE,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,6BAA6B,GAAG,OAAO,CAAC,6BAA6B,IAAI,EAAE,CAAC;QACjF,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAC5D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC3D,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;QACzD,IAAI,CAAC,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC;QAErE,IAAI,CAAC,gBAAgB,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,CAAC;QAC1F,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,0BAA0B,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5C,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAAA,CACzB;IAED,aAAa,GAAyB;QACrC,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAAA,CAC7B;IAED,SAAS,GAA2D;QACnE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAAA,CACnE;IAED;;;;;;;OAOG;IACH,eAAe,GAAY;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QAC/E,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,6BAA6B,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/G,MAAM,OAAO,GAAG,6BAA6B,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAClF,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC;QAAA,CAC3B,CAAC,CAAC;IAAA,CACH;IAED,UAAU,GAAqE;QAC9E,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAAA,CACtE;IAED;;;;;OAKG;IACH,gBAAgB,GAAqB;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QAChF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,6BAA6B,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/G,MAAM,OAAO,GAAG,6BAA6B,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAClF,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC;QAAA,CAC3B,CAAC,CAAC;IAAA,CACH;IAED,SAAS,GAA2D;QACnE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAAA,CACnE;IAED;;OAEG;IACH,eAAe,GAAY;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QAC/E,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC;YAC/B,MAAM,OAAO,GACZ,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,6BAA6B,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAClG,MAAM,OAAO,GAAG,6BAA6B,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACpF,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC;QAAA,CAC3B,CAAC,CAAC;IAAA,CACH;IAED,cAAc,GAA+D;QAC5E,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAAA,CACzC;IAED,eAAe,GAAuB;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC;IAAA,CACzB;IAED,qBAAqB,GAAa;QACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAAA,CAC/B;IAED;;;OAGG;IACH,KAAK,CAAC,6BAA6B,GAAsB;QACxD,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC1D,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,wBAAwB,EAAE;YAC1G,SAAS,EAAE,IAAI;SACf,CAAC,CAAC;QACH,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;YACjD,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,iBAAiB,CAAC,UAAU,EAAE,CAAC;YACrD,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAAA,CAC5B;IAED;;;OAGG;IACH,kBAAkB,CAAC,aAAqB,EAAyB;QAChE,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAC3C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,YAAY,KAAK,aAAa,CACzE,CAAC;IAAA,CACF;IAED;;OAEG;IACH,qBAAqB,CAAC,aAAqB,EAAyB;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CACvD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,YAAY,KAAK,aAAa,CACzE,CAAC;QACF,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChE,OAAO,GAAG,CAAC;IAAA,CACX;IAED;;;OAGG;IACH,KAAK,CAAC,mBAAmB,CAAC,aAAqB,EAAkE;QAChH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;YACzG,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;YAChC,sFAAsF;YACtF,iCAAiC;YACjC,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CACzE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY,CACvE,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,MAAM,CAAC;IAAA,CACd;IAED;;;;;OAKG;IACK,oBAAoB,CAAC,KAAe,EAAE,IAAyB,EAAY;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACzE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACtG,MAAM,OAAO,GAAG,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACzE,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC;QAAA,CAC3B,CAAC,CAAC;IAAA,CACH;IAED,eAAe,CAAC,KAA6B,EAAQ;QACpD,sFAAsF;QACtF,0FAAwF;QACxF,qCAAqC;QACrC,MAAM,SAAS,GAAG,CAAC,KAAuB,EAAE,IAAyB,EAAW,EAAE,CACjF,IAAI,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9G,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACjH,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE9G,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9F,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9F,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CACpC,IAAI,CAAC,cAAc,EACnB,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CACrC,CAAC;YACF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CACrC,IAAI,CAAC,eAAe,EACpB,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CACtC,CAAC;YACF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CACpC,IAAI,CAAC,cAAc,EACnB,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CACrC,CAAC;YACF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;IAAA,CACD;IAEO,cAAc,GAA2B;QAChD,OAAO;YACN,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;YACzD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;YAC3D,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;YACzD,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,cAAc,EAAE,IAAI,CAAC,cAAc;SACnC,CAAC;IAAA,CACF;IAEO,eAAe,CAAC,QAAgC,EAAQ;QAC/D,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;QAC9C,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,yBAAyB,CAAC;QACpE,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC,0BAA0B,CAAC;QACtE,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,yBAAyB,CAAC;QACpE,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;IAAA,CAC9C;IAED,KAAK,CAAC,YAAY,GAAkB;QACnC,IAAI,CAAC,IAAI,CAAC,qBAAqB;YAAE,OAAO;QACxC,MAAM,kCAAkC,CAAC,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACjG,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAAA,CACvC;IAED,KAAK,CAAC,cAAc,GAAkB;QACrC,IAAI,CAAC,IAAI,CAAC,qBAAqB;YAAE,OAAO;QACxC,MAAM,kCAAkC,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC3E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjD,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAAA,CACvC;IAED,KAAK,CAAC,MAAM,CAAC,OAAO,GAA0B,EAAE,EAAiB;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1D,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBAC1G,SAAS,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,GAAG,EAAwB,CAAC;YAEvD,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;YAC3C,IAAI,CAAC,0BAA0B,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5C,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;YAE3C,qDAAqD;YACrD,MAAM,mBAAmB,GAAG,CAC3B,SAA4E,EACR,EAAE,CAAC;gBACvE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC3B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACxC,CAAC;gBACF,CAAC;gBACD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAA,CAC1C,CAAC;YAEF,MAAM,eAAe,GAAG,CACvB,SAA4E,EACjE,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEjE,MAAM,iBAAiB,GAAG,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACpE,MAAM,qBAAqB,GAAG,mBAAmB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACxE,MAAM,cAAc,GAAG,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAE5D,MAAM,YAAY,GAAG,CAAC,QAAkD,EAAU,EAAE,CAAC;gBACpF,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBACnF,OAAO,QAAQ,CAAC,IAAI,CAAC;gBACtB,CAAC;gBACD,IAAI,CAAC;oBACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC;oBACtB,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,OAAO,QAAQ,CAAC,IAAI,CAAC;gBACtB,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAClD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;wBACpC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAClD,CAAC;oBACD,OAAO,SAAS,CAAC;gBAClB,CAAC;gBACD,OAAO,QAAQ,CAAC,IAAI,CAAC;YAAA,CACrB,CAAC;YAEF,MAAM,aAAa,GAAG,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAE9D,yBAAyB;YACzB,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,UAAU,EAAE,CAAC;gBAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBACxF,CAAC;YACF,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBACxF,CAAC;YACF,CAAC;YAED,MAAM,oBAAoB,GAAG,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAC3E,MAAM,gBAAgB,GAAG,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACnE,MAAM,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACrE,MAAM,gBAAgB,GAAG,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAEnE,2CAA2C;YAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,iCAAiC,EAAE,CAAC;YAEhF,MAAM,oBAAoB,GAAG,CAAC,KAAe,EAAE,IAAyB,EAAY,EAAE,CACrF,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAExC,+BAA+B;YAC/B,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBACxC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC;wBACJ,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;4BAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;4BAChC,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gCAC5B,IAAI,CAAC;oCACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oCACjD,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gCAC7B,CAAC;gCAAC,MAAM,CAAC;oCACR,SAAS;gCACV,CAAC;4BACF,CAAC;4BACD,IAAI,KAAK,EAAE,CAAC;gCACX,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gCAC3C,IACC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oCACvC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oCACvC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAC1C,CAAC;oCACF,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oCACnC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gCAC3F,CAAC;4BACF,CAAC;wBACF,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC;wBACR,SAAS;oBACV,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY;gBACvC,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE;oBACtC,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,YAAY,CAAC;oBACxD,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,YAAY,CAAC;iBACzD,CAAC,CAAC;YAEL,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvF,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACrF,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACjE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAEzD,gGAAgG;YAChG,8GAA8G;YAC9G,MAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC7E,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC/C,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC3B,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,kCAAkC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBACvG,CAAC;gBACF,CAAC;YACF,CAAC;YACD,MAAM,wBAAwB,GAAG,IAAI,CAAC,kBAAkB;gBACvD,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;gBAC3C,CAAC,CAAC,gBAAgB,CAAC;YACpB,IAAI,OAAO,CAAC,qBAAqB,IAAI,wBAAwB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjF,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM;qBAC7C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;qBACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;qBAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,wBAAwB,CAAC;YACjD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAEhF,2BAA2B;YAC3B,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACvC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACJ,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;wBAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;4BAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;4BAChC,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gCAC5B,IAAI,CAAC;oCACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oCACpD,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gCAC7B,CAAC;gCAAC,MAAM,CAAC;oCACR,SAAS;gCACV,CAAC;4BACF,CAAC;4BACD,IAAI,KAAK,EAAE,CAAC;gCACX,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gCAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gCAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gCACjE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gCAChC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;4BAC5F,CAAC;wBACF,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC;wBACR,SAAS;oBACV,CAAC;gBACF,CAAC;YACF,CAAC;YAED,gFAAgF;YAChF,sFAAsF;YACtF,8FAA8F;YAC9F,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;YAC/C,MAAM,iBAAiB,GAAa,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACJ,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC5E,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;4BAAE,SAAS;wBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;wBACrD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;wBAC9C,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACvE,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,SAAS;gBACV,CAAC;YACF,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ;gBAC/B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,gBAAgB,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAC,UAAU,CACf,CAAC,GAAG,gBAAgB,EAAE,GAAG,aAAa,EAAE,GAAG,cAAc,EAAE,GAAG,iBAAiB,CAAC,EAChF,IAAI,CAAC,oBAAoB,CACzB,CAAC;YAEJ,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;YACjC,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC3C,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;wBACtF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACrG,CAAC;gBACF,CAAC;YACF,CAAC;YAED,4BAA4B;YAC5B,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACzC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC5B,MAAM,KAAK,GAAG,uBAAuB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAC3D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACvB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACxB,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;oBACnF,CAAC;gBACF,CAAC;YACF,CAAC;YAED,8FAA8F;YAC9F,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;YACjD,MAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC;gBACvD,CAAC,CAAC,uBAAuB,CAAC,iBAAiB,EAAE,OAAO,CAAC;gBACrD,CAAC,CAAC,EAAE,CAAC;YACN,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB;gBACzC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,6BAA6B,CAAC;gBACxE,CAAC,CAAC,IAAI,CAAC,UAAU,CACf,CAAC,GAAG,iBAAiB,EAAE,GAAG,cAAc,EAAE,GAAG,eAAe,EAAE,GAAG,kBAAkB,CAAC,EACpF,IAAI,CAAC,6BAA6B,CAClC,CAAC;YAEJ,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;YACnC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,6BAA6B,EAAE,CAAC;gBACpD,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;wBACvF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;4BAC3B,IAAI,EAAE,OAAO;4BACb,OAAO,EAAE,qCAAqC;4BAC9C,IAAI,EAAE,QAAQ;yBACd,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;YAED,2BAA2B;YAC3B,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACvC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBAC5D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACvB,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACvB,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;oBACnF,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ;gBAC/B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC;gBAC9D,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,gBAAgB,EAAE,GAAG,aAAa,EAAE,GAAG,cAAc,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAE1G,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;YACjC,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACtF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACrG,CAAC;YACF,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;gBACzC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,uBAAuB,CAAC;oBACxB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;iBACvD,CAAC,CAAC;YACL,MAAM,qBAAqB,GAA4C,EAAE,CAAC;YAC1E,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,6BAA6B,EAAE,CAAC;YAChF,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACJ,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,0BAA0B,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC,CAAC;oBAClG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAChG,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,uCAAuC,CAAC,qBAAqB,CAAC,CAAC;YACpF,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YACnF,MAAM,WAAW,GAAG;gBACnB,WAAW,EAAE,cAAc;qBACzB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACjB,MAAM,OAAO,GACZ,kBAAkB,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;wBACrC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9E,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC7F,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC;gBAAA,CAC3B,CAAC;qBACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACf,GAAG,IAAI;oBACP,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;iBAC/E,CAAC,CAAC;aACJ,CAAC;YACF,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YAC3G,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC;YAEnD,MAAM,gBAAgB,GAAG,kBAAkB,CAC1C,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAC1D,eAAe,CACf,CAAC;YACF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;YAE/G,MAAM,aAAa,GAClB,IAAI,CAAC,wBAAwB;gBAC7B,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,EAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzF,MAAM,UAAU,GAAG,aAAa;iBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;iBACzD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,0BAA0B;gBACxD,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;gBAC7C,CAAC,CAAC,UAAU,CAAC;YACd,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACnC,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACP,MAAM,kCAAkC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAChF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBACzD,MAAM,kCAAkC,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC;QACb,CAAC;IAAA,CACD;IAEO,uBAAuB,CAC9B,OAAwD,EACN;QAClD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO;gBACtC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAClF,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YAClB,OAAO;gBACN,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC1C,QAAQ;aACR,CAAC;QAAA,CACF,CAAC,CAAC;IAAA,CACH;IAEO,qBAAqB,CAAC,UAAoB,EAAE,cAA0C,EAAQ;QACrG,IAAI,YAAoE,CAAC;QACzE,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,YAAY,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QAChD,CAAC;aAAM,CAAC;YACP,YAAY,GAAG,UAAU,CAAC;gBACzB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU;gBACV,eAAe,EAAE,KAAK;aACtB,CAAC,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC9F,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnD,GAAG,KAAK;YACR,UAAU,EACT,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAC;gBAC1F,KAAK,CAAC,UAAU;gBAChB,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,QAAQ,CAAC;SACjD,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,WAAW,CAAC;IAAA,CACnD;IAEO,sBAAsB,CAAC,WAAqB,EAAE,cAA0C,EAAQ;QACvG,IAAI,aAA+E,CAAC;QACpF,IAAI,IAAI,CAAC,iBAAiB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,aAAa,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QAClD,CAAC;aAAM,CAAC;YACP,MAAM,UAAU,GAAG,mBAAmB,CAAC;gBACtC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW;gBACX,eAAe,EAAE,KAAK;aACtB,CAAC,CAAC;YACH,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QACnG,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvD,GAAG,MAAM;YACT,UAAU,EACT,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,0BAA0B,EAAE,cAAc,CAAC;gBAC5F,MAAM,CAAC,UAAU;gBACjB,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC;SAClD,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,WAAW,CAAC;IAAA,CACrD;IAEO,qBAAqB,CAAC,UAAoB,EAAE,cAA0C,EAAQ;QACrG,IAAI,YAAoE,CAAC;QACzE,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,YAAY,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QAChD,CAAC;aAAM,CAAC;YACP,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,YAAY,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACzG,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC9F,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACpC,KAAK,CAAC,UAAU,GAAG,UAAU;gBAC5B,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAC;oBACxF,KAAK,CAAC,UAAU;oBAChB,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;gBAC9C,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;YACpB,OAAO,KAAK,CAAC;QAAA,CACb,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,WAAW,CAAC;IAAA,CACnD;IAEO,wBAAwB,CAAC,UAAuB,EAAE,cAAyC,EAAQ;QAC1G,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACpC,SAAS,CAAC,UAAU;gBACnB,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC;oBACrE,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClD,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnD,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YAC3C,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YACxC,CAAC;QACF,CAAC;IAAA,CACD;IAEO,qBAAqB,CAC5B,YAAoB,EACpB,gBAA0C,EAC1C,cAA0C,EACjB;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,gBAAgB,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnE,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBACjD,IACC,sBAAsB,KAAK,oBAAoB;oBAC/C,sBAAsB,CAAC,UAAU,CAAC,GAAG,oBAAoB,GAAG,GAAG,EAAE,CAAC,EACjE,CAAC;oBACF,OAAO,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC9C,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC7F,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;YAED,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC/D,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBACjD,IACC,sBAAsB,KAAK,oBAAoB;oBAC/C,sBAAsB,CAAC,UAAU,CAAC,GAAG,oBAAoB,GAAG,GAAG,EAAE,CAAC,EACjE,CAAC;oBACF,OAAO,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACjD,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAC;IAAA,CACjB;IAEO,2BAA2B,CAAC,QAAgB,EAAc;QACjE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO;gBACN,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW;gBAC1D,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,WAAW;aACnB,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG;YAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;SACjC,CAAC;QACF,MAAM,YAAY,GAAG;YACpB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,YAAY,CAAC;SAC7C,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/F,CAAC;QACF,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClG,CAAC;QACF,CAAC;QAED,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;SAChG,CAAC;IAAA,CACF;IAEO,UAAU,CAAC,OAAiB,EAAE,UAAoB,EAAY;QACrE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;gBAAE,SAAS;YACtC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,MAAM,CAAC;IAAA,CACd;IAEO,mBAAmB,CAAC,CAAS,EAAU;QAC9C,OAAO,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAAA,CAChD;IAEO,UAAU,CACjB,KAAe,EACf,eAAe,GAAY,IAAI,EAI9B;QACD,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAyB,EAAE,CAAC;QAC7C,IAAI,eAAe,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;YAE/F,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAClD,CAAC;QACF,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC5F,SAAS;YACV,CAAC;YAED,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACjC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACzB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBACvD,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACP,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,+BAA+B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACjG,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC;gBACrF,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChE,CAAC;QACF,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAA,CAC/B;IAEO,iBAAiB,CAAC,GAAW,EAAE,MAAe,EAAE,WAAiC,EAAQ;QAChG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO;QACR,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACJ,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;oBACnD,CAAC;oBAAC,MAAM,CAAC;wBACR,SAAS;oBACV,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,SAAS;gBACV,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnC,SAAS;gBACV,CAAC;gBACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACpE,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC;YAC1F,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC;IAAA,CACD;IAEO,iBAAiB,CAAC,QAAgB,EAAE,MAAe,EAAE,WAAiC,EAAQ;QACrG,IAAI,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;YAChF,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,CAAC;IAAA,CACD;IAEO,KAAK,CAAC,sBAAsB,CAAC,OAAyB,EAG3D;QACF,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,MAAM,MAAM,GAA2C,EAAE,CAAC;QAE1D,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;YAClE,MAAM,aAAa,GAAG,WAAW,KAAK,GAAG,CAAC,GAAG,CAAC;YAC9C,IAAI,CAAC;gBACJ,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;gBAC3G,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;gBACpF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAA,CAC9B;IAEO,aAAa,CAAC,OAAyB,EAAoE;QAClH,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0B,CAAC;QAC/C,MAAM,WAAW,GAAyB,EAAE,CAAC;QAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,QAAQ,EAAE,CAAC;gBACd,WAAW,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,aAAa;oBAC3C,IAAI,EAAE,MAAM,CAAC,QAAQ;oBACrB,SAAS,EAAE;wBACV,YAAY,EAAE,QAAQ;wBACtB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,UAAU,EAAE,QAAQ,CAAC,QAAQ;wBAC7B,SAAS,EAAE,MAAM,CAAC,QAAQ;qBAC1B;iBACD,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IAAA,CAC3D;IAEO,YAAY,CAAC,MAAe,EAA0D;QAC7F,MAAM,IAAI,GAAG,IAAI,GAAG,EAAiB,CAAC;QACtC,MAAM,WAAW,GAAyB,EAAE,CAAC;QAE7C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,QAAQ,EAAE,CAAC;gBACd,WAAW,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,SAAS,IAAI,aAAa;oBACnC,IAAI,EAAE,CAAC,CAAC,UAAU;oBAClB,SAAS,EAAE;wBACV,YAAY,EAAE,OAAO;wBACrB,IAAI;wBACJ,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,WAAW;wBAC9C,SAAS,EAAE,CAAC,CAAC,UAAU,IAAI,WAAW;qBACtC;iBACD,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACnB,CAAC;QACF,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IAAA,CAC1D;IAEO,wBAAwB,GAAuB;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACxE,OAAO,WAAW,CAAC;QACpB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,UAAU,CAAC;QACnB,CAAC;QAED,OAAO,SAAS,CAAC;IAAA,CACjB;IAEO,8BAA8B,GAAuB;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACxE,OAAO,WAAW,CAAC;QACpB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,UAAU,CAAC;QACnB,CAAC;QAED,OAAO,SAAS,CAAC;IAAA,CACjB;IAEO,WAAW,CAAC,MAAc,EAAE,IAAY,EAAW;QAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,GAAG,EAAE,CAAC;QACzF,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAAA,CACjC;IAEO,wBAAwB,CAAC,UAAuB,EAA4C;QACnG,MAAM,SAAS,GAA6C,EAAE,CAAC;QAE/D,sDAAsD;QACtD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE7C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,cAAc;YACd,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC/C,IAAI,aAAa,IAAI,aAAa,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;oBACjD,SAAS,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,OAAO,EAAE,SAAS,QAAQ,oBAAoB,aAAa,EAAE;qBAC7D,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACF,CAAC;YAED,cAAc;YACd,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC/C,IAAI,aAAa,IAAI,aAAa,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;oBACjD,SAAS,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,OAAO,EAAE,WAAW,QAAQ,oBAAoB,aAAa,EAAE;qBAC/D,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAC;IAAA,CACjB;CACD;AAED,SAAS,uBAAuB,CAAC,GAAW,EAAE,OAAe,EAAY;IACxE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;gBAAE,SAAS;YAE5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAE5B,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACjC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC5B,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC;oBACR,SAAS;gBACV,CAAC;YACF,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACX,KAAK,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,CAAC;iBAAM,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,SAAS;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb","sourcesContent":["import { existsSync, readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { join, resolve, sep } from \"node:path\";\nimport chalk from \"chalk\";\nimport { CONFIG_DIR_NAME, getBundledPromptsDir, getBundledSkillsDir } from \"../config.ts\";\nimport { loadThemeFromPath, type Theme } from \"../modes/interactive/theme/theme.ts\";\nimport type { ResourceDiagnostic } from \"./diagnostics.ts\";\n\nexport type { ResourceCollision, ResourceDiagnostic } from \"./diagnostics.ts\";\n\nimport { canonicalizePath, isLocalPath, resolvePath } from \"../utils/paths.ts\";\nimport { createEventBus, type EventBus } from \"./event-bus.ts\";\nimport {\n\tcreateExtensionRuntime,\n\tdisposeExtensionEventSubscriptions,\n\tloadExtension,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./extensions/loader.ts\";\nimport type { Extension, ExtensionFactory, ExtensionRuntime, LoadExtensionsResult } from \"./extensions/types.ts\";\nimport { DefaultPackageManager, type PathMetadata } from \"./package-manager.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport { loadPromptTemplates } from \"./prompt-templates.ts\";\nimport {\n\tmergeResourceProfileMap,\n\tparseResourceProfileBlocks,\n\tstripResourceProfileBlocks,\n} from \"./resource-profile-blocks.ts\";\nimport {\n\tmatchesResourceProfilePattern,\n\ttype ResourceProfileKind,\n\ttype ResourceProfileSettings,\n\tSettingsManager,\n} from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport { loadSkills } from \"./skills.ts\";\nimport { createSourceInfo, type SourceInfo } from \"./source-info.ts\";\n\nexport interface ResourceExtensionPaths {\n\tskillPaths?: Array<{ path: string; metadata: PathMetadata }>;\n\tpromptPaths?: Array<{ path: string; metadata: PathMetadata }>;\n\tthemePaths?: Array<{ path: string; metadata: PathMetadata }>;\n}\n\nexport interface ResourceReloadOptions {\n\t/** Throw instead of accepting a hot reload that produced extension load/conflict errors. */\n\tfailOnExtensionErrors?: boolean;\n\t/** Keep the previous extension generation alive until commitReload()/rollbackReload(). */\n\tdeferExtensionDispose?: boolean;\n}\n\nexport interface ResourceLoader {\n\tgetExtensions(): LoadExtensionsResult;\n\tgetSkills(): { skills: Skill[]; diagnostics: ResourceDiagnostic[] };\n\t/** Skills allowed by the currently active resource profile — use for selection/invocation/agent-visibility. */\n\tgetActiveSkills(): Skill[];\n\tgetPrompts(): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] };\n\t/** Prompt templates allowed by the currently active resource profile — use for selection/invocation/agent-visibility. */\n\tgetActivePrompts(): PromptTemplate[];\n\tgetThemes(): { themes: Theme[]; diagnostics: ResourceDiagnostic[] };\n\t/** Themes allowed by the currently active resource profile. */\n\tgetActiveThemes(): Theme[];\n\tgetAgentsFiles(): { agentsFiles: Array<{ path: string; content?: string }> };\n\tgetSystemPrompt(): string | undefined;\n\tgetAppendSystemPrompt(): string[];\n\tgetLoadedExtension(path: string): Extension | undefined;\n\tremoveLoadedExtension(path: string): Extension | undefined;\n\tloadSingleExtension(path: string): Promise<{ extension: Extension | null; error: string | null }>;\n\textendResources(paths: ResourceExtensionPaths): void;\n\treload(options?: ResourceReloadOptions): Promise<void>;\n\tcommitReload?(): void;\n\trollbackReload?(): void;\n\t/** Get all discoverable extension paths (enabled and disabled) */\n\tgetDiscoverableExtensionPaths(): Promise<string[]>;\n}\n\ninterface ResourceLoaderSnapshot {\n\textensionsResult: LoadExtensionsResult;\n\tskills: Skill[];\n\tskillDiagnostics: ResourceDiagnostic[];\n\tprompts: PromptTemplate[];\n\tpromptDiagnostics: ResourceDiagnostic[];\n\tthemes: Theme[];\n\tthemeDiagnostics: ResourceDiagnostic[];\n\tagentsFiles: Array<{ path: string; content?: string }>;\n\tsystemPrompt?: string;\n\tappendSystemPrompt: string[];\n\tlastSkillPaths: string[];\n\textensionSkillSourceInfos: Map<string, SourceInfo>;\n\textensionPromptSourceInfos: Map<string, SourceInfo>;\n\textensionThemeSourceInfos: Map<string, SourceInfo>;\n\tlastPromptPaths: string[];\n\tlastThemePaths: string[];\n}\n\nfunction resolvePromptInput(input: string | undefined, description: string): string | undefined {\n\tif (!input) {\n\t\treturn undefined;\n\t}\n\n\tif (existsSync(input)) {\n\t\ttry {\n\t\t\treturn readFileSync(input, \"utf-8\");\n\t\t} catch (error) {\n\t\t\tconsole.error(chalk.yellow(`Warning: Could not read ${description} file ${input}: ${error}`));\n\t\t\treturn input;\n\t\t}\n\t}\n\n\treturn input;\n}\n\nconst CONTEXT_THREAT_PATTERNS: Array<{ label: string; pattern: RegExp }> = [\n\t{\n\t\tlabel: \"instruction override\",\n\t\tpattern:\n\t\t\t/\\b(?:ignore|disregard|override|bypass)\\b.{0,80}\\b(?:previous|prior|above|system|developer|agent)\\b.{0,80}\\binstructions?\\b/i,\n\t},\n\t{\n\t\tlabel: \"secret exfiltration\",\n\t\tpattern:\n\t\t\t/\\b(?:reveal|print|dump|exfiltrate|send|upload)\\b.{0,80}\\b(?:secrets?|tokens?|api[_ -]?keys?|credentials?|environment variables?|\\.env)\\b/i,\n\t},\n\t{\n\t\tlabel: \"hidden instruction\",\n\t\tpattern: /\\b(?:do not tell|don't tell|hide this from)\\b.{0,80}\\b(?:user|operator|developer)\\b/i,\n\t},\n];\n\nexport function scanContextFileThreats(content: string): string[] {\n\treturn CONTEXT_THREAT_PATTERNS.filter(({ pattern }) => pattern.test(content)).map(({ label }) => label);\n}\n\nfunction sanitizeContextFileContent(filePath: string, content: string): string {\n\tconst profileFreeContent = stripResourceProfileBlocks(content);\n\tconst findings = scanContextFileThreats(profileFreeContent);\n\tif (findings.length === 0) return profileFreeContent;\n\tconsole.error(chalk.yellow(`Warning: Blocked context file ${filePath}: ${findings.join(\", \")}`));\n\treturn `[BLOCKED: ${filePath} contained potential prompt injection (${findings.join(\", \")}). Content not loaded.]`;\n}\n\nfunction loadContextFilesFromDir(dir: string): Array<{ path: string; content: string }> {\n\tconst candidates = [\"AGENTS.md\", \"AGENTS.MD\", \"CLAUDE.md\", \"CLAUDE.MD\", \"GEMINI.md\", \"GEMINI.MD\"];\n\tconst files: Array<{ path: string; content: string }> = [];\n\tfor (const filename of candidates) {\n\t\tconst filePath = join(dir, filename);\n\t\tif (existsSync(filePath)) {\n\t\t\ttry {\n\t\t\t\tconst content = readFileSync(filePath, \"utf-8\");\n\t\t\t\tfiles.push({\n\t\t\t\t\tpath: filePath,\n\t\t\t\t\tcontent: sanitizeContextFileContent(filePath, content),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(chalk.yellow(`Warning: Could not read ${filePath}: ${error}`));\n\t\t\t}\n\t\t}\n\t}\n\treturn files;\n}\n\nexport function loadProjectContextFiles(options: {\n\tcwd: string;\n\tagentDir: string;\n\tprojectTrusted?: boolean;\n}): Array<{ path: string; content?: string }> {\n\tconst resolvedCwd = resolvePath(options.cwd);\n\tconst resolvedAgentDir = resolvePath(options.agentDir);\n\n\tconst contextFiles: Array<{ path: string; content?: string }> = [];\n\tconst seenPaths = new Set<string>();\n\n\tfor (const globalContext of loadContextFilesFromDir(resolvedAgentDir)) {\n\t\tcontextFiles.push(globalContext);\n\t\tseenPaths.add(globalContext.path);\n\t}\n\n\tif (options.projectTrusted !== false) {\n\t\tconst ancestorContextFiles: Array<{ path: string; content?: string }> = [];\n\n\t\tlet currentDir = resolvedCwd;\n\t\tconst root = resolve(\"/\");\n\n\t\twhile (true) {\n\t\t\tconst contextFilesInDir = loadContextFilesFromDir(currentDir).filter(\n\t\t\t\t(contextFile) => !seenPaths.has(contextFile.path),\n\t\t\t);\n\t\t\tif (contextFilesInDir.length > 0) {\n\t\t\t\tancestorContextFiles.unshift(...contextFilesInDir);\n\t\t\t\tfor (const contextFile of contextFilesInDir) {\n\t\t\t\t\tseenPaths.add(contextFile.path);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (currentDir === root) break;\n\n\t\t\tconst parentDir = resolve(currentDir, \"..\");\n\t\t\tif (parentDir === currentDir) break;\n\t\t\tcurrentDir = parentDir;\n\t\t}\n\n\t\tcontextFiles.push(...ancestorContextFiles);\n\t}\n\n\treturn contextFiles;\n}\n\nexport interface DefaultResourceLoaderOptions {\n\tcwd: string;\n\tagentDir: string;\n\tsettingsManager?: SettingsManager;\n\teventBus?: EventBus;\n\tadditionalExtensionPaths?: string[];\n\tadditionalSkillPaths?: string[];\n\tadditionalPromptTemplatePaths?: string[];\n\tadditionalThemePaths?: string[];\n\textensionFactories?: ExtensionFactory[];\n\tnoExtensions?: boolean;\n\tnoSkills?: boolean;\n\tnoPromptTemplates?: boolean;\n\tnoThemes?: boolean;\n\tnoContextFiles?: boolean;\n\tsystemPrompt?: string;\n\tappendSystemPrompt?: string[];\n\textensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;\n\tskillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tskills: Skill[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tpromptsOverride?: (base: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tprompts: PromptTemplate[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tthemesOverride?: (base: { themes: Theme[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tthemes: Theme[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tagentsFilesOverride?: (base: { agentsFiles: Array<{ path: string; content?: string }> }) => {\n\t\tagentsFiles: Array<{ path: string; content?: string }>;\n\t};\n\tsystemPromptOverride?: (base: string | undefined) => string | undefined;\n\tappendSystemPromptOverride?: (base: string[]) => string[];\n}\n\nexport class DefaultResourceLoader implements ResourceLoader {\n\tprivate cwd: string;\n\tprivate agentDir: string;\n\tprivate settingsManager: SettingsManager;\n\tprivate eventBus: EventBus;\n\tprivate packageManager: DefaultPackageManager;\n\tprivate additionalExtensionPaths: string[];\n\tprivate additionalSkillPaths: string[];\n\tprivate additionalPromptTemplatePaths: string[];\n\tprivate additionalThemePaths: string[];\n\tprivate extensionFactories: ExtensionFactory[];\n\tprivate noExtensions: boolean;\n\tprivate noSkills: boolean;\n\tprivate noPromptTemplates: boolean;\n\tprivate noThemes: boolean;\n\tprivate noContextFiles: boolean;\n\tprivate systemPromptSource?: string;\n\tprivate appendSystemPromptSource?: string[];\n\tprivate extensionsOverride?: (base: LoadExtensionsResult) => LoadExtensionsResult;\n\tprivate skillsOverride?: (base: { skills: Skill[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tskills: Skill[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tprivate promptsOverride?: (base: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tprompts: PromptTemplate[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tprivate themesOverride?: (base: { themes: Theme[]; diagnostics: ResourceDiagnostic[] }) => {\n\t\tthemes: Theme[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t};\n\tprivate agentsFilesOverride?: (base: { agentsFiles: Array<{ path: string; content?: string }> }) => {\n\t\tagentsFiles: Array<{ path: string; content?: string }>;\n\t};\n\tprivate systemPromptOverride?: (base: string | undefined) => string | undefined;\n\tprivate appendSystemPromptOverride?: (base: string[]) => string[];\n\n\tprivate extensionsResult: LoadExtensionsResult;\n\tprivate skills: Skill[];\n\tprivate skillDiagnostics: ResourceDiagnostic[];\n\tprivate prompts: PromptTemplate[];\n\tprivate promptDiagnostics: ResourceDiagnostic[];\n\tprivate themes: Theme[];\n\tprivate themeDiagnostics: ResourceDiagnostic[];\n\tprivate agentsFiles: Array<{ path: string; content?: string }>;\n\tprivate systemPrompt?: string;\n\tprivate appendSystemPrompt: string[];\n\tprivate lastSkillPaths: string[];\n\tprivate extensionSkillSourceInfos: Map<string, SourceInfo>;\n\tprivate extensionPromptSourceInfos: Map<string, SourceInfo>;\n\tprivate extensionThemeSourceInfos: Map<string, SourceInfo>;\n\tprivate lastPromptPaths: string[];\n\tprivate lastThemePaths: string[];\n\tprivate pendingReloadSnapshot: ResourceLoaderSnapshot | undefined;\n\n\tconstructor(options: DefaultResourceLoaderOptions) {\n\t\tthis.cwd = resolvePath(options.cwd);\n\t\tthis.agentDir = resolvePath(options.agentDir);\n\t\tthis.settingsManager = options.settingsManager ?? SettingsManager.create(this.cwd, this.agentDir);\n\t\tthis.eventBus = options.eventBus ?? createEventBus();\n\t\tthis.packageManager = new DefaultPackageManager({\n\t\t\tcwd: this.cwd,\n\t\t\tagentDir: this.agentDir,\n\t\t\tsettingsManager: this.settingsManager,\n\t\t});\n\t\tthis.additionalExtensionPaths = options.additionalExtensionPaths ?? [];\n\t\tthis.additionalSkillPaths = options.additionalSkillPaths ?? [];\n\t\tthis.additionalPromptTemplatePaths = options.additionalPromptTemplatePaths ?? [];\n\t\tthis.additionalThemePaths = options.additionalThemePaths ?? [];\n\t\tthis.noExtensions = options.noExtensions ?? false;\n\t\tthis.extensionFactories = options.extensionFactories ?? [];\n\t\tthis.noSkills = options.noSkills ?? false;\n\t\tthis.noPromptTemplates = options.noPromptTemplates ?? false;\n\t\tthis.noThemes = options.noThemes ?? false;\n\t\tthis.noContextFiles = options.noContextFiles ?? false;\n\t\tthis.systemPromptSource = options.systemPrompt;\n\t\tthis.appendSystemPromptSource = options.appendSystemPrompt;\n\t\tthis.extensionsOverride = options.extensionsOverride;\n\t\tthis.skillsOverride = options.skillsOverride;\n\t\tthis.promptsOverride = options.promptsOverride;\n\t\tthis.themesOverride = options.themesOverride;\n\t\tthis.agentsFilesOverride = options.agentsFilesOverride;\n\t\tthis.systemPromptOverride = options.systemPromptOverride;\n\t\tthis.appendSystemPromptOverride = options.appendSystemPromptOverride;\n\n\t\tthis.extensionsResult = { extensions: [], errors: [], runtime: createExtensionRuntime() };\n\t\tthis.skills = [];\n\t\tthis.skillDiagnostics = [];\n\t\tthis.prompts = [];\n\t\tthis.promptDiagnostics = [];\n\t\tthis.themes = [];\n\t\tthis.themeDiagnostics = [];\n\t\tthis.agentsFiles = [];\n\t\tthis.appendSystemPrompt = [];\n\t\tthis.lastSkillPaths = [];\n\t\tthis.extensionSkillSourceInfos = new Map();\n\t\tthis.extensionPromptSourceInfos = new Map();\n\t\tthis.extensionThemeSourceInfos = new Map();\n\t\tthis.lastPromptPaths = [];\n\t\tthis.lastThemePaths = [];\n\t}\n\n\tgetExtensions(): LoadExtensionsResult {\n\t\treturn this.extensionsResult;\n\t}\n\n\tgetSkills(): { skills: Skill[]; diagnostics: ResourceDiagnostic[] } {\n\t\treturn { skills: this.skills, diagnostics: this.skillDiagnostics };\n\t}\n\n\t/**\n\t * Skills permitted by the CURRENTLY active resource profile (the loaded set intersected with the\n\t * live profile filter). Use this everywhere a skill can be SELECTED, INVOKED, or shown to the\n\t * agent — so neither the user (autocomplete / typed `/skill:`) nor the agent (system prompt /\n\t * expansion / command API / RPC) can use a skill the active profile blocks, including after a\n\t * runtime profile switch (router-managed / `/profile`). The full loaded set (`getSkills`) is\n\t * reserved for the profile editor and resource listings, which must show blockable skills.\n\t */\n\tgetActiveSkills(): Skill[] {\n\t\tconst filter = this.settingsManager.getResourceProfileFilter(\"skills\");\n\t\tif (filter.allow.length === 0 && filter.block.length === 0) return this.skills;\n\t\treturn this.skills.filter((s) => {\n\t\t\tconst allowed = filter.allow.length === 0 || matchesResourceProfilePattern(s.filePath, filter.allow, this.cwd);\n\t\t\tconst blocked = matchesResourceProfilePattern(s.filePath, filter.block, this.cwd);\n\t\t\treturn allowed && !blocked;\n\t\t});\n\t}\n\n\tgetPrompts(): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] } {\n\t\treturn { prompts: this.prompts, diagnostics: this.promptDiagnostics };\n\t}\n\n\t/**\n\t * Prompt templates permitted by the CURRENTLY active resource profile (the loaded set intersected with the\n\t * live profile filter). Use this everywhere a prompt template can be SELECTED, INVOKED, or shown to the\n\t * agent — so neither the user (autocomplete / typed slash command) nor the agent can use a prompt template\n\t * the active profile blocks. The full loaded set (`getPrompts`) is reserved for the profile editor.\n\t */\n\tgetActivePrompts(): PromptTemplate[] {\n\t\tconst filter = this.settingsManager.getResourceProfileFilter(\"prompts\");\n\t\tif (filter.allow.length === 0 && filter.block.length === 0) return this.prompts;\n\t\treturn this.prompts.filter((p) => {\n\t\t\tconst allowed = filter.allow.length === 0 || matchesResourceProfilePattern(p.filePath, filter.allow, this.cwd);\n\t\t\tconst blocked = matchesResourceProfilePattern(p.filePath, filter.block, this.cwd);\n\t\t\treturn allowed && !blocked;\n\t\t});\n\t}\n\n\tgetThemes(): { themes: Theme[]; diagnostics: ResourceDiagnostic[] } {\n\t\treturn { themes: this.themes, diagnostics: this.themeDiagnostics };\n\t}\n\n\t/**\n\t * Themes permitted by the CURRENTLY active resource profile.\n\t */\n\tgetActiveThemes(): Theme[] {\n\t\tconst filter = this.settingsManager.getResourceProfileFilter(\"themes\");\n\t\tif (filter.allow.length === 0 && filter.block.length === 0) return this.themes;\n\t\treturn this.themes.filter((t) => {\n\t\t\tif (!t.sourcePath) return true;\n\t\t\tconst allowed =\n\t\t\t\tfilter.allow.length === 0 || matchesResourceProfilePattern(t.sourcePath, filter.allow, this.cwd);\n\t\t\tconst blocked = matchesResourceProfilePattern(t.sourcePath, filter.block, this.cwd);\n\t\t\treturn allowed && !blocked;\n\t\t});\n\t}\n\n\tgetAgentsFiles(): { agentsFiles: Array<{ path: string; content?: string }> } {\n\t\treturn { agentsFiles: this.agentsFiles };\n\t}\n\n\tgetSystemPrompt(): string | undefined {\n\t\treturn this.systemPrompt;\n\t}\n\n\tgetAppendSystemPrompt(): string[] {\n\t\treturn this.appendSystemPrompt;\n\t}\n\n\t/**\n\t * Get all discoverable extension paths (enabled and disabled).\n\t * Used for profile resource filtering to show the full universe of available extensions.\n\t */\n\tasync getDiscoverableExtensionPaths(): Promise<string[]> {\n\t\tawait this.settingsManager.reload();\n\t\tconst resolvedPaths = await this.packageManager.resolve();\n\t\tconst cliExtensionPaths = await this.packageManager.resolveExtensionSources(this.additionalExtensionPaths, {\n\t\t\ttemporary: true,\n\t\t});\n\t\t// Return all paths (enabled and disabled) from both resolved and CLI sources\n\t\tconst allPaths = new Set<string>();\n\t\tfor (const resource of resolvedPaths.extensions) {\n\t\t\tallPaths.add(resource.path);\n\t\t}\n\t\tfor (const resource of cliExtensionPaths.extensions) {\n\t\t\tallPaths.add(resource.path);\n\t\t}\n\t\treturn Array.from(allPaths);\n\t}\n\n\t/**\n\t * Get a loaded extension by path.\n\t * Matches by path or resolvedPath.\n\t */\n\tgetLoadedExtension(extensionPath: string): Extension | undefined {\n\t\treturn this.extensionsResult.extensions.find(\n\t\t\t(ext) => ext.path === extensionPath || ext.resolvedPath === extensionPath,\n\t\t);\n\t}\n\n\t/**\n\t * Remove and return a loaded extension from the extensions array.\n\t */\n\tremoveLoadedExtension(extensionPath: string): Extension | undefined {\n\t\tconst index = this.extensionsResult.extensions.findIndex(\n\t\t\t(ext) => ext.path === extensionPath || ext.resolvedPath === extensionPath,\n\t\t);\n\t\tif (index === -1) return undefined;\n\t\tconst [ext] = this.extensionsResult.extensions.splice(index, 1);\n\t\treturn ext;\n\t}\n\n\t/**\n\t * Load a single extension with fresh import, reusing the shared runtime.\n\t * Returns the loaded extension or null with error details.\n\t */\n\tasync loadSingleExtension(extensionPath: string): Promise<{ extension: Extension | null; error: string | null }> {\n\t\tconst result = await loadExtension(extensionPath, this.cwd, this.eventBus, this.extensionsResult.runtime, {\n\t\t\tfresh: true,\n\t\t});\n\t\tif (result.extension && !result.error) {\n\t\t\tconst loaded = result.extension;\n\t\t\t// Drop any stale generation at the same path, then register the freshly loaded one so\n\t\t\t// _buildRuntime() aggregates it.\n\t\t\tthis.extensionsResult.extensions = this.extensionsResult.extensions.filter(\n\t\t\t\t(e) => e.path !== loaded.path && e.resolvedPath !== loaded.resolvedPath,\n\t\t\t);\n\t\t\tthis.extensionsResult.extensions.push(loaded);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Apply the active resource-profile allow/block to a list of discovered resource paths.\n\t * Used for every source that does NOT pass through the package manager's\n\t * resolve/applyResourceProfileFilters pipeline (external roots, bundled defaults, and\n\t * extension-contributed resources) so no source bypasses the active profile.\n\t */\n\tprivate filterPathsByProfile(paths: string[], kind: ResourceProfileKind): string[] {\n\t\tconst filter = this.settingsManager.getResourceProfileFilter(kind);\n\t\tif (filter.allow.length === 0 && filter.block.length === 0) return paths;\n\t\treturn paths.filter((p) => {\n\t\t\tconst allowed = filter.allow.length === 0 || matchesResourceProfilePattern(p, filter.allow, this.cwd);\n\t\t\tconst blocked = matchesResourceProfilePattern(p, filter.block, this.cwd);\n\t\t\treturn allowed && !blocked;\n\t\t});\n\t}\n\n\textendResources(paths: ResourceExtensionPaths): void {\n\t\t// Extension-contributed resources (via the resources_discover event) must respect the\n\t\t// active resource profile too — otherwise an allowed extension can re-introduce skills/\n\t\t// prompts/themes the profile blocks.\n\t\tconst allowPath = (entry: { path: string }, kind: ResourceProfileKind): boolean =>\n\t\t\tthis.filterPathsByProfile([entry.path], kind).length > 0;\n\t\tconst skillPaths = this.normalizeExtensionPaths(paths.skillPaths ?? []).filter((e) => allowPath(e, \"skills\"));\n\t\tconst promptPaths = this.normalizeExtensionPaths(paths.promptPaths ?? []).filter((e) => allowPath(e, \"prompts\"));\n\t\tconst themePaths = this.normalizeExtensionPaths(paths.themePaths ?? []).filter((e) => allowPath(e, \"themes\"));\n\n\t\tfor (const entry of skillPaths) {\n\t\t\tthis.extensionSkillSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));\n\t\t}\n\t\tfor (const entry of promptPaths) {\n\t\t\tthis.extensionPromptSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));\n\t\t}\n\t\tfor (const entry of themePaths) {\n\t\t\tthis.extensionThemeSourceInfos.set(entry.path, createSourceInfo(entry.path, entry.metadata));\n\t\t}\n\n\t\tif (skillPaths.length > 0) {\n\t\t\tthis.lastSkillPaths = this.mergePaths(\n\t\t\t\tthis.lastSkillPaths,\n\t\t\t\tskillPaths.map((entry) => entry.path),\n\t\t\t);\n\t\t\tthis.updateSkillsFromPaths(this.lastSkillPaths);\n\t\t}\n\n\t\tif (promptPaths.length > 0) {\n\t\t\tthis.lastPromptPaths = this.mergePaths(\n\t\t\t\tthis.lastPromptPaths,\n\t\t\t\tpromptPaths.map((entry) => entry.path),\n\t\t\t);\n\t\t\tthis.updatePromptsFromPaths(this.lastPromptPaths);\n\t\t}\n\n\t\tif (themePaths.length > 0) {\n\t\t\tthis.lastThemePaths = this.mergePaths(\n\t\t\t\tthis.lastThemePaths,\n\t\t\t\tthemePaths.map((entry) => entry.path),\n\t\t\t);\n\t\t\tthis.updateThemesFromPaths(this.lastThemePaths);\n\t\t}\n\t}\n\n\tprivate createSnapshot(): ResourceLoaderSnapshot {\n\t\treturn {\n\t\t\textensionsResult: this.extensionsResult,\n\t\t\tskills: this.skills,\n\t\t\tskillDiagnostics: this.skillDiagnostics,\n\t\t\tprompts: this.prompts,\n\t\t\tpromptDiagnostics: this.promptDiagnostics,\n\t\t\tthemes: this.themes,\n\t\t\tthemeDiagnostics: this.themeDiagnostics,\n\t\t\tagentsFiles: this.agentsFiles,\n\t\t\tsystemPrompt: this.systemPrompt,\n\t\t\tappendSystemPrompt: this.appendSystemPrompt,\n\t\t\tlastSkillPaths: this.lastSkillPaths,\n\t\t\textensionSkillSourceInfos: this.extensionSkillSourceInfos,\n\t\t\textensionPromptSourceInfos: this.extensionPromptSourceInfos,\n\t\t\textensionThemeSourceInfos: this.extensionThemeSourceInfos,\n\t\t\tlastPromptPaths: this.lastPromptPaths,\n\t\t\tlastThemePaths: this.lastThemePaths,\n\t\t};\n\t}\n\n\tprivate restoreSnapshot(snapshot: ResourceLoaderSnapshot): void {\n\t\tthis.extensionsResult = snapshot.extensionsResult;\n\t\tthis.skills = snapshot.skills;\n\t\tthis.skillDiagnostics = snapshot.skillDiagnostics;\n\t\tthis.prompts = snapshot.prompts;\n\t\tthis.promptDiagnostics = snapshot.promptDiagnostics;\n\t\tthis.themes = snapshot.themes;\n\t\tthis.themeDiagnostics = snapshot.themeDiagnostics;\n\t\tthis.agentsFiles = snapshot.agentsFiles;\n\t\tthis.systemPrompt = snapshot.systemPrompt;\n\t\tthis.appendSystemPrompt = snapshot.appendSystemPrompt;\n\t\tthis.lastSkillPaths = snapshot.lastSkillPaths;\n\t\tthis.extensionSkillSourceInfos = snapshot.extensionSkillSourceInfos;\n\t\tthis.extensionPromptSourceInfos = snapshot.extensionPromptSourceInfos;\n\t\tthis.extensionThemeSourceInfos = snapshot.extensionThemeSourceInfos;\n\t\tthis.lastPromptPaths = snapshot.lastPromptPaths;\n\t\tthis.lastThemePaths = snapshot.lastThemePaths;\n\t}\n\n\tasync commitReload(): Promise<void> {\n\t\tif (!this.pendingReloadSnapshot) return;\n\t\tawait disposeExtensionEventSubscriptions(this.pendingReloadSnapshot.extensionsResult.extensions);\n\t\tthis.pendingReloadSnapshot = undefined;\n\t}\n\n\tasync rollbackReload(): Promise<void> {\n\t\tif (!this.pendingReloadSnapshot) return;\n\t\tawait disposeExtensionEventSubscriptions(this.extensionsResult.extensions);\n\t\tthis.restoreSnapshot(this.pendingReloadSnapshot);\n\t\tthis.pendingReloadSnapshot = undefined;\n\t}\n\n\tasync reload(options: ResourceReloadOptions = {}): Promise<void> {\n\t\tconst snapshot = this.createSnapshot();\n\t\tthis.pendingReloadSnapshot = undefined;\n\t\ttry {\n\t\t\tawait this.settingsManager.reload();\n\t\t\tconst resolvedPaths = await this.packageManager.resolve();\n\t\t\tconst cliExtensionPaths = await this.packageManager.resolveExtensionSources(this.additionalExtensionPaths, {\n\t\t\t\ttemporary: true,\n\t\t\t});\n\t\t\tconst metadataByPath = new Map<string, PathMetadata>();\n\n\t\t\tthis.extensionSkillSourceInfos = new Map();\n\t\t\tthis.extensionPromptSourceInfos = new Map();\n\t\t\tthis.extensionThemeSourceInfos = new Map();\n\n\t\t\t// Helper to extract enabled paths and store metadata\n\t\t\tconst getEnabledResources = (\n\t\t\t\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\t\t\t): Array<{ path: string; enabled: boolean; metadata: PathMetadata }> => {\n\t\t\t\tfor (const r of resources) {\n\t\t\t\t\tif (!metadataByPath.has(r.path)) {\n\t\t\t\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn resources.filter((r) => r.enabled);\n\t\t\t};\n\n\t\t\tconst getEnabledPaths = (\n\t\t\t\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\t\t\t): string[] => getEnabledResources(resources).map((r) => r.path);\n\n\t\t\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions);\n\t\t\tconst enabledSkillResources = getEnabledResources(resolvedPaths.skills);\n\t\t\tconst enabledPrompts = getEnabledPaths(resolvedPaths.prompts);\n\t\t\tconst enabledThemes = getEnabledPaths(resolvedPaths.themes);\n\n\t\t\tconst mapSkillPath = (resource: { path: string; metadata: PathMetadata }): string => {\n\t\t\t\tif (resource.metadata.source !== \"auto\" && resource.metadata.origin !== \"package\") {\n\t\t\t\t\treturn resource.path;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = statSync(resource.path);\n\t\t\t\t\tif (!stats.isDirectory()) {\n\t\t\t\t\t\treturn resource.path;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\treturn resource.path;\n\t\t\t\t}\n\t\t\t\tconst skillFile = join(resource.path, \"SKILL.md\");\n\t\t\t\tif (existsSync(skillFile)) {\n\t\t\t\t\tif (!metadataByPath.has(skillFile)) {\n\t\t\t\t\t\tmetadataByPath.set(skillFile, resource.metadata);\n\t\t\t\t\t}\n\t\t\t\t\treturn skillFile;\n\t\t\t\t}\n\t\t\t\treturn resource.path;\n\t\t\t};\n\n\t\t\tconst enabledSkills = enabledSkillResources.map(mapSkillPath);\n\n\t\t\t// Add CLI paths metadata\n\t\t\tfor (const r of cliExtensionPaths.extensions) {\n\t\t\t\tif (!metadataByPath.has(r.path)) {\n\t\t\t\t\tmetadataByPath.set(r.path, { source: \"cli\", scope: \"temporary\", origin: \"top-level\" });\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const r of cliExtensionPaths.skills) {\n\t\t\t\tif (!metadataByPath.has(r.path)) {\n\t\t\t\t\tmetadataByPath.set(r.path, { source: \"cli\", scope: \"temporary\", origin: \"top-level\" });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions);\n\t\t\tconst cliEnabledSkills = getEnabledPaths(cliExtensionPaths.skills);\n\t\t\tconst cliEnabledPrompts = getEnabledPaths(cliExtensionPaths.prompts);\n\t\t\tconst cliEnabledThemes = getEnabledPaths(cliExtensionPaths.themes);\n\n\t\t\t// Gather effective external resource roots\n\t\t\tconst effectiveRoots = this.settingsManager.getEffectiveExternalResourceRoots();\n\n\t\t\tconst filterPathsByProfile = (paths: string[], kind: ResourceProfileKind): string[] =>\n\t\t\t\tthis.filterPathsByProfile(paths, kind);\n\n\t\t\t// Discover external extensions\n\t\t\tconst externalExtensions: string[] = [];\n\t\t\tfor (const root of effectiveRoots) {\n\t\t\t\tconst extDir = join(root, \"extensions\");\n\t\t\t\tif (existsSync(extDir)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst entries = readdirSync(extDir, { withFileTypes: true });\n\t\t\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t\t\tlet isDir = entry.isDirectory();\n\t\t\t\t\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst stats = statSync(join(extDir, entry.name));\n\t\t\t\t\t\t\t\t\tisDir = stats.isDirectory();\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isDir) {\n\t\t\t\t\t\t\t\tconst entryPath = join(extDir, entry.name);\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\texistsSync(join(entryPath, \"index.ts\")) ||\n\t\t\t\t\t\t\t\t\texistsSync(join(entryPath, \"index.js\")) ||\n\t\t\t\t\t\t\t\t\texistsSync(join(entryPath, \"package.json\"))\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\texternalExtensions.push(entryPath);\n\t\t\t\t\t\t\t\t\tmetadataByPath.set(entryPath, { source: \"external\", scope: \"user\", origin: \"top-level\" });\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\t\t\t\t\t} catch {\n\t\t\t\t\t\t// silent\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extensionPaths = this.noExtensions\n\t\t\t\t? cliEnabledExtensions\n\t\t\t\t: this.mergePaths(cliEnabledExtensions, [\n\t\t\t\t\t\t...filterPathsByProfile(enabledExtensions, \"extensions\"),\n\t\t\t\t\t\t...filterPathsByProfile(externalExtensions, \"extensions\"),\n\t\t\t\t\t]);\n\n\t\t\tconst extensionsResult = await loadExtensions(extensionPaths, this.cwd, this.eventBus);\n\t\t\tconst inlineExtensions = await this.loadExtensionFactories(extensionsResult.runtime);\n\t\t\textensionsResult.extensions.push(...inlineExtensions.extensions);\n\t\t\textensionsResult.errors.push(...inlineExtensions.errors);\n\n\t\t\t// Detect extension conflicts (tools, commands, flags with same names from different extensions)\n\t\t\t// Keep all extensions loaded. Conflicts are reported as diagnostics, and precedence is handled by load order.\n\t\t\tconst conflicts = this.detectExtensionConflicts(extensionsResult.extensions);\n\t\t\tfor (const conflict of conflicts) {\n\t\t\t\textensionsResult.errors.push({ path: conflict.path, error: conflict.message });\n\t\t\t}\n\n\t\t\tfor (const p of this.additionalExtensionPaths) {\n\t\t\t\tif (isLocalPath(p)) {\n\t\t\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\t\t\tif (!existsSync(resolved)) {\n\t\t\t\t\t\textensionsResult.errors.push({ path: resolved, error: `Extension path does not exist: ${resolved}` });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst resolvedExtensionsResult = this.extensionsOverride\n\t\t\t\t? this.extensionsOverride(extensionsResult)\n\t\t\t\t: extensionsResult;\n\t\t\tif (options.failOnExtensionErrors && resolvedExtensionsResult.errors.length > 0) {\n\t\t\t\tconst summary = resolvedExtensionsResult.errors\n\t\t\t\t\t.slice(0, 6)\n\t\t\t\t\t.map((error) => `${error.path}: ${error.error}`)\n\t\t\t\t\t.join(\"; \");\n\t\t\t\tthrow new Error(`Extension reload failed preflight: ${summary}`);\n\t\t\t}\n\t\t\tthis.extensionsResult = resolvedExtensionsResult;\n\t\t\tthis.applyExtensionSourceInfo(this.extensionsResult.extensions, metadataByPath);\n\n\t\t\t// Discover external skills\n\t\t\tconst externalSkills: string[] = [];\n\t\t\tfor (const root of effectiveRoots) {\n\t\t\t\tconst skillsDir = join(root, \"skills\");\n\t\t\t\tif (existsSync(skillsDir)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst entries = readdirSync(skillsDir, { withFileTypes: true });\n\t\t\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t\t\tlet isDir = entry.isDirectory();\n\t\t\t\t\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst stats = statSync(join(skillsDir, entry.name));\n\t\t\t\t\t\t\t\t\tisDir = stats.isDirectory();\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isDir) {\n\t\t\t\t\t\t\t\tconst entryPath = join(skillsDir, entry.name);\n\t\t\t\t\t\t\t\tconst skillFile = join(entryPath, \"SKILL.md\");\n\t\t\t\t\t\t\t\tconst targetPath = existsSync(skillFile) ? skillFile : entryPath;\n\t\t\t\t\t\t\t\texternalSkills.push(targetPath);\n\t\t\t\t\t\t\t\tmetadataByPath.set(targetPath, { source: \"external\", scope: \"user\", origin: \"top-level\" });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// silent\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Build skill paths with precedence: CLI > user/project > bundled > additional.\n\t\t\t// Bundled skills are expanded into individual SKILL.md paths so they pass through the\n\t\t\t// resource-profile filter exactly like user/external skills (no source bypasses the profile).\n\t\t\tconst bundledSkillsDir = getBundledSkillsDir();\n\t\t\tconst bundledSkillPaths: string[] = [];\n\t\t\tif (existsSync(bundledSkillsDir)) {\n\t\t\t\ttry {\n\t\t\t\t\tfor (const entry of readdirSync(bundledSkillsDir, { withFileTypes: true })) {\n\t\t\t\t\t\tif (!entry.isDirectory()) continue;\n\t\t\t\t\t\tconst entryPath = join(bundledSkillsDir, entry.name);\n\t\t\t\t\t\tconst skillFile = join(entryPath, \"SKILL.md\");\n\t\t\t\t\t\tbundledSkillPaths.push(existsSync(skillFile) ? skillFile : entryPath);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// silent\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst skillPaths = this.noSkills\n\t\t\t\t? this.mergePaths([...cliEnabledSkills], this.additionalSkillPaths)\n\t\t\t\t: this.mergePaths(\n\t\t\t\t\t\t[...cliEnabledSkills, ...enabledSkills, ...externalSkills, ...bundledSkillPaths],\n\t\t\t\t\t\tthis.additionalSkillPaths,\n\t\t\t\t\t);\n\n\t\t\tthis.lastSkillPaths = skillPaths;\n\t\t\tthis.updateSkillsFromPaths(skillPaths, metadataByPath);\n\t\t\tfor (const p of this.additionalSkillPaths) {\n\t\t\t\tif (isLocalPath(p)) {\n\t\t\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\t\t\tif (!existsSync(resolved) && !this.skillDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\t\tthis.skillDiagnostics.push({ type: \"error\", message: \"Skill path does not exist\", path: resolved });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Discover external prompts\n\t\t\tconst externalPrompts: string[] = [];\n\t\t\tfor (const root of effectiveRoots) {\n\t\t\t\tconst promptsDir = join(root, \"prompts\");\n\t\t\t\tif (existsSync(promptsDir)) {\n\t\t\t\t\tconst files = collectFilesRecursively(promptsDir, /\\.md$/);\n\t\t\t\t\tfor (const f of files) {\n\t\t\t\t\t\texternalPrompts.push(f);\n\t\t\t\t\t\tmetadataByPath.set(f, { source: \"external\", scope: \"user\", origin: \"top-level\" });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Bundled prompts expanded into individual files so they pass through the profile filter too.\n\t\t\tconst bundledPromptsDir = getBundledPromptsDir();\n\t\t\tconst bundledPromptPaths = existsSync(bundledPromptsDir)\n\t\t\t\t? collectFilesRecursively(bundledPromptsDir, /\\.md$/)\n\t\t\t\t: [];\n\t\t\tconst promptPaths = this.noPromptTemplates\n\t\t\t\t? this.mergePaths(cliEnabledPrompts, this.additionalPromptTemplatePaths)\n\t\t\t\t: this.mergePaths(\n\t\t\t\t\t\t[...cliEnabledPrompts, ...enabledPrompts, ...externalPrompts, ...bundledPromptPaths],\n\t\t\t\t\t\tthis.additionalPromptTemplatePaths,\n\t\t\t\t\t);\n\n\t\t\tthis.lastPromptPaths = promptPaths;\n\t\t\tthis.updatePromptsFromPaths(promptPaths, metadataByPath);\n\t\t\tfor (const p of this.additionalPromptTemplatePaths) {\n\t\t\t\tif (isLocalPath(p)) {\n\t\t\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\t\t\tif (!existsSync(resolved) && !this.promptDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\t\tthis.promptDiagnostics.push({\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\tmessage: \"Prompt template path does not exist\",\n\t\t\t\t\t\t\tpath: resolved,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Discover external themes\n\t\t\tconst externalThemes: string[] = [];\n\t\t\tfor (const root of effectiveRoots) {\n\t\t\t\tconst themesDir = join(root, \"themes\");\n\t\t\t\tif (existsSync(themesDir)) {\n\t\t\t\t\tconst files = collectFilesRecursively(themesDir, /\\.json$/);\n\t\t\t\t\tfor (const f of files) {\n\t\t\t\t\t\texternalThemes.push(f);\n\t\t\t\t\t\tmetadataByPath.set(f, { source: \"external\", scope: \"user\", origin: \"top-level\" });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst themePaths = this.noThemes\n\t\t\t\t? this.mergePaths(cliEnabledThemes, this.additionalThemePaths)\n\t\t\t\t: this.mergePaths([...cliEnabledThemes, ...enabledThemes, ...externalThemes], this.additionalThemePaths);\n\n\t\t\tthis.lastThemePaths = themePaths;\n\t\t\tthis.updateThemesFromPaths(themePaths, metadataByPath);\n\t\t\tfor (const p of this.additionalThemePaths) {\n\t\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\t\tif (!existsSync(resolved) && !this.themeDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\tthis.themeDiagnostics.push({ type: \"error\", message: \"Theme path does not exist\", path: resolved });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst rawAgentsFiles = this.noContextFiles\n\t\t\t\t? []\n\t\t\t\t: loadProjectContextFiles({\n\t\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\t\tagentDir: this.agentDir,\n\t\t\t\t\t\tprojectTrusted: this.settingsManager.isProjectTrusted(),\n\t\t\t\t\t});\n\t\t\tconst agentEmbeddedProfiles: Record<string, ResourceProfileSettings> = {};\n\t\t\tconst activeProfileNames = this.settingsManager.getActiveResourceProfileNames();\n\t\t\tfor (const file of rawAgentsFiles) {\n\t\t\t\ttry {\n\t\t\t\t\tconst rawContent = readFileSync(file.path, \"utf-8\");\n\t\t\t\t\tconst { profiles } = parseResourceProfileBlocks(rawContent, { profileNames: activeProfileNames });\n\t\t\t\t\tObject.assign(agentEmbeddedProfiles, mergeResourceProfileMap(agentEmbeddedProfiles, profiles));\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t\tthis.settingsManager.addDiscoveredResourceProfileDefinitions(agentEmbeddedProfiles);\n\t\t\tconst agentProfileFilter = this.settingsManager.getResourceProfileFilter(\"agents\");\n\t\t\tconst agentsFiles = {\n\t\t\t\tagentsFiles: rawAgentsFiles\n\t\t\t\t\t.filter((file) => {\n\t\t\t\t\t\tconst allowed =\n\t\t\t\t\t\t\tagentProfileFilter.allow.length === 0 ||\n\t\t\t\t\t\t\tmatchesResourceProfilePattern(file.path, agentProfileFilter.allow, this.cwd);\n\t\t\t\t\t\tconst blocked = matchesResourceProfilePattern(file.path, agentProfileFilter.block, this.cwd);\n\t\t\t\t\t\treturn allowed && !blocked;\n\t\t\t\t\t})\n\t\t\t\t\t.map((file) => ({\n\t\t\t\t\t\t...file,\n\t\t\t\t\t\tcontent: file.content ? stripResourceProfileBlocks(file.content) : file.content,\n\t\t\t\t\t})),\n\t\t\t};\n\t\t\tconst resolvedAgentsFiles = this.agentsFilesOverride ? this.agentsFilesOverride(agentsFiles) : agentsFiles;\n\t\t\tthis.agentsFiles = resolvedAgentsFiles.agentsFiles;\n\n\t\t\tconst baseSystemPrompt = resolvePromptInput(\n\t\t\t\tthis.systemPromptSource ?? this.discoverSystemPromptFile(),\n\t\t\t\t\"system prompt\",\n\t\t\t);\n\t\t\tthis.systemPrompt = this.systemPromptOverride ? this.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;\n\n\t\t\tconst appendSources =\n\t\t\t\tthis.appendSystemPromptSource ??\n\t\t\t\t(this.discoverAppendSystemPromptFile() ? [this.discoverAppendSystemPromptFile()!] : []);\n\t\t\tconst baseAppend = appendSources\n\t\t\t\t.map((s) => resolvePromptInput(s, \"append system prompt\"))\n\t\t\t\t.filter((s): s is string => s !== undefined);\n\t\t\tthis.appendSystemPrompt = this.appendSystemPromptOverride\n\t\t\t\t? this.appendSystemPromptOverride(baseAppend)\n\t\t\t\t: baseAppend;\n\t\t\tif (options.deferExtensionDispose) {\n\t\t\t\tthis.pendingReloadSnapshot = snapshot;\n\t\t\t} else {\n\t\t\t\tawait disposeExtensionEventSubscriptions(snapshot.extensionsResult.extensions);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (this.extensionsResult !== snapshot.extensionsResult) {\n\t\t\t\tawait disposeExtensionEventSubscriptions(this.extensionsResult.extensions);\n\t\t\t}\n\t\t\tthis.restoreSnapshot(snapshot);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate normalizeExtensionPaths(\n\t\tentries: Array<{ path: string; metadata: PathMetadata }>,\n\t): Array<{ path: string; metadata: PathMetadata }> {\n\t\treturn entries.map((entry) => {\n\t\t\tconst metadata = entry.metadata.baseDir\n\t\t\t\t? { ...entry.metadata, baseDir: this.resolveResourcePath(entry.metadata.baseDir) }\n\t\t\t\t: entry.metadata;\n\t\t\treturn {\n\t\t\t\tpath: this.resolveResourcePath(entry.path),\n\t\t\t\tmetadata,\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate updateSkillsFromPaths(skillPaths: string[], metadataByPath?: Map<string, PathMetadata>): void {\n\t\tlet skillsResult: { skills: Skill[]; diagnostics: ResourceDiagnostic[] };\n\t\tif (this.noSkills && skillPaths.length === 0) {\n\t\t\tskillsResult = { skills: [], diagnostics: [] };\n\t\t} else {\n\t\t\tskillsResult = loadSkills({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tagentDir: this.agentDir,\n\t\t\t\tskillPaths,\n\t\t\t\tincludeDefaults: false,\n\t\t\t});\n\t\t}\n\t\tconst resolvedSkills = this.skillsOverride ? this.skillsOverride(skillsResult) : skillsResult;\n\t\tthis.skills = resolvedSkills.skills.map((skill) => ({\n\t\t\t...skill,\n\t\t\tsourceInfo:\n\t\t\t\tthis.findSourceInfoForPath(skill.filePath, this.extensionSkillSourceInfos, metadataByPath) ??\n\t\t\t\tskill.sourceInfo ??\n\t\t\t\tthis.getDefaultSourceInfoForPath(skill.filePath),\n\t\t}));\n\t\tthis.skillDiagnostics = resolvedSkills.diagnostics;\n\t}\n\n\tprivate updatePromptsFromPaths(promptPaths: string[], metadataByPath?: Map<string, PathMetadata>): void {\n\t\tlet promptsResult: { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] };\n\t\tif (this.noPromptTemplates && promptPaths.length === 0) {\n\t\t\tpromptsResult = { prompts: [], diagnostics: [] };\n\t\t} else {\n\t\t\tconst allPrompts = loadPromptTemplates({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tagentDir: this.agentDir,\n\t\t\t\tpromptPaths,\n\t\t\t\tincludeDefaults: false,\n\t\t\t});\n\t\t\tpromptsResult = this.dedupePrompts(allPrompts);\n\t\t}\n\t\tconst resolvedPrompts = this.promptsOverride ? this.promptsOverride(promptsResult) : promptsResult;\n\t\tthis.prompts = resolvedPrompts.prompts.map((prompt) => ({\n\t\t\t...prompt,\n\t\t\tsourceInfo:\n\t\t\t\tthis.findSourceInfoForPath(prompt.filePath, this.extensionPromptSourceInfos, metadataByPath) ??\n\t\t\t\tprompt.sourceInfo ??\n\t\t\t\tthis.getDefaultSourceInfoForPath(prompt.filePath),\n\t\t}));\n\t\tthis.promptDiagnostics = resolvedPrompts.diagnostics;\n\t}\n\n\tprivate updateThemesFromPaths(themePaths: string[], metadataByPath?: Map<string, PathMetadata>): void {\n\t\tlet themesResult: { themes: Theme[]; diagnostics: ResourceDiagnostic[] };\n\t\tif (this.noThemes && themePaths.length === 0) {\n\t\t\tthemesResult = { themes: [], diagnostics: [] };\n\t\t} else {\n\t\t\tconst loaded = this.loadThemes(themePaths, false);\n\t\t\tconst deduped = this.dedupeThemes(loaded.themes);\n\t\t\tthemesResult = { themes: deduped.themes, diagnostics: [...loaded.diagnostics, ...deduped.diagnostics] };\n\t\t}\n\t\tconst resolvedThemes = this.themesOverride ? this.themesOverride(themesResult) : themesResult;\n\t\tthis.themes = resolvedThemes.themes.map((theme) => {\n\t\t\tconst sourcePath = theme.sourcePath;\n\t\t\ttheme.sourceInfo = sourcePath\n\t\t\t\t? (this.findSourceInfoForPath(sourcePath, this.extensionThemeSourceInfos, metadataByPath) ??\n\t\t\t\t\ttheme.sourceInfo ??\n\t\t\t\t\tthis.getDefaultSourceInfoForPath(sourcePath))\n\t\t\t\t: theme.sourceInfo;\n\t\t\treturn theme;\n\t\t});\n\t\tthis.themeDiagnostics = resolvedThemes.diagnostics;\n\t}\n\n\tprivate applyExtensionSourceInfo(extensions: Extension[], metadataByPath: Map<string, PathMetadata>): void {\n\t\tfor (const extension of extensions) {\n\t\t\textension.sourceInfo =\n\t\t\t\tthis.findSourceInfoForPath(extension.path, undefined, metadataByPath) ??\n\t\t\t\tthis.getDefaultSourceInfoForPath(extension.path);\n\t\t\tfor (const command of extension.commands.values()) {\n\t\t\t\tcommand.sourceInfo = extension.sourceInfo;\n\t\t\t}\n\t\t\tfor (const tool of extension.tools.values()) {\n\t\t\t\ttool.sourceInfo = extension.sourceInfo;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate findSourceInfoForPath(\n\t\tresourcePath: string,\n\t\textraSourceInfos?: Map<string, SourceInfo>,\n\t\tmetadataByPath?: Map<string, PathMetadata>,\n\t): SourceInfo | undefined {\n\t\tif (!resourcePath) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (resourcePath.startsWith(\"<\")) {\n\t\t\treturn this.getDefaultSourceInfoForPath(resourcePath);\n\t\t}\n\n\t\tconst normalizedResourcePath = resolve(resourcePath);\n\t\tif (extraSourceInfos) {\n\t\t\tfor (const [sourcePath, sourceInfo] of extraSourceInfos.entries()) {\n\t\t\t\tconst normalizedSourcePath = resolve(sourcePath);\n\t\t\t\tif (\n\t\t\t\t\tnormalizedResourcePath === normalizedSourcePath ||\n\t\t\t\t\tnormalizedResourcePath.startsWith(`${normalizedSourcePath}${sep}`)\n\t\t\t\t) {\n\t\t\t\t\treturn { ...sourceInfo, path: resourcePath };\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (metadataByPath) {\n\t\t\tconst exact = metadataByPath.get(normalizedResourcePath) ?? metadataByPath.get(resourcePath);\n\t\t\tif (exact) {\n\t\t\t\treturn createSourceInfo(resourcePath, exact);\n\t\t\t}\n\n\t\t\tfor (const [sourcePath, metadata] of metadataByPath.entries()) {\n\t\t\t\tconst normalizedSourcePath = resolve(sourcePath);\n\t\t\t\tif (\n\t\t\t\t\tnormalizedResourcePath === normalizedSourcePath ||\n\t\t\t\t\tnormalizedResourcePath.startsWith(`${normalizedSourcePath}${sep}`)\n\t\t\t\t) {\n\t\t\t\t\treturn createSourceInfo(resourcePath, metadata);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate getDefaultSourceInfoForPath(filePath: string): SourceInfo {\n\t\tif (filePath.startsWith(\"<\") && filePath.endsWith(\">\")) {\n\t\t\treturn {\n\t\t\t\tpath: filePath,\n\t\t\t\tsource: filePath.slice(1, -1).split(\":\")[0] || \"temporary\",\n\t\t\t\tscope: \"temporary\",\n\t\t\t\torigin: \"top-level\",\n\t\t\t};\n\t\t}\n\n\t\tconst normalizedPath = resolve(filePath);\n\t\tconst agentRoots = [\n\t\t\tjoin(this.agentDir, \"skills\"),\n\t\t\tjoin(this.agentDir, \"prompts\"),\n\t\t\tjoin(this.agentDir, \"themes\"),\n\t\t\tjoin(this.agentDir, \"extensions\"),\n\t\t];\n\t\tconst projectRoots = [\n\t\t\tjoin(this.cwd, CONFIG_DIR_NAME, \"skills\"),\n\t\t\tjoin(this.cwd, CONFIG_DIR_NAME, \"prompts\"),\n\t\t\tjoin(this.cwd, CONFIG_DIR_NAME, \"themes\"),\n\t\t\tjoin(this.cwd, CONFIG_DIR_NAME, \"extensions\"),\n\t\t];\n\n\t\tfor (const root of agentRoots) {\n\t\t\tif (this.isUnderPath(normalizedPath, root)) {\n\t\t\t\treturn { path: filePath, source: \"local\", scope: \"user\", origin: \"top-level\", baseDir: root };\n\t\t\t}\n\t\t}\n\n\t\tfor (const root of projectRoots) {\n\t\t\tif (this.isUnderPath(normalizedPath, root)) {\n\t\t\t\treturn { path: filePath, source: \"local\", scope: \"project\", origin: \"top-level\", baseDir: root };\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tpath: filePath,\n\t\t\tsource: \"local\",\n\t\t\tscope: \"temporary\",\n\t\t\torigin: \"top-level\",\n\t\t\tbaseDir: statSync(normalizedPath).isDirectory() ? normalizedPath : resolve(normalizedPath, \"..\"),\n\t\t};\n\t}\n\n\tprivate mergePaths(primary: string[], additional: string[]): string[] {\n\t\tconst merged: string[] = [];\n\t\tconst seen = new Set<string>();\n\n\t\tfor (const p of [...primary, ...additional]) {\n\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\tconst canonicalPath = canonicalizePath(resolved);\n\t\t\tif (seen.has(canonicalPath)) continue;\n\t\t\tseen.add(canonicalPath);\n\t\t\tmerged.push(resolved);\n\t\t}\n\n\t\treturn merged;\n\t}\n\n\tprivate resolveResourcePath(p: string): string {\n\t\treturn resolvePath(p, this.cwd, { trim: true });\n\t}\n\n\tprivate loadThemes(\n\t\tpaths: string[],\n\t\tincludeDefaults: boolean = true,\n\t): {\n\t\tthemes: Theme[];\n\t\tdiagnostics: ResourceDiagnostic[];\n\t} {\n\t\tconst themes: Theme[] = [];\n\t\tconst diagnostics: ResourceDiagnostic[] = [];\n\t\tif (includeDefaults) {\n\t\t\tconst defaultDirs = [join(this.agentDir, \"themes\"), join(this.cwd, CONFIG_DIR_NAME, \"themes\")];\n\n\t\t\tfor (const dir of defaultDirs) {\n\t\t\t\tthis.loadThemesFromDir(dir, themes, diagnostics);\n\t\t\t}\n\t\t}\n\n\t\tfor (const p of paths) {\n\t\t\tconst resolved = this.resolveResourcePath(p);\n\t\t\tif (!existsSync(resolved)) {\n\t\t\t\tdiagnostics.push({ type: \"warning\", message: \"theme path does not exist\", path: resolved });\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst stats = statSync(resolved);\n\t\t\t\tif (stats.isDirectory()) {\n\t\t\t\t\tthis.loadThemesFromDir(resolved, themes, diagnostics);\n\t\t\t\t} else if (stats.isFile() && resolved.endsWith(\".json\")) {\n\t\t\t\t\tthis.loadThemeFromFile(resolved, themes, diagnostics);\n\t\t\t\t} else {\n\t\t\t\t\tdiagnostics.push({ type: \"warning\", message: \"theme path is not a json file\", path: resolved });\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : \"failed to read theme path\";\n\t\t\t\tdiagnostics.push({ type: \"warning\", message, path: resolved });\n\t\t\t}\n\t\t}\n\n\t\treturn { themes, diagnostics };\n\t}\n\n\tprivate loadThemesFromDir(dir: string, themes: Theme[], diagnostics: ResourceDiagnostic[]): void {\n\t\tif (!existsSync(dir)) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst entries = readdirSync(dir, { withFileTypes: true });\n\t\t\tfor (const entry of entries) {\n\t\t\t\tlet isFile = entry.isFile();\n\t\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tisFile = statSync(join(dir, entry.name)).isFile();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isFile) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!entry.name.endsWith(\".json\")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.loadThemeFromFile(join(dir, entry.name), themes, diagnostics);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"failed to read theme directory\";\n\t\t\tdiagnostics.push({ type: \"warning\", message, path: dir });\n\t\t}\n\t}\n\n\tprivate loadThemeFromFile(filePath: string, themes: Theme[], diagnostics: ResourceDiagnostic[]): void {\n\t\ttry {\n\t\t\tthemes.push(loadThemeFromPath(filePath));\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"failed to load theme\";\n\t\t\tdiagnostics.push({ type: \"warning\", message, path: filePath });\n\t\t}\n\t}\n\n\tprivate async loadExtensionFactories(runtime: ExtensionRuntime): Promise<{\n\t\textensions: Extension[];\n\t\terrors: Array<{ path: string; error: string }>;\n\t}> {\n\t\tconst extensions: Extension[] = [];\n\t\tconst errors: Array<{ path: string; error: string }> = [];\n\n\t\tfor (const [index, factory] of this.extensionFactories.entries()) {\n\t\t\tconst extensionPath = `<inline:${index + 1}>`;\n\t\t\ttry {\n\t\t\t\tconst extension = await loadExtensionFromFactory(factory, this.cwd, this.eventBus, runtime, extensionPath);\n\t\t\t\textensions.push(extension);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : \"failed to load extension\";\n\t\t\t\terrors.push({ path: extensionPath, error: message });\n\t\t\t}\n\t\t}\n\n\t\treturn { extensions, errors };\n\t}\n\n\tprivate dedupePrompts(prompts: PromptTemplate[]): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] } {\n\t\tconst seen = new Map<string, PromptTemplate>();\n\t\tconst diagnostics: ResourceDiagnostic[] = [];\n\n\t\tfor (const prompt of prompts) {\n\t\t\tconst existing = seen.get(prompt.name);\n\t\t\tif (existing) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\ttype: \"collision\",\n\t\t\t\t\tmessage: `name \"/${prompt.name}\" collision`,\n\t\t\t\t\tpath: prompt.filePath,\n\t\t\t\t\tcollision: {\n\t\t\t\t\t\tresourceType: \"prompt\",\n\t\t\t\t\t\tname: prompt.name,\n\t\t\t\t\t\twinnerPath: existing.filePath,\n\t\t\t\t\t\tloserPath: prompt.filePath,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tseen.set(prompt.name, prompt);\n\t\t\t}\n\t\t}\n\n\t\treturn { prompts: Array.from(seen.values()), diagnostics };\n\t}\n\n\tprivate dedupeThemes(themes: Theme[]): { themes: Theme[]; diagnostics: ResourceDiagnostic[] } {\n\t\tconst seen = new Map<string, Theme>();\n\t\tconst diagnostics: ResourceDiagnostic[] = [];\n\n\t\tfor (const t of themes) {\n\t\t\tconst name = t.name ?? \"unnamed\";\n\t\t\tconst existing = seen.get(name);\n\t\t\tif (existing) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\ttype: \"collision\",\n\t\t\t\t\tmessage: `name \"${name}\" collision`,\n\t\t\t\t\tpath: t.sourcePath,\n\t\t\t\t\tcollision: {\n\t\t\t\t\t\tresourceType: \"theme\",\n\t\t\t\t\t\tname,\n\t\t\t\t\t\twinnerPath: existing.sourcePath ?? \"<builtin>\",\n\t\t\t\t\t\tloserPath: t.sourcePath ?? \"<builtin>\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tseen.set(name, t);\n\t\t\t}\n\t\t}\n\n\t\treturn { themes: Array.from(seen.values()), diagnostics };\n\t}\n\n\tprivate discoverSystemPromptFile(): string | undefined {\n\t\tconst projectPath = join(this.cwd, CONFIG_DIR_NAME, \"SYSTEM.md\");\n\t\tif (this.settingsManager.isProjectTrusted() && existsSync(projectPath)) {\n\t\t\treturn projectPath;\n\t\t}\n\n\t\tconst globalPath = join(this.agentDir, \"SYSTEM.md\");\n\t\tif (existsSync(globalPath)) {\n\t\t\treturn globalPath;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate discoverAppendSystemPromptFile(): string | undefined {\n\t\tconst projectPath = join(this.cwd, CONFIG_DIR_NAME, \"APPEND_SYSTEM.md\");\n\t\tif (this.settingsManager.isProjectTrusted() && existsSync(projectPath)) {\n\t\t\treturn projectPath;\n\t\t}\n\n\t\tconst globalPath = join(this.agentDir, \"APPEND_SYSTEM.md\");\n\t\tif (existsSync(globalPath)) {\n\t\t\treturn globalPath;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate isUnderPath(target: string, root: string): boolean {\n\t\tconst normalizedRoot = resolve(root);\n\t\tif (target === normalizedRoot) {\n\t\t\treturn true;\n\t\t}\n\t\tconst prefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\t\treturn target.startsWith(prefix);\n\t}\n\n\tprivate detectExtensionConflicts(extensions: Extension[]): Array<{ path: string; message: string }> {\n\t\tconst conflicts: Array<{ path: string; message: string }> = [];\n\n\t\t// Track which extension registered each tool and flag\n\t\tconst toolOwners = new Map<string, string>();\n\t\tconst flagOwners = new Map<string, string>();\n\n\t\tfor (const ext of extensions) {\n\t\t\t// Check tools\n\t\t\tfor (const toolName of ext.tools.keys()) {\n\t\t\t\tconst existingOwner = toolOwners.get(toolName);\n\t\t\t\tif (existingOwner && existingOwner !== ext.path) {\n\t\t\t\t\tconflicts.push({\n\t\t\t\t\t\tpath: ext.path,\n\t\t\t\t\t\tmessage: `Tool \"${toolName}\" conflicts with ${existingOwner}`,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttoolOwners.set(toolName, ext.path);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check flags\n\t\t\tfor (const flagName of ext.flags.keys()) {\n\t\t\t\tconst existingOwner = flagOwners.get(flagName);\n\t\t\t\tif (existingOwner && existingOwner !== ext.path) {\n\t\t\t\t\tconflicts.push({\n\t\t\t\t\t\tpath: ext.path,\n\t\t\t\t\t\tmessage: `Flag \"--${flagName}\" conflicts with ${existingOwner}`,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tflagOwners.set(flagName, ext.path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn conflicts;\n\t}\n}\n\nfunction collectFilesRecursively(dir: string, pattern: RegExp): string[] {\n\tconst files: string[] = [];\n\tif (!existsSync(dir)) return files;\n\n\ttry {\n\t\tconst entries = readdirSync(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.name.startsWith(\".\")) continue;\n\t\t\tif (entry.name === \"node_modules\") continue;\n\n\t\t\tconst fullPath = join(dir, entry.name);\n\t\t\tlet isDir = entry.isDirectory();\n\t\t\tlet isFile = entry.isFile();\n\n\t\t\tif (entry.isSymbolicLink()) {\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = statSync(fullPath);\n\t\t\t\t\tisDir = stats.isDirectory();\n\t\t\t\t\tisFile = stats.isFile();\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isDir) {\n\t\t\t\tfiles.push(...collectFilesRecursively(fullPath, pattern));\n\t\t\t} else if (isFile && pattern.test(entry.name)) {\n\t\t\t\tfiles.push(fullPath);\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// silent\n\t}\n\treturn files;\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * System prompt construction and project context loading
3
3
  */
4
+ import type { Extension } from "./extensions/types.ts";
4
5
  import { type Skill } from "./skills.ts";
5
6
  export interface BuildSystemPromptOptions {
6
7
  /** Custom system prompt (replaces default). */
@@ -22,6 +23,8 @@ export interface BuildSystemPromptOptions {
22
23
  }>;
23
24
  /** Discovered skills; startup prompt lists only lazy-loadable locations. */
24
25
  skills?: Skill[];
26
+ /** Discovered extensions currently active. */
27
+ extensions?: Extension[];
25
28
  }
26
29
  /** Build the system prompt with tools, guidelines, and context */
27
30
  export declare function buildSystemPrompt(options: BuildSystemPromptOptions): string;
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,wBAAwB;IACxC,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,uCAAuC;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yBAAyB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,4EAA4E;IAC5E,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;CACjB;AAoCD,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,CAmI3E","sourcesContent":["/**\n * System prompt construction and project context loading\n */\n\nimport { getDocsPath, getExamplesPath, getReadmePath } from \"../config.ts\";\nimport { formatSkillsForPrompt, type Skill } from \"./skills.ts\";\n\nexport interface BuildSystemPromptOptions {\n\t/** Custom system prompt (replaces default). */\n\tcustomPrompt?: string;\n\t/** Tools to include in prompt. Default: [read, bash, edit, write, context_audit] */\n\tselectedTools?: string[];\n\t/** Optional one-line tool snippets keyed by tool name. */\n\ttoolSnippets?: Record<string, string>;\n\t/** Additional guideline bullets appended to the default system prompt guidelines. */\n\tpromptGuidelines?: string[];\n\t/** Text to append to system prompt. */\n\tappendSystemPrompt?: string;\n\t/** Working directory. */\n\tcwd: string;\n\t/** Eagerly loaded project/agent instruction files. */\n\tcontextFiles?: Array<{ path: string; content?: string }>;\n\t/** Discovered skills; startup prompt lists only lazy-loadable locations. */\n\tskills?: Skill[];\n}\n\nconst ADAPTATIVE_PERSONA_SECTION = `\n\nAdaptive operating posture:\n- Prefer the smallest safe action; verify important claims with tools when needed.\n- Preserve user trust: ask before credentials, destructive actions, publish/push/tag/release.\n- Keep durable learning concise and auditable; avoid storing transient noise.\n- For harness evolution, use explicit tools/profiles and validate changes before claiming success.`;\n\nfunction formatContextFilesForPrompt(contextFiles: Array<{ path: string; content?: string }>): string {\n\tif (contextFiles.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines = [\"\\n\\n<project_context>\", \"\", \"Project-specific instructions and guidelines:\", \"\"];\n\n\tfor (const { path, content } of contextFiles) {\n\t\tlines.push(`<project_instructions path=\"${escapeXml(path)}\">`);\n\t\tlines.push(content ?? \"\");\n\t\tlines.push(\"</project_instructions>\", \"\");\n\t}\n\n\tlines.push(\"</project_context>\");\n\treturn lines.join(\"\\n\");\n}\n\nfunction escapeXml(str: string): string {\n\treturn str\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\")\n\t\t.replace(/'/g, \"&apos;\");\n}\n\n/** Build the system prompt with tools, guidelines, and context */\nexport function buildSystemPrompt(options: BuildSystemPromptOptions): string {\n\tconst {\n\t\tcustomPrompt,\n\t\tselectedTools,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t\tappendSystemPrompt,\n\t\tcwd,\n\t\tcontextFiles: providedContextFiles,\n\t\tskills: providedSkills,\n\t} = options;\n\tconst resolvedCwd = cwd;\n\tconst promptCwd = resolvedCwd.replace(/\\\\/g, \"/\");\n\n\tconst now = new Date();\n\tconst year = now.getFullYear();\n\tconst month = String(now.getMonth() + 1).padStart(2, \"0\");\n\tconst day = String(now.getDate()).padStart(2, \"0\");\n\tconst date = `${year}-${month}-${day}`;\n\n\tconst appendSection = appendSystemPrompt ? `\\n\\n${appendSystemPrompt}` : \"\";\n\n\tconst contextFiles = providedContextFiles ?? [];\n\tconst skills = providedSkills ?? [];\n\n\tif (customPrompt) {\n\t\tlet prompt = customPrompt;\n\n\t\tprompt += ADAPTATIVE_PERSONA_SECTION;\n\n\t\tif (appendSection) {\n\t\t\tprompt += appendSection;\n\t\t}\n\n\t\tprompt += formatContextFilesForPrompt(contextFiles);\n\n\t\t// Append skills section (only if read tool is available)\n\t\tconst customPromptHasRead = !selectedTools || selectedTools.includes(\"read\");\n\t\tif (customPromptHasRead && skills.length > 0) {\n\t\t\tprompt += formatSkillsForPrompt(skills);\n\t\t}\n\n\t\t// Add date and working directory last\n\t\tprompt += `\\nCurrent date: ${date}`;\n\t\tprompt += `\\nCurrent working directory: ${promptCwd}`;\n\n\t\treturn prompt;\n\t}\n\n\t// Get absolute paths to documentation and examples\n\tconst readmePath = getReadmePath();\n\tconst docsPath = getDocsPath();\n\tconst examplesPath = getExamplesPath();\n\n\t// Build tools list based on selected tools.\n\t// A tool appears in Available tools only when the caller provides a one-line snippet.\n\tconst tools = selectedTools || [\"read\", \"bash\", \"edit\", \"write\"];\n\tconst visibleTools = tools.filter((name) => !!toolSnippets?.[name]);\n\tconst toolsList =\n\t\tvisibleTools.length > 0 ? visibleTools.map((name) => `- ${name}: ${toolSnippets![name]}`).join(\"\\n\") : \"(none)\";\n\n\t// Build guidelines based on which tools are actually available\n\tconst guidelinesList: string[] = [];\n\tconst guidelinesSet = new Set<string>();\n\tconst addGuideline = (guideline: string): void => {\n\t\tif (guidelinesSet.has(guideline)) {\n\t\t\treturn;\n\t\t}\n\t\tguidelinesSet.add(guideline);\n\t\tguidelinesList.push(guideline);\n\t};\n\n\tconst hasBash = tools.includes(\"bash\");\n\tconst hasGrep = tools.includes(\"grep\");\n\tconst hasFind = tools.includes(\"find\");\n\tconst hasLs = tools.includes(\"ls\");\n\tconst hasRead = tools.includes(\"read\");\n\n\t// File exploration guidelines\n\tif (hasBash && !hasGrep && !hasFind && !hasLs) {\n\t\taddGuideline(\"Use bash for file operations like ls, rg, find\");\n\t}\n\n\tfor (const guideline of promptGuidelines ?? []) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\taddGuideline(normalized);\n\t\t}\n\t}\n\n\t// Always include these\n\taddGuideline(\"Be concise in your responses\");\n\taddGuideline(\"Show file paths clearly when working with files\");\n\n\tconst guidelines = guidelinesList.map((g) => `- ${g}`).join(\"\\n\");\n\n\tlet prompt = `You are an expert coding assistant operating inside pi, a coding agent harness. You help users by reading files, executing commands, editing code, and writing new files.\n\nAvailable tools:\n${toolsList}\n\nIn addition to the tools above, you may have access to other custom tools depending on the project.${ADAPTATIVE_PERSONA_SECTION}\n\nGuidelines:\n${guidelines}\n\nPi documentation (read only when the user asks about pi itself, its SDK, extensions, themes, skills, or TUI):\n- Main documentation: ${readmePath}\n- Additional docs: ${docsPath}\n- Examples: ${examplesPath} (extensions, custom tools, SDK)\n- When reading pi docs or examples, resolve docs/... under Additional docs and examples/... under Examples, not the current working directory\n- When asked about: extensions (docs/extensions.md, examples/extensions/), themes (docs/themes.md), skills (docs/skills.md), prompt templates (docs/prompt-templates.md), TUI components (docs/tui.md), keybindings (docs/keybindings.md), SDK integrations (docs/sdk.md), custom providers (docs/custom-provider.md), adding models (docs/models.md), pi packages (docs/packages.md)\n- When working on pi topics, read the docs and examples, and follow .md cross-references before implementing\n- Always read pi .md files completely and follow links to related docs (e.g., tui.md for TUI API details)`;\n\n\tif (appendSection) {\n\t\tprompt += appendSection;\n\t}\n\n\tprompt += formatContextFilesForPrompt(contextFiles);\n\n\t// Append skills section (only if read tool is available)\n\tif (hasRead && skills.length > 0) {\n\t\tprompt += formatSkillsForPrompt(skills);\n\t}\n\n\t// Add date and working directory last\n\tprompt += `\\nCurrent date: ${date}`;\n\tprompt += `\\nCurrent working directory: ${promptCwd}`;\n\n\treturn prompt;\n}\n"]}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,wBAAwB;IACxC,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,uCAAuC;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yBAAyB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,4EAA4E;IAC5E,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CACzB;AAoCD,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,CAgJ3E","sourcesContent":["/**\n * System prompt construction and project context loading\n */\n\nimport { getDocsPath, getExamplesPath, getReadmePath } from \"../config.ts\";\nimport { getExtensionDescription, getExtensionDisplayName } from \"./extension-metadata.ts\";\nimport type { Extension } from \"./extensions/types.ts\";\nimport { formatSkillsForPrompt, type Skill } from \"./skills.ts\";\n\nexport interface BuildSystemPromptOptions {\n\t/** Custom system prompt (replaces default). */\n\tcustomPrompt?: string;\n\t/** Tools to include in prompt. Default: [read, bash, edit, write, context_audit] */\n\tselectedTools?: string[];\n\t/** Optional one-line tool snippets keyed by tool name. */\n\ttoolSnippets?: Record<string, string>;\n\t/** Additional guideline bullets appended to the default system prompt guidelines. */\n\tpromptGuidelines?: string[];\n\t/** Text to append to system prompt. */\n\tappendSystemPrompt?: string;\n\t/** Working directory. */\n\tcwd: string;\n\t/** Eagerly loaded project/agent instruction files. */\n\tcontextFiles?: Array<{ path: string; content?: string }>;\n\t/** Discovered skills; startup prompt lists only lazy-loadable locations. */\n\tskills?: Skill[];\n\t/** Discovered extensions currently active. */\n\textensions?: Extension[];\n}\n\nconst ADAPTATIVE_PERSONA_SECTION = `\n\nAdaptive operating posture:\n- Prefer the smallest safe action; verify important claims with tools when needed.\n- Preserve user trust: ask before credentials, destructive actions, publish/push/tag/release.\n- Keep durable learning concise and auditable; avoid storing transient noise.\n- For harness evolution, use explicit tools/profiles and validate changes before claiming success.`;\n\nfunction formatContextFilesForPrompt(contextFiles: Array<{ path: string; content?: string }>): string {\n\tif (contextFiles.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines = [\"\\n\\n<project_context>\", \"\", \"Project-specific instructions and guidelines:\", \"\"];\n\n\tfor (const { path, content } of contextFiles) {\n\t\tlines.push(`<project_instructions path=\"${escapeXml(path)}\">`);\n\t\tlines.push(content ?? \"\");\n\t\tlines.push(\"</project_instructions>\", \"\");\n\t}\n\n\tlines.push(\"</project_context>\");\n\treturn lines.join(\"\\n\");\n}\n\nfunction escapeXml(str: string): string {\n\treturn str\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\")\n\t\t.replace(/'/g, \"&apos;\");\n}\n\n/** Build the system prompt with tools, guidelines, and context */\nexport function buildSystemPrompt(options: BuildSystemPromptOptions): string {\n\tconst {\n\t\tcustomPrompt,\n\t\tselectedTools,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t\tappendSystemPrompt,\n\t\tcwd,\n\t\tcontextFiles: providedContextFiles,\n\t\tskills: providedSkills,\n\t} = options;\n\tconst resolvedCwd = cwd;\n\tconst promptCwd = resolvedCwd.replace(/\\\\/g, \"/\");\n\n\tconst now = new Date();\n\tconst year = now.getFullYear();\n\tconst month = String(now.getMonth() + 1).padStart(2, \"0\");\n\tconst day = String(now.getDate()).padStart(2, \"0\");\n\tconst date = `${year}-${month}-${day}`;\n\n\tconst appendSection = appendSystemPrompt ? `\\n\\n${appendSystemPrompt}` : \"\";\n\n\tconst contextFiles = providedContextFiles ?? [];\n\tconst skills = providedSkills ?? [];\n\n\tconst activeTools = selectedTools || [\"read\", \"bash\", \"edit\", \"write\"];\n\tconst visibleTools = activeTools.filter((name) => !!toolSnippets?.[name]);\n\n\tif (customPrompt) {\n\t\tlet prompt = customPrompt;\n\n\t\tprompt += ADAPTATIVE_PERSONA_SECTION;\n\n\t\tif (appendSection) {\n\t\t\tprompt += appendSection;\n\t\t}\n\n\t\tprompt += formatContextFilesForPrompt(contextFiles);\n\n\t\t// Append skills section (only if read tool is available)\n\t\tconst customPromptHasRead = !selectedTools || selectedTools.includes(\"read\");\n\t\tif (customPromptHasRead && skills.length > 0) {\n\t\t\tprompt += formatSkillsForPrompt(skills);\n\t\t}\n\n\t\t// Append extensions section\n\t\tconst extensions = options.extensions ?? [];\n\t\tif (extensions.length > 0) {\n\t\t\tprompt += formatExtensionsForPrompt(extensions, visibleTools);\n\t\t}\n\n\t\t// Add date and working directory last\n\t\tprompt += `\\nCurrent date: ${date}`;\n\t\tprompt += `\\nCurrent working directory: ${promptCwd}`;\n\n\t\treturn prompt;\n\t}\n\n\t// Get absolute paths to documentation and examples\n\tconst readmePath = getReadmePath();\n\tconst docsPath = getDocsPath();\n\tconst examplesPath = getExamplesPath();\n\n\t// Build tools list based on selected tools.\n\t// A tool appears in Available tools only when the caller provides a one-line snippet.\n\tconst toolsList =\n\t\tvisibleTools.length > 0 ? visibleTools.map((name) => `- ${name}: ${toolSnippets![name]}`).join(\"\\n\") : \"(none)\";\n\n\t// Build guidelines based on which tools are actually available\n\tconst guidelinesList: string[] = [];\n\tconst guidelinesSet = new Set<string>();\n\tconst addGuideline = (guideline: string): void => {\n\t\tif (guidelinesSet.has(guideline)) {\n\t\t\treturn;\n\t\t}\n\t\tguidelinesSet.add(guideline);\n\t\tguidelinesList.push(guideline);\n\t};\n\n\tconst hasBash = activeTools.includes(\"bash\");\n\tconst hasGrep = activeTools.includes(\"grep\");\n\tconst hasFind = activeTools.includes(\"find\");\n\tconst hasLs = activeTools.includes(\"ls\");\n\tconst hasRead = activeTools.includes(\"read\");\n\n\t// File exploration guidelines\n\tif (hasBash && !hasGrep && !hasFind && !hasLs) {\n\t\taddGuideline(\"Use bash for file operations like ls, rg, find\");\n\t}\n\n\tfor (const guideline of promptGuidelines ?? []) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\taddGuideline(normalized);\n\t\t}\n\t}\n\n\t// Always include these\n\taddGuideline(\"Be concise in your responses\");\n\taddGuideline(\"Show file paths clearly when working with files\");\n\n\tconst guidelines = guidelinesList.map((g) => `- ${g}`).join(\"\\n\");\n\n\tlet prompt = `You are an expert coding assistant operating inside pi, a coding agent harness. You help users by reading files, executing commands, editing code, and writing new files.\n\nAvailable tools:\n${toolsList}\n\nIn addition to the tools above, you may have access to other custom tools depending on the project.${ADAPTATIVE_PERSONA_SECTION}\n\nGuidelines:\n${guidelines}\n\nPi documentation (read only when the user asks about pi itself, its SDK, extensions, themes, skills, or TUI):\n- Main documentation: ${readmePath}\n- Additional docs: ${docsPath}\n- Examples: ${examplesPath} (extensions, custom tools, SDK)\n- When reading pi docs or examples, resolve docs/... under Additional docs and examples/... under Examples, not the current working directory\n- When asked about: extensions (docs/extensions.md, examples/extensions/), themes (docs/themes.md), skills (docs/skills.md), prompt templates (docs/prompt-templates.md), TUI components (docs/tui.md), keybindings (docs/keybindings.md), SDK integrations (docs/sdk.md), custom providers (docs/custom-provider.md), adding models (docs/models.md), pi packages (docs/packages.md)\n- When working on pi topics, read the docs and examples, and follow .md cross-references before implementing\n- Always read pi .md files completely and follow links to related docs (e.g., tui.md for TUI API details)`;\n\n\tif (appendSection) {\n\t\tprompt += appendSection;\n\t}\n\n\tprompt += formatContextFilesForPrompt(contextFiles);\n\n\t// Append skills section (only if read tool is available)\n\tif (hasRead && skills.length > 0) {\n\t\tprompt += formatSkillsForPrompt(skills);\n\t}\n\n\t// Append extensions section\n\tconst activeExtensions = options.extensions ?? [];\n\tif (activeExtensions.length > 0) {\n\t\tprompt += formatExtensionsForPrompt(activeExtensions, visibleTools);\n\t}\n\n\t// Add date and working directory last\n\tprompt += `\\nCurrent date: ${date}`;\n\tprompt += `\\nCurrent working directory: ${promptCwd}`;\n\n\treturn prompt;\n}\n\nfunction formatExtensionsForPrompt(extensions: Extension[], visibleTools: string[]): string {\n\tif (extensions.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines = [\"\\n\\nThe following extensions are currently loaded and active:\", \"\", \"<active_extensions>\"];\n\tlet added = 0;\n\n\tfor (const ext of extensions) {\n\t\tconst name = getExtensionDisplayName(ext.path);\n\t\tconst description = getExtensionDescription(ext.path);\n\n\t\tconst tools = Array.from(ext.tools.keys()).filter((t) => visibleTools.includes(t));\n\t\tconst commands = Array.from(ext.commands.keys());\n\n\t\t// Skip extension listing if it has no visible tools, commands, or description\n\t\tif (tools.length === 0 && commands.length === 0 && !description) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlines.push(\" <extension>\");\n\t\tlines.push(` <name>${escapeXml(name)}</name>`);\n\t\tif (description) {\n\t\t\tlines.push(` <description>${escapeXml(description)}</description>`);\n\t\t}\n\t\tlines.push(` <path>${escapeXml(ext.path)}</path>`);\n\n\t\tif (tools.length > 0) {\n\t\t\tlines.push(` <registered_tools>${tools.map(escapeXml).join(\", \")}</registered_tools>`);\n\t\t}\n\t\tif (commands.length > 0) {\n\t\t\tlines.push(` <registered_commands>${commands.map(escapeXml).join(\", \")}</registered_commands>`);\n\t\t}\n\t\tlines.push(\" </extension>\");\n\t\tadded++;\n\t}\n\n\tif (added === 0) {\n\t\treturn \"\";\n\t}\n\n\tlines.push(\"</active_extensions>\");\n\treturn lines.join(\"\\n\");\n}\n"]}