backlot 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +106 -0
  3. package/dist/cli/client.d.ts +22 -0
  4. package/dist/cli/client.js +83 -0
  5. package/dist/cli/client.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.js +308 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/core/events.d.ts +10 -0
  10. package/dist/core/events.js +42 -0
  11. package/dist/core/events.js.map +1 -0
  12. package/dist/core/journal.d.ts +80 -0
  13. package/dist/core/journal.js +186 -0
  14. package/dist/core/journal.js.map +1 -0
  15. package/dist/core/manifest.d.ts +76 -0
  16. package/dist/core/manifest.js +46 -0
  17. package/dist/core/manifest.js.map +1 -0
  18. package/dist/core/paths.d.ts +17 -0
  19. package/dist/core/paths.js +32 -0
  20. package/dist/core/paths.js.map +1 -0
  21. package/dist/core/policy.d.ts +15 -0
  22. package/dist/core/policy.js +45 -0
  23. package/dist/core/policy.js.map +1 -0
  24. package/dist/core/ports.d.ts +3 -0
  25. package/dist/core/ports.js +22 -0
  26. package/dist/core/ports.js.map +1 -0
  27. package/dist/core/retention.d.ts +19 -0
  28. package/dist/core/retention.js +101 -0
  29. package/dist/core/retention.js.map +1 -0
  30. package/dist/core/sync.d.ts +15 -0
  31. package/dist/core/sync.js +150 -0
  32. package/dist/core/sync.js.map +1 -0
  33. package/dist/core/types.d.ts +82 -0
  34. package/dist/core/types.js +6 -0
  35. package/dist/core/types.js.map +1 -0
  36. package/dist/core/upkeep.d.ts +11 -0
  37. package/dist/core/upkeep.js +47 -0
  38. package/dist/core/upkeep.js.map +1 -0
  39. package/dist/core/util.d.ts +36 -0
  40. package/dist/core/util.js +100 -0
  41. package/dist/core/util.js.map +1 -0
  42. package/dist/daemon/engine.d.ts +284 -0
  43. package/dist/daemon/engine.js +858 -0
  44. package/dist/daemon/engine.js.map +1 -0
  45. package/dist/daemon/index.d.ts +2 -0
  46. package/dist/daemon/index.js +183 -0
  47. package/dist/daemon/index.js.map +1 -0
  48. package/dist/daemon/supervisor.d.ts +36 -0
  49. package/dist/daemon/supervisor.js +189 -0
  50. package/dist/daemon/supervisor.js.map +1 -0
  51. package/dist/drivers/datastore-sqlite.d.ts +27 -0
  52. package/dist/drivers/datastore-sqlite.js +83 -0
  53. package/dist/drivers/datastore-sqlite.js.map +1 -0
  54. package/dist/drivers/datastores.d.ts +22 -0
  55. package/dist/drivers/datastores.js +190 -0
  56. package/dist/drivers/datastores.js.map +1 -0
  57. package/dist/drivers/types.d.ts +71 -0
  58. package/dist/drivers/types.js +14 -0
  59. package/dist/drivers/types.js.map +1 -0
  60. package/dist/mcp/index.d.ts +2 -0
  61. package/dist/mcp/index.js +144 -0
  62. package/dist/mcp/index.js.map +1 -0
  63. package/package.json +57 -0
  64. package/schema/stack.schema.json +172 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/daemon/engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,IAAI,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACvJ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAe,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAiB,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG3D,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC;AACxC,MAAM,SAAS,GAAG,CAAC,IAAe,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;AACxG,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;AAC1C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;AACtC,MAAM,eAAe,GAAG,GAAG,CAAC;AAkB5B;;;;GAIG;AACH,SAAS,WAAW,CAClB,GAAW,EACX,GAAW,EACX,OAA0B,EAC1B,QAAgB;IAEhB,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAChH,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAI,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB;YACzD,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,CAAC;QACpB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,CAAC,CAA0D,EAAE,EAAE;YAC1E,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,cAAc,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC;QACF,sEAAsE;QACtE,uEAAuE;QACvE,6DAA6D;QAC7D,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,kBAAkB,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,MAAM;IACR,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IACzB,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC/C,SAAS,GAAG,GAAG,EAAE,CAAC;IAClB,aAAa,GAAG,GAAG,EAAE,CAAC;IAE9B,4EAA4E;IAC5E,yEAAyE;IACzE,+EAA+E;IACvE,SAAS,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAChD,SAAS,GAAG,IAAI,GAAG,EAA4B,CAAC;IACxD,oFAAoF;IAC3E,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,uFAAuF;IAC/E,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;IAEpD,UAAU,CAAI,EAAwB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,SAAS,CAAI,KAAa,EAAE,EAAoB;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACrB,KAAK,IAAI,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,EACD,KAAK,IAAI,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CACF,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6FAA6F;IAC7F,OAAO;QACL,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvE,+EAA+E;YAC/E,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBAC9B,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACtD,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU;gBAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;YACxE,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,EAAE,CAAC;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1C,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,IAAI,YAAY,IAAI,eAAe,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,wEAAwE;IAEhE,OAAO,CAAC,EAAU;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;IAChG,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,KAAY;QAClC,yEAAyE;QACzE,oEAAoE;QACpE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9E,CAAC;QACD,MAAM,GAAG,GAAW;YAClB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;YAC1E,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;YACrD,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;SAClF,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,+DAA+D;IACvD,KAAK,CAAC,QAAQ,CAAC,KAAY,EAAE,MAAc,EAAE,IAAe,EAAE,OAAgB,EAAE,KAAa;QACnG,wEAAwE;QACxE,4EAA4E;QAC5E,iDAAiD;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBACjE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;gBACvE,OAAO,GAAG,CAAC;YACb,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI;aACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC;aACnG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE;YAAE,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;YACjH,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IAC9D,KAAK,CAAC,UAAU,CAAC,KAAY,EAAE,MAAc,EAAE,IAAe,EAAE,OAAgB,EAAE,KAAa;QACrG,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;QACpB,SAAS,CAAC;YACR,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5F,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;YACpB,IAAI,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,EAAE,CAAC;gBAC9B,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,qBAAqB,QAAQ,EAAE,IAAI,QAAQ,EAAE,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,8CAA8C,EAAE,MAAM,CAAC,CAAC;YACpL,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,wEAAwE;IAEhE,WAAW,CAAC,KAAY,EAAE,GAAW;QAC3C,MAAM,QAAQ,GAAoC,EAAE,CAAC;QACrD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,IAAI,IAAI,CAAC,IAAI;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,oBAAoB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACtF,CAAC;QACD,MAAM,UAAU,GAAgD,EAAE,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,GAAa,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9E,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IACpD,CAAC;IAEO,UAAU,CAAC,GAAW;QAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClC,GAAG,GAAG,IAAI,aAAa,CACrB,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAC5B,GAAG,EAAE;gBACH,uEAAuE;gBACvE,8CAA8C;gBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;oBACzC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;oBACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC5B,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,yCAAyC,EAAE,CAAC,CAAC;gBAClH,CAAC;YACH,CAAC,EACD,GAAG,EAAE;gBACH,mEAAmE;gBACnE,8DAA8D;gBAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC;oBAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC,CACF,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAAY,EAAE,WAAmB,EAAE,OAAgB,EAAE,IAAe,EAAE,KAAc,EAAE,UAAmB,EAAE,UAAqB;QACzJ,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,0EAA0E;QAC1E,2EAA2E;QAC3E,6EAA6E;QAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC;QAC/D,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,eAAe,GAAG,CAAC,EAAE,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,GAAG,CAAC,kCAAkC,CAAC,CAAC;YACxC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC;YACtB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9E,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,WAAW,IAAI,CAAC,MAAM,aAAa,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QACxF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG;YAAE,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,IAAI;gBAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3D,CAAC;QAED,gFAAgF;QAChF,MAAM,SAAS,GACb,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,UAAU;YAC/C,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;YACvB,GAAG,CAAC,KAAK,KAAK,KAAK;YACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE;YACrC,OAAO,KAAK,OAAO,CAAC;QACtB,GAAG,CAAC,YAAY,GAAG,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YAC9C,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,OAAO,GAAG,CAAC;QACb,CAAC;QAED,4EAA4E;QAC5E,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhC,yFAAyF;QACzF,MAAM,QAAQ,GAAa,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACrF,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3G,IAAI,KAAK,IAAI,CAAC,MAAM;gBAAE,GAAG,CAAC,wBAAwB,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC;YACvE,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACjD,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACxC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAC7B,CAAC;QAED,yEAAyE;QACzE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACpD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBAC1B,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC;gBAC1B,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC9G,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC;oBACH,MAAM,IAAI,OAAO,CAAO,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;wBACjD,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAM,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;4BACtH,IAAI,GAAG;gCAAE,MAAM,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,6BAA6B,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;gCACpH,cAAc,EAAE,CAAC;wBACxB,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;wBAAS,CAAC;oBACT,aAAa,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAE9C,mEAAmE;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/G,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,gCAAgC,EAAE,UAAU,CAAC,CAAC;YAC1G,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC;oBACnC,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;wBAC7B,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,QAAQ,IAAI,iBAAiB,IAAI,iEAAiE,EAAE,IAAI,CAAC,CAAC;oBAC/I,CAAC;gBACH,CAAC;gBACD,yEAAyE;gBACzE,4DAA4D;gBAC5D,MAAM,QAAQ,GAAG;oBACf,GAAG,IAAI;oBACP,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;oBAC5B,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxE,CAAC;gBACF,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC/E,GAAG,CAAC,aAAa,IAAI,wBAAwB,CAAC,CAAC;gBAC/C,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;gBACjH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;oBACjE,aAAa,CAAC,IAAI,CAAC,CAAC;oBACpB,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;gBACzB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,aAAa,CAAC,IAAI,CAAC,CAAC;oBACpB,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;oBACpB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;oBACnB,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;oBACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC1B,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAClB,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;QACnB,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QACvB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,kDAAkD;QACtE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,yEAAyE;IAEzE;;;;;OAKG;IACK,UAAU,CAAC,KAAa,EAAE,SAAiB,EAAE,GAAW,EAAE,MAAc;QAC9E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,KAAK,GAA0B,IAAI,CAAC;QACxC,IAAI,OAAmC,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;gBACrE,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;oBAAE,OAAO;gBACrF,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBACtB,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBACvF,wEAAwE;oBAC1E,CAAC,CAAC,CAAC;gBACL,CAAC,EAAE,GAAG,CAAC,CAAC;gBACR,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,kEAAkE;QAC5E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE;YACvB,KAAK,EAAE,GAAG,EAAE;gBACV,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC/B,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,yEAAyE;IAEzE,KAAK,CAAC,EAAE,CAAC,IAAe;QACtB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;QACpC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;QACtC,IAAI,CAAC,UAAU,EAAE,CAAC,kCAAkC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/F,yEAAyE;QACzE,qEAAqE;QACrE,IAAI,OAAO,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC;YAAE,OAAO,GAAG,UAAU,CAAC;QACxE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACtJ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1C,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,sFAAsF;YACtF,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC5D,IAAI,KAAK;oBAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,MAAe,EAAE,KAAc;QAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,4DAA4D,EAAE,OAAO,CAAC,CAAC;QAC5G,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAM,CAAC,KAAK,CAAE,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QACzE,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI;YAC1B,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;YAC5G,IAAI;YACJ,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI;YAC3C,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI;YAChD,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7G,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;SAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAmC;QAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,aAAa,IAAI,CAAC,KAAK,0BAA0B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE,UAAU,CAAC,CAAC;QACrK,CAAC;QACD,0EAA0E;QAC1E,wEAAwE;QACxE,0EAA0E;QAC1E,MAAM,MAAM,GAAG,OAAO,OAAO,EAAE,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,YAAY,EAAE,CAAC,CAAC;QACvG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,yEAAyE;YACzE,uEAAuE;YACvE,4DAA4D;YAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC;YAClD,IAAI,CAAC,UAAU,EAAE,CAAC,kBAAkB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,kBAAkB,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YACrI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAC5C,WAAW,CACT,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EACxB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAClD,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAClD,QAAQ,CACT,CACF,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YACrF,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,EAAE,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ;gBACvC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ;gBAC1C,OAAO,EACL,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ;oBACjC,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,GAAG,CAAC,QAAQ;wBACZ,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC,KAAK,qBAAqB,QAAQ,yCAAyC,IAAI,CAAC,KAAK,yBAAyB,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;wBACrM,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC,KAAK,kBAAkB,GAAG,CAAC,QAAQ,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;gBACnI,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,YAAY;gBACZ,cAAc,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;gBACrE,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,UAAU,EAAE,GAAG,EAAE,GAAG,SAAS;aAC9B,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,yEAAyE;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5D,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;gBAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B;QACrG,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,GAAW,EAAE,KAAa;QAClC,MAAM,EAAE,GAAG,OAAO,OAAO,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,IAAmC;QAC9D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACjH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAE,GAAa,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;YACnI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1K,CAAC;IACH,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3E,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,gBAAgB,CAAC,KAAa,EAAE,IAAY,EAAE,QAAkB;QACtE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE,EAAY,EAAE;YAClD,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,MAAM;oBAAE,SAAS;gBACzD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;oBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;;oBAC1D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC5B,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,MAAe,EAAE,UAAqB;QACjE,oEAAoE;QACpE,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,GAAW,EAAE,MAAe;QACrD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,IAAI,GAAG,sCAAsC,EAAE,MAAM,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,CAAC,IAAI,aAAa,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC,CAAC;YACzF,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QACpH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,MAAe,EAAE,UAAqB;QACjE,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,0CAA0C,EAAE,OAAO,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAC1H,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,GAAW,EAAE,MAAe;QAClD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,0CAA0C,EAAE,OAAO,CAAC,CAAC;QACpG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,KAAK,GAA2B,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QACjE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,gBAAgB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACjH,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,KAAK,CAAC,eAAe,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QACzG,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,KAAK,CAAC,cAAc,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QAC1G,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CACjC,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;YAC7B,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CACtI,cAAc,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,GAAyB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CACzJ,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,IAAY,EAAE,MAAe;QACpD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,2CAA2C,EAAE,UAAU,CAAC,CAAC;QACxG,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,0CAA0C,EAAE,OAAO,CAAC,CAAC;QACpG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CACjC,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;YACrC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAC9G,IAAI,GAAG;oBAAE,MAAM,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;oBAC7G,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,OAAe,EAAE,KAAa,EAAE,MAAe;QAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,0CAA0C,EAAE,OAAO,CAAC,CAAC;QACpG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,OAAO,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,wBAAwB,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1G,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1E,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,MAAe;QAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,0CAA0C,EAAE,OAAO,CAAC,CAAC;QACpG,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;QAC9C,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAe;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS;YAChF,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI;YAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU;SAC7B,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;IACnF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,MAAM,GAA4D,EAAE,CAAC;QAC3E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,4EAA4E,EAAE,CAAC,CAAC;YAClK,yDAAyD;YACzD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzD,IAAI,KAAK,GAAG,IAAI,CAAC;gBACjB,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACvB,CAAC;gBAAC,MAAM,CAAC;oBACP,KAAK,GAAG,KAAK,CAAC;gBAChB,CAAC;gBACD,IAAI,CAAC,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,uBAAuB,GAAG,iBAAiB,GAAG,0CAA0C,EAAE,CAAC,CAAC;YAC9J,CAAC;YACD,yEAAyE;YACzE,0EAA0E;YAC1E,wEAAwE;QAC1E,CAAC;QACD,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC;QAC1G,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAED;;;;;;OAMG;IACK,gBAAgB,CAAC,KAAa,EAAE,KAAc;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW;gBAAE,OAAO,IAAI,CAAC;YACnD,mEAAmE;YACnE,mEAAmE;YACnE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3D,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6DAA6D;IACrD,KAAK,CAAC,eAAe,CAAC,GAAW;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,4EAA4E;QAC5E,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,GAAa,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9E,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC3E,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;oBAAE,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,2CAA2C;IAC5E,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,KAAc;QACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAY;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,QAAQ,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACxH,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,MAAM,CAAC,MAAM,kBAAkB,EAAE,CAAC,CAAC;QACvG,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,2EAA2E;IAE3E,KAAK,CAAC,KAAK;QACT,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,MAAM,CAAC,CAAC;QAChE,IAAI,GAAG,GAAG,CAAC,GAAG,QAAQ;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,+BAA+B;QAC5F,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAEnB,0EAA0E;QAC1E,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;YACrF,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC;gBACH,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;YAC7C,yEAAyE;YACzE,oDAAoD;YACpD,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YACpC,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC7B,0EAA0E;gBAC1E,wEAAwE;gBACxE,uEAAuE;gBACvE,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACpC,SAAS;YACX,CAAC;YACD,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,GAAG,QAAQ,EAAE,EAAE,CAAC;gBACpG,sEAAsE;gBACtE,+DAA+D;gBAC/D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC3D,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;oBACrB,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;oBACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAAE,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACjE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACxB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;gBACnB,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * The backlot daemon: HTTP over a unix socket, auto-spawned by the CLI
