{"version":3,"sources":["../../src/agents/registry.ts","../../src/config/loader.ts","../../src/agents/install.ts","../../src/artifacts/writer.ts","../../src/cli/commands/context.ts","../../src/cli/commands/init.ts","../../src/memlog/memlog.ts","../../src/templates/spec-template.ts","../../src/cli/commands/spec.ts","../../src/templates/story-template.ts","../../src/cli/commands/story.ts","../../src/cli/commands/review.ts","../../src/cli/commands/commit.ts","../../src/cli/commands/hook.ts","../../src/cli/commands/ci.ts","../../src/cli/commands/deps.ts","../../src/cli/commands/testgen.ts","../../src/cli/commands/env.ts","../../src/cli/commands/deploy.ts","../../src/cli/commands/perf.ts","../../src/cli/commands/help.ts","../../src/cli/commands/status.ts","../../src/cli/main.ts"],"names":["resolve","existsSync","load","readFileSync","mkdirSync","writeFileSync","__filename","__dirname","dirname","cpSync","readdirSync","execSync","execFileSync","relative","run","lines","fileURLToPath"],"mappings":";;;;;;;;;;AAAO,IAAM,aAAA,GAAgB;AAAA,EAC3B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA;AAaO,IAAM,iBAAA,GAAgD;AAAA,EAC3D,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,SAAS,WAAA,EAAa,OAAA,EAAS,CAAC,cAAc,CAAA,EAAE;AAAA,EAC/E,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,SAAS,eAAA,EAAiB,OAAA,EAAS,CAAC,aAAa,CAAA,EAAE;AAAA,EACzF,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,YAAA,EAAc,SAAS,WAAA,EAAa,OAAA,EAAS,CAAC,YAAY,CAAA,EAAE;AAAA,EACnF,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,gBAAA,EAAkB,SAAS,WAAA,EAAa,OAAA,EAAS,CAAC,gBAAgB,CAAA,EAAE;AAAA,EAC5F,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,SAAS,WAAA,EAAa,OAAA,EAAS,CAAC,WAAW,CAAA,EAAE;AAAA,EAClF,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,SAAS,WAAA,EAAa,OAAA,EAAS,CAAC,SAAS,CAAA,EAAE;AAAA,EAChF,EAAE,IAAI,OAAA,EAAS,KAAA,EAAO,SAAS,OAAA,EAAS,eAAA,EAAiB,OAAA,EAAS,EAAC,EAAE;AAAA,EACrE,EAAE,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,SAAS,gBAAA,EAAkB,OAAA,EAAS,CAAC,cAAc,CAAA;AACtF,CAAA;AAEA,IAAM,YAAA,uBAAmB,GAAA,EAAyB;AAClD,KAAA,MAAW,cAAc,iBAAA,EAAmB;AAC1C,EAAA,YAAA,CAAa,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,UAAA,CAAW,EAAE,CAAA;AAC7C,EAAA,KAAA,MAAW,SAAS,UAAA,CAAW,OAAA,eAAsB,GAAA,CAAI,KAAA,EAAO,WAAW,EAAE,CAAA;AAC/E;AAEO,SAAS,mBAAmB,MAAA,EAAsC;AACvE,EAAA,OAAO,kBAAkB,IAAA,CAAK,CAAC,UAAA,KAAe,UAAA,CAAW,OAAO,MAAM,CAAA;AACxE;AAEO,SAAS,kBAAkB,KAAA,EAA8B;AAC9D,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,GAAG,EAAE,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,MAAK,CAAE,WAAA,EAAa,CAAA,CAAE,OAAO,OAAO,CAAA;AACzF,EAAA,IAAI,OAAO,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,0EAA0E,CAAA;AACnH,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AAC1B,IAAA,IAAI,OAAO,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAC3F,IAAA,OAAO,CAAC,GAAG,aAAa,CAAA;AAAA,EAC1B;AACA,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,IAAA,IAAI,OAAO,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAC5F,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,WAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AACrC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,CAAA,eAAA,EAAkB,KAAK,oBAAoB,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,YAAA,CAAc,CAAA;AAAA,IACnG;AACA,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,+BAA+B,KAAA,EAA8B;AAC3E,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AACxC,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,KAAW,MAAA,SAAe,EAAC;AAC1C,EAAA,IAAI,MAAA,KAAW,KAAA,EAAO,OAAO,CAAC,GAAG,aAAa,CAAA;AAE9C,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAC5E,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACvC,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,KAAK,GAAG,OAAO,KAAA;AACjC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAK,CAAA,GAAI,CAAA;AAC9B,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,IAAS,aAAA,CAAc,MAAA,EAAQ;AAC9C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,KAAK,CAAA,iCAAA,CAAmC,CAAA;AAAA,IAC3E;AACA,IAAA,OAAO,cAAc,KAAK,CAAA;AAAA,EAC5B,CAAC,CAAA;AACD,EAAA,OAAO,iBAAA,CAAkB,UAAA,CAAW,IAAA,CAAK,GAAG,CAAC,CAAA;AAC/C;AAEO,SAAS,eAAA,GAA0B;AACxC,EAAA,MAAM,KAAA,GAAQ,CAAC,4EAA4E,CAAA;AAC3F,EAAA,iBAAA,CAAkB,OAAA,CAAQ,CAAC,UAAA,EAAY,KAAA,KAAU;AAC/C,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,OAAA,KAAY,WAAA,GAAc,qBAAA,GAAwB,yBAAA;AAC1E,IAAA,KAAA,CAAM,IAAA,CAAK,KAAK,KAAA,GAAQ,CAAC,KAAK,UAAA,CAAW,KAAK,CAAA,QAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,EAC5D,CAAC,CAAA;AACD,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;ACtEA,IAAM,QAAA,GAA6B;AAAA,EACjC,kBAAA,EAAoB,OAAA;AAAA,EACpB,YAAA,EAAc,EAAA;AAAA,EACd,KAAA,EAAO,MAAA;AAAA,EACP,sBAAA,EAAwB,IAAA;AAAA,EACxB,aAAA,EAAe,oBAAA;AAAA,EACf,YAAA,EAAc;AAChB,CAAA;AAEA,SAAS,SAAS,IAAA,EAAuC;AACvD,EAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,SAAU,EAAC;AAC/B,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,IAAA,EAAM,OAAO,CAAA;AACtC,IAAA,OAAQ,IAAA,CAAK,GAAG,CAAA,IAAiC,EAAC;AAAA,EACpD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAEA,SAAS,gBACJ,OAAA,EACe;AAClB,EAAA,MAAM,MAAA,GAAkC,EAAE,GAAG,QAAA,EAAS;AACtD,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,MAAA,CAAO,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,WAAW,GAAA,EAA+B;AACxD,EAAA,MAAM,gBAAgB,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK,aAAA,EAAe,aAAa,CAAC,CAAA;AACzE,EAAA,MAAM,aAAa,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK,aAAA,EAAe,kBAAkB,CAAC,CAAA;AAC3E,EAAA,OAAO,YAAA,CAAa,eAAe,UAAU,CAAA;AAC/C;AAEO,SAAS,gBAAA,CAAiB,KAAa,MAAA,EAAkC;AAC9E,EAAA,OAAO,OAAA,CAAQ,GAAA,EAAK,MAAA,CAAO,aAAa,CAAA;AAC1C;AAEO,SAAS,cAAA,CAAe,GAAA,EAAa,MAAA,EAA0B,IAAA,EAAsB;AAC1F,EAAA,OAAO,OAAA,CAAQ,iBAAiB,GAAA,EAAK,MAAM,GAAG,OAAA,EAAS,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,CAAA;AACvE;ACpDA,IAAM,cAAA,GAAiB,+CAAA;AAYvB,SAAS,cAAc,IAAA,EAAsB;AAC3C,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AACjC;AAEO,SAAS,kBAAkB,SAAA,EAAkC;AAClE,EAAA,MAAM,IAAA,GAAOA,OAAAA,CAAQ,SAAA,EAAW,aAAA,EAAe,aAAa,CAAA;AAC5D,EAAA,IAAI,CAACC,UAAAA,CAAW,IAAI,CAAA,EAAG,OAAO,EAAE,OAAA,EAAS,CAAA,EAAG,OAAA,EAAS,EAAC,EAAE;AACxD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAASC,IAAAA,CAAKC,YAAAA,CAAa,IAAA,EAAM,OAAO,CAAC,CAAA;AAC/C,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,OAAO,IACzC,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,WAAkC,aAAA,CAAc,QAAA,CAAS,MAAqB,CAAC,IACtG,EAAC;AACL,IAAA,OAAO,EAAE,OAAA,EAAS,CAAA,EAAG,OAAA,EAAS,CAAC,GAAG,IAAI,GAAA,CAAI,OAAO,CAAC,CAAA,EAAE;AAAA,EACtD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,OAAA,EAAS,CAAA,EAAG,OAAA,EAAS,EAAC,EAAE;AAAA,EACnC;AACF;AAEO,SAAS,kBAAA,CAAmB,WAAmB,OAAA,EAAgC;AACpF,EAAA,MAAM,IAAA,GAAOH,OAAAA,CAAQ,SAAA,EAAW,aAAA,EAAe,aAAa,CAAA;AAC5D,EAAA,SAAA,CAAU,QAAQ,IAAI,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC5C,EAAA,aAAA,CAAc,IAAA,EAAM,IAAA,CAAK,EAAE,OAAA,EAAS,GAAG,OAAA,EAAQ,EAAG,EAAE,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,GAAG,OAAO,CAAA;AAC3F,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,qBAAqB,SAAA,EAA2B;AACvD,EAAA,MAAM,OAAA,GAAUG,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,0BAA0B,CAAA;AACtD,EAAA,IAAI,CAAC,OAAO,OAAO,4CAAA;AACnB,EAAA,MAAM,WAAA,GAAcD,IAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACjC,EAAA,OAAO,OAAO,WAAA,EAAa,WAAA,KAAgB,QAAA,GACvC,YAAY,WAAA,GACZ,4CAAA;AACN;AAEA,SAAS,YAAA,CAAa,SAAA,EAAmB,WAAA,EAAqB,aAAA,EAA+B;AAC3F,EAAA,OAAO,CAAA;AAAA,MAAA,EACD,SAAS;AAAA,aAAA,EACF,IAAA,CAAK,SAAA,CAAU,WAAW,CAAC;AAAA;;AAAA,EAGxC,cAAc;;AAAA;;AAAA,kDAAA,EAIoC,aAAa,CAAA;AAAA,CAAA;AAEjE;AAEA,SAAS,aAAA,CAAc,WAAmB,aAAA,EAA+B;AACvE,EAAA,OAAO,GAAG,cAAc;;AAAA,EAAA,EAEtB,SAAS;;AAAA,kDAAA,EAEuC,aAAa,CAAA;AAAA,CAAA;AAEjE;AAEA,SAAS,oBACP,SAAA,EACA,WAAA,EACA,OAAA,EACA,OAAA,EACA,YACA,MAAA,EACM;AACN,EAAA,MAAM,YAAA,GAAe,aAAA,CAAc,QAAA,CAAS,SAAA,EAAW,WAAW,CAAC,CAAA;AACnE,EAAA,IAAID,UAAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,MAAM,QAAA,GAAWE,YAAAA,CAAa,WAAA,EAAa,OAAO,CAAA;AAClD,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,cAAc,CAAA,EAAG;AACtC,MAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,gCAAA,EAAmC,YAAY,CAAA,CAAE,CAAA;AACtE,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,UAAA,GAAaH,OAAAA,CAAQ,UAAA,EAAY,UAAA,EAAY,YAAY,CAAA;AAC/D,IAAA,SAAA,CAAU,QAAQ,UAAU,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAClD,IAAA,MAAA,CAAO,WAAA,EAAa,UAAA,EAAY,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,EACjD;AACA,EAAA,SAAA,CAAU,QAAQ,WAAW,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACnD,EAAA,aAAA,CAAc,WAAA,EAAa,SAAS,OAAO,CAAA;AAC3C,EAAA,MAAA,CAAO,cAAA,CAAe,KAAK,YAAY,CAAA;AACzC;AAEO,SAAS,qBAAqB,OAAA,EAMZ;AACvB,EAAA,MAAM,SAA+B,EAAE,cAAA,EAAgB,EAAC,EAAG,QAAA,EAAU,EAAC,EAAE;AACxE,EAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,OAAA,EAAS;AACpC,IAAA,MAAM,UAAA,GAAa,mBAAmB,MAAM,CAAA;AAC5C,IAAA,IAAI,UAAA,CAAW,YAAY,WAAA,EAAa;AAExC,IAAA,KAAA,MAAW,SAAA,IAAa,QAAQ,UAAA,EAAY;AAC1C,MAAA,MAAM,iBAAiBA,OAAAA,CAAQ,OAAA,CAAQ,WAAW,SAAA,EAAW,QAAA,EAAU,WAAW,UAAU,CAAA;AAC5F,MAAA,IAAI,CAACC,UAAAA,CAAW,cAAc,CAAA,EAAG;AACjC,MAAA,MAAM,WAAA,GAAc,qBAAqB,cAAc,CAAA;AAEvD,MAAA,IAAI,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,OAAA,EAAS;AAC7C,QAAA,MAAM,WAAA,GAAcD,QAAQ,OAAA,CAAQ,SAAA,EAAW,IAAI,MAAM,CAAA,CAAA,EAAI,QAAA,EAAU,SAAA,EAAW,UAAU,CAAA;AAC5F,QAAA,MAAM,gBAAgB,aAAA,CAAc,QAAA,CAAS,QAAQ,WAAW,CAAA,EAAG,cAAc,CAAC,CAAA;AAClF,QAAA,mBAAA;AAAA,UACE,OAAA,CAAQ,SAAA;AAAA,UACR,WAAA;AAAA,UACA,YAAA,CAAa,SAAA,EAAW,WAAA,EAAa,aAAa,CAAA;AAAA,UAClD,OAAA,CAAQ,OAAA;AAAA,UACR,OAAA,CAAQ,UAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF,CAAA,MAAA,IAAW,WAAW,QAAA,EAAU;AAC9B,QAAA,MAAM,WAAA,GAAcA,QAAQ,OAAA,CAAQ,SAAA,EAAW,WAAW,UAAA,EAAY,CAAA,EAAG,SAAS,CAAA,GAAA,CAAK,CAAA;AACvF,QAAA,MAAM,gBAAgB,aAAA,CAAc,QAAA,CAAS,QAAQ,WAAW,CAAA,EAAG,cAAc,CAAC,CAAA;AAClF,QAAA,mBAAA;AAAA,UACE,OAAA,CAAQ,SAAA;AAAA,UACR,WAAA;AAAA,UACA,aAAA,CAAc,WAAW,aAAa,CAAA;AAAA,UACtC,OAAA,CAAQ,OAAA;AAAA,UACR,OAAA,CAAQ,UAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;ACxIO,SAAS,cAAc,IAAA,EAA4B;AACxD,EAAA,MAAM,MAAMA,OAAAA,CAAQ,IAAA,CAAK,KAAK,IAAA,CAAK,YAAA,EAAc,KAAK,OAAO,CAAA;AAC7D,EAAA,IAAI,CAACC,UAAAA,CAAW,GAAG,CAAA,EAAGG,UAAU,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACxD,EAAA,MAAM,EAAA,GAAKJ,OAAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,QAAQ,CAAA;AACrC,EAAAK,aAAAA,CAAc,EAAA,EAAI,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AACvC,EAAA,OAAO,EAAA;AACT;;;ACZA,IAAM,iBAAA,GAAoB,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,OAAO,MAAM,CAAA;AAEpH,SAAS,aAAA,CAAc,GAAA,EAAa,MAAA,GAAiB,EAAA,EAAc;AACjE,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,CAACJ,UAAAA,CAAW,GAAG,CAAA,EAAG,OAAO,OAAA;AAE7B,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AACxD,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,GAAA,GAAM,SAAS,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,IAAI,KAAK,KAAA,CAAM,IAAA;AACvD,MAAA,IAAI,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,KAAA,CAAM,IAAA,KAAS,cAAA,IAAkB,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,SAAS,oBAAA,EAAsB;AACjI,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,aAAA,CAAcD,OAAAA,CAAQ,KAAK,KAAA,CAAM,IAAI,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,MAC9D,CAAA,MAAA,IAAW,iBAAA,CAAkB,IAAA,CAAK,CAAC,GAAA,KAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,GAAG,CAAC,CAAA,EAAG;AACpE,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,IAAA,EAAO,GAAG,CAAA,CAAE,CAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,uBAAuB,GAAA,EAAa;AAClD,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAE7B,EAAA,MAAM,WAAqB,EAAC;AAG5B,EAAA,MAAM,OAAA,GAAUA,OAAAA,CAAQ,GAAA,EAAK,cAAc,CAAA;AAC3C,EAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAME,YAAAA,CAAa,OAAA,EAAS,OAAO,CAAC,CAAA;AACrD,IAAA,MAAM,OAAO,EAAE,GAAG,IAAI,YAAA,EAAc,GAAG,IAAI,eAAA,EAAgB;AAC3D,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAChC,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,GAAG,CAAA,KAAM,OAAO,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA,CAC1C,KAAK,IAAI,CAAA;AAEZ,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA;AAAA,YAAA,EACJ,GAAA,CAAI,QAAQ,SAAS;AAAA,eAAA,EAClB,GAAA,CAAI,WAAW,OAAO;AAAA,aAAA,EACxB,OAAO,KAAK;AAAA,iBAAA,EACR,MAAA,CAAO,aAAa,SAAS;AAAA,mBAAA,EAC3B,MAAA,CAAO,eAAe,SAAS;AAAA,kBAAA,EAAA,CAC/B,OAAO,UAAA,IAAc,IAAI,IAAA,CAAK,IAAI,KAAK,MAAM;AAAA;AAAA,EAC7C,OAAO,CAAA,CAAE,CAAA;AAAA,EAC5B;AAGA,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,EAAO,KAAA,EAAO,OAAO,YAAA,EAAc,OAAA,EAAS,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAA;AACtF,EAAA,MAAM,iBAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,MAAM,QAAA,GAAWH,OAAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AACjC,IAAA,IAAIC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,MAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,QAAA,EAAU,GAAG,CAAA;AACzC,MAAA,cAAA,CAAe,IAAA,CAAK,GAAG,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAAyB,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACpE;AAGA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,mBAAA,EAAoB;AAAA,IACpD,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,QAAA,EAAS;AAAA,IACrC,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,QAAA,EAAS;AAAA,IAC1C,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,QAAA,EAAS;AAAA,IACxC,EAAE,IAAA,EAAM,aAAA,EAAe,KAAA,EAAO,UAAA,EAAW;AAAA,IACzC,EAAE,IAAA,EAAM,kBAAA,EAAoB,KAAA,EAAO,UAAA,EAAW;AAAA,IAC9C,EAAE,IAAA,EAAM,kBAAA,EAAoB,KAAA,EAAO,QAAA,EAAS;AAAA,IAC5C,EAAE,IAAA,EAAM,kBAAA,EAAoB,KAAA,EAAO,QAAA,EAAS;AAAA,IAC5C,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,MAAA,EAAO;AAAA,IACxC,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,MAAA,EAAO;AAAA,IACxC,EAAE,IAAA,EAAM,oBAAA,EAAsB,KAAA,EAAO,gBAAA,EAAiB;AAAA,IACtD,EAAE,IAAA,EAAM,qBAAA,EAAuB,KAAA,EAAO,gBAAA,EAAiB;AAAA,IACvD,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,QAAA,EAAS;AAAA,IACtC,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,MAAA,EAAO;AAAA,IAClC,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,uBAAA,EAAwB;AAAA,IACvD,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,OAAA;AAAQ,GACvC;AAEA,EAAA,MAAM,YAAA,GAAe,YAClB,MAAA,CAAO,CAAC,OAAOA,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,EAAA,CAAG,IAAI,CAAC,CAAC,CAAA,CAChD,GAAA,CAAI,CAAC,EAAA,KAAO,CAAA,IAAA,EAAO,GAAG,KAAK,CAAA,EAAA,EAAK,EAAA,CAAG,IAAI,CAAA,CAAA,CAAG,CAAA;AAE7C,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAA+B,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACxE;AAGA,EAAA,MAAM,OAAA,GAAUA,OAAAA,CAAQ,GAAA,EAAK,cAAc,CAAA;AAC3C,EAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,IAAA,MAAM,UAAA,GAAaE,YAAAA,CAAa,OAAA,EAAS,OAAO,EAC7C,KAAA,CAAM,IAAI,CAAA,CACV,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAK,IAAK,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,EAC5C,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAA,EAAO,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,EAAE,IAAA,EAAM,CAAA,CAAE,CAAA,CAC1C,KAAK,IAAI,CAAA;AACZ,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAA6B,UAAU,CAAA,CAAE,CAAA;AAAA,IACzD;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAaH,OAAAA,CAAQ,GAAA,EAAK,WAAW,CAAA;AAC3C,EAAA,IAAIC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAQE,YAAAA,CAAa,UAAA,EAAY,OAAO,CAAA;AAC9C,IAAA,QAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AAAA,EAC7C;AAGA,EAAA,MAAM,aAAa,MAAA,CAAO,UAAA,IAAc,EAAC,EAAG,KAAK,IAAI,CAAA;AACrD,EAAA,QAAA,CAAS,IAAA,CAAK,CAAA;AAAA,eAAA,EACC,OAAO,YAAY;AAAA,aAAA,EACrB,OAAO,KAAK;AAAA,iBAAA,EACR,MAAA,CAAO,aAAa,GAAG;AAAA,gBAAA,EACxB,OAAO,sBAAsB;AAAA,mBAAA,EAC1B,MAAA,CAAO,eAAe,GAAG;AAAA,kBAAA,EAC1B,aAAa,GAAG;AAAA,mBAAA,EACf,OAAO,WAAA,KAAgB,MAAA,GAAY,OAAO,MAAA,CAAO,WAAW,IAAI,SAAS;AAAA,cAAA,EAC9E,MAAA,CAAO,aAAa,CAAA,CAAE,CAAA;AAEpC,EAAA,MAAM,OAAA,GAAU,CAAA;;AAAA;;AAAA,EAIhB,QAAA,CAAS,IAAA,CAAK,MAAM,CAAC;AAAA,CAAA;AAErB,EAAA,MAAM,OAAO,aAAA,CAAc;AAAA,IACzB,GAAA;AAAA,IACA,cAAc,MAAA,CAAO,aAAA;AAAA,IACrB,OAAA,EAAS,GAAA;AAAA,IACT,QAAA,EAAU,oBAAA;AAAA,IACV;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,IAAA,EAAK;AAChB;AAEO,SAAS,mBAAmB,GAAA,EAAa;AAC9C,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAE7B,EAAA,MAAM,UAAU,CAAC,KAAA,EAAO,OAAO,KAAA,EAAO,YAAA,EAAc,SAAS,KAAK,CAAA;AAClE,EAAA,MAAM,YAAsB,EAAC;AAE7B,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,MAAM,QAAA,GAAWH,OAAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AACjC,IAAA,IAAIC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,MAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,QAAA,EAAU,GAAG,CAAA;AACzC,MAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,SAAA,CAAU,IAAA,CAAK,GAAG,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IAC5D;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAUD,OAAAA,CAAQ,GAAA,EAAK,cAAc,CAAA;AAC3C,EAAA,IAAI,OAAA,GAAU,OAAO,YAAA,IAAgB,SAAA;AACrC,EAAA,IAAI,UAAA,GAAa,OAAA;AACjB,EAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAME,YAAAA,CAAa,OAAA,EAAS,OAAO,CAAC,CAAA;AACrD,MAAA,OAAA,GAAU,IAAI,IAAA,IAAQ,OAAA;AACtB,MAAA,UAAA,GAAa,IAAI,OAAA,IAAW,UAAA;AAAA,IAC9B,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EACX;AAEA,EAAA,MAAM,OAAA,GAAU,KAAK,OAAO;;AAAA,sBAAA,EAEN,OAAO,KAAK,UAAU;AAAA;;AAAA;;AAAA,aAAA,EAK/B,OAAO,KAAK;AAAA,iBAAA,EACR,MAAA,CAAO,aAAa,GAAG;AAAA,gBAAA,EACxB,OAAO,sBAAsB;AAAA,mBAAA,EAC1B,MAAA,CAAO,eAAe,GAAG;AAAA,sBAAA,EACtB,SAAA,CAAU,SAAS,CAAA,GAAI,IAAA,GAAO,UAAU,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,OAAK,CAAA,CAAE,OAAA,CAAQ,QAAQ,MAAM,CAAC,EAAE,IAAA,CAAK,IAAI,IAAI,oBAAoB;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAsBhJ,EAAA,MAAM,QAAA,GAAWH,OAAAA,CAAQ,GAAA,EAAK,UAAU,CAAA;AACxC,EAAAK,aAAAA,CAAc,QAAA,EAAU,OAAA,EAAS,OAAO,CAAA;AAExC,EAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAC1B;;;ACtMA,IAAMC,YAAA,GAAa,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAChD,IAAMC,WAAA,GAAYC,QAAQF,YAAU,CAAA;AAGpC,IAAM,kBAAA,GAAqBN,OAAAA,CAAQO,WAAA,EAAW,cAAc,CAAA;AAErD,IAAM,WAAA,GAAc;AAAA,EACzB,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,yBAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,0BAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAeA,SAAS,mBAAmB,SAAA,EAAkC;AAC5D,EAAA,MAAM,QAAA,GAA0B,EAAE,UAAA,EAAY,EAAC,EAAE;AACjD,EAAA,MAAM,OAAA,GAAUP,OAAAA,CAAQ,SAAA,EAAW,cAAc,CAAA;AAEjD,EAAA,IAAI,CAACC,UAAAA,CAAW,OAAO,CAAA,EAAG;AAExB,IAAA,IAAIA,WAAWD,OAAAA,CAAQ,SAAA,EAAW,kBAAkB,CAAC,KAAKC,UAAAA,CAAWD,OAAAA,CAAQ,SAAA,EAAW,UAAU,CAAC,CAAA,IAAKC,UAAAA,CAAWD,QAAQ,SAAA,EAAW,gBAAgB,CAAC,CAAA,EAAG;AACxJ,MAAA,QAAA,CAAS,gBAAA,GAAmB,QAAA;AAC5B,MAAA,QAAA,CAAS,SAAA,GAAY,QAAA;AAAA,IACvB,WAAWC,UAAAA,CAAWD,OAAAA,CAAQ,SAAA,EAAW,QAAQ,CAAC,CAAA,EAAG;AACnD,MAAA,QAAA,CAAS,gBAAA,GAAmB,IAAA;AAC5B,MAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AAAA,IACvB;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,QAAA,CAAS,gBAAA,GAAmB,YAAA;AAE5B,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAMG,YAAAA,CAAa,OAAA,EAAS,OAAO,CAAC,CAAA;AACrD,IAAA,MAAM,OAAO,EAAE,GAAG,IAAI,YAAA,EAAc,GAAG,IAAI,eAAA,EAAgB;AAC3D,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAGhC,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,MAAA,IAAU,CAAA,CAAE,UAAA,CAAW,OAAO,CAAC,CAAA,EAAG,QAAA,CAAS,SAAA,GAAY,MAAA;AAAA,SAAA,IAC5E,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,OAAA,IAAW,CAAA,CAAE,UAAA,CAAW,QAAQ,CAAC,CAAA,EAAG,QAAA,CAAS,SAAA,GAAY,OAAA;AAAA,SAAA,IACnF,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,KAAA,IAAS,CAAA,CAAE,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG,QAAA,CAAS,SAAA,GAAY,KAAA;AAAA,SAAA,IAC/E,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,SAAA,IAAa,CAAA,CAAE,UAAA,CAAW,UAAU,CAAC,CAAA,EAAG,QAAA,CAAS,SAAA,GAAY,SAAA;AAAA,SAAA,IACvF,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,MAAA,IAAU,CAAA,CAAE,UAAA,CAAW,UAAU,CAAC,CAAA,EAAG,QAAA,CAAS,SAAA,GAAY,QAAA;AAAA,SAAA,IACpF,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,KAAM,QAAA,IAAY,CAAA,CAAE,UAAA,CAAW,YAAY,CAAC,CAAA,EAAG,QAAA,CAAS,SAAA,GAAY,QAAA;AAAA,SAAA,IACxF,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,WAAY,gBAAA,GAAmB,YAAA;AAGrE,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAC,CAAA,EAAG,QAAA,CAAS,WAAA,GAAc,QAAA;AAAA,SAAA,IAC7D,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAC,CAAA,EAAG,QAAA,CAAS,WAAA,GAAc,MAAA;AAAA,SAAA,IAChE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAC,CAAA,EAAG,QAAA,CAAS,WAAA,GAAc,OAAA;AAAA,SAAA,IACjE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,YAAY,CAAC,CAAA,EAAG,QAAA,CAAS,WAAA,GAAc,YAAA;AAAA,SAAA,IACtE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,SAAS,CAAC,CAAA,EAAG,QAAA,CAAS,WAAA,GAAc,SAAA;AAG5E,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAC,CAAA,EAAG,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA;AAChF,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,UAAU,CAAC,CAAA,EAAG,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AACpF,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA,EAAG,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AAC9E,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,WAAW,CAAC,CAAA,EAAG,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA;AAAA,EACxF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,MAAM,YAAA,GAAeH,OAAAA,CAAQ,SAAA,EAAW,eAAe,CAAA;AACvD,EAAA,IAAIC,UAAAA,CAAW,YAAY,CAAA,EAAG;AAC5B,IAAA,QAAA,CAAS,gBAAA,GAAmB,YAAA;AAC5B,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAME,YAAAA,CAAa,YAAA,EAAc,OAAO,CAAC,CAAA;AAC/D,MAAA,QAAA,CAAS,WAAA,GAAc,QAAA,CAAS,eAAA,EAAiB,MAAA,KAAW,IAAA;AAAA,IAC9D,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,WAAA,CAAY,GAAA,EAAa,GAAA,EAAc,OAAA,GAAuB,EAAC,EAAG;AAChF,EAAA,MAAM,SAAA,GAAY,GAAA,GAAMH,OAAAA,CAAQ,GAAA,EAAK,GAAG,CAAA,GAAI,GAAA;AAC5C,EAAA,MAAM,aAAA,GAAgBA,OAAAA,CAAQ,SAAA,EAAW,aAAa,CAAA;AACtD,EAAA,MAAM,SAAA,GAAYA,OAAAA,CAAQ,SAAA,EAAW,oBAAoB,CAAA;AACzD,EAAA,MAAM,eAAA,GAAkBA,OAAAA,CAAQ,SAAA,EAAW,SAAA,EAAW,QAAQ,CAAA;AAC9D,EAAA,MAAM,SAAA,GAAYA,OAAAA,CAAQ,aAAA,EAAe,QAAQ,CAAA;AACjD,EAAA,MAAM,QAAA,GAAWA,OAAAA,CAAQ,aAAA,EAAe,OAAO,CAAA;AAC/C,EAAA,MAAM,aAAA,GAAgB,QAAQ,aAAA,KAAkB,IAAA;AAChD,EAAA,MAAM,UAAA,GAAaA,OAAAA;AAAA,IACjB,aAAA;AAAA,IACA,eAAA;AAAA,IAAA,qBACI,IAAA,EAAK,EAAE,aAAY,CAAE,OAAA,CAAQ,SAAS,GAAG;AAAA,GAC/C;AAGA,EAAA,KAAA,MAAW,KAAK,CAAC,aAAA,EAAe,WAAW,eAAA,EAAiB,SAAA,EAAW,QAAQ,CAAA,EAAG;AAChF,IAAA,IAAI,CAACC,UAAAA,CAAW,CAAC,CAAA,EAAGG,UAAU,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,EACtD;AAGA,EAAA,MAAM,QAAA,GAAW,mBAAmB,SAAS,CAAA;AAG7C,EAAA,MAAM,WAAA,GAAcJ,OAAAA,CAAQ,SAAA,EAAW,UAAU,CAAA;AACjD,EAAA,IAAI,CAACC,WAAW,WAAW,CAAA,EAAGI,aAAAA,CAAc,WAAA,EAAa,IAAI,OAAO,CAAA;AAGpE,EAAA,MAAM,YAAA,GAAeL,OAAAA,CAAQ,QAAA,EAAU,UAAU,CAAA;AACjD,EAAA,IAAI,CAACC,WAAW,YAAY,CAAA,EAAGI,aAAAA,CAAc,YAAA,EAAc,IAAI,OAAO,CAAA;AAGtE,EAAA,MAAM,SAAA,GAAYL,OAAAA,CAAQ,QAAA,EAAU,YAAY,CAAA;AAChD,EAAA,IAAI,CAACC,UAAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAQ,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAmBd,IAAAI,aAAAA,CAAc,SAAA,EAAW,KAAA,EAAO,OAAO,CAAA;AAAA,EACzC;AAGA,EAAA,MAAM,UAAA,GAAaL,OAAAA,CAAQ,aAAA,EAAe,aAAa,CAAA;AACvD,EAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,IAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AACnC,IAAA,MAAM,SAAA,GAAY,SAAS,SAAA,GAAY;AAAA,YAAA,EAAiB,QAAA,CAAS,SAAS,CAAA,CAAA,CAAA,GAAM,EAAA;AAChF,IAAA,MAAM,UAAA,GAAa,SAAS,WAAA,GAAc;AAAA,cAAA,EAAmB,QAAA,CAAS,WAAW,CAAA,CAAA,CAAA,GAAM,EAAA;AACvF,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,UAAA,CAAW,MAAA,GAAS,CAAA,GAC3C;AAAA,aAAA,EAAkB,QAAA,CAAS,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GACrE,EAAA;AACJ,IAAA,MAAM,IAAA,GAAO,SAAS,gBAAA,GAAmB;AAAA,mBAAA,EAAwB,QAAA,CAAS,gBAAgB,CAAA,CAAA,CAAA,GAAM,EAAA;AAChG,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,WAAA,KAAgB,MAAA,GAAY;AAAA,aAAA,EAAkB,QAAA,CAAS,WAAW,CAAA,CAAA,GAAK,EAAA;AAE/F,IAAA,MAAM,IAAA,GAAO,CAAA,qBAAA,EAAwB,MAAA,CAAO,kBAAkB,CAAA;AAAA,eAAA,EACjDD,OAAAA,CAAQ,SAAS,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,MAAS,YAAY,CAAA;AAAA,QAAA,EAC1D,QAAA,CAAS,aAAa,MAAM,CAAA;AAAA;AAAA;AAAA,qDAAA,EAGiB,SAAS,GAAG,UAAU,CAAA,EAAG,SAAS,CAAA,EAAG,IAAI,GAAG,MAAM;AAAA,CAAA;AAErG,IAAAK,aAAAA,CAAc,UAAA,EAAY,IAAA,EAAM,OAAO,CAAA;AAAA,EACzC;AAGA,EAAA,MAAM,cAAA,GAAiBL,OAAAA,CAAQ,aAAA,EAAe,kBAAkB,CAAA;AAChE,EAAA,IAAI,CAACC,UAAAA,CAAW,cAAc,CAAA,EAAG;AAC/B,IAAA,MAAM,QAAA,GAAW,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAQjB,IAAAI,aAAAA,CAAc,cAAA,EAAgB,QAAA,EAAU,OAAO,CAAA;AAAA,EACjD;AAGA,EAAA,MAAM,UAAA,GAAaL,OAAAA,CAAQ,SAAA,EAAW,WAAW,CAAA;AACjD,EAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,IAAA,MAAM,MAAA,GAAS,CAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAyBf,IAAAI,aAAAA,CAAc,UAAA,EAAY,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC3C;AAGA,EAAA,aAAA,CAAc,eAAA,EAAiB,eAAe,UAAU,CAAA;AAGxD,EAAA,MAAM,gBAAA,GAAmB,kBAAkB,SAAS,CAAA;AACpD,EAAA,MAAM,YAAA,GAAe,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAG,gBAAA,CAAiB,OAAA,EAAS,GAAI,OAAA,CAAQ,MAAA,IAAU,EAAG,CAAC,CAAC,CAAA;AAC1F,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,SAAA,EAAW,YAAY,CAAA;AAC/D,EAAA,MAAM,gBAAgB,oBAAA,CAAqB;AAAA,IACzC,SAAA;AAAA,IACA,OAAA,EAAS,YAAA;AAAA,IACT,UAAA,EAAY,WAAA;AAAA,IACZ,OAAA,EAAS,aAAA;AAAA,IACT;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,aAAA,GAAgB,uBAAuB,SAAS,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,mBAAmB,SAAS,CAAA;AAE/C,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAa,aAAA,CAAc,IAAA;AAAA,IAC3B,UAAU,UAAA,CAAW,IAAA;AAAA,IACrB,YAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAc,aAAA,CAAc,cAAA;AAAA,IAC5B,UAAU,aAAA,CAAc,QAAA;AAAA,IACxB;AAAA,GACF;AACF;AAEA,SAAS,aAAA,CAAc,eAAA,EAAyB,OAAA,EAAkB,UAAA,EAAoB;AACpF,EAAA,KAAA,MAAW,aAAa,WAAA,EAAa;AACnC,IAAA,MAAM,WAAA,GAAcL,OAAAA,CAAQ,kBAAA,EAAoB,SAAS,CAAA;AACzD,IAAA,MAAM,YAAA,GAAeA,OAAAA,CAAQ,WAAA,EAAa,UAAU,CAAA;AACpD,IAAA,MAAM,YAAA,GAAeA,OAAAA,CAAQ,eAAA,EAAiB,SAAS,CAAA;AAEvD,IAAA,IAAI,CAACC,UAAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,IAAA,IAAIA,UAAAA,CAAW,YAAY,CAAA,IAAK,CAAC,OAAA,EAAS;AAC1C,IAAA,IAAIA,UAAAA,CAAW,YAAY,CAAA,IAAK,OAAA,EAAS;AACvC,MAAA,MAAM,SAAA,GAAYD,OAAAA,CAAQ,UAAA,EAAY,SAAS,CAAA;AAC/C,MAAAI,SAAAA,CAAU,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AACxC,MAAAK,MAAAA,CAAO,cAAc,SAAA,EAAW,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IAClE;AACA,IAAA,IAAI,CAACR,UAAAA,CAAW,YAAY,CAAA,EAAGG,UAAU,YAAA,EAAc,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAE1E,IAAA,MAAM,OAAA,GAAUM,YAAY,WAAW,CAAA;AACvC,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,GAAA,GAAMV,OAAAA,CAAQ,WAAA,EAAa,KAAK,CAAA;AACtC,MAAA,MAAM,IAAA,GAAOA,OAAAA,CAAQ,YAAA,EAAc,KAAK,CAAA;AACxC,MAAAS,MAAAA,CAAO,KAAK,IAAA,EAAM,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IACpD;AAAA,EACF;AACF;ACjRA,SAAS,oBAAoB,EAAA,EAAoC;AAC/D,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAK,CAAA;AACpB,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA,EAAG;AACvC,IAAA,IAAI,GAAG,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAChC;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,OAAO,EAAE,CAAA;AACpB,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,sBAAsB,GAAA,EAAoE;AACjG,EAAA,MAAM,cAAsC,EAAC;AAC7C,EAAA,IAAI,CAAC,IAAI,UAAA,CAAW,KAAK,GAAG,OAAO,EAAE,WAAA,EAAa,IAAA,EAAM,GAAA,EAAI;AAE5D,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,CAAC,CAAA;AACrC,EAAA,IAAI,aAAa,EAAA,EAAI,OAAO,EAAE,WAAA,EAAa,MAAM,GAAA,EAAI;AAErD,EAAA,MAAM,UAAU,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,QAAQ,EAAE,IAAA,EAAK;AAC5C,EAAA,MAAM,OAAO,GAAA,CAAI,KAAA,CAAM,QAAA,GAAW,CAAC,EAAE,IAAA,EAAK;AAE1C,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,EAAG;AACtC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,IAAI,WAAW,CAAA,EAAG;AAChB,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,QAAQ,EAAE,IAAA,EAAK;AACzC,MAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,CAAC,EAAE,IAAA,EAAK;AAC5C,MAAA,WAAA,CAAY,GAAG,CAAA,GAAI,KAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,aAAa,IAAA,EAAK;AAC7B;AAEA,SAAS,YAAY,KAAA,EAA4B;AAC/C,EAAA,MAAM,KAAK,KAAA,CAAM,EAAA,GAAK,CAAA,EAAA,EAAK,KAAA,CAAM,EAAE,CAAA,CAAA,GAAK,EAAA;AACxC,EAAA,OAAO,MAAM,KAAA,CAAM,IAAI,KAAK,KAAA,CAAM,IAAI,GAAG,EAAE,CAAA,CAAA;AAC7C;AAEA,SAAS,YAAY,IAAA,EAAkC;AACrD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,0BAA0B,CAAA;AACnD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,EAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA;AAC5C,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,IAAA,EAAK,EAAG,EAAA,EAAI,OAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,EACzD;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAK,EAAE;AACnC;AAEA,SAAS,QAAQ,EAAA,EAAoB;AACnC,EAAA,OAAOT,OAAAA,CAAQ,IAAI,YAAY,CAAA;AACjC;AAEA,SAAS,UAAU,EAAA,EAAY;AAC7B,EAAA,MAAM,GAAA,GAAMQ,QAAQ,EAAE,CAAA;AACtB,EAAA,IAAI,CAACP,UAAAA,CAAW,GAAG,CAAA,EAAGG,UAAU,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC1D;AAEA,SAAS,IAAA,CAAK,WAAmB,MAAA,EAAgC;AAC/D,EAAA,MAAM,EAAA,GAAK,QAAQ,SAAS,CAAA;AAC5B,EAAA,SAAA,CAAU,EAAE,CAAA;AACZ,EAAA,MAAM,EAAA,GAAK,mBAAA,CAAoB,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAA,iBAAS,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,EAAG,CAAA;AAE/E,EAAA,MAAM,MAAM,EAAA,GAAK,MAAA;AACjB,EAAAC,aAAAA,CAAc,GAAA,EAAK,EAAA,EAAI,OAAO,CAAA;AAC9B,EAAAA,aAAAA,CAAc,EAAA,EAAI,EAAA,EAAI,OAAO,CAAA;AAC/B;AAEA,SAAS,MAAA,CAAO,WAAmB,KAAA,EAAoB;AACrD,EAAA,MAAM,EAAA,GAAK,QAAQ,SAAS,CAAA;AAC5B,EAAA,SAAA,CAAU,EAAE,CAAA;AACZ,EAAA,MAAM,WAAWJ,UAAAA,CAAW,EAAE,IAAIE,YAAAA,CAAa,EAAA,EAAI,OAAO,CAAA,GAAI,EAAA;AAE9D,EAAA,IAAI,cAAsC,EAAC;AAC3C,EAAA,IAAI,IAAA;AAEJ,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,KAAK,CAAA,EAAG;AAC9B,IAAA,MAAM,MAAA,GAAS,sBAAsB,QAAQ,CAAA;AAC7C,IAAA,WAAA,GAAc,MAAA,CAAO,WAAA;AACrB,IAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AAAA,EAChB,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,WAAA,CAAY,OAAA,GAAA,iBAAU,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC7C,EAAA,MAAM,OAAA,GAAU,YAAY,KAAK,CAAA;AACjC,EAAA,MAAM,OAAA,GAAU,oBAAoB,WAAW,CAAA,IAAK,OAAO,IAAA,GAAO,IAAA,GAAO,MAAM,OAAA,GAAU,IAAA;AAEzF,EAAA,MAAM,MAAM,EAAA,GAAK,MAAA;AACjB,EAAAE,aAAAA,CAAc,GAAA,EAAK,OAAA,EAAS,OAAO,CAAA;AACnC,EAAAA,aAAAA,CAAc,EAAA,EAAI,OAAA,EAAS,OAAO,CAAA;AACpC;AAEA,SAAS,GAAA,CAAI,SAAA,EAAmB,GAAA,EAAa,KAAA,EAAe;AAC1D,EAAA,MAAM,EAAA,GAAK,QAAQ,SAAS,CAAA;AAC5B,EAAA,SAAA,CAAU,EAAE,CAAA;AACZ,EAAA,MAAM,WAAWJ,UAAAA,CAAW,EAAE,IAAIE,YAAAA,CAAa,EAAA,EAAI,OAAO,CAAA,GAAI,EAAA;AAC9D,EAAA,MAAM,EAAE,WAAA,EAAa,IAAA,EAAK,GAAI,sBAAsB,QAAQ,CAAA;AAC5D,EAAA,WAAA,CAAY,GAAG,CAAA,GAAI,KAAA;AACnB,EAAA,WAAA,CAAY,OAAA,GAAA,iBAAU,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC7C,EAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,WAAW,CAAA,IAAK,IAAA,IAAQ,EAAA,CAAA;AAE5D,EAAA,MAAM,MAAM,EAAA,GAAK,MAAA;AACjB,EAAAE,aAAAA,CAAc,GAAA,EAAK,OAAA,EAAS,OAAO,CAAA;AACnC,EAAAA,aAAAA,CAAc,EAAA,EAAI,OAAA,EAAS,OAAO,CAAA;AACpC;AAEA,SAAS,KAAK,SAAA,EAA+B;AAC3C,EAAA,MAAM,EAAA,GAAK,QAAQ,SAAS,CAAA;AAC5B,EAAA,IAAI,CAACJ,UAAAA,CAAW,EAAE,CAAA,EAAG,OAAO,EAAE,WAAA,EAAa,EAAC,EAAG,OAAA,EAAS,EAAC,EAAE;AAC3D,EAAA,MAAM,GAAA,GAAME,YAAAA,CAAa,EAAA,EAAI,OAAO,CAAA;AACpC,EAAA,MAAM,EAAE,WAAA,EAAa,IAAA,EAAK,GAAI,sBAAsB,GAAG,CAAA;AACvD,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG;AACnC,IAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,IAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,EAAE,aAAa,OAAA,EAAQ;AAChC;AAEO,SAAS,MAAA,GAAS;AACvB,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAK;AACnC;;;ACtIO,SAAS,aAAa,IAAA,EAAmC;AAC9D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,GACpC,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAA,EAAO,CAAA,CAAE,EAAE,CAAA;AAAA,gBAAA,EAAuB,EAAE,IAAI;AAAA,qDAAA,CAAyD,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GACzI,CAAA;AAAA;AAAA,qDAAA,CAAA;AAIJ,EAAA,MAAM,cAAc,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA,GAC1C,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,KAAK,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAC/C,wBAAA;AAEJ,EAAA,MAAM,YAAY,IAAA,CAAK,SAAA,CAAU,MAAA,GAAS,CAAA,GACtC,KAAK,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,KAAK,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAC7C,EAAA;AAEJ,EAAA,OAAO,CAAA;AAAA,SAAA,EACE,KAAK,IAAI;AAAA;AAAA;AAAA;;AAAA,EAAA,EAKhB,KAAK,KAAK;;AAAA;AAAA,EAGZ,IAAA,CAAK,QAAQ,2CAA2C;;AAAA;AAAA,EAGxD,IAAI;;AAAA;AAAA,EAGJ,WAAW;;AAAA;AAAA;;AAAA;AAAA;AAAA,EAOX,SAAA,GAAY;AAAA;AAAA,EAAgC,SAAS,KAAK,EAAE;AAAA,CAAA;AAE9D;;;ACnCO,SAAS,kBAAkB,IAAA,EAAyB;AACzD,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAClC,EAAA,MAAM,UAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,MAAA,EAAQ,KAAK,IAAI,CAAA;AAE1D,EAAA,MAAM,KAAK,MAAA,EAAO;AAClB,EAAA,EAAA,CAAG,IAAA,CAAK,SAAS,EAAE,KAAA,EAAO,KAAK,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAC/C,EAAA,EAAA,CAAG,MAAA,CAAO,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,QAAA,CAAA,EAAY,CAAA;AAEtE,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,MAAM,SAAA,GAAYH,OAAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,KAAK,KAAK,CAAA;AAC9C,IAAA,IAAIC,UAAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,MAAM,YAAA,GAAeE,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AACpD,MAAA,EAAA,CAAG,MAAA,CAAO,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA,kBAAA,EAAqB,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,CAAA;AAC5E,MAAA,EAAA,CAAG,MAAA,CAAO,OAAA,EAAS,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,CAAA;AAAA,EAAQ,YAAY;AAAA,GAAA,CAAA,EAAS,CAAA;AAAA,IACxE;AAAA,EACF;AAEA,EAAA,UAAA,CAAW,OAAA,EAAS,IAAA,CAAK,IAAY,CAAA;AACrC,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;AAEO,SAAS,iBAAA,CAAkB,KAAa,IAAA,EAAc;AAC3D,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAChD,EAAA,UAAA,CAAW,OAAA,EAAS,IAAY,CAAA;AAChC,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;AAEA,SAAS,UAAA,CAAW,OAAA,EAAiB,IAAA,EAAc,OAAA,EAAoC;AACrF,EAAA,MAAM,KAAK,MAAA,EAAO;AAClB,EAAA,MAAM,IAAA,GAAO,EAAA,CAAG,IAAA,CAAK,OAAO,CAAA;AAE5B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,KAAA,IAAS,IAAA;AACxC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,IAAA,IAAQ,EAAA;AAEtC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CACf,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,YAAY,CAAA,CACrC,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACb,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,kBAAkB,CAAA;AAC7C,IAAA,OAAO,EAAE,EAAA,EAAI,CAAA,IAAA,EAAO,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,IAAA,EAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA,CAAE,IAAA,EAAK;AAAA,EAC/D,CAAC,CAAA;AAEH,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CACtB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,YAAY,CAAA,CACrC,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAEpB,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CACpB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAEpB,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,EAAE,IAAA,EAAM,KAAA,EAAO,MAAM,YAAA,EAAc,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,CAAA;AAE9F,EAAAE,cAAcL,OAAAA,CAAQ,OAAA,EAAS,SAAS,CAAA,EAAG,SAAS,OAAO,CAAA;AAC7D;AAEO,SAAS,kBAAA,CAAmB,KAAa,IAAA,EAAsB;AACpE,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAEhD,EAAA,IAAI,CAACC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACxB,IAAA,OAAO,gBAAgB,IAAI,CAAA,WAAA,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,KAAA,EAAO,CAAC,KAAA,EAAO,WAAA,EAAa,oBAAA,EAAsB,cAAA,EAAgB,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAG;AAAA,MAC5G,GAAA,EAAK,OAAA;AAAA,MAAS,QAAA,EAAU;AAAA,KACzB,EAAE,IAAA,EAAK;AAER,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,gCAAgC,IAAI,CAAA,CAAA,CAAA;AAAA,IAC7C;AAEA,IAAA,OAAO,wBAAwB,IAAI,CAAA;AAAA,EAAO,GAAG,CAAA,CAAA;AAAA,EAC/C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,+CAA+C,IAAI,CAAA,CAAA,CAAA;AAAA,EAC5D;AACF;AAEO,SAAS,eAAA,CAAgB,GAAA,EAAa,IAAA,EAAc,IAAA,EAAuB;AAChF,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAEhD,EAAA,IAAI,CAACA,UAAAA,CAAW,OAAO,CAAA,EAAG;AACxB,IAAA,OAAO,gBAAgB,IAAI,CAAA,WAAA,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,IAAA,IAAQ,QAAA;AACxB,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,EAAO,CAAC,MAAA,EAAQ,GAAG,OAAO,CAAA,MAAA,CAAA,EAAU,IAAA,EAAM,GAAG,CAAA,EAAG;AAAA,MACxE,GAAA,EAAK,OAAA;AAAA,MAAS,QAAA,EAAU;AAAA,KACzB,EAAE,IAAA,EAAK;AAER,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,CAAA,mBAAA,EAAsB,OAAO,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAA,CAAA;AAAA,IACjE;AAEA,IAAA,OAAO,CAAA,eAAA,EAAkB,IAAI,CAAA,GAAA,EAAM,OAAO,CAAA;AAAA,EAAa,IAAI,CAAA,CAAA;AAAA,EAC7D,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,4CAA4C,IAAI,CAAA,CAAA,CAAA;AAAA,EACzD;AACF;AAEO,SAAS,kBAAA,CAAmB,KAAa,IAAA,EAAsB;AACpE,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAEhD,EAAA,IAAI,CAACA,UAAAA,CAAW,OAAO,CAAA,EAAG;AACxB,IAAA,OAAO,gBAAgB,IAAI,CAAA,WAAA,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI;AAEF,IAAA,YAAA,CAAa,KAAA,EAAO,CAAC,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAG,EAAE,GAAA,EAAK,OAAA,EAAS,CAAA;AAGxD,IAAA,MAAM,MAAA,GAAS,SAAS,wBAAA,EAA0B;AAAA,MAChD,GAAA,EAAK,OAAA;AAAA,MACL,QAAA,EAAU;AAAA,KACX,EAAE,IAAA,EAAK;AAER,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,mCAAmC,IAAI,CAAA,CAAA,CAAA;AAAA,IAChD;AAGA,IAAA,MAAM,SAAA,GAAA,qBAAgB,IAAA,EAAK,EAAE,aAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AACvD,IAAA,YAAA,CAAa,KAAA,EAAO,CAAC,QAAA,EAAU,IAAA,EAAM,CAAA,SAAA,EAAY,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA,EAAG,EAAE,GAAA,EAAK,SAAS,CAAA;AAGvF,IAAA,MAAM,IAAA,GAAO,SAAS,4BAAA,EAA8B;AAAA,MAClD,GAAA,EAAK,OAAA;AAAA,MACL,QAAA,EAAU;AAAA,KACX,EAAE,IAAA,EAAK;AAER,IAAA,OAAO,CAAA,iCAAA,EAA+B,IAAI,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,CAAA;AAAA,EAC7D,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,6CAA6C,IAAI,CAAA,CAAA,CAAA;AAAA,EAC1D;AACF;AAEO,SAAS,eAAA,CAAgB,KAAa,IAAA,EAAsB;AACjE,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAEhD,EAAA,IAAI,CAACA,UAAAA,CAAW,OAAO,CAAA,EAAG;AACxB,IAAA,OAAO,gBAAgB,IAAI,CAAA,WAAA,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI;AAEF,IAAA,MAAM,QAAA,GAAWD,OAAAA,CAAQ,OAAA,EAAS,SAAS,CAAA;AAC3C,IAAA,IAAI,CAACC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,MAAA,OAAO,sCAAsC,IAAI,CAAA,CAAA,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,WAAA,GAAcE,YAAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAGlD,IAAA,MAAM,QAAA,GAAW,oDAAA;AACjB,IAAA,MAAM,OAAiB,EAAC;AACxB,IAAA,IAAI,KAAA;AACJ,IAAA,OAAA,CAAQ,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,WAAW,OAAO,IAAA,EAAM;AACpD,MAAA,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAA;AAAA,IAC3B;AAGA,IAAA,MAAM,MAAA,GAASH,OAAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AACjC,IAAA,MAAM,cAAwB,EAAC;AAE/B,IAAA,IAAIC,UAAAA,CAAW,MAAM,CAAA,EAAG;AACtB,MAAA,MAAM,KAAA,GAAQ,SAAS,sIAAA,EAAwI;AAAA,QAC7J,GAAA;AAAA,QACA,QAAA,EAAU;AAAA,OACX,EAAE,IAAA,EAAK,CAAE,MAAM,IAAI,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA;AAEnC,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI;AACF,UAAA,MAAM,UAAUE,YAAAA,CAAaH,OAAAA,CAAQ,GAAA,EAAK,IAAI,GAAG,OAAO,CAAA;AACxD,UAAA,WAAA,CAAY,KAAK,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,OAAA,CAAQ,MAAM,CAAA,MAAA,CAAQ,CAAA;AAAA,QACrD,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,MAAA,GAAS,sBAAsB,IAAI,CAAA;;AAAA,CAAA;AACvC,IAAA,MAAA,IAAU,CAAA,+BAAA,EAAkC,KAAK,MAAM;AAAA,CAAA;AACvD,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAA,IAAU,OAAO,GAAG;AAAA,CAAA;AAAA,IACtB;AAEA,IAAA,MAAA,IAAU;AAAA,sBAAA,EAA2B,YAAY,MAAM;AAAA,CAAA;AACvD,IAAA,KAAA,MAAW,IAAA,IAAQ,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG;AAC3C,MAAA,MAAA,IAAU,OAAO,IAAI;AAAA,CAAA;AAAA,IACvB;AAEA,IAAA,MAAA,IAAU;AAAA,sFAAA,CAAA;AAEV,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,+BAA+B,IAAI,CAAA,CAAA,CAAA;AAAA,EAC5C;AACF;;;ACjNO,SAAS,cAAc,IAAA,EAAoC;AAChE,EAAA,OAAO,CAAA;AAAA,IAAA,EACH,KAAK,QAAQ;AAAA;AAAA;AAAA,OAAA,EAGV,KAAK,KAAK;AAAA,MAAA,EACX,KAAK,SAAS;AAAA;;AAAA,EAAA,EAGlB,KAAK,WAAW;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AA4BpB;;;AC9BO,SAAS,mBAAmB,IAAA,EAA0B;AAC3D,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAElC,EAAA,MAAM,UAAU,IAAA,CAAK,EAAA;AACrB,EAAA,MAAM,QAAA,GAAW,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAK,KAAA,CAAM,WAAA,EAAY,CAAE,OAAA,CAAQ,eAAe,GAAG,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAC,CAAA,GAAA,CAAA;AAEzG,EAAA,MAAM,UAAU,aAAA,CAAc;AAAA,IAC5B,QAAA,EAAU,OAAA;AAAA,IACV,aAAa,IAAA,CAAK,KAAA;AAAA,IAClB,KAAA,EAAO,KAAK,KAAA,IAAS,GAAA;AAAA,IACrB,WAAW,IAAA,CAAK;AAAA,GACjB,CAAA;AAED,EAAA,MAAM,OAAO,aAAA,CAAc;AAAA,IACzB,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,cAAc,MAAA,CAAO,aAAA;AAAA,IACrB,OAAA,EAAS,CAAA,WAAA,EAAc,IAAA,CAAK,IAAI,CAAA,QAAA,CAAA;AAAA,IAChC,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAC1B;AAEO,SAAS,gBAAA,CAAiB,KAAa,IAAA,EAAc;AAC1D,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAChD,EAAA,MAAM,UAAA,GAAaA,OAAAA,CAAQ,OAAA,EAAS,SAAS,CAAA;AAE7C,EAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,SAAU,EAAC;AAErC,EAAA,MAAM,UAA8E,EAAC;AACrF,EAAA,KAAA,MAAW,IAAA,IAAQS,WAAAA,CAAY,UAAU,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAc,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG;AACnF,IAAA,MAAM,UAAUP,YAAAA,CAAaH,OAAAA,CAAQ,UAAA,EAAY,IAAI,GAAG,OAAO,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,cAAc,CAAA;AAC5C,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,mBAAmB,CAAA;AACrD,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,YAAY,CAAA;AAC7C,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,EAAA,EAAI,OAAA,GAAU,CAAC,CAAA,IAAK,SAAA;AAAA,MACpB,KAAA,EAAO,UAAA,GAAa,CAAC,CAAA,IAAK,IAAA;AAAA,MAC1B,MAAA,EAAQ,WAAA,GAAc,CAAC,CAAA,EAAG,MAAK,IAAK,SAAA;AAAA,MACpC;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,OAAA;AACT;ACtDO,SAAS,eAAA,CAAgB,GAAA,EAAa,IAAA,EAAc,OAAA,EAAiB;AAC1E,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAChD,EAAA,MAAM,UAAA,GAAaA,OAAAA,CAAQ,OAAA,EAAS,SAAS,CAAA;AAE7C,EAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,KAAA,GAAQS,WAAAA,CAAY,UAAU,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAc,CAAA,CAAE,UAAA,CAAW,OAAO,CAAC,CAAA;AACjF,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,OAAO,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EAClE;AAEA,EAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA;AACzB,EAAA,MAAM,SAAA,GAAYV,OAAAA,CAAQ,UAAA,EAAY,SAAS,CAAA;AAC/C,EAAA,IAAI,OAAA,GAAUG,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AAE7C,EAAA,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,qBAAA,EAAuB,qBAAqB,CAAA;AAEtE,EAAA,IAAI,QAAA,GAAW,SAAA;AACf,EAAA,IAAI;AACF,IAAA,QAAA,GAAWQ,QAAAA,CAAS,sBAAsB,EAAE,GAAA,EAAK,UAAU,OAAA,EAAS,EAAE,IAAA,EAAK;AAC3E,IAAA,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,wBAAA,EAA0B,CAAA,iBAAA,EAAoB,QAAQ,CAAA,CAAE,CAAA;AAAA,EACpF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,wBAAA,EAA0B,CAAA,qBAAA,CAAuB,CAAA;AAAA,EAC7E;AAEA,EAAA,aAAA,CAAc;AAAA,IACZ,GAAA;AAAA,IACA,cAAc,MAAA,CAAO,aAAA;AAAA,IACrB,OAAA,EAAS,cAAc,IAAI,CAAA,QAAA,CAAA;AAAA,IAC3B,QAAA,EAAU,SAAA;AAAA,IACV;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAA;AAAA,IAC/B,eAAA,EAAiB,QAAA;AAAA,IACjB,YAAA,EAAc,mBAAmB,OAAO,CAAA;AAAA;AAAA,kEAAA;AAAA,GAG1C;AACF;AAEO,SAAS,oBAAA,CAAqB,GAAA,EAAa,IAAA,EAAc,OAAA,EAAiB;AAC/E,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAChD,EAAA,MAAM,UAAA,GAAaX,OAAAA,CAAQ,OAAA,EAAS,SAAS,CAAA;AAE7C,EAAA,MAAM,KAAA,GAAQU,WAAAA,CAAY,UAAU,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAc,CAAA,CAAE,UAAA,CAAW,OAAO,CAAC,CAAA;AACjF,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,OAAO,CAAA,WAAA,CAAa,CAAA;AAEtE,EAAA,MAAM,SAAA,GAAYV,OAAAA,CAAQ,UAAA,EAAY,KAAA,CAAM,CAAC,CAAC,CAAA;AAC9C,EAAA,MAAM,OAAA,GAAUG,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AAE/C,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,CAAM,2BAA2B,CAAA;AAC/D,EAAA,MAAM,QAAA,GAAW,aAAA,GAAgB,CAAC,CAAA,EAAG,MAAK,IAAK,MAAA;AAE/C,EAAA,IAAI,IAAA,GAAO,+BAAA;AACX,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,IAAI;AACF,MAAA,IAAA,GAAOQ,QAAAA,CAAS,YAAY,QAAQ,CAAA,MAAA,CAAA,EAAU,EAAE,GAAA,EAAK,QAAA,EAAU,SAAS,CAAA;AAAA,IAC1E,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,GAAO,wCAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,aAAa,OAAO;;AAAA;AAAA;AAAA,EAI1C,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAI,CAAC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAenB,EAAA,MAAM,aAAa,aAAA,CAAc;AAAA,IAC/B,GAAA;AAAA,IACA,cAAc,MAAA,CAAO,aAAA;AAAA,IACrB,OAAA,EAAS,cAAc,IAAI,CAAA,QAAA,CAAA;AAAA,IAC3B,QAAA,EAAU,UAAU,OAAO,CAAA,GAAA,CAAA;AAAA,IAC3B,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,OAAO,EAAE,YAAY,QAAA,EAAU,IAAA,EAAM,KAAK,KAAA,CAAM,CAAA,EAAG,GAAI,CAAA,EAAE;AAC3D;AChFA,SAAS,GAAA,CAAI,KAAa,IAAA,EAAwB;AAChD,EAAA,OAAOC,YAAAA,CAAa,OAAO,IAAA,EAAM,EAAE,KAAK,QAAA,EAAU,OAAA,EAAS,CAAA,CAAE,IAAA,EAAK;AACpE;AAEA,SAAS,UAAU,KAAA,EAAuB;AACxC,EAAA,OAAO,KAAA,CAAM,aAAY,CAAE,OAAA,CAAQ,eAAe,GAAG,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC7E;AAEA,SAAS,aAAa,OAAA,EAA2B;AAC/C,EAAA,MAAM,UAAU,OAAA,CAAQ,KAAA,CAAM,0CAA0C,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AAClF,EAAA,OAAO,QAAQ,KAAA,CAAM,IAAI,EAAE,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,KAAA,CAAM,kDAAkD,CAAA,GAAI,CAAC,CAAC,CAAA,CACzG,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAA,CAAQ,KAAK,CAAC,CAAA;AACtD;AAEA,SAAS,aAAa,GAAA,EAAuB;AAC3C,EAAA,MAAM,SAAS,GAAA,CAAI,GAAA,EAAK,CAAC,QAAA,EAAU,aAAA,EAAe,uBAAuB,CAAC,CAAA;AAC1E,EAAA,OAAO,SAAS,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,WAAW,EAAE,CAAC,IAAI,EAAC;AAC5F;AAEA,SAAS,iBAAA,CAAkB,SAAiB,MAAA,EAAwB;AAClE,EAAA,IAAI,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,+CAAA,EAAiD,cAAc,CAAA;AAC7F,EAAA,MAAM,IAAA,GAAA,qBAAW,IAAA,EAAK,EAAE,aAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,CAAA,EAAA,EAAK,IAAI,CAAA,gCAAA,EAAmC,MAAM,CAAA,EAAA,CAAA;AAChE,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,eAAe,CAAA,EAAG;AACrC,IAAA,OAAA,GAAU,OAAA,CAAQ,QAAQ,eAAA,EAAiB,CAAA;AAAA,EAAkB,KAAK,CAAA,CAAE,CAAA;AAAA,EACtE,CAAA,MAAO;AACL,IAAA,OAAA,IAAW;AAAA;AAAA,EAAoB,KAAK;AAAA,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,cAAc,GAAA,EAAa,IAAA,EAAc,OAAA,EAAiB,OAAA,GAAyB,EAAC,EAAiB;AACnH,EAAA,IAAI;AACF,IAAA,GAAA,CAAI,GAAA,EAAK,CAAC,WAAA,EAAa,WAAW,CAAC,CAAA;AAAA,EACrC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,EACxC;AAEA,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAChD,EAAA,MAAM,UAAA,GAAaZ,OAAAA,CAAQ,OAAA,EAAS,SAAS,CAAA;AAC7C,EAAA,IAAI,CAACC,WAAW,UAAU,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,IAAI,CAAA,CAAA,CAAG,CAAA;AAE5F,EAAA,MAAM,KAAA,GAAQS,WAAAA,CAAY,UAAU,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,UAAA,CAAW,OAAO,CAAC,CAAA;AAC/E,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,CAAA,OAAA,EAAU,OAAO,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAA,CAAG,CAAA;AAExF,EAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA;AACzB,EAAA,MAAM,SAAA,GAAYV,OAAAA,CAAQ,UAAA,EAAY,SAAS,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAUG,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,CAAM,YAAY,IAAI,CAAC,CAAA,EAAG,MAAK,IAAK,OAAA;AAC1D,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,CAAA,MAAA,EAAS,OAAO,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,CAAC,CAAA,CAAA;AAErE,EAAA,IAAI;AACF,IAAA,GAAA,CAAI,GAAA,EAAK,CAAC,WAAA,EAAa,UAAA,EAAY,MAAM,CAAC,CAAA;AAC1C,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,MAAM,CAAA,gBAAA,CAAkB,CAAA;AAAA,EACrD,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,QAAQ,QAAA,CAAS,gBAAgB,GAAG,MAAM,KAAA;AAAA,EAChF;AAEA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,uBAAuB,IAAI,CAAC,CAAA;AACzD,EAAA,IAAI,MAAA,KAAW,aAAA,IAAiB,MAAA,KAAW,QAAA,EAAU;AACnD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gEAAA,EAAmE,MAAA,IAAU,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EAC3G;AAEA,EAAA,MAAM,aAAA,GAAgBU,QAAAA,CAAS,GAAA,EAAK,SAAS,CAAA;AAC7C,EAAA,MAAM,cAAA,GAAiBA,SAAS,GAAA,EAAKb,OAAAA,CAAQ,SAAS,SAAA,EAAW,CAAA,OAAA,EAAU,OAAO,CAAA,GAAA,CAAK,CAAC,CAAA;AACxF,EAAA,MAAM,OAAA,GAAU,aAAa,OAAO,CAAA;AACpC,EAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAE9E,EAAA,MAAM,0BAAU,IAAI,GAAA,CAAI,CAAC,GAAG,OAAA,EAAS,aAAa,CAAC,CAAA;AACnD,EAAA,IAAIC,UAAAA,CAAWD,QAAQ,GAAA,EAAK,cAAc,CAAC,CAAA,EAAG,OAAA,CAAQ,IAAI,cAAc,CAAA;AAExE,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,EAAK,CAAC,MAAA,EAAQ,UAAA,EAAY,aAAa,CAAC,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,CAAE,OAAO,OAAO,CAAA;AACvF,EAAA,MAAM,eAAA,GAAkB,OAAO,MAAA,CAAO,CAAC,SAAS,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAC,CAAA;AAClE,EAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,gBAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACpF;AAEA,EAAA,MAAM,YAAA,GAAe,YAAA,CAAa,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAC,CAAA;AACzE,EAAA,MAAM,mBAAA,GAAsB,aAAa,MAAA,CAAO,CAAC,SAAS,IAAA,KAAS,aAAA,IAAiB,SAAS,cAAc,CAAA;AAC3G,EAAA,IAAI,mBAAA,CAAoB,WAAW,CAAA,EAAG;AACpC,IAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,YAAA,EAAc,CAAA,EAAG,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,EAAC,EAAE;AAAA,EAC3G;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,MAAM,YAAA,GAAe,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,YAAA,EAAc,aAAa,CAAC,CAAC,CAAA;AAClE,IAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,IAAA,EAAM,YAAA,EAAc,YAAA,CAAa,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,YAAA,EAAa;AAAA,EACvI;AAEA,EAAA,aAAA,CAAc;AAAA,IACZ,GAAA;AAAA,IACA,cAAc,MAAA,CAAO,aAAA;AAAA,IACrB,OAAA,EAAS,cAAc,IAAI,CAAA,QAAA,CAAA;AAAA,IAC3B,QAAA,EAAU,SAAA;AAAA,IACV,OAAA,EAAS,iBAAA,CAAkB,OAAA,EAAS,MAAM;AAAA,GAC3C,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,YAAA,CAAa,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAC,CAAA;AACzE,EAAA,GAAA,CAAI,KAAK,CAAC,KAAA,EAAO,IAAA,EAAM,GAAG,YAAY,CAAC,CAAA;AACvC,EAAA,GAAA,CAAI,GAAA,EAAK,CAAC,UAAA,EAAY,IAAA,EAAM,MAAM,CAAC,CAAA;AAEnC,EAAA,MAAM,OAAA,GAAU,QAAQ,SAAA,CAAU,KAAK,CAAC,CAAA,GAAA,EAAM,KAAK,MAAM,OAAO,CAAA,CAAA,CAAA;AAChE,EAAA,GAAA,CAAI,GAAA,EAAK,OAAA,CAAQ,KAAA,GAAQ,CAAC,QAAA,EAAU,SAAA,EAAW,IAAA,EAAM,OAAO,CAAA,GAAI,CAAC,QAAA,EAAU,IAAA,EAAM,OAAO,CAAC,CAAA;AACzF,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,GAAA,CAAI,KAAK,CAAC,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,MAAM,CAAC,CAAA;AACzC,IAAA,MAAA,GAAS,IAAA;AAAA,EACX;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,YAAY,GAAA,CAAI,GAAA,EAAK,CAAC,WAAA,EAAa,SAAA,EAAW,MAAM,CAAC,CAAA;AAAA,IACrD,cAAc,YAAA,CAAa,MAAA;AAAA,IAC3B,YAAA,EAAc,IAAA;AAAA,IACd,MAAA;AAAA,IACA,YAAA,EAAc;AAAA,GAChB;AACF;ACvIA,IAAM,eAAA,GAAkB,CAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAoCxB,IAAM,eAAA,GAAkB,CAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AA0BjB,SAAS,mBAAmB,GAAA,EAAa;AAC9C,EAAA,MAAM,iBAAA,GAAoBA,OAAAA,CAAQ,GAAA,EAAK,aAAA,EAAe,OAAO,CAAA;AAC7D,EAAA,MAAM,UAAA,GAAaA,OAAAA,CAAQ,GAAA,EAAK,MAAA,EAAQ,OAAO,CAAA;AAE/C,EAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,IAAA,OAAO,iEAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAACA,UAAAA,CAAW,iBAAiB,CAAA,EAAGG,UAAU,iBAAA,EAAmB,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAEpF,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,eAAA,EAAgB;AAAA,IAC/C,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,eAAA;AAAgB,GACjD;AAEA,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,QAAA,GAAWJ,OAAAA,CAAQ,iBAAA,EAAmB,IAAA,CAAK,IAAI,CAAA;AACrD,IAAA,MAAM,WAAA,GAAcA,OAAAA,CAAQ,UAAA,EAAY,IAAA,CAAK,IAAI,CAAA;AAGjD,IAAAK,cAAc,QAAA,EAAU,IAAA,CAAK,SAAS,EAAE,IAAA,EAAM,KAAO,CAAA;AAGrD,IAAA,IAAI,CAACJ,UAAAA,CAAW,WAAW,CAAA,EAAG;AAC5B,MAAAI,cAAc,WAAA,EAAa,IAAA,CAAK,SAAS,EAAE,IAAA,EAAM,KAAO,CAAA;AACxD,MAAA,SAAA,EAAA;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,MAAM,eAAA,GAAkBF,YAAAA,CAAa,WAAA,EAAa,OAAO,CAAA;AACzD,MAAA,IAAI,CAAC,eAAA,CAAgB,QAAA,CAAS,YAAY,CAAA,EAAG;AAC3C,QAAA,MAAM,aAAaH,OAAAA,CAAQ,UAAA,EAAY,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,OAAA,CAAS,CAAA;AAC5D,QAAAK,cAAc,UAAA,EAAY,eAAA,EAAiB,EAAE,IAAA,EAAM,KAAO,CAAA;AAE1D,QAAA,MAAM,OAAA,GAAU,CAAA;AAAA;AAAA,SAAA,EAEb,UAAU,CAAA;AAAA,MAAA,EACb,UAAU,CAAA;AAAA;AAAA,SAAA,EAEP,QAAQ,CAAA;AAAA,MAAA,EACX,QAAQ,CAAA;AAAA;AAAA,CAAA;AAGR,QAAAA,cAAc,WAAA,EAAa,OAAA,EAAS,EAAE,IAAA,EAAM,KAAO,CAAA;AACnD,QAAA,SAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,oBAAe,SAAS,CAAA;AAAA;AAAA;;AAAA,kCAAA,CAAA;AAKjC;AAEO,SAAS,qBAAqB,GAAA,EAAa;AAChD,EAAA,MAAM,UAAA,GAAaL,OAAAA,CAAQ,GAAA,EAAK,MAAA,EAAQ,OAAO,CAAA;AAC/C,EAAA,MAAM,iBAAA,GAAoBA,OAAAA,CAAQ,GAAA,EAAK,aAAA,EAAe,OAAO,CAAA;AAC7D,EAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG,OAAO,gCAAA;AAEpC,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,YAAA,EAAc,YAAY,CAAA,EAAG;AAC/C,IAAA,MAAM,WAAA,GAAcD,OAAAA,CAAQ,UAAA,EAAY,IAAI,CAAA;AAC5C,IAAA,MAAM,WAAA,GAAcA,OAAAA,CAAQ,iBAAA,EAAmB,IAAI,CAAA;AACnD,IAAA,MAAM,UAAA,GAAaA,OAAAA,CAAQ,UAAA,EAAY,IAAA,GAAO,SAAS,CAAA;AACvD,IAAA,IAAIC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,MAAAI,aAAAA,CAAc,aAAaF,YAAAA,CAAa,UAAU,GAAG,EAAE,IAAA,EAAM,KAAO,CAAA;AACpE,MAAA,UAAA,CAAW,UAAU,CAAA;AACrB,MAAA,OAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAWF,UAAAA,CAAW,WAAW,CAAA,IAAKE,YAAAA,CAAa,aAAa,OAAO,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA,EAAG;AAC/F,MAAA,UAAA,CAAW,WAAW,CAAA;AACtB,MAAA,OAAA,EAAA;AAAA,IACF;AACA,IAAA,IAAIF,UAAAA,CAAW,WAAW,CAAA,EAAG,UAAA,CAAW,WAAW,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,oBAAe,OAAA,GAAU,qDAAA;AAClC;AAEO,SAAS,gBAAgB,GAAA,EAAa;AAC3C,EAAA,MAAM,UAAA,GAAaD,OAAAA,CAAQ,GAAA,EAAK,MAAA,EAAQ,OAAO,CAAA;AAC/C,EAAA,MAAM,iBAAA,GAAoBA,OAAAA,CAAQ,GAAA,EAAK,aAAA,EAAe,OAAO,CAAA;AAE7D,EAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,IAAA,OAAO,gCAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,YAAA,EAAc,YAAA,EAAc,YAAY,aAAa,CAAA;AACpE,EAAA,MAAM,MAAA,GAAmB,CAAC,YAAY,CAAA;AAEtC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,OAAA,GAAUD,OAAAA,CAAQ,UAAA,EAAY,IAAI,CAAA;AACxC,IAAA,MAAM,MAAA,GAASA,OAAAA,CAAQ,iBAAA,EAAmB,IAAI,CAAA;AAC9C,IAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,MAAA,MAAM,IAAA,GAAOA,UAAAA,CAAW,MAAM,CAAA,GAAI,eAAA,GAAkB,EAAA;AACpD,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,IAAA,EAAO,IAAI,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAAA,IAClC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,IAAA,EAAO,IAAI,CAAA,gBAAA,CAAkB,CAAA;AAAA,IAC3C;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,KAAK,IAAI,CAAA;AACzB;ACpKA,IAAM,QAAA,GAAW,2DAAA;AACjB,IAAM,UAAA,GAAa,6DAAA;AACnB,IAAM,YAAA,GAAe,+DAAA;AACrB,IAAM,QAAA,GAAW,2DAAA;AAEjB,SAAS,cAAA,GAAyB;AAChC,EAAA,MAAM,QAAA,GAAW,wBAAA;AACjB,EAAA,MAAM,GAAA,GAAM,mBAAA;AACZ,EAAA,OAAO,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,YAAA,EAYK,QAAQ,IAAI,GAAG;AAAA;AAAA,CAAA;AAG7B;AAEA,SAAS,qBAAqB,GAAA,EAAqB;AACjD,EAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAME,YAAAA,CAAaH,QAAQ,GAAA,EAAK,cAAc,CAAA,EAAG,OAAO,CAAC,CAAA;AAI1E,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,IAAW,EAAC;AAChC,EAAA,MAAM,WAAA,GAAc,IAAI,OAAA,EAAS,IAAA,EAAM,MAAM,KAAK,CAAA,GAAI,CAAC,CAAA,IAAK,IAAA;AAC5D,EAAA,IAAI,cAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,QAAA;AAEJ,EAAA,IAAIC,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,gBAAgB,CAAC,CAAA,EAAG;AAC9C,IAAA,cAAA,GAAiB,MAAA;AACjB,IAAA,OAAA,GAAU,gCAAA;AACV,IAAA,QAAA,GAAW,gBAAA;AAAA,EACb,WAAWC,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,WAAW,CAAC,CAAA,EAAG;AAChD,IAAA,cAAA,GAAiB,MAAA;AACjB,IAAA,OAAA,GAAU,0BAAA;AACV,IAAA,QAAA,GAAW,WAAA;AAAA,EACb,WAAWC,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,mBAAmB,CAAC,CAAA,EAAG;AACxD,IAAA,cAAA,GAAiB,KAAA;AACjB,IAAA,OAAA,GAAU,QAAA;AACV,IAAA,QAAA,GAAW,mBAAA;AAAA,EACb,CAAA,MAAO;AACL,IAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,EACrF;AAEA,EAAA,MAAMc,IAAAA,GAAM,CAAC,IAAA,KAAiB,cAAA,KAAmB,KAAA,GAAQ,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,GAAK,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AACtG,EAAA,MAAM,MAAA,GAAS,CAAC,OAAA,EAAS,WAAA,EAAa,QAAQ,MAAM,CAAA,CAAE,OAAO,CAAC,IAAA,KAAS,QAAQ,IAAI,CAAC,EACjF,GAAA,CAAI,CAAC,SAAS,CAAA,aAAA,EAAgBA,IAAAA,CAAI,IAAI,CAAC,CAAA,CAAE,CAAA;AAC5C,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,MAAA,CAAO,KAAK,sEAAsE,CAAA;AAC3G,EAAA,MAAM,QAAQ,cAAA,KAAmB,KAAA,GAAQ,EAAC,GAAI,CAAC,8BAA8B,CAAA;AAC7E,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,OAAO,CAAA,CAAA,EAAI,GAAG,MAAM,CAAA;AAE/C,EAAA,OAAO,gBAAe,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,EAMZ,QAAQ;AAAA,cAAA,EACR,UAAU;AAAA;AAAA,yBAAA,EAEC,WAAW,CAAA;AAAA,kBAAA,EAClB,cAAc,CAAA;AAAA,kCAAA,EACE,QAAQ,CAAA;AAAA,EAC1C,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAA;AAElB;AAEA,SAAS,uBAAuB,GAAA,EAAqB;AACnD,EAAA,MAAM,WAAA,GAAcd,OAAAA,CAAQ,GAAA,EAAK,iBAAiB,CAAA;AAClD,EAAA,MAAM,OAAA,GAAUC,WAAW,WAAW,CAAA,GAAIE,aAAa,WAAA,EAAa,OAAO,CAAA,CAAE,IAAA,EAAK,GAAI,MAAA;AACtF,EAAA,MAAM,OAAA,GAAUF,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,kBAAkB,CAAC,CAAA,GACvD,2CAAA,GACAC,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,gBAAgB,CAAC,IACvC,yBAAA,GACA,sDAAA;AACN,EAAA,OAAO,gBAAe,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,EAMZ,QAAQ;AAAA,cAAA,EACR,YAAY;AAAA;AAAA,2BAAA,EAEC,OAAO,CAAA;AAAA;AAAA,aAAA,EAErB,OAAO;AAAA;AAAA,CAAA;AAGtB;AAEA,SAAS,mBAAmB,GAAA,EAAqB;AAC/C,EAAA,MAAM,QAAQG,YAAAA,CAAaH,OAAAA,CAAQ,GAAA,EAAK,QAAQ,GAAG,OAAO,CAAA;AAC1D,EAAA,MAAM,UAAU,KAAA,CAAM,KAAA,CAAM,mBAAmB,CAAA,GAAI,CAAC,CAAA,IAAK,MAAA;AACzD,EAAA,OAAO,gBAAe,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,EAMZ,QAAQ;AAAA,cAAA,EACR,QAAQ;AAAA;AAAA,uBAAA,EAEC,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAMhC;AAEO,SAAS,iBAAA,CAAkB,GAAA,EAAa,OAAA,GAA+B,EAAC,EAAG;AAChF,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,WAAA,GAAcA,OAAAA,CAAQ,GAAA,EAAK,SAAA,EAAW,WAAW,CAAA;AACvD,EAAA,MAAM,YAAA,GAAeA,OAAAA,CAAQ,WAAA,EAAa,QAAQ,CAAA;AAClD,EAAA,IAAIC,UAAAA,CAAW,YAAY,CAAA,IAAK,CAAC,QAAQ,KAAA,EAAO;AAC9C,IAAA,OAAO,iCAAiC,YAAY,CAAA,gDAAA,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,CAACA,UAAAA,CAAW,WAAW,CAAA,EAAGG,UAAU,WAAA,EAAa,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAExE,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,MAAA;AAC9B,EAAA,MAAM,WAAW,KAAA,KAAU,QAAA,IAAY,OAAO,gBAAA,KAAqB,QAAA,GAC/D,uBAAuB,GAAG,CAAA,GAC1B,KAAA,KAAU,IAAA,IAAQ,OAAO,gBAAA,KAAqB,IAAA,GAC5C,mBAAmB,GAAG,CAAA,GACtB,qBAAqB,GAAG,CAAA;AAC9B,EAAAC,aAAAA,CAAc,YAAA,EAAc,QAAA,EAAU,OAAO,CAAA;AAC7C,EAAA,OAAO,CAAA;;AAAA,OAAA,EAEA,KAAK;AAAA,kGAAA,CAAA;AAEd;ACrIA,SAAS,GAAA,CAAI,GAAA,EAAa,OAAA,EAAiB,IAAA,EAA2B;AACpE,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,EAAE,KAAK,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,IAAA,EAAS,CAAA;AACpF,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU,EAAA,EAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU,EAAA,EAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO;AAC3F;AAEA,SAAS,WAAW,GAAA,EAAqB;AACvC,EAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAMF,YAAAA,CAAaH,QAAQ,GAAA,EAAK,cAAc,CAAA,EAAG,OAAO,CAAC,CAAA;AAC1E,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,GAAG,GAAA,CAAI,YAAA,EAAc,GAAG,GAAA,CAAI,eAAA,EAAiB,CAAA,CAAE,MAAA;AAC3E,EAAA,MAAM,WAAW,GAAA,CAAI,GAAA,EAAK,OAAO,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AACvD,EAAA,MAAM,QAAQ,GAAA,CAAI,GAAA,EAAK,OAAO,CAAC,OAAA,EAAS,QAAQ,CAAC,CAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,0BAAA,CAAA,EAA8B,CAAA,2BAAA,EAA8B,KAAK,CAAA,CAAE,CAAA;AAElF,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,UAAU,IAAI,CAAA;AACjD,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACrC,IAAA,KAAA,CAAM,KAAK,OAAA,CAAQ,MAAA,GAAS,sBAAsB,OAAA,CAAQ,MAAM,OAAO,yBAAyB,CAAA;AAChG,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,MAAM,CAAA,IAAA,EAAO,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAA,IAAW,SAAS,WAAM,KAAA,CAAM,MAAA,IAAU,SAAS,CAAA,CAAE,CAAC,CAAA;AAAA,EACxI,CAAA,CAAA,MAAQ;AACN,IAAA,KAAA,CAAM,KAAK,oEAAoE,CAAA;AAAA,EACjF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,UAAU,IAAI,CAAA;AAC9C,IAAA,MAAM,eAAA,GAAkB,OAAO,QAAA,EAAU,eAAA;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK,kBACP,CAAA,uBAAA,EAA0B,MAAA,CAAO,QAAQ,eAAe,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GAC7G,sCAAsC,CAAA;AAAA,EAC5C,CAAA,CAAA,MAAQ;AACN,IAAA,KAAA,CAAM,KAAK,oFAAoF,CAAA;AAAA,EACjG;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,EAAK,SAAA,EAAW,CAAC,MAAM,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,eAAe,CAAC,CAAA;AACvF,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,IAAA,EAAM,OAAO,6EAAA;AACnC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AACxC,IAAA,OAAO;AAAA,MAAC,2BAAA;AAAA,MAA6B,CAAA,mBAAA,EAAsB,QAAQ,MAAM,CAAA,EAAA,CAAA;AAAA,MACvE,GAAG,OAAA,CAAQ,KAAA,CAAM,GAAG,EAAE,CAAA,CAAE,IAAI,CAAC,KAAA,KAAU,CAAA,IAAA,EAAO,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,QAAA,EAAM,KAAA,CAAM,cAAc,CAAA,CAAE,CAAA;AAAA,MACtG;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,0FAAA;AAAA,EACT;AACF;AAEA,SAAS,SAAS,GAAA,EAAqB;AACrC,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,EAAK,IAAA,EAAM,CAAC,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,KAAK,CAAC,CAAA;AACzD,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,gEAAA;AAChC,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA;AAChF,EAAA,OAAO;AAAA,IAAC,uBAAA;AAAA,IAAyB,CAAA,kBAAA,EAAqB,SAAS,MAAM,CAAA,EAAA,CAAA;AAAA,IACnE,GAAG,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAA;AAAA,IACpD;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACb;AAEO,SAAS,iBAAiB,GAAA,EAAqB;AACpD,EAAA,IAAIC,UAAAA,CAAWD,QAAQ,GAAA,EAAK,cAAc,CAAC,CAAA,EAAG,OAAO,WAAW,GAAG,CAAA;AACnE,EAAA,IAAIC,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,gBAAgB,CAAC,CAAA,IAAKC,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,kBAAkB,CAAC,CAAA,EAAG,OAAO,aAAa,GAAG,CAAA;AACvH,EAAA,IAAIC,UAAAA,CAAWD,QAAQ,GAAA,EAAK,QAAQ,CAAC,CAAA,EAAG,OAAO,SAAS,GAAG,CAAA;AAC3D,EAAA,OAAO,oGAAA;AACT;AC7DA,SAAS,cAAc,OAAA,EAA+B;AACpD,EAAA,MAAM,YAA0B,EAAC;AACjC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,KAAK,QAAA,CAAS,wBAAwB,KAAK,IAAA,CAAK,QAAA,CAAS,wBAAwB,CAAA,EAAG;AACtF,MAAA,QAAA,GAAW,IAAA;AACX,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA,IAAY,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EAAG;AACtC,MAAA,QAAA,GAAW,KAAA;AACX,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA,IAAY,IAAA,CAAK,UAAA,CAAW,GAAG,KAAK,CAAC,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,IAAK,CAAC,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EAAG;AAC3F,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA;AAC9D,MAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AACrB,QAAA,MAAM,GAAA,GAAM,QAAA,CAAS,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AACjC,QAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG;AACf,UAAA,SAAA,CAAU,IAAA,CAAK;AAAA,YACb,MAAA,EAAQ,GAAA;AAAA,YACR,QAAA,EAAU,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAAA,YACtB,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAAA,YACnB,QAAA,EAAU,KAAA,CAAM,CAAC,CAAA,IAAK;AAAA,WACvB,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,SAAA,EAAmB,QAAA,EAAkB,UAAA,EAAoB,SAAA,EAAiC;AAClH,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;AAE3C,EAAA,IAAI,IAAA,GAAO,CAAA;;AAAA,CAAA;AACX,EAAA,IAAA,IAAQ,aAAa,IAAI,CAAA;AAAA,CAAA;AAEzB,EAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,IAAA,MAAM,QAAA,GAAW,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,MAAM,KAAK,CAAA;AAC/C,IAAA,IAAA,IAAQ,CAAA,YAAA,EAAe,CAAA,CAAE,KAAA,IAAS,eAAe;AAAA,CAAA;AACjD,IAAA,IAAA,IAAQ,CAAA,eAAA,EAAkB,CAAA,CAAE,QAAA,IAAY,eAAe;AAAA,CAAA;AACvD,IAAA,IAAA,IAAQ,CAAA,kCAAA,EAAqC,CAAA,CAAE,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAA;;AAAA,CAAA;AAAA,EACpE;AAEA,EAAA,IAAA,IAAQ,CAAA;AAAA,CAAA;AACR,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,sBAAA,CAAuB,GAAA,EAAa,IAAA,EAAc,OAAA,EAAkB;AAClF,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,MAAA,EAAQ,IAAI,CAAA;AAChD,EAAA,MAAM,UAAA,GAAaA,OAAAA,CAAQ,OAAA,EAAS,SAAS,CAAA;AAE7C,EAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,IAAA,OAAO,qCAAqC,IAAI,CAAA,EAAA,CAAA;AAAA,EAClD;AAEA,EAAA,MAAM,QAAA,GAAWS,WAAAA,CAAY,UAAU,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA;AACxE,EAAA,MAAM,cAAA,GAAiB,OAAA,GACnB,QAAA,CAAS,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,OAAO,CAAC,CAAA,GAC5C,QAAA;AAEJ,EAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,IAAA,OAAO,CAAA,8CAAA,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,QAAQ,cAAA,EAAgB;AACjC,IAAA,MAAM,UAAUP,YAAAA,CAAaH,OAAAA,CAAQ,UAAA,EAAY,IAAI,GAAG,OAAO,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,cAAc,CAAA;AAC5C,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,YAAY,CAAA;AAC7C,IAAA,MAAM,YAAA,GAAe,OAAA,GAAU,CAAC,CAAA,EAAG,MAAK,IAAK,SAAA;AAC7C,IAAA,MAAM,UAAA,GAAa,UAAA,GAAa,CAAC,CAAA,EAAG,MAAK,IAAK,IAAA;AAE9C,IAAA,MAAM,SAAA,GAAY,cAAc,OAAO,CAAA;AAEvC,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,IAAA,EAAO,YAAY,CAAA,+BAAA,CAAiC,CAAA;AACjE,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,IAAA,EAAM,YAAA,EAAc,YAAY,SAAS,CAAA;AAC3E,IAAA,MAAM,YAAA,GAAe,CAAA,EAAG,YAAA,CAAa,WAAA,EAAa,CAAA,QAAA,CAAA;AAClD,IAAA,MAAM,QAAA,GAAWA,OAAAA,CAAQ,GAAA,EAAK,KAAA,EAAO,aAAa,YAAY,CAAA;AAC9D,IAAA,MAAM,OAAA,GAAUA,OAAAA,CAAQ,GAAA,EAAK,KAAA,EAAO,WAAW,CAAA;AAE/C,IAAA,IAAI,CAACC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACxB,MAAAG,SAAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IACxC;AAEA,IAAAC,aAAAA,CAAc,QAAA,EAAU,QAAA,EAAU,OAAO,CAAA;AAEzC,IAAA,OAAA,CAAQ,IAAA,CAAK,OAAO,YAAY,CAAA,EAAA,EAAK,UAAU,MAAM,CAAA,kBAAA,EAAgB,QAAQ,CAAA,CAAE,CAAA;AAAA,EACjF;AAEA,EAAA,IAAI,MAAA,GAAS,8BAA8B,IAAI,CAAA;AAAA,CAAA;AAC/C,EAAA,MAAA,IAAU,OAAA,CAAQ,KAAK,IAAI,CAAA;AAE3B,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAA,IAAU;;AAAA,UAAA,EAAiB,QAAQ,MAAM,CAAA,8CAAA,CAAA;AAAA,EAC3C;AAEA,EAAA,OAAO,MAAA;AACT;ACjHO,SAAS,gBAAgB,GAAA,EAAqB;AACnD,EAAA,MAAM,cAAA,GAAiBL,OAAAA,CAAQ,GAAA,EAAK,cAAc,CAAA;AAClD,EAAA,MAAM,OAAA,GAAUA,OAAAA,CAAQ,GAAA,EAAK,MAAM,CAAA;AAEnC,EAAA,IAAI,CAACC,UAAAA,CAAW,cAAc,CAAA,EAAG;AAC/B,IAAA,OAAO,sEAAA;AAAA,EACT;AAEA,EAAA,IAAIA,UAAAA,CAAW,OAAO,CAAA,EAAG;AAEvB,IAAA,MAAM,WAAA,GAAc,aAAa,cAAc,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAc,aAAa,OAAO,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,YAAY,MAAA,CAAO,CAAC,MAAM,CAAC,WAAA,CAAY,QAAA,CAAS,CAAC,CAAC,CAAA;AAElE,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,4DAAA;AAAA,IACT;AAEA,IAAA,OAAO,CAAA,wBAAA,EAA2B,QAAQ,MAAM,CAAA;AAAA,EAAkB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,EACtF;AAGA,EAAA,MAAM,OAAA,GAAUE,YAAAA,CAAa,cAAA,EAAgB,OAAO,CAAA;AACpD,EAAAE,aAAAA,CAAc,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAEvC,EAAA,OAAO,uCAAuC,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,MAAU,CAAC,CAAA,CAAE,WAAW,GAAG,CAAC,EAAE,MAAM,CAAA,WAAA,CAAA;AACxH;AAEO,SAAS,eAAe,GAAA,EAAqB;AAClD,EAAA,MAAM,OAAA,GAAUL,OAAAA,CAAQ,GAAA,EAAK,MAAM,CAAA;AAEnC,EAAA,IAAI,CAACC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACxB,IAAA,OAAO,qBAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAUE,YAAAA,CAAa,OAAA,EAAS,OAAO,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,EAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAK,IAAK,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA;AAC9E,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5B,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA;AAC3B,IAAA,IAAI,KAAA,KAAU,EAAA,EAAI,OAAO,CAAA,IAAA,EAAO,CAAC,CAAA,CAAA;AACjC,IAAA,MAAM,MAAM,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,KAAK,EAAE,IAAA,EAAK;AACnC,IAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,IAAA,GAAO,MAAA,GAAS,CAAA;AACjD,IAAA,OAAO,CAAA,IAAA,EAAO,GAAG,CAAA,EAAA,EAAK,KAAA,GAAQ,QAAQ,OAAO,CAAA,CAAA;AAAA,EAC/C,CAAC,CAAA;AAED,EAAA,OAAO,CAAA,uBAAA,EAA0B,KAAK,MAAM,CAAA;AAAA,EAAO,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AACpE;AAEA,SAAS,aAAa,IAAA,EAAwB;AAC5C,EAAA,MAAM,OAAA,GAAUA,YAAAA,CAAa,IAAA,EAAM,OAAO,CAAA;AAC1C,EAAA,OAAO,QACJ,KAAA,CAAM,IAAI,EACV,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,EAAK,IAAK,CAAC,EAAE,UAAA,CAAW,GAAG,CAAC,CAAA,CAC5C,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA;AAC3B,IAAA,OAAO,KAAA,GAAQ,IAAI,CAAA,CAAE,KAAA,CAAM,GAAG,KAAK,CAAA,CAAE,MAAK,GAAI,EAAA;AAAA,EAChD,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA;AACnB;ACzDA,SAAS,uBAAuB,SAAA,EAA2B;AACzD,EAAA,OAAO,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA,EAmBP,cAAc,MAAA,GAAS,CAAA;AAAA,wCAAA,CAAA,GACmB,EAAE;;AAAA,OAAA,EAErC,SAAA,KAAc,MAAA,GAAS,MAAA,GAAS,MAAM;;AAAA;;AAAA,IAAA,EAIzC,cAAc,MAAA,GAAS,kBAAA,GAAqB,SAAA,KAAc,SAAA,GAAY,8BAA8B,4BAA4B;AAAA,CAAA;AAEtI;AAEA,SAAS,wBAAA,GAAmC;AAC1C,EAAA,OAAO,CAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;AAgBT;AAEA,SAAS,oBAAA,GAA+B;AACtC,EAAA,OAAO,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAcT;AAEO,SAAS,wBAAwB,GAAA,EAAqB;AAC3D,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,cAAA,GAAiBH,OAAAA,CAAQ,GAAA,EAAK,YAAY,CAAA;AAEhD,EAAA,IAAIC,UAAAA,CAAW,cAAc,CAAA,EAAG;AAC9B,IAAA,OAAO,CAAA,yDAAA,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,MAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,OAAO,SAAA,IAAa,EAAA;AAEtC,EAAA,IAAI,UAAA;AAEJ,EAAA,IAAI,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,gBAAA,KAAqB,QAAA,EAAU;AAC9D,IAAA,UAAA,GAAa,wBAAA,EAAyB;AAAA,EACxC,CAAA,MAAA,IAAW,KAAA,KAAU,IAAA,IAAQ,MAAA,CAAO,qBAAqB,IAAA,EAAM;AAC7D,IAAA,UAAA,GAAa,oBAAA,EAAqB;AAAA,EACpC,CAAA,MAAO;AACL,IAAA,UAAA,GAAa,uBAAuB,SAAS,CAAA;AAAA,EAC/C;AAEA,EAAAI,aAAAA,CAAc,cAAA,EAAgB,UAAA,EAAY,OAAO,CAAA;AAEjD,EAAA,OAAO,CAAA;;AAAA,sBAAA,EAEe,KAAK,CAAA,EAAG,SAAA,GAAY,CAAA,EAAA,EAAK,SAAS,MAAM,EAAE,CAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA,uDAAA,CAAA;AAQlE;AAEO,SAAS,0BAA0B,GAAA,EAAqB;AAC7D,EAAA,MAAM,gBAAA,GAAmBL,OAAAA,CAAQ,GAAA,EAAK,eAAe,CAAA;AAErD,EAAA,IAAIC,UAAAA,CAAW,gBAAgB,CAAA,EAAG;AAChC,IAAA,OAAO,CAAA,6BAAA,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWhB,EAAAI,aAAAA,CAAc,gBAAA,EAAkB,OAAA,EAAS,OAAO,CAAA;AAChD,EAAA,OAAO,CAAA,+BAAA,CAAA;AACT;AC1HA,IAAM,SAAA,GAAY,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA2BlB,IAAM,gBAAA,GAAmB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAqBzB,SAAS,SAAA,GAAoB;AAC3B,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAMF,YAAAA,CAAa,cAAA,EAAgB,OAAO,CAAC,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,IAAW,EAAC;AAChC,IAAA,IAAI,OAAA,CAAQ,OAAO,OAAO,uBAAA;AAC1B,IAAA,IAAI,OAAA,CAAQ,KAAK,OAAO,uBAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AAAA,EAAC;AACT,EAAA,OAAO,uBAAA;AACT;AAEO,SAAS,gBAAA,CAAiB,KAAa,IAAA,EAAsB;AAClE,EAAA,MAAM,OAAA,GAAUH,OAAAA,CAAQ,GAAA,EAAK,YAAY,CAAA;AACzC,EAAA,IAAI,CAACC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACxB,IAAAG,SAAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACxC;AAEA,EAAA,MAAM,MAAM,SAAA,EAAU;AAEtB,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,CAAC,IAAA,EAAM;AAC1B,IAAA,MAAM,UAAA,GAAaJ,OAAAA,CAAQ,OAAA,EAAS,cAAc,CAAA;AAClD,IAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,MAAAI,aAAAA,CAAc,UAAA,EAAY,SAAA,EAAW,OAAO,CAAA;AAAA,IAC9C;AAEA,IAAA,OAAO,CAAA;;AAAA;AAAA;AAAA,6CAAA,EAIoC,GAAG;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAA,CAAA;AAAA,EAQhD;AAEA,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,MAAM,UAAA,GAAaL,OAAAA,CAAQ,OAAA,EAAS,eAAe,CAAA;AACnD,IAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,MAAAI,aAAAA,CAAc,UAAA,EAAY,gBAAA,EAAkB,OAAO,CAAA;AAAA,IACrD;AAEA,IAAA,OAAO,CAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,YAAA,EASG,GAAG,CAAA,CAAA;AAAA,EACf;AAEA,EAAA,OAAO,qBAAqB,IAAI,CAAA,0BAAA,CAAA;AAClC;AAEO,SAAS,cAAA,CAAe,KAAa,IAAA,EAAsB;AAChE,EAAA,MAAM,OAAA,GAAUL,OAAAA,CAAQ,GAAA,EAAK,YAAY,CAAA;AAEzC,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,MAAM,UAAA,GAAaA,OAAAA,CAAQ,OAAA,EAAS,cAAc,CAAA;AAClD,IAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,MAAA,OAAO,2DAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAAU,QAAAA,CAAS,UAAA,EAAY,EAAE,QAAA,EAAU,SAAS,CAAA;AAAA,IAC5C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,+CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAASA,QAAAA,CAAS,CAAA,OAAA,EAAU,UAAU,CAAA,aAAA,CAAA,EAAiB;AAAA,QAC3D,GAAA;AAAA,QACA,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS;AAAA,OACV,EAAE,IAAA,EAAK;AACR,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,GAAA,GAAM,CAAA;AACZ,MAAA,OAAO,CAAA,eAAA,EAAkB,IAAI,OAAO,CAAA,CAAA;AAAA,IACtC;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,MAAM,UAAA,GAAaX,OAAAA,CAAQ,OAAA,EAAS,eAAe,CAAA;AACnD,IAAA,IAAI,CAACC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,MAAA,OAAO,yEAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAASU,QAAAA,CAAS,CAAA,kBAAA,EAAqB,UAAU,CAAA,KAAA,CAAA,EAAS;AAAA,QAC9D,GAAA,EAAK,OAAA;AAAA,QACL,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS;AAAA,OACV,EAAE,IAAA,EAAK;AACR,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,CAAA,EAAG;AACV,MAAA,MAAM,GAAA,GAAM,CAAA;AACZ,MAAA,OAAO,CAAA,sBAAA,EAAyB,IAAI,OAAO,CAAA,CAAA;AAAA,IAC7C;AAAA,EACF;AAEA,EAAA,OAAO,qBAAqB,IAAI,CAAA,CAAA;AAClC;ACrJA,IAAM,aAAA,GAAwC;AAAA,EAC5C,QAAA,EAAU,UAAA;AAAA,EACV,WAAA,EAAa,aAAA;AAAA,EACb,cAAA,EAAgB,gBAAA;AAAA,EAChB,MAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAY,YAAA;AAAA,EACZ,aAAA,EAAe;AACjB,CAAA;AACA,IAAM,cAAc,CAAC,UAAA,EAAY,eAAe,gBAAA,EAAkB,QAAA,EAAU,cAAc,eAAe,CAAA;AACzG,IAAM,YAAA,GAAuC;AAAA,EAC3C,iBAAA,EAAmB,UAAA;AAAA,EAAY,iBAAA,EAAmB,UAAA;AAAA,EAAY,yBAAA,EAA2B,UAAA;AAAA,EACzF,iBAAA,EAAmB,UAAA;AAAA,EAAY,kBAAA,EAAoB,aAAA;AAAA,EAAe,sBAAA,EAAwB,aAAA;AAAA,EAC1F,gBAAA,EAAkB,gBAAA;AAAA,EAAkB,oBAAA,EAAsB,gBAAA;AAAA,EAAkB,sBAAA,EAAwB,gBAAA;AAAA,EACpG,iBAAA,EAAmB,gBAAA;AAAA,EAAkB,oBAAA,EAAsB,gBAAA;AAAA,EAAkB,oBAAA,EAAsB,gBAAA;AAAA,EACnG,qBAAA,EAAuB,gBAAA;AAAA,EAAkB,mBAAA,EAAqB,QAAA;AAAA,EAAU,mBAAA,EAAqB,QAAA;AAAA,EAC7F,oBAAA,EAAsB,YAAA;AAAA,EAAc,qBAAA,EAAuB,YAAA;AAAA,EAAc,kBAAA,EAAoB,YAAA;AAAA,EAC7F,iBAAA,EAAmB,YAAA;AAAA,EAAc,eAAA,EAAiB,YAAA;AAAA,EAAc,iBAAA,EAAmB,YAAA;AAAA,EACnF,gBAAA,EAAkB,YAAA;AAAA,EAAc,mBAAA,EAAqB,YAAA;AAAA,EAAc,iBAAA,EAAmB,YAAA;AAAA,EACtF,0BAAA,EAA4B;AAC9B,CAAA;AAEA,SAAS,UAAA,CAAW,UAAkB,UAAA,EAA+B;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAUR,YAAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,0BAA0B,CAAA;AACtD,IAAA,MAAM,cAAc,KAAA,GAASD,IAAAA,CAAK,MAAM,CAAC,CAAC,IAAgC,EAAC;AAC3E,IAAA,MAAM,OAAO,OAAO,WAAA,EAAa,IAAA,KAAS,QAAA,GAAW,YAAY,IAAA,GAAO,UAAA;AACxE,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,aAAa,OAAO,WAAA,EAAa,WAAA,KAAgB,QAAA,GAAW,YAAY,WAAA,GAAc,EAAA;AAAA,MACtF,KAAA,EAAO,YAAA,CAAa,IAAI,CAAA,IAAK;AAAA,KAC/B;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,MAAM,UAAA,EAAY,WAAA,EAAa,IAAI,KAAA,EAAO,YAAA,CAAa,UAAU,CAAA,IAAK,YAAA,EAAa;AAAA,EAC9F;AACF;AAEA,SAAS,aAAa,GAAA,EAA0B;AAC9C,EAAA,MAAM,SAAA,GAAYF,OAAAA,CAAQ,GAAA,EAAK,SAAA,EAAW,QAAQ,CAAA;AAClD,EAAA,MAAM,OAAA,GAAUA,OAAAA,CAAQ,GAAA,EAAK,QAAQ,CAAA;AACrC,EAAA,MAAM,SAAA,GAAYC,UAAAA,CAAW,SAAS,CAAA,GAAI,SAAA,GAAY,OAAA;AACtD,EAAA,IAAI,CAACA,UAAAA,CAAW,SAAS,CAAA,SAAU,EAAC;AACpC,EAAA,OAAOS,WAAAA,CAAY,SAAA,EAAW,EAAE,aAAA,EAAe,MAAM,CAAA,CAClD,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,WAAA,EAAY,IAAKT,UAAAA,CAAWD,QAAQ,SAAA,EAAW,KAAA,CAAM,IAAA,EAAM,UAAU,CAAC,CAAC,CAAA,CAC/F,GAAA,CAAI,CAAC,KAAA,KAAU,UAAA,CAAWA,OAAAA,CAAQ,SAAA,EAAW,MAAM,IAAA,EAAM,UAAU,CAAA,EAAG,KAAA,CAAM,IAAI,CAAC,CAAA;AACtF;AAEA,SAAS,QAAQ,IAAA,EAAwB;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAA;AAC7C,EAAA,OAAO,CAAC,MAAM,KAAA,EAAO,CAAA,WAAA,EAAc,KAAK,CAAA,CAAA,EAAI,CAAA,WAAA,EAAc,KAAK,CAAA,CAAE,CAAA;AACnE;AAEA,SAAS,SAAA,CAAU,QAAqB,KAAA,EAAsC;AAC5E,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AAC5C,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,OAAA,CAAQ,MAAM,IAAI,CAAA,CAAE,QAAA,CAAS,UAAU,CAAC,CAAA;AACxE;AAEO,SAAS,WAAA,CAAY,GAAA,EAAa,SAAA,EAAoB,WAAA,EAAsB,IAAA,EAAuB;AACxG,EAAA,MAAM,MAAA,GAAS,aAAa,GAAG,CAAA;AAC/B,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,6CAAA;AAEhC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,MAAA,EAAQ,SAAS,CAAA;AACzC,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,CAAA,OAAA,EAAU,SAAS,CAAA,oDAAA,CAAA;AACtC,IAAA,MAAM,YAAY,WAAA,CAAY,WAAA,CAAY,QAAQ,KAAA,CAAM,KAAK,IAAI,CAAC,CAAA;AAClE,IAAA,MAAM,UAAA,GAAa,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,CAAC,SAAA,KAAc,SAAA,CAAU,KAAA,KAAU,SAAS,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,IAAI,EAAC;AAC1G,IAAA,MAAMe,SAAQ,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,IAAI,IAAI,KAAA,CAAM,WAAA,EAAa,EAAA,EAAI,CAAA,OAAA,EAAU,cAAc,KAAA,CAAM,KAAK,CAAA,IAAK,KAAA,CAAM,KAAK,CAAA,CAAE,CAAA;AAC/G,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAAA,OAAM,IAAA,CAAK,EAAA,EAAI,eAAe,aAAA,CAAc,SAAS,CAAC,CAAA,EAAA,CAAI,CAAA;AAC1D,MAAAA,MAAAA,CAAM,IAAA,CAAK,GAAG,UAAA,CAAW,IAAI,CAAC,SAAA,KAAc,CAAA,IAAA,EAAO,SAAA,CAAU,IAAI,CAAA,EAAA,EAAK,SAAA,CAAU,WAAW,EAAE,CAAC,CAAA;AAAA,IAChG;AACA,IAAA,OAAOA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,MAAA,EAAQ,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,CAAA,OAAA,EAAU,IAAI,CAAA,YAAA,CAAA;AACjC,IAAA,MAAM,YAAY,WAAA,CAAY,WAAA,CAAY,QAAQ,KAAA,CAAM,KAAK,IAAI,CAAC,CAAA;AAClE,IAAA,IAAI,CAAC,SAAA,EAAW,OAAO,CAAA,mBAAA,EAAsB,MAAM,IAAI,CAAA,EAAA,CAAA;AACvD,IAAA,OAAO;AAAA,MAAC,CAAA,MAAA,EAAS,MAAM,IAAI,CAAA,WAAA,CAAA;AAAA,MACzB,GAAG,OAAO,MAAA,CAAO,CAAC,cAAc,SAAA,CAAU,KAAA,KAAU,SAAS,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACtE,GAAA,CAAI,CAAC,SAAA,KAAc,CAAA,IAAA,EAAO,UAAU,IAAI,CAAA,EAAA,EAAK,SAAA,CAAU,WAAW,CAAA,CAAE;AAAA,KACzE,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAEA,EAAA,MAAM,SAAS,WAAA,GAAc,CAAC,WAAA,CAAY,WAAA,EAAa,CAAA,GAAI,WAAA;AAC3D,EAAA,MAAM,KAAA,GAAQ,CAAC,sBAAA,EAAwB,EAAE,CAAA;AACzC,EAAA,KAAA,MAAW,aAAa,MAAA,EAAQ;AAC9B,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,UAAU,SAAS,CAAA;AACtE,IAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC9B,IAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,aAAA,CAAc,SAAS,CAAA,IAAK,SAAS,CAAA,CAAE,CAAA;AACzD,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,WAAA,CAAY,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,IAAA,EAAO,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,WAAW,CAAA,CAAE,GAAG,EAAE,CAAA;AAAA,EACzF;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,QAAA,EAAU,2BAAA,EAA6B,kCAAA,EAAoC,mCAAmC,CAAA;AACzH,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AClGO,SAAS,cAAc,GAAA,EAAqB;AACjD,EAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAC7B,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,sBAAsB,CAAA;AACjC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,MAAM,SAAA,GAAYf,OAAAA,CAAQ,GAAA,EAAK,SAAA,EAAW,QAAQ,CAAA;AAClD,EAAA,IAAIC,UAAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,MAAM,SAASS,WAAAA,CAAY,SAAS,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM;AAClD,MAAA,IAAI;AACF,QAAA,OAAOA,YAAYV,OAAAA,CAAQ,SAAA,EAAW,CAAC,CAAC,CAAA,CAAE,SAAS,UAAU,CAAA;AAAA,MAC/D,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAC,CAAA;AACD,IAAA,KAAA,CAAM,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,MAAA,GAAS,YAAY,CAAA;AACxD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,iDAAiD,CAAA;AAC5D,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,MAAM,aAAA,GAAgB,kBAAkB,GAAG,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAc,cAAc,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAA,CAAE,KAAK,CAAA;AAC1F,EAAA,KAAA,CAAM,IAAA,CAAK,kBAAkB,WAAA,CAAY,MAAA,GAAS,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAI,qBAAA,CAAsB,CAAA;AACrG,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,MAAM,QAAA,GAAWA,OAAAA,CAAQ,GAAA,EAAK,MAAA,CAAO,eAAe,OAAO,CAAA;AAC3D,EAAA,IAAIC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,IAAA,MAAM,KAAA,GAAQS,WAAAA,CAAY,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,OAAO,CAAC,CAAA;AACvE,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,IAAA,CAAK,aAAA,GAAgB,KAAA,CAAM,MAAM,CAAA;AACvC,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACrC,QAAA,MAAM,UAAA,GAAaV,OAAAA,CAAQ,QAAA,EAAU,IAAA,EAAM,SAAS,CAAA;AACpD,QAAA,MAAM,UAAUC,UAAAA,CAAW,UAAU,IAAIS,WAAAA,CAAY,UAAU,EAAE,MAAA,GAAS,CAAA;AAC1E,QAAA,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,IAAA,GAAO,IAAA,GAAO,UAAU,WAAW,CAAA;AAAA,MACzD;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,GAAUV,OAAAA,CAAQ,GAAA,EAAK,MAAA,EAAQ,OAAO,CAAA;AAC5C,EAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,IAAA,MAAM,KAAA,GAAQ,CAAC,YAAA,EAAc,YAAA,EAAc,UAAU,CAAA;AACrD,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAMA,WAAWD,OAAAA,CAAQ,OAAA,EAAS,CAAC,CAAC,CAAC,CAAA;AACrE,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,aAAA,GAAgB,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA;AAC/C,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,GAAYC,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,MAAM,CAAC,CAAA;AACjD,EAAA,MAAM,gBAAA,GAAmBC,UAAAA,CAAWD,OAAAA,CAAQ,GAAA,EAAK,cAAc,CAAC,CAAA;AAChE,EAAA,KAAA,CAAM,IAAA,CAAK,eAAe,SAAA,GAAY,UAAA,GAAa,aAAa,IAAA,IAAQ,gBAAA,GAAmB,qBAAqB,iBAAA,CAAkB,CAAA;AAClI,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,MAAM,OAAA,GAAUA,OAAAA,CAAQ,GAAA,EAAK,MAAA,CAAO,eAAe,oBAAoB,CAAA;AACvE,EAAA,MAAM,QAAA,GAAWA,OAAAA,CAAQ,GAAA,EAAK,UAAU,CAAA;AACxC,EAAA,KAAA,CAAM,IAAA,CAAK,eAAA,IAAmBC,UAAAA,CAAW,OAAO,CAAA,GAAI,wBAAA,GAA2B,uBAAA,CAAA,GAA2B,IAAA,IAAQA,UAAAA,CAAW,QAAQ,CAAA,GAAI,cAAA,GAAiB,aAAA,CAAc,CAAA;AACxK,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAASU,SAAS,iCAAA,EAAmC,EAAE,KAAK,QAAA,EAAU,OAAA,EAAS,CAAA,CAAE,IAAA,EAAK;AAC5F,IAAA,MAAM,SAAA,GAAYA,SAAS,wBAAA,EAA0B,EAAE,KAAK,QAAA,EAAU,OAAA,EAAS,CAAA,CAAE,IAAA,EAAK;AACtF,IAAA,MAAM,UAAU,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,IAAI,EAAE,MAAA,GAAS,CAAA;AAC3D,IAAA,KAAA,CAAM,IAAA,CAAK,kBAAA,GAAqB,MAAA,GAAS,IAAA,GAAO,UAAU,sBAAsB,CAAA;AAAA,EAClF,CAAA,CAAA,MAAQ;AACN,IAAA,KAAA,CAAM,KAAK,+BAA+B,CAAA;AAAA,EAC5C;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;ACvDA,IAAML,WAAAA,GAAaU,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAChD,IAAMT,UAAAA,GAAYC,QAAQF,WAAU,CAAA;AAEpC,SAAS,UAAA,GAAqB;AAC5B,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAMH,YAAAA,CAAaH,QAAQO,UAAAA,EAAW,oBAAoB,CAAA,EAAG,OAAO,CAAC,CAAA;AACtF,IAAA,OAAO,IAAI,OAAA,IAAW,OAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAEA,eAAe,mBAAmB,MAAA,EAAyC;AACzE,EAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,iBAAA,CAAkB,MAAM,CAAA;AACzD,EAAA,IAAI,CAAC,QAAQ,KAAA,CAAM,KAAA,IAAS,CAAC,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,OAAO,EAAC;AAE3D,EAAA,OAAA,CAAQ,GAAA,CAAI,iBAAiB,CAAA;AAC7B,EAAA,MAAM,MAAA,GAAS,gBAAgB,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAC/E,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA;AACzC,IAAA,OAAO,+BAA+B,MAAM,CAAA;AAAA,EAC9C,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,KAAA,EAAM;AAAA,EACf;AACF;AAEA,IAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAE5B,OAAA,CACG,IAAA,CAAK,YAAY,CAAA,CACjB,WAAA,CAAY,qDAAqD,CAAA,CACjE,OAAA,CAAQ,YAAY,CAAA;AAGvB,OAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,sCAAsC,CAAA,CAClD,MAAA,CAAO,gBAAgB,kBAAA,EAAoB,GAAG,EAC9C,MAAA,CAAO,oBAAA,EAAsB,0CAA0C,CAAA,CACvE,MAAA,CAAO,oBAAoB,yEAAyE,CAAA,CACpG,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB,IAAA,CAAK,MAAM,CAAA;AACnD,IAAA,MAAM,SAAS,WAAA,CAAY,OAAA,CAAQ,GAAA,EAAI,EAAG,KAAK,GAAA,EAAK;AAAA,MAClD,eAAe,IAAA,CAAK,aAAA;AAAA,MACpB;AAAA,KACD,CAAA;AACD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iCAAA,EAA+B,MAAA,CAAO,aAAa,CAAA,CAAE,CAAA;AACjE,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,4CAA4C,CAAA;AACxD,IAAA,MAAM,MAAA,GAAS,OAAO,YAAA,CAAa,GAAA,CAAI,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAA,CAAE,KAAK,CAAA;AACnF,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,OAAO,IAAA,CAAK,IAAI,CAAA,GAAI,WAAW,CAAA,CAAE,CAAA;AAC9E,IAAA,IAAI,MAAA,CAAO,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA,gBAAA,CAAkB,CAAA;AAC3G,IAAA,KAAA,MAAW,WAAW,MAAA,CAAO,QAAA,UAAkB,IAAA,CAAK,CAAA,WAAA,EAAc,OAAO,CAAA,CAAE,CAAA;AAC3E,IAAA,MAAM,IAAI,MAAA,CAAO,QAAA;AACjB,IAAA,IAAI,EAAE,SAAA,EAAW,OAAA,CAAQ,IAAI,CAAA,aAAA,EAAgB,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA;AAC1D,IAAA,IAAI,EAAE,WAAA,EAAa,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,CAAA,CAAE,WAAW,CAAA,CAAE,CAAA;AAChE,IAAA,IAAI,EAAE,gBAAA,EAAkB,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,CAAA,CAAE,gBAAgB,CAAA,CAAE,CAAA;AAAA,EACzE,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAChF,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAGH,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,kCAAkC,CAAA,CAC9C,SAAS,QAAA,EAAU,6CAA6C,CAAA,CAChE,MAAA,CAAO,YAAY,+BAA+B,CAAA,CAClD,OAAO,gBAAA,EAAkB,uBAAuB,EAChD,MAAA,CAAO,WAAA,EAAa,2BAA2B,CAAA,CAC/C,OAAO,oBAAA,EAAsB,4BAA4B,EACzD,MAAA,CAAO,YAAA,EAAc,+BAA+B,CAAA,CACpD,MAAA,CAAO,SAAS,iDAAiD,CAAA,CACjE,OAAO,QAAA,EAAU,8DAA8D,EAC/E,MAAA,CAAO,CAAC,MAAc,IAAA,KAAS;AAC9B,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAA,CAAQ,IAAI,+BAA+B,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,wCAAwC,CAAA;AACpD,IAAA,OAAA,CAAQ,IAAI,yCAAyC,CAAA;AACrD,IAAA,OAAA,CAAQ,IAAI,kDAAkD,CAAA;AAC9D,IAAA,OAAA,CAAQ,IAAI,0CAA0C,CAAA;AACtD,IAAA,OAAA,CAAQ,IAAI,sCAAsC,CAAA;AAClD,IAAA;AAAA,EACF;AACA,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AACpD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,uBAAA,EAAqB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,EACnD,CAAA,MAAA,IAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AACrD,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB,CAAA,MAAA,IAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,OAAO,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,KAAK,IAAA,GAAO,MAAA;AACzD,IAAA,MAAM,SAAS,eAAA,CAAgB,OAAA,CAAQ,GAAA,EAAI,EAAG,MAAM,IAAI,CAAA;AACxD,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB,CAAA,MAAA,IAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACb,MAAA,OAAA,CAAQ,IAAI,6EAA6E,CAAA;AACzF,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AACrD,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB,CAAA,MAAA,IAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AAClD,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB,CAAA,MAAO;AACL,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,EAAE,GAAA,EAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AAChF,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,uBAAA,EAAqB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,EACnD;AACF,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,wBAAwB,CAAA,CACpC,QAAA,CAAS,QAAA,EAAU,oDAA+C,CAAA,CAClE,QAAA,CAAS,MAAA,EAAQ,sBAAsB,CAAA,CACvC,QAAA,CAAS,SAAA,EAAW,aAAa,CAAA,CACjC,MAAA,CAAO,aAAA,EAAe,cAAA,EAAgB,GAAG,CAAA,CACzC,MAAA,CAAO,CAAC,IAAA,EAAc,EAAA,EAAY,KAAA,EAAe,IAAA,KAAS;AACzD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAA,CAAQ,IAAI,4DAA4D,CAAA;AACxE,IAAA,OAAA,CAAQ,IAAI,4DAA4D,CAAA;AACxE,IAAA;AAAA,EACF;AACA,EAAA,IAAI,MAAM,KAAA,EAAO;AAEf,IAAA,MAAM,SAAS,kBAAA,CAAmB;AAAA,MAChC,GAAA,EAAK,QAAQ,GAAA,EAAI;AAAA,MAAG,IAAA;AAAA,MAAM,EAAA;AAAA,MAAI,KAAA;AAAA,MAC9B,OAAO,IAAA,CAAK;AAAA,KACb,CAAA;AACD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,wBAAA,EAAsB,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,EACjD,WAAW,IAAA,EAAM;AAEf,IAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AACpD,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAAE,MAAA,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AAAG,MAAA;AAAA,IAAQ;AACtE,IAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,IAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,GAAA,EAAM,CAAA,CAAE,MAAM,CAAA,GAAA,EAAM,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,EAC7E;AACF,CAAC,CAAA;AAGH,OAAA,CACG,QAAQ,KAAK,CAAA,CACb,WAAA,CAAY,4BAA4B,EACxC,QAAA,CAAS,QAAA,EAAU,WAAW,CAAA,CAC9B,SAAS,MAAA,EAAQ,UAAU,EAC3B,MAAA,CAAO,CAAC,MAAc,EAAA,KAAe;AACpC,EAAA,MAAM,SAAS,eAAA,CAAgB,OAAA,CAAQ,GAAA,EAAI,EAAG,MAAM,EAAE,CAAA;AACtD,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAW,MAAA,CAAO,KAAK,CAAA,sBAAA,CAAwB,CAAA;AAC3D,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,eAAe,CAAA,CAAE,CAAA;AAC1D,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAK,MAAA,CAAO,YAAY,CAAA,CAAE,CAAA;AACxC,CAAC,CAAA;AAGH,OAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,4BAA4B,EACxC,QAAA,CAAS,QAAA,EAAU,WAAW,CAAA,CAC9B,SAAS,MAAA,EAAQ,UAAU,EAC3B,MAAA,CAAO,CAAC,MAAc,EAAA,KAAe;AACpC,EAAA,MAAM,SAAS,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAI,EAAG,MAAM,EAAE,CAAA;AAC3D,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,0BAAA,EAAwB,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AACvD,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AACrD,CAAC,CAAA;AAGH,OAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,yCAAyC,EACrD,QAAA,CAAS,QAAA,EAAU,WAAW,CAAA,CAC9B,SAAS,MAAA,EAAQ,UAAU,EAC3B,MAAA,CAAO,iBAAA,EAAmB,oBAAoB,CAAA,CAC9C,MAAA,CAAO,SAAA,EAAW,4CAA4C,EAC9D,MAAA,CAAO,QAAA,EAAU,4CAA4C,CAAA,CAC7D,OAAO,OAAA,EAAS,iDAAiD,CAAA,CACjE,MAAA,CAAO,aAAa,8CAA8C,CAAA,CAClE,OAAO,CAAC,IAAA,EAAc,IAAY,IAAA,KAAS;AAC1C,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,IAAU,CAAC,IAAA,CAAK,GAAA;AACzC,EAAA,MAAM,SAAS,aAAA,CAAc,OAAA,CAAQ,GAAA,EAAI,EAAG,MAAM,EAAA,EAAI;AAAA,IACpD,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACT,CAAA;AACD,EAAA,IAAI,WAAA,IAAe,MAAA,CAAO,YAAA,GAAe,CAAA,EAAG;AAC1C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,MAAM,CAAA,CAAA,CAAG,CAAA;AAClD,IAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,YAAA,UAAsB,GAAA,CAAI,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAA;AACjE,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,OAAA,CAAQ,IAAI,qEAAqE,CAAA;AACnG,IAAA;AAAA,EACF;AACA,EAAA,IAAI,OAAO,UAAA,EAAY;AACrB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iCAAA,EAA+B,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAC1D,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAC5C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,MAAA,CAAO,YAAY,CAAA,CAAE,CAAA;AACrD,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,IACnD,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,CAAA,gEAAA,CAA6D,CAAA;AAAA,IAC3E;AACA,IAAA,IAAI,MAAA,CAAO,YAAA,EAAc,OAAA,CAAQ,GAAA,CAAI,CAAA,gCAAA,CAAkC,CAAA;AAAA,EACzE,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sCAAA,EAAoC,EAAE,CAAA,CAAE,CAAA;AAAA,EACtD;AACF,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,gCAAgC,CAAA,CAC5C,MAAA,CAAO,QAAA,EAAU,iCAAiC,CAAA,CAClD,MAAA,CAAO,CAAC,IAAA,KAAS;AAChB,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC/C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,6BAAA,EAA2B,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,EACtD,CAAA,MAAO;AACL,IAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,OAAA,CAAQ,GAAA,EAAK,CAAA;AACnD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oCAAA,EAAkC,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,EAC7D;AACF,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,kCAAkC,CAAA,CAC9C,QAAA,CAAS,UAAA,EAAY,qCAAA,EAAuC,MAAM,CAAA,CAClE,MAAA,CAAO,CAAC,MAAA,KAAmB;AAC1B,EAAA,IAAI,WAAW,SAAA,EAAW;AACxB,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC/C,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB,CAAA,MAAA,IAAW,WAAW,WAAA,EAAa;AACjC,IAAA,OAAA,CAAQ,GAAA,CAAI,oBAAA,CAAqB,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AAAA,EACjD,CAAA,MAAO;AACL,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC5C,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB;AACF,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,IAAI,CAAA,CACZ,WAAA,CAAY,sCAAsC,CAAA,CAClD,MAAA,CAAO,SAAA,EAAW,qDAAqD,CAAA,CACvE,MAAA,CAAO,CAAC,IAAA,KAAS;AAChB,EAAA,MAAM,MAAA,GAAS,kBAAkB,OAAA,CAAQ,GAAA,IAAO,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AACrE,EAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AACpB,CAAC,CAAA;AAGH,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,kDAAkD,CAAA,CAC9D,OAAO,MAAM;AACZ,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC7C,EAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AACpB,CAAC,CAAA;AAGH,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,WAAA,CAAY,kCAAkC,EAC9C,QAAA,CAAS,QAAA,EAAU,WAAW,CAAA,CAC9B,SAAS,SAAA,EAAW,mDAAmD,EACvE,MAAA,CAAO,CAAC,MAAc,KAAA,KAAkB;AACvC,EAAA,MAAM,SAAS,sBAAA,CAAuB,OAAA,CAAQ,GAAA,EAAI,EAAG,MAAM,KAAK,CAAA;AAChE,EAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AACpB,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,KAAK,CAAA,CACb,WAAA,CAAY,8BAA8B,CAAA,CAC1C,QAAA,CAAS,UAAA,EAAY,uBAAA,EAAyB,MAAM,CAAA,CACpD,MAAA,CAAO,CAAC,MAAA,KAAmB;AAC1B,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC5C,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB,CAAA,MAAO;AACL,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB;AACF,CAAC,CAAA;AAGH,IAAM,YAAY,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,CAAE,YAAY,mCAAmC,CAAA;AAC3F,SAAA,CACG,QAAQ,YAAY,CAAA,CACpB,YAAY,qCAAqC,CAAA,CACjD,OAAO,MAAM;AACZ,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,OAAA,CAAQ,GAAA,EAAK,CAAA;AACpD,EAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AACpB,CAAC,CAAA;AACH,SAAA,CACG,QAAQ,cAAc,CAAA,CACtB,YAAY,wBAAwB,CAAA,CACpC,OAAO,MAAM;AACZ,EAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,OAAA,CAAQ,GAAA,EAAK,CAAA;AACtD,EAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AACpB,CAAC,CAAA;AAGH,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,6BAA6B,CAAA,CACzC,SAAS,UAAA,EAAY,sBAAA,EAAwB,OAAO,CAAA,CACpD,QAAA,CAAS,UAAU,UAAA,EAAY,IAAI,EACnC,MAAA,CAAO,CAAC,QAAgB,IAAA,KAAiB;AACxC,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AACjD,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB,CAAA,MAAO;AACL,IAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AACnD,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB;AACF,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,kEAAkE,CAAA,CAC9E,QAAA,CAAS,WAAW,wBAAwB,CAAA,CAC5C,OAAO,gBAAA,EAAkB,+BAA+B,EACxD,MAAA,CAAO,iBAAA,EAAmB,4CAA4C,CAAA,CACtE,MAAA,CAAO,CAAC,KAAA,EAAe,IAAA,KAAS;AAC/B,EAAA,MAAM,MAAA,GAAS,YAAY,OAAA,CAAQ,GAAA,IAAO,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AACtE,EAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AACpB,CAAC,CAAA;AAGH,OAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,YAAY,8BAA8B,CAAA,CAC1C,OAAO,MAAM;AACZ,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC1C,EAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AACpB,CAAC,CAAA;AAEH,MAAM,OAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA","file":"main.mjs","sourcesContent":["export const AGENT_TARGETS = [\n  \"codex\",\n  \"claude\",\n  \"gemini\",\n  \"copilot\",\n  \"opencode\",\n  \"windsurf\",\n  \"cline\",\n  \"cursor\",\n] as const;\n\nexport type AgentTarget = (typeof AGENT_TARGETS)[number];\n\nexport type AgentAdapter = \"canonical\" | \"skill-wrapper\" | \"cursor-command\";\n\nexport interface AgentDefinition {\n  id: AgentTarget;\n  label: string;\n  adapter: AgentAdapter;\n  aliases: readonly string[];\n}\n\nexport const AGENT_DEFINITIONS: readonly AgentDefinition[] = [\n  { id: \"codex\", label: \"Codex\", adapter: \"canonical\", aliases: [\"openai-codex\"] },\n  { id: \"claude\", label: \"Claude Code\", adapter: \"skill-wrapper\", aliases: [\"claude-code\"] },\n  { id: \"gemini\", label: \"Gemini CLI\", adapter: \"canonical\", aliases: [\"gemini-cli\"] },\n  { id: \"copilot\", label: \"GitHub Copilot\", adapter: \"canonical\", aliases: [\"github-copilot\"] },\n  { id: \"opencode\", label: \"OpenCode\", adapter: \"canonical\", aliases: [\"open-code\"] },\n  { id: \"windsurf\", label: \"Windsurf\", adapter: \"canonical\", aliases: [\"cascade\"] },\n  { id: \"cline\", label: \"Cline\", adapter: \"skill-wrapper\", aliases: [] },\n  { id: \"cursor\", label: \"Cursor\", adapter: \"cursor-command\", aliases: [\"cursor-agent\"] },\n] as const;\n\nconst AGENT_LOOKUP = new Map<string, AgentTarget>();\nfor (const definition of AGENT_DEFINITIONS) {\n  AGENT_LOOKUP.set(definition.id, definition.id);\n  for (const alias of definition.aliases) AGENT_LOOKUP.set(alias, definition.id);\n}\n\nexport function getAgentDefinition(target: AgentTarget): AgentDefinition {\n  return AGENT_DEFINITIONS.find((definition) => definition.id === target)!;\n}\n\nexport function parseAgentTargets(value: string): AgentTarget[] {\n  const tokens = value.split(\",\").map((token) => token.trim().toLowerCase()).filter(Boolean);\n  if (tokens.length === 0) throw new Error(\"Agent selection cannot be empty. Use 'core' for the universal skill set.\");\n  if (tokens.includes(\"all\")) {\n    if (tokens.length !== 1) throw new Error(\"'all' cannot be combined with individual agents.\");\n    return [...AGENT_TARGETS];\n  }\n  if (tokens.includes(\"core\")) {\n    if (tokens.length !== 1) throw new Error(\"'core' cannot be combined with individual agents.\");\n    return [];\n  }\n\n  const selected: AgentTarget[] = [];\n  for (const token of tokens) {\n    const target = AGENT_LOOKUP.get(token);\n    if (!target) {\n      throw new Error(`Unknown agent '${token}'. Valid values: ${AGENT_TARGETS.join(\", \")}, all, core.`);\n    }\n    if (!selected.includes(target)) selected.push(target);\n  }\n  return selected;\n}\n\nexport function parseInteractiveAgentSelection(value: string): AgentTarget[] {\n  const answer = value.trim().toLowerCase();\n  if (!answer || answer === \"core\") return [];\n  if (answer === \"all\") return [...AGENT_TARGETS];\n\n  const tokens = answer.split(\",\").map((token) => token.trim()).filter(Boolean);\n  const normalized = tokens.map((token) => {\n    if (!/^\\d+$/.test(token)) return token;\n    const index = Number(token) - 1;\n    if (index < 0 || index >= AGENT_TARGETS.length) {\n      throw new Error(`Agent number '${token}' is outside the available range.`);\n    }\n    return AGENT_TARGETS[index];\n  });\n  return parseAgentTargets(normalized.join(\",\"));\n}\n\nexport function formatAgentMenu(): string {\n  const lines = [\"Select AI agents (comma-separated numbers, 'all', or Enter for core only):\"];\n  AGENT_DEFINITIONS.forEach((definition, index) => {\n    const mode = definition.adapter === \"canonical\" ? \"uses universal core\" : \"installs native adapter\";\n    lines.push(`  ${index + 1}. ${definition.label} — ${mode}`);\n  });\n  return lines.join(\"\\n\");\n}\n","import { readFileSync, existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { load } from \"js-yaml\";\n\nexport interface CodewrightConfig {\n  codewright_version: string;\n  project_name: string;\n  stack: string;\n  communication_language: string;\n  output_folder: string;\n  context_file: string;\n\n  // Auto-detected fields\n  framework?: string;\n  test_runner?: string;\n  lint_tools?: string[];\n  project_language?: string;\n  strict_mode?: boolean;\n}\n\nconst DEFAULTS: CodewrightConfig = {\n  codewright_version: \"0.1.0\",\n  project_name: \"\",\n  stack: \"node\",\n  communication_language: \"en\",\n  output_folder: \".codewright-output\",\n  context_file: \".codewright-output/project-context.md\",\n};\n\nfunction loadYaml(path: string): Record<string, unknown> {\n  if (!existsSync(path)) return {};\n  try {\n    const raw = readFileSync(path, \"utf-8\");\n    return (load(raw) as Record<string, unknown>) || {};\n  } catch {\n    return {};\n  }\n}\n\nfunction mergeConfigs(\n  ...sources: Record<string, unknown>[]\n): CodewrightConfig {\n  const merged: Record<string, unknown> = { ...DEFAULTS };\n  for (const src of sources) {\n    Object.assign(merged, src);\n  }\n  return merged as unknown as CodewrightConfig;\n}\n\nexport function loadConfig(cwd: string): CodewrightConfig {\n  const projectConfig = loadYaml(resolve(cwd, \".codewright\", \"config.yaml\"));\n  const userConfig = loadYaml(resolve(cwd, \".codewright\", \"config.user.yaml\"));\n  return mergeConfigs(projectConfig, userConfig);\n}\n\nexport function resolveOutputDir(cwd: string, config: CodewrightConfig): string {\n  return resolve(cwd, config.output_folder);\n}\n\nexport function resolveSpecDir(cwd: string, config: CodewrightConfig, slug: string): string {\n  return resolve(resolveOutputDir(cwd, config), \"specs\", `spec-${slug}`);\n}\n\n/** Resolve {template} variables in a string using the config */\nexport function resolveTemplates(input: string, config: CodewrightConfig): string {\n  const vars: Record<string, string> = {\n    \"project-root\": process.cwd(),\n    \"output-folder\": config.output_folder,\n    \"skills-dir\": \".agents/skills\",\n    \"config-dir\": \".codewright\",\n    \"project-name\": config.project_name || \"\",\n  };\n  return input.replace(/\\{(\\w[\\w-]*\\w|\\w)\\}/g, (_, key) => vars[key] || `{${key}}`);\n}\n","import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, relative, resolve, sep } from \"node:path\";\nimport { dump, load } from \"js-yaml\";\nimport {\n  AGENT_TARGETS,\n  type AgentTarget,\n  getAgentDefinition,\n} from \"./registry.js\";\n\nconst MANAGED_MARKER = \"<!-- codewright-managed: agent-adapter v1 -->\";\n\nexport interface AgentManifest {\n  version: 1;\n  targets: AgentTarget[];\n}\n\nexport interface AdapterInstallResult {\n  installedFiles: string[];\n  warnings: string[];\n}\n\nfunction normalizePath(path: string): string {\n  return path.split(sep).join(\"/\");\n}\n\nexport function readAgentManifest(targetDir: string): AgentManifest {\n  const path = resolve(targetDir, \".codewright\", \"agents.yaml\");\n  if (!existsSync(path)) return { version: 1, targets: [] };\n  try {\n    const parsed = load(readFileSync(path, \"utf-8\")) as { targets?: unknown } | null;\n    const targets = Array.isArray(parsed?.targets)\n      ? parsed.targets.filter((target): target is AgentTarget => AGENT_TARGETS.includes(target as AgentTarget))\n      : [];\n    return { version: 1, targets: [...new Set(targets)] };\n  } catch {\n    return { version: 1, targets: [] };\n  }\n}\n\nexport function writeAgentManifest(targetDir: string, targets: AgentTarget[]): string {\n  const path = resolve(targetDir, \".codewright\", \"agents.yaml\");\n  mkdirSync(dirname(path), { recursive: true });\n  writeFileSync(path, dump({ version: 1, targets }, { noRefs: true, lineWidth: -1 }), \"utf-8\");\n  return path;\n}\n\nfunction readSkillDescription(skillPath: string): string {\n  const content = readFileSync(skillPath, \"utf-8\");\n  const match = content.match(/^---\\s*\\n([\\s\\S]*?)\\n---/);\n  if (!match) return \"Run the corresponding Codewright workflow.\";\n  const frontmatter = load(match[1]) as { description?: unknown } | null;\n  return typeof frontmatter?.description === \"string\"\n    ? frontmatter.description\n    : \"Run the corresponding Codewright workflow.\";\n}\n\nfunction skillWrapper(skillName: string, description: string, canonicalPath: string): string {\n  return `---\nname: ${skillName}\ndescription: ${JSON.stringify(description)}\n---\n\n${MANAGED_MARKER}\n\n# Codewright adapter\n\nRead and follow the complete canonical skill at \\`${canonicalPath}\\`. Treat its directory as the skill root when resolving references, scripts, assets, and customization. The canonical skill is authoritative.\n`;\n}\n\nfunction cursorCommand(skillName: string, canonicalPath: string): string {\n  return `${MANAGED_MARKER}\n\n# ${skillName}\n\nRead and follow the complete canonical skill at \\`${canonicalPath}\\`. Treat its directory as the skill root when resolving references, scripts, assets, and customization. Apply the workflow to the user's current request.\n`;\n}\n\nfunction writeManagedAdapter(\n  targetDir: string,\n  destination: string,\n  content: string,\n  upgrade: boolean,\n  backupRoot: string,\n  result: AdapterInstallResult,\n): void {\n  const relativePath = normalizePath(relative(targetDir, destination));\n  if (existsSync(destination)) {\n    const existing = readFileSync(destination, \"utf-8\");\n    if (!existing.includes(MANAGED_MARKER)) {\n      result.warnings.push(`Preserved user-managed adapter: ${relativePath}`);\n      return;\n    }\n    if (!upgrade) return;\n    const backupPath = resolve(backupRoot, \"adapters\", relativePath);\n    mkdirSync(dirname(backupPath), { recursive: true });\n    cpSync(destination, backupPath, { force: true });\n  }\n  mkdirSync(dirname(destination), { recursive: true });\n  writeFileSync(destination, content, \"utf-8\");\n  result.installedFiles.push(relativePath);\n}\n\nexport function installAgentAdapters(options: {\n  targetDir: string;\n  targets: AgentTarget[];\n  skillNames: readonly string[];\n  upgrade: boolean;\n  backupRoot: string;\n}): AdapterInstallResult {\n  const result: AdapterInstallResult = { installedFiles: [], warnings: [] };\n  for (const target of options.targets) {\n    const definition = getAgentDefinition(target);\n    if (definition.adapter === \"canonical\") continue;\n\n    for (const skillName of options.skillNames) {\n      const canonicalSkill = resolve(options.targetDir, \".agents\", \"skills\", skillName, \"SKILL.md\");\n      if (!existsSync(canonicalSkill)) continue;\n      const description = readSkillDescription(canonicalSkill);\n\n      if (target === \"claude\" || target === \"cline\") {\n        const destination = resolve(options.targetDir, `.${target}`, \"skills\", skillName, \"SKILL.md\");\n        const canonicalPath = normalizePath(relative(dirname(destination), canonicalSkill));\n        writeManagedAdapter(\n          options.targetDir,\n          destination,\n          skillWrapper(skillName, description, canonicalPath),\n          options.upgrade,\n          options.backupRoot,\n          result,\n        );\n      } else if (target === \"cursor\") {\n        const destination = resolve(options.targetDir, \".cursor\", \"commands\", `${skillName}.md`);\n        const canonicalPath = normalizePath(relative(dirname(destination), canonicalSkill));\n        writeManagedAdapter(\n          options.targetDir,\n          destination,\n          cursorCommand(skillName, canonicalPath),\n          options.upgrade,\n          options.backupRoot,\n          result,\n        );\n      }\n    }\n  }\n  return result;\n}\n","import { writeFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport interface WriteOptions {\n  cwd: string;\n  outputFolder: string;\n  subpath: string;\n  filename: string;\n  content: string;\n}\n\nexport function writeArtifact(opts: WriteOptions): string {\n  const dir = resolve(opts.cwd, opts.outputFolder, opts.subpath);\n  if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n  const fp = resolve(dir, opts.filename);\n  writeFileSync(fp, opts.content, \"utf-8\");\n  return fp;\n}\n","import { readFileSync, existsSync, readdirSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig } from \"../../config/loader.js\";\nimport { writeArtifact } from \"../../artifacts/writer.js\";\n\nconst SOURCE_EXTENSIONS = [\".ts\", \".tsx\", \".js\", \".jsx\", \".mjs\", \".cjs\", \".py\", \".go\", \".rs\", \".java\", \".rb\", \".php\"];\n\nfunction scanDirectory(dir: string, prefix: string = \"\"): string[] {\n  const results: string[] = [];\n  if (!existsSync(dir)) return results;\n\n  try {\n    const entries = readdirSync(dir, { withFileTypes: true });\n    for (const entry of entries) {\n      const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n      if (entry.name.startsWith(\".\") || entry.name === \"node_modules\" || entry.name === \"dist\" || entry.name === \".codewright-output\") continue;\n      if (entry.isDirectory()) {\n        results.push(...scanDirectory(resolve(dir, entry.name), rel));\n      } else if (SOURCE_EXTENSIONS.some((ext) => entry.name.endsWith(ext))) {\n        results.push(`  - ${rel}`);\n      }\n    }\n  } catch {\n    // skip unreadable dirs\n  }\n  return results;\n}\n\nexport function contextGenerateCommand(cwd: string) {\n  const config = loadConfig(cwd);\n\n  const sections: string[] = [];\n\n  // 1. Technology Stack\n  const pkgPath = resolve(cwd, \"package.json\");\n  if (existsSync(pkgPath)) {\n    const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n    const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n    const depList = Object.entries(deps)\n      .map(([name, ver]) => `  - ${name}: ${ver}`)\n      .join(\"\\n\");\n\n    sections.push(`## Technology Stack & Versions\n- **Name:** ${pkg.name || \"unknown\"}\n- **Version:** ${pkg.version || \"0.0.0\"}\n- **Stack:** ${config.stack}\n- **Framework:** ${config.framework || \"unknown\"}\n- **Test Runner:** ${config.test_runner || \"unknown\"}\n- **Lint Tools:** ${(config.lint_tools || []).join(\", \") || \"none\"}\n- **Dependencies:\\n${depList}`);\n  }\n\n  // 2. Project Structure (all source dirs)\n  const srcDirs = [\"src\", \"app\", \"lib\", \"components\", \"pages\", \"api\", \"server\", \"client\"];\n  const structureLines: string[] = [];\n  for (const dir of srcDirs) {\n    const fullPath = resolve(cwd, dir);\n    if (existsSync(fullPath)) {\n      const files = scanDirectory(fullPath, dir);\n      structureLines.push(...files);\n    }\n  }\n\n  if (structureLines.length > 0) {\n    sections.push(`## Project Structure\\n${structureLines.join(\"\\n\")}`);\n  }\n\n  // 3. Config files detected\n  const configFiles = [\n    { path: \"tsconfig.json\", label: \"TypeScript Config\" },\n    { path: \".eslintrc\", label: \"ESLint\" },\n    { path: \".eslintrc.json\", label: \"ESLint\" },\n    { path: \".eslintrc.js\", label: \"ESLint\" },\n    { path: \".prettierrc\", label: \"Prettier\" },\n    { path: \".prettierrc.json\", label: \"Prettier\" },\n    { path: \"vitest.config.ts\", label: \"Vitest\" },\n    { path: \"vitest.config.js\", label: \"Vitest\" },\n    { path: \"jest.config.ts\", label: \"Jest\" },\n    { path: \"jest.config.js\", label: \"Jest\" },\n    { path: \"docker-compose.yml\", label: \"Docker Compose\" },\n    { path: \"docker-compose.yaml\", label: \"Docker Compose\" },\n    { path: \"Dockerfile\", label: \"Docker\" },\n    { path: \"Makefile\", label: \"Make\" },\n    { path: \".env.example\", label: \"Environment Variables\" },\n    { path: \"biome.json\", label: \"Biome\" },\n  ];\n\n  const foundConfigs = configFiles\n    .filter((cf) => existsSync(resolve(cwd, cf.path)))\n    .map((cf) => `  - ${cf.label} (${cf.path})`);\n\n  if (foundConfigs.length > 0) {\n    sections.push(`## Configuration & Tooling\\n${foundConfigs.join(\"\\n\")}`);\n  }\n\n  // 4. Environment variables (from .env.example)\n  const envPath = resolve(cwd, \".env.example\");\n  if (existsSync(envPath)) {\n    const envContent = readFileSync(envPath, \"utf-8\")\n      .split(\"\\n\")\n      .filter((l) => l.trim() && !l.startsWith(\"#\"))\n      .map((l) => `  - ${l.split(\"=\")[0].trim()}`)\n      .join(\"\\n\");\n    if (envContent) {\n      sections.push(`## Environment Variables\\n${envContent}`);\n    }\n  }\n\n  // 5. Critical Rules (from AGENTS.md)\n  const agentsPath = resolve(cwd, \"AGENTS.md\");\n  if (existsSync(agentsPath)) {\n    const rules = readFileSync(agentsPath, \"utf-8\");\n    sections.push(`## Critical Rules\\n${rules}`);\n  }\n\n  // 6. Config summary\n  const lintTools = (config.lint_tools || []).join(\", \");\n  sections.push(`## Configuration\n- **Project:** ${config.project_name}\n- **Stack:** ${config.stack}\n- **Framework:** ${config.framework || \"-\"}\n- **Language:** ${config.communication_language}\n- **Test Runner:** ${config.test_runner || \"-\"}\n- **Lint Tools:** ${lintTools || \"-\"}\n- **Strict Mode:** ${config.strict_mode !== undefined ? String(config.strict_mode) : \"unknown\"}\n- **Output:** ${config.output_folder}`);\n\n  const content = `# Project Context\n\n> Auto-generated by codewright. Update with \\`codewright context generate\\`.\n\n${sections.join(\"\\n\\n\")}\\n`;\n\n  const path = writeArtifact({\n    cwd,\n    outputFolder: config.output_folder,\n    subpath: \".\",\n    filename: \"project-context.md\",\n    content,\n  });\n\n  return { path };\n}\n\nexport function contextLlmsCommand(cwd: string) {\n  const config = loadConfig(cwd);\n\n  const srcDirs = [\"src\", \"app\", \"lib\", \"components\", \"pages\", \"api\"];\n  const structure: string[] = [];\n\n  for (const dir of srcDirs) {\n    const fullPath = resolve(cwd, dir);\n    if (existsSync(fullPath)) {\n      const files = scanDirectory(fullPath, dir);\n      if (files.length > 0) structure.push(...files.slice(0, 20));\n    }\n  }\n\n  const pkgPath = resolve(cwd, \"package.json\");\n  let pkgName = config.project_name || \"unknown\";\n  let pkgVersion = \"0.0.0\";\n  if (existsSync(pkgPath)) {\n    try {\n      const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n      pkgName = pkg.name || pkgName;\n      pkgVersion = pkg.version || pkgVersion;\n    } catch {}\n  }\n\n  const content = `# ${pkgName}\n\n> AI context file for ${pkgName} v${pkgVersion}\n> Auto-generated by codewright. Update with \\`codewright context --llms\\`.\n\n## Project Overview\n\n- **Stack:** ${config.stack}\n- **Framework:** ${config.framework || \"-\"}\n- **Language:** ${config.communication_language}\n- **Test Runner:** ${config.test_runner || \"-\"}\n- **Key Directories:**${structure.length > 0 ? \"\\n\" + structure.slice(0, 10).map(f => f.replace(\"  - \", \"  - \")).join(\"\\n\") : \"\\n  - (none found)\"}\n\n## Commands\n\n- Build: \\`npm run build\\`, \\`npm run dev\\`\n- Test: \\`npm test\\`\n- Lint: \\`npm run lint\\`\n\n## Configuration\n\n- Config directory: \\`.codewright/\\`\n- Specs: \\`.codewright-output/specs/\\`\n- Agent skills: \\`.agents/skills/\\`\n\n## Key Files\n\n- \\`package.json\\` - Project manifest\n- \\`.codewright/config.yaml\\` - Codewright configuration\n- \\`.codewright/config.user.yaml\\` - User overrides (gitignored)\n- \\`.codewright/rules/DEFAULT.md\\` - Project rules\n`;\n\n  const llmsPath = resolve(cwd, \"llms.txt\");\n  writeFileSync(llmsPath, content, \"utf-8\");\n\n  return { path: llmsPath };\n}\n","import { existsSync, mkdirSync, writeFileSync, cpSync, readdirSync, readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { loadConfig } from \"../../config/loader.js\";\nimport { installAgentAdapters, readAgentManifest, writeAgentManifest } from \"../../agents/install.js\";\nimport type { AgentTarget } from \"../../agents/registry.js\";\nimport { contextGenerateCommand, contextLlmsCommand } from \"./context.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Skills directory inside the installed package\nconst PACKAGE_SKILLS_DIR = resolve(__dirname, \"../../skills\");\n\nexport const SKILL_NAMES = [\n  \"codewright-init\",\n  \"codewright-spec\",\n  \"codewright-architecture\",\n  \"codewright-story\",\n  \"codewright-dev\",\n  \"codewright-review\",\n  \"codewright-quality\",\n  \"codewright-test\",\n  \"codewright-refactor\",\n  \"codewright-readiness\",\n  \"codewright-quick-dev\",\n  \"codewright-document\",\n  \"codewright-retrospective\",\n  \"codewright-epic\",\n  \"codewright-develop\",\n  \"codewright-rules\",\n  \"codewright-hook\",\n  \"codewright-ci\",\n  \"codewright-commit\",\n  \"codewright-context\",\n  \"codewright-deps\",\n  \"codewright-testgen\",\n  \"codewright-env\",\n  \"codewright-deploy\",\n  \"codewright-perf\",\n] as const;\n\nexport interface InitOptions {\n  upgradeSkills?: boolean;\n  agents?: AgentTarget[];\n}\n\ninterface DetectedStack {\n  framework?: string;\n  test_runner?: string;\n  lint_tools: string[];\n  project_language?: string;\n  strict_mode?: boolean;\n}\n\nfunction detectProjectStack(targetDir: string): DetectedStack {\n  const detected: DetectedStack = { lint_tools: [] };\n  const pkgPath = resolve(targetDir, \"package.json\");\n\n  if (!existsSync(pkgPath)) {\n    // Check for other languages\n    if (existsSync(resolve(targetDir, \"requirements.txt\")) || existsSync(resolve(targetDir, \"setup.py\")) || existsSync(resolve(targetDir, \"pyproject.toml\"))) {\n      detected.project_language = \"python\";\n      detected.framework = \"python\";\n    } else if (existsSync(resolve(targetDir, \"go.mod\"))) {\n      detected.project_language = \"go\";\n      detected.framework = \"go\";\n    }\n    return detected;\n  }\n\n  detected.project_language = \"javascript\";\n\n  try {\n    const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n    const deps = { ...pkg.dependencies, ...pkg.devDependencies } as Record<string, string>;\n    const allDeps = Object.keys(deps);\n\n    // Detect framework\n    if (allDeps.some((d) => d === \"next\" || d.startsWith(\"next-\"))) detected.framework = \"next\";\n    else if (allDeps.some((d) => d === \"react\" || d.startsWith(\"react-\"))) detected.framework = \"react\";\n    else if (allDeps.some((d) => d === \"vue\" || d.startsWith(\"vue-\"))) detected.framework = \"vue\";\n    else if (allDeps.some((d) => d === \"express\" || d.startsWith(\"express-\"))) detected.framework = \"express\";\n    else if (allDeps.some((d) => d === \"nest\" || d.startsWith(\"@nestjs/\"))) detected.framework = \"nestjs\";\n    else if (allDeps.some((d) => d === \"svelte\" || d.startsWith(\"@sveltejs/\"))) detected.framework = \"svelte\";\n    else if (allDeps.includes(\"typescript\")) detected.project_language = \"typescript\";\n\n    // Detect test runner\n    if (allDeps.some((d) => d.includes(\"vitest\"))) detected.test_runner = \"vitest\";\n    else if (allDeps.some((d) => d.includes(\"jest\"))) detected.test_runner = \"jest\";\n    else if (allDeps.some((d) => d.includes(\"mocha\"))) detected.test_runner = \"mocha\";\n    else if (allDeps.some((d) => d.includes(\"playwright\"))) detected.test_runner = \"playwright\";\n    else if (allDeps.some((d) => d.includes(\"cypress\"))) detected.test_runner = \"cypress\";\n\n    // Detect lint tools\n    if (allDeps.some((d) => d.includes(\"eslint\"))) detected.lint_tools.push(\"eslint\");\n    if (allDeps.some((d) => d.includes(\"prettier\"))) detected.lint_tools.push(\"prettier\");\n    if (allDeps.some((d) => d.includes(\"biome\"))) detected.lint_tools.push(\"biome\");\n    if (allDeps.some((d) => d.includes(\"stylelint\"))) detected.lint_tools.push(\"stylelint\");\n  } catch {\n    // ignore parse errors\n  }\n\n  // TypeScript strict mode\n  const tsconfigPath = resolve(targetDir, \"tsconfig.json\");\n  if (existsSync(tsconfigPath)) {\n    detected.project_language = \"typescript\";\n    try {\n      const tsconfig = JSON.parse(readFileSync(tsconfigPath, \"utf-8\"));\n      detected.strict_mode = tsconfig.compilerOptions?.strict === true;\n    } catch {\n      // ignore\n    }\n  }\n\n  return detected;\n}\n\nexport function initCommand(cwd: string, dir?: string, options: InitOptions = {}) {\n  const targetDir = dir ? resolve(cwd, dir) : cwd;\n  const codewrightDir = resolve(targetDir, \".codewright\");\n  const outputDir = resolve(targetDir, \".codewright-output\");\n  const agentsSkillsDir = resolve(targetDir, \".agents\", \"skills\");\n  const customDir = resolve(codewrightDir, \"custom\");\n  const rulesDir = resolve(codewrightDir, \"rules\");\n  const upgradeSkills = options.upgradeSkills === true;\n  const backupRoot = resolve(\n    codewrightDir,\n    \"skill-backups\",\n    new Date().toISOString().replace(/[:.]/g, \"-\"),\n  );\n\n  // Create directories\n  for (const d of [codewrightDir, outputDir, agentsSkillsDir, customDir, rulesDir]) {\n    if (!existsSync(d)) mkdirSync(d, { recursive: true });\n  }\n\n  // Auto-detect project stack\n  const detected = detectProjectStack(targetDir);\n\n  // Create .gitkeep in custom/\n  const gitkeepPath = resolve(customDir, \".gitkeep\");\n  if (!existsSync(gitkeepPath)) writeFileSync(gitkeepPath, \"\", \"utf-8\");\n\n  // Create .gitkeep in rules/\n  const rulesGitkeep = resolve(rulesDir, \".gitkeep\");\n  if (!existsSync(rulesGitkeep)) writeFileSync(rulesGitkeep, \"\", \"utf-8\");\n\n  // Create default rules file\n  const rulesPath = resolve(rulesDir, \"DEFAULT.md\");\n  if (!existsSync(rulesPath)) {\n    const rules = `# Project Rules\n\nAdd your project-specific rules here. These rules are loaded by codewright skills.\n\n## Code Style\n- Use consistent naming conventions\n- Follow existing patterns in the codebase\n- Write self-documenting code\n\n## Testing\n- Write tests for new features\n- Keep tests focused and isolated\n- Test edge cases\n\n## Documentation\n- Update docs when changing public APIs\n- Use JSDoc/TSDoc for functions\n- Keep README current\n`;\n    writeFileSync(rulesPath, rules, \"utf-8\");\n  }\n\n  // Create config.yaml with detected values\n  const configPath = resolve(codewrightDir, \"config.yaml\");\n  if (!existsSync(configPath)) {\n    const config = loadConfig(targetDir);\n    const framework = detected.framework ? `\\nframework: \"${detected.framework}\"` : \"\";\n    const testRunner = detected.test_runner ? `\\ntest_runner: \"${detected.test_runner}\"` : \"\";\n    const lintTools = detected.lint_tools.length > 0\n      ? `\\nlint_tools: [${detected.lint_tools.map((t) => `\"${t}\"`).join(\", \")}]`\n      : \"\";\n    const lang = detected.project_language ? `\\nproject_language: \"${detected.project_language}\"` : \"\";\n    const strict = detected.strict_mode !== undefined ? `\\nstrict_mode: ${detected.strict_mode}` : \"\";\n\n    const yaml = `codewright_version: \"${config.codewright_version}\"\nproject_name: \"${resolve(targetDir).split(\"/\").pop() || \"my-project\"}\"\nstack: \"${detected.framework || \"node\"}\"\ncommunication_language: \"en\"\noutput_folder: \".codewright-output\"\ncontext_file: \".codewright-output/project-context.md\"${framework}${testRunner}${lintTools}${lang}${strict}\n`;\n    writeFileSync(configPath, yaml, \"utf-8\");\n  }\n\n  // Create config.user.yaml (overrides, gitignored)\n  const userConfigPath = resolve(codewrightDir, \"config.user.yaml\");\n  if (!existsSync(userConfigPath)) {\n    const userYaml = `# User config overrides — not committed to git\n# Add this line to .gitignore: .codewright/config.user.yaml\n# Settings here override .codewright/config.yaml\n#\n# Example:\n# communication_language: \"en\"\n# project_name: \"my-project-override\"\n`;\n    writeFileSync(userConfigPath, userYaml, \"utf-8\");\n  }\n\n  // Create discoverable root AGENTS.md only when the project has none.\n  const agentsPath = resolve(targetDir, \"AGENTS.md\");\n  if (!existsSync(agentsPath)) {\n    const agents = `# Codewright Agent Instructions\n\nThis project uses Codewright for assisted development.\n\n## Flow\n\nInvocation syntax varies by agent (for example \\`$name\\`, \\`/name\\`, or \\`@name\\`). The canonical skill identifiers are:\n\n1. Idea → use \\`codewright-spec\\`\n2. Spec ready → use \\`codewright-architecture\\`\n3. Architecture ready → use \\`codewright-story\\`\n4. Before implementing → use \\`codewright-readiness\\`\n5. Story ready → use \\`codewright-dev\\`\n6. Implemented → use \\`codewright-review\\`\n7. Reviewed → use \\`codewright-commit\\`\n\n## Rules\n\n- Every implementation starts with an approved spec\n- Every story has an I/O Matrix with edge cases\n- Tasks are only complete with passing tests\n- Never implement outside the task scope\n- Load all applicable files in \\`.codewright/rules/\\` before Codewright work\n- Never expose environment-variable values or push without explicit approval\n`;\n    writeFileSync(agentsPath, agents, \"utf-8\");\n  }\n\n  // Install skills into .agents/skills/\n  installSkills(agentsSkillsDir, upgradeSkills, backupRoot);\n\n  // Persist target selection without silently removing adapters from earlier runs.\n  const previousManifest = readAgentManifest(targetDir);\n  const agentTargets = [...new Set([...previousManifest.targets, ...(options.agents || [])])];\n  const manifestPath = writeAgentManifest(targetDir, agentTargets);\n  const adapterResult = installAgentAdapters({\n    targetDir,\n    targets: agentTargets,\n    skillNames: SKILL_NAMES,\n    upgrade: upgradeSkills,\n    backupRoot,\n  });\n\n  // Auto-generate project context\n  const contextResult = contextGenerateCommand(targetDir);\n  const llmsResult = contextLlmsCommand(targetDir);\n\n  return {\n    codewrightDir,\n    outputDir,\n    agentsSkillsDir,\n    contextFile: contextResult.path,\n    llmsFile: llmsResult.path,\n    manifestPath,\n    agentTargets,\n    adapterFiles: adapterResult.installedFiles,\n    warnings: adapterResult.warnings,\n    detected,\n  };\n}\n\nfunction installSkills(agentsSkillsDir: string, upgrade: boolean, backupRoot: string) {\n  for (const skillName of SKILL_NAMES) {\n    const srcSkillDir = resolve(PACKAGE_SKILLS_DIR, skillName);\n    const srcSkillFile = resolve(srcSkillDir, \"SKILL.md\");\n    const destSkillDir = resolve(agentsSkillsDir, skillName);\n\n    if (!existsSync(srcSkillFile)) continue;\n    if (existsSync(destSkillDir) && !upgrade) continue;\n    if (existsSync(destSkillDir) && upgrade) {\n      const backupDir = resolve(backupRoot, skillName);\n      mkdirSync(backupDir, { recursive: true });\n      cpSync(destSkillDir, backupDir, { recursive: true, force: true });\n    }\n    if (!existsSync(destSkillDir)) mkdirSync(destSkillDir, { recursive: true });\n\n    const entries = readdirSync(srcSkillDir);\n    for (const entry of entries) {\n      const src = resolve(srcSkillDir, entry);\n      const dest = resolve(destSkillDir, entry);\n      cpSync(src, dest, { recursive: true, force: true });\n    }\n  }\n}\n","import { readFileSync, writeFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\nexport interface MemlogEntry {\n  type:\n    | \"decision\"\n    | \"constraint\"\n    | \"capability\"\n    | \"assumption\"\n    | \"question\"\n    | \"direction\"\n    | \"note\"\n    | \"event\";\n  text: string;\n  by?: string;\n}\n\nexport interface MemlogData {\n  frontmatter: Record<string, string>;\n  entries: MemlogEntry[];\n}\n\nfunction frontmatterToString(fm: Record<string, string>): string {\n  const lines = [\"---\"];\n  for (const [k, v] of Object.entries(fm)) {\n    if (v) lines.push(`${k}: ${v}`);\n  }\n  lines.push(\"---\", \"\");\n  return lines.join(\"\\n\");\n}\n\nfunction frontmatterFromString(raw: string): { frontmatter: Record<string, string>; body: string } {\n  const frontmatter: Record<string, string> = {};\n  if (!raw.startsWith(\"---\")) return { frontmatter, body: raw };\n\n  const endIndex = raw.indexOf(\"---\", 3);\n  if (endIndex === -1) return { frontmatter, body: raw };\n\n  const fmBlock = raw.slice(3, endIndex).trim();\n  const body = raw.slice(endIndex + 3).trim();\n\n  for (const line of fmBlock.split(\"\\n\")) {\n    const colonIdx = line.indexOf(\":\");\n    if (colonIdx > 0) {\n      const key = line.slice(0, colonIdx).trim();\n      const value = line.slice(colonIdx + 1).trim();\n      frontmatter[key] = value;\n    }\n  }\n\n  return { frontmatter, body };\n}\n\nfunction entryToLine(entry: MemlogEntry): string {\n  const by = entry.by ? ` @${entry.by}` : \"\";\n  return `- (${entry.type}) ${entry.text}${by}`;\n}\n\nfunction lineToEntry(line: string): MemlogEntry | null {\n  const match = line.match(/^\\s*-\\s*\\((\\w+)\\)\\s+(.+)/);\n  if (!match) return null;\n  const type = match[1] as MemlogEntry[\"type\"];\n  const rest = match[2];\n  const byMatch = rest.match(/(.+?)\\s+@(\\S+)$/);\n  if (byMatch) {\n    return { type, text: byMatch[1].trim(), by: byMatch[2] };\n  }\n  return { type, text: rest.trim() };\n}\n\nfunction getPath(ws: string): string {\n  return resolve(ws, \".memlog.md\");\n}\n\nfunction ensureDir(fp: string) {\n  const dir = dirname(fp);\n  if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n}\n\nfunction init(workspace: string, fields: Record<string, string>) {\n  const fp = getPath(workspace);\n  ensureDir(fp);\n  const fm = frontmatterToString({ ...fields, updated: new Date().toISOString() });\n  // Use atomic write\n  const tmp = fp + \".tmp\";\n  writeFileSync(tmp, fm, \"utf-8\");\n  writeFileSync(fp, fm, \"utf-8\");\n}\n\nfunction append(workspace: string, entry: MemlogEntry) {\n  const fp = getPath(workspace);\n  ensureDir(fp);\n  const existing = existsSync(fp) ? readFileSync(fp, \"utf-8\") : \"\";\n\n  let frontmatter: Record<string, string> = {};\n  let body: string;\n\n  if (existing.startsWith(\"---\")) {\n    const parsed = frontmatterFromString(existing);\n    frontmatter = parsed.frontmatter;\n    body = parsed.body;\n  } else {\n    body = existing.trim();\n  }\n\n  frontmatter.updated = new Date().toISOString();\n  const newLine = entryToLine(entry);\n  const content = frontmatterToString(frontmatter) + (body ? body + \"\\n\" : \"\") + newLine + \"\\n\";\n\n  const tmp = fp + \".tmp\";\n  writeFileSync(tmp, content, \"utf-8\");\n  writeFileSync(fp, content, \"utf-8\");\n}\n\nfunction set(workspace: string, key: string, value: string) {\n  const fp = getPath(workspace);\n  ensureDir(fp);\n  const existing = existsSync(fp) ? readFileSync(fp, \"utf-8\") : \"\";\n  const { frontmatter, body } = frontmatterFromString(existing);\n  frontmatter[key] = value;\n  frontmatter.updated = new Date().toISOString();\n  const content = frontmatterToString(frontmatter) + (body || \"\");\n\n  const tmp = fp + \".tmp\";\n  writeFileSync(tmp, content, \"utf-8\");\n  writeFileSync(fp, content, \"utf-8\");\n}\n\nfunction read(workspace: string): MemlogData {\n  const fp = getPath(workspace);\n  if (!existsSync(fp)) return { frontmatter: {}, entries: [] };\n  const raw = readFileSync(fp, \"utf-8\");\n  const { frontmatter, body } = frontmatterFromString(raw);\n  const entries: MemlogEntry[] = [];\n  for (const line of body.split(\"\\n\")) {\n    const entry = lineToEntry(line);\n    if (entry) entries.push(entry);\n  }\n  return { frontmatter, entries };\n}\n\nexport function memlog() {\n  return { init, append, set, read };\n}\n","export interface SpecTemplateOptions {\n  slug: string;\n  topic: string;\n  goal: string;\n  capabilities: Array<{ id: string; text: string }>;\n  constraints: string[];\n  decisions: string[];\n}\n\nexport function specTemplate(opts: SpecTemplateOptions): string {\n  const caps = opts.capabilities.length > 0\n    ? opts.capabilities.map((c) => `- **${c.id}**\\n  - **intent:** ${c.text}\\n  - **success:** {Testable or demonstrable criterion}`).join(\"\\n\")\n    : `- **CAP-1**\n  - **intent:** {What the system allows — WHAT, not HOW}\n  - **success:** {Testable or demonstrable criterion}`;\n\n  const constraints = opts.constraints.length > 0\n    ? opts.constraints.map((c) => `- ${c}`).join(\"\\n\")\n    : \"{Non-negotiable rules}\";\n\n  const decisions = opts.decisions.length > 0\n    ? opts.decisions.map((d) => `- ${d}`).join(\"\\n\")\n    : \"\";\n\n  return `---\nid: SPEC-${opts.slug}\ncompanions: []\nsources: []\n---\n\n# ${opts.topic}\n\n## Why\n${opts.goal || \"{Problem being solved. Business context.}\"}\n\n## Capabilities\n${caps}\n\n## Constraints\n${constraints}\n\n## Non-goals\n{What is NOT in scope}\n\n## Success signal\n{Concrete moment that proves it's done}\n${decisions ? `\\n## Architecture Decisions\\n${decisions}` : \"\"}\n`;\n}\n","import { resolve } from \"node:path\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { execFileSync, execSync } from \"node:child_process\";\nimport { loadConfig, resolveSpecDir } from \"../../config/loader.js\";\nimport { memlog } from \"../../memlog/memlog.js\";\nimport { specTemplate } from \"../../templates/spec-template.js\";\n\nexport interface SpecCreateOptions {\n  cwd: string;\n  slug: string;\n  input?: string;\n}\n\nexport function specCreateCommand(opts: SpecCreateOptions) {\n  const config = loadConfig(opts.cwd);\n  const specDir = resolveSpecDir(opts.cwd, config, opts.slug);\n\n  const ml = memlog();\n  ml.init(specDir, { topic: opts.slug, goal: \"\" });\n  ml.append(specDir, { type: \"note\", text: `Spec ${opts.slug} created` });\n\n  if (opts.input) {\n    const inputPath = resolve(opts.cwd, opts.input);\n    if (existsSync(inputPath)) {\n      const inputContent = readFileSync(inputPath, \"utf-8\");\n      ml.append(specDir, { type: \"note\", text: `Input loaded from ${opts.input}` });\n      ml.append(specDir, { type: \"note\", text: `---\\n${inputContent}\\n---` });\n    }\n  }\n\n  deriveSpec(specDir, opts.slug, config);\n  return { specDir };\n}\n\nexport function specUpdateCommand(cwd: string, slug: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n  deriveSpec(specDir, slug, config);\n  return { specDir };\n}\n\nfunction deriveSpec(specDir: string, slug: string, _config: { output_folder: string }) {\n  const ml = memlog();\n  const data = ml.read(specDir);\n\n  const topic = data.frontmatter.topic || slug;\n  const goal = data.frontmatter.goal || \"\";\n\n  const caps = data.entries\n    .filter((e) => e.type === \"capability\")\n    .map((e, i) => {\n      const match = e.text.match(/^CAP-\\d+:\\s*(.+)/);\n      return { id: `CAP-${i + 1}`, text: match ? match[1] : e.text };\n    });\n\n  const constraints = data.entries\n    .filter((e) => e.type === \"constraint\")\n    .map((e) => e.text);\n\n  const decisions = data.entries\n    .filter((e) => e.type === \"decision\")\n    .map((e) => e.text);\n\n  const content = specTemplate({ slug, topic, goal, capabilities: caps, constraints, decisions });\n\n  writeFileSync(resolve(specDir, \"SPEC.md\"), content, \"utf-8\");\n}\n\nexport function specHistoryCommand(cwd: string, slug: string): string {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n\n  if (!existsSync(specDir)) {\n    return `Error: Spec '${slug}' not found`;\n  }\n\n  try {\n    const log = execFileSync(\"git\", [\"log\", \"--oneline\", \"--format=%h %ad %s\", \"--date=short\", \"-20\", \"--\", \".\"], {\n      cwd: specDir, encoding: \"utf-8\",\n    }).trim();\n\n    if (!log) {\n      return `No version history for spec '${slug}'`;\n    }\n\n    return `Version history for '${slug}':\\n${log}`;\n  } catch {\n    return `Error: Could not read git history for spec '${slug}'`;\n  }\n}\n\nexport function specDiffCommand(cwd: string, slug: string, from?: string): string {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n\n  if (!existsSync(specDir)) {\n    return `Error: Spec '${slug}' not found`;\n  }\n\n  try {\n    const fromRef = from || \"HEAD~1\";\n    const diff = execFileSync(\"git\", [\"diff\", `${fromRef}..HEAD`, \"--\", \".\"], {\n      cwd: specDir, encoding: \"utf-8\",\n    }).trim();\n\n    if (!diff) {\n      return `No changes between ${fromRef} and HEAD for spec '${slug}'`;\n    }\n\n    return `Diff for spec '${slug}' (${fromRef}..HEAD):\\n${diff}`;\n  } catch {\n    return `Error: Could not generate diff for spec '${slug}'`;\n  }\n}\n\nexport function specVersionCommand(cwd: string, slug: string): string {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n\n  if (!existsSync(specDir)) {\n    return `Error: Spec '${slug}' not found`;\n  }\n\n  try {\n    // Stage all changes in spec directory\n    execFileSync(\"git\", [\"add\", \"--\", \".\"], { cwd: specDir });\n\n    // Check if there are changes to commit\n    const status = execSync(\"git status --porcelain\", {\n      cwd: specDir,\n      encoding: \"utf-8\",\n    }).trim();\n\n    if (!status) {\n      return `No changes to version for spec '${slug}'`;\n    }\n\n    // Create version commit\n    const timestamp = new Date().toISOString().split(\"T\")[0];\n    execFileSync(\"git\", [\"commit\", \"-m\", `version: ${slug} ${timestamp}`], { cwd: specDir });\n\n    // Get the commit hash\n    const hash = execSync(\"git rev-parse --short HEAD\", {\n      cwd: specDir,\n      encoding: \"utf-8\",\n    }).trim();\n\n    return `✓ Version created for spec '${slug}' (commit ${hash})`;\n  } catch {\n    return `Error: Could not create version for spec '${slug}'`;\n  }\n}\n\nexport function specSyncCommand(cwd: string, slug: string): string {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n\n  if (!existsSync(specDir)) {\n    return `Error: Spec '${slug}' not found`;\n  }\n\n  try {\n    // Read SPEC.md to extract requirements\n    const specPath = resolve(specDir, \"SPEC.md\");\n    if (!existsSync(specPath)) {\n      return `Error: SPEC.md not found for spec '${slug}'`;\n    }\n\n    const specContent = readFileSync(specPath, \"utf-8\");\n\n    // Extract capabilities from SPEC.md\n    const capRegex = /\\*\\*CAP-\\d+\\*\\*\\s*\\n\\s*-\\s*\\*\\*intent:\\*\\*\\s*(.+)/g;\n    const caps: string[] = [];\n    let match;\n    while ((match = capRegex.exec(specContent)) !== null) {\n      caps.push(match[1].trim());\n    }\n\n    // Scan source files for implementation\n    const srcDir = resolve(cwd, \"src\");\n    const sourceFiles: string[] = [];\n\n    if (existsSync(srcDir)) {\n      const files = execSync(\"find . -name '*.ts' -o -name '*.tsx' -o -name '*.js' -o -name '*.jsx' -not -path '*/node_modules/*' -not -path '*/dist/*' | head -30\", {\n        cwd,\n        encoding: \"utf-8\",\n      }).trim().split(\"\\n\").filter(f => f);\n\n      for (const file of files) {\n        try {\n          const content = readFileSync(resolve(cwd, file), \"utf-8\");\n          sourceFiles.push(`${file}: ${content.length} chars`);\n        } catch {\n          // skip\n        }\n      }\n    }\n\n    // Build sync report\n    let report = `Spec Sync Report: '${slug}'\\n\\n`;\n    report += `Requirements found in SPEC.md: ${caps.length}\\n`;\n    for (const cap of caps) {\n      report += `  - ${cap}\\n`;\n    }\n\n    report += `\\nSource files scanned: ${sourceFiles.length}\\n`;\n    for (const file of sourceFiles.slice(0, 10)) {\n      report += `  - ${file}\\n`;\n    }\n\n    report += `\\nNote: This is a basic sync check. For full validation, use codewright:readiness skill.`;\n\n    return report;\n  } catch {\n    return `Error: Could not sync spec '${slug}'`;\n  }\n}\n","export interface StoryTemplateOptions {\n  story_id: string;\n  story_title: string;\n  phase: string;\n  spec_name: string;\n}\n\nexport function storyTemplate(opts: StoryTemplateOptions): string {\n  return `---\nid: ${opts.story_id}\nstatus: pending # pending | in-progress | review | done\nbaseline_commit:\nphase: ${opts.phase}\nspec: ${opts.spec_name}\n---\n\n# ${opts.story_title}\n\n## Intent\nProblem: {what problem it solves}\nApproach: {how it will solve}\n\n## Boundaries & Constraints\n- Always: {always do}\n- Ask First: {ask before}\n- Never: {never do}\n\n## I/O & Edge-Case Matrix\n| # | Scenario | Input | Expected Output |\n|---|----------|-------|-----------------|\n| 1 | Success  |       |                 |\n| 2 |          |       |                 |\n\n## Code Map\n- {file} (CREATE | MODIFY | DELETE)\n\n## Tasks\n- [ ] Task 1\n  - [ ] Subtask 1.1\n  - [ ] Subtask 1.2\n- [ ] Task 2\n\n## Change Log\n`;\n}\n","import { resolve } from \"node:path\";\nimport { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { loadConfig, resolveSpecDir } from \"../../config/loader.js\";\nimport { writeArtifact } from \"../../artifacts/writer.js\";\nimport { storyTemplate } from \"../../templates/story-template.js\";\n\nexport interface StoryCreateOptions {\n  cwd: string;\n  spec: string;\n  id: string;\n  title: string;\n  phase?: string;\n}\n\nexport function storyCreateCommand(opts: StoryCreateOptions) {\n  const config = loadConfig(opts.cwd);\n\n  const storyId = opts.id;\n  const filename = `${storyId}-${opts.title.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\")}.md`;\n\n  const content = storyTemplate({\n    story_id: storyId,\n    story_title: opts.title,\n    phase: opts.phase || \"1\",\n    spec_name: opts.spec,\n  });\n\n  const path = writeArtifact({\n    cwd: opts.cwd,\n    outputFolder: config.output_folder,\n    subpath: `specs/spec-${opts.spec}/stories`,\n    filename,\n    content,\n  });\n\n  return { path, filename };\n}\n\nexport function storyListCommand(cwd: string, spec: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, spec);\n  const storiesDir = resolve(specDir, \"stories\");\n\n  if (!existsSync(storiesDir)) return [];\n\n  const stories: Array<{ id: string; title: string; status: string; file: string }> = [];\n  for (const file of readdirSync(storiesDir).filter((f: string) => f.endsWith(\".md\"))) {\n    const content = readFileSync(resolve(storiesDir, file), \"utf-8\");\n    const idMatch = content.match(/^id:\\s*(.+)/m);\n    const statusMatch = content.match(/^status:\\s*(\\S+)/m);\n    const titleMatch = content.match(/^#\\s+(.+)/m);\n    stories.push({\n      id: idMatch?.[1] || \"unknown\",\n      title: titleMatch?.[1] || file,\n      status: statusMatch?.[1]?.trim() || \"unknown\",\n      file,\n    });\n  }\n\n  return stories;\n}\n","import { execSync } from \"node:child_process\";\nimport { readFileSync, existsSync, readdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig, resolveSpecDir } from \"../../config/loader.js\";\nimport { writeArtifact } from \"../../artifacts/writer.js\";\n\nexport function devStartCommand(cwd: string, spec: string, storyId: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, spec);\n  const storiesDir = resolve(specDir, \"stories\");\n\n  if (!existsSync(storiesDir)) {\n    throw new Error(`No stories directory found for spec '${spec}'`);\n  }\n\n  const files = readdirSync(storiesDir).filter((f: string) => f.startsWith(storyId));\n  if (files.length === 0) {\n    throw new Error(`Story '${storyId}' not found in spec '${spec}'`);\n  }\n\n  const storyFile = files[0];\n  const storyPath = resolve(storiesDir, storyFile);\n  let content = readFileSync(storyPath, \"utf-8\");\n\n  content = content.replace(/^status:\\s*pending/m, \"status: in-progress\");\n\n  let baseline = \"unknown\";\n  try {\n    baseline = execSync(\"git rev-parse HEAD\", { cwd, encoding: \"utf-8\" }).trim();\n    content = content.replace(/^baseline_commit:\\s*$/m, `baseline_commit: ${baseline}`);\n  } catch {\n    content = content.replace(/^baseline_commit:\\s*$/m, `baseline_commit: none`);\n  }\n\n  writeArtifact({\n    cwd,\n    outputFolder: config.output_folder,\n    subpath: `specs/spec-${spec}/stories`,\n    filename: storyFile,\n    content,\n  });\n\n  return {\n    story: `${storyId} (${storyFile})`,\n    baseline_commit: baseline,\n    instructions: `Implement story ${storyId} following TDD (RED → GREEN → REFACTOR).\nKeep scope limited to the Code Map and I/O Matrix.\nUpon completion, mark tasks as done and change status to \"review\".`,\n  };\n}\n\nexport function reviewPrepareCommand(cwd: string, spec: string, storyId: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, spec);\n  const storiesDir = resolve(specDir, \"stories\");\n\n  const files = readdirSync(storiesDir).filter((f: string) => f.startsWith(storyId));\n  if (files.length === 0) throw new Error(`Story '${storyId}' not found`);\n\n  const storyPath = resolve(storiesDir, files[0]);\n  const content = readFileSync(storyPath, \"utf-8\");\n\n  const baselineMatch = content.match(/^baseline_commit:\\s*(.+)/m);\n  const baseline = baselineMatch?.[1]?.trim() || \"none\";\n\n  let diff = \"No baseline commit available.\";\n  if (baseline !== \"none\") {\n    try {\n      diff = execSync(`git diff ${baseline}..HEAD`, { cwd, encoding: \"utf-8\" });\n    } catch {\n      diff = \"Could not generate diff from baseline.\";\n    }\n  }\n\n  const reviewContent = `# Review: ${storyId}\n\n## Diff\n\\`\\`\\`\n${diff.slice(0, 5000)}\n\\`\\`\\`\n\n## Checklist\n- [ ] Functionality implemented per I/O Matrix\n- [ ] Edge cases covered\n- [ ] Tests passing\n- [ ] Code follows project patterns\n- [ ] No regressions\n- [ ] Documentation updated (if applicable)\n\n## Notes\n{reviewer notes}\n`;\n\n  const reviewFile = writeArtifact({\n    cwd,\n    outputFolder: config.output_folder,\n    subpath: `specs/spec-${spec}/reviews`,\n    filename: `review-${storyId}.md`,\n    content: reviewContent,\n  });\n\n  return { reviewFile, baseline, diff: diff.slice(0, 2000) };\n}\n","import { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { relative, resolve } from \"node:path\";\nimport { loadConfig, resolveSpecDir } from \"../../config/loader.js\";\nimport { writeArtifact } from \"../../artifacts/writer.js\";\n\nexport interface CommitOptions {\n  branch?: string;\n  amend?: boolean;\n  push?: boolean;\n  dryRun?: boolean;\n}\n\nexport interface CommitResult {\n  branch: string;\n  commitHash: string | null;\n  filesChanged: number;\n  storyUpdated: boolean;\n  pushed: boolean;\n  plannedFiles: string[];\n}\n\nfunction git(cwd: string, args: string[]): string {\n  return execFileSync(\"git\", args, { cwd, encoding: \"utf-8\" }).trim();\n}\n\nfunction storySlug(title: string): string {\n  return title.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\n}\n\nfunction parseCodeMap(content: string): string[] {\n  const section = content.match(/## Code Map\\s*\\n([\\s\\S]*?)(?=\\n## |\\s*$)/)?.[1] || \"\";\n  return section.split(\"\\n\").map((line) => line.match(/^\\s*-\\s+(.+?)\\s+\\((?:CREATE|MODIFY|DELETE)\\)\\s*$/)?.[1])\n    .filter((value): value is string => Boolean(value));\n}\n\nfunction changedFiles(cwd: string): string[] {\n  const output = git(cwd, [\"status\", \"--porcelain\", \"--untracked-files=all\"]);\n  return output ? output.split(\"\\n\").map((line) => line.slice(3).replace(/^.* -> /, \"\")) : [];\n}\n\nfunction updateStoryStatus(content: string, branch: string): string {\n  let updated = content.replace(/^status:\\s*(?:pending|in-progress|review).*$/m, \"status: done\");\n  const date = new Date().toISOString().split(\"T\")[0];\n  const entry = `- ${date}: Committed as part of branch \\`${branch}\\``;\n  if (updated.includes(\"## Change Log\")) {\n    updated = updated.replace(\"## Change Log\", `## Change Log\\n${entry}`);\n  } else {\n    updated += `\\n## Change Log\\n${entry}\\n`;\n  }\n  return updated;\n}\n\nexport function commitCommand(cwd: string, spec: string, storyId: string, options: CommitOptions = {}): CommitResult {\n  try {\n    git(cwd, [\"rev-parse\", \"--git-dir\"]);\n  } catch {\n    throw new Error(\"Not a git repository\");\n  }\n\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, spec);\n  const storiesDir = resolve(specDir, \"stories\");\n  if (!existsSync(storiesDir)) throw new Error(`No stories directory found for spec '${spec}'`);\n\n  const files = readdirSync(storiesDir).filter((file) => file.startsWith(storyId));\n  if (files.length === 0) throw new Error(`Story '${storyId}' not found in spec '${spec}'`);\n\n  const storyFile = files[0];\n  const storyPath = resolve(storiesDir, storyFile);\n  const content = readFileSync(storyPath, \"utf-8\");\n  const title = content.match(/^#\\s+(.+)/m)?.[1]?.trim() || storyId;\n  const branch = options.branch || `story/${storyId}-${storySlug(title)}`;\n\n  try {\n    git(cwd, [\"rev-parse\", \"--verify\", branch]);\n    throw new Error(`Branch '${branch}' already exists`);\n  } catch (error) {\n    if (error instanceof Error && error.message.includes(\"already exists\")) throw error;\n  }\n\n  const status = content.match(/^status:\\s*([^\\s#]+)/m)?.[1];\n  if (status !== \"in-progress\" && status !== \"review\") {\n    throw new Error(`Story status must be in-progress or review before commit (found ${status || \"missing\"})`);\n  }\n\n  const storyRelative = relative(cwd, storyPath);\n  const reviewRelative = relative(cwd, resolve(specDir, \"reviews\", `review-${storyId}.md`));\n  const codeMap = parseCodeMap(content);\n  if (codeMap.length === 0) throw new Error(\"Story Code Map is empty or invalid\");\n\n  const allowed = new Set([...codeMap, storyRelative]);\n  if (existsSync(resolve(cwd, reviewRelative))) allowed.add(reviewRelative);\n\n  const staged = git(cwd, [\"diff\", \"--cached\", \"--name-only\"]).split(\"\\n\").filter(Boolean);\n  const unrelatedStaged = staged.filter((file) => !allowed.has(file));\n  if (unrelatedStaged.length > 0) {\n    throw new Error(`Unrelated staged changes detected: ${unrelatedStaged.join(\", \")}`);\n  }\n\n  const plannedFiles = changedFiles(cwd).filter((file) => allowed.has(file));\n  const implementationFiles = plannedFiles.filter((file) => file !== storyRelative && file !== reviewRelative);\n  if (implementationFiles.length === 0) {\n    return { branch, commitHash: null, filesChanged: 0, storyUpdated: false, pushed: false, plannedFiles: [] };\n  }\n  if (options.dryRun) {\n    const previewFiles = [...new Set([...plannedFiles, storyRelative])];\n    return { branch, commitHash: null, filesChanged: previewFiles.length, storyUpdated: false, pushed: false, plannedFiles: previewFiles };\n  }\n\n  writeArtifact({\n    cwd,\n    outputFolder: config.output_folder,\n    subpath: `specs/spec-${spec}/stories`,\n    filename: storyFile,\n    content: updateStoryStatus(content, branch),\n  });\n\n  const filesToStage = changedFiles(cwd).filter((file) => allowed.has(file));\n  git(cwd, [\"add\", \"--\", ...filesToStage]);\n  git(cwd, [\"checkout\", \"-b\", branch]);\n\n  const message = `feat(${storySlug(title)}): ${title} (#${storyId})`;\n  git(cwd, options.amend ? [\"commit\", \"--amend\", \"-m\", message] : [\"commit\", \"-m\", message]);\n  let pushed = false;\n  if (options.push) {\n    git(cwd, [\"push\", \"-u\", \"origin\", branch]);\n    pushed = true;\n  }\n\n  return {\n    branch,\n    commitHash: git(cwd, [\"rev-parse\", \"--short\", \"HEAD\"]),\n    filesChanged: filesToStage.length,\n    storyUpdated: true,\n    pushed,\n    plannedFiles: filesToStage,\n  };\n}\n","import { existsSync, mkdirSync, writeFileSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nconst PRE_COMMIT_HOOK = `#!/bin/sh\n# Codewright pre-commit hook\n# Installed by \\`codewright hook install\\`\n\necho \"🔍 Codewright: Running pre-commit checks...\"\n\n# Check for TODO/FIXME in staged files\nSTAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)\nHAS_ISSUES=0\n\nfor FILE in $STAGED_FILES; do\n  if [ -f \"$FILE\" ]; then\n    # Check for TODO/FIXME without ticket number\n    grep -n \"TODO:\\|FIXME:\" \"$FILE\" 2>/dev/null | grep -v \"TODO:[A-Z]\\+-\" > /dev/null 2>&1\n    if [ $? -eq 0 ]; then\n      echo \"  ⚠️  $FILE has TODO/FIXME without ticket number\"\n      HAS_ISSUES=1\n    fi\n\n    # Check for debugger statements\n    grep -n \"debugger\\|console\\.log\" \"$FILE\" 2>/dev/null | head -5 > /dev/null 2>&1\n    if [ $? -eq 0 ]; then\n      echo \"  ⚠️  $FILE has debugger/console.log statements\"\n      HAS_ISSUES=1\n    fi\n  fi\ndone\n\nif [ $HAS_ISSUES -eq 1 ]; then\n  echo \"⚠️  Codewright: Found issues (not blocking)\"\nfi\n\necho \"✓ Codewright: Pre-commit checks complete\"\nexit 0\n`;\n\nconst COMMIT_MSG_HOOK = `#!/bin/sh\n# Codewright commit-msg hook\n# Installed by \\`codewright hook install\\`\n\nCOMMIT_MSG_FILE=$1\nCOMMIT_MSG=$(cat \"$COMMIT_MSG_FILE\")\n\n# Check conventional commit format\necho \"🔍 Codewright: Checking commit message...\"\n\nif ! echo \"$COMMIT_MSG\" | grep -qE \"^(feat|fix|docs|style|refactor|test|chore|ci|perf|build|revert)(\\(.+\\))?!?: .{1,}$\"; then\n  echo \"\"\n  echo \"⚠️  Invalid commit message format.\"\n  echo \"\"\n  echo \"Expected: type(scope): description\"\n  echo \"\"\n  echo \"Valid types: feat, fix, docs, style, refactor, test, chore, ci, perf, build, revert\"\n  echo \"\"\n  echo \"Example: feat(auth): add login feature\"\n  echo \"\"\nfi\n\necho \"✓ Codewright: Commit message check complete\"\nexit 0\n`;\n\nexport function hookInstallCommand(cwd: string) {\n  const codewrightHookDir = resolve(cwd, \".codewright\", \"hooks\");\n  const gitHookDir = resolve(cwd, \".git\", \"hooks\");\n\n  if (!existsSync(gitHookDir)) {\n    return \"Error: No .git/hooks directory found. Is this a git repository?\";\n  }\n\n  // Create .codewright/hooks directory\n  if (!existsSync(codewrightHookDir)) mkdirSync(codewrightHookDir, { recursive: true });\n\n  const hooks = [\n    { name: \"pre-commit\", content: PRE_COMMIT_HOOK },\n    { name: \"commit-msg\", content: COMMIT_MSG_HOOK },\n  ];\n\n  let installed = 0;\n  for (const hook of hooks) {\n    const hookPath = resolve(codewrightHookDir, hook.name);\n    const gitHookPath = resolve(gitHookDir, hook.name);\n\n    // Write hook to .codewright/hooks\n    writeFileSync(hookPath, hook.content, { mode: 0o755 });\n\n    // Symlink or copy to .git/hooks\n    if (!existsSync(gitHookPath)) {\n      writeFileSync(gitHookPath, hook.content, { mode: 0o755 });\n      installed++;\n    } else {\n      // Backup existing hook and create a wrapper\n      const existingContent = readFileSync(gitHookPath, \"utf-8\");\n      if (!existingContent.includes(\"Codewright\")) {\n        const backupPath = resolve(gitHookDir, `${hook.name}.backup`);\n        writeFileSync(backupPath, existingContent, { mode: 0o755 });\n        // Write wrapper that runs both\n        const wrapper = `#!/bin/sh\n# Codewright wrapper - preserves the existing hook, then runs Codewright\nif [ -f \"${backupPath}\" ]; then\n  sh \"${backupPath}\" \"$@\" || exit $?\nfi\nif [ -f \"${hookPath}\" ]; then\n  sh \"${hookPath}\" \"$@\" || exit $?\nfi\n`;\n        writeFileSync(gitHookPath, wrapper, { mode: 0o755 });\n        installed++;\n      }\n    }\n  }\n\n  return `✓ Installed ${installed} git hooks:\n  - pre-commit (checks TODO/FIXME, debugger statements)\n  - commit-msg (validates conventional commit format)\n\nHooks stored in .codewright/hooks/`;\n}\n\nexport function hookUninstallCommand(cwd: string) {\n  const gitHookDir = resolve(cwd, \".git\", \"hooks\");\n  const codewrightHookDir = resolve(cwd, \".codewright\", \"hooks\");\n  if (!existsSync(gitHookDir)) return \"No .git/hooks directory found.\";\n\n  let removed = 0;\n  for (const hook of [\"pre-commit\", \"commit-msg\"]) {\n    const gitHookPath = resolve(gitHookDir, hook);\n    const managedPath = resolve(codewrightHookDir, hook);\n    const backupPath = resolve(gitHookDir, hook + \".backup\");\n    if (existsSync(backupPath)) {\n      writeFileSync(gitHookPath, readFileSync(backupPath), { mode: 0o755 });\n      unlinkSync(backupPath);\n      removed++;\n    } else if (existsSync(gitHookPath) && readFileSync(gitHookPath, \"utf-8\").includes(\"Codewright\")) {\n      unlinkSync(gitHookPath);\n      removed++;\n    }\n    if (existsSync(managedPath)) unlinkSync(managedPath);\n  }\n  return \"✓ Removed \" + removed + \" Codewright hook(s) and restored available backups.\";\n}\n\nexport function hookListCommand(cwd: string) {\n  const gitHookDir = resolve(cwd, \".git\", \"hooks\");\n  const codewrightHookDir = resolve(cwd, \".codewright\", \"hooks\");\n\n  if (!existsSync(gitHookDir)) {\n    return \"No .git/hooks directory found.\";\n  }\n\n  const hooks = [\"pre-commit\", \"commit-msg\", \"pre-push\", \"post-commit\"];\n  const result: string[] = [\"Git hooks:\"];\n\n  for (const hook of hooks) {\n    const gitHook = resolve(gitHookDir, hook);\n    const cwHook = resolve(codewrightHookDir, hook);\n    if (existsSync(gitHook)) {\n      const type = existsSync(cwHook) ? \" (codewright)\" : \"\";\n      result.push(`  - ${hook}${type}`);\n    } else {\n      result.push(`  - ${hook} (not installed)`);\n    }\n  }\n\n  return result.join(\"\\n\");\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig } from \"../../config/loader.js\";\n\nconst CHECKOUT = \"actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8\"; // v5.0.0\nconst SETUP_NODE = \"actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444\"; // v5.0.0\nconst SETUP_PYTHON = \"actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c\"; // v6.0.0\nconst SETUP_GO = \"actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00\"; // v6.0.0\n\nfunction workflowHeader(): string {\n  const workflow = \"$\" + \"{{ github.workflow }}\";\n  const ref = \"$\" + \"{{ github.ref }}\";\n  return `name: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\npermissions:\n  contents: read\n\nconcurrency:\n  group: ci-${workflow}-${ref}\n  cancel-in-progress: true\n`;\n}\n\nfunction generateNodeWorkflow(cwd: string): string {\n  const pkg = JSON.parse(readFileSync(resolve(cwd, \"package.json\"), \"utf-8\")) as {\n    engines?: { node?: string };\n    scripts?: Record<string, string>;\n  };\n  const scripts = pkg.scripts || {};\n  const nodeVersion = pkg.engines?.node?.match(/\\d+/)?.[0] || \"24\";\n  let packageManager: \"npm\" | \"pnpm\" | \"yarn\";\n  let install: string;\n  let lockfile: string;\n\n  if (existsSync(resolve(cwd, \"pnpm-lock.yaml\"))) {\n    packageManager = \"pnpm\";\n    install = \"pnpm install --frozen-lockfile\";\n    lockfile = \"pnpm-lock.yaml\";\n  } else if (existsSync(resolve(cwd, \"yarn.lock\"))) {\n    packageManager = \"yarn\";\n    install = \"yarn install --immutable\";\n    lockfile = \"yarn.lock\";\n  } else if (existsSync(resolve(cwd, \"package-lock.json\"))) {\n    packageManager = \"npm\";\n    install = \"npm ci\";\n    lockfile = \"package-lock.json\";\n  } else {\n    throw new Error(\"A lockfile is required before generating deterministic Node.js CI\");\n  }\n\n  const run = (name: string) => packageManager === \"npm\" ? `npm run ${name}` : `${packageManager} ${name}`;\n  const checks = [\"build\", \"typecheck\", \"lint\", \"test\"].filter((name) => scripts[name])\n    .map((name) => `      - run: ${run(name)}`);\n  if (checks.length === 0) checks.push(\"      - run: echo 'No verification scripts declared in package.json'\");\n  const steps = packageManager === \"npm\" ? [] : [\"      - run: corepack enable\"];\n  steps.push(`      - run: ${install}`, ...checks);\n\n  return workflowHeader() + `\njobs:\n  test:\n    runs-on: ubuntu-latest\n    timeout-minutes: 20\n    steps:\n      - uses: ${CHECKOUT}\n      - uses: ${SETUP_NODE}\n        with:\n          node-version: \"${nodeVersion}\"\n          cache: \"${packageManager}\"\n          cache-dependency-path: \"${lockfile}\"\n${steps.join(\"\\n\")}\n`;\n}\n\nfunction generatePythonWorkflow(cwd: string): string {\n  const versionPath = resolve(cwd, \".python-version\");\n  const version = existsSync(versionPath) ? readFileSync(versionPath, \"utf-8\").trim() : \"3.14\";\n  const install = existsSync(resolve(cwd, \"requirements.txt\"))\n    ? \"python -m pip install -r requirements.txt\"\n    : existsSync(resolve(cwd, \"pyproject.toml\"))\n      ? \"python -m pip install .\"\n      : \"echo 'No Python dependency manifest found' && exit 1\";\n  return workflowHeader() + `\njobs:\n  test:\n    runs-on: ubuntu-latest\n    timeout-minutes: 20\n    steps:\n      - uses: ${CHECKOUT}\n      - uses: ${SETUP_PYTHON}\n        with:\n          python-version: \"${version}\"\n          cache: \"pip\"\n      - run: ${install}\n      - run: python -m pytest\n`;\n}\n\nfunction generateGoWorkflow(cwd: string): string {\n  const goMod = readFileSync(resolve(cwd, \"go.mod\"), \"utf-8\");\n  const version = goMod.match(/^go\\s+(\\d+\\.\\d+)/m)?.[1] || \"1.26\";\n  return workflowHeader() + `\njobs:\n  test:\n    runs-on: ubuntu-latest\n    timeout-minutes: 20\n    steps:\n      - uses: ${CHECKOUT}\n      - uses: ${SETUP_GO}\n        with:\n          go-version: \"${version}\"\n          cache: true\n      - run: go mod download\n      - run: go test ./...\n      - run: go vet ./...\n`;\n}\n\nexport function ciGenerateCommand(cwd: string, options: { force?: boolean } = {}) {\n  const config = loadConfig(cwd);\n  const workflowDir = resolve(cwd, \".github\", \"workflows\");\n  const workflowPath = resolve(workflowDir, \"ci.yml\");\n  if (existsSync(workflowPath) && !options.force) {\n    return `CI workflow already exists at ${workflowPath}. Review it or rerun with --force to replace it.`;\n  }\n  if (!existsSync(workflowDir)) mkdirSync(workflowDir, { recursive: true });\n\n  const stack = config.stack || \"node\";\n  const workflow = stack === \"python\" || config.project_language === \"python\"\n    ? generatePythonWorkflow(cwd)\n    : stack === \"go\" || config.project_language === \"go\"\n      ? generateGoWorkflow(cwd)\n      : generateNodeWorkflow(cwd);\n  writeFileSync(workflowPath, workflow, \"utf-8\");\n  return `✓ CI workflow generated at .github/workflows/ci.yml\n\nStack: ${stack}\nSecurity: read-only token permissions, full-SHA action pins, timeout, and concurrency cancellation`;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\n\ninterface RunResult {\n  stdout: string;\n  stderr: string;\n  status: number | null;\n}\n\nfunction run(cwd: string, command: string, args: string[]): RunResult {\n  const result = spawnSync(command, args, { cwd, encoding: \"utf-8\", timeout: 120_000 });\n  return { stdout: result.stdout || \"\", stderr: result.stderr || \"\", status: result.status };\n}\n\nfunction nodeReport(cwd: string): string {\n  const pkg = JSON.parse(readFileSync(resolve(cwd, \"package.json\"), \"utf-8\"));\n  const total = Object.keys({ ...pkg.dependencies, ...pkg.devDependencies }).length;\n  const outdated = run(cwd, \"npm\", [\"outdated\", \"--json\"]);\n  const audit = run(cwd, \"npm\", [\"audit\", \"--json\"]);\n  const lines = [`Dependency Check (Node.js)`, `Total direct dependencies: ${total}`];\n\n  try {\n    const parsed = JSON.parse(outdated.stdout || \"{}\") as Record<string, { current?: string; latest?: string }>;\n    const entries = Object.entries(parsed);\n    lines.push(entries.length ? `Outdated packages (${entries.length}):` : \"Outdated packages: none\");\n    lines.push(...entries.slice(0, 20).map(([name, value]) => `  - ${name}: ${value.current || \"unknown\"} → ${value.latest || \"unknown\"}`));\n  } catch {\n    lines.push(\"Outdated packages: unknown (registry response could not be parsed)\");\n  }\n\n  try {\n    const parsed = JSON.parse(audit.stdout || \"{}\") as { metadata?: { vulnerabilities?: Record<string, number> } };\n    const vulnerabilities = parsed.metadata?.vulnerabilities;\n    lines.push(vulnerabilities\n      ? `Known vulnerabilities: ${Object.entries(vulnerabilities).map(([key, value]) => `${key}=${value}`).join(\", \")}`\n      : \"Known vulnerabilities: none reported\");\n  } catch {\n    lines.push(\"Known vulnerabilities: unknown (audit unavailable or response could not be parsed)\");\n  }\n  return lines.join(\"\\n\");\n}\n\nfunction pythonReport(cwd: string): string {\n  const python = run(cwd, \"python3\", [\"-m\", \"pip\", \"list\", \"--outdated\", \"--format=json\"]);\n  if (python.status === null) return \"Dependency Check (Python)\\nOutdated packages: unknown (python3 unavailable)\";\n  try {\n    const entries = JSON.parse(python.stdout) as Array<{ name: string; version: string; latest_version: string }>;\n    return [\"Dependency Check (Python)\", `Outdated packages (${entries.length}):`,\n      ...entries.slice(0, 20).map((entry) => `  - ${entry.name}: ${entry.version} → ${entry.latest_version}`),\n      \"Known vulnerabilities: run pip-audit when it is installed; no automatic upgrade was performed.\",\n    ].join(\"\\n\");\n  } catch {\n    return \"Dependency Check (Python)\\nOutdated packages: unknown (pip response could not be parsed)\";\n  }\n}\n\nfunction goReport(cwd: string): string {\n  const result = run(cwd, \"go\", [\"list\", \"-m\", \"-u\", \"all\"]);\n  if (result.status !== 0) return \"Dependency Check (Go)\\nModule status: unknown (go list failed)\";\n  const outdated = result.stdout.split(\"\\n\").filter((line) => /\\[.*\\]$/.test(line));\n  return [\"Dependency Check (Go)\", `Outdated modules (${outdated.length}):`,\n    ...outdated.slice(0, 20).map((line) => `  - ${line}`),\n    \"Known vulnerabilities: run govulncheck when it is installed; no automatic upgrade was performed.\",\n  ].join(\"\\n\");\n}\n\nexport function depsCheckCommand(cwd: string): string {\n  if (existsSync(resolve(cwd, \"package.json\"))) return nodeReport(cwd);\n  if (existsSync(resolve(cwd, \"pyproject.toml\")) || existsSync(resolve(cwd, \"requirements.txt\"))) return pythonReport(cwd);\n  if (existsSync(resolve(cwd, \"go.mod\"))) return goReport(cwd);\n  return \"No supported dependency manifest found (package.json, pyproject.toml/requirements.txt, or go.mod).\";\n}\n","import { existsSync, readFileSync, readdirSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig, resolveSpecDir } from \"../../config/loader.js\";\n\ninterface IoScenario {\n  number: number;\n  scenario: string;\n  input: string;\n  expected: string;\n}\n\nfunction parseIoMatrix(content: string): IoScenario[] {\n  const scenarios: IoScenario[] = [];\n  const lines = content.split(\"\\n\");\n  let inMatrix = false;\n\n  for (const line of lines) {\n    if (line.includes(\"I/O & Edge-Case Matrix\") || line.includes(\"I/O & Edge Case Matrix\")) {\n      inMatrix = true;\n      continue;\n    }\n    if (inMatrix && line.startsWith(\"## \")) {\n      inMatrix = false;\n      continue;\n    }\n    if (inMatrix && line.startsWith(\"|\") && !line.startsWith(\"|---\") && !line.startsWith(\"| #\")) {\n      const parts = line.split(\"|\").slice(1, -1).map((p) => p.trim());\n      if (parts.length >= 2) {\n        const num = parseInt(parts[0], 10);\n        if (!isNaN(num)) {\n          scenarios.push({\n            number: num,\n            scenario: parts[1] || \"\",\n            input: parts[2] || \"\",\n            expected: parts[3] || \"\",\n          });\n        }\n      }\n    }\n  }\n  return scenarios;\n}\n\nfunction generateTestCode(_specName: string, _storyId: string, storyTitle: string, scenarios: IoScenario[]): string {\n  const desc = storyTitle.replace(/\"/g, '\\\\\"');\n\n  let code = `import { describe, it } from \"vitest\";\\n\\n`;\n  code += `describe(\"${desc}\", () => {\\n`;\n\n  for (const s of scenarios) {\n    const testDesc = s.scenario.replace(/\"/g, '\\\\\"');\n    code += `  // Input: ${s.input || \"not specified\"}\\n`;\n    code += `  // Expected: ${s.expected || \"not specified\"}\\n`;\n    code += `  it.todo(\"should handle scenario ${s.number}: ${testDesc}\");\\n\\n`;\n  }\n\n  code += `});\\n`;\n  return code;\n}\n\nexport function testGenFromSpecCommand(cwd: string, spec: string, storyId?: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, spec);\n  const storiesDir = resolve(specDir, \"stories\");\n\n  if (!existsSync(storiesDir)) {\n    return `Error: No stories found for spec '${spec}'.`;\n  }\n\n  const allFiles = readdirSync(storiesDir).filter((f) => f.endsWith(\".md\"));\n  const filesToProcess = storyId\n    ? allFiles.filter((f) => f.startsWith(storyId))\n    : allFiles;\n\n  if (filesToProcess.length === 0) {\n    return `Error: No stories found matching the criteria.`;\n  }\n\n  const results: string[] = [];\n\n  for (const file of filesToProcess) {\n    const content = readFileSync(resolve(storiesDir, file), \"utf-8\");\n    const idMatch = content.match(/^id:\\s*(.+)/m);\n    const titleMatch = content.match(/^#\\s+(.+)/m);\n    const storyIdMatch = idMatch?.[1]?.trim() || \"unknown\";\n    const storyTitle = titleMatch?.[1]?.trim() || file;\n\n    const scenarios = parseIoMatrix(content);\n\n    if (scenarios.length === 0) {\n      results.push(`  - ${storyIdMatch}: No I/O Matrix scenarios found`);\n      continue;\n    }\n\n    const testCode = generateTestCode(spec, storyIdMatch, storyTitle, scenarios);\n    const testFilename = `${storyIdMatch.toLowerCase()}.test.ts`;\n    const testPath = resolve(cwd, \"src\", \"__tests__\", testFilename);\n    const testDir = resolve(cwd, \"src\", \"__tests__\");\n\n    if (!existsSync(testDir)) {\n      mkdirSync(testDir, { recursive: true });\n    }\n\n    writeFileSync(testPath, testCode, \"utf-8\");\n\n    results.push(`  - ${storyIdMatch}: ${scenarios.length} scenarios → ${testPath}`);\n  }\n\n  let report = `Test Generation from Spec '${spec}':\\n`;\n  report += results.join(\"\\n\");\n\n  if (results.length > 0) {\n    report += `\\n\\nGenerated ${results.length} test file(s) from story I/O Matrix scenarios.`;\n  }\n\n  return report;\n}\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport function envSetupCommand(cwd: string): string {\n  const envExamplePath = resolve(cwd, \".env.example\");\n  const envPath = resolve(cwd, \".env\");\n\n  if (!existsSync(envExamplePath)) {\n    return \"No .env.example found. Create one first with the required variables.\";\n  }\n\n  if (existsSync(envPath)) {\n    // Compare and show missing vars\n    const exampleVars = parseEnvFile(envExamplePath);\n    const currentVars = parseEnvFile(envPath);\n    const missing = exampleVars.filter((v) => !currentVars.includes(v));\n\n    if (missing.length === 0) {\n      return \".env is complete. All variables from .env.example are set.\";\n    }\n\n    return `.env exists but missing ${missing.length} variable(s):\\n${missing.join(\"\\n\")}`;\n  }\n\n  // Create .env from .env.example\n  const content = readFileSync(envExamplePath, \"utf-8\");\n  writeFileSync(envPath, content, \"utf-8\");\n\n  return `.env created from .env.example with ${content.split(\"\\n\").filter((l) => l.trim() && !l.startsWith(\"#\")).length} variables.`;\n}\n\nexport function envListCommand(cwd: string): string {\n  const envPath = resolve(cwd, \".env\");\n\n  if (!existsSync(envPath)) {\n    return \"No .env file found.\";\n  }\n\n  const content = readFileSync(envPath, \"utf-8\");\n  const lines = content.split(\"\\n\").filter((l) => l.trim() && !l.startsWith(\"#\"));\n  const vars = lines.map((l) => {\n    const eqIdx = l.indexOf(\"=\");\n    if (eqIdx === -1) return `  - ${l}`;\n    const key = l.slice(0, eqIdx).trim();\n    const isSet = l.slice(eqIdx + 1).trim().length > 0;\n    return `  - ${key}: ${isSet ? \"set\" : \"unset\"}`;\n  });\n\n  return `Environment variables (${vars.length}):\\n${vars.join(\"\\n\")}`;\n}\n\nfunction parseEnvFile(path: string): string[] {\n  const content = readFileSync(path, \"utf-8\");\n  return content\n    .split(\"\\n\")\n    .filter((l) => l.trim() && !l.startsWith(\"#\"))\n    .map((l) => {\n      const eqIdx = l.indexOf(\"=\");\n      return eqIdx > 0 ? l.slice(0, eqIdx).trim() : \"\";\n    })\n    .filter(Boolean);\n}\n","import { existsSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig } from \"../../config/loader.js\";\n\nfunction generateNodeDockerfile(framework: string): string {\n  return `# Build stage\nFROM node:24-alpine AS builder\n\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci\nCOPY . .\nRUN npm run build\n\n# Production stage\nFROM node:24-alpine AS runner\n\nWORKDIR /app\nENV NODE_ENV=production\n\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY --from=builder /app/dist ./dist\n\n${framework === \"next\" ? `COPY --from=builder /app/.next ./.next\nCOPY --from=builder /app/public ./public` : \"\"}\n\nEXPOSE ${framework === \"next\" ? \"3000\" : \"3000\"}\n\nUSER node\n\nCMD ${framework === \"next\" ? '[\"npm\", \"start\"]' : framework === \"express\" ? '[\"node\", \"dist/index.js\"]' : '[\"node\", \"dist/index.mjs\"]'}\n`;\n}\n\nfunction generatePythonDockerfile(): string {\n  return `FROM python:3.14-slim\n\nWORKDIR /app\n\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\nCOPY . .\n\nRUN useradd --create-home appuser && chown -R appuser:appuser /app\nUSER appuser\n\nEXPOSE 8000\n\nCMD [\"python\", \"main.py\"]\n`;\n}\n\nfunction generateGoDockerfile(): string {\n  return `FROM golang:1.26-alpine AS builder\n\nWORKDIR /app\nCOPY go.mod go.sum ./\nRUN go mod download\nCOPY . .\nRUN CGO_ENABLED=0 GOOS=linux go build -o /app/server .\n\nFROM gcr.io/distroless/static-debian12:nonroot\nCOPY --from=builder /app/server /server\nEXPOSE 8080\nUSER nonroot:nonroot\nCMD [\"/server\"]\n`;\n}\n\nexport function deployDockerfileCommand(cwd: string): string {\n  const config = loadConfig(cwd);\n  const dockerfilePath = resolve(cwd, \"Dockerfile\");\n\n  if (existsSync(dockerfilePath)) {\n    return `Dockerfile already exists. Delete it first to regenerate.`;\n  }\n\n  const stack = config.stack || \"node\";\n  const framework = config.framework || \"\";\n\n  let dockerfile: string;\n\n  if (stack === \"python\" || config.project_language === \"python\") {\n    dockerfile = generatePythonDockerfile();\n  } else if (stack === \"go\" || config.project_language === \"go\") {\n    dockerfile = generateGoDockerfile();\n  } else {\n    dockerfile = generateNodeDockerfile(framework);\n  }\n\n  writeFileSync(dockerfilePath, dockerfile, \"utf-8\");\n\n  return `✓ Dockerfile generated.\n\nMulti-stage build for ${stack}${framework ? ` (${framework})` : \"\"}.\n\nIncludes:\n- Build stage with dependencies\n- Production stage (minimal image)\n- Exposed port configured\n\nNext: Add a .dockerignore file to exclude node_modules.`;\n}\n\nexport function deployDockerignoreCommand(cwd: string): string {\n  const dockerignorePath = resolve(cwd, \".dockerignore\");\n\n  if (existsSync(dockerignorePath)) {\n    return `.dockerignore already exists.`;\n  }\n\n  const content = `node_modules\ndist\n.codewright\n.codewright-output\n.git\n.gitignore\n.env\n.env.example\n*.md\n`;\n\n  writeFileSync(dockerignorePath, content, \"utf-8\");\n  return `✓ .dockerignore generated.`;\n}\n","import { existsSync, writeFileSync, readFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { execSync } from \"node:child_process\";\n\nconst K6_SCRIPT = `import http from 'k6/http';\nimport { sleep, check } from 'k6';\n\nexport const options = {\n  stages: [\n    { duration: '30s', target: 10 },  // ramp up\n    { duration: '1m', target: 10 },   // steady\n    { duration: '30s', target: 0 },   // ramp down\n  ],\n  thresholds: {\n    http_req_duration: ['p(95)<500'],  // 95% requests under 500ms\n    http_req_failed: ['rate<0.01'],     // less than 1% errors\n  },\n};\n\nconst BASE_URL = __ENV.BASE_URL || 'http://localhost:3000';\n\nexport default function () {\n  const res = http.get(BASE_URL);\n  check(res, {\n    'status is 200': (r) => r.status === 200,\n    'response time < 500ms': (r) => r.timings.duration < 500,\n  });\n  sleep(1);\n}\n`;\n\nconst ARTILLERY_CONFIG = `config:\n  target: \"http://localhost:3000\"\n  phases:\n    - duration: 60\n      arrivalRate: 5\n      rampTo: 20\n      name: \"Warm up\"\n    - duration: 120\n      arrivalRate: 20\n      name: \"Sustained load\"\n  plugins:\n    metrics-by-endpoint: {}\n\nscenarios:\n  - name: \"GET /api\"\n    flow:\n      - get:\n          url: \"/api\"\n      - think: 1\n`;\n\nfunction detectUrl(): string {\n  try {\n    const pkg = JSON.parse(readFileSync(\"package.json\", \"utf-8\"));\n    const scripts = pkg.scripts || {};\n    if (scripts.start) return \"http://localhost:3000\";\n    if (scripts.dev) return \"http://localhost:3000\";\n  } catch {}\n  return \"http://localhost:3000\";\n}\n\nexport function perfSetupCommand(cwd: string, tool: string): string {\n  const perfDir = resolve(cwd, \"perf-tests\");\n  if (!existsSync(perfDir)) {\n    mkdirSync(perfDir, { recursive: true });\n  }\n\n  const url = detectUrl();\n\n  if (tool === \"k6\" || !tool) {\n    const scriptPath = resolve(perfDir, \"load-test.js\");\n    if (!existsSync(scriptPath)) {\n      writeFileSync(scriptPath, K6_SCRIPT, \"utf-8\");\n    }\n\n    return `✓ k6 test created at perf-tests/load-test.js\n\nTo run:\n  npm install -g k6  # or: brew install k6\n  k6 run perf-tests/load-test.js -e BASE_URL=${url}\n\nTest scenario:\n  - Ramp up: 30s to 10 users\n  - Steady: 1m at 10 users\n  - Ramp down: 30s to 0 users\n  - Threshold: 95% requests under 500ms\n  - Max error rate: 1%`;\n  }\n\n  if (tool === \"artillery\") {\n    const configPath = resolve(perfDir, \"artillery.yml\");\n    if (!existsSync(configPath)) {\n      writeFileSync(configPath, ARTILLERY_CONFIG, \"utf-8\");\n    }\n\n    return `✓ Artillery config created at perf-tests/artillery.yml\n\nTo run:\n  npm install -g artillery\n  artillery run perf-tests/artillery.yml\n\nTest scenario:\n  - Warm up: 60s, 5→20 req/s\n  - Sustained: 120s at 20 req/s\n  - Target: ${url}`;\n  }\n\n  return `Unsupported tool: ${tool}. Use \"k6\" or \"artillery\".`;\n}\n\nexport function perfRunCommand(cwd: string, tool: string): string {\n  const perfDir = resolve(cwd, \"perf-tests\");\n\n  if (tool === \"k6\") {\n    const scriptPath = resolve(perfDir, \"load-test.js\");\n    if (!existsSync(scriptPath)) {\n      return \"No k6 script found. Run 'codewright perf setup k6' first.\";\n    }\n\n    try {\n      execSync(\"which k6\", { encoding: \"utf-8\" });\n    } catch {\n      return \"k6 not installed. Install it: brew install k6\";\n    }\n\n    try {\n      const output = execSync(`k6 run ${scriptPath} --quiet 2>&1`, {\n        cwd,\n        encoding: \"utf-8\",\n        timeout: 120000,\n      }).trim();\n      return output;\n    } catch (e) {\n      const err = e as Error;\n      return `k6 run failed: ${err.message}`;\n    }\n  }\n\n  if (tool === \"artillery\") {\n    const configPath = resolve(perfDir, \"artillery.yml\");\n    if (!existsSync(configPath)) {\n      return \"No Artillery config found. Run 'codewright perf setup artillery' first.\";\n    }\n\n    try {\n      const output = execSync(`npx artillery run ${configPath} 2>&1`, {\n        cwd: perfDir,\n        encoding: \"utf-8\",\n        timeout: 180000,\n      }).trim();\n      return output;\n    } catch (e) {\n      const err = e as Error;\n      return `Artillery run failed: ${err.message}`;\n    }\n  }\n\n  return `Unsupported tool: ${tool}`;\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { load } from \"js-yaml\";\n\ninterface SkillInfo {\n  name: string;\n  description: string;\n  phase: string;\n}\n\nconst PHASE_DISPLAY: Record<string, string> = {\n  planning: \"Planning\",\n  preparation: \"Preparation\",\n  implementation: \"Implementation\",\n  review: \"Review\",\n  operations: \"Operations\",\n  retrospective: \"Retrospective\",\n};\nconst PHASE_ORDER = [\"planning\", \"preparation\", \"implementation\", \"review\", \"operations\", \"retrospective\"];\nconst SKILL_PHASES: Record<string, string> = {\n  \"codewright-init\": \"planning\", \"codewright-spec\": \"planning\", \"codewright-architecture\": \"planning\",\n  \"codewright-epic\": \"planning\", \"codewright-story\": \"preparation\", \"codewright-readiness\": \"preparation\",\n  \"codewright-dev\": \"implementation\", \"codewright-develop\": \"implementation\", \"codewright-quick-dev\": \"implementation\",\n  \"codewright-test\": \"implementation\", \"codewright-testgen\": \"implementation\", \"codewright-quality\": \"implementation\",\n  \"codewright-refactor\": \"implementation\", \"codewright-review\": \"review\", \"codewright-commit\": \"review\",\n  \"codewright-context\": \"operations\", \"codewright-document\": \"operations\", \"codewright-rules\": \"operations\",\n  \"codewright-hook\": \"operations\", \"codewright-ci\": \"operations\", \"codewright-deps\": \"operations\",\n  \"codewright-env\": \"operations\", \"codewright-deploy\": \"operations\", \"codewright-perf\": \"operations\",\n  \"codewright-retrospective\": \"retrospective\",\n};\n\nfunction parseSkill(filePath: string, folderName: string): SkillInfo {\n  try {\n    const content = readFileSync(filePath, \"utf-8\");\n    const match = content.match(/^---\\s*\\n([\\s\\S]*?)\\n---/);\n    const frontmatter = match ? (load(match[1]) as Record<string, unknown>) : {};\n    const name = typeof frontmatter?.name === \"string\" ? frontmatter.name : folderName;\n    return {\n      name,\n      description: typeof frontmatter?.description === \"string\" ? frontmatter.description : \"\",\n      phase: SKILL_PHASES[name] || \"operations\",\n    };\n  } catch {\n    return { name: folderName, description: \"\", phase: SKILL_PHASES[folderName] || \"operations\" };\n  }\n}\n\nfunction getAllSkills(cwd: string): SkillInfo[] {\n  const installed = resolve(cwd, \".agents\", \"skills\");\n  const bundled = resolve(cwd, \"skills\");\n  const skillsDir = existsSync(installed) ? installed : bundled;\n  if (!existsSync(skillsDir)) return [];\n  return readdirSync(skillsDir, { withFileTypes: true })\n    .filter((entry) => entry.isDirectory() && existsSync(resolve(skillsDir, entry.name, \"SKILL.md\")))\n    .map((entry) => parseSkill(resolve(skillsDir, entry.name, \"SKILL.md\"), entry.name));\n}\n\nfunction aliases(name: string): string[] {\n  const short = name.replace(/^codewright-/, \"\");\n  return [name, short, `codewright:${short}`, `codewright ${short}`];\n}\n\nfunction findSkill(skills: SkillInfo[], query: string): SkillInfo | undefined {\n  const normalized = query.trim().toLowerCase();\n  return skills.find((skill) => aliases(skill.name).includes(normalized));\n}\n\nexport function helpCommand(cwd: string, skillName?: string, phaseFilter?: string, next?: string): string {\n  const skills = getAllSkills(cwd);\n  if (skills.length === 0) return \"No skills found. Run codewright init first.\";\n\n  if (skillName) {\n    const skill = findSkill(skills, skillName);\n    if (!skill) return `Skill '${skillName}' not found. Use codewright help to list all skills.`;\n    const nextPhase = PHASE_ORDER[PHASE_ORDER.indexOf(skill.phase) + 1];\n    const nextSkills = nextPhase ? skills.filter((candidate) => candidate.phase === nextPhase).slice(0, 3) : [];\n    const lines = [`## ${skill.name}`, skill.description, \"\", `Phase: ${PHASE_DISPLAY[skill.phase] || skill.phase}`];\n    if (nextSkills.length > 0) {\n      lines.push(\"\", `Next steps (${PHASE_DISPLAY[nextPhase]}):`);\n      lines.push(...nextSkills.map((candidate) => `  - ${candidate.name}: ${candidate.description}`));\n    }\n    return lines.join(\"\\n\");\n  }\n\n  if (next) {\n    const skill = findSkill(skills, next);\n    if (!skill) return `Skill '${next}' not found.`;\n    const nextPhase = PHASE_ORDER[PHASE_ORDER.indexOf(skill.phase) + 1];\n    if (!nextPhase) return `No next steps for '${skill.name}'.`;\n    return [`After ${skill.name}, consider:`,\n      ...skills.filter((candidate) => candidate.phase === nextPhase).slice(0, 5)\n        .map((candidate) => `  - ${candidate.name}: ${candidate.description}`),\n    ].join(\"\\n\");\n  }\n\n  const phases = phaseFilter ? [phaseFilter.toLowerCase()] : PHASE_ORDER;\n  const lines = [\"## Codewright Skills\", \"\"];\n  for (const phaseName of phases) {\n    const phaseSkills = skills.filter((skill) => skill.phase === phaseName);\n    if (phaseSkills.length === 0) continue;\n    lines.push(`### ${PHASE_DISPLAY[phaseName] || phaseName}`);\n    lines.push(...phaseSkills.map((skill) => `  - ${skill.name}: ${skill.description}`), \"\");\n  }\n  lines.push(\"Usage:\", \"  codewright help <skill>\", \"  codewright help --next <skill>\", \"  codewright help --phase <phase>\");\n  return lines.join(\"\\n\");\n}\n","import { existsSync, readdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport { readAgentManifest } from \"../../agents/install.js\";\nimport { getAgentDefinition } from \"../../agents/registry.js\";\nimport { loadConfig } from \"../../config/loader.js\";\n\nexport function statusCommand(cwd: string): string {\n  const config = loadConfig(cwd);\n  const lines: string[] = [];\n  lines.push(\"## Codewright Status\");\n  lines.push(\"\");\n\n  // 1. Skills\n  const skillsDir = resolve(cwd, \".agents\", \"skills\");\n  if (existsSync(skillsDir)) {\n    const skills = readdirSync(skillsDir).filter((f) => {\n      try {\n        return readdirSync(resolve(skillsDir, f)).includes(\"SKILL.md\");\n      } catch {\n        return false;\n      }\n    });\n    lines.push(\"**Skills:** \" + skills.length + \" installed\");\n    lines.push(\"\");\n  } else {\n    lines.push(\"**Skills:** not installed (run codewright init)\");\n    lines.push(\"\");\n  }\n\n  const agentManifest = readAgentManifest(cwd);\n  const agentLabels = agentManifest.targets.map((target) => getAgentDefinition(target).label);\n  lines.push(\"**Agents:** \" + (agentLabels.length > 0 ? agentLabels.join(\", \") : \"universal core only\"));\n  lines.push(\"\");\n\n  // 2. Specs\n  const specsDir = resolve(cwd, config.output_folder, \"specs\");\n  if (existsSync(specsDir)) {\n    const specs = readdirSync(specsDir).filter((f) => f.startsWith(\"spec-\"));\n    if (specs.length > 0) {\n      lines.push(\"**Specs:** \" + specs.length);\n      for (const spec of specs) {\n        const name = spec.replace(\"spec-\", \"\");\n        const storiesDir = resolve(specsDir, spec, \"stories\");\n        const stories = existsSync(storiesDir) ? readdirSync(storiesDir).length : 0;\n        lines.push(\"  - \" + name + \" (\" + stories + \" stories)\");\n      }\n      lines.push(\"\");\n    }\n  }\n\n  // 3. Hooks\n  const hookDir = resolve(cwd, \".git\", \"hooks\");\n  if (existsSync(hookDir)) {\n    const hooks = [\"pre-commit\", \"commit-msg\", \"pre-push\"];\n    const installed = hooks.filter((h) => existsSync(resolve(hookDir, h)));\n    if (installed.length > 0) {\n      lines.push(\"**Hooks:** \" + installed.join(\", \"));\n      lines.push(\"\");\n    }\n  }\n\n  // 4. Env\n  const envExists = existsSync(resolve(cwd, \".env\"));\n  const envExampleExists = existsSync(resolve(cwd, \".env.example\"));\n  lines.push(\"**Env:** \" + (envExists ? \".env yes\" : \".env no\") + \", \" + (envExampleExists ? \".env.example yes\" : \".env.example no\"));\n  lines.push(\"\");\n\n  // 5. Context files\n  const ctxPath = resolve(cwd, config.output_folder, \"project-context.md\");\n  const llmsPath = resolve(cwd, \"llms.txt\");\n  lines.push(\"**Context:** \" + (existsSync(ctxPath) ? \"project-context.md yes\" : \"project-context.md no\") + \", \" + (existsSync(llmsPath) ? \"llms.txt yes\" : \"llms.txt no\"));\n  lines.push(\"\");\n\n  // 6. Git\n  try {\n    const branch = execSync(\"git rev-parse --abbrev-ref HEAD\", { cwd, encoding: \"utf-8\" }).trim();\n    const gitStatus = execSync(\"git status --porcelain\", { cwd, encoding: \"utf-8\" }).trim();\n    const changes = gitStatus ? gitStatus.split(\"\\n\").length : 0;\n    lines.push(\"**Git:** branch \" + branch + \", \" + changes + \" uncommitted changes\");\n  } catch {\n    lines.push(\"**Git:** not a git repository\");\n  }\n\n  return lines.join(\"\\n\");\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n  formatAgentMenu,\n  getAgentDefinition,\n  parseAgentTargets,\n  parseInteractiveAgentSelection,\n  type AgentTarget,\n} from \"../agents/registry.js\";\nimport { initCommand } from \"./commands/init.js\";\nimport { specCreateCommand, specUpdateCommand, specHistoryCommand, specDiffCommand, specVersionCommand, specSyncCommand } from \"./commands/spec.js\";\nimport { storyCreateCommand, storyListCommand } from \"./commands/story.js\";\nimport { contextGenerateCommand, contextLlmsCommand } from \"./commands/context.js\";\nimport { devStartCommand, reviewPrepareCommand } from \"./commands/review.js\";\nimport { commitCommand } from \"./commands/commit.js\";\nimport { hookInstallCommand, hookListCommand, hookUninstallCommand } from \"./commands/hook.js\";\nimport { ciGenerateCommand } from \"./commands/ci.js\";\nimport { depsCheckCommand } from \"./commands/deps.js\";\nimport { testGenFromSpecCommand } from \"./commands/testgen.js\";\nimport { envSetupCommand, envListCommand } from \"./commands/env.js\";\nimport { deployDockerfileCommand, deployDockerignoreCommand } from \"./commands/deploy.js\";\nimport { perfSetupCommand, perfRunCommand } from \"./commands/perf.js\";\nimport { helpCommand } from \"./commands/help.js\";\nimport { statusCommand } from \"./commands/status.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction getVersion(): string {\n  try {\n    const pkg = JSON.parse(readFileSync(resolve(__dirname, \"../../package.json\"), \"utf-8\"));\n    return pkg.version || \"0.1.0\";\n  } catch {\n    return \"0.1.0\";\n  }\n}\n\nasync function selectAgentTargets(option?: string): Promise<AgentTarget[]> {\n  if (option !== undefined) return parseAgentTargets(option);\n  if (!process.stdin.isTTY || !process.stdout.isTTY) return [];\n\n  console.log(formatAgentMenu());\n  const prompt = createInterface({ input: process.stdin, output: process.stdout });\n  try {\n    const answer = await prompt.question(\"> \");\n    return parseInteractiveAgentSelection(answer);\n  } finally {\n    prompt.close();\n  }\n}\n\nconst program = new Command();\n\nprogram\n  .name(\"codewright\")\n  .description(\"AI-assisted specification and implementation system\")\n  .version(getVersion());\n\n// ─── init ───────────────────────────────────────────────\nprogram\n  .command(\"init\")\n  .description(\"Initialize codewright in the project\")\n  .option(\"--dir <path>\", \"Target directory\", \".\")\n  .option(\"--agents <targets>\", \"Comma-separated agents, 'all', or 'core'\")\n  .option(\"--upgrade-skills\", \"Replace installed bundled skills while preserving project customization\")\n  .action(async (opts) => {\n    try {\n      const agents = await selectAgentTargets(opts.agents);\n      const result = initCommand(process.cwd(), opts.dir, {\n        upgradeSkills: opts.upgradeSkills,\n        agents,\n      });\n      console.log(`✓ Codewright initialized at ${result.codewrightDir}`);\n      console.log(`  Output: ${result.outputDir}`);\n      console.log(\"  Skills: .agents/skills/ (universal core)\");\n      const labels = result.agentTargets.map((target) => getAgentDefinition(target).label);\n      console.log(`  Agents: ${labels.length > 0 ? labels.join(\", \") : \"core only\"}`);\n      if (result.adapterFiles.length > 0) console.log(`  Adapters: ${result.adapterFiles.length} files generated`);\n      for (const warning of result.warnings) console.warn(`  Warning: ${warning}`);\n      const d = result.detected;\n      if (d.framework) console.log(`  Framework: ${d.framework}`);\n      if (d.test_runner) console.log(`  Test runner: ${d.test_runner}`);\n      if (d.project_language) console.log(`  Language: ${d.project_language}`);\n    } catch (error) {\n      console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n      process.exitCode = 1;\n    }\n  });\n\n// ─── spec ───────────────────────────────────────────────\nprogram\n  .command(\"spec\")\n  .description(\"Create or update a specification\")\n  .argument(\"[slug]\", \"Spec slug (create if new, update if exists)\")\n  .option(\"--update\", \"Re-derive SPEC.md from memlog\")\n  .option(\"--input <path>\", \"Seed spec from a file\")\n  .option(\"--history\", \"View spec version history\")\n  .option(\"--diff [from] [to]\", \"Diff between spec versions\")\n  .option(\"--snapshot\", \"Create a new version snapshot\")\n  .option(\"--yes\", \"Confirm snapshot commits in non-interactive use\")\n  .option(\"--sync\", \"Sync spec with code (compare requirements vs implementation)\")\n  .action((slug: string, opts) => {\n    if (!slug) {\n      console.log(\"Usage: codewright spec <slug>\");\n      console.log(\"       codewright spec <slug> --update\");\n      console.log(\"       codewright spec <slug> --history\");\n      console.log(\"       codewright spec <slug> --diff [from] [to]\");\n      console.log(\"       codewright spec <slug> --snapshot\");\n      console.log(\"       codewright spec <slug> --sync\");\n      return;\n    }\n    if (opts.update) {\n      const result = specUpdateCommand(process.cwd(), slug);\n      console.log(`✓ Spec updated at ${result.specDir}`);\n    } else if (opts.history) {\n      const result = specHistoryCommand(process.cwd(), slug);\n      console.log(result);\n    } else if (opts.diff) {\n      const from = typeof opts.diff === 'string' ? opts.diff : undefined;\n      const result = specDiffCommand(process.cwd(), slug, from);\n      console.log(result);\n    } else if (opts.snapshot) {\n      if (!opts.yes) {\n        console.log(\"Snapshot would create a Git commit. Rerun with --snapshot --yes to confirm.\");\n        return;\n      }\n      const result = specVersionCommand(process.cwd(), slug);\n      console.log(result);\n    } else if (opts.sync) {\n      const result = specSyncCommand(process.cwd(), slug);\n      console.log(result);\n    } else {\n      const result = specCreateCommand({ cwd: process.cwd(), slug, input: opts.input });\n      console.log(`✓ Spec created at ${result.specDir}`);\n    }\n  });\n\n// ─── story ──────────────────────────────────────────────\nprogram\n  .command(\"story\")\n  .description(\"Create or list stories\")\n  .argument(\"[spec]\", \"Spec slug (if only spec given → list stories)\")\n  .argument(\"[id]\", \"Story ID (e.g. S001)\")\n  .argument(\"[title]\", \"Story title\")\n  .option(\"--phase <n>\", \"Phase number\", \"1\")\n  .action((spec: string, id: string, title: string, opts) => {\n    if (!spec) {\n      console.log(\"Usage: codewright story <spec>              (list stories)\");\n      console.log(\"       codewright story <spec> <id> <title> (create story)\");\n      return;\n    }\n    if (id && title) {\n      // Create story\n      const result = storyCreateCommand({\n        cwd: process.cwd(), spec, id, title,\n        phase: opts.phase,\n      });\n      console.log(`✓ Story created at ${result.path}`);\n    } else if (spec) {\n      // List stories\n      const stories = storyListCommand(process.cwd(), spec);\n      if (stories.length === 0) { console.log(\"No stories found.\"); return; }\n      console.log(\"Stories:\");\n      for (const s of stories) console.log(`  ${s.id} | ${s.status} | ${s.title}`);\n    }\n  });\n\n// ─── dev ────────────────────────────────────────────────\nprogram\n  .command(\"dev\")\n  .description(\"Start implementing a story\")\n  .argument(\"<spec>\", \"Spec slug\")\n  .argument(\"<id>\", \"Story ID\")\n  .action((spec: string, id: string) => {\n    const result = devStartCommand(process.cwd(), spec, id);\n    console.log(`✓ Story ${result.story} marked as in-progress`);\n    console.log(`  Baseline commit: ${result.baseline_commit}`);\n    console.log(`\\n${result.instructions}`);\n  });\n\n// ─── review ─────────────────────────────────────────────\nprogram\n  .command(\"review\")\n  .description(\"Prepare review for a story\")\n  .argument(\"<spec>\", \"Spec slug\")\n  .argument(\"<id>\", \"Story ID\")\n  .action((spec: string, id: string) => {\n    const result = reviewPrepareCommand(process.cwd(), spec, id);\n    console.log(`✓ Review prepared at ${result.reviewFile}`);\n    console.log(`  Baseline commit: ${result.baseline}`);\n  });\n\n// ─── commit ─────────────────────────────────────────────\nprogram\n  .command(\"commit\")\n  .description(\"Preview or create a story-scoped commit\")\n  .argument(\"<spec>\", \"Spec slug\")\n  .argument(\"<id>\", \"Story ID\")\n  .option(\"--branch <name>\", \"Custom branch name\")\n  .option(\"--amend\", \"Amend to last commit instead of new commit\")\n  .option(\"--push\", \"Push the branch to origin after committing\")\n  .option(\"--yes\", \"Confirm the local commit in non-interactive use\")\n  .option(\"--dry-run\", \"Show the branch and files without committing\")\n  .action((spec: string, id: string, opts) => {\n    const previewOnly = opts.dryRun || !opts.yes;\n    const result = commitCommand(process.cwd(), spec, id, {\n      branch: opts.branch,\n      amend: opts.amend,\n      push: opts.push,\n      dryRun: previewOnly,\n    });\n    if (previewOnly && result.filesChanged > 0) {\n      console.log(`Commit preview for ${result.branch}:`);\n      for (const file of result.plannedFiles) console.log(`  - ${file}`);\n      if (!opts.dryRun) console.log(\"Rerun with --yes to create the local commit; add --push to push it.\");\n      return;\n    }\n    if (result.commitHash) {\n      console.log(`✓ Story committed to branch ${result.branch}`);\n      console.log(`  Commit: ${result.commitHash}`);\n      console.log(`  Files changed: ${result.filesChanged}`);\n      if (result.pushed) {\n        console.log(`  Pushed to origin/${result.branch}`);\n      } else {\n        console.log(`  ⚠ Branch not pushed (no remote configured or push failed)`);\n      }\n      if (result.storyUpdated) console.log(`  Story status updated to \"done\"`);\n    } else {\n      console.log(`⚠ No changes to commit for story ${id}`);\n    }\n  });\n\n// ─── context ────────────────────────────────────────────\nprogram\n  .command(\"context\")\n  .description(\"Generate project context files\")\n  .option(\"--llms\", \"Generate llms.txt for AI agents\")\n  .action((opts) => {\n    if (opts.llms) {\n      const result = contextLlmsCommand(process.cwd());\n      console.log(`✓ llms.txt generated at ${result.path}`);\n    } else {\n      const result = contextGenerateCommand(process.cwd());\n      console.log(`✓ Project context generated at ${result.path}`);\n    }\n  });\n\n// ─── hook ───────────────────────────────────────────────\nprogram\n  .command(\"hook\")\n  .description(\"Manage git hooks for the project\")\n  .argument(\"[action]\", \"Action: install, uninstall, or list\", \"list\")\n  .action((action: string) => {\n    if (action === \"install\") {\n      const result = hookInstallCommand(process.cwd());\n      console.log(result);\n    } else if (action === \"uninstall\") {\n      console.log(hookUninstallCommand(process.cwd()));\n    } else {\n      const result = hookListCommand(process.cwd());\n      console.log(result);\n    }\n  });\n\n// ─── ci ─────────────────────────────────────────────────\nprogram\n  .command(\"ci\")\n  .description(\"Generate CI workflow for the project\")\n  .option(\"--force\", \"Replace an existing generated workflow after review\")\n  .action((opts) => {\n    const result = ciGenerateCommand(process.cwd(), { force: opts.force });\n    console.log(result);\n  });\n\n// ─── deps ────────────────────────────────────────────────\nprogram\n  .command(\"deps\")\n  .description(\"Check project dependencies for outdated packages\")\n  .action(() => {\n    const result = depsCheckCommand(process.cwd());\n    console.log(result);\n  });\n\n// ─── test ────────────────────────────────────────────────\nprogram\n  .command(\"test\")\n  .description(\"Generate tests from spec stories\")\n  .argument(\"<spec>\", \"Spec slug\")\n  .argument(\"[story]\", \"Story ID (optional, generates for all if omitted)\")\n  .action((spec: string, story: string) => {\n    const result = testGenFromSpecCommand(process.cwd(), spec, story);\n    console.log(result);\n  });\n\n// ─── env ─────────────────────────────────────────────────\nprogram\n  .command(\"env\")\n  .description(\"Manage environment variables\")\n  .argument(\"[action]\", \"Action: setup or list\", \"list\")\n  .action((action: string) => {\n    if (action === \"setup\") {\n      const result = envSetupCommand(process.cwd());\n      console.log(result);\n    } else {\n      const result = envListCommand(process.cwd());\n      console.log(result);\n    }\n  });\n\n// ─── deploy ──────────────────────────────────────────────\nconst deployCmd = program.command(\"deploy\").description(\"Generate deployment configuration\");\ndeployCmd\n  .command(\"dockerfile\")\n  .description(\"Generate Dockerfile for the project\")\n  .action(() => {\n    const result = deployDockerfileCommand(process.cwd());\n    console.log(result);\n  });\ndeployCmd\n  .command(\"dockerignore\")\n  .description(\"Generate .dockerignore\")\n  .action(() => {\n    const result = deployDockerignoreCommand(process.cwd());\n    console.log(result);\n  });\n\n// ─── perf ───────────────────────────────────────────────\nprogram\n  .command(\"perf\")\n  .description(\"Performance testing with k6\")\n  .argument(\"[action]\", \"Action: setup or run\", \"setup\")\n  .argument(\"[tool]\", \"Tool: k6\", \"k6\")\n  .action((action: string, tool: string) => {\n    if (action === \"run\") {\n      const result = perfRunCommand(process.cwd(), tool);\n      console.log(result);\n    } else {\n      const result = perfSetupCommand(process.cwd(), tool);\n      console.log(result);\n    }\n  });\n\n// ─── help ───────────────────────────────────────────────\nprogram\n  .command(\"help\")\n  .description(\"List skills by phase, get details on a skill, or find next steps\")\n  .argument(\"[skill]\", \"Skill name for details\")\n  .option(\"--next <skill>\", \"Show next steps after a skill\")\n  .option(\"--phase <phase>\", \"Filter by phase (ideation, planning, etc.)\")\n  .action((skill: string, opts) => {\n    const result = helpCommand(process.cwd(), skill, opts.phase, opts.next);\n    console.log(result);\n  });\n\n// ─── status ─────────────────────────────────────────────\nprogram\n  .command(\"status\")\n  .description(\"Show project health overview\")\n  .action(() => {\n    const result = statusCommand(process.cwd());\n    console.log(result);\n  });\n\nawait program.parseAsync(process.argv);\n"]}