4
+ * (decision 0009). One RPC endpoint; the CLI is a thin client. Serializes
5
+ * requests through a simple queue — policy code stays race-free.
6
+ */
7
+ import { createServer, request } from 'node:http';
8
+ import { existsSync, rmSync, writeFileSync, chmodSync } from 'node:fs';
9
+ import { socketPath, pidPath } from '../core/paths.js';
10
+ import { BrokerError } from '../core/util.js';
11
+ import { Engine } from './engine.js';
12
+ // Singleton guard: recover() and listen happen only AFTER we win the socket,
13
+ // so a losing daemon never reaps the winner's children or mutates the journal.
14
+ const engine = new Engine();
15
+ // Concurrency lives in the engine: a short pool lock for claim bookkeeping and
16
+ // one lock per environment. Requests for different environments overlap; two
17
+ // operations on one environment never do.
18
+ async function dispatch(verb, args, emit) {
19
+ const cwd = String(args.cwd ?? process.cwd());
20
+ const holder = args.holder ? String(args.holder) : undefined;
21
+ switch (verb) {
22
+ case 'ping':
23
+ return { pid: process.pid };
24
+ case 'up':
25
+ return engine.up({
26
+ cwd, holder,
27
+ hygiene: args.hygiene ?? undefined,
28
+ watch: Boolean(args.watch),
29
+ ttlMs: args.ttlMs ? Number(args.ttlMs) : undefined,
30
+ onProgress: emit,
31
+ });
32
+ case 'run':
33
+ return engine.run({ cwd, holder, check: String(args.check), hygiene: args.hygiene ?? undefined, onProgress: emit });
34
+ case 'run-detach': {
35
+ const jobId = engine.createJob(cwd, String(args.check));
36
+ // Fire-and-forget — env/pool locks make it safe; the journaled verdict
37
+ // outlives the client (decision 0015).
38
+ void engine.executeJob(jobId, { cwd, holder, check: String(args.check), hygiene: args.hygiene ?? undefined });
39
+ return { jobId, poll: `backlot job ${jobId}` };
40
+ }
41
+ case 'job':
42
+ return engine.jobStatus(String(args.jobId));
43
+ case 'job-ls':
44
+ return engine.jobList();
45
+ case 'bind-ref':
46
+ return engine.bindRef(cwd, String(args.ref), holder);
47
+ case 'ctx':
48
+ return engine.ctx(cwd, holder);
49
+ case 'sync':
50
+ return engine.syncLease(cwd, holder, emit);
51
+ case 'reset-data':
52
+ return engine.resetData(cwd, holder, emit);
53
+ case 'exec':
54
+ return engine.exec(cwd, String(args.cmd), holder);
55
+ case 'logs':
56
+ return engine.logs(cwd, String(args.service), Number(args.lines ?? 40), holder);
57
+ case 'token':
58
+ return engine.token(cwd, String(args.role ?? 'admin'), holder);
59
+ case 'pull':
60
+ return engine.pull(cwd, holder);
61
+ case 'release':
62
+ return engine.release(cwd, holder);
63
+ case 'status':
64
+ return engine.status();
65
+ case 'doctor':
66
+ return engine.doctor();
67
+ case 'pool-recycle':
68
+ return engine.poolRecycle(Boolean(args.all));
69
+ case 'pool-reconcile':
70
+ // Local substrate: reconcile = doctor + reap anything degraded/stuck.
71
+ return engine.poolReconcile();
72
+ case 'shutdown':
73
+ setTimeout(async () => {
74
+ await engine.shutdown();
75
+ process.exit(0);
76
+ }, 50);
77
+ return { stopping: true };
78
+ default:
79
+ throw new BrokerError('env-error', `daemon does not know verb '${verb}'`, 'rpc');
80
+ }
81
+ }
82
+ const sock = socketPath();
83
+ let ownsSocket = false;
84
+ /** Is a LIVE daemon already answering on the socket? (vs. a stale socket file) */
85
+ function pingExisting() {
86
+ return new Promise((resolve) => {
87
+ if (!existsSync(sock))
88
+ return resolve(false);
89
+ const req = request({ socketPath: sock, path: '/', method: 'POST', timeout: 1500 }, (res) => {
90
+ res.resume();
91
+ resolve(res.statusCode === 200);
92
+ });
93
+ req.on('error', () => resolve(false)); // ECONNREFUSED = stale socket
94
+ req.on('timeout', () => {
95
+ req.destroy();
96
+ resolve(false);
97
+ });
98
+ req.end(JSON.stringify({ verb: 'ping', args: {} }));
99
+ });
100
+ }
101
+ const server = createServer((req, res) => {
102
+ let body = '';
103
+ req.on('data', (d) => (body += d));
104
+ req.on('end', () => {
105
+ void (async () => {
106
+ // Response is newline-delimited JSON: zero or more {type:'progress'}
107
+ // frames, then exactly one {type:'result'} frame. The CLI renders
108
+ // progress to stderr (TTY only) and the result to stdout.
109
+ res.writeHead(200, { 'content-type': 'application/x-ndjson' });
110
+ const emit = (phase) => {
111
+ try {
112
+ res.write(JSON.stringify({ type: 'progress', phase }) + '\n');
113
+ }
114
+ catch {
115
+ /* client hung up mid-stream */
116
+ }
117
+ };
118
+ try {
119
+ const { verb, args } = JSON.parse(body || '{}');
120
+ const data = await dispatch(verb, args ?? {}, emit);
121
+ res.end(JSON.stringify({ type: 'result', ok: true, data }) + '\n');
122
+ }
123
+ catch (err) {
124
+ const e = err instanceof BrokerError ? err.toJSON() : { class: 'env-error', message: String(err.message ?? err) };
125
+ res.end(JSON.stringify({ type: 'result', ok: false, error: e }) + '\n');
126
+ }
127
+ })();
128
+ });
129
+ });
130
+ // EADDRINUSE means another daemon won the listen race between our ping and our
131
+ // bind — concede cleanly rather than clobber it.
132
+ server.on('error', (err) => {
133
+ if (err.code === 'EADDRINUSE') {
134
+ if (process.send)
135
+ process.send('ready'); // a live daemon exists; the client can proceed
136
+ process.exit(0);
137
+ }
138
+ throw err;
139
+ });
140
+ async function start() {
141
+ if (await pingExisting()) {
142
+ // A healthy daemon already owns the socket — do NOT recover() or listen.
143
+ if (process.send)
144
+ process.send('ready');
145
+ process.exit(0);
146
+ }
147
+ if (existsSync(sock))
148
+ rmSync(sock, { force: true }); // stale socket from a dead daemon
149
+ server.listen(sock, () => {
150
+ ownsSocket = true;
151
+ // The socket has no RPC auth and exposes arbitrary-shell verbs (exec/token),
152
+ // so it must be owner-only. On macOS the socket-file mode is what actually
153
+ // gates connect() (the dir traversal isn't enough), so this chmod is the
154
+ // real boundary, not just belt-and-suspenders.
155
+ try {
156
+ chmodSync(sock, 0o600);
157
+ }
158
+ catch {
159
+ /* best-effort; the 0700 state dir is the backstop */
160
+ }
161
+ writeFileSync(pidPath(), String(process.pid));
162
+ // Only NOW, as the sole owner, reconcile prior daemon state.
163
+ engine.recover();
164
+ const sweepMs = Number(process.env.BACKLOT_SWEEP_MS ?? 15_000);
165
+ setInterval(() => void engine.sweep(), sweepMs).unref();
166
+ // Detach from the spawning CLI's lifetime.
167
+ if (process.send)
168
+ process.send('ready');
169
+ });
170
+ }
171
+ void start();
172
+ for (const sig of ['SIGINT', 'SIGTERM']) {
173
+ process.on(sig, () => {
174
+ void engine.shutdown().then(() => {
175
+ // Only remove the socket if WE own it — a losing/duplicate daemon must
176
+ // never delete the healthy daemon's socket.
177
+ if (ownsSocket)
178
+ rmSync(sock, { force: true });
179
+ process.exit(0);
180
+ });
181
+ });
182
+ }
183
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAC5B,+EAA+E;AAC/E,6EAA6E;AAC7E,0CAA0C;AAE1C,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAA6B,EAAE,IAA6B;IAChG,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,KAAK,IAAI;YACP,OAAO,MAAM,CAAC,EAAE,CAAC;gBACf,GAAG,EAAE,MAAM;gBACX,OAAO,EAAG,IAAI,CAAC,OAAiB,IAAI,SAAS;gBAC7C,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;gBAClD,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;QACL,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAG,IAAI,CAAC,OAAiB,IAAI,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACjI,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACxD,uEAAuE;YACvE,uCAAuC;YACvC,KAAK,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAG,IAAI,CAAC,OAAiB,IAAI,SAAS,EAAE,CAAC,CAAC;YACzH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,KAAK,EAAE,EAAE,CAAC;QACjD,CAAC;QACD,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1B,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACvD,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjC,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,KAAK,YAAY;YACf,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACpD,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAClF,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QACjE,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClC,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,KAAK,gBAAgB;YACnB,sEAAsE;YACtE,OAAO,MAAM,CAAC,aAAa,EAAE,CAAC;QAChC,KAAK,UAAU;YACb,UAAU,CAAC,KAAK,IAAI,EAAE;gBACpB,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5B;YACE,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,8BAA8B,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;AAC1B,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,kFAAkF;AAClF,SAAS,YAAY;IACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1F,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,8BAA8B;QACrE,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACvC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;QACjB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,qEAAqE;YACrE,kEAAkE;YAClE,0DAA0D;YAC1D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE;gBAC7B,IAAI,CAAC;oBACH,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBAChE,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;YACH,CAAC,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,GAAG,YAAY,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAE,GAAa,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC7H,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,iDAAiD;AACjD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;IAChD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,+CAA+C;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,KAAK;IAClB,IAAI,MAAM,YAAY,EAAE,EAAE,CAAC;QACzB,yEAAyE;QACzE,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,kCAAkC;IAEvF,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,UAAU,GAAG,IAAI,CAAC;QAClB,6EAA6E;QAC7E,2EAA2E;QAC3E,yEAAyE;QACzE,+CAA+C;QAC/C,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;QACD,aAAa,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,6DAA6D;QAC7D,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,MAAM,CAAC,CAAC;QAC/D,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,2CAA2C;QAC3C,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,KAAK,EAAE,CAAC;AAEb,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;QACnB,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC/B,uEAAuE;YACvE,4CAA4C;YAC5C,IAAI,UAAU;gBAAE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { ServiceSpec } from '../core/manifest.js';
2
+ export interface ServiceEvent {
3
+ at: number;
4
+ service: string;
5
+ event: string;
6
+ }
7
+ export declare class EnvSupervisor {
8
+ readonly envId: string;
9
+ private readonly envTree;
10
+ private readonly logDir;
11
+ /** Fired when a service flaps past its restart budget (decision 0007/0010). */
12
+ private readonly onDegraded?;
13
+ /** Fired whenever a service's pid changes (start/restart) so the journal
14
+ * stays truthful for recovery — a stale pid gets an innocent SIGTERM and
15
+ * misses the real orphan holding the port. */
16
+ private readonly onPidsChanged?;
17
+ private services;
18
+ readonly events: ServiceEvent[];
19
+ constructor(envId: string, envTree: string, logDir: string,
20
+ /** Fired when a service flaps past its restart budget (decision 0007/0010). */
21
+ onDegraded?: ((service: string) => void) | undefined,
22
+ /** Fired whenever a service's pid changes (start/restart) so the journal
23
+ * stays truthful for recovery — a stale pid gets an innocent SIGTERM and
24
+ * misses the real orphan holding the port. */
25
+ onPidsChanged?: (() => void) | undefined);
26
+ private note;
27
+ logPath(name: string): string;
28
+ logs(name: string): string;
29
+ pids(): Record<string, number>;
30
+ allHealthyPids(): boolean;
31
+ start(name: string, spec: ServiceSpec, env: Record<string, string>, watchMode: boolean): void;
32
+ waitReady(name: string, spec: ServiceSpec, url: string | undefined, env: Record<string, string>): Promise<void>;
33
+ stopAll(): Promise<void>;
34
+ }
35
+ /** Kill PIDs recorded by a previous daemon life (recovery, decision 0009). */
36
+ export declare function reapPids(pids: Record<string, number>): void;
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Daemon-as-parent service supervision (decision 0009/0010): spawn with env
3
+ * injection, capture logs, probe readiness (http/log/cmd) with fatal-log
4
+ * fast-fail, restart session services with bounded backoff, and never let a
5
+ * crash pass silently.
6
+ */
7
+ import { spawn, execFile } from 'node:child_process';
8
+ import { appendFileSync, mkdirSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ import { BrokerError } from '../core/util.js';
11
+ export class EnvSupervisor {
12
+ envId;
13
+ envTree;
14
+ logDir;
15
+ onDegraded;
16
+ onPidsChanged;
17
+ services = new Map();
18
+ events = [];
19
+ constructor(envId, envTree, logDir,
20
+ /** Fired when a service flaps past its restart budget (decision 0007/0010). */
21
+ onDegraded,
22
+ /** Fired whenever a service's pid changes (start/restart) so the journal
23
+ * stays truthful for recovery — a stale pid gets an innocent SIGTERM and
24
+ * misses the real orphan holding the port. */
25
+ onPidsChanged) {
26
+ this.envId = envId;
27
+ this.envTree = envTree;
28
+ this.logDir = logDir;
29
+ this.onDegraded = onDegraded;
30
+ this.onPidsChanged = onPidsChanged;
31
+ mkdirSync(logDir, { recursive: true });
32
+ }
33
+ note(service, event) {
34
+ this.events.push({ at: Date.now(), service, event });
35
+ if (this.events.length > 100)
36
+ this.events.shift();
37
+ }
38
+ logPath(name) {
39
+ return join(this.logDir, `${name}.log`);
40
+ }
41
+ logs(name) {
42
+ return this.services.get(name)?.buf ?? '';
43
+ }
44
+ pids() {
45
+ const out = {};
46
+ for (const [name, r] of this.services)
47
+ if (r.proc.pid && r.proc.exitCode === null)
48
+ out[name] = r.proc.pid;
49
+ return out;
50
+ }
51
+ allHealthyPids() {
52
+ return [...this.services.values()].every((r) => r.proc.exitCode === null);
53
+ }
54
+ start(name, spec, env, watchMode) {
55
+ const cmd = watchMode && spec.watch_run ? spec.watch_run : spec.run;
56
+ const cwd = spec.cwd ? join(this.envTree, spec.cwd) : this.envTree;
57
+ const running = { proc: null, buf: '', restarts: 0, expectedExit: false, restartTimer: null };
58
+ const launch = () => {
59
+ running.restartTimer = null;
60
+ // A teardown that landed while this restart was pending: do not respawn.
61
+ if (running.expectedExit)
62
+ return;
63
+ const proc = spawn('sh', ['-c', cmd], {
64
+ cwd,
65
+ env: { ...process.env, ...env },
66
+ stdio: ['ignore', 'pipe', 'pipe'],
67
+ detached: false,
68
+ });
69
+ running.proc = proc;
70
+ this.onPidsChanged?.();
71
+ const sink = (d) => {
72
+ const s = d.toString();
73
+ running.buf = (running.buf + s).slice(-64_000);
74
+ try {
75
+ appendFileSync(this.logPath(name), s);
76
+ }
77
+ catch {
78
+ /* log dir gone mid-teardown */
79
+ }
80
+ };
81
+ proc.stdout.on('data', sink);
82
+ proc.stderr.on('data', sink);
83
+ // A spawn failure (EAGAIN/EMFILE under fleet load) emits 'error'; with no
84
+ // listener it becomes an uncaught exception that kills the whole daemon.
85
+ proc.on('error', (err) => {
86
+ this.note(name, `spawn error: ${err.message}`);
87
+ });
88
+ proc.on('exit', (code) => {
89
+ if (running.expectedExit)
90
+ return;
91
+ this.note(name, `exited (${code})`);
92
+ this.onPidsChanged?.(); // the dead pid must leave the journal
93
+ // Bounded restart for long-lived services (decision 0010).
94
+ if (running.restarts < 3) {
95
+ running.restarts++;
96
+ this.note(name, `restarting (attempt ${running.restarts})`);
97
+ running.restartTimer = setTimeout(launch, 500 * running.restarts);
98
+ running.restartTimer.unref();
99
+ }
100
+ else {
101
+ this.note(name, 'flapping — giving up (environment degraded)');
102
+ this.onDegraded?.(name);
103
+ }
104
+ });
105
+ };
106
+ launch();
107
+ this.services.set(name, running);
108
+ this.note(name, 'started');
109
+ }
110
+ async waitReady(name, spec, url, env) {
111
+ const ready = spec.ready ?? (spec.port ? { http: '/' } : { log: '.' });
112
+ const timeoutMs = (ready.timeout ?? 120) * 1000;
113
+ const fatal = spec.fatal_logs ? new RegExp(spec.fatal_logs) : undefined;
114
+ const start = Date.now();
115
+ const running = this.services.get(name);
116
+ if (!running)
117
+ throw new BrokerError('env-error', `service '${name}' was never started`, name);
118
+ for (;;) {
119
+ const buf = running.buf;
120
+ if (fatal && fatal.test(buf)) {
121
+ throw new BrokerError('work-error', `service '${name}' hit a fatal log marker during boot`, name, tail(buf));
122
+ }
123
+ if (running.proc.exitCode !== null && running.restarts >= 3) {
124
+ throw new BrokerError('work-error', `service '${name}' exited during boot (${running.proc.exitCode})`, name, tail(buf));
125
+ }
126
+ if (ready.http && url) {
127
+ try {
128
+ const res = await fetch(`${url}${ready.http}`, { signal: AbortSignal.timeout(1500) });
129
+ if (res.status === 200)
130
+ return;
131
+ }
132
+ catch {
133
+ /* not yet */
134
+ }
135
+ }
136
+ else if (ready.log) {
137
+ if (new RegExp(ready.log).test(buf))
138
+ return;
139
+ }
140
+ else if (ready.cmd) {
141
+ const ok = await new Promise((resolve) => {
142
+ execFile('sh', ['-c', ready.cmd], { cwd: this.envTree, env: { ...process.env, ...env } }, (err) => resolve(!err));
143
+ });
144
+ if (ok)
145
+ return;
146
+ }
147
+ if (Date.now() - start > timeoutMs) {
148
+ throw new BrokerError('env-error', `service '${name}' not ready after ${ready.timeout ?? 120}s`, name, tail(running.buf));
149
+ }
150
+ await new Promise((r) => setTimeout(r, 150));
151
+ }
152
+ }
153
+ async stopAll() {
154
+ for (const [name, r] of this.services) {
155
+ r.expectedExit = true;
156
+ // Cancel any pending restart BEFORE it can fire — otherwise launch()
157
+ // respawns an untracked process that squats the port after teardown.
158
+ if (r.restartTimer) {
159
+ clearTimeout(r.restartTimer);
160
+ r.restartTimer = null;
161
+ }
162
+ if (r.proc && r.proc.exitCode === null) {
163
+ await new Promise((resolve) => {
164
+ r.proc.once('exit', () => resolve());
165
+ r.proc.kill();
166
+ setTimeout(() => {
167
+ r.proc.kill('SIGKILL');
168
+ resolve();
169
+ }, 2000).unref();
170
+ });
171
+ }
172
+ this.note(name, 'stopped');
173
+ }
174
+ this.services.clear();
175
+ }
176
+ }
177
+ const tail = (s, n = 600) => s.slice(-n);
178
+ /** Kill PIDs recorded by a previous daemon life (recovery, decision 0009). */
179
+ export function reapPids(pids) {
180
+ for (const pid of Object.values(pids)) {
181
+ try {
182
+ process.kill(pid);
183
+ }
184
+ catch {
185
+ /* already gone */
186
+ }
187
+ }
188
+ }
189
+ //# sourceMappingURL=supervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../src/daemon/supervisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { DatastoreSpec } from '../core/manifest.js';
2
+ export interface DatastoreBinding {
3
+ name: string;
4
+ url: string;
5
+ }
6
+ export declare class SqliteDatastore {
7
+ private readonly name;
8
+ private readonly spec;
9
+ private readonly stackId;
10
+ constructor(name: string, spec: DatastoreSpec, stackId: string);
11
+ get capabilities(): {
12
+ template: boolean;
13
+ ephemeral: boolean;
14
+ };
15
+ /** ns for sqlite = the db file path inside the env's data dir. */
16
+ url(dataDir: string): string;
17
+ probe(): Promise<void>;
18
+ private seedKey;
19
+ private templatePath;
20
+ private runCreate;
21
+ /** Create/restore the namespace at the given preset. Template-first. */
22
+ create(envTree: string, dataDir: string, preset: string): Promise<DatastoreBinding>;
23
+ drop(dataDir: string): void;
24
+ /** @rebake-template: invalidate baked templates so the next create re-seeds. */
25
+ rebake(): void;
26
+ }
27
+ export declare function makeDatastore(name: string, spec: DatastoreSpec, stackId: string): SqliteDatastore;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * sqlite datastore driver: the zero-infrastructure reference implementation.
3
+ * A namespace is a file under the environment's data dir; template bake/restore
4
+ * is a file copy keyed by preset + create-command hash (decision 0006/0008).
5
+ */
6
+ import { copyFileSync, mkdirSync, rmSync, existsSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { execFile } from 'node:child_process';
9
+ import { templatesRoot } from '../core/paths.js';
10
+ import { sha256, template, BrokerError } from '../core/util.js';
11
+ export class SqliteDatastore {
12
+ name;
13
+ spec;
14
+ stackId;
15
+ constructor(name, spec, stackId) {
16
+ this.name = name;
17
+ this.spec = spec;
18
+ this.stackId = stackId;
19
+ }
20
+ get capabilities() {
21
+ return { template: this.spec.template === true, ephemeral: false };
22
+ }
23
+ /** ns for sqlite = the db file path inside the env's data dir. */
24
+ url(dataDir) {
25
+ return join(dataDir, `${this.name}.db`);
26
+ }
27
+ async probe() {
28
+ // sqlite is in-process — nothing external to probe.
29
+ }
30
+ seedKey(preset) {
31
+ return `${this.name}-${preset}@${sha256(this.spec.create ?? '').slice(0, 12)}`;
32
+ }
33
+ templatePath(preset) {
34
+ const dir = join(templatesRoot(), this.stackId);
35
+ mkdirSync(dir, { recursive: true });
36
+ return join(dir, `${this.seedKey(preset)}.db`);
37
+ }
38
+ runCreate(envTree, dbPath, preset) {
39
+ const cmd = this.spec.create;
40
+ if (!cmd)
41
+ throw new BrokerError('work-error', `datastore '${this.name}' has no create: command`, 'datastore');
42
+ const resolved = template(cmd, { ns: dbPath, preset });
43
+ return new Promise((resolve, reject) => {
44
+ execFile('sh', ['-c', resolved], { cwd: envTree, maxBuffer: 16 * 1024 * 1024 }, (err, _out, stderr) => {
45
+ if (err) {
46
+ reject(new BrokerError('work-error', `seed failed for '${this.name}' preset '${preset}'`, 'datastore', String(stderr).slice(0, 800)));
47
+ }
48
+ else
49
+ resolve();
50
+ });
51
+ });
52
+ }
53
+ /** Create/restore the namespace at the given preset. Template-first. */
54
+ async create(envTree, dataDir, preset) {
55
+ mkdirSync(dataDir, { recursive: true });
56
+ const dbPath = this.url(dataDir);
57
+ if (this.capabilities.template) {
58
+ const tpl = this.templatePath(preset);
59
+ if (!existsSync(tpl)) {
60
+ await this.runCreate(envTree, tpl, preset); // bake once per seed-content hash
61
+ }
62
+ copyFileSync(tpl, dbPath); // restore = file copy: seconds, deterministic
63
+ }
64
+ else {
65
+ await this.runCreate(envTree, dbPath, preset);
66
+ }
67
+ return { name: this.name, url: dbPath };
68
+ }
69
+ drop(dataDir) {
70
+ rmSync(this.url(dataDir), { force: true });
71
+ }
72
+ /** @rebake-template: invalidate baked templates so the next create re-seeds. */
73
+ rebake() {
74
+ rmSync(join(templatesRoot(), this.stackId), { recursive: true, force: true });
75
+ }
76
+ }
77
+ export function makeDatastore(name, spec, stackId) {
78
+ if (spec.driver !== 'sqlite') {
79
+ throw new BrokerError('infra-error', `datastore driver '${spec.driver}' is not implemented yet (v0.1 ships sqlite; postgres/mssql land in 0.2)`, 'datastore');
80
+ }
81
+ return new SqliteDatastore(name, spec, stackId);
82
+ }
83
+ //# sourceMappingURL=datastore-sqlite.js.map