{"version":3,"sources":["../src/adapters/preview-capture.ts","../src/causal-failure.ts","../src/explain.ts","../src/search.ts","../src/sessions/status.ts","../src/sessions/activity.ts","../src/sessions/types.ts","../src/sessions/load.ts","../src/sessions/scope.ts","../src/sessions/cohort.ts","../src/sessions/checks.ts","../src/sessions/index.ts","../src/trace-verification.ts","../src/bundle/resolve.ts","../src/bundle/safety-status.ts","../src/bundle/manifest.ts","../src/bundle/summary.ts","../src/bundle/paths.ts","../src/evidence/types.ts","../src/evidence/hash.ts","../src/evidence/paths.ts","../src/evidence/manifest.ts","../src/evidence/contract-binding.ts","../src/evidence/views.ts","../src/evidence/html-shell.ts","../src/evidence/views-contract.ts","../src/evidence/views-safety.ts","../src/evidence/zip.ts","../src/evidence/verify.ts","../src/evidence/ci.ts","../src/suite/types.ts","../src/suite/validate.ts","../src/suite/load.ts","../src/suite/resolve.ts","../src/suite/run.ts","../src/suite/report.ts","../src/suite/templates.ts","../src/cohort/types.ts","../src/cohort/compare.ts","../src/cohort/grouping.ts","../src/cohort/metrics.ts","../src/cohort/analyze.ts","../src/cohort/render.ts","../src/gate/parse.ts","../src/gate/evaluate.ts","../src/gate/run.ts","../src/gate/render.ts","../src/safety/omitted-payload.ts"],"names":["observationStatus","warn","activityMs","path","packaged","diagnostic","access","readFile","percentile","hasThresholds","ok","createHash"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBO,IAAM,iCAAA,GAAoC;AAW1C,IAAM,gCAAA,GAAmC;AAAA,EAC9C,8BAAA;AAAA,EACA,8BAAA;AAAA,EACA;AACF;AAyEO,SAAS,uBAAA,CACd,OACA,QAAA,EACoB;AACpB,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA,IAAY,GAAG,OAAO,MAAA;AACxD,EAAA,MAAM,UAAA,GAAa,sBAAsB,KAAK,CAAA;AAC9C,EAAA,IAAI,UAAA,KAAe,QAAW,OAAO,MAAA;AACrC,EAAA,OAAO,mBAAmB,UAAA,EAAY,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,IAAA;AAC9D;AAMO,SAAS,6BAAA,CACd,KAAA,EACA,OAAA,GAA4B,OAAA,EACpB;AACR,EAAA,MAAM,SAAA,GACJ,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,IAAS,CAAA,GAC5D,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,GAChB,iCAAA;AACN,EAAA,MAAM,GAAA,GAAM,uBAAA,CAAwB,OAAO,CAAA,CAAE,mBAAA;AAC7C,EAAA,OAAO,QAAQ,MAAA,GAAY,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,WAAW,GAAG,CAAA;AAChE;AAGO,SAAS,2BAAA,CACd,OAAA,GAAwC,EAAC,EAClB;AACvB,EAAA,MAAM,OAAA,GACJ,OAAA,CAAQ,OAAA,KAAY,SAAA,GAAY,SAAA,GAAY,eAAA;AAC9C,EAAA,MAAM,gBAAA,GAAqC,QAAQ,gBAAA,IAAoB,OAAA;AACvE,EAAA,MAAM,eAAA,GAAkB,6BAAA;AAAA,IACtB,OAAA,CAAQ,eAAA;AAAA,IACR;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS;AAAA,IAC5B,OAAO,OAAA,CAAQ,MAAA;AAAA,IACf,SAAA,EAAW,uBAAA,CAAwB,gBAAgB,CAAA,CAAE;AAAA,GACtD,CAAA;AAED,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,qBAAA,EAAuB,CAAA;AAAA,IACvB,wBAAA,EAA0B,CAAA;AAAA,IAC1B,sBAAA,EAAwB,CAAA;AAAA,IACxB,qBAAA,EAAuB;AAAA,GACzB;AACA,EAAA,IAAI,kBAAA;AACJ,EAAA,IAAI,qBAAA;AAEJ,EAAA,MAAM,IAAA,GAAO,CACX,IAAA,EACA,KAAA,EACA,OAAA,KACS;AACT,IAAA,kBAAA,GAAqB,IAAA;AACrB,IAAA,qBAAA,GAAwB,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAC3C,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,eAAe,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAS,CAAA;AAAA,IAC1D,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KACxB,WAAA,CAAY,KAAK,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,OAAA,CAAA;AAE5C,EAAA,MAAM,mBAAA,GAAsB,CAC1B,KAAA,EACA,KAAA,KACuB;AACvB,IAAA,IAAI,OAAA,KAAY,SAAA,IAAa,eAAA,IAAmB,CAAA,EAAG,OAAO,MAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,iBAAiB,KAAK,CAAA;AAEnC,IAAA,IAAI;AACF,MAAA,IAAI,UAAU,KAAA,CAAA,EAAW;AACvB,QAAA,QAAA,CAAS,wBAAA,IAA4B,CAAA;AACrC,QAAA,IAAA;AAAA,UACE,8BAAA;AAAA,UACA,IAAA;AAAA,UACA,GAAG,IAAI,CAAA,mEAAA;AAAA,SACT;AACA,QAAA,OAAO,KAAA,CAAA;AAAA,MACT;AAIA,MAAA,MAAM,KAAA,GAAQ,oBAAoB,KAAK,CAAA;AACvC,MAAA,IAAI,UAAU,cAAA,EAAgB;AAC5B,QAAA,QAAA,CAAS,wBAAA,IAA4B,CAAA;AACrC,QAAA,IAAA;AAAA,UACE,8BAAA;AAAA,UACA,IAAA;AAAA,UACA,GAAG,IAAI,CAAA,+CAAA;AAAA,SACT;AACA,QAAA,OAAO,KAAA,CAAA;AAAA,MACT;AAEA,MAAA,MAAM,aAAa,qBAAA,CAAsB,QAAA,CAAS,WAAA,CAAY,IAAA,EAAM,KAAK,CAAC,CAAA;AAC1E,MAAA,IAAI,eAAe,KAAA,CAAA,EAAW;AAC5B,QAAA,QAAA,CAAS,wBAAA,IAA4B,CAAA;AACrC,QAAA,IAAA;AAAA,UACE,8BAAA;AAAA,UACA,IAAA;AAAA,UACA,GAAG,IAAI,CAAA,+CAAA;AAAA,SACT;AACA,QAAA,OAAO,KAAA,CAAA;AAAA,MACT;AAEA,MAAA,IAAI,uBAAA,CAAwB,UAAU,CAAA,EAAG;AACvC,QAAA,QAAA,CAAS,qBAAA,IAAyB,CAAA;AAClC,QAAA,IAAA;AAAA,UACE,6BAAA;AAAA,UACA,IAAA;AAAA,UACA,CAAA,EAAG,IAAI,CAAA,aAAA,EAAgB,gBAAgB,CAAA,qCAAA;AAAA,SACzC;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,UAAA,EAAY,eAAe,CAAA;AAC9D,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,QAAA,CAAS,sBAAA,IAA0B,CAAA;AACnC,QAAA,IAAA;AAAA,UACE,8BAAA;AAAA,UACA,IAAA;AAAA,UACA,CAAA,EAAG,IAAI,CAAA,kCAAA,EAAqC,eAAe,CAAA;AAAA,SAC7D;AAAA,MACF;AAEA,MAAA,QAAA,CAAS,qBAAA,IAAyB,CAAA;AAClC,MAAA,OAAO,OAAA,CAAQ,IAAA;AAAA,IACjB,CAAA,CAAA,MAAQ;AACN,MAAA,QAAA,CAAS,wBAAA,IAA4B,CAAA;AACrC,MAAA,IAAA;AAAA,QACE,8BAAA;AAAA,QACA,IAAA;AAAA,QACA,GAAG,IAAI,CAAA,+CAAA;AAAA,OACT;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,gBAAgB,OAAA,KAAY,SAAA;AAAA,IAC5B,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA,CAAmB,QAAQ,MAAA,EAAQ;AACjC,MAAA,IAAI,OAAA,KAAY,WAAW,OAAO,MAAA;AAClC,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACnD,QAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,KAAA,EAAO,KAAK,CAAA;AAChD,QAAA,IAAI,YAAY,MAAA,EAAW,MAAA,CAAO,gBAAA,CAAiB,KAAK,CAAC,CAAA,GAAI,OAAA;AAAA,MAC/D;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,cAAA,GAAiB;AACf,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,GAAG,QAAA;AAAA,QACH,GAAI,kBAAA,KAAuB,MAAA,GAAY,EAAC,GAAI,EAAE,kBAAA,EAAmB;AAAA,QACjE,GAAI,qBAAA,KAA0B,MAAA,GAC1B,EAAC,GACD,EAAE,qBAAA;AAAsB,OAC9B;AAAA,IACF;AAAA,GACF;AACF;AAGA,IAAM,cAAA,0BAAwB,sCAAsC,CAAA;AAEpE,SAAS,oBAAoB,KAAA,EAAyB;AACpD,EAAA,MAAM,IAAA,GAAO,sBAAsB,KAAK,CAAA;AACxC,EAAA,IAAI,IAAA,KAAS,QAAW,OAAO,cAAA;AAC/B,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,wBAAwB,UAAA,EAA6B;AAC5D,EAAA,OAAO,WAAW,QAAA,CAAS,YAAY,CAAA,IAAK,UAAA,CAAW,SAAS,QAAQ,CAAA;AAC1E;AAEA,SAAS,sBAAsB,KAAA,EAAoC;AACjE,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,uBAAW,OAAA,EAAgB;AACjC,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAC,MAAM,KAAA,KAAU;AAC5C,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAM,QAAA,EAAS;AACrD,MAAA,IAAI,OAAO,KAAA,KAAU,UAAA,IAAc,OAAO,UAAU,QAAA,EAAU;AAC5D,QAAA,OAAO,KAAA,CAAA;AAAA,MACT;AACA,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,YAAA;AAC5B,QAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,MAChB;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,kBAAA,CACP,OACA,QAAA,EACsC;AACtC,EAAA,IAAI,KAAA,CAAM,UAAU,QAAA,EAAU,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,WAAW,KAAA,EAAM;AACrE,EAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,GAAG,QAAQ,CAAC,CAAA,MAAA,CAAA,EAAK,SAAA,EAAW,IAAA,EAAK;AACjE;;;ACrRA,SAAS,gBAAgB,MAAA,EAAmD;AAC1E,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,WAAW,KAAA,IAAS,OAAO,MAAM,KAAA,KAAU,QAAA,SAAiB,KAAA,CAAM,KAAA;AAAA,EACxE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CAAW,OAA2B,SAAA,EAAuC;AACpF,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,aAAa,EAAC;AAAA,IACd,SAAA;AAAA,IACA,UAAA,EAAY,CAAA;AAAA,IACZ,KAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;AAMO,SAAS,sBAAA,CACd,MAAA,EACA,OAAA,GAAyC,EAAC,EACtB;AACpB,EAAA,MAAM,KAAA,GAAQ,gBAAgB,MAAM,CAAA;AAGpC,EAAA,MAAM,QAAA,GAAW,iBAAiB,MAAM,CAAA;AACxC,EAAA,MAAM,aAAa,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAC,KAAA,KAAU,MAAM,OAAO,CAAA;AACjE,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,sBAAA;AAAA,MACN,WAAA,EAAa,CAAC,UAAA,CAAW,MAAM,CAAA;AAAA,MAC/B,SAAA,EACE,qFAAA;AAAA,MACF,UAAA,EAAY,CAAA;AAAA,MACZ,KAAA,EAAO,SAAS,KAAA,IAAS,KAAA;AAAA,MACzB,OAAA,EAAS;AAAA,QACP,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,MAAM,UAAA,CAAW;AAAA,OACnB;AAAA,MACA,cAAc,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAY,EAAC,EAAE;AAAA,MAC7C,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,MAAM,oBAAoB,MAAA,CAAO,IAAA;AAAA,IAC/B,CAAC,KAAA,KACC,KAAA,CAAM,KAAA,KAAU,eAAA,IAAmB,MAAM,MAAA,KAAW;AAAA,GACxD;AACA,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,sBAAA;AAAA,MACN,WAAA,EAAa,CAAC,iBAAA,CAAkB,KAAK,CAAA;AAAA,MACrC,SAAA,EAAW,8DAAA;AAAA,MACX,UAAA,EAAY,CAAA;AAAA,MACZ,OAAO,iBAAA,CAAkB,KAAA;AAAA,MACzB,SAAS,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,kBAAkB,KAAA,EAAM;AAAA,MACxD,cAAc,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAY,EAAC,EAAE;AAAA,MAC7C,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAGA,EAAA,MAAM,QAAA,GAAW,+BAA+B,MAAM,CAAA;AACtD,EAAA,MAAM,gBAAgB,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,WAAW,QAAQ,CAAA;AAC5E,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,WAAA,GAAc,CAAC,aAAA,CAAc,SAAS,CAAA;AAC5C,IAAA,IAAI,aAAA,CAAc,QAAA,EAAU,WAAA,CAAY,IAAA,CAAK,cAAc,QAAQ,CAAA;AACnE,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,yBAAA;AAAA,MACN,WAAA;AAAA,MACA,SAAA,EAAW,4CAAA;AAAA,MACX,UAAA,EAAY,CAAA;AAAA,MACZ,KAAA,EAAO,cAAc,KAAA,IAAS,KAAA;AAAA,MAC9B,OAAA,EAAS;AAAA,QACP,WAAW,aAAA,CAAc,SAAA;AAAA,QACzB,QAAQ,aAAA,CAAc,QAAA;AAAA,QACtB,MAAM,aAAA,CAAc;AAAA,OACtB;AAAA,MACA,cAAc,aAAA,CAAc,QAAA,GACxB,EAAE,IAAA,EAAM,SAAS,UAAA,EAAY,CAAC,aAAA,CAAc,QAAQ,GAAE,GACtD,EAAE,MAAM,MAAA,EAAQ,UAAA,EAAY,EAAC,EAAE;AAAA,MACnC,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAGA,EAAA,MAAM,YAAA,GAAA,CAAgB,OAAA,CAAQ,gBAAA,IAAoB,EAAC,EAAG,IAAA;AAAA,IACpD,CAAC,YAAY,OAAA,CAAQ,MAAA,KAAW,WAAW,OAAA,CAAQ,WAAA,EAAa,UAAU,CAAA,IAAK;AAAA,GACjF;AACA,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAM,cAAc,CAAC,GAAI,YAAA,CAAa,WAAA,IAAe,EAAG,CAAA;AACxD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,kBAAA;AAAA,MACN,WAAA;AAAA,MACA,SAAA,EACE,YAAA,CAAa,OAAA,IACb,CAAA,cAAA,EAAiB,aAAa,MAAM,CAAA,iCAAA,CAAA;AAAA,MACtC,UAAA,EAAY,CAAA;AAAA,MACZ,KAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,QAAQ,YAAA,CAAa,MAAA;AAAA,QACrB,MAAA,EAAQ,YAAY,CAAC,CAAA;AAAA,QACrB,MAAM,YAAA,CAAa;AAAA,OACrB;AAAA,MACA,cAAc,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAY,EAAC,EAAE;AAAA,MAC7C,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAWA,EAAA,MAAM,YAAY,MAAA,CAAO,MAAA;AAAA,IACvB,CAAC,KAAA,KAAuC,KAAA,CAAM,KAAA,KAAU;AAAA,GAC1D;AACA,EAAA,MAAM,UAAU,MAAA,CAAO,MAAA;AAAA,IACrB,CAAC,KAAA,KAAqC,KAAA,CAAM,KAAA,KAAU;AAAA,GACxD;AACA,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAgC;AACzD,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,QAAQ,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,aAAa,SAAA,CAAU,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,OAAO,CAAA;AACvE,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AAEzB,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,UAAU,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC5C,MAAA,MAAM,KAAA,GAAQ,CAAC,EAAA,KAAuB;AACpC,QAAA,IAAI,CAAA,GAAI,CAAA;AACR,QAAA,IAAI,GAAA,GAA0B,EAAA;AAC9B,QAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,QAAA,OAAO,GAAA,IAAO,aAAa,GAAA,CAAI,GAAG,KAAK,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACrD,UAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,UAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AACnC,UAAA,IAAI,CAAC,MAAA,EAAQ;AACb,UAAA,CAAA,IAAK,CAAA;AACL,UAAA,GAAA,GAAM,MAAA;AAAA,QACR;AACA,QAAA,OAAO,CAAA;AAAA,MACT,CAAA;AACA,MAAA,OAAO,MAAM,CAAA,CAAE,MAAM,CAAA,GAAI,KAAA,CAAM,EAAE,MAAM,CAAA;AAAA,IACzC,CAAC,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA;AAC5C,IAAA,MAAM,UAAA,GAAa,QAAA,GAAW,CAAC,QAAQ,IAAI,EAAC;AAC5C,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,0BAAA;AAAA,MACN,WAAA,EAAa,CAAC,GAAA,CAAI,MAAA,EAAQ,GAAG,UAAU,CAAA;AAAA,MACvC,SAAA,EAAW,WACP,+EAAA,GACA,4DAAA;AAAA,MACJ,UAAA,EAAY,CAAA;AAAA,MACZ,KAAA,EAAO,IAAI,KAAA,IAAS,KAAA;AAAA,MACpB,OAAA,EAAS,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,GAAA,CAAI,MAAM,GAAG,IAAA,EAAK;AAAA,MACxF,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM,WAAW,OAAA,GAAU,MAAA;AAAA,QAC3B;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAGA,EAAA,OAAO,UAAA;AAAA,IACL,KAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACjLA,SAAS,gBAAgB,MAAA,EAAsD;AAC7E,EAAA,IAAI,MAAA,KAAW,MAAM,OAAO,SAAA;AAC5B,EAAA,IAAI,MAAA,KAAW,SAAS,OAAO,OAAA;AAC/B,EAAA,IAAI,MAAA,KAAW,WAAW,OAAO,SAAA;AACjC,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,OAAA,CAAQ,KAAA,EAAsB,GAAA,GAAkB,EAAC,EAAe;AACvE,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,OAAO,GAAA,CAAI,MAAA,GAAS,GAAG,CAAA;AACxC,IAAA,OAAA,CAAQ,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,WAAA,CACP,QAAA,EACA,GAAA,EACA,KAAA,EACS;AACT,EAAA,OAAO,QAAA,CAAS,WAAA,CAAY,GAAA,EAAK,KAAK,CAAA;AACxC;AAEA,SAAS,IAAA,CACP,EAAA,EACA,KAAA,EACA,KAAA,EACA,QAAA,EACa;AACb,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,EAAO,WAAA,CAAY,QAAA,EAAU,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA,IAAK,EAAA,EAAI,KAAK,CAAA;AAAA,IAC9D,MAAA,EAAQ,OAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AACF;AAEA,SAAS,SAAS,GAAA,EAA+B;AAC/C,EAAA,OAAO,OAAO,OAAA,CAAQ,GAAA,CAAI,SAAS,KAAK,CAAA,CACrC,OAAO,CAAC,GAAG,KAAK,MAAM,KAAA,GAAQ,CAAC,EAC/B,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACd,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,EAAG,OAAO,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA;AACpC,IAAA,OAAO,EAAE,CAAC,CAAA,CAAE,aAAA,CAAc,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EAChC,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,EAAG,CAAC,EACV,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAC9C;AAEA,SAAS,gBAAgB,KAAA,EAA2B;AAClD,EAAA,OAAO,KAAA,CAAM,OAAO,CAAC,KAAA,KAAU,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AACtE;AAEA,SAAS,YAAY,KAAA,EAAyC;AAC5D,EAAA,OAAO,KAAA,CACJ,MAAA;AAAA,IACC,CAAC,KAAA,KACC,KAAA,CAAM,IAAA,CAAK,MAAM,UAAA,KAAe,MAAA;AAAA;AAAA;AAAA,IAIhC,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS;AAAA,GAC9B,CACC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACd,IAAA,MAAM,KAAA,GAAA,CAAS,EAAE,IAAA,CAAK,KAAA,CAAM,cAAc,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,UAAA,IAAc,CAAA,CAAA;AAC3E,IAAA,OAAO,KAAA,KAAU,CAAA,GAAI,KAAA,GAAQ,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAA;AAAA,EAC3C,CAAC,EAAE,CAAC,CAAA;AACR;AAEA,SAAS,cAAA,CAAe,OAAmB,QAAA,EAAmC;AAC5E,EAAA,MAAM,QAAuB,EAAC;AAC9B,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,UAAA;AAC/B,IAAA,IAAI,UAAU,MAAA,EAAW;AACzB,IAAA,KAAA,MAAW,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAK,EAAG;AAC3C,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,CAAA,KAAA,EAAQ,KAAA,CAAM,KAAK,eAAe,GAAG,CAAA,CAAA;AAAA,QACzC,OAAO,CAAA,EAAG,KAAA,CAAM,KAAK,KAAA,CAAM,IAAI,cAAc,GAAG,CAAA,CAAA;AAAA,QAChD,OAAO,WAAA,CAAY,QAAA,EAAU,GAAA,EAAK,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,QAC5C,MAAA,EAAQ,OAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA,IAAI,KAAA,CAAM,MAAA,IAAU,CAAA,EAAG,OAAO,KAAA;AAAA,IAChC;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,UAAA,CAAW,KAAqB,QAAA,EAAmC;AAC1E,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,IAAA,CAAK,QAAA,EAAU,QAAA,EAAU,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,IAC5C,KAAK,UAAA,EAAY,UAAA,EAAY,IAAI,IAAA,IAAQ,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,IAC5D,KAAK,YAAA,EAAc,YAAA,EAAc,gBAAgB,GAAA,CAAI,MAAM,GAAG,QAAQ,CAAA;AAAA,IACtE,KAAK,iBAAA,EAAmB,cAAA,EAAgB,GAAA,CAAI,QAAA,CAAS,aAAa,QAAQ,CAAA;AAAA,IAC1E,KAAK,eAAA,EAAiB,sBAAA,EAAwB,GAAA,CAAI,QAAA,CAAS,QAAQ,QAAQ,CAAA;AAAA,IAC3E,IAAA,CAAK,eAAA,EAAiB,kBAAA,EAAoB,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,IAChE,KAAK,oBAAA,EAAsB,kBAAA,EAAoB,eAAA,CAAgB,KAAK,GAAG,QAAQ,CAAA;AAAA,IAC/E,KAAK,WAAA,EAAa,mBAAA,EAAqB,QAAA,CAAS,GAAG,GAAG,QAAQ;AAAA,GAChE;AACA,EAAA,IAAI,GAAA,CAAI,eAAe,MAAA,EAAW;AAChC,IAAA,KAAA,CAAM,KAAK,IAAA,CAAK,gBAAA,EAAkB,6BAA6B,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAC,CAAA;AAAA,EAC1F;AACA,EAAA,MAAM,OAAA,GAAU,YAAY,KAAK,CAAA;AACjC,EAAA,IAAI,YAAY,MAAA,EAAW;AACzB,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,IAAA,CAAK,mBAAmB,uBAAA,EAAyB;AAAA,QAC/C,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA;AAAA,QACzB,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA;AAAA,QACzB,UAAA,EAAY,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM;AAAA,SAC9B,QAAQ;AAAA,KACb;AAAA,EACF;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAC,CAAA;AAC7C,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAA,CAAgB,KAAqB,KAAA,EAA0C;AACtF,EAAA,MAAM,aAAiC,EAAC;AACxC,EAAA,MAAM,YAAY,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,oBAAoB,CAAA;AACvE,EAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,WAAW,CAAA;AAC7D,EAAA,MAAM,eAAe,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,gBAAgB,CAAA;AACtE,EAAA,MAAM,iBACJ,OAAO,SAAA,EAAW,KAAA,KAAU,QAAA,GAAW,UAAU,KAAA,GAAQ,CAAA;AAE3D,EAAA,IAAI,GAAA,CAAI,MAAA,KAAW,OAAA,IAAW,cAAA,GAAiB,CAAA,EAAG;AAChD,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,EAAA,EAAI,eAAA;AAAA,MACJ,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,8DAAA;AAAA,MACN,QAAA,EAAU,CAAC,YAAA,EAAc,oBAAoB,CAAA;AAAA,MAC7C,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH,CAAA,MAAA,IAAW,GAAA,CAAI,MAAA,KAAW,IAAA,EAAM;AAC9B,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,EAAA,EAAI,iBAAA;AAAA,MACJ,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,iDAAA;AAAA,MACN,QAAA,EAAU,CAAC,YAAA,EAAc,oBAAoB,CAAA;AAAA,MAC7C,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,EAAA,EAAI,gBAAA;AAAA,MACJ,KAAA,EAAO,aAAA;AAAA,MACP,IAAA,EAAM,iFAAA;AAAA,MACN,QAAA,EAAU,CAAC,QAAA,CAAS,EAAE,CAAA;AAAA,MACtB,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,EAAA,EAAI,iBAAA;AAAA,MACJ,KAAA,EAAO,QAAA;AAAA,MACP,IAAA,EAAM,sEAAA;AAAA,MACN,QAAA,EAAU,CAAC,YAAA,CAAa,EAAE,CAAA;AAAA,MAC1B,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,UAAA;AACT;AAOO,SAAS,qBAAA,CACd,GAAA,EACA,OAAA,GAA0B,EAAC,EACZ;AACf,EAAA,MAAM,gBAAA,GAAmB,QAAQ,gBAAA,IAAoB,OAAA;AACrD,EAAA,MAAM,QAAA,GAAW,wBAAwB,gBAAgB,CAAA;AACzD,EAAA,MAAM,WAAW,IAAI,QAAA,CAAS,EAAE,SAAA,EAAW,QAAA,CAAS,WAAW,CAAA;AAC/D,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,OAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,EAAK,QAAQ,CAAA;AACtC,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAO,MAAA,CAAO,WAAA,CAAY,UAAU,OAAA,EAAS,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,IACvD,GAAI,GAAA,CAAI,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,MAAA,CAAO,WAAA,CAAY,QAAA,EAAU,QAAQ,GAAA,CAAI,IAAI,CAAC,CAAA,KAAM,EAAC;AAAA,IAC1F,GAAI,GAAA,CAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAA,EAAE,GAAI,EAAC;AAAA,IAC1E,gBAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAY,IAAA,KAAS,SAAA,GAAY,EAAC,GAAI,eAAA,CAAgB,KAAK,KAAK,CAAA;AAAA,IAChE,KAAA,EAAO;AAAA,MACL,sDAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;;;ACpMO,SAAS,oBAAoB,IAAA,EAAoC;AACtE,EAAA,MAAM,GAAA,GAAM,KAAK,IAAA,EAAK;AACtB,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,sBAAsB,CAAA;AAC1C,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,uBAAuB,IAAI,CAAA,oCAAA;AAAA,KAC7B;AAAA,EACF;AACA,EAAA,MAAM,EAAA,GAAK,EAAE,CAAC,CAAA;AACd,EAAA,MAAM,KAAK,aAAA,CAAc,CAAA,CAAE,CAAC,CAAA,CAAE,MAAM,CAAA;AACpC,EAAA,OAAO,EAAE,IAAI,EAAA,EAAG;AAClB;AAEA,SAAS,eAAA,CACP,SACA,MAAA,EACS;AACT,EAAA,IAAI,YAAY,MAAA,IAAa,CAAC,OAAO,QAAA,CAAS,OAAO,GAAG,OAAO,KAAA;AAC/D,EAAA,QAAQ,OAAO,EAAA;AAAI,IACjB,KAAK,GAAA;AACH,MAAA,OAAO,UAAU,MAAA,CAAO,EAAA;AAAA,IAC1B,KAAK,IAAA;AACH,MAAA,OAAO,WAAW,MAAA,CAAO,EAAA;AAAA,IAC3B,KAAK,GAAA;AACH,MAAA,OAAO,UAAU,MAAA,CAAO,EAAA;AAAA,IAC1B,KAAK,IAAA;AACH,MAAA,OAAO,WAAW,MAAA,CAAO,EAAA;AAAA,IAC3B;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEA,SAAS,uBAAA,CAAwB,MAAe,IAAA,EAAmC;AACjF,EAAA,MAAM,CAAA,GAAA,CAAK,IAAA,IAAQ,IAAA,GAAO,IAAA,GAAO,WAAA,EAAY;AAC7C,EAAA,OAAO,CAAA,IAAK,CAAA,KAAM,EAAA,GAAK,CAAA,GAAI,MAAA;AAC7B;AAEA,SAAS,WAAA,CAAY,KAAa,MAAA,EAAyB;AACzD,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,QAAA,CAAS,MAAA,CAAO,aAAa,CAAA;AACxD;AAEA,eAAsB,YAAA,CACpB,OACA,OAAA,EAC8B;AAC9B,EAAA,IAAI,WAAW,YAAA,CAAiB,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAA;AAC/D,EAAA,MAAM,cAAA,GAAiB,uBAAA,CAAwB,OAAA,CAAQ,IAAA,EAAM,QAAQ,IAAI,CAAA;AACzE,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAK;AACrC,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAK;AACrC,EAAA,IAAI,cAAA;AACJ,EAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,IAAA,cAAA,GAAiB,mBAAA,CAAoB,QAAQ,QAAQ,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,OAAA,EAAS,IAAA,EAAK;AACxC,EAAA,MAAMA,kBAAAA,GAAoB,sBAAA,CAAuB,OAAA,CAAQ,WAAW,CAAA;AAEpE,EAAA,MAAM,gBAAA,GAAmB,OAAA;AAAA,IACvB,OAAA,CAAQ,MAAA,IACN,cAAA,IACA,SAAA,IACA,aACA,cAAA,IACAA;AAAA,GACJ;AAEA,EAAA,MAAM,UAA+B,EAAC;AACtC,EAAA,MAAM,YAAA,GAAe,SAAA,IAAa,SAAA,KAAc,EAAA,GAAK,SAAA,GAAY,MAAA;AAEjE,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,OAAO,CAAA,CAAE,KAAA;AAAA,QACT,SAAS,CAAA,CAAE,IAAA;AAAA,QACX,WAAW,CAAA,CAAE,MAAA;AAAA,QACb,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,WAAA,EAAa,YAAA,GACT,CAAA,iBAAA,EAAoB,YAAY,CAAA,CAAA,GAChC,oBAAA;AAAA,QACJ,eAAe,YAAA,GAAe,CAAC,OAAO,SAAS,CAAA,GAAI,CAAC,KAAK,CAAA;AAAA,QACzD,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,GAAI,YAAA,GAAe,EAAE,SAAA,EAAW,YAAA,KAAiB;AAAC,OACnD,CAAA;AAAA,IACH;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,MAAA,MAAM,EAAA,GAAK,EAAE,SAAA,IAAa,CAAA;AAC1B,MAAA,MAAM,EAAA,GAAK,EAAE,SAAA,IAAa,CAAA;AAC1B,MAAA,IAAI,EAAA,KAAO,EAAA,EAAI,OAAO,EAAA,GAAK,EAAA;AAC3B,MAAA,OAAO,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAA;AAAA,IACtC,CAAC,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAAA,EAC/B;AAEA,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,CAAA,CAAE,MAAA,KAAW,QAAQ,MAAA,EAAQ;AAEnD,IAAA,IAAI,SAAuB,EAAC;AAC5B,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,MAAM,uBAAA,CAAwB,CAAA,CAAE,QAAQ,CAAA;AAAA,IACnD,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAEzB,IAAA,MAAM,UAAA,GAAa,cAAc,CAAA,EAAG;AAAA,MAClC,cAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAc,OAAA,CAAQ;AAAA,KACvB,CAAA;AACD,IAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,UAAU,CAAA;AAE1B,IAAA,MAAM,WAAA,GAAc,cAAA,CAAe,CAAA,EAAG,MAAA,EAAQ;AAAA,MAC5C,cAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAc,OAAA,CAAQ;AAAA,KACvB,CAAA;AACD,IAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,WAAW,CAAA;AAE3B,IAAA,IAAIA,kBAAAA,EAAmB;AACrB,MAAA,MAAM,QAAA,GAAW,+BAA+B,MAAM,CAAA;AACtD,MAAA,MAAM,UAAU,QAAA,CAAS,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,WAAWA,kBAAiB,CAAA;AACjF,MAAA,KAAA,MAAW,WAAW,OAAA,EAAS;AAC7B,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,SAAS,CAAA,CAAE,IAAA;AAAA,UACX,WAAW,CAAA,CAAE,MAAA;AAAA,UACb,UAAU,OAAA,CAAQ,IAAA;AAAA,UAClB,WAAW,OAAA,CAAQ,UAAA;AAAA,UACnB,WAAA,EAAa,CAAA,mBAAA,EAAsB,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,UACjD,aAAA,EAAe,CAAC,gBAAA,EAAkB,cAAc,CAAA;AAAA,UAChD,UAAU,CAAA,CAAE;AAAA,SACb,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,IAAA,MAAM,EAAA,GAAK,EAAE,SAAA,IAAa,CAAA;AAC1B,IAAA,MAAM,EAAA,GAAK,EAAE,SAAA,IAAa,CAAA;AAE1B,IAAA,IAAI,EAAA,KAAO,EAAA,EAAI,OAAO,EAAA,GAAK,EAAA;AAC3B,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,EAAE,KAAK,CAAA;AAC5C,IAAA,IAAI,MAAA,KAAW,GAAG,OAAO,MAAA;AACzB,IAAA,OAAA,CAAQ,EAAE,QAAA,IAAY,EAAA,EAAI,aAAA,CAAc,CAAA,CAAE,YAAY,EAAE,CAAA;AAAA,EAC1D,CAAC,CAAA;AAED,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAC/B;AAEA,SAAS,aAAA,CACP,GACA,IAAA,EAOqB;AAErB,EAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,SAAA,SAAkB,EAAC;AAKnD,EAAA,IAAI,KAAK,YAAA,IAAgB,CAAA,CAAE,WAAW,IAAA,CAAK,YAAA,SAAqB,EAAC;AACjE,EAAA,IAAI,IAAA,CAAK,SAAA,IAAa,CAAC,WAAA,CAAY,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAA,EAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AACrE,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,IACE,IAAA,CAAK,kBACL,CAAC,eAAA,CAAgB,EAAE,UAAA,EAAY,IAAA,CAAK,cAAc,CAAA,EAClD;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,IAAA,CAAK,YAAA,EAAc,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA;AAC/C,EAAA,IAAI,IAAA,CAAK,SAAA,EAAW,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,MAAA,CAAO,IAAA,CAAK,gBAAgB,CAAA;AACrD,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAEjC,EAAA,OAAO;AAAA,IACL;AAAA,MACE,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,SAAS,CAAA,CAAE,IAAA;AAAA,MACX,WAAW,CAAA,CAAE,MAAA;AAAA,MACb,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,YAAY,CAAA,CAAE,UAAA;AAAA,MACd,WAAA,EAAa,CAAA,WAAA,EAAc,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,MAC5C,aAAA,EAAe,MAAA;AAAA,MACf,UAAU,CAAA,CAAE;AAAA;AACd,GACF;AACF;AAEA,SAAS,cAAA,CACP,CAAA,EACA,MAAA,EACA,IAAA,EAOqB;AACrB,EAAA,MAAM,MAA2B,EAAC;AAClC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA8B;AAElD,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,UAAU,cAAA,EAAgB;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAK,CAAA,CAAuB,MAAA,EAAQ,CAAqB,CAAA;AAAA,IACnE;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,UAAU,gBAAA,EAAkB;AAClC,IAAA,MAAM,CAAA,GAAI,CAAA;AACV,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA;AAC9B,IAAA,IAAI,CAAC,CAAA,EAAG;AAER,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,WAAW,CAAA,CAAE,IAAA;AAEnB,IAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,QAAA,KAAa,IAAA,CAAK,cAAA,EAAgB;AAC3D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GACJ,IAAA,CAAK,cAAA,IACL,IAAA,CAAK,SAAA,IACL,IAAA,CAAK,SAAA,IACL,IAAA,CAAK,cAAA,IACL,IAAA,CAAK,YAAA,KAAiB,OAAA,IACtB,KAAK,YAAA,KAAiB,SAAA;AAExB,IAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,IAAA,IAAI,IAAA,CAAK,YAAA,KAAiB,OAAA,IAAW,CAAA,CAAE,WAAW,OAAA,EAAS;AACzD,MAAA,MAAA,CAAO,KAAK,aAAa,CAAA;AAAA,IAC3B,WAAW,IAAA,CAAK,YAAA,KAAiB,SAAA,IAAa,CAAA,CAAE,WAAW,SAAA,EAAW;AACpE,MAAA,MAAA,CAAO,KAAK,aAAa,CAAA;AAAA,IAC3B,WAAW,IAAA,CAAK,YAAA,KAAiB,OAAA,IAAW,IAAA,CAAK,iBAAiB,SAAA,EAAW;AAC3E,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAI,CAAC,WAAA,CAAY,CAAA,CAAE,IAAA,EAAM,IAAA,CAAK,SAAS,CAAA,EAAG;AAC1C,MAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,IACzB;AACA,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,MAAM,QAAA,GACJ,OAAO,CAAA,CAAE,QAAA,EAAU,aAAa,QAAA,GAC5B,CAAA,CAAE,QAAA,CAAS,QAAA,GACX,CAAA,CAAE,IAAA;AACR,MAAA,IAAI,CAAC,WAAA,CAAY,QAAA,EAAU,IAAA,CAAK,SAAS,CAAA,EAAG;AAC5C,MAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,IACzB;AACA,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,IAAI,CAAC,eAAA,CAAgB,CAAA,CAAE,UAAA,EAAY,IAAA,CAAK,cAAc,CAAA,EAAG;AACzD,MAAA,MAAA,CAAO,KAAK,iBAAiB,CAAA;AAAA,IAC/B;AACA,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,IACzB;AAEA,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAEzB,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,SAAS,CAAA,CAAE,IAAA;AAAA,MACX,WAAW,CAAA,CAAE,MAAA;AAAA,MACb,QAAQ,CAAA,CAAE,MAAA;AAAA,MACV,UAAU,CAAA,CAAE,IAAA;AAAA,MACZ,QAAA;AAAA,MACA,SAAA,EAAW,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,SAAA;AAAA,MAC5B,YAAY,CAAA,CAAE,UAAA;AAAA,MACd,WAAA,EAAa,CAAA,YAAA,EAAe,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,MAC7C,aAAA,EAAe,MAAA;AAAA,MACf,UAAU,CAAA,CAAE;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,eAAsB,qBAAA,CACpB,SAAA,EACA,SAAA,EACA,OAAA,EAC0B;AAC1B,EAAA,MAAM,QAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,QAAQ,QAAQ,CAAA;AACjC,MAAA,MAAM,IAAA,GAAO,MAAM,eAAA,CAAgB,QAAQ,CAAA;AAC3C,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACjB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;;;ACxVA,IAAM,0BAAA,GAA6B,KAAA;AAEnC,IAAM,wBAAA,GAAmD;AAAA,EACvD,KAAA,EAAO,CAAA;AAAA,EACP,aAAA,EAAe,CAAA;AAAA,EACf,IAAA,EAAM,CAAA;AAAA,EACN,KAAA,EAAO,CAAA;AAAA,EACP,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,yBAAA,uBAAgC,GAAA,CAAY;AAAA,EAChD,SAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,wBAAwB,KAAA,EAAwC;AACvE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,yBAAA,CAA0B,IAAI,KAAK,CAAA;AACzE;AAEA,SAAS,WAAW,GAAA,EAA+B;AACjD,EAAA,OAAO,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,SAAA,IAAa,CAAA;AACzC;AAEA,SAAS,iBAAiB,IAAA,EAA2C;AACnE,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,EAAA,GAAK,WAAW,GAAG,CAAA;AACzB,IAAA,IAAI,EAAA,GAAK,QAAQ,MAAA,GAAS,EAAA;AAAA,EAC5B;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAc,IAAA,EAAuD;AAC5E,EAAA,IAAI,QAAA;AACJ,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,GAAA,CAAI,cAAc,MAAA,EAAW;AACjC,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,GAAA,CAAI,SAAA,GAAY,QAAA,EAAU;AACtD,MAAA,QAAA,GAAW,GAAA,CAAI,SAAA;AAAA,IACjB;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,sBAAsB,IAAA,EAAuD;AACpF,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAC9B,EAAA,IAAI,MAAA;AACJ,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,GAAA,CAAI,OAAA,KAAY,MAAA,EAAW,OAAO,MAAA;AACtC,IAAA,IAAI,WAAW,MAAA,IAAa,GAAA,CAAI,OAAA,GAAU,MAAA,WAAiB,GAAA,CAAI,OAAA;AAAA,EACjE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBAAmB,IAAA,EAA8D;AACxF,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,GAAA,GAAM,IAAI,QAAA,EAAU,aAAA;AAC1B,IAAA,IAAI,CAAC,uBAAA,CAAwB,GAAG,CAAA,EAAG;AACnC,IAAA,MAAM,QAAA,GAAW,wBAAA,CAAyB,GAAG,CAAA,IAAK,CAAA;AAClD,IAAA,IAAI,WAAW,YAAA,EAAc;AAC3B,MAAA,YAAA,GAAe,QAAA;AACf,MAAA,IAAA,GAAO,GAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,gBAAgB,IAAA,EAAiE;AACxF,EAAA,MAAM,YAAY,IAAA,CACf,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAW,OAAO,CAAA,CACtC,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,UAAA,CAAW,CAAC,CAAA,GAAI,UAAA,CAAW,CAAC,CAAC,CAAA;AAC/C,EAAA,MAAM,MAAA,GAAS,UAAU,CAAC,CAAA;AAC1B,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AAEpB,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,QAAA,IAAY,EAAC;AACjC,EAAA,MAAM,UACJ,OAAO,IAAA,CAAK,YAAA,KAAiB,QAAA,IAAY,KAAK,YAAA,CAAa,IAAA,EAAK,KAAM,EAAA,GAClE,KAAK,YAAA,CAAa,IAAA,EAAK,GACtB,MAAA,CAAO,QAAQ,MAAA,CAAO,KAAA;AAC7B,EAAA,MAAM,IAAA,GACJ,OAAO,IAAA,CAAK,SAAA,KAAc,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,IAAA,EAAK,KAAM,EAAA,GAC5D,IAAA,CAAK,SAAA,CAAU,MAAK,GACpB,MAAA;AAEN,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,SAAS,IAAA,EAAK;AAC9C;AAEA,SAAS,mBACP,IAAA,EACiC;AACjC,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAIC,KAAAA,GAAO,CAAA;AACX,EAAA,IAAI,KAAA,GAAQ,KAAA;AAEZ,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,OAAA,GAAU,IAAI,QAAA,EAAU,YAAA;AAC9B,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC7C,IAAA,MAAM,MAAA,GAAS,OAAA;AACf,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,MAAA,IAAA,IAAQ,MAAA,CAAO,IAAA;AACf,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV;AACA,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,MAAA,IAAA,IAAQ,MAAA,CAAO,IAAA;AACf,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV;AACA,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,MAAAA,SAAQ,MAAA,CAAO,IAAA;AACf,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV;AAAA,EACF;AAEA,EAAA,OAAO,QAAQ,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAAA,OAAK,GAAI,MAAA;AACxC;AAEA,SAAS,yBAAyB,IAAA,EAAuD;AACvF,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,GAAG,IAAI,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,WAAW,CAAC,CAAA,GAAI,UAAA,CAAW,CAAC,CAAC,CAAA,EAAG;AACzE,IAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,EAAU,kBAAA;AAC5B,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACpD,MAAA,OAAO,MAAM,IAAA,EAAK;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,mBAAA,CACd,IAAA,EACA,OAAA,GAAuC,EAAC,EACzB;AACf,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,SAAA;AAE9B,EAAA,IAAI,IAAA,CAAK,KAAK,CAAC,GAAA,KAAQ,IAAI,MAAA,KAAW,SAAS,GAAG,OAAO,SAAA;AAEzD,EAAA,MAAM,QAAA,GAAW,mBAAmB,IAAI,CAAA;AACxC,EAAA,IAAI,QAAA,IAAY,QAAA,KAAa,SAAA,EAAW,OAAO,QAAA;AAE/C,EAAA,IAAI,IAAA,CAAK,KAAK,CAAC,GAAA,KAAQ,IAAI,MAAA,KAAW,OAAO,GAAG,OAAO,OAAA;AAEvD,EAAA,IAAI,IAAA,CAAK,MAAM,CAAC,GAAA,KAAQ,IAAI,MAAA,KAAW,SAAS,GAAG,OAAO,WAAA;AAE1D,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,GAAA,EAAI;AACxC,EAAA,MAAM,gBAAA,GAAmB,QAAQ,gBAAA,IAAoB,0BAAA;AACrD,EAAA,MAAM,MAAA,GAAS,iBAAiB,IAAI,CAAA;AACpC,EAAA,IAAI,MAAA,GAAS,CAAA,IAAK,KAAA,GAAQ,MAAA,GAAS,kBAAkB,OAAO,OAAA;AAE5D,EAAA,OAAO,SAAA;AACT;AAMO,SAAS,oBAAA,CACd,OAAA,EAeA,IAAA,EACA,OAAA,GAAuC,EAAC,EACxB;AAChB,EAAA,MAAM,WAAA,GAAc,KACjB,MAAA,CAAO,CAAC,QAAQ,OAAA,CAAQ,MAAA,CAAO,SAAS,GAAA,CAAI,KAAK,CAAC,CAAA,CAClD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC,CAAA;AAEhD,EAAA,MAAM,SAAA,GAAY,cAAc,WAAW,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,sBAAsB,WAAW,CAAA;AACjD,EAAA,MAAM,aACJ,SAAA,KAAc,MAAA,IAAa,OAAA,KAAY,MAAA,GAAY,UAAU,SAAA,GAAY,MAAA;AAE3E,EAAA,IAAI,aAAA;AACJ,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,UAAA;AACJ,EAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,IAAA,MAAM,IAAA,GAAO,8BAAA,CAA+B,GAAA,CAAI,QAAQ,CAAA;AACxD,IAAA,IAAI,CAAC,aAAA,IAAiB,IAAA,EAAM,aAAA,kBAA+B,IAAA,CAAK,aAAA;AAChE,IAAA,IAAI,CAAC,KAAA,IAAS,IAAA,EAAM,KAAA,UAAe,IAAA,CAAK,KAAA;AACxC,IAAA,IAAI,CAAC,UAAA,IAAc,IAAA,EAAM,YAAA,eAA2B,IAAA,CAAK,YAAA;AAAA,SAAA,IAChD,CAAC,UAAA,IAAc,IAAA,EAAM,YAAA,eAA2B,IAAA,CAAK,YAAA;AAAA,EAChE;AAEA,EAAA,MAAM,MAAA,GAAS,iBAAiB,WAAW,CAAA;AAC3C,EAAA,MAAM,YAAA,GACJ,MAAA,GAAS,CAAA,GAAI,IAAI,IAAA,CAAK,MAAM,CAAA,CAAE,WAAA,EAAY,GAAA,iBAAI,IAAI,IAAA,CAAK,CAAC,GAAE,WAAA,EAAY;AAExE,EAAA,MAAM,UAAA,GAAa,QAAQ,OAAA,CAAQ,MAAA;AAAA,IACjC,CAAC,KAAA,KAAU,KAAA,CAAM,YAAY,MAAA,IAAA,CAAc,KAAA,CAAM,WAAW,CAAA,IAAK;AAAA,GACnE,CAAE,MAAA;AAEF,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,MAAA,EAAQ,mBAAA,CAAoB,WAAA,EAAa,OAAO,CAAA;AAAA,IAChD,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,gBAAgB,WAAW,CAAA;AAAA,IACtC,YAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA,EAAoB,yBAAyB,WAAW,CAAA;AAAA,IACxD,YAAA,EAAc,mBAAmB,WAAW;AAAA,GAC9C;AACF;;;AC/NA,SAAS,WAAW,OAAA,EAAiC;AACnD,EAAA,MAAM,IAAA,GACJ,OAAA,CAAQ,UAAA,IACR,OAAA,CAAQ,iBACR,OAAA,CAAQ,SAAA;AACV,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,SAAA,EAAY,OAAA,CAAQ,SAAS,CAAA,WAAA,EAAc,OAAA,CAAQ,UAAU,OAAO,CAAA,CAAA;AAAA,EACpF;AACA,EAAA,IAAI,QAAQ,kBAAA,EAAoB;AAC9B,IAAA,OAAO,GAAG,IAAI,CAAA,SAAA,EAAY,OAAA,CAAQ,SAAS,IAAI,MAAM,CAAA,yBAAA,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,GAAG,IAAI,CAAA,SAAA,EAAY,OAAA,CAAQ,SAAS,IAAI,MAAM,CAAA,CAAA;AACvD;AAEA,SAAS,YAAA,CAAa,OAA2B,KAAA,EAAuB;AACtE,EAAA,IAAI,CAAC,SAAS,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI,OAAO,QAAQ,CAAA,GAAI,KAAA;AACtD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AACzC,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,IAAA,CAAK,OAAO,CAAA;AAC5C,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,KAAA,GAAQ,CAAA,GAAI,KAAA;AAC/B,EAAA,MAAM,SAAS,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,CAAC,GAAI,EAAE,CAAA;AAC5C,EAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,EAAA,MAAM,IAAA,GACJ,SAAS,GAAA,GAAM,GAAA,GAAO,SAAS,GAAA,GAAM,GAAA,GAAS,IAAA,KAAS,GAAA,GAAM,IAAA,GAAY,KAAA;AAC3E,EAAA,OAAO,QAAQ,MAAA,GAAS,IAAA;AAC1B;AAEA,SAAS,SAAS,MAAA,EAAgC;AAChD,EAAA,OAAO,MAAA,KAAW,OAAA;AACpB;AAEA,SAAS,QAAQ,MAAA,EAAgC;AAC/C,EAAA,OAAO,MAAA,KAAW,OAAA;AACpB;AAEA,SAAS,kBAAkB,OAAA,EAAiC;AAC1D,EAAA,MAAM,UAAU,OAAA,CAAQ,YAAA;AACxB,EAAA,IAAI,CAAC,SAAS,OAAO,CAAA;AACrB,EAAA,OAAO,OAAA,CAAQ,IAAA;AACjB;AAMO,SAAS,oBAAA,CACd,KAAA,EACA,OAAA,GAAuC,EAAC,EACvB;AACjB,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,GAAA,EAAI;AACxC,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AACjD,EAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,OAAO,EAAE,WAAA,EAAY;AAC/C,EAAA,MAAM,KAAA,GACJ,MAAA,CAAO,SAAA,CAAU,OAAA,CAAQ,KAAK,KAAK,OAAA,CAAQ,KAAA,GAAS,CAAA,GAAI,OAAA,CAAQ,KAAA,GAAS,EAAA;AAE3E,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,CAAC,OAAA,KAAY;AAClD,IAAA,MAAMC,WAAAA,GAAa,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA;AAClD,IAAA,OAAO,MAAA,CAAO,QAAA,CAASA,WAAU,CAAA,IAAKA,WAAAA,IAAc,OAAA;AAAA,EACtD,CAAC,CAAA;AAED,EAAA,MAAM,OAAA,GAA2B,CAAC,GAAG,QAAQ,CAAA,CAC1C,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,YAAY,IAAI,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,YAAY,CAAC,CAAA,CACtE,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,CACd,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,IACjB,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,OAAA,EAAS,WAAW,OAAO,CAAA;AAAA,IAC3B,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,QAAA,EAAU,QAAQ,MAAA,CAAO;AAAA,GAC3B,CAAE,CAAA;AAEJ,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,qBAAA,GAAwB,CAAA;AAC5B,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAAG,MAAA,IAAU,CAAA;AACxC,IAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,EAAG,KAAA,IAAS,CAAA;AACtC,IAAA,qBAAA,IAAyB,kBAAkB,OAAO,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAA;AAAA,IACP,UAAU,QAAA,CAAS,MAAA;AAAA,IACnB,MAAA;AAAA,IACA,KAAA;AAAA,IACA,iBAAA,EAAmB,qBAAA;AAAA,IACnB;AAAA,GACF;AACF;AAGO,SAAS,0BAAA,CACd,SACA,OAAA,EACQ;AACR,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,KAAA,GAAQ,OAAA,EAAS,KAAA,IAAS,IAAA,CAAK,GAAA,EAAI;AACzC,EAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,KAAK,CAAA;AACjC,EAAA,UAAA,CAAW,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,WAAW,OAAA,EAAQ;AAEnC,EAAA,MAAM,KAAA,GAAQ,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAC5B,CAAC,KAAA,KAAU,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,IAAK;AAAA,GAC/C;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACjC;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAAS,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AACnC,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,QAAQ,CAAA,SAAA,CAAW,CAAA;AAC3C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,MAAM,CAAA,OAAA,CAAS,CAAA;AACvC,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,KAAK,CAAA,MAAA,CAAQ,CAAA;AACrC,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,iBAAiB,CAAA,mBAAA,CAAqB,CAAA;AAE9D,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;AC7HO,IAAM,qBAAA,GAAwB;AAAA,EACnC,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF;;;ACzBA,eAAsB,uBACpB,IAAA,EAC2B;AAC3B,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB,IAAA,CAAK,QAAQ,CAAA;AAC1D,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,KAAA,CAAM,UAAU,aAAA,EAAe;AACnC,MAAA,IAAI,KAAA,CAAM,QAAA,IAAY,OAAO,KAAA,CAAM,aAAa,QAAA,EAAU;AACxD,QAAA,QAAA,GAAW,KAAA,CAAM,QAAA;AAAA,MACnB;AACA,MAAA;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO;AAAA,IACL,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf;AAAA,GACF;AACF;AAGA,eAAsB,sBACpB,KAAA,EAC6B;AAC7B,EAAA,MAAM,MAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,GAAA,CAAI,IAAA,CAAK,MAAM,sBAAA,CAAuB,IAAI,CAAC,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,GAAA;AACT;;;ACvBA,SAAS,uBAAuB,IAAA,EAAuC;AACrE,EAAA,OAAO;AAAA,IACL,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAA,EAAU;AAAA,GACZ;AACF;AAGO,SAAS,yBAAA,CACd,KAAA,EACA,OAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,EAAW,IAAA,EAAK;AAC1C,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,EAAS,IAAA,EAAK;AACtC,EAAA,MAAM,WAA6B,EAAC;AAEpC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,KAAA,GAAQ,kBAAkB,OAAA,EAAS;AAAA,MACvC,kBAAA,EAAoB,QAAQ,kBAAA,KAAuB;AAAA,KACpD,CAAA;AACD,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,KAAA,CAAM,QAAQ,CAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,cAAc,SAAS,CAAA;AAC1E,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO;AAAA,QACL,OAAO,EAAC;AAAA,QACR,UAAA,EAAY,SAAA;AAAA,QACZ,SAAA,EAAW,SAAA;AAAA,QACX,QAAQ,EAAC;AAAA,QACT,QAAA;AAAA,QACA,QAAA,EAAU;AAAA,OACZ;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,OAAA,CAAQ,MAAM,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,CAAC,SAAS,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAChE,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,UAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAW,SAAA;AAAA,MACX,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,QAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,SAAS,OAAA,CACZ,MAAA,CAAO,CAAC,GAAA,KAAQ,8BAAA,CAA+B,IAAI,QAAQ,CAAA,EAAG,OAAA,KAAY,OAAO,EACjF,GAAA,CAAI,CAAC,QAAQ,GAAA,CAAI,KAAK,EACtB,IAAA,EAAK;AACR,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO;AAAA,QACL,OAAO,EAAC;AAAA,QACR,UAAA,EAAY,OAAA;AAAA,QACZ,SAAA,EAAW,OAAA;AAAA,QACX,QAAQ,EAAC;AAAA,QACT,QAAA;AAAA,QACA,QAAA,EAAU;AAAA,OACZ;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,MAAM,CAAA;AAC/B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,MAAM,MAAA,CAAO,CAAC,SAAS,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACtD,UAAA,EAAY,OAAA;AAAA,MACZ,SAAA,EAAW,OAAA;AAAA,MACX,MAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,CAAC,GAAG,KAAK,CAAA;AAAA,IAChB,UAAA,EAAY,EAAA;AAAA,IACZ,SAAA,EAAW,SAAA;AAAA,IACX,QAAQ,EAAC;AAAA,IACT,QAAA;AAAA,IACA,QAAA,EAAU;AAAA,GACZ;AACF;AAGO,SAAS,8BACd,KAAA,EACoB;AACpB,EAAA,OAAO,KAAA,CAAM,IAAI,sBAAsB,CAAA;AACzC;;;AC5FO,SAAS,mBAAA,CACd,IAAA,EACA,OAAA,GAAsC,EAAC,EACtB;AACjB,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,SAAA;AACnC,EAAA,MAAM,UAA2B,EAAC;AAElC,EAAA,IAAI,YAAY,SAAA,EAAW;AACzB,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,IAAA,EAAM,OAAO,CAAA;AAC7C,IAAA,KAAA,MAAW,OAAA,IAAW,MAAM,QAAA,EAAU;AACpC,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAK,OAAA,CAAQ,SAAA;AAAA,QACb,IAAA,EAAM,SAAA;AAAA,QACN,MAAA,EAAQ,CAAC,GAAG,OAAA,CAAQ,MAAM;AAAA,OAC3B,CAAA;AAAA,IACH;AACA,IAAA,IAAI,KAAA,CAAM,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AACnC,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,GAAA,EAAK,cAAA;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,MAAA,EAAQ,CAAC,GAAG,KAAA,CAAM,cAAc;AAAA,OACjC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,GAAA,CAAI,aAAA,CAAc,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,EAC1D;AAEA,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAsB;AAC1C,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,OAAA,GAAU,8BAAA,CAA+B,GAAA,CAAI,QAAQ,CAAA,EAAG,OAAA;AAC9D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,QAAA,CAAS,IAAA,CAAK,IAAI,KAAK,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,OAAO,KAAK,EAAC;AACxC,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,KAAK,CAAA;AACrB,IAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,MAAM,CAAA;AAAA,EAC7B;AAEA,EAAA,KAAA,MAAW,CAAC,KAAK,MAAM,CAAA,IAAK,CAAC,GAAG,OAAA,CAAQ,OAAA,EAAS,CAAA,CAAE,IAAA;AAAA,IAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAC9D,CAAA,CAAE,aAAA,CAAc,CAAC;AAAA,GACnB,EAAG;AACD,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,GAAA;AAAA,MACA,IAAA,EAAM,OAAA;AAAA,MACN,MAAA,EAAQ,OAAO,IAAA;AAAK,KACrB,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,GAAA,EAAK,cAAA;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,MAAA,EAAQ,SAAS,IAAA;AAAK,KACvB,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,OAAA;AACT;;;AC7DA,SAAS,YAAA,GAAkC;AACzC,EAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,UAAU,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,cAAA,EAAgB,CAAA,EAAE;AAC3E;AAEA,SAAS,YAAA,CACP,QACA,MAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,IAC/B,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,IAC/B,QAAA,EAAU,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA;AAAA,IACnC,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,IAC/B,cAAA,EAAgB,MAAA,CAAO,cAAA,GAAiB,MAAA,CAAO;AAAA,GACjD;AACF;AAEA,SAAS,iBAAA,CACP,MACA,OAAA,EACsB;AACtB,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,OAAA,EAAQ;AAC5C;AAGO,SAAS,4BAAA,CACd,QACA,KAAA,EAQyB;AACzB,EAAA,IAAI,MAAM,QAAA,EAAU;AAClB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,IAAU,qBAAA;AAAA,MAC7B,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,QAAQ,EAAC;AAAA,MACT,YAAY,EAAC;AAAA,MACb,SAAS,EAAE,GAAG,YAAA,EAAa,EAAG,QAAQ,CAAA,EAAE;AAAA,MACxC,UAAU,EAAC;AAAA,MACX,WAAA,EAAa;AAAA,QACX,iBAAA;AAAA,UACE,4BAAA;AAAA,UACA,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA,YAAA,EAAe,MAAM,UAAU,CAAA;AAAA;AACnD,OACF;AAAA,MACA,gBAAgB,EAAC;AAAA,MACjB,GAAI,KAAA,CAAM,eAAA,EAAiB,MAAA,GACvB,EAAE,eAAA,EAAiB,CAAC,GAAG,KAAA,CAAM,eAAe,CAAA,EAAE,GAC9C;AAAC,KACP;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,KAAA,IAAS,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AACtC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,IAAU,qBAAA;AAAA,MAC7B,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,YAAY,EAAC;AAAA,MACb,SAAS,EAAE,GAAG,YAAA,EAAa,EAAG,QAAQ,CAAA,EAAE;AAAA,MACxC,UAAU,EAAC;AAAA,MACX,WAAA,EAAa;AAAA,QACX,iBAAA;AAAA,UACE,2BAAA;AAAA,UACA,CAAA,sBAAA,EAAyB,KAAA,CAAM,SAAS,CAAA,EAAA,EAAK,MAAM,UAAU,CAAA;AAAA;AAC/D,OACF;AAAA,MACA,gBAAgB,EAAC;AAAA,MACjB,GAAI,KAAA,CAAM,eAAA,EAAiB,MAAA,GACvB,EAAE,eAAA,EAAiB,CAAC,GAAG,KAAA,CAAM,eAAe,CAAA,EAAE,GAC9C;AAAC,KACP;AAAA,EACF;AAEA,EAAA,IAAI,UAAU,YAAA,EAAa;AAC3B,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,MAAM,cAAsC,EAAC;AAC7C,EAAA,MAAM,iBAA4C,EAAC;AACnD,EAAA,MAAM,aAAiE,EAAC;AAExE,EAAA,KAAA,MAAW,UAAU,MAAA,EAAQ;AAC3B,IAAA,OAAA,GAAU,YAAA,CAAa,OAAA,EAAS,MAAA,CAAO,OAAO,CAAA;AAC9C,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,QAAQ,CAAA;AAChC,IAAA,WAAA,CAAY,IAAA,CAAK,GAAG,MAAA,CAAO,WAAW,CAAA;AACtC,IAAA,cAAA,CAAe,IAAA,CAAK,GAAI,MAAA,CAAO,cAAA,IAAkB,EAAG,CAAA;AACpD,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,UAAA,CAAW,IAAA,CAAK,EAAE,KAAA,EAAO,MAAA,CAAO,OAAO,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAAA,IAChE;AAAA,EACF;AAEA,EAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC,CAAA;AACxD,EAAA,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACtB,IAAA,MAAM,UAAU,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,SAAS,EAAA,EAAI,aAAA;AAAA,MAC1C,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,IAAI,MAAA,KAAW,GAAG,OAAO,MAAA;AACzB,IAAA,OAAO,CAAA,CAAE,MAAA,CAAO,aAAA,CAAc,CAAA,CAAE,MAAM,CAAA;AAAA,EACxC,CAAC,CAAA;AACD,EAAA,cAAA,CAAe,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AAC5B,IAAA,MAAM,UAAU,CAAA,CAAE,KAAA,IAAS,IAAI,aAAA,CAAc,CAAA,CAAE,SAAS,EAAE,CAAA;AAC1D,IAAA,IAAI,MAAA,KAAW,GAAG,OAAO,MAAA;AACzB,IAAA,OAAO,CAAA,CAAE,MAAA,CAAO,aAAA,CAAc,CAAA,CAAE,MAAM,CAAA;AAAA,EACxC,CAAC,CAAA;AAED,EAAA,MAAM,YAAY,WAAA,CAAY,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,OAAO,CAAA;AACtE,EAAA,MAAM,SAA2B,SAAA,GAC7B,OAAA,GACA,OAAA,CAAQ,MAAA,GAAS,IACf,MAAA,GACA,MAAA;AAEN,EAAA,OAAO;AAAA,IACL,IAAI,MAAA,KAAW,MAAA;AAAA,IACf,MAAA;AAAA,IACA,MAAA,EAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,IAAU,qBAAA;AAAA,IAC7B,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,UAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,GAAI,KAAA,CAAM,eAAA,EAAiB,MAAA,GACvB,EAAE,eAAA,EAAiB,CAAC,GAAG,KAAA,CAAM,eAAe,CAAA,EAAE,GAC9C;AAAC,GACP;AACF;;;ACzIA,SAAS,WAAA,CAAY,GAAqB,CAAA,EAA6B;AACrE,EAAA,MAAM,MAAA,GAAS,EAAE,SAAA,IAAa,CAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,EAAE,SAAA,IAAa,CAAA;AAC9B,EAAA,IAAI,MAAA,KAAW,MAAA,EAAQ,OAAO,MAAA,GAAS,MAAA;AACvC,EAAA,OAAO,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAA;AACtC;AAEA,SAAS,WAAA,CACP,QACA,WAAA,EACgB;AAChB,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA0B;AAE9C,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA,EAAG,OAAA;AACxC,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AACpC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,OAAA,EAAS;AAAA,QACnB,OAAA;AAAA,QACA,aAAA,EAAe,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA,EAAG,aAAA;AAAA,QACvC,MAAA,EAAQ,CAAC,KAAK;AAAA,OACf,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,CAAC,GAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC3C,GAAG,KAAA;AAAA,IACH,MAAA,EAAQ,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC;AAAA,GAC7D,CAAE,CAAA;AACJ;AAEA,SAAS,aAAA,CACP,MAAA,EACA,WAAA,EACA,QAAA,EACA,SAAA,EACe;AACf,EAAA,MAAM,QAAuB,EAAC;AAC9B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAE7B,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAA4B;AAC5C,IAAA,MAAM,GAAA,GAAM,GAAG,IAAA,CAAK,IAAI,KAAK,IAAA,CAAK,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,UAAU,CAAA,CAAA;AACvD,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA;AAClC,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,SAAA,EAAW;AACtC,MAAA,QAAA,CAAS;AAAA,QACP,MAAM,IAAA,CAAK,WAAA;AAAA,QACX,IAAI,IAAA,CAAK,SAAA;AAAA,QACT,MAAA,EAAQ,QAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,QAAA,CAAS;AAAA,QACP,MAAM,IAAA,CAAK,WAAA;AAAA,QACX,EAAA,EAAI,KAAA;AAAA,QACJ,MAAA,EAAQ,QAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,QAAA,CAAS;AAAA,QACP,IAAA,EAAM,KAAA;AAAA,QACN,IAAI,IAAA,CAAK,SAAA;AAAA,QACT,MAAA,EAAQ,QAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,CAAC,IAAA,CAAK,WAAA,IACN,CAAC,IAAA,CAAK,SAAA,EACN;AACA,MAAA,QAAA,CAAS;AAAA,QACP,MAAM,IAAA,CAAK,aAAA;AAAA,QACX,IAAI,IAAA,CAAK,UAAA;AAAA,QACT,MAAA,EAAQ,UAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,IAAA,EAAM,6BAAA;AAAA,QACN,OAAA,EACE,4FAAA;AAAA,QACF,KAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AAC1B,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,EAAE,IAAI,CAAA;AACxC,IAAA,IAAI,IAAA,KAAS,GAAG,OAAO,IAAA;AACvB,IAAA,OAAO,CAAA,CAAE,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,EAAE,CAAA;AAAA,EAChC,CAAC,CAAA;AACH;AAEA,SAAS,YAAA,CACP,MAAA,EACA,WAAA,EACA,QAAA,EACA,SAAA,EACa;AACb,EAAA,MAAM,UAAuB,EAAC;AAE9B,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA;AAClC,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA;AAAA,QACA,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,MAAA,EAAQ,QAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,OAAA,KAAY,MAAA,IAAa,IAAA,CAAK,UAAU,CAAA,EAAG;AAClD,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA;AAAA,QACA,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,MAAA,EAAQ,UAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,IAAA,EAAM,sBAAA;AAAA,QACN,OAAA,EAAS,6DAAA;AAAA,QACT,KAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC,CAAA;AAC9D;AAEA,SAAS,iBAAA,CACP,MACA,QAAA,EACoB;AACpB,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAC,GAAA,CAAI,KAAA,EAAO,GAAG,CAAC,CAAC,CAAA;AAC3D,EAAA,MAAM,kBAAkB,IAAI,GAAA;AAAA,IAC1B,QAAA,CACG,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,UAAA,KAAe,UAAU,CAAA,CAC/C,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,EAAE;AAAA,GAC1B;AACA,EAAA,MAAM,kBAAkB,IAAI,GAAA;AAAA,IAC1B,QAAA,CACG,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,UAAA,KAAe,UAAU,CAAA,CAC/C,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI;AAAA,GAC5B;AAEA,EAAA,MAAM,UAAU,CAAC,GAAG,IAAI,CAAA,CAAE,KAAK,WAAW,CAAA;AAC1C,EAAA,MAAMC,QAA2B,EAAC;AAClC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAEhC,EAAA,MAAM,OAAA,GAAU,CACd,GAAA,EACA,UAAA,EACA,MAAA,KACS;AACT,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,EAAG;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,KAAK,CAAA;AACrB,IAAAA,MAAK,IAAA,CAAK;AAAA,MACR,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,YAAY,GAAA,CAAI,UAAA;AAAA,MAChB,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,IAAA,CAAK,eAAe,UAAA,EAAY;AACpC,IAAA,MAAM,UAAU,CAAC,GAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,IAAA;AAAA,MACpC,CAAC,GAAA,KACC,GAAA,CAAI,KAAA,KAAU,IAAA,CAAK,QACnB,gBAAA,CAAiB,GAAA,EAAK,IAAA,CAAK,IAAA,EAAM,OAAO;AAAA,KAC5C;AACA,IAAA,MAAM,QAAQ,CAAC,GAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,IAAA;AAAA,MAClC,CAAC,GAAA,KACC,GAAA,CAAI,KAAA,KAAU,IAAA,CAAK,MAAM,gBAAA,CAAiB,GAAA,EAAK,IAAA,CAAK,EAAA,EAAI,OAAO;AAAA,KACnE;AACA,IAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,UAAA,EAAY,QAAQ,CAAA;AAClD,IAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,UAAA,EAAY,QAAQ,CAAA;AAAA,EAChD;AAEA,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,EAAG;AAC5B,IAAA,MAAM,UAAA,GACJ,eAAA,CAAgB,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,IAAK,eAAA,CAAgB,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,GAC3D,UAAA,GACA,YAAA;AACN,IAAA,OAAA,CAAQ,GAAA,EAAK,UAAA,EAAY,UAAA,KAAe,UAAA,GAAa,WAAW,UAAU,CAAA;AAAA,EAC5E;AAEA,EAAA,OAAOA,KAAAA;AACT;AAEA,SAAS,gBAAA,CACP,GAAA,EACA,KAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,IAAA,GAAO,8BAAA,CAA+B,GAAA,CAAI,QAAQ,CAAA;AACxD,EAAA,OACE,IAAA,EAAM,eAAe,KAAA,IACrB,IAAA,EAAM,YAAY,KAAA,IAClB,OAAA,CAAQ,IAAI,KAAK,CAAA;AAErB;AAMO,SAAS,iBAAA,CACd,SAAA,EACA,OAAA,GAAoC,EAAC,EACvB;AACd,EAAA,MAAM,WAA6B,EAAC;AACpC,EAAA,MAAM,OAAO,CAAC,GAAG,SAAS,CAAA,CAAE,KAAK,WAAW,CAAA;AAC5C,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAiD;AAEzE,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,WAAA,CAAY,IAAI,GAAA,CAAI,KAAA,EAAO,8BAAA,CAA+B,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,EACzE;AAEA,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAgC;AAC1D,EAAA,MAAM,iBAA2B,EAAC;AAElC,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA;AACtC,IAAA,MAAM,GAAA,GAAM,iBAAiB,IAAA,EAAM;AAAA,MACjC,kBAAA,EAAoB,QAAQ,kBAAA,KAAuB;AAAA,KACpD,CAAA;AACD,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,cAAA,CAAe,IAAA,CAAK,IAAI,KAAK,CAAA;AAC7B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,GAAG,KAAK,EAAC;AAC1C,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AACf,IAAA,aAAA,CAAc,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,QAAA,GAA6B,CAAC,GAAG,aAAA,CAAc,OAAA,EAAS,CAAA,CAC3D,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA,CACrC,GAAA,CAAI,CAAC,CAAC,SAAA,EAAW,WAAW,CAAA,KAAM;AACjC,IAAA,MAAM,MAAA,GAAS,YAAY,GAAA,CAAI,CAAC,QAAQ,GAAA,CAAI,KAAK,EAAE,IAAA,EAAK;AACxD,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,MAAA,EAAQ,WAAA,EAAa,UAAU,SAAS,CAAA;AACvE,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,MAAA,EAAQ,WAAA,EAAa,UAAU,SAAS,CAAA;AACrE,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,WAAW,CAAA;AAC9C,IAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,WAAA,EAAa,QAAQ,CAAA;AAE5D,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,UAAU,CAAC,CAAA;AACnE,IAAA,IAAI,YAAY,GAAA,CAAI,UAAU,KAAK,WAAA,CAAY,GAAA,CAAI,YAAY,CAAA,EAAG;AAChE,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,IAAA,EAAM,wBAAA;AAAA,QACN,OAAA,EAAS,2DAAA;AAAA,QACT;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,oBAAA;AAAA,MACL;AAAA,QACE,SAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA;AAAA,MACA;AAAA,QACE,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,kBAAkB,OAAA,CAAQ;AAAA;AAC5B,KACF;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,SAAS,CAAA,EAAG;AAC5C,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,oBAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACtB,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,EAAE,IAAI,CAAA;AACxC,IAAA,IAAI,IAAA,KAAS,GAAG,OAAO,IAAA;AACvB,IAAA,OAAA,CAAQ,EAAE,KAAA,IAAS,EAAA,EAAI,aAAA,CAAc,CAAA,CAAE,SAAS,EAAE,CAAA;AAAA,EACpD,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA,EAAgB,eAAe,IAAA,EAAK;AAAA,IACpC;AAAA,GACF;AACF;AC1UA,IAAM,YAAA,uBAAmB,GAAA,CAAI;AAAA,EAC3B,aAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,UAAU,IAAA,EAAmC;AACpD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAMA,eAAsB,oBAAoB,QAAA,EAAoC;AAC5E,EAAA,IAAI;AACF,IAAA,MAAM,KAAK,eAAA,CAAgB;AAAA,MACzB,OAAO,gBAAA,CAAiB,QAAA,EAAU,EAAE,QAAA,EAAU,QAAQ,CAAA;AAAA,MACtD,SAAA,EAAW;AAAA,KACZ,CAAA;AAED,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,WAAA,MAAiB,QAAQ,EAAA,EAAI;AAC3B,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,MAAA,IAAI,YAAY,EAAA,EAAI;AACpB,MAAA,MAAM,MAAA,GAAS,UAAU,OAAO,CAAA;AAChC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,IAAI,CAAC,QAAA,CAAS,MAAM,CAAA,EAAG;AAEvB,MAAA,OAAA,IAAW,CAAA;AAGX,MAAA,IAAI,YAAA,CAAa,MAAM,CAAA,EAAG,OAAO,IAAA;AAGjC,MAAA,MAAM,KAAK,MAAA,CAAO,KAAA;AAClB,MAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,MAAA,IAAI,OAAO,OAAO,QAAA,IAAY,YAAA,CAAa,IAAI,EAAE,CAAA,IAAK,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/E,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,IAAI,WAAW,EAAA,EAAI;AAAA,IACrB;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;AC3DA,SAAS,iBAAiB,KAAA,EAAuB;AAC/C,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,aAAA,CAAc,OAAO,CAAA;AAC3C;AAEA,SAAS,cAAc,GAAA,EAA2C;AAChE,EAAA,IAAI,GAAA,CAAI,cAAc,MAAA,IAAa,MAAA,CAAO,SAAS,GAAA,CAAI,SAAS,CAAA,EAAG,OAAO,GAAA,CAAI,SAAA;AAC9E,EAAA,IAAI,GAAA,CAAI,YAAY,MAAA,IAAa,MAAA,CAAO,SAAS,GAAA,CAAI,OAAO,CAAA,EAAG,OAAO,GAAA,CAAI,OAAA;AAC1E,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,iBAAA,CACP,MACA,KAAA,EACU;AACV,EAAA,MAAM,MAAA,GAAS,iBAAiB,KAAK,CAAA;AACrC,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,QAAA,GAAW,cAAc,GAAG,CAAA;AAClC,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,IAAY,MAAA,EAAQ;AAChD,MAAA,GAAA,CAAI,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAC9C;AAEA,SAAS,WAAA,CAAY,OAAqB,SAAA,EAAmB;AAC3D,EAAA,OAAO,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,cAAc,SAAS,CAAA;AACzE;AAOO,SAAS,mBAAA,CACd,KAAA,EACA,IAAA,EACA,OAAA,EACqB;AACrB,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAK;AAClC,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,EAAW,IAAA,EAAK;AAC1C,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAK;AAElC,EAAA,MAAM,QAAQ,CAAC,KAAA,GAAQ,IAAI,CAAA,EAAG,SAAA,GAAY,IAAI,CAAA,EAAG,KAAA,GAAQ,CAAA,GAAI,CAAC,EAAE,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,GAAG,CAAC,CAAA;AACzF,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,KAAK,CAAA;AACpD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,KAAK,CAAA,uCAAA,CAAyC,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,CAAC,KAAK,CAAA,EAAE;AAAA,EAC3B;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,KAAA,EAAO,SAAS,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,SAAS,CAAA,gBAAA,CAAkB,CAAA;AAAA,IACzD;AACA,IAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,SAAS,CAAA,wBAAA,CAA0B,CAAA;AAAA,IACjE;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,CAAC,GAAG,OAAA,CAAQ,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,MAC7D;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,EAAM,KAAM,CAAA;AAC7C,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,EAAE,QAAQ,KAAA,EAAM;AACzB;;;ACxFO,SAAS,0BAA0B,QAAA,EAAyD;AACjG,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,SAAA;AAClC,EAAA,IAAI,SAAS,IAAA,CAAK,CAAC,WAAW,MAAA,KAAW,QAAQ,GAAG,OAAO,QAAA;AAC3D,EAAA,IAAI,SAAS,IAAA,CAAK,CAAC,WAAW,MAAA,KAAW,SAAS,GAAG,OAAO,SAAA;AAC5D,EAAA,IAAI,SAAS,IAAA,CAAK,CAAC,WAAW,MAAA,KAAW,oBAAoB,GAAG,OAAO,oBAAA;AACvE,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,qBAAqB,MAAA,EAAoD;AACvF,EAAA,IAAI,MAAA,KAAW,sBAAsB,OAAO,oBAAA;AAC5C,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,mBAAA,CACd,QACA,WAAA,EACS;AACT,EAAA,IAAI,aAAa,OAAO,KAAA;AACxB,EAAA,OAAO,MAAA,KAAW,YAAY,MAAA,KAAW,SAAA;AAC3C;;;ACZA,IAAM,WAAA,GACJ,kJAAA;AAEF,IAAM,gBAAA,GACJ,kEAAA;AAEK,SAAS,oBAAoB,KAAA,EAOjB;AACjB,EAAA,MAAM,SAAA,GAAY,yBAAA;AAAA,IAChB,MAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,GAAA,KAAQ,IAAI,MAAM;AAAA,GAC3C;AACA,EAAA,OAAO;AAAA,IACL,WAAW,KAAA,CAAM,SAAA,IAAA,iBAAa,IAAI,IAAA,IAAO,WAAA,EAAY;AAAA,IACrD,qBAAqB,KAAA,CAAM,mBAAA;AAAA,IAC3B,kBAAkB,KAAA,CAAM,OAAA;AAAA,IACxB,gBAAA,EAAkB,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAA;AAAA,IACvC,MAAA,EAAQ,CAAC,GAAG,KAAA,CAAM,QAAQ,MAAM,CAAA;AAAA,IAChC,UAAA,EAAY,qBAAqB,SAAS,CAAA;AAAA,IAC1C,KAAA,EAAO,CAAC,GAAG,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,IACzD,IAAA,EAAM,WAAA;AAAA,IACN,GAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAU,GAAI,EAAC;AAAA,IACtF,GAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAM,GAAI;AAAC,GAC5E;AACF;AAEO,SAAS,wBAAA,GAAsD;AACpE,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,eAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AACF;;;AC3CA,SAAS,cAAc,IAAA,EAAgE;AACrF,EAAA,MAAM,KAAA,GAAQ,CAAC,mBAAA,EAAqB,eAAe,CAAA;AACnD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,IAAA,EAAM;AAC/B,IAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,GAAG,CAAA,GAAA,EAAM,KAAA,IAAS,SAAS,CAAA,EAAA,CAAI,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKO,SAAS,2BAA2B,KAAA,EAIhC;AACT,EAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAU,GAAI,KAAA;AACxC,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,6BAAA;AAAA,IACA,EAAA;AAAA,IACA,QAAA,CAAS,IAAA;AAAA,IACT,EAAA;AAAA,IACA,aAAA;AAAA,IACA,EAAA;AAAA,IACA,aAAA,CAAc;AAAA,MACZ,CAAC,SAAA,EAAW,QAAA,CAAS,SAAS,CAAA;AAAA,MAC9B,CAAC,cAAA,EAAgB,QAAA,CAAS,mBAAmB,CAAA;AAAA,MAC7C,CAAC,mBAAA,EAAqB,QAAA,CAAS,gBAAgB,CAAA;AAAA,MAC/C,CAAC,aAAA,EAAe,QAAA,CAAS,UAAU,CAAA;AAAA,MACnC,CAAC,eAAA,EAAiB,QAAA,CAAS,gBAAgB,CAAA;AAAA,MAC3C,CAAC,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MACnC,GAAI,QAAA,CAAS,SAAA,GAAY,CAAC,CAAC,WAAW,QAAA,CAAS,SAAS,CAAqB,CAAA,GAAI,EAAC;AAAA,MAClF,GAAI,QAAA,CAAS,KAAA,GAAQ,CAAC,CAAC,SAAS,QAAA,CAAS,KAAK,CAAqB,CAAA,GAAI;AAAC,KACzE,CAAA;AAAA,IACD,EAAA;AAAA,IACA,kBAAA;AAAA,IACA,EAAA;AAAA,IACA,CAAA,aAAA,EAAgB,OAAO,eAAe,CAAA,EAAA,CAAA;AAAA,IACtC;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,OAAO,IAAA,EAAM;AAC7B,IAAA,MAAM,MAAA,GACJ,GAAA,CAAI,YAAA,KAAiB,MAAA,IAAa,GAAA,CAAI,YAAA,KAAiB,GAAA,CAAI,MAAA,GACvD,CAAA,SAAA,EAAY,GAAA,CAAI,YAAY,CAAA,CAAA,GAC5B,EAAA;AACN,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,OAAO,GAAA,CAAI,KAAK,CAAA,aAAA,EAAgB,GAAA,CAAI,MAAM,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,QAAQ,CAAA,aAAA,EAAgB,GAAA,CAAI,MAAM,CAAA,WAAA,EAAc,IAAI,QAAQ,CAAA,YAAA;AAAA,KAC1H;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,IAAA,CAAK,IAAI,cAAA,EAAgB,EAAA,EAAI,mBAAmB,SAAA,CAAU,aAAa,IAAI,EAAE,CAAA;AACnF,EAAA,KAAA,MAAW,GAAA,IAAO,UAAU,IAAA,EAAM;AAChC,IAAA,MAAM,SAAA,GAAY,IAAI,SAAA,CAAU,MAAA,GAAS,IAAI,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AACxE,IAAA,KAAA,CAAM,IAAA,CAAK,OAAO,GAAA,CAAI,KAAK,OAAO,GAAA,CAAI,QAAQ,CAAA,wBAAA,EAA2B,SAAS,CAAA,CAAE,CAAA;AAAA,EACtF;AAEA,EAAA,KAAA,CAAM,IAAA;AAAA,IACJ,EAAA;AAAA,IACA,UAAA;AAAA,IACA,EAAA;AAAA,IACA,GAAG,SAAS,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,IAAA,EAAO,IAAI,CAAA,EAAA,CAAI,CAAA;AAAA,IAC/C,EAAA;AAAA,IACA,qEAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AChEO,SAAS,oBAAoB,KAAA,EAAuB;AACzD,EAAA,IAAI,IAAA,GACF,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA,GAAK,KAAA,CAAM,IAAA,EAAK,GAAI,aAAA;AACpE,EAAA,IAAA,GAAOA,KAAA,CAAK,SAAS,IAAI,CAAA;AACzB,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,mBAAA,EAAqB,GAAG,CAAA;AAC5C,EAAA,IAAI,IAAA,KAAS,EAAA,IAAM,IAAA,KAAS,GAAA,IAAO,SAAS,IAAA,EAAM;AAChD,IAAA,IAAA,GAAO,aAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,0BAAA,CAA2B,OAAe,SAAA,EAA2B;AACnF,EAAA,MAAM,IAAA,GAAO,oBAAoB,KAAK,CAAA;AACtC,EAAA,MAAM,MAAM,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,GAAI,SAAA,GAAY,IAAI,SAAS,CAAA,CAAA;AACjE,EAAA,OAAOA,KAAA,CAAK,MAAM,IAAA,CAAK,QAAA,EAAU,QAAQ,CAAA,EAAG,IAAI,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAC1D;AAKO,SAAS,yBAAA,CACd,WACA,YAAA,EACQ;AACR,EAAA,MAAM,IAAA,GAAOA,KAAA,CAAK,OAAA,CAAQ,SAAS,CAAA;AACnC,EAAA,MAAM,QAAA,GAAWA,KAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,YAAY,CAAA;AAChD,EAAA,IAAI,QAAA,KAAa,QAAQ,CAAC,QAAA,CAAS,WAAW,IAAA,GAAOA,KAAA,CAAK,GAAG,CAAA,EAAG;AAC9D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,YAAY,CAAA,CAAE,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,QAAA;AACT;AAOO,SAAS,yBAAA,CACd,KACA,OAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,EACpD;AACA,EAAA,MAAM,QAAA,GAAWA,KAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AACrC,EAAA,IACE,OAAA,EAAS,yBAAyB,IAAA,IAClC,QAAA,CAAS,aAAY,CAAE,QAAA,CAAS,MAAM,CAAA,EACtC;AACA,IAAA,OAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,QAAA;AACT;AAKO,SAAS,wBAAwB,MAAA,EAAmC;AACzE,EAAA,MAAM,KAAA,GACJ,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,mBAAA,CAAoB,MAAA,CAAO,CAAC,CAAE,CAAA,GAAI,CAAA,MAAA,EAAS,MAAA,CAAO,MAAM,CAAA,CAAA;AAChF,EAAA,MAAM,KAAA,GAAA,qBAAY,IAAA,EAAK,EAAE,aAAY,CAAE,OAAA,CAAQ,SAAS,GAAG,CAAA;AAC3D,EAAA,OAAOA,MAAK,OAAA,CAAQ,CAAA,qBAAA,EAAwB,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAC9D;;;AC8EO,IAAM,uBAAA,GAAiD;AAEvD,IAAM,wBAAA,GACX;AAEK,IAAM,0BAAA,GAA6B;AAGnC,IAAM,mCAAA,GAAsC;AC5JnD,IAAM,SAAA,GAAY,iBAAA;AAKX,SAAS,UAAU,IAAA,EAAmC;AAC3D,EAAA,MAAM,IAAA,GAAO,WAAW,QAAQ,CAAA;AAChC,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,EAC1B,CAAA,MAAO;AACL,IAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAC1B;AAEO,SAAS,YAAY,KAAA,EAAwB;AAClD,EAAA,OAAO,SAAA,CAAU,KAAK,KAAK,CAAA;AAC7B;AAKO,SAAS,YAAA,CAAa,UAAkB,MAAA,EAAyB;AACtE,EAAA,IAAI,CAAC,WAAA,CAAY,QAAQ,KAAK,CAAC,WAAA,CAAY,MAAM,CAAA,EAAG;AAClD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,CAAA,GAAI,SAAS,WAAA,EAAY;AAC/B,EAAA,MAAM,CAAA,GAAI,OAAO,WAAA,EAAY;AAC7B,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,KAAK,CAAA,EAAG;AACpC,IAAA,QAAA,IAAY,EAAE,UAAA,CAAW,CAAC,CAAA,GAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,QAAA,KAAa,CAAA;AACtB;AC9BO,SAAS,2BAA2B,YAAA,EAA8B;AACvE,EAAA,IAAI,OAAO,YAAA,KAAiB,QAAA,IAAY,YAAA,CAAa,IAAA,OAAW,EAAA,EAAI;AAClE,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EACzE;AACA,EAAA,MAAM,UAAU,YAAA,CAAa,IAAA,EAAK,CAAE,UAAA,CAAW,MAAM,GAAG,CAAA;AACxD,EAAA,IAAIA,MAAK,UAAA,CAAW,OAAO,KAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AACvD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,YAAY,CAAA,CAAE,CAAA;AAAA,EACxE;AACA,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,KAAS,EAAE,CAAA;AAC7D,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,YAAY,CAAA,CAAE,CAAA;AAAA,EACxE;AACA,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,IAAA,EAAM;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iDAAA,EAAoD,YAAY,CAAA,CAAE,CAAA;AAAA,IACpF;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;;;ACRA,SAAS,OAAO,KAAA,EAAyB;AACvC,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,IAAI,MAAM,CAAA;AACjD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,KAAK,MAAM,CAAA,CACf,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA,CACjC,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAC,GAAA,EAAK,OAAO,MAAA,CAAO,GAAG,CAAC,CAAC,CAAC;AAAA,GAC5C;AACF;AAKO,SAAS,0BAA0B,QAAA,EAAoC;AAC5E,EAAA,OAAO,CAAA,EAAG,KAAK,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,EAAG,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA;AACrD;AAEO,SAAS,sBAAsB,YAAA,EAAwC;AAC5E,EAAA,MAAM,UAAA,GAAa,2BAA2B,YAAY,CAAA;AAC1D,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,GAChC,UAAA,CAAW,KAAA,CAAM,UAAA,CAAW,WAAA,CAAY,GAAG,CAAA,GAAI,CAAC,CAAA,GAChD,UAAA;AACJ,EAAA,IAAI,SAAS,eAAA,IAAmB,IAAA,KAAS,gBAAgB,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG;AAC/E,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,KAAS,aAAA,IAAiB,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AACrD,IAAA,OAAO,gBAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,oBAAA,EAAsB;AACjC,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,wBAAA,EAA0B;AACrC,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,uBAAA,EAAyB;AACpC,IAAA,OAAO,kBAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAS,YAAA,EAAc;AACzB,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,yBACd,KAAA,EACqB;AACrB,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA+B;AAClD,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,YAAA,GAAe,0BAAA,CAA2B,IAAA,CAAK,IAAI,CAAA;AACzD,IAAA,IAAI,iBAAiB,0BAAA,EAA4B;AAC/C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,kBAAkB,0BAA0B,CAAA,kDAAA;AAAA,OAC9C;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,YAAY,CAAA,CAAE,CAAA;AAAA,IACjE;AACA,IAAA,MAAA,CAAO,IAAI,YAAA,EAAc;AAAA,MACvB,IAAA,EAAM,YAAA;AAAA,MACN,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,OAAO,CAAA;AAAA,MAC9B,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,qBAAA,CAAsB,YAAY;AAAA,KACtD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,CAAC,GAAG,MAAA,CAAO,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AACzE;AAEO,SAAS,sBAAsB,KAAA,EAejB;AACnB,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA;AAC/B,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,YAAA,EAAc;AACrC,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,IAAA,CAAK,KAAK,CAAA,iCAAA,CAAmC,CAAA;AAAA,IACtF;AACA,IAAA,IAAI,IAAA,CAAK,cAAc,QAAA,EAAU;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA;AAAA,IACxE;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAA6C;AAAA,IACjD,QAAQ,KAAA,CAAM,gBAAA;AAAA,IACd,IAAA,EAAM,MAAM,IAAA,IAAQ;AAAA,GACtB;AACA,EAAA,IAAI,KAAA,CAAM,iBAAiB,MAAA,EAAW;AACpC,IAAA,UAAA,CAAW,eAAe,KAAA,CAAM,YAAA;AAAA,EAClC;AAEA,EAAA,OAAO;AAAA,IACL,qBAAA,EAAuB,uBAAA;AAAA,IACvB,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,MAAM,aAAA,IAAiB,eAAA;AAAA,MAC7B,SAAS,KAAA,CAAM;AAAA,KACjB;AAAA,IACA,WAAW,KAAA,CAAM,SAAA,IAAA,iBAAa,IAAI,IAAA,IAAO,WAAA,EAAY;AAAA,IACrD,MAAA,EAAQ;AAAA,MACN,MAAA;AAAA,MACA,mBAAA,EAAqB,CAAC,GAAG,KAAA,CAAM,mBAAmB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,MACrF,YAAA,EAAc,CAAC,GAAG,KAAA,CAAM,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,CAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC;AAAA,KACrF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,kBAAA,EAAoB,KAAA,CAAM,kBAAA,IAAsB,KAAA,CAAM;AAAA,KACxD;AAAA,IACA,UAAA;AAAA,IACA,GAAI,KAAA,CAAM,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,EAAE,GAAG,KAAA,CAAM,SAAA,EAAU,EAAE,GAAI,EAAC;AAAA,IAC7E,GAAI,KAAA,CAAM,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,EAAE,GAAG,KAAA,CAAM,QAAA,EAAS,EAAE,GAAI,EAAC;AAAA,IAC1E,KAAA,EAAO,wBAAA,CAAyB,KAAA,CAAM,KAAK;AAAA,GAC7C;AACF;AAMO,SAAS,yBAAyB,KAAA,EAAkC;AACzE,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AACA,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,IAAI,MAAA,CAAO,0BAA0B,uBAAA,EAAyB;AAC5D,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,mCAAA,EAAsC,MAAA,CAAO,MAAA,CAAO,qBAAqB,CAAC,CAAA;AAAA,KAC5E;AAAA,EACF;AACA,EAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AACzB,EAAA,IACE,cAAc,IAAA,IACd,OAAO,SAAA,KAAc,QAAA,IACrB,MAAM,OAAA,CAAQ,SAAS,CAAA,IACvB,OAAQ,UAAiC,IAAA,KAAS,QAAA,IAClD,OAAQ,SAAA,CAAoC,YAAY,QAAA,EACxD;AACA,IAAA,MAAM,IAAI,MAAM,kEAAkE,CAAA;AAAA,EACpF;AACA,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1E,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AACA,EAAA,MAAM,YAAA,GAAe,MAAA;AAKrB,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,YAAA,CAAa,MAAM,CAAA,IAAK,YAAA,CAAa,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC3E,IAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,YAAA,CAAa,mBAAmB,CAAA,EAAG;AACpD,IAAA,MAAM,IAAI,MAAM,gEAAgE,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,YAAA,CAAa,YAAY,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AACA,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1E,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AACA,EAAA,MAAM,aAAa,MAAA,CAAO,UAAA;AAC1B,EAAA,IACE,UAAA,KAAe,IAAA,IACf,OAAO,UAAA,KAAe,QAAA,IACtB,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,IACxB,OAAQ,UAAA,CAAoC,MAAA,KAAW,QAAA,EACvD;AACA,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,IAAK,MAAA,CAAO,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC7D,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,KAAA,EAAO;AAC/B,IAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,IAAA,KAAS,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACpE,MAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA;AACd,IAAA,IAAI,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AAClC,MAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,IACtD;AACA,IAAA,0BAAA,CAA2B,MAAM,IAAI,CAAA;AACrC,IAAA,IAAI,OAAO,MAAM,MAAA,KAAW,QAAA,IAAY,CAAC,iBAAA,CAAkB,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,EAAG;AAC7E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4CAAA,EAA+C,KAAA,CAAM,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IAC9E;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,0BAA0B,IAAA,EAAgC;AACxE,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,OAAO,CAAA,CAAE,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,yBAAyB,MAAM,CAAA;AACxC;AAKO,SAAS,2BAA2B,KAAA,EAAyB;AAClE,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA,EAAG;AACvC,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,YAAY,EAAA,EAAI;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC9B,MAAA,IAAI,OAAO,IAAI,aAAA,KAAkB,QAAA,IAAY,IAAI,aAAA,CAAc,IAAA,OAAW,EAAA,EAAI;AAC5E,QAAA,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,aAAA,CAAc,IAAA,EAAM,CAAA;AAAA,MACvC;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACxD;;;ACvOO,IAAM,0CAAA,GAA6C;AAEnD,IAAM,8BAAA,GACX;AAEK,IAAM,kCAAA,GACX;AAEK,IAAM,gCAAA,GACX;AAEK,IAAM,6BAAA,GACX,6KAAA;AAMK,SAAS,qCAAqC,KAAA,EAAyB;AAC5E,EAAA,OAAO,qBAAA,CAAsB,OAAO,CAAC,CAAA;AACvC;AAGA,SAAS,qBAAA,CAAsB,OAAgB,KAAA,EAAwB;AACrE,EAAA,IAAI,KAAA,GAAQ,IAAI,OAAO,KAAA;AACvB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,KAAK,CAAC,IAAA,KAAS,sBAAsB,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EACpE;AACA,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,GAAA,KAAQ,UAAA,IAAc,GAAA,KAAQ,OAAA,EAAS;AACzC,MAAA,IAAI,2BAAA,CAA4B,KAAA,EAAO,KAAA,GAAQ,CAAC,GAAG,OAAO,IAAA;AAC1D,MAAA;AAAA,IACF;AACA,IAAA,IAAI,qBAAA,CAAsB,KAAA,EAAO,KAAA,GAAQ,CAAC,GAAG,OAAO,IAAA;AAAA,EACtD;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,2BAAA,CAA4B,OAAgB,KAAA,EAAwB;AAC3E,EAAA,IAAI,KAAA,GAAQ,IAAI,OAAO,KAAA;AACvB,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,uCAAuC,KAAK,CAAA;AAAA,EACrD;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,KAAK,CAAC,IAAA,KAAS,4BAA4B,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,EAC1E;AACA,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAgC,CAAA,CAAE,IAAA;AAAA,IAAK,CAAC,KAAA,KAC3D,2BAAA,CAA4B,KAAA,EAAO,QAAQ,CAAC;AAAA,GAC9C;AACF;AAGO,SAAS,uBAAuB,KAAA,EAAwB;AAC7D,EAAA,OAAO,CAAA,EAAG,KAAK,SAAA,CAAU,WAAA,CAAY,KAAK,CAAA,EAAG,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA;AACvD;AAEA,SAAS,YAAY,KAAA,EAAyB;AAC5C,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,IAAI,WAAW,CAAA;AACtD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,OAAO,MAAA;AACxC,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,OAAO,IAAA,CAAK,MAAM,CAAA,CACf,MAAA,CAAO,CAAC,GAAA,KAAQ,MAAA,CAAO,GAAG,CAAA,KAAM,UAAa,OAAO,MAAA,CAAO,GAAG,CAAA,KAAM,UAAU,CAAA,CAC9E,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,EACjC,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAC,KAAK,WAAA,CAAY,MAAA,CAAO,GAAG,CAAC,CAAC,CAAC;AAAA,GACjD;AACF;AAEA,SAAS,oBAAoB,MAAA,EAAqC;AAChE,EAAA,OAAO,CAAC,GAAG,IAAI,IAAI,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,MAAM,CAAA,CAAE,OAAO,CAAC,IAAA,KAAS,SAAS,EAAE,CAAC,CAAC,CAAA,CAAE,IAAA;AAAA,IAAK,CAAC,CAAA,EAAG,CAAA,KAC5F,CAAA,CAAE,cAAc,CAAC;AAAA,GACnB;AACF;AAMO,SAAS,iCACd,KAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,oBAAoB,KAAK,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,GAClB;AAAA,IACE,GAAG,OAAA,CAAQ,KAAA;AAAA,IACX,UAAU,mBAAA,CAAoB;AAAA,MAC5B,GAAI,OAAA,CAAQ,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,MAC/B,GAAI,OAAA,CAAQ,KAAA,CAAM,aAAA,IAAiB;AAAC,KACrC,CAAA;AAAA,IACD,WAAW,mBAAA,CAAoB;AAAA,MAC7B,GAAI,OAAA,CAAQ,KAAA,CAAM,SAAA,IAAa,EAAC;AAAA,MAChC,GAAI,OAAA,CAAQ,KAAA,CAAM,cAAA,IAAkB;AAAC,KACtC,CAAA;AAAA,IACD,GAAI,OAAA,CAAQ,KAAA,CAAM,OAAA,GAAU,EAAE,OAAA,EAAS,mBAAA,CAAoB,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,EAAE,GAAI,EAAC;AAAA,IACvF,GAAI,OAAA,CAAQ,KAAA,CAAM,aAAA,GACd;AAAA,MACE,aAAA,EAAe,CAAC,GAAG,OAAA,CAAQ,MAAM,aAAa,CAAA;AAAA,MAC9C,iBAAA,EAAmB,OAAA,CAAQ,KAAA,CAAM,iBAAA,IAAqB;AAAA,QAExD;AAAC,GACP,GACA,MAAA;AAGJ,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAQ,KAAA,CAAsC,aAAA;AAC9C,IAAA,OAAQ,KAAA,CAAuC,cAAA;AAC/C,IAAA,IAAI,KAAA,CAAM,QAAA,EAAU,MAAA,KAAW,CAAA,SAAW,KAAA,CAAiC,QAAA;AAC3E,IAAA,IAAI,KAAA,CAAM,SAAA,EAAW,MAAA,KAAW,CAAA,SAAW,KAAA,CAAkC,SAAA;AAAA,EAC/E;AAEA,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,GAChB;AAAA,IACE,GAAG,OAAA,CAAQ,GAAA;AAAA;AAAA,IAEX,gBAAA,EAAkB,OAAA,CAAQ,GAAA,CAAI,gBAAA,KAAqB;AAAA,GACrD,GACA,MAAA;AAEJ,EAAA,OAAO;AAAA,IACL,GAAG,OAAA;AAAA,IACH,GAAI,GAAA,GAAM,EAAE,GAAA,KAAQ,EAAC;AAAA,IACrB,GAAI,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,EAAE,KAAA,EAAM,GAAI;AAAC,GAC5D;AACF;AAKO,SAAS,+BAA+B,QAAA,EAAmC;AAChF,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,IAAI,SAAS,GAAA,EAAK;AAChB,IAAA,IAAI,SAAS,GAAA,CAAI,eAAA,EAAiB,MAAA,EAAQ,GAAA,CAAI,KAAK,8BAA8B,CAAA;AACjF,IAAA,IAAI,SAAS,GAAA,CAAI,gBAAA,KAAqB,IAAA,EAAM,GAAA,CAAI,KAAK,sBAAsB,CAAA;AAC3E,IAAA,IAAI,SAAS,GAAA,CAAI,aAAA,KAAkB,MAAA,EAAW,GAAA,CAAI,KAAK,cAAc,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,IAAA,CACG,SAAS,KAAA,CAAM,QAAA,EAAU,UAAU,CAAA,IAAK,CAAA,IAAA,CACxC,SAAS,KAAA,CAAM,SAAA,EAAW,MAAA,IAAU,CAAA,IAAK,KAC1C,QAAA,CAAS,KAAA,CAAM,WACf,QAAA,CAAS,KAAA,CAAM,aAAa,MAAA,EAC5B;AACA,MAAA,GAAA,CAAI,KAAK,YAAY,CAAA;AAAA,IACvB;AACA,IAAA,IAAI,QAAA,CAAS,KAAA,CAAM,aAAA,EAAe,MAAA,EAAQ;AACxC,MAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,QAAA,CAAS,MAAM,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG;AACnE,QAAA,GAAA,CAAI,IAAA,CAAK,CAAA,oBAAA,EAAuB,CAAC,CAAA,CAAE,CAAA;AAAA,MACrC;AAAA,IACF;AACA,IAAA,IAAI,QAAA,CAAS,KAAA,CAAM,UAAA,EAAY,MAAA,EAAQ;AACrC,MAAA,KAAA,IAAS,KAAA,GAAQ,GAAG,KAAA,GAAQ,QAAA,CAAS,MAAM,UAAA,CAAW,MAAA,EAAQ,SAAS,CAAA,EAAG;AACxE,QAAA,GAAA,CAAI,IAAA,CAAK,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAE,CAAA;AAAA,MAC7C;AAAA,IACF;AACA,IAAA,IAAI,SAAS,KAAA,CAAM,SAAA,EAAW,MAAA,EAAQ,GAAA,CAAI,KAAK,yBAAyB,CAAA;AAAA,EAC1E;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,EAAK,GAAA,CAAI,IAAA,CAAK,WAAW,CAAA;AACtC,EAAA,IAAI,SAAS,YAAA,EAAc,QAAA,EAAU,MAAA,EAAQ,GAAA,CAAI,KAAK,+BAA+B,CAAA;AACrF,EAAA,IAAI,SAAS,YAAA,EAAc,MAAA,EAAQ,MAAA,EAAQ,GAAA,CAAI,KAAK,gBAAgB,CAAA;AACpE,EAAA,IAAI,QAAA,CAAS,YAAA,EAAc,iBAAA,EAAmB,GAAA,CAAI,KAAK,iCAAiC,CAAA;AACxF,EAAA,IAAI,QAAA,CAAS,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,mBAAmB,CAAA;AACnD,EAAA,IAAI,QAAA,CAAS,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,gBAAgB,CAAA;AAC7C,EAAA,IAAI,QAAA,CAAS,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,yBAAyB,CAAA;AACtD,EAAA,IAAI,SAAS,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,GAAA,CAAI,KAAK,6BAA6B,CAAA;AAChF,EAAA,OAAO,oBAAoB,GAAG,CAAA;AAChC;AAkDA,SAAS,uBAAA,CACP,eACA,IAAA,EACyB;AACzB,EAAA,MAAM,OAAA,GAAmC;AAAA,IACvC,MAAA,EAAQ,aAAA;AAAA,IACR,MAAA,EAAQ,cAAA;AAAA,IACR,uBAAA,EAAyB,0CAAA;AAAA,IACzB,aAAA;AAAA,IACA,SAAS,EAAC;AAAA,IACV,MAAM,IAAA,IAAQ;AAAA,GAChB;AACA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,uBAAA,EAAyB,0CAAA;AAAA,MACzB,aAAA;AAAA,MACA,kBAAkB,EAAC;AAAA,MACnB,aAAA,EAAe;AAAA;AACjB,GACF;AACF;AAQO,SAAS,6BACd,KAAA,EACyB;AACzB,EAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,KAAA,CAAM,kBAAA,IAAsB,EAAE,CAAA;AACtE,EAAA,MAAM,WAAA,GAAc,MAAM,QAAA,KAAa,MAAA;AACvC,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,KAAW,MAAA;AAEnC,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,SAAA,EAAW;AAC9B,IAAA,OAAO,uBAAA,CAAwB,KAAA,CAAM,aAAA,EAAe,KAAA,CAAM,IAAI,CAAA;AAAA,EAChE;AAEA,EAAA,IAAI,IAAA,GAAyC,gBAAA;AAC7C,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,OAAA;AAEJ,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,UAAA,GAAa,gCAAA,CAAiC,KAAA,CAAM,QAAS,CAAA;AACnE,IAAA,QAAA,GAAW,YAAY,UAAU,CAAA;AACjC,IAAA,OAAA,GAAU,+BAA+B,UAAU,CAAA;AAAA,EACrD,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,cAAA;AACP,IAAA,QAAA,GAAW,WAAA,CAAY,KAAA,CAAM,MAAA,CAAQ,QAAQ,CAAA;AAC7C,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,GACrD,KAAA,CAAM,MAAA,CAAQ,QAAA,CAAS,MAAA,CAAqB,MAAA;AAAA,MAC3C,CAAC,IAAA,KAAyB,OAAO,IAAA,KAAS;AAAA,QAE5C,EAAC;AACL,IAAA,OAAA,GAAU,oBAAoB,MAAM,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,KAAA,CAAM,YAAY,MAAA,EAAW;AAC/B,IAAA,OAAA,GAAU,mBAAA,CAAoB,MAAM,OAAO,CAAA;AAAA,EAC7C;AACA,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,OAAA,GAAU,oBAAoB,CAAC,GAAG,OAAA,EAAS,GAAG,WAAW,CAAC,CAAA;AAAA,EAC5D;AAGA,EAAA,IAAI,oCAAA,CAAqC,QAAQ,CAAA,EAAG;AAClD,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,aAAA;AAAA,QACR,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,GAAI,MAAM,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,KAAA,CAAM,UAAA,EAAW,GAAI,EAAC;AAAA,QACzE,GAAI,MAAM,eAAA,KAAoB,MAAA,GAC1B,EAAE,eAAA,EAAiB,KAAA,CAAM,eAAA,EAAgB,GACzC,EAAC;AAAA,QACL,uBAAA,EAAyB,0CAAA;AAAA,QACzB,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,OAAA;AAAA,QACA,GAAI,YAAY,MAAA,GAAS,CAAA,GAAI,EAAE,kBAAA,EAAoB,WAAA,KAAgB,EAAC;AAAA,QACpE,IAAA,EAAM,MAAM,IAAA,IAAQ;AAAA,OACtB;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,uBAAA,EAAyB,0CAAA;AAAA,QACzB,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,gBAAA,EAAkB,OAAA;AAAA,QAClB,aAAA,EAAe,aAAA;AAAA,QACf,GAAI,YAAY,MAAA,GAAS,CAAA,GAAI,EAAE,kBAAA,EAAoB,WAAA,KAAgB,EAAC;AAAA,QACpE,MAAA,EAAQ;AAAA,UACN,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,GAAI,KAAA,CAAM,MAAA,EAAQ,IAAA,GAAO,EAAE,QAAQ,KAAA,CAAM,MAAA,CAAO,IAAA,EAAK,GAAI;AAAC;AAC5D;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAqC;AAAA,IACzC,uBAAA,EAAyB,0CAAA;AAAA,IACzB,IAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,GAAI,KAAA,CAAM,MAAA,EAAQ,IAAA,GAAO,EAAE,QAAQ,KAAA,CAAM,MAAA,CAAO,IAAA,EAAK,GAAI,EAAC;AAAA,MAC1D,GAAI,KAAA,CAAM,IAAA,KAAS,MAAA,IAAa,KAAA,CAAM,KAAK,IAAA,EAAK,KAAM,EAAA,GAClD,EAAE,MAAM,KAAA,CAAM,IAAA,CAAK,IAAA,EAAK,KACxB;AAAC;AACP,GACF;AAEA,EAAA,MAAM,YAAA,GAAe,uBAAuB,QAAQ,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,UAAU,YAAY,CAAA;AACrC,EAAA,MAAM,MAAA,GACJ,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,SAAA,GAAY,UAAA;AAEvC,EAAA,MAAM,OAAA,GAAmC;AAAA,IACvC,MAAA;AAAA,IACA,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,GAAI,MAAM,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,KAAA,CAAM,UAAA,EAAW,GAAI,EAAC;AAAA,IACzE,GAAI,MAAM,eAAA,KAAoB,MAAA,GAC1B,EAAE,eAAA,EAAiB,KAAA,CAAM,eAAA,EAAgB,GACzC,EAAC;AAAA,IACL,uBAAA,EAAyB,0CAAA;AAAA,IACzB,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,IAAA,EAAM,mCAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,GAAI,YAAY,MAAA,GAAS,CAAA,GAAI,EAAE,kBAAA,EAAoB,WAAA,KAAgB,EAAC;AAAA,IACpE,IAAA,EACE,KAAA,CAAM,IAAA,KACL,MAAA,KAAW,YACR,8BAAA,GACA,gCAAA;AAAA,GACR;AAEA,EAAA,MAAM,YAAA,GAA6C;AAAA,IACjD,cAAA,EAAgB,MAAA;AAAA,IAChB,uBAAA,EAAyB,0CAAA;AAAA,IACzB,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,gBAAA,EAAkB,OAAA;AAAA,IAClB,aAAA,EAAe,MAAA;AAAA,IACf,GAAI,KAAA,CAAM,MAAA,EAAQ,IAAA,GACd;AAAA,MACE,MAAA,EAAQ;AAAA,QACN,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,MAAA,EAAQ,MAAM,MAAA,CAAO;AAAA;AACvB,KACF,GACA;AAAA,MACE,MAAA,EAAQ;AAAA,QACN,QAAQ,KAAA,CAAM;AAAA;AAChB,KACF;AAAA,IACJ,GAAI,YAAY,MAAA,GAAS,CAAA,GAAI,EAAE,kBAAA,EAAoB,WAAA,KAAgB;AAAC,GACtE;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,mCAAA;AAAA,MACN,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACR;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,0BAAA,CACd,cACA,YAAA,EACyB;AACzB,EAAA,OAAO;AAAA,IACL,GAAG,YAAA;AAAA,IACH,QAAA,EAAU;AAAA,MACR,GAAG;AAAA;AACL,GACF;AACF;AAEO,SAAS,0BAA0B,KAAA,EAAwB;AAChE,EAAA,OAAO,uBAAuB,KAAK,CAAA;AACrC;AAKO,SAAS,gCACd,gBAAA,EAC0C;AAC1C,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAA;AAC1C,IAAA,IAAI,MAAA,CAAO,QAAA,KAAa,IAAA,IAAQ,OAAO,MAAA,CAAO,QAAA,KAAa,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,EAAG;AACrG,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAA,CAAO,QAAA;AAAA,EAChB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAiBO,SAAS,8BAA8B,KAAA,EAIZ;AAChC,EAAA,MAAM,SAAwC,EAAC;AAC/C,EAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,EAAA,IAAI,OAAA,KAAY,QAAW,OAAO,MAAA;AAElC,EAAA,IACE,OAAA,CAAQ,4BAA4B,0CAAA,EACpC;AACA,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,0BAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS,CAAA,8CAAA,EAAiD,MAAA,CAAO,OAAA,CAAQ,uBAAuB,CAAC,CAAA;AAAA,KAClG,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,aAAA,EAAe;AACpC,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAa,OAAA,CAAQ,WAAW,MAAA,EAAW;AAC9D,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,0BAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAA,GAAe,QAAQ,IAAA,IAAQ,mCAAA;AACrC,EAAA,IAAI,KAAA,CAAM,0BAA0B,MAAA,EAAW;AAC7C,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,uBAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS,qCAAqC,YAAY,CAAA,CAAA;AAAA,MAC1D,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,CAAM,qBAAqB,CAAA;AACpD,EAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,IAAa,CAAC,aAAa,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA,EAAG;AACzE,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,wBAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS,wBAAwB,YAAY,CAAA,CAAA;AAAA,MAC7C,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,KAAA,CAAM,qBAAqB,MAAA,EAAW;AACxC,IAAA,MAAM,YAAA,GAAe,+BAAA,CAAgC,KAAA,CAAM,gBAAgB,CAAA;AAC3E,IAAA,IAAI,YAAA,EAAc,cAAA,KAAmB,MAAA,IAAa,OAAA,CAAQ,WAAW,MAAA,EAAW;AAC9E,MAAA,IAAI,CAAC,YAAA,CAAa,YAAA,CAAa,cAAA,EAAgB,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC9D,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,0BAAA;AAAA,UACN,QAAA,EAAU,OAAA;AAAA,UACV,OAAA,EACE,iFAAA;AAAA,UACF,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH;AAAA,IACF,WAAW,OAAA,CAAQ,MAAA,KAAW,UAAA,IAAc,OAAA,CAAQ,WAAW,SAAA,EAAW;AACxE,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,0BAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EACE,wFAAA;AAAA,QACF,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;ACjhBA,SAAS,cAAA,CAAe,KAAA,EAAsB,OAAA,GAAU,MAAA,EAAgB;AACtE,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAC/B,EAAA,MAAM,KAAA,GAAkB,CAAC,CAAA,WAAA,EAAc,OAAO,CAAA,EAAA,CAAI,CAAA;AAClD,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,KAAK,CAAA,CAAE,KAAA;AACb,IAAA,MAAM,MAAA,GAAS,GAAG,MAAA,IAAU,GAAA;AAC5B,IAAA,MAAM,GAAA,GACJ,EAAA,CAAG,UAAA,KAAe,MAAA,IAAa,MAAA,CAAO,QAAA,CAAS,EAAA,CAAG,UAAU,CAAA,GACxD,CAAA,EAAG,EAAA,CAAG,UAAU,CAAA,EAAA,CAAA,GAChB,GAAA;AACN,IAAA,MAAM,QAAA,GAAW,EAAA,CAAG,MAAA,KAAW,OAAA,GAAU,WAAA,GAAc,EAAA;AACvD,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,oBAAA,EAAuB,QAAQ,CAAA,EAAA,CAAI,CAAA;AAC9C,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,oBAAoB,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,+BAA+B,UAAA,CAAW,EAAA,CAAG,IAAI,CAAC,KAAK,UAAA,CAAW,MAAM,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,GAAG,CAAC,CAAA,QAAA;AAAA,KACtI;AACA,IAAA,IAAI,CAAA,CAAE,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACzB,MAAA,KAAA,CAAM,IAAA,CAAK,cAAA,CAAe,CAAA,CAAE,QAAA,EAAU,aAAa,CAAC,CAAA;AAAA,IACtD;AACA,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EACpB;AACA,EAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AACtB;AAKO,SAAS,0BAA0B,KAAA,EAA0C;AAClF,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,CAAA,kDAAA,CAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,KAAA,CAAM,KAAK,CAAA,2BAAA,CAA6B,CAAA;AACxC,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,YAAA,CAAc,CAAA;AAC5D,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,KAAA,CAAM,KAAK,CAAA,uBAAA,EAA0B,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,IAAA,CAAM,CAAA;AAAA,IAClE;AACA,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,mBAAA,EAAsB,WAAW,MAAA,CAAO,IAAA,CAAK,UAAU,SAAS,CAAC,CAAC,CAAA,SAAA,EAChE,IAAA,CAAK,eAAe,MAAA,GAAY,CAAA,MAAA,EAAM,WAAW,MAAA,CAAO,IAAA,CAAK,UAAU,CAAC,CAAC,OAAO,EAClF,CAAA,IAAA;AAAA,KACF;AACA,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,KAAK,QAAA,CAAS,MAAA,GAAS,IACnB,cAAA,CAAe,IAAA,CAAK,QAAQ,CAAA,GAC5B,CAAA,uCAAA;AAAA,KACN;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,aAAa,IAAA,EAOlB;AACF,EAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,EAAA,MAAM,SACJ,IAAA,CAAK,SAAA,IACL,KAAK,MAAA,CAA2B,CAAC,KAAK,CAAA,KAAM;AAC1C,IAAA,MAAM,CAAA,GAAI,EAAE,KAAA,CAAM,SAAA;AAClB,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,GAAG,OAAO,GAAA;AAChC,IAAA,OAAO,QAAQ,MAAA,GAAY,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EAChD,CAAA,EAAG,MAAS,CAAA,IACZ,CAAA;AACF,EAAA,OAAO,IAAA,CACJ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,IAAA,KAAS,KAAK,CAAA,CACpC,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,OAAA,GAAU,OAAO,QAAA,CAAS,CAAA,CAAE,MAAM,SAAS,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,SAAA,GAAY,MAAA;AACzE,IAAA,MAAM,aACJ,CAAA,CAAE,KAAA,CAAM,UAAA,KAAe,MAAA,IAAa,OAAO,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,UAAU,IAClE,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,GAC9B,CAAA;AACN,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,EAAE,KAAA,CAAM,IAAA;AAAA,MACd,IAAA,EAAM,EAAE,KAAA,CAAM,IAAA;AAAA,MACd,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,MAAA,IAAU,GAAA;AAAA,MAC1B,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,MAAM,CAAA;AAAA,MACtC,UAAA;AAAA,MACA,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,MAAA,KAAW;AAAA,KAC9B;AAAA,EACF,CAAC,CAAA,CACA,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,QAAA,GAAW,CAAA,CAAE,YAAY,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAC3E;AAKO,SAAS,8BAA8B,KAAA,EAA0C;AACtF,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,CAAA,gDAAA,CAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,IAAA,GAAO,aAAa,IAAI,CAAA;AAC9B,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AAAA,MAClB,CAAC,GAAA,EAAK,GAAA,KAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,GAAA,CAAI,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,UAAA,EAAY,CAAC,CAAC,CAAA;AAAA,MACtE;AAAA,KACF;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,2BAAA,CAA6B,CAAA;AACxC,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,YAAA,CAAc,CAAA;AAC5D,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,KAAA,CAAM,KAAK,CAAA,8CAAA,CAAgD,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,CAAA,mCAAA,CAAqC,CAAA;AAChD,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,MAAM,IAAA,GAAQ,GAAA,CAAI,QAAA,GAAW,MAAA,GAAU,GAAA;AACvC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,EAAM,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,UAAA,EAAY,CAAC,CAAA,GAAI,MAAA,GAAU,GAAG,CAAA;AACxE,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,GAAU,WAAA,GAAc,EAAA;AACxC,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,qBAAqB,GAAG,CAAA,yDAAA,EAA4D,WAAW,GAAA,CAAI,IAAI,CAAC,CAAA,4BAAA,EAA+B,UAAA,CAAW,GAAA,CAAI,IAAI,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,MAAM,CAAC,SAAM,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,UAAU,CAAC,CAAC,CAAA,KAAA,EAAQ,WAAW,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAC,CAAC,CAAA,sEAAA,EAAyE,IAAA,CAAK,QAAQ,CAAC,CAAC,WAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,sBAAA;AAAA,SAC3X;AAAA,MACF;AACA,MAAA,KAAA,CAAM,KAAK,CAAA,MAAA,CAAQ,CAAA;AAAA,IACrB;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,iBAAA,CAAkB,OAAsB,OAAA,EAA0C;AACzF,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,OAAA,KAAY,OAAA,EAAS,OAAO,IAAA;AAC3C,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,IAAA,CAAK,QAAA,EAAU,OAAO,CAAA;AACtD,IAAA,IAAI,OAAO,OAAO,KAAA;AAAA,EACpB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,MAAsB,OAAA,EAAqC;AACrF,EAAA,MAAM,KAAA,GAAuB,CAAC,OAAO,CAAA;AACrC,EAAA,IAAI,QAAA,GAAW,QAAQ,KAAA,CAAM,QAAA;AAC7B,EAAA,MAAM,wBAAQ,IAAI,GAAA,CAAY,CAAC,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAC,CAAA;AACrD,EAAA,OAAO,QAAA,IAAY,CAAC,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG;AACvC,IAAA,KAAA,CAAM,IAAI,QAAQ,CAAA;AAClB,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,IAAA,CAAK,QAAA,EAAU,QAAQ,CAAA;AACxD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,KAAA,CAAM,QAAQ,MAAM,CAAA;AACpB,IAAA,QAAA,GAAW,OAAO,KAAA,CAAM,QAAA;AAAA,EAC1B;AACA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,mCACd,KAAA,EACQ;AACR,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,CAAA,2DAAA,CAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,KAAA,CAAM,KAAK,CAAA,2BAAA,CAA6B,CAAA;AACxC,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,YAAA,CAAc,CAAA;AAC5D,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,IAAI,CAAA,CAC5B,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,MAAA,KAAW,OAAA,IAAW,CAAA,CAAE,MAAM,IAAA,KAAS,OAAO,CAAA,CACpE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,SAAA,GAAY,CAAA,CAAE,KAAA,CAAM,SAAS,CAAA;AACvD,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,sEAAsE,UAAA,CAAW,MAAA,CAAO,KAAK,MAAA,IAAU,SAAS,CAAC,CAAC,CAAA,cAAA;AAAA,OACpH;AACA,MAAA,KAAA,CAAM,KAAK,CAAA,UAAA,CAAY,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA;AAC5C,IAAA,KAAA,CAAM,KAAK,CAAA,gCAAA,CAAkC,CAAA;AAC7C,IAAA,KAAA,CAAM,KAAK,CAAA,yBAAA,CAA2B,CAAA;AACtC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,KAAY,MAAM,KAAA,CAAM,OAAA;AACjD,MAAA,MAAM,GAAA,GACJ,OAAO,IAAA,CAAK,KAAA,CAAM,YAAY,OAAA,KAAY,QAAA,GACtC,KAAK,KAAA,CAAM,UAAA,CAAW,UACtB,OAAO,IAAA,CAAK,MAAM,UAAA,EAAY,KAAA,KAAU,WACtC,IAAA,CAAK,KAAA,CAAM,WAAW,KAAA,GACtB,MAAA;AACR,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,cAAc,KAAA,GAAQ,YAAA,GAAe,EAAE,CAAA,mBAAA,EAAsB,UAAA,CAAW,KAAK,KAAA,CAAM,IAAI,CAAC,CAAA,4BAAA,EAA+B,WAAW,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA,EAAA,EAAK,WAAW,IAAA,CAAK,KAAA,CAAM,MAAA,IAAU,GAAG,CAAC,CAAA,MAAA,EAAM,UAAA,CAAW,KAAK,KAAA,CAAM,OAAO,CAAC,CAAA,OAAA,EAC7N,GAAA,GAAM,CAAA,wBAAA,EAA2B,UAAA,CAAW,IAAI,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAC,WAAW,EAC3E,CAAA,KAAA;AAAA,OACF;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,KAAA,CAAO,CAAA;AAClB,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,oBAAoB,UAAA,CAAW,MAAA,CAAO,OAAO,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA,8DAAA;AAAA,OAC3D;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAGO,IAAM,iBAAA,GAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAgB/B,IAAA;;;ACxNK,IAAM,sBAAA,GAAyB;AAEtC,IAAM,kBAAA,GACJ,yHAAA;AAGK,IAAM,iBAAA,GAAoB;AAAA,EAC/B,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAgDA,SAAS,YAAY,MAAA,EAAwB;AAC3C,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,SAAA;AAC9B,EAAA,IAAI,MAAA,KAAW,sBAAsB,OAAO,SAAA;AAC5C,EAAA,IAAI,MAAA,KAAW,UAAU,OAAO,WAAA;AAChC,EAAA,OAAO,YAAA;AACT;AAEA,SAAS,UAAU,EAAA,EAA4B;AAC7C,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,gBAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,oBAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,sBAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,oBAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,SAAS;AACP,MAAA,MAAM,WAAA,GAAqB,EAAA;AAC3B,MAAA,OAAO,WAAA;AAAA,IACT;AAAA;AAEJ;AAMO,SAAS,2BAA2B,KAAA,EAAwB;AACjE,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,CAAE,OAAA,CAAQ,MAAM,SAAS,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,SAAS,CAAA;AAC/E;AAEA,SAAS,qBAAqB,KAAA,EAAwD;AACpF,EAAA,OAAO;AAAA,IACL,qBAAA,EAAuB,MAAM,qBAAA,IAAyB,KAAA;AAAA,IACtD,SAAA,EAAW;AAAA,MACT,MAAM,KAAA,CAAM,aAAA;AAAA,MACZ,SAAS,KAAA,CAAM;AAAA,KACjB;AAAA,IACA,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,MAAA,EAAQ,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA;AAAA,IACxB,UAAA,EAAY;AAAA,MACV,QAAQ,KAAA,CAAM,gBAAA;AAAA,MACd,GAAI,MAAM,YAAA,KAAiB,MAAA,GAAY,EAAE,YAAA,EAAc,KAAA,CAAM,YAAA,EAAa,GAAI;AAAC,KACjF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,oBAAoB,KAAA,CAAM;AAAA,KAC5B;AAAA,IACA,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,GAAI,KAAA,CAAM,eAAA,KAAoB,MAAA,GAC1B;AAAA,MACE,QAAA,EAAU;AAAA,QACR,MAAA,EAAQ,MAAM,eAAA,CAAgB,MAAA;AAAA,QAC9B,GAAI,KAAA,CAAM,eAAA,CAAgB,MAAA,KAAW,MAAA,GACjC,EAAE,MAAA,EAAQ,KAAA,CAAM,eAAA,CAAgB,MAAA,EAAO,GACvC,EAAC;AAAA,QACL,GAAI,KAAA,CAAM,eAAA,CAAgB,SAAA,KAAc,MAAA,GACpC,EAAE,SAAA,EAAW,KAAA,CAAM,eAAA,CAAgB,SAAA,EAAU,GAC7C,EAAC;AAAA,QACL,GAAI,KAAA,CAAM,eAAA,CAAgB,IAAA,KAAS,MAAA,GAC/B,EAAE,IAAA,EAAM,KAAA,CAAM,eAAA,CAAgB,IAAA,EAAK,GACnC;AAAC;AACP,QAEF;AAAC,GACP;AACF;AAMO,SAAS,uBAAuB,KAAA,EAAuC;AAC5E,EAAA,IAAI,KAAA,CAAM,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,oBAAA,IAAwB,EAAA,GAAK,IAAA;AACpD,EAAA,IAAI,QAAA,GAAW,0BAAA,CAA2B,oBAAA,CAAqB,KAAK,CAAC,CAAA;AACrE,EAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAC9B,IAAA,QAAA,GAAW,0BAAA,CAA2B;AAAA,MACpC,SAAA,EAAW,IAAA;AAAA,MACX,qBAAA,EAAuB,MAAM,qBAAA,IAAyB,KAAA;AAAA,MACtD,MAAA,EAAQ,CAAC,GAAG,KAAA,CAAM,MAAM,CAAA;AAAA,MACxB,UAAA,EAAY,EAAE,MAAA,EAAQ,KAAA,CAAM,gBAAA,EAAiB;AAAA,MAC7C,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,KAAA,IAAS,uBAAuB,CAAA;AAC/D,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,CACnB,GAAA,CAAI,CAAC,EAAA,KAAO,CAAA,UAAA,EAAa,UAAA,CAAW,EAAE,CAAC,CAAA,YAAA,CAAc,CAAA,CACrD,KAAK,EAAE,CAAA;AACV,EAAA,MAAM,WAAA,GACJ,KAAA,CAAM,WAAA,KAAgB,MAAA,IAAa,MAAM,WAAA,CAAY,IAAA,EAAK,KAAM,EAAA,GAC5D,CAAA,wBAAA,EAA2B,UAAA,CAAW,KAAA,CAAM,WAAW,CAAC,CAAA,MAAA,CAAA,GACxD,CAAA,2FAAA,CAAA;AAEN,EAAA,MAAM,SAAA,GACJ,KAAA,CAAM,YAAA,EAAc,IAAA,CACjB,GAAA;AAAA,IACC,CAAC,GAAA,KACC,CAAA,cAAA,EAAiB,UAAA,CAAW,GAAA,CAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,WAAA,CAAY,GAAA,CAAI,MAAM,CAAC,KAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAC,CAAA,SAAA,EAAY,GAAA,CAAI,MAAM,CAAA,SAAA,EAAY,GAAA,CAAI,QAAQ,CAAA,SAAA,EAAY,GAAA,CAAI,QAAQ,CAAA,UAAA;AAAA,GAC5L,CACC,IAAA,CAAK,EAAE,CAAA,IAAK,EAAA;AAEjB,EAAA,MAAM,MAAM,iBAAA,CAAkB,GAAA;AAAA,IAC5B,CAAC,EAAA,KACC,CAAA,gCAAA,EAAmC,EAAE,CAAA,aAAA,EAAgB,EAAE,CAAA,EAAA,EAAK,UAAA,CAAW,SAAA,CAAU,EAAE,CAAC,CAAC,CAAA,IAAA;AAAA,GACzF,CAAE,KAAK,IAAI,CAAA;AAEX,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,MAAA,CAAO,CAAC,EAAA,KAAO,OAAO,SAAS,CAAA,CACjE,GAAA,CAAI,CAAC,EAAA,KAAO;AACX,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,GAAa,EAAE,CAAA;AAClC,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAC5C,MAAA,OAAO,uBAAuB,EAAE,CAAA;AAAA,QAAA,EAC9B,UAAA,CAAW,SAAA,CAAU,EAAE,CAAC,CAAC,CAAA;AAAA,IAAA,EAC7B,IAAI;AAAA,YAAA,CAAA;AAAA,IAEJ;AACA,IAAA,OAAO,uBAAuB,EAAE,CAAA;AAAA,QAAA,EAC5B,UAAA,CAAW,SAAA,CAAU,EAAE,CAAC,CAAC,CAAA;AAAA;AAAA,YAAA,CAAA;AAAA,EAG/B,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAA,EAOA,KAAK,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;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCZ,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAKX,KAAK,CAAA;AAAA,kBAAA,EACO,UAAA,CAAW,kBAAkB,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA,EAIhD,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,2CAAA,EAKwC,WAAA,CAAY,MAAM,gBAAgB,CAAC,KAAK,UAAA,CAAW,KAAA,CAAM,gBAAgB,CAAC,CAAA;AAAA,IAAA,EAEjH,KAAA,CAAM,YAAA,KAAiB,MAAA,GACnB,CAAA,wCAAA,EAAwC,YAAY,KAAA,CAAM,YAAY,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,YAAY,CAAC,YAC1G,EACN,CAAA;AAAA,sBAAA,EACoB,UAAA,CAAW,MAAM,gBAAgB,CAAC,oCAAiC,UAAA,CAAW,KAAA,CAAM,kBAAkB,CAAC,CAAA;AAAA,EAEzH,KAAA,CAAM,oBAAoB,MAAA,GACtB,CAAA,+BAAA,EAAkC,WAAW,KAAA,CAAM,eAAA,CAAgB,MAAM,CAAC,CAAA,OAAA,EACxE,KAAA,CAAM,gBAAgB,SAAA,KAAc,MAAA,GAChC,CAAA,mBAAA,EAAmB,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,gBAAgB,SAAS,CAAC,CAAC,CAAA,OAAA,CAAA,GACtE,EACN,CAAA,EACE,MAAM,eAAA,CAAgB,MAAA,KAAW,MAAA,GAC7B,CAAA,oBAAA,EAAoB,UAAA,CAAW,KAAA,CAAM,gBAAgB,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAC,kBACzE,EACN,CAAA,IAAA,EACE,KAAA,CAAM,eAAA,CAAgB,IAAA,KAAS,MAAA,IAAa,MAAM,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,GAC9E;AAAA,qBAAA,EAA0B,WAAW,KAAA,CAAM,eAAA,CAAgB,IAAI,CAAC,SAChE,EACN;AAAA,CAAA,GACA,EACN,CAAA,wBAAA,EAA2B,UAAA,CAAW,KAAA,CAAM,aAAa,CAAC,CAAA,CAAA,EAAI,UAAA,CAAW,KAAA,CAAM,gBAAgB,CAAC,CAAA;AAAA,IAAA,EAC9F,KAAA,CAAM,YAAY,CAAA,qBAAA,EAAqB,UAAA,CAAW,MAAM,SAAS,CAAC,YAAY,EAAE,CAAA;AAAA;AAAA,qBAAA,EAE/D,OAAO,CAAA;AAAA,IAAA,EAExB,SAAA,GACI,CAAA;AAAA;AAAA;AAAA,aAAA,EAGK,SAAS,CAAA;AAAA,YAAA,CAAA,GAEd,EACN;AAAA;AAAA,IAAA,EAEE,WAAW;AAAA;AAAA,EAEf,UAAU;AAAA;AAAA;AAAA,sDAAA,EAG4C,QAAQ,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAuChE;AAKO,SAAS,kCAAA,CACd,UACA,MAAA,EAGQ;AACR,EAAA,OAAO,sBAAA,CAAuB;AAAA,IAC5B,OAAO,MAAA,EAAQ,KAAA;AAAA,IACf,MAAA,EAAQ,SAAS,MAAA,CAAO,MAAA;AAAA,IACxB,gBAAA,EAAkB,SAAS,UAAA,CAAW,MAAA;AAAA,IACtC,YAAA,EAAc,SAAS,UAAA,CAAW,YAAA;AAAA,IAClC,gBAAA,EAAkB,SAAS,MAAA,CAAO,gBAAA;AAAA,IAClC,kBAAA,EAAoB,SAAS,MAAA,CAAO,kBAAA;AAAA,IACpC,aAAA,EAAe,SAAS,SAAA,CAAU,IAAA;AAAA,IAClC,gBAAA,EAAkB,SAAS,SAAA,CAAU,OAAA;AAAA,IACrC,WAAW,QAAA,CAAS,SAAA;AAAA,IACpB,uBAAuB,QAAA,CAAS,qBAAA;AAAA,IAChC,aAAa,MAAA,EAAQ,WAAA;AAAA,IACrB,cAAc,MAAA,EAAQ,YAAA;AAAA,IACtB,YAAY,MAAA,EAAQ;AAAA,GACrB,CAAA;AACH;;;ACrVA,SAAS,YAAA,CAAa,OAAA,EAAiB,GAAA,GAAM,GAAA,EAAa;AACxD,EAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,EAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,GAAA,EAAK,OAAO,OAAA;AAClC,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,MAAA,CAAA;AACjC;AAKO,SAAS,+BAA+B,KAAA,EAA2C;AACxF,EAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAChB,GAAA;AAAA,IACC,CAAC,GAAA,KACC,CAAA,cAAA,EAAiB,UAAA,CAAW,GAAA,CAAI,KAAK,CAAC,CAAA,gBAAA,EAAmB,UAAA,CAAW,GAAA,CAAI,MAAM,CAAC,CAAA,SAAA,EAAY,WAAW,GAAA,CAAI,YAAA,IAAgB,QAAG,CAAC,CAAA,SAAA,EAAY,GAAA,CAAI,MAAM,CAAA,SAAA,EAAY,GAAA,CAAI,QAAQ,CAAA,SAAA,EAAY,GAAA,CAAI,QAAQ,CAAA,UAAA;AAAA,GACxM,CACC,KAAK,EAAE,CAAA;AAEV,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,gBAAA,IAAoB,EAAC;AAC5C,EAAA,MAAM,WAAA,GACJ,QAAA,CAAS,MAAA,KAAW,CAAA,GAChB,CAAA,qFAAA,CAAA,GACA,CAAA;AAAA;AAAA,SAAA,EAEG,QAAA,CACN,GAAA;AAAA,IACC,CAAC,CAAA,KACC,CAAA,cAAA,EAAiB,UAAA,CAAW,EAAE,KAAK,CAAC,CAAA,gBAAA,EAAmB,UAAA,CAAW,EAAE,QAAQ,CAAC,CAAA,eAAA,EAAkB,UAAA,CAAW,EAAE,MAAM,CAAC,CAAA,gBAAA,EAAmB,UAAA,CAAW,EAAE,QAAA,IAAY,QAAG,CAAC,CAAA,SAAA,EAAY,WAAW,CAAA,CAAE,QAAA,IAAY,QAAG,CAAC,YAAY,UAAA,CAAW,YAAA,CAAa,CAAA,CAAE,OAAO,CAAC,CAAC,CAAA,UAAA;AAAA,GAC/P,CACC,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,QAAA,CAAA;AAGX,EAAA,OAAO,CAAA,sCAAA,EAAyC,UAAA,CAAW,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA;AAAA;AAAA,SAAA,EAGxE,IAAI,CAAA;AAAA;AAAA;AAAA,EAGb,WAAW;AAAA,uHAAA,CAAA;AAEb;AAKO,SAAS,8BACd,IAAA,EACQ;AACR,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,CAAA,8DAAA,CAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,KAAU,GAAA,CAAI,KAAK,CAAA;AACrE,IAAA,MAAM,OAAA,GAAU,yBAAA,CAA0B,kCAAA,CAAmC,MAAM,CAAC,CAAA;AACpF,IAAA,KAAA,CAAM,KAAK,CAAA,2BAAA,CAA6B,CAAA;AACxC,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,UAAA,CAAW,GAAA,CAAI,KAAK,CAAC,CAAA,YAAA,CAAc,CAAA;AAC3D,IAAA,KAAA,CAAM,IAAA,CAAK,0BAAA,CAA2B,OAAO,CAAC,CAAA;AAC9C,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAMO,SAAS,0BAA0B,KAAA,EAK/B;AACT,EAAA,IACE,KAAA,KAAU,UACV,KAAA,CAAM,UAAA,CAAW,WAAW,CAAA,IAC5B,KAAA,CAAM,WAAA,CAAY,MAAA,KAAW,CAAA,EAC7B;AACA,IAAA,OAAO,CAAA,sJAAA,CAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,mCAAA;AAAA,MACX,KAAA,CAAM,WAAW,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,MAAM,SAAS;AAAA,KAC5D;AACA,IAAA,MAAM,KAAA,GAAQ,mCAAA;AAAA,MACZ,KAAA,CAAM,YAAY,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,MAAM,UAAU;AAAA,KAC9D;AACA,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC3C,MAAA,OAAO,CAAA,6FAAA,CAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,IAAA,EAAM,KAAK,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,cAAc,MAAA,EAAQ,EAAE,OAAO,KAAA,EAAO,OAAA,EAAS,OAAO,CAAA;AACnE,IAAA,OAAO,CAAA,mBAAA,EAAsB,WAAW,KAAA,CAAM,SAAS,CAAC,CAAA,qBAAA,EAAmB,UAAA,CAAW,KAAA,CAAM,UAAU,CAAC,CAAA;AAAA,wBAAA,EACjF,UAAA,CAAW,IAAI,CAAC,CAAA,MAAA,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO,CAAA,mCAAA,EAAsC,UAAA,CAAW,OAAO,CAAC,CAAA,IAAA,CAAA;AAAA,EAClE;AACF;;;ACnGO,SAAS,4BAA4B,KAAA,EAAwC;AAClF,EAAA,MAAM,eACH,KAAA,CAAM,gBAAA,IAAoB,EAAC,EAAG,MAAA,KAAW,IACtC,CAAA,iEAAA,CAAA,GACA,CAAA;AAAA;AAAA,SAAA,EAAA,CAEI,MAAM,gBAAA,IAAoB,EAAC,EAClC,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,GAAA,GACJ,CAAA,CAAE,OAAA,CAAQ,MAAA,GAAS,GAAA,GAAM,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,WAAM,CAAA,CAAE,OAAA;AAC7D,IAAA,OAAO,CAAA,cAAA,EAAiB,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,gBAAA,EAAmB,UAAA,CAAW,CAAA,CAAE,QAAQ,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,EAAE,QAAA,IAAY,QAAG,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,CAAA,CAAE,QAAA,IAAY,QAAG,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,CAAA,CAAE,MAAA,IAAU,QAAG,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,GAAG,CAAC,CAAA,UAAA,CAAA;AAAA,EAC1O,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,QAAA,CAAA;AAGX,EAAA,MAAM,cAAA,GACJ,MAAM,SAAA,KAAc,MAAA,GAChB,uDACA,CAAA,qCAAA,EAAwC,KAAA,CAAM,UAAU,aAAa,CAAA;AAAA,IAAA,EACvE,KAAA,CAAM,UAAU,IAAA,CACX,GAAA;AAAA,IACC,CAAC,GAAA,KACC,CAAA,UAAA,EAAa,WAAW,GAAA,CAAI,KAAK,CAAC,CAAA,SAAA,EAAY,GAAA,CAAI,QAAQ,CAAA,wBAAA,EAA2B,WAAW,GAAA,CAAI,SAAA,CAAU,KAAK,IAAI,CAAA,IAAK,MAAM,CAAC,CAAA,KAAA;AAAA,GACvI,CACC,IAAA,CAAK,EAAE,CAAC,CAAA,KAAA,CAAA;AAEjB,EAAA,OAAO,+BAA+B,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,cAAc,CAAC,CAAC,CAAA;AAAA,EAAA,EAE5E,KAAA,CAAM,YAAA,KAAiB,MAAA,GACnB,CAAA,6BAAA,EAA6B,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,YAAY,CAAC,CAAC,CAAA,SAAA,CAAA,GACnE,EACN,CAAA;AAAA,4BAAA,EAC4B,UAAA,CAAW,MAAM,gBAAgB,CAAC,oCAAiC,UAAA,CAAW,KAAA,CAAM,kBAAkB,CAAC,CAAA;AAAA;AAAA,EAEnI,cAAc;AAAA;AAAA,EAEd,WAAW;AAAA,gIAAA,CAAA;AAEb;AAKO,SAAS,gCAAgC,KAAA,EAA4C;AAC1F,EAAA,MAAM,MAAA,GACJ,KAAA,CAAM,YAAA,CAAa,MAAA,KAAW,IAC1B,CAAA,+CAAA,CAAA,GACA,CAAA;AAAA;AAAA,SAAA,EAEG,MAAM,YAAA,CACZ,GAAA;AAAA,IACC,CAAC,CAAA,KACC,CAAA,cAAA,EAAiB,UAAA,CAAW,CAAA,CAAE,KAAK,CAAC,CAAA,gBAAA,EAAmB,UAAA,CAAW,CAAA,CAAE,SAAS,CAAC,CAAA,eAAA,EAAkB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,iBAAA;AAAA,GACtH,CACC,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,QAAA,CAAA;AAGX,EAAA,MAAM,KAAA,GACJ,MAAM,aAAA,CAAc,MAAA,KAAW,IAC3B,CAAA,8CAAA,CAAA,GACA,CAAA,IAAA,EAAO,MAAM,aAAA,CACV,GAAA;AAAA,IACC,CAAC,CAAA,KACC,CAAA,UAAA,EAAa,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,OAAA,EAAU,CAAA,CAAE,IAAA,GAAO,wBAAwB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,aAAa,EAAE,CAAA,KAAA;AAAA,GAC/G,CACC,IAAA,CAAK,EAAE,CAAC,CAAA,KAAA,CAAA;AAEjB,EAAA,OAAO,CAAA,oBAAA,EAAuB,WAAW,KAAA,CAAM,aAAa,CAAC,CAAA,CAAA,EAAI,UAAA,CAAW,KAAA,CAAM,gBAAgB,CAAC,CAAA;AAAA,8BAAA,EACxE,UAAA,CAAW,KAAA,CAAM,qBAAqB,CAAC,CAAA;AAAA,EAAA,EAChE,KAAA,CAAM,YAAY,CAAA,qBAAA,EAAqB,UAAA,CAAW,MAAM,SAAS,CAAC,YAAY,EAAE,CAAA;AAAA,SAAA,EACzE,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,EAAA,KAAO,CAAA,MAAA,EAAS,UAAA,CAAW,EAAE,CAAC,CAAA,OAAA,CAAS,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,0BAAA,EAE5E,MAAM,mBAAA,CAAoB,MAAA,GAAS,IAC/B,KAAA,CAAM,mBAAA,CAAoB,IAAI,CAAC,CAAA,KAAM,CAAA,MAAA,EAAS,UAAA,CAAW,CAAC,CAAC,CAAA,OAAA,CAAS,EAAE,IAAA,CAAK,IAAI,IAC/E,oCACN,CAAA;AAAA;AAAA,EAEA,MAAM;AAAA;AAAA,EAEN,KAAK;AAAA,iBAAA,EACY,UAAA,CAAW,KAAA,CAAM,IAAA,IAAQ,wHAAwH,CAAC,CAAA,IAAA,CAAA;AACrK;AAKO,SAAS,8BAA8B,KAAA,EAA0C;AACtF,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,CAAA,6DAAA,CAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAI,CAAA,CAAE,MAAA;AAAA,MAC9B,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,KAAA,CAAM,IAAA,KAAS,KAAA,IAAS,CAAA,CAAE,KAAA,CAAM,IAAA,KAAS;AAAA,KAC/E;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,2BAAA,CAA6B,CAAA;AACxC,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,YAAA,CAAc,CAAA;AAC5D,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,KAAA,CAAM,KAAK,CAAA,0DAAA,CAA4D,CAAA;AAAA,IACzE,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA;AAAA;AAAA,SAAA,EAEN,KAAA,CACN,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,QAAA,MAAM,GAAA,GACJ,CAAA,CAAE,KAAA,CAAM,UAAA,KAAe,UAAa,MAAA,CAAO,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,GAClE,MAAA,CAAO,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,GACzB,QAAA;AACN,QAAA,OAAO,CAAA,QAAA,EAAW,WAAW,CAAA,CAAE,KAAA,CAAM,IAAI,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,CAAA,CAAE,KAAA,CAAM,IAAI,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,EAAE,KAAA,CAAM,MAAA,IAAU,GAAG,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,GAAG,CAAC,CAAA,UAAA,CAAA;AAAA,MACxJ,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,QAAA,CACJ,CAAA;AAAA,IACL;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKO,SAAS,6BAA6B,KAAA,EAElC;AACT,EAAA,MAAM,QAAA,GAAW,KAAA,EAAO,QAAA,IAAY,EAAC;AACrC,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,CAAA,4FAAA,CAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA;AAAA;AAAA,SAAA,EAEE,QAAA,CACN,GAAA;AAAA,IACC,CAAC,MACC,CAAA,cAAA,EAAiB,UAAA,CAAW,EAAE,KAAK,CAAC,CAAA,gBAAA,EAAmB,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,EAAE,MAAM,CAAC,YAAY,UAAA,CAAW,CAAA,CAAE,MAAA,IAAU,QAAG,CAAC,CAAA,UAAA;AAAA,GACpJ,CACC,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,QAAA,CAAA;AAEb;;;ACnKA,IAAM,aAAa,MAAM;AACvB,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,GAAG,CAAA;AACjC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,EAAG;AAC7B,MAAA,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,UAAA,GAAc,CAAA,KAAM,IAAK,CAAA,KAAM,CAAA;AAAA,IAC7C;AACA,IAAA,KAAA,CAAM,CAAC,IAAI,CAAA,KAAM,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,KAAA;AACT,CAAA,GAAG;AAEH,SAAS,MAAM,IAAA,EAA0B;AACvC,EAAA,IAAI,GAAA,GAAM,UAAA;AACV,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG;AACvC,IAAA,GAAA,GAAM,WAAW,GAAA,GAAM,IAAA,CAAK,CAAC,CAAA,IAAM,GAAI,IAAM,GAAA,KAAQ,CAAA;AAAA,EACvD;AACA,EAAA,OAAA,CAAQ,MAAM,UAAA,MAAgB,CAAA;AAChC;AAEA,SAAS,QAAQ,OAAA,EAA0C;AACzD,EAAA,OAAO,OAAO,OAAA,KAAY,QAAA,GAAW,OAAO,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA,GAAI,OAAA;AACtE;AAEA,SAAS,IAAI,KAAA,EAAuB;AAClC,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAC1B,EAAA,GAAA,CAAI,aAAA,CAAc,KAAA,KAAU,CAAA,EAAG,CAAC,CAAA;AAChC,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,IAAI,KAAA,EAAuB;AAClC,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAC1B,EAAA,GAAA,CAAI,aAAA,CAAc,KAAA,KAAU,CAAA,EAAG,CAAC,CAAA;AAChC,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,gBAAgB,OAAA,EAAsC;AACpE,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,IAAA,GAAO,0BAAA,CAA2B,KAAA,CAAM,IAAI,CAAA;AAClD,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG;AAClB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,IAAI,CAAA,CAAE,CAAA;AAAA,IACrD;AACA,IAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAEb,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,MAAM,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAI,CAAA;AAC3B,IAAA,MAAM,OAAO,IAAA,CAAK,UAAA;AAElB,IAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,CAAO;AAAA,MAC1B,IAAI,QAAU,CAAA;AAAA,MACd,IAAI,EAAE,CAAA;AAAA;AAAA,MACN,IAAI,CAAC,CAAA;AAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA;AAAA,MACL,IAAI,QAAQ,CAAA;AAAA,MACZ,IAAI,IAAI,CAAA;AAAA,MACR,IAAI,IAAI,CAAA;AAAA,MACR,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,MACpB,IAAI,CAAC,CAAA;AAAA;AAAA,MACL,SAAA;AAAA,MACA,MAAA,CAAO,KAAK,IAAI;AAAA,KACjB,CAAA;AAED,IAAA,MAAM,OAAA,GAAU,OAAO,MAAA,CAAO;AAAA,MAC5B,IAAI,QAAU,CAAA;AAAA,MACd,IAAI,EAAE,CAAA;AAAA;AAAA,MACN,IAAI,EAAE,CAAA;AAAA;AAAA,MACN,IAAI,CAAC,CAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA,MACL,IAAI,QAAQ,CAAA;AAAA,MACZ,IAAI,IAAI,CAAA;AAAA,MACR,IAAI,IAAI,CAAA;AAAA,MACR,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,MACpB,IAAI,CAAC,CAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA,MACL,IAAI,CAAC,CAAA;AAAA,MACL,IAAI,MAAM,CAAA;AAAA,MACV;AAAA,KACD,CAAA;AAED,IAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,IAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AACrB,IAAA,MAAA,IAAU,KAAA,CAAM,MAAA;AAAA,EAClB;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AACzC,EAAA,MAAM,GAAA,GAAM,OAAO,MAAA,CAAO;AAAA,IACxB,IAAI,SAAU,CAAA;AAAA,IACd,IAAI,CAAC,CAAA;AAAA,IACL,IAAI,CAAC,CAAA;AAAA,IACL,GAAA,CAAI,QAAQ,MAAM,CAAA;AAAA,IAClB,GAAA,CAAI,QAAQ,MAAM,CAAA;AAAA,IAClB,GAAA,CAAI,WAAW,MAAM,CAAA;AAAA,IACrB,IAAI,MAAM,CAAA;AAAA,IACV,IAAI,CAAC;AAAA,GACN,CAAA;AAED,EAAA,OAAO,OAAO,MAAA,CAAO,CAAC,GAAG,MAAA,EAAQ,UAAA,EAAY,GAAG,CAAC,CAAA;AACnD;ACxEA,eAAe,mBAAmB,IAAA,EAAiC;AACjE,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,eAAe,KAAK,GAAA,EAA4B;AAC9C,IAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC1D,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,GAAA,GAAMA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AACrC,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,MAAM,KAAK,GAAG,CAAA;AAAA,MAChB,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,EAAO,EAAG;AACzB,QAAA,MAAM,GAAA,GAAMA,KAAAA,CAAK,QAAA,CAAS,IAAA,EAAM,GAAG,CAAA,CAAE,KAAA,CAAMA,KAAAA,CAAK,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC7D,QAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,KAAK,IAAI,CAAA;AACf,EAAA,OAAO,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAC9C;AAMA,eAAsB,uBAAA,CACpB,QAAA,EACA,OAAA,GAAiC,EAAC,EACH;AAC/B,EAAA,MAAM,cAAA,GAAiB,QAAQ,eAAA,IAAmB,MAAA;AAClD,EAAA,MAAM,IAAA,GAAOA,KAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAClC,EAAA,MAAM,SAAgC,EAAC;AAEvC,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,KAAK,IAAI,CAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAA,EAAI,CAAA;AAAA,MACzF,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,WAAA,EAAY,EAAG;AAC3B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU,OAAA;AAAA,UACV,OAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAeA,KAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,0BAA0B,CAAA;AAC/D,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI;AACF,IAAA,YAAA,GAAe,MAAM,QAAA,CAAS,YAAA,EAAc,OAAO,CAAA;AAAA,EACrD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAM,kBAAA;AAAA,UACN,QAAA,EAAU,OAAA;AAAA,UACV,OAAA,EAAS,WAAW,0BAA0B,CAAA,CAAA;AAAA,UAC9C,IAAA,EAAM;AAAA;AACR,OACF;AAAA,MACA,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,0BAA0B,YAAY,CAAA;AAAA,EACnD,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,IAAA,EAAM,kBAAA;AAAA,UACN,QAAA,EAAU,OAAA;AAAA,UACV,OAAA;AAAA,UACA,IAAA,EAAM;AAAA;AACR,OACF;AAAA,MACA,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,QAAA,CAAS,UAAA,EAAY,MAAA,EAAQ;AAChC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,oBAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,SAAA,EAAW,QAAQ,CAAC,QAAA,CAAS,WAAW,OAAA,EAAS;AAC7D,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,oBAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ;AACpC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,oBAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,EAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjC,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI;AACF,MAAA,GAAA,GAAM,0BAAA,CAA2B,KAAK,IAAI,CAAA;AAAA,IAC5C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,aAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA;AAAA,QACA,MAAM,IAAA,CAAK;AAAA,OACZ,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,0BAAA,EAA4B;AACtC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,kBAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,GAAG,0BAA0B,CAAA,iCAAA,CAAA;AAAA,QACtC,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,IAAI,GAAG,CAAA;AACd,IAAA,MAAM,GAAA,GAAMA,MAAK,IAAA,CAAK,IAAA,EAAM,GAAG,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAA;AAC7C,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,MAAM,SAAS,GAAG,CAAA;AAAA,IAC5B,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,wBAAwB,GAAG,CAAA,CAAA;AAAA,QACpC,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,UAAU,KAAK,CAAA;AAC9B,IAAA,IAAI,CAAC,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA,EAAG;AACtC,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,eAAA;AAAA,QACN,QAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,wBAAwB,GAAG,CAAA,CAAA;AAAA,QACpC,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAI,SAAmB,EAAC;AACxB,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,MAAM,mBAAmB,IAAI,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,YAAY,QAAA,EAAU,OAAA,EAAS,SAAS,CAAA;AAAA,EAC9D;AAEA,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,IAAI,QAAQ,0BAAA,EAA4B;AACxC,IAAA,IAAI,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,EAAG;AACrB,IAAA,IAAI,mBAAmB,QAAA,EAAU;AACjC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,iBAAA;AAAA,MACN,QAAA,EAAU,cAAA,KAAmB,MAAA,GAAS,SAAA,GAAY,OAAA;AAAA,MAClD,OAAA,EAAS,2CAA2C,GAAG,CAAA,CAAA;AAAA,MACvD,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,QAAA,CAAS,aAAa,MAAA,EAAW;AACnC,IAAA,MAAM,WAAA,GACJ,QAAA,CAAS,QAAA,CAAS,IAAA,IAAQ,mCAAA;AAC5B,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI;AACF,MAAA,aAAA,GAAgB,MAAM,QAAA,CAASA,KAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,GAAG,WAAA,CAAY,KAAA,CAAM,GAAG,CAAC,CAAA,EAAG,OAAO,CAAA;AAAA,IACpF,CAAA,CAAA,MAAQ;AACN,MAAA,aAAA,GAAgB,MAAA;AAAA,IAClB;AACA,IAAA,IAAI,gBAAA;AACJ,IAAA,IAAI;AACF,MAAA,gBAAA,GAAmB,MAAM,QAAA,CAASA,KAAAA,CAAK,KAAK,IAAA,EAAM,oBAAoB,GAAG,OAAO,CAAA;AAAA,IAClF,CAAA,CAAA,MAAQ;AACN,MAAA,gBAAA,GAAmB,MAAA;AAAA,IACrB;AACA,IAAA,KAAA,MAAW,SAAS,6BAAA,CAA8B;AAAA,MAChD,SAAS,QAAA,CAAS,QAAA;AAAA,MAClB,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAE,qBAAA,EAAuB,aAAA,KAAkB,EAAC;AAAA,MAC9E,GAAI,gBAAA,KAAqB,MAAA,GAAY,EAAE,gBAAA,KAAqB;AAAC,KAC9D,CAAA,EAAG;AACF,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,MAAM,WAAW,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,aAAa,OAAO,CAAA;AAClE,EAAA,OAAO;AAAA,IACL,IAAI,CAAC,QAAA;AAAA,IACL,MAAA,EAAQ,WAAW,MAAA,GAAS,MAAA;AAAA,IAC5B,IAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAc,MAAA,CAAO;AAAA,GACvB;AACF;;;AC1NA,SAAS,MACP,KAAA,EACqB;AACrB,EAAA,IAAI,KAAA,YAAiB,GAAA,EAAK,OAAO,IAAI,IAAI,KAAK,CAAA;AAC9C,EAAA,OAAO,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA;AACtC;AAOO,SAAS,uBAAuB,KAAA,EAAuD;AAC5F,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,cAAc,CAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAChD,KAAA;AAAA,IACA,SAAA,EAAW,QAAA;AAAA,IACX,MAAM,SAAA,CAAU,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,EAAE;AAAA,GAC1C,CAAE,CAAA;AACF,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AACvC,EAAA,KAAA,MAAW,OAAA,IAAW,OAAA,CAAQ,MAAA,EAAO,EAAG;AACtC,IAAA,KAAA,MAAW,OAAA,IAAW,0BAAA,CAA2B,OAAO,CAAA,EAAG;AACzD,MAAA,cAAA,CAAe,IAAI,OAAO,CAAA;AAAA,IAC5B;AAAA,EACF;AACA,EAAA,KAAA,MAAW,OAAA,IAAW,0BAAA,CAA2B,KAAA,CAAM,kBAAkB,CAAA,EAAG;AAC1E,IAAA,cAAA,CAAe,IAAI,OAAO,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,YAAY,KAAA,CAAM,SAAA,IAAA,iBAAa,IAAI,IAAA,IAAO,WAAA,EAAY;AAE5D,EAAA,IAAI,mBAAmB,KAAA,CAAM,gBAAA;AAC7B,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,mBAAA;AAEJ,EAAA,IAAI,KAAA,CAAM,oBAAoB,MAAA,EAAW;AACvC,IAAA,MAAMC,YAAW,4BAAA,CAA6B;AAAA,MAC5C,GAAG,KAAA,CAAM,eAAA;AAAA,MACT,aAAA,EAAe,KAAA,CAAM,eAAA,CAAgB,aAAA,IAAiB,KAAA,CAAM;AAAA,KAC7D,CAAA;AACD,IAAA,eAAA,GAAkBA,SAAAA,CAAS,OAAA;AAC3B,IAAA,IAAIA,SAAAA,CAAS,iBAAiB,MAAA,EAAW;AACvC,MAAA,mBAAA,GAAsBA,SAAAA,CAAS,YAAA;AAAA,IACjC;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,gBAAgB,CAAA;AAAA,IACtC,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,GAAS,EAAE,KAAK,gBAAA,EAAiB;AAAA,IACnC;AACA,IAAA,gBAAA,GAAmB,yBAAA;AAAA,MACjB,0BAAA,CAA2B,MAAA,EAAQA,SAAAA,CAAS,YAAY;AAAA,KAC1D;AAAA,EACF;AAEA,EAAA,MAAM,eAAe,sBAAA,CAAuB;AAAA,IAC1C,KAAA,EAAO,uBAAA;AAAA,IACP,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,kBAAkB,KAAA,CAAM,gBAAA;AAAA,IACxB,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,IACxB,oBAAoB,KAAA,CAAM,gBAAA;AAAA,IAC1B,aAAA,EAAe,eAAA;AAAA,IACf,kBAAkB,KAAA,CAAM,gBAAA;AAAA,IACxB,SAAA;AAAA,IACA,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,YAAA,EAAc;AAAA,MACZ,iBAAiB,KAAA,CAAM,gBAAA;AAAA,MACvB,IAAA,EAAM,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QACjC,KAAA;AAAA,QACA,QAAQ,KAAA,CAAM,gBAAA;AAAA,QACd,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,QAAQ,KAAA,CAAM,gBAAA,KAAqB,YAAY,KAAA,CAAM,gBAAA,KAAqB,YAAY,CAAA,GAAI,CAAA;AAAA,QAC1F,QAAA,EAAU,KAAA,CAAM,gBAAA,KAAqB,oBAAA,GAAuB,CAAA,GAAI,CAAA;AAAA,QAChE,QAAA,EAAU;AAAA,OACZ,CAAE;AAAA,KACJ;AAAA,IACA,GAAI,oBAAoB,MAAA,GACpB;AAAA,MACE,eAAA,EAAiB;AAAA,QACf,QAAQ,eAAA,CAAgB,MAAA;AAAA,QACxB,GAAI,gBAAgB,MAAA,KAAW,MAAA,GAC3B,EAAE,MAAA,EAAQ,eAAA,CAAgB,MAAA,EAAO,GACjC,EAAC;AAAA,QACL,GAAI,gBAAgB,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,eAAA,CAAgB,IAAA,EAAK,GAAI,EAAC;AAAA,QAC3E,SAAA,EAAW,gBAAgB,OAAA,CAAQ;AAAA;AACrC,QAEF;AAAC,GACN,CAAA;AAED,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,EAAE,IAAA,EAAM,sBAAA,EAAwB,OAAA,EAAS,YAAA,EAAa;AAAA,IACtD,EAAE,IAAA,EAAM,oBAAA,EAAsB,OAAA,EAAS,gBAAA,EAAiB;AAAA,IACxD,EAAE,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,MAAM,kBAAA,EAAmB;AAAA,IACzD,GAAI,mBAAA,KAAwB,MAAA,GACxB,CAAC,EAAE,IAAA,EAAM,mCAAA,EAAqC,OAAA,EAAS,mBAAA,EAAqB,CAAA,GAC5E;AAAC,GACP;AAEA,EAAA,MAAM,WAAW,qBAAA,CAAsB;AAAA,IACrC,kBAAkB,KAAA,CAAM,gBAAA;AAAA,IACxB,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,mBAAA,EAAqB,CAAC,GAAG,cAAc,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,IAC1E,YAAA;AAAA,IACA,kBAAkB,KAAA,CAAM,gBAAA;AAAA,IACxB,oBAAoB,KAAA,CAAM,gBAAA;AAAA,IAC1B,kBAAkB,KAAA,CAAM,gBAAA;AAAA,IACxB,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,KAAA,EAAO,QAAA;AAAA,IACP,SAAA;AAAA,IACA,IAAA,EAAM,wBAAA;AAAA,IACN,GAAI,MAAM,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA,EAAU,GAAI,EAAC;AAAA,IACtE,GAAI,eAAA,KAAoB,MAAA,GAAY,EAAE,QAAA,EAAU,eAAA,KAAoB;AAAC,GACtE,CAAA;AAED,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,YAAA;AAAA,IACjB,eAAA,EAAiB,0BAA0B,QAAQ,CAAA;AAAA,IACnD,oBAAA,EAAsB,gBAAA;AAAA,IACtB,eAAe,KAAA,CAAM,kBAAA;AAAA,IACrB,GAAI,wBAAwB,MAAA,GACxB,EAAE,CAAC,mCAAmC,GAAG,mBAAA,EAAoB,GAC7D,EAAC;AAAA,IACL;AAAA,GACF;AACF;;;AC5DO,IAAM,0BAAA,GAA6B;AAAA,EACxC,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF;AAEO,IAAM,2BAAA,GAA8B;AC1H3C,SAAS,UAAA,CACP,IAAA,EACA,OAAA,EACA,QAAA,GAAwC,SACxC,MAAA,EACiB;AACjB,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAO,GAAI,EAAC,EAAG;AAChF;AAEA,SAAS,QAAA,CAAS,OAAgB,KAAA,EAAmC;AACnE,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AACpD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,4BAAA,CAA8B,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,MAAM,IAAA,EAAK;AACpB;AAEA,SAAS,aAAA,CAAc,OAAgB,KAAA,EAAqC;AAC1E,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,OAAO,IAAA,KAAS,QAAQ,CAAA,EAAG;AAC3E,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,6BAAA,CAA+B,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,OAAgB,KAAA,EAAmC;AAC3E,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,CAAC,OAAO,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,EAAG;AACrE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,+BAAA,CAAiC,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAA,CACP,OACA,KAAA,EACkE;AAClE,EAAA,MAAM,cAAiC,EAAC;AACxC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,WAAA,CAAY,IAAA;AAAA,MACV,UAAA,CAAW,yBAAA,EAA2B,CAAA,MAAA,EAAS,KAAK,CAAA,oBAAA,CAAsB;AAAA,KAC5E;AACA,IAAA,OAAO,EAAE,WAAA,EAAY;AAAA,EACvB;AAEA,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,IAAI;AACF,IAAA,MAAM,KAAK,QAAA,CAAS,GAAA,CAAI,EAAA,EAAI,CAAA,MAAA,EAAS,KAAK,CAAA,IAAA,CAAM,CAAA;AAChD,IAAA,IAAI,OAAO,KAAA,CAAA,EAAW;AACpB,MAAA,WAAA,CAAY,IAAA;AAAA,QACV,UAAA,CAAW,yBAAA,EAA2B,CAAA,MAAA,EAAS,KAAK,CAAA,iBAAA,CAAmB;AAAA,OACzE;AACA,MAAA,OAAO,EAAE,WAAA,EAAY;AAAA,IACvB;AAEA,IAAA,MAAM,QAAQ,QAAA,CAAS,GAAA,CAAI,KAAA,EAAO,CAAA,MAAA,EAAS,KAAK,CAAA,OAAA,CAAS,CAAA;AACzD,IAAA,MAAM,QAAQ,QAAA,CAAS,GAAA,CAAI,KAAA,EAAO,CAAA,MAAA,EAAS,KAAK,CAAA,OAAA,CAAS,CAAA;AACzD,IAAA,MAAM,QAAQ,QAAA,CAAS,GAAA,CAAI,KAAA,EAAO,CAAA,MAAA,EAAS,KAAK,CAAA,OAAA,CAAS,CAAA;AAEzD,IAAA,OAAO;AAAA,MACL,UAAA,EAAY;AAAA,QACV,EAAA;AAAA,QACA,GAAI,KAAA,KAAU,KAAA,CAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,QACvC,GAAI,KAAA,KAAU,KAAA,CAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,QACvC,GAAI,KAAA,KAAU,KAAA,CAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,QACvC,GAAI,aAAA,CAAc,GAAA,CAAI,cAAc,CAAA,MAAA,EAAS,KAAK,gBAAgB,CAAA,KAAM,KAAA,CAAA,GACpE,EAAE,YAAA,EAAc,aAAA,CAAc,IAAI,YAAA,EAAc,CAAA,MAAA,EAAS,KAAK,CAAA,cAAA,CAAgB,CAAA,KAC9E,EAAC;AAAA,QACL,GAAI,aAAA,CAAc,GAAA,CAAI,aAAa,CAAA,MAAA,EAAS,KAAK,eAAe,CAAA,KAAM,KAAA,CAAA,GAClE,EAAE,WAAA,EAAa,aAAA,CAAc,IAAI,WAAA,EAAa,CAAA,MAAA,EAAS,KAAK,CAAA,aAAA,CAAe,CAAA,KAC3E,EAAC;AAAA,QACL,GAAI,iBAAiB,GAAA,CAAI,aAAA,EAAe,SAAS,KAAK,CAAA,eAAA,CAAiB,MAAM,KAAA,CAAA,GACzE;AAAA,UACE,aAAA,EAAe,gBAAA;AAAA,YACb,GAAA,CAAI,aAAA;AAAA,YACJ,SAAS,KAAK,CAAA,eAAA;AAAA;AAChB,YAEF,EAAC;AAAA,QACL,GAAI,aAAA;AAAA,UACF,GAAA,CAAI,oBAAA;AAAA,UACJ,SAAS,KAAK,CAAA,sBAAA;AAAA,cACV,KAAA,CAAA,GACF;AAAA,UACE,oBAAA,EAAsB,aAAA;AAAA,YACpB,GAAA,CAAI,oBAAA;AAAA,YACJ,SAAS,KAAK,CAAA,sBAAA;AAAA;AAChB,YAEF;AAAC,OACP;AAAA,MACA;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,WAAA,CAAY,IAAA,CAAK,UAAA,CAAW,yBAAA,EAA2B,OAAO,CAAC,CAAA;AAC/D,IAAA,OAAO,EAAE,WAAA,EAAY;AAAA,EACvB;AACF;AAEO,SAAS,qBAAqB,KAAA,EAA6B;AAChE,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AACtC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,MAAA,EAAQ,QAAQ,CAAA;AAC5C,EAAA,IAAI,IAAA,KAAS,MAAA,EAAW,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAC3D,EAAA,IAAI,MAAA,KAAW,MAAA,EAAW,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAE/D,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,IAAK,GAAA,CAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AACvD,IAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,QAA2B,EAAC;AAClC,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAA,EAAG;AACxD,IAAA,MAAM,EAAE,YAAY,WAAA,EAAY,GAAI,mBAAmB,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,EAAG,KAAK,CAAA;AAC9E,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IACpE;AACA,IAAA,IAAI,UAAA,KAAe,MAAA,EAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA;AAAA,EACrD;AAEA,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,EAAA,KAAA,MAAW,aAAa,KAAA,EAAO;AAC7B,IAAA,IAAI,GAAA,CAAI,GAAA,CAAI,SAAA,CAAU,EAAE,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAA,CAAU,EAAE,CAAA,EAAA,CAAI,CAAA;AAAA,IACxD;AACA,IAAA,GAAA,CAAI,GAAA,CAAI,UAAU,EAAE,CAAA;AAAA,EACtB;AAEA,EAAA,MAAM,gBAAA,GACJ,GAAA,CAAI,gBAAA,KAAqB,OAAA,IACzB,GAAA,CAAI,gBAAA,KAAqB,OAAA,IACzB,GAAA,CAAI,gBAAA,KAAqB,QAAA,GACrB,GAAA,CAAI,gBAAA,GACJ,MAAA;AACN,EAAA,IACE,GAAA,CAAI,gBAAA,KAAqB,MAAA,IACzB,gBAAA,KAAqB,MAAA,EACrB;AACA,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AAEA,EAAA,MAAM,MAAA,GAAsB,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAM;AAClD,EAAA,IAAI,GAAA,CAAI,WAAW,MAAA,EAAW;AAC5B,IAAA,IAAI,OAAO,IAAI,MAAA,KAAW,QAAA,IAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AAC/D,MAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,IAC7C;AACA,IAAA,MAAA,CAAO,SAAS,GAAA,CAAI,MAAA;AAAA,EACtB;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,MAAA,EAAW;AAC1B,IAAA,IAAI,OAAO,IAAI,IAAA,KAAS,QAAA,IAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC3D,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AACA,IAAA,MAAA,CAAO,OAAO,GAAA,CAAI,IAAA;AAAA,EACpB;AACA,EAAA,IAAI,GAAA,CAAI,cAAc,MAAA,EAAW;AAC/B,IAAA,IAAI,OAAO,IAAI,SAAA,KAAc,QAAA,IAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,EAAG;AACrE,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AACA,IAAA,MAAM,SAAA,GAAY,QAAA;AAAA,MACf,IAAI,SAAA,CAAsC,SAAA;AAAA,MAC3C;AAAA,KACF;AACA,IAAA,MAAA,CAAO,YAAY,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,EAChE;AACA,EAAA,IAAI,GAAA,CAAI,aAAa,MAAA,EAAW;AAC9B,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,UAAU,CAAA;AAClD,IAAA,IAAI,QAAA,KAAa,MAAA,EAAW,MAAA,CAAO,QAAA,GAAW,QAAA;AAAA,EAChD;AACA,EAAA,IAAI,GAAA,CAAI,cAAc,MAAA,EAAW;AAC/B,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,CAAI,SAAA,EAAW,WAAW,CAAA;AACrD,IAAA,IAAI,SAAA,KAAc,MAAA,EAAW,MAAA,CAAO,SAAA,GAAY,SAAA;AAAA,EAClD;AACA,EAAA,IAAI,gBAAA,KAAqB,MAAA,EAAW,MAAA,CAAO,gBAAA,GAAmB,gBAAA;AAC9D,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,mBAAA,CACpB,QACA,OAAA,EACoC;AACpC,EAAA,MAAM,cAAiC,EAAC;AACxC,EAAA,MAAM,YAAYD,KAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,OAAO,MAAM,CAAA;AAC/D,EAAA,IAAI;AACF,IAAA,MAAM,OAAO,SAAS,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,WAAA,CAAY,IAAA;AAAA,MACV,UAAA,CAAW,yBAAA,EAA2B,CAAA,4BAAA,EAA+B,SAAS,CAAA,CAAE;AAAA,KAClF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,SAAA,IAAa,OAAO,KAAA,EAAO;AACpC,IAAA,IAAI,SAAA,CAAU,UAAU,MAAA,EAAW;AACjC,MAAA,MAAM,YAAYA,KAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,UAAU,KAAK,CAAA;AACjE,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,SAAS,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AACN,QAAA,WAAA,CAAY,IAAA;AAAA,UACV,UAAA;AAAA,YACE,yBAAA;AAAA,YACA,CAAA,yBAAA,EAA4B,UAAU,KAAK,CAAA,CAAA;AAAA,YAC3C,SAAA;AAAA,YACA,SAAA,CAAU;AAAA;AACZ,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,EAAA,EAAI,WAAA,CAAY,KAAA,CAAM,CAAC,SAAS,IAAA,CAAK,QAAA,KAAa,OAAO,CAAA,EAAG,WAAA,EAAY;AACnF;;;AClNA,IAAM,iBAAA,uBAAwB,GAAA,CAAI,CAAC,SAAS,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAC,CAAA;AAClE,IAAM,uCAAuB,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAC,CAAA;AAE5D,SAASE,WAAAA,CACP,MACA,OAAA,EACiB;AACjB,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,OAAA,EAAQ;AAC5C;AAEA,eAAe,WAAW,QAAA,EAAoC;AAC5D,EAAA,IAAI;AACF,IAAA,MAAMC,OAAO,QAAQ,CAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,eAAsB,sBAAA,CACpB,OAAA,GAAkC,EAAC,EAClB;AACjB,EAAA,MAAM,MAAMH,KAAAA,CAAK,OAAA,CAAQ,QAAQ,GAAA,IAAO,OAAA,CAAQ,KAAK,CAAA;AACrD,EAAA,IAAI,QAAQ,UAAA,KAAe,MAAA,IAAa,QAAQ,UAAA,CAAW,IAAA,OAAW,EAAA,EAAI;AACxE,IAAA,OAAOA,MAAK,OAAA,CAAQ,GAAA,EAAK,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA;AAAA,EACpD;AAEA,EAAA,KAAA,MAAW,QAAQ,0BAAA,EAA4B;AAC7C,IAAA,MAAM,SAAA,GAAYA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AACrC,IAAA,IAAI,MAAM,UAAA,CAAW,SAAS,CAAA,EAAG,OAAO,SAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,qFAAA;AAAA,GACF;AACF;AAEA,eAAsB,eAAA,CACpB,OAAA,GAAkC,EAAC,EACsC;AACzE,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,MAAM,uBAAuB,OAAO,CAAA;AAAA,EACnD,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAAA,MACtC,WAAA,EAAa,CAACE,WAAAA,CAAW,6BAAA,EAA+B,OAAO,CAAC;AAAA,KACjE,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,SAAA,GAAYF,KAAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACzC,EAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,SAAS,CAAA,EAAG;AACvC,IAAA,MAAM,OAAA,GACJ,+GAAA;AACF,IAAA,MAAM,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAAA,MACtC,WAAA,EAAa,CAACE,WAAAA,CAAW,6BAAA,EAA+B,OAAO,CAAC;AAAA,KACjE,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,SAAS,CAAA,EAAG;AACrC,IAAA,MAAM,OAAA,GAAU,oEAAA;AAChB,IAAA,MAAM,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAAA,MACtC,WAAA,EAAa,CAACA,WAAAA,CAAW,6BAAA,EAA+B,OAAO,CAAC;AAAA,KACjE,CAAA;AAAA,EACH;AAEA,EAAA,IAAI;AACF,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,cAAc,OAAA,EAAS;AACzB,MAAA,GAAA,GAAM,KAAK,KAAA,CAAM,MAAME,QAAAA,CAAS,UAAA,EAAY,OAAO,CAAC,CAAA;AAAA,IACtD,CAAA,MAAO;AACL,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,aAAA,CAAc,UAAU,CAAA,CAAE,IAAA,CAAA;AACnD,MAAA,GAAA,GAAM,SAAA,IAAa,GAAA,GAAM,GAAA,CAAI,OAAA,GAAU,GAAA;AAAA,IACzC;AACA,IAAA,MAAM,MAAA,GAAS,qBAAqB,GAAG,CAAA;AACvC,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAWJ,KAAAA,CAAK,OAAA,CAAQ,UAAU;AAAA,KACpC;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAAA,MACtC,WAAA,EAAa,CAACE,WAAAA,CAAW,6BAAA,EAA+B,OAAO,CAAC;AAAA,KACjE,CAAA;AAAA,EACH;AACF;AAEO,SAAS,0BAAA,GAA0C;AACxD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,MAAA,EAAQ,kBAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL;AAAA,QACE,EAAA,EAAI,cAAA;AAAA,QACJ,KAAA,EAAO,aAAA;AAAA,QACP,YAAA,EAAc,CAAC,YAAY,CAAA;AAAA,QAC3B,aAAA,EAAe,GAAA;AAAA,QACf,oBAAA,EAAsB,CAAC,aAAa;AAAA;AACtC,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,CAAC,YAAY;AAAA,KACvB;AAAA,IACA,gBAAA,EAAkB,OAAA;AAAA,IAClB,SAAA,EAAW;AAAA,MACT,SAAA,EAAW;AAAA;AACb,GACF;AACF;AC1GA,eAAe,OAAO,QAAA,EAAoC;AACxD,EAAA,IAAI;AACF,IAAA,MAAMC,OAAO,QAAQ,CAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,eAAsB,qBAAA,CACpB,WACA,OAAA,EAC4B;AAC5B,EAAA,IAAI,SAAA,CAAU,UAAU,MAAA,EAAW;AACjC,IAAA,MAAM,YAAYH,KAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAW,UAAU,KAAK,CAAA;AACjE,IAAA,IAAI,MAAM,MAAA,CAAO,SAAS,CAAA,EAAG;AAC3B,MAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,CAAU,EAAA,EAAI,SAAA,EAAW,SAAS,KAAA,EAAM;AAAA,IAC3D;AACA,IAAA,OAAO;AAAA,MACL,QAAQ,SAAA,CAAU,EAAA;AAAA,MAClB,SAAA;AAAA,MACA,OAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAQ,CAAA,sBAAA,EAAyB,SAAA,CAAU,KAAK,CAAA;AAAA,KAClD;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,IAAS,SAAA,CAAU,EAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,MAAA,EAAQ,OAAA,CAAQ,SAAS,CAAA;AAC7D,EAAA,IAAI,MAAM,MAAA,CAAO,UAAU,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAE,QAAQ,SAAA,CAAU,EAAA,EAAI,WAAW,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM;AAAA,EACtF;AAEA,EAAA,MAAM,UAAA,GAAaA,KAAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,GAAGA,KAAAA,CAAK,QAAA,CAAS,MAAM,CAAC,CAAA,MAAA,CAAQ,CAAA;AAChF,EAAA,IAAI,MAAM,MAAA,CAAO,UAAU,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAE,QAAQ,SAAA,CAAU,EAAA,EAAI,WAAW,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM;AAAA,EACtF;AAEA,EAAA,OAAO;AAAA,IACL,QAAQ,SAAA,CAAU,EAAA;AAAA,IAClB,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ,CAAA,2BAAA,EAA8B,MAAM,CAAA,QAAA,EAAW,QAAQ,SAAS,CAAA;AAAA,GAC1E;AACF;AChCA,SAASE,WAAAA,CACP,IAAA,EACA,OAAA,EACA,QAAA,GAAwC,SACxC,MAAA,EACiB;AACjB,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAO,GAAI,EAAC,EAAG;AAChF;AAEA,SAAS,cAAA,CACP,WACA,MAAA,EAC+C;AAC/C,EAAA,MAAM,QAA0B,EAAC;AACjC,EAAA,MAAM,SAAS,IAAI,GAAA,CAAY,OAAO,MAAA,EAAQ,MAAA,IAAU,EAAE,CAAA;AAE1D,EAAA,IAAI,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,IAAA,CAAK,qBAAqB,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,GAAI,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAM,YAAY,EAAC;AAAA,IACtC,GAAI,SAAA,CAAU,YAAA,IAAgB;AAAC,GACjC;AACA,EAAA,MAAM,cAAA,GAAiB;AAAA,IACrB,GAAI,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAM,aAAa,EAAC;AAAA,IACvC,GAAI,SAAA,CAAU,WAAA,IAAe;AAAC,GAChC;AACA,EAAA,IAAI,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,cAAA,CAAe,SAAS,CAAA,EAAG;AACzD,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,mBAAA,CAAoB;AAAA,QAClB,QAAA,EAAU,aAAA,CAAc,MAAA,GAAS,CAAA,GAAI,aAAA,GAAgB,MAAA;AAAA,QACrD,SAAA,EAAW,cAAA,CAAe,MAAA,GAAS,CAAA,GAAI,cAAA,GAAiB;AAAA,OACzD;AAAA,KACH;AACA,IAAA,MAAA,CAAO,IAAI,YAAY,CAAA;AAAA,EACzB;AAEA,EAAA,MAAM,aAAA,GACJ,UAAU,aAAA,IACV,MAAA,CAAO,QAAQ,GAAA,EAAK,aAAA,IACpB,OAAO,IAAA,EAAM,aAAA;AACf,EAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,IAAA,KAAA,CAAM,IAAA,CAAK,qBAAA,CAAsB,EAAE,aAAA,EAAe,CAAC,CAAA;AACnD,IAAA,MAAA,CAAO,IAAI,cAAc,CAAA;AAAA,EAC3B;AAEA,EAAA,MAAM,GAAA,GAAM,OAAO,MAAA,EAAQ,GAAA;AAC3B,EAAA,IAAI,GAAA,EAAK,aAAA,KAAkB,MAAA,IAAa,GAAA,EAAK,mBAAmB,MAAA,EAAW;AACzE,IAAA,KAAA,CAAM,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAC,CAAA;AAClC,IAAA,MAAA,CAAO,IAAI,WAAW,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,MAAA,CAAO,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK,0BAA0B,EAAE,MAAA,EAAQ,CAAC,QAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAC,GAAG,MAAM,CAAA,EAAE;AACtC;AAEA,SAAS,iBAAiB,IAAA,EAAuB;AAC/C,EAAA,MAAM,iBAAA,GAAoB,kCAAA;AAAA,IACxB,KAAK,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,SAAS;AAAA,GACxD;AACA,EAAA,IAAI,iBAAA,CAAkB,MAAA,GAAS,CAAA,EAAG,OAAO,iBAAA;AAEzC,EAAA,MAAM,cAA4B,EAAC;AACnC,EAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAQ;AAC/B,IAAA,MAAM,MAAA,GAAS,KAAA;AACf,IAAA,IACE,OAAO,WAAW,QAAA,IAClB,MAAA,KAAW,QACX,OAAA,IAAW,MAAA,IACX,MAAA,CAAO,KAAA,KAAU,kBAAA,EACjB;AACA,MAAA,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,IACzB;AAAA,EACF;AACA,EAAA,OAAO,YAAY,MAAA,GAAS,CAAA,GAAI,8BAAA,CAA+B,WAAW,IAAI,EAAC;AACjF;AAEA,SAAS,4BAAA,CACP,WACA,IAAA,EACiD;AACjD,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,oBAAA,IAAwB,EAAC;AACpD,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAA,EAAa,EAAC,EAAE;AAE9D,EAAA,MAAM,QAAA,GAAW,iBAAiB,IAAI,CAAA;AAEtC,EAAA,MAAM,cAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,QAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,IAAI,CAAA;AAC9D,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,WAAA,CAAY,IAAA;AAAA,QACVA,WAAAA;AAAA,UACE,kCAAA;AAAA,UACA,yBAAyB,IAAI,CAAA,mBAAA,CAAA;AAAA,UAC7B,OAAA;AAAA,UACA,SAAA,CAAU;AAAA;AACZ,OACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,QAAA,EAAU;AAC7B,MAAA,WAAA,CAAY,IAAA;AAAA,QACVA,WAAAA;AAAA,UACE,kCAAA;AAAA,UACA,CAAA,aAAA,EAAgB,IAAI,CAAA,cAAA,EAAiB,KAAA,CAAM,MAAM,CAAA,qBAAA,CAAA;AAAA,UACjD,OAAA;AAAA,UACA,SAAA,CAAU;AAAA;AACZ,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,EAAA,EAAI,WAAA,CAAY,MAAA,KAAW,GAAG,WAAA,EAAY;AACrD;AAEA,eAAe,YAAA,CACb,SAAA,EACA,MAAA,EACA,OAAA,EAC0B;AAC1B,EAAA,MAAM,QAAA,GAAW,MAAM,qBAAA,CAAsB,SAAA,EAAW,OAAO,CAAA;AAC/D,EAAA,IAAI,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,SAAA,KAAc,MAAA,EAAW;AACxD,IAAA,OAAO;AAAA,MACL,IAAI,SAAA,CAAU,EAAA;AAAA,MACd,MAAA,EAAQ,SAAA;AAAA,MACR,GAAI,SAAS,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,QAAA,CAAS,KAAA,EAAM,GAAI,EAAC;AAAA,MAChE,SAAS,QAAA,CAAS,MAAA;AAAA,MAClB,WAAA,EAAa;AAAA,QACXA,WAAAA;AAAA,UACE,6BAAA;AAAA,UACA,SAAS,MAAA,IAAU,kBAAA;AAAA,UACnB,SAAA;AAAA,UACA,SAAA,CAAU;AAAA;AACZ;AACF,KACF;AAAA,EACF;AAEA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,MAAM,UAAU,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,QAAA,CAAS,WAAW,CAAA;AAAA,EACnE,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO;AAAA,MACL,IAAI,SAAA,CAAU,EAAA;AAAA,MACd,MAAA,EAAQ,OAAA;AAAA,MACR,WAAW,QAAA,CAAS,SAAA;AAAA,MACpB,GAAI,SAAS,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,QAAA,CAAS,KAAA,EAAM,GAAI,EAAC;AAAA,MAChE,OAAA;AAAA,MACA,WAAA,EAAa;AAAA,QACXA,WAAAA,CAAW,2BAAA,EAA6B,OAAA,EAAS,OAAA,EAAS,UAAU,EAAE;AAAA;AACxE,KACF;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,cAAA,CAAe,WAAW,MAAM,CAAA;AAC1D,EAAA,MAAM,WAAA,GACJ,KAAA,CAAM,MAAA,GAAS,CAAA,GACX,cAAA,CAAe,EAAE,IAAA,EAAK,EAAG,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA,GAC1C;AAAA,IACE,EAAA,EAAI,IAAA;AAAA,IACJ,MAAA,EAAQ,MAAA;AAAA,IACR,QAAQ,IAAA,CAAK,MAAA;AAAA,IAEb,UAAU,EAAC;AAAA,IACX,aAAa,EAEf,CAAA;AACN,EAAA,MAAM,iBAAA,GAAoB,4BAAA,CAA6B,SAAA,EAAW,IAAI,CAAA;AAEtE,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAG,YAAY,WAAA,CAAY,GAAA;AAAA,MAAI,CAAC,IAAA,KAC9BA,WAAAA;AAAA,QACE,4BAAA;AAAA,QACA,IAAA,CAAK,OAAA;AAAA,QACL,IAAA,CAAK,QAAA;AAAA,QACL,SAAA,CAAU;AAAA;AACZ,KACF;AAAA,IACA,GAAG,YAAY,QAAA,CACZ,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,MAAA,KAAW,MAAM,CAAA,CAC7C,GAAA;AAAA,MAAI,CAAC,OAAA,KACJA,WAAAA;AAAA,QACE,4BAAA;AAAA,QACA,OAAA,CAAQ,OAAA;AAAA,QACR,OAAA,CAAQ,QAAA;AAAA,QACR,SAAA,CAAU;AAAA;AACZ,KACF;AAAA,IACF,GAAG,iBAAA,CAAkB;AAAA,GACvB;AAEA,EAAA,MAAM,UAAU,WAAA,CAAY,EAAA;AAC5B,EAAA,MAAM,iBAAiB,iBAAA,CAAkB,EAAA;AACzC,EAAA,MAAM,KAAK,OAAA,IAAW,cAAA;AACtB,EAAA,MAAM,SAAS,EAAA,GAAK,MAAA,GAAS,WAAA,CAAY,MAAA,KAAW,UAAU,OAAA,GAAU,MAAA;AAExE,EAAA,OAAO;AAAA,IACL,IAAI,SAAA,CAAU,EAAA;AAAA,IACd,MAAA;AAAA,IACA,WAAW,QAAA,CAAS,SAAA;AAAA,IACpB,GAAI,SAAS,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,QAAA,CAAS,KAAA,EAAM,GAAI,EAAC;AAAA,IAChE,OAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAI,EAAA,GACA,EAAC,GACD;AAAA,MACE,OAAA,EACE,YAAY,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,OAAO,EAAE,IAAA,CAAK,IAAI,KACjD,WAAA,CAAY,QAAA,CAAS,IAAI,CAAC,IAAA,KAAS,KAAK,OAAO,CAAA,CAAE,KAAK,IAAI;AAAA;AAC9D,GACN;AACF;AAEA,eAAsB,QAAA,CAAS,OAAA,GAA2B,EAAC,EAA4B;AACrF,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,IAAA,CAAK,GAAA,EAAK,CAAA,CAAE,WAAA,EAAY;AACpE,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,WAAU,GAAI,MAAM,gBAAgB,OAAO,CAAA;AACvE,EAAA,MAAM,SAAA,GAAYF,KAAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,OAAO,MAAM,CAAA;AAEvD,EAAA,MAAM,QAA2B,EAAC;AAClC,EAAA,MAAM,cAAiC,EAAC;AAExC,EAAA,KAAA,MAAW,SAAA,IAAa,OAAO,KAAA,EAAO;AACpC,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,MAAM,YAAA,CAAa,SAAA,EAAW,MAAA,EAAQ;AAAA,QACpC,SAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,MAAA,EAAQ,MAAM,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAAA,IACvD,MAAA,EAAQ,MAAM,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,MAAM,CAAA,CAAE,MAAA;AAAA,IACvD,MAAA,EAAQ,MAAM,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,OAAO,CAAA,CAAE,MAAA;AAAA,IACxD,OAAA,EAAS,MAAM,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,SAAS,CAAA,CAAE;AAAA,GAC7D;AAEA,EAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,IAAA,CAAK,GAAA,EAAK,CAAA,CAAE,WAAA,EAAY;AACrE,EAAA,MAAM,aAAa,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,OAAA,CAAQ,YAAY,KAAA,CAAM,MAAA;AACjE,EAAA,MAAM,KAAK,OAAA,CAAQ,MAAA,KAAW,KAAK,OAAA,CAAQ,MAAA,KAAW,KAAK,CAAC,UAAA;AAC5D,EAAA,MAAM,MAAA,GACJ,OAAA,CAAQ,MAAA,GAAS,CAAA,GACb,OAAA,GACA,UAAA,GACE,MAAA,GACA,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,CAAC,EAAA,GACrB,MAAA,GACA,MAAA;AAEV,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAW,MAAA,CAAO,IAAA;AAAA,IAClB,UAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;;;AClSA,SAAS,YAAY,MAAA,EAAwB;AAC3C,EAAA,OAAO,OAAO,WAAA,EAAY;AAC5B;AAEO,SAAS,0BAA0B,MAAA,EAAgC;AACxE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AACzC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,WAAA,CAAY,MAAA,CAAO,MAAM,CAAC,CAAA,EAAA,CAAI,CAAA;AACtD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,UAAU,CAAA,EAAA,CAAI,CAAA;AAC7C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,SAAS,CAAA,EAAA,CAAI,CAAA;AAC5C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AACzC,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAC3C,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAC/C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAC/C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAC/C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AACjD,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,EAAA,KAAA,MAAW,SAAA,IAAa,OAAO,KAAA,EAAO;AACpC,IAAA,KAAA,CAAM,IAAA,CAAK,OAAO,SAAA,CAAU,EAAE,WAAM,WAAA,CAAY,SAAA,CAAU,MAAM,CAAC,CAAA,CAAE,CAAA;AACnE,IAAA,IAAI,SAAA,CAAU,cAAc,MAAA,EAAW;AACrC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,SAAA,CAAU,SAAS,CAAA,EAAA,CAAI,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,SAAA,CAAU,UAAU,MAAA,EAAW;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,SAAA,CAAU,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,IAC5C;AACA,IAAA,IAAI,UAAU,OAAA,KAAY,MAAA,IAAa,UAAU,OAAA,CAAQ,IAAA,OAAW,EAAA,EAAI;AACtE,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,SAAA,CAAU,OAAO,CAAA,CAAE,CAAA;AAAA,IACrC;AACA,IAAA,IAAI,SAAA,CAAU,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACpC,MAAA,KAAA,MAAW,IAAA,IAAQ,UAAU,WAAA,EAAa;AACxC,QAAA,KAAA,CAAM,KAAK,CAAA,GAAA,EAAM,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MACnD;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,EAAQ;AAClC;AAEO,SAAS,iBAAA,CACd,MAAA,EACA,OAAA,GAAoC,EAAC,EAC7B;AACR,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,UAAA;AACjC,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,0BAA0B,MAAM,CAAA;AACzC;;;ACnDO,IAAM,kBAAA,GAAqB;AAAA,EAChC,wBAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;AAIA,SAAS,YAAA,CAAa,MAAc,KAAA,EAA0C;AAC5E,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,MAAA,EAAQ,kBAAA;AAAA,IACR,KAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,CAAC,YAAA,EAAc,gBAAgB,CAAA;AAAA,MACvC,GAAA,EAAK,EAAE,aAAA,EAAe,GAAA;AAAO,KAC/B;AAAA,IACA,gBAAA,EAAkB,OAAA;AAAA,IAClB,SAAA,EAAW,EAAE,SAAA,EAAW,2BAAA;AAA4B,GACtD;AACF;AAEA,IAAM,SAAA,GAAkD;AAAA,EACtD,wBAAA,EAA0B,aAAa,wBAAA,EAA0B;AAAA,IAC/D;AAAA,MACE,EAAA,EAAI,gBAAA;AAAA,MACJ,KAAA,EAAO,gBAAA;AAAA,MACP,YAAA,EAAc,CAAC,YAAY,CAAA;AAAA,MAC3B,WAAA,EAAa,CAAC,eAAe,CAAA;AAAA,MAC7B,oBAAA,EAAsB,CAAC,aAAa,CAAA;AAAA,MACpC,aAAA,EAAe;AAAA;AACjB,GACD,CAAA;AAAA,EACD,cAAA,EAAgB,aAAa,cAAA,EAAgB;AAAA,IAC3C;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAO,aAAA;AAAA,MACP,YAAA,EAAc,CAAC,YAAY,CAAA;AAAA,MAC3B,WAAA,EAAa,CAAC,eAAe,CAAA;AAAA,MAC7B,oBAAA,EAAsB,CAAC,aAAa,CAAA;AAAA,MACpC,aAAA,EAAe;AAAA;AACjB,GACD,CAAA;AAAA,EACD,iBAAA,EAAmB,aAAa,iBAAA,EAAmB;AAAA,IACjD;AAAA,MACE,EAAA,EAAI,eAAA;AAAA,MACJ,KAAA,EAAO,eAAA;AAAA,MACP,YAAA,EAAc,CAAC,eAAe,CAAA;AAAA,MAC9B,aAAA,EAAe;AAAA;AACjB,GACD,CAAA;AAAA,EACD,oBAAA,EAAsB,aAAa,oBAAA,EAAsB;AAAA,IACvD;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAO,aAAA;AAAA,MACP,YAAA,EAAc,CAAC,iBAAiB,CAAA;AAAA,MAChC,aAAA,EAAe;AAAA;AACjB,GACD,CAAA;AAAA,EACD,gBAAA,EAAkB,aAAa,gBAAA,EAAkB;AAAA,IAC/C;AAAA,MACE,EAAA,EAAI,UAAA;AAAA,MACJ,KAAA,EAAO,UAAA;AAAA,MACP,YAAA,EAAc,CAAC,gBAAgB,CAAA;AAAA,MAC/B,aAAA,EAAe;AAAA;AACjB,GACD,CAAA;AAAA,EACD,gBAAA,EAAkB,aAAa,gBAAA,EAAkB;AAAA,IAC/C;AAAA,MACE,EAAA,EAAI,kBAAA;AAAA,MACJ,KAAA,EAAO,kBAAA;AAAA,MACP,YAAA,EAAc,CAAC,SAAS,CAAA;AAAA,MACxB,aAAA,EAAe;AAAA;AACjB,GACD,CAAA;AAAA,EACD,kBAAA,EAAoB,aAAa,kBAAA,EAAoB;AAAA,IACnD;AAAA,MACE,EAAA,EAAI,YAAA;AAAA,MACJ,KAAA,EAAO,YAAA;AAAA,MACP,YAAA,EAAc,CAAC,UAAA,EAAY,QAAQ,CAAA;AAAA,MACnC,oBAAA,EAAsB,CAAC,eAAe,CAAA;AAAA,MACtC,aAAA,EAAe;AAAA;AACjB,GACD,CAAA;AAAA,EACD,sBAAA,EAAwB,aAAa,sBAAA,EAAwB;AAAA,IAC3D;AAAA,MACE,EAAA,EAAI,eAAA;AAAA,MACJ,KAAA,EAAO,eAAA;AAAA,MACP,oBAAA,EAAsB,CAAC,mBAAA,EAAqB,iBAAiB,CAAA;AAAA,MAC7D,aAAA,EAAe;AAAA;AACjB,GACD;AACH,CAAA;AAEO,SAAS,kBAAA,GAAwC;AACtD,EAAA,OAAO,CAAC,GAAG,kBAAkB,CAAA;AAC/B;AAEO,SAAS,iBAAiB,EAAA,EAAqC;AACpE,EAAA,IAAI,CAAE,kBAAA,CAAyC,QAAA,CAAS,EAAE,GAAG,OAAO,MAAA;AACpE,EAAA,OAAO,eAAA,CAAgB,SAAA,CAAU,EAAqB,CAAC,CAAA;AACzD;AAEO,SAAS,qBAAqB,EAAA,EAAyB;AAC5D,EAAA,MAAM,QAAA,GAAW,iBAAiB,EAAE,CAAA;AACpC,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,2BAA2B,EAAE,CAAA,cAAA,EAAiB,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC7E;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;;;ACvGO,IAAM,iBAAA,GAA+C;AAAA,EAC1D,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;;;ACrBA,SAAS,cACP,MAAA,EACA,KAAA,EACA,UACA,SAAA,EACA,aAAA,GAAgB,MAChB,gBAAA,EACoC;AACpC,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,SAAA,KAAc,MAAA,EAAW,OAAO,MAAA;AAC9D,EAAA,MAAM,QACJ,QAAA,KAAa,MAAA,IAAa,SAAA,KAAc,MAAA,GACpC,YAAY,QAAA,GACZ,MAAA;AACN,EAAA,IAAI,UAAA,GACF,UAAU,MAAA,KACR,aAAA,IAAiB,QAAQ,CAAA,IAAO,CAAC,iBAAiB,KAAA,GAAQ,CAAA,CAAA;AAC9D,EAAA,IACE,UAAA,IACA,qBAAqB,MAAA,IACrB,QAAA,KAAa,UACb,QAAA,KAAa,CAAA,IACb,UAAU,MAAA,EACV;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,KAAA,GAAQ,QAAQ,CAAA;AAC1C,IAAA,IAAI,QAAA,IAAY,kBAAkB,UAAA,GAAa,KAAA;AAAA,EACjD;AACA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA,EAAS,CAAA,EAAG,KAAK,CAAA,WAAA,EAAc,YAAY,KAAK,CAAA,WAAA,EAAc,SAAA,IAAa,KAAK,GAC9E,KAAA,KAAU,MAAA,GAAY,CAAA,QAAA,EAAW,KAAK,MAAM,EAC9C,CAAA;AAAA,GACF;AACF;AAEA,SAAS,aAAA,CACP,MAAA,EACA,WAAA,EACA,QAAA,EACoC;AACpC,EAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IACZ,CAAC,UACC,KAAA,CAAM,WAAA,KAAgB,gBACrB,QAAA,KAAa,MAAA,IAAa,MAAM,QAAA,KAAa,QAAA;AAAA,GAClD;AACF;AAEO,SAAS,uBAAA,CACd,QACA,OAAA,EAO0B;AAC1B,EAAA,MAAM,cAAc,aAAA,CAAc,MAAA,EAAQ,OAAA,CAAQ,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAC5E,EAAA,MAAM,eAAe,aAAA,CAAc,MAAA,EAAQ,OAAA,CAAQ,SAAA,EAAW,QAAQ,QAAQ,CAAA;AAC9E,EAAA,MAAM,cAAwC,EAAC;AAC/C,EAAA,MAAM,YAAY,OAAA,CAAQ,gBAAA;AAE1B,EAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,OAAA,EAAS;AACpC,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,WAAA,EAAa;AAChB,QAAA,MAAM,IAAA,GAAO,aAAA;AAAA,UACX,MAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA,EAAa,SAAA;AAAA,UACb,YAAA,EAAc,SAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,IAAA,GAAO,aAAA;AAAA,UACX,MAAA;AAAA,UACA,uBAAA;AAAA,UACA,WAAA,EAAa,aAAA;AAAA,UACb,YAAA,EAAc,aAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,cAAA,EAAgB;AACnB,QAAA,MAAM,IAAA,GAAO,aAAA;AAAA,UACX,MAAA;AAAA,UACA,mBAAA;AAAA,UACA,WAAA,EAAa,eAAA;AAAA,UACb,YAAA,EAAc,eAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,IAAA,GAAO,aAAA;AAAA,UACX,MAAA;AAAA,UACA,qBAAA;AAAA,UACA,WAAA,EAAa,aAAA;AAAA,UACb,YAAA,EAAc,aAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,IAAA,GAAO,aAAA;AAAA,UACX,MAAA;AAAA,UACA,iBAAA;AAAA,UACA,WAAA,EAAa,aAAA;AAAA,UACb,YAAA,EAAc,aAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,oBAAA,EAAsB;AACzB,QAAA,MAAM,IAAA,GAAO,aAAA;AAAA,UACX,MAAA;AAAA,UACA,0BAAA;AAAA,UACA,WAAA,EAAa,sBAAA;AAAA,UACb,YAAA,EAAc,sBAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,gBAAgB,WAAA,EAAa,kBAAA;AACnC,QAAA,MAAM,iBAAiB,YAAA,EAAc,kBAAA;AACrC,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,MAAA;AAAA,UACA,QAAA,EAAU,aAAA;AAAA,UACV,SAAA,EAAW,cAAA;AAAA,UACX,KAAA,EAAO,aAAA,KAAkB,cAAA,GAAiB,MAAA,GAAS,SAAA;AAAA,UACnD,YAAY,aAAA,KAAkB,cAAA;AAAA,UAC9B,SAAS,CAAA,sBAAA,EAAyB,aAAA,IAAiB,KAAK,CAAA,WAAA,EAAc,kBAAkB,KAAK,CAAA;AAAA,SAC9F,CAAA;AACD,QAAA;AAAA,MACF;AAAA,MACA,KAAK,cAAA,EAAgB;AACnB,QAAA,MAAM,gBAAgB,WAAA,EAAa,qBAAA;AACnC,QAAA,MAAM,iBAAiB,YAAA,EAAc,qBAAA;AACrC,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,MAAA;AAAA,UACA,QAAA,EAAU,aAAA;AAAA,UACV,SAAA,EAAW,cAAA;AAAA,UACX,KAAA,EAAO,aAAA,KAAkB,cAAA,GAAiB,MAAA,GAAS,SAAA;AAAA,UACnD,YAAY,aAAA,KAAkB,cAAA;AAAA,UAC9B,SAAS,CAAA,wBAAA,EAA2B,aAAA,IAAiB,KAAK,CAAA,WAAA,EAAc,kBAAkB,KAAK,CAAA;AAAA,SAChG,CAAA;AACD,QAAA;AAAA,MACF;AAAA,MACA,KAAK,kBAAA,EAAoB;AACvB,QAAA,MAAM,IAAA,GAAO,aAAA;AAAA,UACX,MAAA;AAAA,UACA,oBAAA;AAAA,UACA,WAAA,EAAa,oBAAA;AAAA,UACb,YAAA,EAAc,oBAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,kBAAA,EAAoB;AACvB,QAAA,MAAM,IAAA,GAAO,aAAA;AAAA,UACX,MAAA;AAAA,UACA,oBAAA;AAAA,UACA,WAAA,EAAa,oBAAA;AAAA,UACb,YAAA,EAAc,oBAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,kBAAA,EAAoB;AACvB,QAAA,MAAM,IAAA,GAAO,aAAA;AAAA,UACX,MAAA;AAAA,UACA,oBAAA;AAAA,UACA,WAAA,EAAa,oBAAA;AAAA,UACb,YAAA,EAAc,oBAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAEE;AACJ,EACF;AAEA,EAAA,OAAO,WAAA;AACT;;;AClNO,SAAS,sBAAsB,KAAA,EAAqC;AACzE,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,CAAM,MAAK,KAAM,EAAA,SAAW,EAAC;AACxD,EAAA,OAAO,MACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,EACzB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AACrC;AAEO,SAAS,iBAAiB,OAAA,EAG/B;AACA,EAAA,MAAM,GAAA,GAAA,CAAO,OAAA,IAAW,OAAA,EAAS,IAAA,EAAK;AACtC,EAAA,IAAI,GAAA,KAAQ,OAAA,EAAS,OAAO,EAAE,MAAM,OAAA,EAAQ;AAC5C,EAAA,IAAI,GAAA,KAAQ,SAAA,EAAW,OAAO,EAAE,MAAM,SAAA,EAAU;AAChD,EAAA,IAAI,GAAA,KAAQ,OAAA,EAAS,OAAO,EAAE,MAAM,OAAA,EAAQ;AAC5C,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC/B,IAAA,MAAM,cAAc,GAAA,CAAI,KAAA,CAAM,WAAA,CAAY,MAAM,EAAE,IAAA,EAAK;AACvD,IAAA,IAAI,WAAA,KAAgB,EAAA,EAAI,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAC3E,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,WAAA,EAAY;AAAA,EACzC;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAE,CAAA;AACxD;AAEA,SAAS,cAAA,CACP,UACA,GAAA,EACoB;AACpB,EAAA,MAAM,KAAA,GAAQ,WAAW,GAAG,CAAA;AAC5B,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA,GAAK,KAAA,CAAM,IAAA,EAAK,GAAI,MAAA;AAC3E;AAEO,SAAS,kBAAA,CACd,KACA,OAAA,EACQ;AACR,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,QAAA,IAAY,EAAC;AAClC,EAAA,QAAQ,QAAQ,IAAA;AAAM,IACpB,KAAK,OAAA;AACH,MAAA,OAAO,cAAA,CAAe,QAAA,EAAU,OAAO,CAAA,IAAK,SAAA;AAAA,IAC9C,KAAK,SAAA;AACH,MAAA,OACE,+BAA+B,QAAQ,CAAA,EAAG,aAC1C,cAAA,CAAe,QAAA,EAAU,WAAW,CAAA,IACpC,cAAA;AAAA,IAEJ,KAAK,OAAA;AACH,MAAA,OACE,+BAA+B,QAAQ,CAAA,EAAG,WAC1C,cAAA,CAAe,QAAA,EAAU,SAAS,CAAA,IAClC,cAAA;AAAA,IAEJ,KAAK,UAAA;AACH,MAAA,OAAO,cAAA,CAAe,QAAA,EAAU,OAAA,CAAQ,WAAY,CAAA,IAAK,aAAA;AAAA,IAC3D;AACE,MAAA,OAAO,SAAA;AAAA;AAEb;AAEO,SAAS,kBAAA,CACd,GAAA,EACA,SAAA,EACA,QAAA,EACA,SAAA,EACoB;AACpB,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,GAAA,CAAI,QAAA,EAAU,SAAS,CAAA;AACpD,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,KAAA,KAAU,QAAA,EAAU,OAAO,QAAA;AACzD,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,KAAA,KAAU,SAAA,EAAW,OAAO,SAAA;AAC3D,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,SAAA,KAAc,MAAA,EAAW,OAAO,KAAA;AAC9D,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,mBAAA,CACd,MACA,OAAA,EAKkD;AAClD,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,MAAA,IAAa,OAAA,CAAQ,cAAc,MAAA,EAAW;AACrE,IAAA,OAAO,EAAE,IAAA,EAAM,CAAC,GAAG,IAAI,GAAG,QAAA,EAAS;AAAA,EACrC;AAEA,EAAA,MAAM,WAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,kBAAA;AAAA,MACZ,GAAA;AAAA,MACA,OAAA,CAAQ,SAAA;AAAA,MACR,OAAA,CAAQ,QAAA;AAAA,MACR,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAAA,EAC5C;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,CAAA,sDAAA,EAAyD,QAAQ,SAAS,CAAA,CAAA;AAAA,KAC5E;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAS;AACpC;;;ACrGA,SAAS,SAAS,KAAA,EAAoC;AACpD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,MAAA;AACvE;AAEA,SAAS,UAAU,MAAA,EAA0E;AAC3F,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAM,SAAS,CAAC,GAAG,MAAM,CAAA,CACtB,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,UAAU,cAAc,CAAA,CAChD,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AAC3C,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAA,GAAO,KAAA;AACb,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAA,GACJ,OAAO,IAAA,CAAK,QAAA,EAAU,aAAa,QAAA,GAC/B,IAAA,CAAK,QAAA,CAAS,QAAA,GACd,IAAA,CAAK,IAAA;AACX,IAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAClB,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,EAClB;AACA,EAAA,OAAO,EAAE,SAAS,CAAC,GAAG,OAAO,CAAA,CAAE,IAAA,IAAQ,QAAA,EAAS;AAClD;AAEA,eAAsB,wBAAwB,KAAA,EAQhB;AAC5B,EAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB,KAAA,CAAM,QAAQ,CAAA;AAC3D,EAAA,MAAM,OAAA,GAAU,gBAAgB,MAAM,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,UAAU,MAAM,CAAA;AAC9B,EAAA,MAAM,QAAA,GAAW,+BAA+B,MAAM,CAAA;AACtD,EAAA,MAAM,mBAAA,GAAsB,SAAS,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AAEhF,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,EAAC;AACpC,EAAA,MAAM,UAAA,GACJ,SAAS,QAAA,CAAS,OAAO,MAAM,MAAA,IAAa,QAAA,CAAS,SAAS,OAAO,CAAA,GAAK,IACtE,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,GAAK,CAAA,GAC9B,OAAO,QAAA,CAAS,OAAA,KAAY,WAC1B,CAAA,GACA,CAAA;AAER,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,GAAI,MAAM,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,KAAA,CAAM,WAAA,EAAY,GAAI,EAAC;AAAA,IAC5E,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,KAAA,EAAO,QAAQ,MAAA,KAAW,OAAA;AAAA,IAC1B,UAAA,EAAY,OAAA,CAAQ,UAAA,IAAc,KAAA,CAAM,UAAA;AAAA,IACxC,cAAc,OAAA,CAAQ,QAAA;AAAA,IACtB,eAAA,EAAiB,QAAQ,WAAA,EAAa,KAAA;AAAA,IACtC,UAAA;AAAA,IACA,mBAAA;AAAA,IACA,iBAAA,EAAmB,QAAA,CAAS,QAAA,CAAS,iBAAiB,CAAA,IAAK,CAAA;AAAA,IAC3D,iBAAA,EAAmB,QAAA,CAAS,QAAA,CAAS,iBAAiB,CAAA,IAAK,CAAA;AAAA,IAC3D,iBAAA,EAAmB,QAAA,CAAS,QAAA,CAAS,iBAAiB,CAAA,IAAK,CAAA;AAAA,IAC3D,aAAa,KAAA,CAAM,OAAA;AAAA,IACnB,cAAc,KAAA,CAAM;AAAA,GACtB;AACF;AAEA,SAAS,UAAA,CAAW,QAAkB,CAAA,EAA+B;AACnE,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAChC,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC/C,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AAAA,IACf,OAAO,MAAA,GAAS,CAAA;AAAA,IAChB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAM,IAAI,GAAA,GAAO,MAAA,CAAO,MAAM,CAAA,GAAI,CAAC;AAAA,GACtD;AACA,EAAA,OAAO,OAAO,GAAG,CAAA;AACnB;AAEA,SAAS,mBAAmB,IAAA,EAAuD;AACjF,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA;AAC1C,IAAA,IAAI,cAAc,EAAA,EAAI;AACtB,IAAA,MAAA,CAAO,IAAI,SAAA,EAAA,CAAY,MAAA,CAAO,IAAI,SAAS,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,EAAQ;AACjC,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,GAAO,GAAA;AACP,MAAA,SAAA,GAAY,KAAA;AAAA,IACd;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAkB,IAAA,EAAuD;AAChF,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,GAAG,CAAA;AAC3C,IAAA,IAAI,cAAc,EAAA,EAAI;AACtB,IAAA,MAAA,CAAO,IAAI,SAAA,EAAA,CAAY,MAAA,CAAO,IAAI,SAAS,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,EAAQ;AACjC,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,GAAO,GAAA;AACP,MAAA,SAAA,GAAY,KAAA;AAAA,IACd;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,sBAAA,CACd,IAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,MAAM,SAAA,GAAY,IAAA,CACf,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,CAAA,CAC3B,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAO,UAAU,QAAQ,CAAA;AAC/D,EAAA,MAAM,WAAA,GAAc,IAAA,CACjB,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,eAAe,CAAA,CAChC,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAO,UAAU,QAAQ,CAAA;AAC/D,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,MAAA;AAC/C,EAAA,MAAM,mBAAA,GAAsB,KAAK,MAAA,CAAO,CAAC,KAAK,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAI,mBAAA,EAAqB,CAAC,CAAA;AAEtF,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,KAAgB,EAAC;AAAA,IACnD,UAAU,IAAA,CAAK,MAAA;AAAA,IACf,WAAW,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,KAAK,MAAA,GAAS,CAAA;AAAA,IACpD,aAAA,EACE,SAAA,CAAU,MAAA,GAAS,CAAA,GACf,UAAU,MAAA,CAAO,CAAC,GAAA,EAAK,KAAA,KAAU,GAAA,GAAM,KAAA,EAAO,CAAC,CAAA,GAAI,UAAU,MAAA,GAC7D,MAAA;AAAA,IACN,aAAA,EAAe,UAAA,CAAW,SAAA,EAAW,EAAE,CAAA;AAAA,IACvC,eAAA,EACE,IAAA,CAAK,MAAA,GAAS,CAAA,GACV,KAAK,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ,MAAM,GAAA,CAAI,YAAA,EAAc,CAAC,CAAA,GAAI,KAAK,MAAA,GAC5D,CAAA;AAAA,IACN,aAAA,EACE,WAAA,CAAY,MAAA,GAAS,CAAA,GACjB,YAAY,MAAA,CAAO,CAAC,GAAA,EAAK,KAAA,KAAU,GAAA,GAAM,KAAA,EAAO,CAAC,CAAA,GAAI,YAAY,MAAA,GACjE,MAAA;AAAA,IACN,aAAA,EACE,IAAA,CAAK,MAAA,GAAS,CAAA,GACV,KAAK,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ,MAAM,GAAA,CAAI,UAAA,EAAY,CAAC,CAAA,GAAI,KAAK,MAAA,GAC1D,CAAA;AAAA,IACN,wBACE,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,mBAAA,GAAsB,KAAK,MAAA,GAAS,CAAA;AAAA,IACxD,oBAAA,EACE,IAAA,CAAK,MAAA,GAAS,CAAA,GACV,KAAK,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ,MAAM,GAAA,CAAI,iBAAA,EAAmB,CAAC,CAAA,GAAI,KAAK,MAAA,GACjE,CAAA;AAAA,IACN,oBAAA,EACE,IAAA,CAAK,MAAA,GAAS,CAAA,GACV,KAAK,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ,MAAM,GAAA,CAAI,iBAAA,EAAmB,CAAC,CAAA,GAAI,KAAK,MAAA,GACjE,CAAA;AAAA,IACN,oBAAA,EACE,IAAA,CAAK,MAAA,GAAS,CAAA,GACV,KAAK,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ,MAAM,GAAA,CAAI,iBAAA,EAAmB,CAAC,CAAA,GAAI,KAAK,MAAA,GACjE,CAAA;AAAA,IACN,kBAAA,EAAoB,mBAAmB,IAAI,CAAA;AAAA,IAC3C,qBAAA,EAAuB,kBAAkB,IAAI;AAAA,GAC/C;AACF;;;ACzJA,IAAM,eAAA,GAAoC;AAAA,EACxC,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,iBAAiB,OAAA,EAAyD;AACjF,EAAA,IAAI,OAAA,KAAY,UAAa,OAAA,CAAQ,MAAA,KAAW,GAAG,OAAO,CAAC,GAAG,eAAe,CAAA;AAC7E,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,iBAAiB,CAAA;AACzC,EAAA,OAAO,QAAQ,MAAA,CAAO,CAAC,WAAW,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAC,CAAA;AACvD;AAEA,eAAsB,aAAA,CACpB,WACA,OAAA,EAC+B;AAC/B,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,QAAA;AACvC,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,OAAA,CAAQ,OAAO,CAAA;AACpD,EAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,OAAA,CAAQ,OAAO,CAAA;AAChD,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAc,QAAA,EAAS,GAAI,oBAAoB,SAAA,EAAW;AAAA,IACtE,SAAA;AAAA,IACA,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,WAAW,OAAA,CAAQ;AAAA,GACpB,CAAA;AAED,EAAA,MAAM,aAAa,EAAC;AACpB,EAAA,KAAA,MAAW,OAAO,YAAA,EAAc;AAC9B,IAAA,IAAI,GAAA,CAAI,aAAa,MAAA,EAAW;AAChC,IAAA,MAAM,WAAA,GAAc,kBAAA;AAAA,MAClB,GAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA,CAAQ,QAAA;AAAA,MACR,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,MAAM,uBAAA,CAAwB;AAAA,QAC5B,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,UAAU,GAAA,CAAI,QAAA;AAAA,QACd,UAAU,GAAA,CAAI,QAAA;AAAA,QACd,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,YAAY,GAAA,CAAI,UAAA;AAAA,QAChB,QAAA,EAAU,kBAAA,CAAmB,GAAA,EAAK,WAAW,CAAA;AAAA,QAC7C;AAAA,OACD;AAAA,KACH;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,uBAAe,GAAA,EAA+B;AACpD,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,MAAM,CAAA,EAAG,GAAA,CAAI,eAAe,GAAG,CAAA,EAAA,EAAK,IAAI,QAAQ,CAAA,CAAA;AACtD,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,GAAG,KAAK,EAAC;AACrC,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AACf,IAAA,QAAA,CAAS,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,EAC1B;AAEA,EAAA,MAAM,SAAS,CAAC,GAAG,SAAS,OAAA,EAAS,EAClC,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,EAAE,aAAA,CAAc,CAAC,CAAC,CAAA,CACrC,GAAA;AAAA,IAAI,CAAC,GAAG,MAAM,CAAA,KACb,sBAAA;AAAA,MACE,MAAA;AAAA,MACA,MAAA,CAAO,CAAC,CAAA,CAAG,QAAA;AAAA,MACX,MAAA,CAAO,CAAC,CAAA,EAAG;AAAA;AACb,GACF;AAEF,EAAA,MAAM,cACJ,OAAA,CAAQ,QAAA,KAAa,UAAa,OAAA,CAAQ,SAAA,KAAc,UACnD,MAAM;AACL,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,GAAG,IAAI,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,QAAQ,CAAC;AAAA,KAClD,CAAE,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AACnC,IAAA,MAAM,QAAkC,EAAC;AACzC,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,EAAW,aAAA,IAAiB,CAAA;AACtD,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,gBAAgB,MAAA,CAAO,IAAA;AAAA,QAC3B,CAAC,KAAA,KAAU,KAAA,CAAM,aAAa,QAAA,IAAY,KAAA,CAAM,gBAAgB,OAAA,CAAQ;AAAA,OAC1E;AACA,MAAA,MAAM,iBAAiB,MAAA,CAAO,IAAA;AAAA,QAC5B,CAAC,KAAA,KAAU,KAAA,CAAM,aAAa,QAAA,IAAY,KAAA,CAAM,gBAAgB,OAAA,CAAQ;AAAA,OAC1E;AACA,MAAA,IACG,iBAAiB,aAAA,CAAc,QAAA,GAAW,aAC1C,cAAA,IAAkB,cAAA,CAAe,WAAW,SAAA,EAC7C;AACA,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,CAAA,8BAAA,EAAiC,QAAQ,CAAA,gBAAA,EAAmB,SAAS,CAAA,mBAAA;AAAA,SACvE;AACA,QAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,GAAG,wBAAwB,MAAA,EAAQ;AAAA,UACjC,UAAU,OAAA,CAAQ,QAAA;AAAA,UAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,OAAA;AAAA,UACA,QAAA;AAAA,UACA,gBAAA,EAAkB,QAAQ,SAAA,EAAW;AAAA,SACtC;AAAA,OACH;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,MACA,EAAC;AAEP,EAAA,MAAM,aAAa,WAAA,CAAY,IAAA,CAAK,CAAC,IAAA,KAAS,KAAK,UAAU,CAAA;AAE7D,EAAA,OAAO;AAAA,IACL,IAAI,CAAC,UAAA;AAAA,IACL,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,GAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS,GAAI,EAAC;AAAA,IACvE,GAAI,QAAQ,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,OAAA,CAAQ,SAAA,EAAU,GAAI,EAAC;AAAA,IAC1E,SAAA;AAAA,IACA,OAAA,EAAS,QAAQ,OAAA,IAAW,OAAA;AAAA,IAC5B,OAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA,EAAM,UAAA;AAAA,IACN;AAAA,GACF;AACF;;;ACrIA,SAAS,WAAW,KAAA,EAAmC;AACrD,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,KAAA;AAChC,EAAA,OAAO,CAAA,EAAA,CAAI,KAAA,GAAQ,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AACpC;AAEO,SAAS,4BAA4B,MAAA,EAAsC;AAChF,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,mBAAmB,CAAA;AAC9B,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,MAAA,CAAO,QAAQ,CAAA,EAAA,CAAI,CAAA;AACpD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,MAAA,CAAO,OAAO,CAAA,EAAA,CAAI,CAAA;AAC5C,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,MAAA,IAAa,MAAA,CAAO,cAAc,MAAA,EAAW;AACnE,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,0BAAA,EAA6B,OAAO,SAAS,CAAA,IAAA,EAAO,OAAO,QAAQ,CAAA,IAAA,EAAO,OAAO,SAAS,CAAA,CAAA;AAAA,KAC5F;AAAA,EACF;AACA,EAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,MAAA,CAAO,EAAA,GAAK,MAAA,GAAS,YAAY,CAAA,EAAA,CAAI,CAAA;AAC7D,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AACxB,IAAA,KAAA,MAAW,WAAW,MAAA,CAAO,QAAA,QAAgB,IAAA,CAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAChE,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,IAAA,EAAO,MAAM,WAAA,IAAe,KAAK,MAAM,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK,KAAA,CAAM,QAAQ,CAAA,MAAA;AAAA,KAC1E;AACA,IAAA,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,UAAA,CAAW,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,CAAA;AACzD,IAAA,IAAI,KAAA,CAAM,kBAAkB,MAAA,EAAW;AACrC,MAAA,KAAA,CAAM,KAAK,CAAA,gBAAA,EAAmB,IAAA,CAAK,MAAM,KAAA,CAAM,aAAa,CAAC,CAAA,GAAA,CAAK,CAAA;AAAA,IACpE;AACA,IAAA,IAAI,KAAA,CAAM,uBAAuB,MAAA,EAAW;AAC1C,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,KAAA,CAAM,kBAAkB,CAAA,CAAE,CAAA;AAAA,IAC5D;AACA,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,4BAAA,EAA+B,UAAA,CAAW,KAAA,CAAM,sBAAsB,CAAC,CAAA;AAAA,KACzE;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,KAAA,CAAM,KAAK,gBAAgB,CAAA;AAC3B,IAAA,KAAA,MAAW,UAAA,IAAc,OAAO,WAAA,EAAa;AAC3C,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,GAAa,iBAAA,GAAoB,EAAA;AACzD,MAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,UAAA,CAAW,OAAO,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAAA,IAC7C;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,EAAQ;AAClC;AAEO,SAAS,uBAAuB,MAAA,EAAsC;AAC3E,EAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CACjB,GAAA;AAAA,IACC,CAAC,KAAA,KACC,CAAA,QAAA,EAAW,UAAA,CAAW,MAAM,WAAA,IAAe,KAAK,CAAC,CAAA,SAAA,EAAY,UAAA,CAAW,KAAA,CAAM,QAAQ,CAAC,YAAY,KAAA,CAAM,QAAQ,CAAA,SAAA,EAAY,UAAA,CAAW,UAAA,CAAW,KAAA,CAAM,SAAS,CAAC,CAAC,CAAA,SAAA,EAAY,KAAA,CAAM,aAAA,KAAkB,MAAA,GAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,aAAa,IAAI,KAAK,CAAA,UAAA;AAAA,GAC/P,CACC,KAAK,EAAE,CAAA;AAEV,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,CACxB,GAAA;AAAA,IACC,CAAC,IAAA,KACC,CAAA,IAAA,EAAO,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,CAAA,EAAG,IAAA,CAAK,UAAA,GAAa,8BAAA,GAAiC,EAAE,CAAA,KAAA;AAAA,GAC3F,CACC,KAAK,EAAE,CAAA;AAEV,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAA,EAcc,MAAA,CAAO,EAAA,GAAK,MAAA,GAAS,YAAY,CAAA;AAAA,4BAAA,EAC1B,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA,WAAA,EAI5C,IAAI,CAAA;AAAA;AAAA,EAAA,EAEb,OAAO,WAAA,CAAY,MAAA,GAAS,IAAI,CAAA,wBAAA,EAA2B,WAAW,UAAU,EAAE;AAAA;AAAA,OAAA,CAAA;AAGtF;AAEO,SAAS,kBAAA,CACd,MAAA,EACA,OAAA,GAAqC,EAAC,EAC9B;AACR,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,UAAA;AACjC,EAAA,IAAI,WAAW,MAAA,EAAQ,OAAO,KAAK,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAC,CAAA;AAC5D,EAAA,IAAI,MAAA,KAAW,MAAA,EAAQ,OAAO,sBAAA,CAAuB,MAAM,CAAA;AAC3D,EAAA,OAAO,4BAA4B,MAAM,CAAA;AAC3C;;;AC3GO,SAAS,cAAc,KAAA,EAAqC;AACjE,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,CAAM,MAAK,KAAM,EAAA,SAAW,EAAC;AACxD,EAAA,OAAO,MACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,EACzB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AACrC;AAEO,SAAS,eAAA,CACd,KAAA,EACA,KAAA,EACA,OAAA,GAA0C,EAAC,EACvB;AACpB,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,CAAM,IAAA,EAAK,KAAM,IAAI,OAAO,MAAA;AACvD,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,KAAK,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,EAC9C;AACA,EAAA,IAAI,OAAA,CAAQ,GAAA,KAAQ,MAAA,IAAa,MAAA,GAAS,QAAQ,GAAA,EAAK;AACrD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,kBAAA,EAAqB,OAAA,CAAQ,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,EAC7D;AACA,EAAA,IAAI,OAAA,CAAQ,GAAA,KAAQ,MAAA,IAAa,MAAA,GAAS,QAAQ,GAAA,EAAK;AACrD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,iBAAA,EAAoB,OAAA,CAAQ,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,MAAA;AACT;;;ACnBA,SAASK,WAAAA,CAAW,QAAkB,CAAA,EAA+B;AACnE,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAChC,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC/C,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AAAA,IACf,OAAO,MAAA,GAAS,CAAA;AAAA,IAChB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAM,IAAI,GAAA,GAAO,MAAA,CAAO,MAAM,CAAA,GAAI,CAAC;AAAA,GACtD;AACA,EAAA,OAAO,OAAO,GAAG,CAAA;AACnB;AAEA,SAAS,cAAc,OAAA,EAAkC;AACvD,EAAA,OACE,OAAA,CAAQ,YAAA,KAAiB,MAAA,IACzB,OAAA,CAAQ,qBAAqB,MAAA,IAAA,CAC5B,OAAA,CAAQ,WAAA,EAAa,MAAA,IAAU,CAAA,IAAK,CAAA,IAAA,CACpC,OAAA,CAAQ,mBAAA,EAAqB,UAAU,CAAA,IAAK,CAAA;AAEjD;AAEO,SAAS,kBAAkB,OAAA,EAAkC;AAClE,EAAA,OAAO,cAAc,OAAO,CAAA;AAC9B;AAEA,eAAe,eAAe,IAAA,EAAmC;AAC/D,EAAA,MAAM,UAAU,EAAC;AACjB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,GAAA,CAAI,aAAa,MAAA,EAAW;AAChC,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,MAAM,uBAAA,CAAwB;AAAA,QAC5B,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,UAAU,GAAA,CAAI,QAAA;AAAA,QACd,UAAU,GAAA,CAAI,QAAA;AAAA,QACd,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,YAAY,GAAA,CAAI,UAAA;AAAA,QAChB,QAAA,EAAU;AAAA,OACX;AAAA,KACH;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,eAAe,iBAAA,CACb,UACA,IAAA,EAC0C;AAC1C,EAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB,QAAQ,CAAA;AACrD,EAAA,MAAM,QAAA,GAAW,+BAA+B,MAAM,CAAA;AACtD,EAAA,MAAM,QAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,IAAI,CAAA;AACxD,EAAA,IAAI,CAAC,OAAO,OAAO,SAAA;AACnB,EAAA,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,GAAW,QAAA,GAAW,QAAA;AAChD;AAEA,eAAsB,sBAAA,CACpB,MACA,OAAA,EAC8D;AAC9D,EAAA,MAAM,SAA4B,EAAC;AACnC,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,IAAI,CAAC,aAAA,CAAc,OAAO,CAAA,EAAG;AAC3B,IAAA,OAAO,EAAE,QAAQ,UAAA,EAAW;AAAA,EAC9B;AAEA,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,UAAA,CAAW,KAAK,4CAA4C,CAAA;AAC5D,IAAA,OAAO,EAAE,QAAQ,UAAA,EAAW;AAAA,EAC9B;AAEA,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,MAAM,eAAe,IAAI,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,UAAA,CAAW,KAAK,OAAO,CAAA;AACvB,IAAA,OAAO,EAAE,QAAQ,UAAA,EAAW;AAAA,EAC9B;AAEA,EAAA,IAAI,OAAA,CAAQ,iBAAiB,MAAA,EAAW;AACtC,IAAA,MAAM,SAAS,UAAA,CAAW,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,MAAA;AACrD,IAAA,MAAM,SAAS,UAAA,CAAW,MAAA,GAAS,IAAK,MAAA,GAAS,UAAA,CAAW,SAAU,GAAA,GAAM,CAAA;AAC5E,IAAA,MAAM,EAAA,GAAK,UAAU,OAAA,CAAQ,YAAA;AAC7B,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,EAAA,EAAI,cAAA;AAAA,MACJ,IAAA,EAAM,gBAAA;AAAA,MACN,EAAA;AAAA,MACA,UAAU,OAAA,CAAQ,YAAA;AAAA,MAClB,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,EAAE,CAAA,GAAI,EAAA;AAAA,MAClC,SAAS,EAAA,GACL,CAAA,WAAA,EAAc,OAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,eAAA,EAAkB,OAAA,CAAQ,YAAY,CAAA,CAAA,CAAA,GACrE,cAAc,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,gBAAA,EAAmB,QAAQ,YAAY,CAAA,CAAA;AAAA,KAC3E,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,OAAA,CAAQ,qBAAqB,MAAA,EAAW;AAC1C,IAAA,MAAM,SAAA,GAAY,UAAA,CACf,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,CAAA,CAC3B,MAAA,CAAO,CAAC,KAAA,KAA2B,OAAO,UAAU,QAAQ,CAAA;AAC/D,IAAA,MAAM,MAAA,GAASA,WAAAA,CAAW,SAAA,EAAW,EAAE,CAAA;AACvC,IAAA,MAAM,EAAA,GAAK,MAAA,KAAW,MAAA,IAAa,MAAA,IAAU,OAAA,CAAQ,gBAAA;AACrD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,EAAA,EAAI,gBAAA;AAAA,MACJ,IAAA,EAAM,uBAAA;AAAA,MACN,EAAA;AAAA,MACA,UAAU,OAAA,CAAQ,gBAAA;AAAA,MAClB,QAAQ,MAAA,IAAU,KAAA;AAAA,MAClB,OAAA,EACE,WAAW,MAAA,GACP,8CAAA,GACA,KACE,CAAA,aAAA,EAAgB,IAAA,CAAK,MAAM,MAAM,CAAC,oBAAoB,OAAA,CAAQ,gBAAgB,QAC9E,CAAA,aAAA,EAAgB,IAAA,CAAK,MAAM,MAAM,CAAC,CAAA,kBAAA,EAAqB,OAAA,CAAQ,gBAAgB,CAAA,GAAA;AAAA,KACxF,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,WAAA,IAAe,EAAC,EAAG;AAC5C,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,MAAM,IAAA,GACJ,IAAI,WAAA,CAAY,QAAA,CAAS,IAAI,CAAA,IAAK,GAAA,CAAI,YAAA,CAAa,QAAA,CAAS,IAAI,CAAA;AAClE,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,QAAA,GAAW,IAAA;AACX,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,EAAA,EAAI,YAAA;AAAA,UACJ,IAAA,EAAM,gBAAgB,IAAI,CAAA,CAAA;AAAA,UAC1B,EAAA,EAAI,KAAA;AAAA,UACJ,QAAA,EAAU,CAAA,QAAA,CAAA;AAAA,UACV,MAAA,EAAQ,MAAA;AAAA,UACR,OAAO,GAAA,CAAI,KAAA;AAAA,UACX,OAAA,EAAS,CAAA,gBAAA,EAAmB,IAAI,CAAA,cAAA,EAAiB,IAAI,KAAK,CAAA;AAAA,SAC3D,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,EAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,gBAAgB,IAAI,CAAA,CAAA;AAAA,QAC1B,EAAA,EAAI,IAAA;AAAA,QACJ,OAAA,EAAS,mBAAmB,IAAI,CAAA,UAAA;AAAA,OACjC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,WAAA,IAAe,OAAA,CAAQ,mBAAA,IAAuB,EAAC,EAAG;AAC3D,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,GAAA,CAAI,aAAa,MAAA,EAAW;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,GAAA,CAAI,UAAU,WAAW,CAAA;AAChE,QAAA,MAAM,KAAK,MAAA,KAAW,QAAA;AACtB,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,EAAA,EAAI,oBAAA;AAAA,UACJ,IAAA,EAAM,wBAAwB,WAAW,CAAA,CAAA;AAAA,UACzC,EAAA;AAAA,UACA,QAAA,EAAU,QAAA;AAAA,UACV,MAAA,EAAQ,MAAA;AAAA,UACR,OAAO,GAAA,CAAI,KAAA;AAAA,UACX,OAAA,EAAS,KACL,CAAA,aAAA,EAAgB,WAAW,mBAAmB,GAAA,CAAI,KAAK,KACvD,MAAA,KAAW,SAAA,GACT,gBAAgB,WAAW,CAAA,iBAAA,EAAoB,IAAI,KAAK,CAAA,CAAA,GACxD,gBAAgB,WAAW,CAAA,gBAAA,EAAmB,IAAI,KAAK,CAAA;AAAA,SAC9D,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,QAAA,UAAA,CAAW,KAAK,CAAA,IAAA,EAAO,GAAA,CAAI,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,QAAQ,UAAA,EAAW;AAC9B;AAEO,SAAS,sBACd,WAAA,EACmB;AACnB,EAAA,MAAM,MAAA,GAA4B;AAAA,IAChC;AAAA,MACE,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAM,CAAA,OAAA,EAAU,WAAA,CAAY,SAAS,CAAA,CAAA;AAAA,MACrC,IAAI,WAAA,CAAY,EAAA;AAAA,MAChB,OAAA,EAAS,WAAA,CAAY,EAAA,GACjB,CAAA,cAAA,EAAiB,YAAY,OAAA,CAAQ,MAAM,CAAA,OAAA,CAAA,GAC3C,CAAA,cAAA,EAAiB,YAAY,OAAA,CAAQ,MAAM,CAAA,SAAA,EAAY,WAAA,CAAY,QAAQ,MAAM,CAAA,QAAA;AAAA;AACvF,GACF;AAEA,EAAA,KAAA,MAAW,SAAA,IAAa,YAAY,KAAA,EAAO;AACzC,IAAA,IAAI,SAAA,CAAU,WAAW,MAAA,EAAQ;AACjC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAM,CAAA,MAAA,EAAS,SAAA,CAAU,EAAE,CAAA,CAAA;AAAA,MAC3B,EAAA,EAAI,KAAA;AAAA,MACJ,OAAA,EAAS,SAAA,CAAU,OAAA,IAAW,CAAA,aAAA,EAAgB,UAAU,MAAM,CAAA;AAAA,KAC/D,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,MAAA;AACT;ACpMA,SAAS,gBAAgB,KAAA,EAIR;AACf,EAAA,IAAI,KAAA,CAAM,aAAa,OAAO,CAAA;AAC9B,EAAA,IAAI,KAAA,CAAM,WAAW,OAAO,CAAA;AAC5B,EAAA,IAAI,CAAC,KAAA,CAAM,EAAA,EAAI,OAAO,CAAA;AACtB,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,gBAAgB,OAAA,EAAmC;AAC1D,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,WAAW,OAAA,CAAQ,SAAA,KAAc,UAAa,OAAA,CAAQ,SAAA,CAAU,MAAK,KAAM,EAAA;AACjF,EAAA,MAAMC,cAAAA,GAAgB,kBAAkB,OAAO,CAAA;AAE/C,EAAA,IAAI,CAAC,QAAA,IAAY,CAACA,cAAAA,EAAe;AAC/B,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAIA,cAAAA,KAAkB,QAAQ,QAAA,KAAa,MAAA,IAAa,QAAQ,QAAA,CAAS,IAAA,OAAW,EAAA,CAAA,EAAK;AACvF,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,KAAK,kDAAkD,CAAA;AAAA,IAChE;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,YAAA,KAAiB,MAAA,IAAa,OAAA,CAAQ,eAAe,CAAA,EAAG;AAClE,IAAA,MAAA,CAAO,KAAK,qDAAqD,CAAA;AAAA,EACnE;AACA,EAAA,IAAI,OAAA,CAAQ,YAAA,KAAiB,MAAA,IAAa,OAAA,CAAQ,eAAe,GAAA,EAAK;AACpE,IAAA,MAAA,CAAO,KAAK,uCAAuC,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,OAAA,CAAQ,gBAAA,KAAqB,MAAA,IAAa,OAAA,CAAQ,mBAAmB,CAAA,EAAG;AAC1E,IAAA,MAAA,CAAO,KAAK,8DAA8D,CAAA;AAAA,EAC5E;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAkB,KAAA,EAAyB;AAClD,EAAA,IAAI,EAAE,KAAA,YAAiB,KAAA,CAAA,EAAQ,OAAO,KAAA;AACtC,EAAA,MAAM,GAAA,GAAMN,KAAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA;AACtC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,oCAAoC,GAAG,OAAO,IAAA;AACzE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,kCAAkC,GAAG,OAAO,IAAA;AACvE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,uBAAuB,GAAG,OAAO,IAAA;AAC5D,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,iBAAiB,GAAG,OAAO,IAAA;AACtD,EAAA,IAAI,QAAQ,KAAA,IAAS,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,QAAQ,OAAO,IAAA;AAC9D,EAAA,OAAO,aAAA,IAAiB,KAAA;AAC1B;AAEA,eAAsB,OAAA,CACpB,MACA,OAAA,EACqB;AACrB,EAAA,MAAM,cAAwB,EAAC;AAC/B,EAAA,MAAM,SAA4B,EAAC;AAEnC,EAAA,MAAM,gBAAA,GAAmB,gBAAgB,OAAO,CAAA;AAChD,EAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,QAAA,EAAU,CAAA;AAAA,MACV,QAAA,EAAU,CAAA;AAAA,MACV,MAAA;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,GAAW,OAAA,CAAQ,QAAA,EAAU,IAAA,EAAK;AACtC,EAAA,IAAI,WAAA;AAEJ,EAAA,IAAI,QAAQ,SAAA,KAAc,MAAA,IAAa,QAAQ,SAAA,CAAU,IAAA,OAAW,EAAA,EAAI;AACtE,IAAA,IAAI;AACF,MAAA,WAAA,GAAc,MAAM,QAAA,CAAS;AAAA,QAC3B,YAAY,OAAA,CAAQ,SAAA;AAAA,QACpB,KAAK,OAAA,CAAQ;AAAA,OACd,CAAA;AACD,MAAA,QAAA,GAAW,YAAY,WAAA,CAAY,SAAA;AACnC,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,qBAAA,CAAsB,WAAW,CAAC,CAAA;AAAA,IACnD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AACxB,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAA,EAAU,iBAAA,CAAkB,KAAK,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,QACzC,QAAA;AAAA,QACA,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,QAAA,EAAU,CAAA;AAAA,QACV,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,iBAAA,CAAkB,OAAO,CAAA,EAAG;AAC9B,IAAA,MAAM,YAAA,GAAe,QAAA;AACrB,IAAA,IAAI,YAAA,KAAiB,MAAA,IAAa,YAAA,CAAa,IAAA,OAAW,EAAA,EAAI;AAC5D,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAA,EAAU,CAAA;AAAA,QACV,QAAA;AAAA,QACA,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,UAAU,IAAA,CAAK,MAAA;AAAA,QACf,MAAA;AAAA,QACA,WAAA,EAAa,CAAC,kDAAkD,CAAA;AAAA,QAChE,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,KAAgB;AAAC,OACrD;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,OAAO,EAAC;AAChD,IAAA,MAAM,EAAE,MAAA,EAAQ,eAAA,EAAiB,UAAA,KAAe,MAAM,sBAAA;AAAA,MACpD,aAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,eAAe,CAAA;AAC9B,IAAA,WAAA,CAAY,IAAA,CAAK,GAAG,UAAU,CAAA;AAE9B,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,MAAMO,GAAAA,GAAK,OAAO,MAAA,GAAS,CAAA,IAAK,OAAO,KAAA,CAAM,CAAC,IAAA,KAAS,IAAA,CAAK,EAAE,CAAA;AAC9D,MAAA,OAAO;AAAA,QACL,EAAA,EAAAA,GAAAA;AAAA,QACA,UAAU,eAAA,CAAgB;AAAA,UACxB,EAAA,EAAAA,GAAAA;AAAA,UACA,WAAA,EAAa,KAAA;AAAA,UACb,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,QACD,QAAA,EAAU,YAAA;AAAA,QACV,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,UAAU,aAAA,CAAc,MAAA;AAAA,QACxB,MAAA;AAAA,QACA,WAAA;AAAA,QACA,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,KAAgB;AAAC,OACrD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,EAAA,GAAK,OAAO,MAAA,GAAS,CAAA,IAAK,OAAO,KAAA,CAAM,CAAC,IAAA,KAAS,IAAA,CAAK,EAAE,CAAA;AAC9D,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,QAAA,EAAU,gBAAgB,EAAE,EAAA,EAAI,aAAa,KAAA,EAAO,SAAA,EAAW,OAAO,CAAA;AAAA,IACtE,QAAA;AAAA,IACA,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,UAAU,IAAA,CAAK,MAAA;AAAA,IACf,MAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,KAAgB;AAAC,GACrD;AACF;;;ACzJA,SAAS,UAAU,KAAA,EAAuB;AACxC,EAAA,OAAO,MACJ,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,MAAM,MAAM,CAAA,CACpB,QAAQ,IAAA,EAAM,MAAM,EACpB,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAC3B;AAEO,SAAS,0BAA0B,MAAA,EAA4B;AACpE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,IAAA,CAAK,aAAa,MAAA,CAAO,EAAA,GAAK,SAAS,MAAM,CAAA,SAAA,EAAY,MAAA,CAAO,QAAQ,CAAA,CAAA,CAAG,CAAA;AACjF,EAAA,IAAI,MAAA,CAAO,aAAa,MAAA,EAAW;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,MAAA,CAAO,QAAQ,CAAA,EAAA,CAAI,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,MAAA,CAAO,cAAc,MAAA,EAAW;AAClC,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,MAAA,CAAO,SAAS,CAAA,EAAA,CAAI,CAAA;AAAA,EACpD;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAC/C,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,KAAA,CAAM,KAAK,gBAAgB,CAAA;AAC3B,IAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,WAAA,QAAmB,IAAA,CAAK,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AAC7D,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,EAAA,GAAK,MAAA,GAAS,MAAA;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK,MAAM,IAAI,CAAA,EAAA,EAAK,MAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,EAC1D;AACA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,EAAQ;AAClC;AAEO,SAAS,4BAA4B,MAAA,EAA4B;AACtE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,CAAA,sBAAA,EAAyB,MAAA,CAAO,EAAA,GAAK,MAAA,GAAS,MAAM,CAAA,CAAE,CAAA;AACjE,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,8BAA8B,CAAA;AACzC,EAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,EAAA,EAAK,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,MAAM,EAAA,GAAK,MAAA,GAAS,MAAM,CAAA,GAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA,EAAA;AAAA,KACxF;AAAA,EACF;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,iBAAiB,CAAA;AAC5B,IAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,WAAA,QAAmB,IAAA,CAAK,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,EAAQ;AAClC;AAEO,SAAS,qBAAqB,MAAA,EAA4B;AAC/D,EAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CACjB,GAAA;AAAA,IACC,CAAC,KAAA,KACC,CAAA,QAAA,EAAW,UAAA,CAAW,KAAA,CAAM,IAAI,CAAC,CAAA,SAAA,EAAY,KAAA,CAAM,EAAA,GAAK,SAAS,MAAM,CAAA,SAAA,EAAY,UAAA,CAAW,KAAA,CAAM,OAAO,CAAC,CAAA,UAAA;AAAA,GAChH,CACC,KAAK,EAAE,CAAA;AAEV,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAA,EAcc,OAAO,EAAA,GAAK,MAAA,GAAS,MAAM,CAAA,gBAAA,EAAmB,OAAO,QAAQ,CAAA;AAAA;AAAA;AAAA;AAAA,WAAA,EAIvE,IAAI,CAAA;AAAA;AAAA;AAAA,OAAA,CAAA;AAIjB;AAEO,SAAS,gBAAgB,MAAA,EAA4B;AAC1D,EAAA,MAAM,QAAA,GAAW,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,EAAE,CAAA,CAAE,MAAA;AAC5D,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,CAAO,MAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAClB,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,IAAI,MAAM,EAAA,EAAI;AACZ,MAAA,OAAO,CAAA,oBAAA,EAAuB,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA,qBAAA,CAAA;AAAA,IACrD;AACA,IAAA,OAAO,CAAA,oBAAA,EAAuB,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,wBAAA,EAC/B,SAAA,CAAU,MAAM,OAAO,CAAC,KAAK,SAAA,CAAU,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,eAAA,CAAA;AAAA,EAE3E,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,OAAO,CAAA;AAAA,mBAAA,EACY,KAAK,eAAe,QAAQ,CAAA;AAAA,8CAAA,EACD,KAAK,eAAe,QAAQ,CAAA;AAAA,EAC1E,KAAK;AAAA;AAAA,aAAA,CAAA;AAGP;AAOO,SAAS,4BAA4B,MAAA,EAA4B;AACtE,EAAA,OAAO,MAAA,CAAO,MAAA,CACX,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,EAAE,CAAA,CAC3B,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,GAAG,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;AACxE,IAAA,OAAO,CAAA,cAAA,EAAiB,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,EAChD,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAEO,SAAS,gBAAA,CACd,MAAA,EACA,OAAA,GAAmC,EAAC,EAC5B;AACR,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,UAAA;AACjC,EAAA,IAAI,WAAW,MAAA,EAAQ,OAAO,KAAK,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAC,CAAA;AAC5D,EAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAAA,MAC5E,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QACpC,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,IAAI,KAAA,CAAM,EAAA;AAAA,QACV,SAAS,KAAA,CAAM;AAAA,OACjB,CAAE;AAAA,KACH,CAAA;AAAA,EACH;AACA,EAAA,IAAI,MAAA,KAAW,MAAA,EAAQ,OAAO,oBAAA,CAAqB,MAAM,CAAA;AACzD,EAAA,IAAI,MAAA,KAAW,OAAA,EAAS,OAAO,eAAA,CAAgB,MAAM,CAAA;AACrD,EAAA,IAAI,MAAA,KAAW,QAAA,EAAU,OAAO,2BAAA,CAA4B,MAAM,CAAA;AAClE,EAAA,IAAI,MAAA,KAAW,oBAAA,EAAsB,OAAO,2BAAA,CAA4B,MAAM,CAAA;AAC9E,EAAA,OAAO,0BAA0B,MAAM,CAAA;AACzC;AC7HO,IAAM,yCAAyC,IAAA,GAAO;AAKtD,SAAS,yBAAyB,OAAA,EAAsC;AAC7E,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,OAAA,EAAS,MAAM,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,OAAA,CAAQ,UAAA;AACjB;AAMO,SAAS,8BAAA,CACd,OAAA,EACA,OAAA,GAII,EAAC,EACqB;AAC1B,EAAA,MAAM,UAAA,GAAa,yBAAyB,OAAO,CAAA;AACnD,EAAA,IAAI,aAAa,sCAAA,EAAwC;AACvD,IAAA,MAAM,IAAI,UAAA;AAAA,MACR,2BAA2B,sCAAsC,CAAA,mBAAA;AAAA,KACnE;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GACJ,OAAO,OAAA,KAAY,QAAA,GACfC,UAAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,MAAM,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,GACtEA,UAAAA,CAAW,QAAQ,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AACvD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,QAAA;AAAA,IACX,MAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAI,QAAQ,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,OAAA,CAAQ,WAAA,EAAY,GAAI,EAAC;AAAA,IAChF,GAAI,QAAQ,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM,GAAI,EAAC;AAAA,IAC9D,aAAA,EAAe,QAAQ,aAAA,IAAiB;AAAA,GAC1C;AACF","file":"advanced.mjs","sourcesContent":["/**\n * Shared bounded-preview capture used by the official framework adapters.\n *\n * Adapters own framework field selection; this module owns the parts that must\n * behave identically everywhere: safe serialization, `maxPreviewChars` bounds,\n * key/profile redaction before the value reaches an event, and stable\n * diagnostics when a requested field cannot be sourced.\n *\n * Previews are bounded and key-redacted, not sanitized. Review exports before\n * sharing.\n *\n * @experimental Adapter-facing helper; shape may change while the official\n * adapters remain experimental.\n */\nimport { Redactor } from \"../logs/redactor.js\";\nimport { resolveRedactionProfile } from \"../redaction-profiles.js\";\nimport type { RedactionRule } from \"../types/log-config.js\";\nimport type { RedactionProfile } from \"../types.js\";\n\n/** Default bound for adapter preview fields (characters). */\nexport const DEFAULT_ADAPTER_MAX_PREVIEW_CHARS = 200;\n\n/**\n * Capture policy shared by the official adapters.\n *\n * `metadata-only` is the default everywhere and never persists framework\n * payload content. `preview` opts into bounded, redacted previews.\n */\nexport type AdapterCaptureMode = \"metadata-only\" | \"preview\";\n\n/** Stable diagnostic codes emitted by shared preview capture. */\nexport const ADAPTER_CAPTURE_DIAGNOSTIC_CODES = [\n  \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n  \"AI_CAPTURE_PREVIEW_TRUNCATED\",\n  \"AI_CAPTURE_PREVIEW_REDACTED\",\n] as const;\n\nexport type AdapterCaptureDiagnosticCode =\n  (typeof ADAPTER_CAPTURE_DIAGNOSTIC_CODES)[number];\n\n/** One bounded diagnostic. Never contains preview content or filesystem paths. */\nexport interface AdapterCaptureDiagnostic {\n  readonly code: AdapterCaptureDiagnosticCode;\n  readonly message: string;\n  /** Persisted attribute name the diagnostic refers to (e.g. `inputPreview`). */\n  readonly field: string;\n  readonly capture: AdapterCaptureMode;\n}\n\n/** Optional consumer hook for adapter capture diagnostics. */\nexport type AdapterDiagnosticListener = (\n  diagnostic: AdapterCaptureDiagnostic,\n) => void;\n\n/** Preview capture options accepted by every official adapter. */\nexport interface AdapterPreviewCaptureOptions {\n  /** Defaults to `metadata-only`. */\n  capture?: AdapterCaptureMode;\n  /** Redaction profile applied to preview values before they reach an event. */\n  redactionProfile?: RedactionProfile;\n  /** Upper bound for each serialized preview field. */\n  maxPreviewChars?: number;\n  /** Extra adapter-supplied redaction rules. */\n  redact?: RedactionRule[];\n  /** Receives bounded capture diagnostics. Listener failures are swallowed. */\n  onDiagnostic?: AdapterDiagnosticListener;\n}\n\n/** Bounded capture counters for adapter `getDiagnostics()` surfaces. */\nexport interface AdapterCaptureDiagnostics {\n  readonly capture: AdapterCaptureMode;\n  readonly redactionProfile: RedactionProfile;\n  readonly maxPreviewChars: number;\n  readonly previewFieldsCaptured: number;\n  readonly previewFieldsUnavailable: number;\n  readonly previewFieldsTruncated: number;\n  readonly previewFieldsRedacted: number;\n  readonly lastDiagnosticCode?: AdapterCaptureDiagnosticCode;\n  readonly lastDiagnosticMessage?: string;\n}\n\n/** Shared preview capture handle owned by one adapter instance. */\nexport interface AdapterPreviewCapture {\n  /** Effective capture mode (adapters no longer downgrade `preview`). */\n  readonly capture: AdapterCaptureMode;\n  readonly previewEnabled: boolean;\n  readonly maxPreviewChars: number;\n  readonly redactionProfile: RedactionProfile;\n  /** Normalizes a logical field to a persisted `*Preview` attribute name. */\n  previewFieldName(field: string): string;\n  /**\n   * Returns a bounded, redacted preview string, or `undefined` when capture is\n   * metadata-only or the field could not be sourced.\n   */\n  capturePreviewField(field: string, value: unknown): string | undefined;\n  /** Writes every available preview onto `target` and returns it. */\n  applyPreviewFields(\n    target: Record<string, unknown>,\n    fields: Record<string, unknown>,\n  ): Record<string, unknown>;\n  getDiagnostics(): AdapterCaptureDiagnostics;\n}\n\n/**\n * JSON-ish serialization that tolerates cycles, bigints, and throwing getters,\n * bounded to `maxChars`. Returns `undefined` for a non-positive bound or a\n * value JSON cannot represent.\n */\nexport function serializeAdapterPreview(\n  value: unknown,\n  maxChars: number,\n): string | undefined {\n  if (!Number.isFinite(maxChars) || maxChars <= 0) return undefined;\n  const serialized = serializePreviewValue(value);\n  if (serialized === undefined) return undefined;\n  return boundPreviewString(serialized, Math.floor(maxChars)).text;\n}\n\n/**\n * Resolves the effective preview bound. Profile caps apply so a `share` or\n * `strict` profile cannot be widened by a larger adapter option.\n */\nexport function resolveAdapterMaxPreviewChars(\n  value: unknown,\n  profile: RedactionProfile = \"local\",\n): number {\n  const requested =\n    typeof value === \"number\" && Number.isFinite(value) && value >= 0\n      ? Math.floor(value)\n      : DEFAULT_ADAPTER_MAX_PREVIEW_CHARS;\n  const cap = resolveRedactionProfile(profile).maxPreviewLengthCap;\n  return cap === undefined ? requested : Math.min(requested, cap);\n}\n\n/** Creates the shared preview capture handle for one adapter instance. */\nexport function createAdapterPreviewCapture(\n  options: AdapterPreviewCaptureOptions = {},\n): AdapterPreviewCapture {\n  const capture: AdapterCaptureMode =\n    options.capture === \"preview\" ? \"preview\" : \"metadata-only\";\n  const redactionProfile: RedactionProfile = options.redactionProfile ?? \"local\";\n  const maxPreviewChars = resolveAdapterMaxPreviewChars(\n    options.maxPreviewChars,\n    redactionProfile,\n  );\n  const redactor = new Redactor({\n    rules: options.redact,\n    extraKeys: resolveRedactionProfile(redactionProfile).extraKeys,\n  });\n\n  const counters = {\n    previewFieldsCaptured: 0,\n    previewFieldsUnavailable: 0,\n    previewFieldsTruncated: 0,\n    previewFieldsRedacted: 0,\n  };\n  let lastDiagnosticCode: AdapterCaptureDiagnosticCode | undefined;\n  let lastDiagnosticMessage: string | undefined;\n\n  const emit = (\n    code: AdapterCaptureDiagnosticCode,\n    field: string,\n    message: string,\n  ): void => {\n    lastDiagnosticCode = code;\n    lastDiagnosticMessage = `${code}: ${message}`;\n    try {\n      options.onDiagnostic?.({ code, message, field, capture });\n    } catch {\n      // Consumer diagnostics must never throw into instrumented code.\n    }\n  };\n\n  const previewFieldName = (field: string): string =>\n    /preview$/i.test(field) ? field : `${field}Preview`;\n\n  const capturePreviewField = (\n    field: string,\n    value: unknown,\n  ): string | undefined => {\n    if (capture !== \"preview\" || maxPreviewChars <= 0) return undefined;\n    const name = previewFieldName(field);\n\n    try {\n      if (value === undefined) {\n        counters.previewFieldsUnavailable += 1;\n        emit(\n          \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n          name,\n          `${name} was requested but this framework callback did not expose the field`,\n        );\n        return undefined;\n      }\n\n      // Normalize before redaction so cycles and hostile getters cannot reach\n      // the key-based redactor, which walks plain structures only.\n      const plain = toPlainPreviewValue(value);\n      if (plain === UNSERIALIZABLE) {\n        counters.previewFieldsUnavailable += 1;\n        emit(\n          \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n          name,\n          `${name} could not be serialized into a bounded preview`,\n        );\n        return undefined;\n      }\n\n      const serialized = serializePreviewValue(redactor.redactValue(name, plain));\n      if (serialized === undefined) {\n        counters.previewFieldsUnavailable += 1;\n        emit(\n          \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n          name,\n          `${name} could not be serialized into a bounded preview`,\n        );\n        return undefined;\n      }\n\n      if (containsRedactionMarker(serialized)) {\n        counters.previewFieldsRedacted += 1;\n        emit(\n          \"AI_CAPTURE_PREVIEW_REDACTED\",\n          name,\n          `${name} matched the ${redactionProfile} redaction profile before persistence`,\n        );\n      }\n\n      const bounded = boundPreviewString(serialized, maxPreviewChars);\n      if (bounded.truncated) {\n        counters.previewFieldsTruncated += 1;\n        emit(\n          \"AI_CAPTURE_PREVIEW_TRUNCATED\",\n          name,\n          `${name} was truncated to maxPreviewChars=${maxPreviewChars}`,\n        );\n      }\n\n      counters.previewFieldsCaptured += 1;\n      return bounded.text;\n    } catch {\n      counters.previewFieldsUnavailable += 1;\n      emit(\n        \"AI_CAPTURE_FIELD_UNAVAILABLE\",\n        name,\n        `${name} could not be read from this framework callback`,\n      );\n      return undefined;\n    }\n  };\n\n  return {\n    capture,\n    previewEnabled: capture === \"preview\",\n    maxPreviewChars,\n    redactionProfile,\n    previewFieldName,\n    capturePreviewField,\n    applyPreviewFields(target, fields) {\n      if (capture !== \"preview\") return target;\n      for (const [field, value] of Object.entries(fields)) {\n        const preview = capturePreviewField(field, value);\n        if (preview !== undefined) target[previewFieldName(field)] = preview;\n      }\n      return target;\n    },\n    getDiagnostics() {\n      return {\n        capture,\n        redactionProfile,\n        maxPreviewChars,\n        ...counters,\n        ...(lastDiagnosticCode === undefined ? {} : { lastDiagnosticCode }),\n        ...(lastDiagnosticMessage === undefined\n          ? {}\n          : { lastDiagnosticMessage }),\n      };\n    },\n  };\n}\n\n/** Sentinel for a value JSON cannot represent at all. */\nconst UNSERIALIZABLE = Symbol(\"agent-inspect.preview.unserializable\");\n\nfunction toPlainPreviewValue(value: unknown): unknown {\n  const json = serializePreviewValue(value);\n  if (json === undefined) return UNSERIALIZABLE;\n  try {\n    return JSON.parse(json) as unknown;\n  } catch {\n    // `serializePreviewValue` fell back to `String(value)`.\n    return json;\n  }\n}\n\nfunction containsRedactionMarker(serialized: string): boolean {\n  return serialized.includes(\"[REDACTED]\") || serialized.includes(\"[HASH:\");\n}\n\nfunction serializePreviewValue(value: unknown): string | undefined {\n  try {\n    const seen = new WeakSet<object>();\n    return JSON.stringify(value, (_key, entry) => {\n      if (typeof entry === \"bigint\") return entry.toString();\n      if (typeof entry === \"function\" || typeof entry === \"symbol\") {\n        return undefined;\n      }\n      if (typeof entry === \"object\" && entry !== null) {\n        if (seen.has(entry)) return \"[Circular]\";\n        seen.add(entry);\n      }\n      return entry;\n    });\n  } catch {\n    try {\n      return String(value);\n    } catch {\n      return undefined;\n    }\n  }\n}\n\nfunction boundPreviewString(\n  value: string,\n  maxChars: number,\n): { text: string; truncated: boolean } {\n  if (value.length <= maxChars) return { text: value, truncated: false };\n  return { text: `${value.slice(0, maxChars)}…`, truncated: true };\n}\n","/**\n * Conservative first-causal-failure analysis (v6.11+).\n *\n * @experimental Available through `agent-inspect/advanced`.\n */\nimport { extractOutcomesFromTraceEvents } from \"./outcomes/extract.js\";\nimport { buildRunTimeline } from \"./timeline.js\";\nimport type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\n\nexport type CausalFailureKind =\n  | \"explicit_error_event\"\n  | \"failed_observed_outcome\"\n  | \"contract_failure\"\n  | \"failed_ancestor_or_child\"\n  | \"none\";\n\nexport interface CausalContractFindingInput {\n  ruleId: string;\n  status: \"fail\" | \"pass\" | \"warning\" | string;\n  /** Linked event/step ids from check evidence. */\n  evidenceIds?: string[];\n  message?: string;\n}\n\nexport interface FirstCausalFailure {\n  kind: CausalFailureKind;\n  /** Stable evidence ids (stepId / outcomeId / event-linked ids). No raw paths. */\n  evidenceIds: string[];\n  rationale: string;\n  /** 1–4 when matched; 0 when none. */\n  orderIndex: 0 | 1 | 2 | 3 | 4;\n  runId?: string;\n  primary?: {\n    stepId?: string;\n    outcomeId?: string;\n    ruleId?: string;\n    name?: string;\n  };\n  relationship?: {\n    role: \"self\" | \"ancestor\" | \"child\";\n    relatedIds: string[];\n  };\n  engine: \"conservative-causal-v1\";\n}\n\nexport interface FindFirstCausalFailureOptions {\n  /** Optional contract/check failures (step 3). Omitted → skip contract stage. */\n  contractFindings?: readonly CausalContractFindingInput[];\n}\n\nfunction runIdFromEvents(events: readonly TraceEvent[]): string | undefined {\n  for (const event of events) {\n    if (\"runId\" in event && typeof event.runId === \"string\") return event.runId;\n  }\n  return undefined;\n}\n\nfunction noneResult(runId: string | undefined, rationale: string): FirstCausalFailure {\n  return {\n    kind: \"none\",\n    evidenceIds: [],\n    rationale,\n    orderIndex: 0,\n    runId,\n    engine: \"conservative-causal-v1\",\n  };\n}\n\n/**\n * Find the first causal failure using the locked conservative order.\n * Does not infer from timing correlation alone.\n */\nexport function findFirstCausalFailure(\n  events: readonly TraceEvent[],\n  options: FindFirstCausalFailureOptions = {},\n): FirstCausalFailure {\n  const runId = runIdFromEvents(events);\n\n  // 1. Explicit failed/error event (timeline isError / step_completed error / run error)\n  const timeline = buildRunTimeline(events);\n  const firstError = timeline.entries.find((entry) => entry.isError);\n  if (firstError) {\n    return {\n      kind: \"explicit_error_event\",\n      evidenceIds: [firstError.stepId],\n      rationale:\n        \"First timeline step with status error (explicit failure; no timing-only inference).\",\n      orderIndex: 1,\n      runId: timeline.runId || runId,\n      primary: {\n        stepId: firstError.stepId,\n        name: firstError.name,\n      },\n      relationship: { role: \"self\", relatedIds: [] },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  const runCompletedError = events.find(\n    (event): event is Extract<TraceEvent, { event: \"run_completed\" }> =>\n      event.event === \"run_completed\" && event.status === \"error\",\n  );\n  if (runCompletedError) {\n    return {\n      kind: \"explicit_error_event\",\n      evidenceIds: [runCompletedError.runId],\n      rationale: \"Run completed with status error and no earlier errored step.\",\n      orderIndex: 1,\n      runId: runCompletedError.runId,\n      primary: { name: \"run\", stepId: runCompletedError.runId },\n      relationship: { role: \"self\", relatedIds: [] },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  // 2. Failed observed outcome\n  const outcomes = extractOutcomesFromTraceEvents(events);\n  const failedOutcome = outcomes.find((outcome) => outcome.status === \"failed\");\n  if (failedOutcome) {\n    const evidenceIds = [failedOutcome.outcomeId];\n    if (failedOutcome.parentId) evidenceIds.push(failedOutcome.parentId);\n    return {\n      kind: \"failed_observed_outcome\",\n      evidenceIds,\n      rationale: \"First observed outcome with status failed.\",\n      orderIndex: 2,\n      runId: failedOutcome.runId || runId,\n      primary: {\n        outcomeId: failedOutcome.outcomeId,\n        stepId: failedOutcome.parentId,\n        name: failedOutcome.name,\n      },\n      relationship: failedOutcome.parentId\n        ? { role: \"child\", relatedIds: [failedOutcome.parentId] }\n        : { role: \"self\", relatedIds: [] },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  // 3. Contract failure linked to an event\n  const contractFail = (options.contractFindings ?? []).find(\n    (finding) => finding.status === \"fail\" && (finding.evidenceIds?.length ?? 0) > 0,\n  );\n  if (contractFail) {\n    const evidenceIds = [...(contractFail.evidenceIds ?? [])];\n    return {\n      kind: \"contract_failure\",\n      evidenceIds,\n      rationale:\n        contractFail.message ??\n        `Contract rule ${contractFail.ruleId} failed with linked evidence ids.`,\n      orderIndex: 3,\n      runId,\n      primary: {\n        ruleId: contractFail.ruleId,\n        stepId: evidenceIds[0],\n        name: contractFail.ruleId,\n      },\n      relationship: { role: \"self\", relatedIds: [] },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  // 4. Nearest failed ancestor/child — only when we have structural parent links\n  // among completed steps that somehow weren't marked isError (defensive) or\n  // when a success parent wraps a failed child already handled above.\n  // If no explicit error steps exist, look for parent/child pairs where a child\n  // completed with error relative to a parent (already covered by step 1).\n  // Here: if any step has a parent that also completed with error, prefer the\n  // child tip — but step 1 would have caught any error step. So this stage\n  // only fires when contractFindings lacked event links but we can still find\n  // parent/child error adjacency from raw events that timeline missed.\n  const completed = events.filter(\n    (event): event is StepCompletedEvent => event.event === \"step_completed\",\n  );\n  const started = events.filter(\n    (event): event is StepStartedEvent => event.event === \"step_started\",\n  );\n  const parentByStep = new Map<string, string | undefined>();\n  for (const start of started) {\n    parentByStep.set(start.stepId, start.parentId);\n  }\n  const errorSteps = completed.filter((event) => event.status === \"error\");\n  if (errorSteps.length > 0) {\n    // Prefer deepest error (has parent that is also error or any parent)\n    const sorted = [...errorSteps].sort((a, b) => {\n      const depth = (id: string): number => {\n        let d = 0;\n        let cur: string | undefined = id;\n        const seen = new Set<string>();\n        while (cur && parentByStep.has(cur) && !seen.has(cur)) {\n          seen.add(cur);\n          const parent = parentByStep.get(cur);\n          if (!parent) break;\n          d += 1;\n          cur = parent;\n        }\n        return d;\n      };\n      return depth(b.stepId) - depth(a.stepId);\n    });\n    const tip = sorted[0]!;\n    const parentId = parentByStep.get(tip.stepId);\n    const relatedIds = parentId ? [parentId] : [];\n    return {\n      kind: \"failed_ancestor_or_child\",\n      evidenceIds: [tip.stepId, ...relatedIds],\n      rationale: parentId\n        ? \"Deepest explicit error step with parent link (nearest ancestor relationship).\"\n        : \"Explicit error step used as structural tip (no parent id).\",\n      orderIndex: 4,\n      runId: tip.runId || runId,\n      primary: { stepId: tip.stepId, name: started.find((s) => s.stepId === tip.stepId)?.name },\n      relationship: {\n        role: parentId ? \"child\" : \"self\",\n        relatedIds,\n      },\n      engine: \"conservative-causal-v1\",\n    };\n  }\n\n  // 5. No timing-only inference\n  return noneResult(\n    runId,\n    \"No explicit error event, failed outcome, or linked contract failure; refusing timing-only inference.\",\n  );\n}\n","import { Redactor } from \"./logs/redactor.js\";\nimport { resolveRedactionProfile } from \"./redaction-profiles.js\";\nimport type { RedactionProfile } from \"./types.js\";\nimport type { InspectNode, InspectRunTree } from \"./types/inspect-event.js\";\n\nexport type ExplainMode = \"dry-run\" | \"local\";\n\nexport interface ExplainFact {\n  id: string;\n  label: string;\n  value: unknown;\n  source: \"trace\";\n  confidence: \"observed\";\n}\n\nexport interface ExplainInference {\n  id: string;\n  label: string;\n  text: string;\n  evidence: string[];\n  confidence: \"deterministic\";\n}\n\nexport interface ExplainResult {\n  mode: ExplainMode;\n  runId: string;\n  name?: string;\n  status?: string;\n  redactionProfile: RedactionProfile;\n  facts: ExplainFact[];\n  inferences: ExplainInference[];\n  notes: string[];\n}\n\nexport interface ExplainOptions {\n  mode?: ExplainMode;\n  redactionProfile?: RedactionProfile;\n}\n\ninterface FlatNode {\n  node: InspectNode;\n  index: number;\n}\n\n/**\n * Maps the reader run-tree status vocabulary (\"ok\"/\"error\"/\"running\") to the\n * user-facing status vocabulary that list/view/stats report (\"success\"/...),\n * so explain agrees with the other commands for the same run.\n */\nfunction toDisplayStatus(status: InspectRunTree[\"status\"] | undefined): string {\n  if (status === \"ok\") return \"success\";\n  if (status === \"error\") return \"error\";\n  if (status === \"running\") return \"running\";\n  return \"unknown\";\n}\n\nfunction flatten(nodes: InspectNode[], out: FlatNode[] = []): FlatNode[] {\n  for (const node of nodes) {\n    out.push({ node, index: out.length + 1 });\n    flatten(node.children, out);\n  }\n  return out;\n}\n\nfunction redactValue(\n  redactor: Redactor,\n  key: string,\n  value: unknown,\n): unknown {\n  return redactor.redactValue(key, value);\n}\n\nfunction fact(\n  id: string,\n  label: string,\n  value: unknown,\n  redactor: Redactor,\n): ExplainFact {\n  return {\n    id,\n    label,\n    value: redactValue(redactor, id.split(\".\").at(-1) ?? id, value),\n    source: \"trace\",\n    confidence: \"observed\",\n  };\n}\n\nfunction topKinds(run: InspectRunTree): string[] {\n  return Object.entries(run.metadata.kinds)\n    .filter(([, count]) => count > 0)\n    .sort((a, b) => {\n      if (b[1] !== a[1]) return b[1] - a[1];\n      return a[0].localeCompare(b[0]);\n    })\n    .slice(0, 5)\n    .map(([kind, count]) => `${kind}:${count}`);\n}\n\nfunction countErrorNodes(nodes: FlatNode[]): number {\n  return nodes.filter((entry) => entry.node.event.status === \"error\").length;\n}\n\nfunction slowestNode(nodes: FlatNode[]): FlatNode | undefined {\n  return nodes\n    .filter(\n      (entry) =>\n        entry.node.event.durationMs !== undefined &&\n        // The RUN boundary spans the whole run, so its duration always dominates\n        // and shadows every real step. Rank actual work nodes only, matching the\n        // stats slowest-step ranking, which never counts the run envelope.\n        entry.node.event.kind !== \"RUN\",\n    )\n    .sort((a, b) => {\n      const delta = (b.node.event.durationMs ?? 0) - (a.node.event.durationMs ?? 0);\n      return delta !== 0 ? delta : a.index - b.index;\n    })[0];\n}\n\nfunction attributeFacts(nodes: FlatNode[], redactor: Redactor): ExplainFact[] {\n  const facts: ExplainFact[] = [];\n  for (const entry of nodes) {\n    const attrs = entry.node.event.attributes;\n    if (attrs === undefined) continue;\n    for (const key of Object.keys(attrs).sort()) {\n      facts.push({\n        id: `node.${entry.index}.attributes.${key}`,\n        label: `${entry.node.event.name} attribute ${key}`,\n        value: redactValue(redactor, key, attrs[key]),\n        source: \"trace\",\n        confidence: \"observed\",\n      });\n      if (facts.length >= 8) return facts;\n    }\n  }\n  return facts;\n}\n\nfunction buildFacts(run: InspectRunTree, redactor: Redactor): ExplainFact[] {\n  const nodes = flatten(run.children);\n  const facts = [\n    fact(\"run.id\", \"Run id\", run.runId, redactor),\n    fact(\"run.name\", \"Run name\", run.name ?? run.runId, redactor),\n    fact(\"run.status\", \"Run status\", toDisplayStatus(run.status), redactor),\n    fact(\"run.totalEvents\", \"Total events\", run.metadata.totalEvents, redactor),\n    fact(\"run.stepCount\", \"Top-level step count\", run.children.length, redactor),\n    fact(\"run.nodeCount\", \"Total node count\", nodes.length, redactor),\n    fact(\"run.errorNodeCount\", \"Error node count\", countErrorNodes(nodes), redactor),\n    fact(\"run.kinds\", \"Observed kind mix\", topKinds(run), redactor),\n  ];\n  if (run.durationMs !== undefined) {\n    facts.push(fact(\"run.durationMs\", \"Run duration milliseconds\", run.durationMs, redactor));\n  }\n  const slowest = slowestNode(nodes);\n  if (slowest !== undefined) {\n    facts.push(\n      fact(\"run.slowestNode\", \"Slowest observed node\", {\n        name: slowest.node.event.name,\n        kind: slowest.node.event.kind,\n        durationMs: slowest.node.event.durationMs,\n      }, redactor),\n    );\n  }\n  facts.push(...attributeFacts(nodes, redactor));\n  return facts;\n}\n\nfunction buildInferences(run: InspectRunTree, facts: ExplainFact[]): ExplainInference[] {\n  const inferences: ExplainInference[] = [];\n  const errorFact = facts.find((item) => item.id === \"run.errorNodeCount\");\n  const kindFact = facts.find((item) => item.id === \"run.kinds\");\n  const durationFact = facts.find((item) => item.id === \"run.durationMs\");\n  const errorNodeCount =\n    typeof errorFact?.value === \"number\" ? errorFact.value : 0;\n\n  if (run.status === \"error\" || errorNodeCount > 0) {\n    inferences.push({\n      id: \"outcome.error\",\n      label: \"Outcome\",\n      text: \"The run recorded an error status or at least one error node.\",\n      evidence: [\"run.status\", \"run.errorNodeCount\"],\n      confidence: \"deterministic\",\n    });\n  } else if (run.status === \"ok\") {\n    inferences.push({\n      id: \"outcome.success\",\n      label: \"Outcome\",\n      text: \"The run completed without observed error nodes.\",\n      evidence: [\"run.status\", \"run.errorNodeCount\"],\n      confidence: \"deterministic\",\n    });\n  }\n\n  if (kindFact !== undefined) {\n    inferences.push({\n      id: \"shape.kind-mix\",\n      label: \"Trace shape\",\n      text: \"The explanation is based on the observed event kind mix, not generated content.\",\n      evidence: [kindFact.id],\n      confidence: \"deterministic\",\n    });\n  }\n\n  if (durationFact !== undefined) {\n    inferences.push({\n      id: \"timing.duration\",\n      label: \"Timing\",\n      text: \"Timing claims are limited to persisted duration fields in the trace.\",\n      evidence: [durationFact.id],\n      confidence: \"deterministic\",\n    });\n  }\n\n  return inferences;\n}\n\n/**\n * Build a local, deterministic explanation payload from a reader-selected run.\n *\n * This helper performs no network I/O and does not call a model provider.\n */\nexport function buildLocalExplanation(\n  run: InspectRunTree,\n  options: ExplainOptions = {},\n): ExplainResult {\n  const redactionProfile = options.redactionProfile ?? \"local\";\n  const resolved = resolveRedactionProfile(redactionProfile);\n  const redactor = new Redactor({ extraKeys: resolved.extraKeys });\n  const mode = options.mode ?? \"local\";\n  const facts = buildFacts(run, redactor);\n  return {\n    mode,\n    runId: String(redactValue(redactor, \"runId\", run.runId)),\n    ...(run.name !== undefined ? { name: String(redactValue(redactor, \"name\", run.name)) } : {}),\n    ...(run.status !== undefined ? { status: toDisplayStatus(run.status) } : {}),\n    redactionProfile,\n    facts,\n    inferences: mode === \"dry-run\" ? [] : buildInferences(run, facts),\n    notes: [\n      \"Generated locally without provider or network calls.\",\n      \"Facts are observed from normalized trace data; inferences are deterministic labels.\",\n    ],\n  };\n}\n","import type { StepCompletedEvent, StepStartedEvent, TraceEvent } from \"./types.js\";\nimport { extractMetadata } from \"./trace-metadata.js\";\nimport { filterTraces as filterTraceMetas } from \"./trace-filter.js\";\nimport { readTraceEventsFromFile } from \"./storage.js\";\nimport type { TraceMetadata, StepType } from \"./types.js\";\nimport { parseDuration } from \"./utils/duration.js\";\nimport {\n  extractOutcomesFromTraceEvents,\n  parseObservationFilter,\n} from \"./outcomes/index.js\";\n\nexport interface TraceSearchOptions {\n  traceDir: string;\n  since?: string;\n  status?: \"success\" | \"error\" | \"running\" | \"unknown\";\n  kind?: string;\n  type?: string;\n  name?: string;\n  tool?: string;\n  duration?: string;\n  limit?: number;\n  session?: string;\n  correlateGroup?: boolean;\n  observation?: string;\n}\n\nexport interface TraceSearchResult {\n  runId: string;\n  runName?: string;\n  runStatus: string;\n  stepId?: string;\n  stepName?: string;\n  stepType?: string;\n  timestamp?: number;\n  durationMs?: number;\n  matchReason: string;\n  matchedFields: string[];\n  filePath: string;\n  sessionId?: string;\n}\n\nexport interface ParsedDurationFilter {\n  op: \">\" | \">=\" | \"<\" | \"<=\";\n  ms: number;\n}\n\nexport function parseDurationFilter(expr: string): ParsedDurationFilter {\n  const raw = expr.trim();\n  const m = raw.match(/^(>=|<=|>|<)\\s*(.+)$/);\n  if (!m) {\n    throw new Error(\n      `Invalid --duration \"${expr}\". Use forms like >5s, >=500ms, <2m.`,\n    );\n  }\n  const op = m[1] as ParsedDurationFilter[\"op\"];\n  const ms = parseDuration(m[2].trim());\n  return { op, ms };\n}\n\nfunction durationMatches(\n  valueMs: number | undefined,\n  filter: ParsedDurationFilter,\n): boolean {\n  if (valueMs === undefined || !Number.isFinite(valueMs)) return false;\n  switch (filter.op) {\n    case \">\":\n      return valueMs > filter.ms;\n    case \">=\":\n      return valueMs >= filter.ms;\n    case \"<\":\n      return valueMs < filter.ms;\n    case \"<=\":\n      return valueMs <= filter.ms;\n    default:\n      return false;\n  }\n}\n\nfunction normalizeStepTypeFilter(kind?: string, type?: string): string | undefined {\n  const v = (kind ?? type)?.trim().toLowerCase();\n  return v && v !== \"\" ? v : undefined;\n}\n\nfunction nameMatches(hay: string, needle: string): boolean {\n  return hay.toLowerCase().includes(needle.toLowerCase());\n}\n\nexport async function searchTraces(\n  metas: TraceMetadata[],\n  options: TraceSearchOptions,\n): Promise<TraceSearchResult[]> {\n  let filtered = filterTraceMetas(metas, { since: options.since });\n  const stepTypeFilter = normalizeStepTypeFilter(options.kind, options.type);\n  const nameQuery = options.name?.trim();\n  const toolQuery = options.tool?.trim();\n  let durationFilter: ParsedDurationFilter | undefined;\n  if (options.duration) {\n    durationFilter = parseDurationFilter(options.duration);\n  }\n  const limit = options.limit ?? 50;\n  const sessionId = options.session?.trim();\n  const observationStatus = parseObservationFilter(options.observation);\n\n  const hasContentFilter = Boolean(\n    options.status ||\n      stepTypeFilter ||\n      nameQuery ||\n      toolQuery ||\n      durationFilter ||\n      observationStatus,\n  );\n\n  const results: TraceSearchResult[] = [];\n  const sessionLabel = sessionId && sessionId !== \"\" ? sessionId : undefined;\n\n  if (!hasContentFilter) {\n    for (const m of filtered) {\n      results.push({\n        runId: m.runId,\n        runName: m.name,\n        runStatus: m.status,\n        timestamp: m.startedAt,\n        durationMs: m.durationMs,\n        matchReason: sessionLabel\n          ? `trace in session ${sessionLabel}`\n          : \"trace in directory\",\n        matchedFields: sessionLabel ? [\"run\", \"session\"] : [\"run\"],\n        filePath: m.filePath,\n        ...(sessionLabel ? { sessionId: sessionLabel } : {}),\n      });\n    }\n    results.sort((a, b) => {\n      const ta = a.timestamp ?? 0;\n      const tb = b.timestamp ?? 0;\n      if (ta !== tb) return tb - ta;\n      return a.runId.localeCompare(b.runId);\n    });\n    return results.slice(0, limit);\n  }\n\n  for (const m of filtered) {\n    if (options.status && m.status !== options.status) continue;\n\n    let events: TraceEvent[] = [];\n    try {\n      events = await readTraceEventsFromFile(m.filePath);\n    } catch {\n      continue;\n    }\n    if (events.length === 0) continue;\n\n    const runMatches = matchRunLevel(m, {\n      stepTypeFilter,\n      nameQuery,\n      toolQuery,\n      durationFilter,\n      statusFilter: options.status,\n    });\n    results.push(...runMatches);\n\n    const stepMatches = matchStepLevel(m, events, {\n      stepTypeFilter,\n      nameQuery,\n      toolQuery,\n      durationFilter,\n      statusFilter: options.status,\n    });\n    results.push(...stepMatches);\n\n    if (observationStatus) {\n      const outcomes = extractOutcomesFromTraceEvents(events);\n      const matched = outcomes.filter((outcome) => outcome.status === observationStatus);\n      for (const outcome of matched) {\n        results.push({\n          runId: m.runId,\n          runName: m.name,\n          runStatus: m.status,\n          stepName: outcome.name,\n          timestamp: outcome.observedAt,\n          matchReason: `observation status=${outcome.status}`,\n          matchedFields: [\"outcome.status\", \"outcome.name\"],\n          filePath: m.filePath,\n        });\n      }\n    }\n  }\n\n  results.sort((a, b) => {\n    const ta = a.timestamp ?? 0;\n    const tb = b.timestamp ?? 0;\n    // Newest-first so --limit keeps the most recent matches.\n    if (ta !== tb) return tb - ta;\n    const runCmp = a.runId.localeCompare(b.runId);\n    if (runCmp !== 0) return runCmp;\n    return (a.stepName ?? \"\").localeCompare(b.stepName ?? \"\");\n  });\n\n  return results.slice(0, limit);\n}\n\nfunction matchRunLevel(\n  m: TraceMetadata,\n  opts: {\n    stepTypeFilter?: string;\n    nameQuery?: string;\n    toolQuery?: string;\n    durationFilter?: ParsedDurationFilter;\n    statusFilter?: string;\n  },\n): TraceSearchResult[] {\n  // Step-oriented filters are handled only by matchStepLevel.\n  if (opts.stepTypeFilter || opts.toolQuery) return [];\n\n  // Structured run filters are conjunctive: every supplied filter must match.\n  // Previously status/name/duration were OR'd via field accumulation, so\n  // `--name missing --status error` could still emit a status-only run hit (#323).\n  if (opts.statusFilter && m.status !== opts.statusFilter) return [];\n  if (opts.nameQuery && !nameMatches(m.name ?? m.runId, opts.nameQuery)) {\n    return [];\n  }\n  if (\n    opts.durationFilter &&\n    !durationMatches(m.durationMs, opts.durationFilter)\n  ) {\n    return [];\n  }\n\n  const fields: string[] = [];\n  if (opts.statusFilter) fields.push(\"run.status\");\n  if (opts.nameQuery) fields.push(\"run.name\");\n  if (opts.durationFilter) fields.push(\"run.durationMs\");\n  if (fields.length === 0) return [];\n\n  return [\n    {\n      runId: m.runId,\n      runName: m.name,\n      runStatus: m.status,\n      timestamp: m.startedAt,\n      durationMs: m.durationMs,\n      matchReason: `run match: ${fields.join(\", \")}`,\n      matchedFields: fields,\n      filePath: m.filePath,\n    },\n  ];\n}\n\nfunction matchStepLevel(\n  m: TraceMetadata,\n  events: TraceEvent[],\n  opts: {\n    stepTypeFilter?: string;\n    nameQuery?: string;\n    toolQuery?: string;\n    durationFilter?: ParsedDurationFilter;\n    statusFilter?: string;\n  },\n): TraceSearchResult[] {\n  const out: TraceSearchResult[] = [];\n  const started = new Map<string, StepStartedEvent>();\n\n  for (const e of events) {\n    if (e.event === \"step_started\") {\n      started.set((e as StepStartedEvent).stepId, e as StepStartedEvent);\n    }\n  }\n\n  for (const e of events) {\n    if (e.event !== \"step_completed\") continue;\n    const c = e as StepCompletedEvent;\n    const s = started.get(c.stepId);\n    if (!s) continue;\n\n    const fields: string[] = [];\n    const stepType = s.type as StepType;\n\n    if (opts.stepTypeFilter && stepType !== opts.stepTypeFilter) {\n      continue;\n    }\n\n    const hasStepFilters =\n      opts.stepTypeFilter ||\n      opts.nameQuery ||\n      opts.toolQuery ||\n      opts.durationFilter ||\n      opts.statusFilter === \"error\" ||\n      opts.statusFilter === \"success\";\n\n    if (!hasStepFilters) continue;\n\n    if (opts.statusFilter === \"error\" && c.status === \"error\") {\n      fields.push(\"step.status\");\n    } else if (opts.statusFilter === \"success\" && c.status === \"success\") {\n      fields.push(\"step.status\");\n    } else if (opts.statusFilter === \"error\" || opts.statusFilter === \"success\") {\n      continue;\n    }\n\n    if (opts.nameQuery) {\n      if (!nameMatches(s.name, opts.nameQuery)) continue;\n      fields.push(\"step.name\");\n    }\n    if (opts.toolQuery) {\n      const toolName =\n        typeof s.metadata?.toolName === \"string\"\n          ? s.metadata.toolName\n          : s.name;\n      if (!nameMatches(toolName, opts.toolQuery)) continue;\n      fields.push(\"step.tool\");\n    }\n    if (opts.durationFilter) {\n      if (!durationMatches(c.durationMs, opts.durationFilter)) continue;\n      fields.push(\"step.durationMs\");\n    }\n    if (opts.stepTypeFilter) {\n      fields.push(\"step.type\");\n    }\n\n    if (fields.length === 0) continue;\n\n    out.push({\n      runId: m.runId,\n      runName: m.name,\n      runStatus: m.status,\n      stepId: c.stepId,\n      stepName: s.name,\n      stepType,\n      timestamp: s.startTime ?? s.timestamp,\n      durationMs: c.durationMs,\n      matchReason: `step match: ${fields.join(\", \")}`,\n      matchedFields: fields,\n      filePath: m.filePath,\n    });\n  }\n\n  return out;\n}\n\nexport async function loadTraceMetadataList(\n  _traceDir: string,\n  fileNames: string[],\n  getPath: (fileName: string) => string,\n): Promise<TraceMetadata[]> {\n  const metas: TraceMetadata[] = [];\n  for (const fileName of fileNames) {\n    try {\n      const filePath = getPath(fileName);\n      const meta = await extractMetadata(filePath);\n      metas.push(meta);\n    } catch {\n      /* skip */\n    }\n  }\n  return metas;\n}\n","import { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type {\n  EnrichSessionSummaryOptions,\n  SessionCheckSummary,\n  SessionLastError,\n  SessionRunRecord,\n  SessionStatus,\n  SessionSummary,\n} from \"./types.js\";\n\nconst DEFAULT_STALE_THRESHOLD_MS = 86_400_000;\n\nconst EXPLICIT_STATUS_PRIORITY: Record<string, number> = {\n  error: 5,\n  waiting_input: 4,\n  idle: 3,\n  stale: 2,\n  completed: 1,\n};\n\nconst EXPLICIT_SESSION_STATUSES = new Set<string>([\n  \"running\",\n  \"waiting_input\",\n  \"idle\",\n  \"completed\",\n  \"error\",\n  \"stale\",\n  \"unknown\",\n]);\n\nfunction isExplicitSessionStatus(value: unknown): value is SessionStatus {\n  return typeof value === \"string\" && EXPLICIT_SESSION_STATUSES.has(value);\n}\n\nfunction activityMs(run: SessionRunRecord): number {\n  return run.endedAt ?? run.startedAt ?? 0;\n}\n\nfunction latestActivityMs(runs: readonly SessionRunRecord[]): number {\n  let latest = 0;\n  for (const run of runs) {\n    const ms = activityMs(run);\n    if (ms > latest) latest = ms;\n  }\n  return latest;\n}\n\nfunction earliestStart(runs: readonly SessionRunRecord[]): number | undefined {\n  let earliest: number | undefined;\n  for (const run of runs) {\n    if (run.startedAt === undefined) continue;\n    if (earliest === undefined || run.startedAt < earliest) {\n      earliest = run.startedAt;\n    }\n  }\n  return earliest;\n}\n\nfunction latestEndWhenAllEnded(runs: readonly SessionRunRecord[]): number | undefined {\n  if (runs.length === 0) return undefined;\n  let latest: number | undefined;\n  for (const run of runs) {\n    if (run.endedAt === undefined) return undefined;\n    if (latest === undefined || run.endedAt > latest) latest = run.endedAt;\n  }\n  return latest;\n}\n\nfunction pickExplicitStatus(runs: readonly SessionRunRecord[]): SessionStatus | undefined {\n  let best: SessionStatus | undefined;\n  let bestPriority = 0;\n  for (const run of runs) {\n    const raw = run.metadata?.sessionStatus;\n    if (!isExplicitSessionStatus(raw)) continue;\n    const priority = EXPLICIT_STATUS_PRIORITY[raw] ?? 0;\n    if (priority > bestPriority) {\n      bestPriority = priority;\n      best = raw;\n    }\n  }\n  return best;\n}\n\nfunction deriveLastError(runs: readonly SessionRunRecord[]): SessionLastError | undefined {\n  const errorRuns = runs\n    .filter((run) => run.status === \"error\")\n    .sort((a, b) => activityMs(b) - activityMs(a));\n  const latest = errorRuns[0];\n  if (!latest) return undefined;\n\n  const meta = latest.metadata ?? {};\n  const message =\n    typeof meta.errorMessage === \"string\" && meta.errorMessage.trim() !== \"\"\n      ? meta.errorMessage.trim()\n      : (latest.name ?? latest.runId);\n  const code =\n    typeof meta.errorCode === \"string\" && meta.errorCode.trim() !== \"\"\n      ? meta.errorCode.trim()\n      : undefined;\n\n  return { runId: latest.runId, message, code };\n}\n\nfunction deriveCheckSummary(\n  runs: readonly SessionRunRecord[],\n): SessionCheckSummary | undefined {\n  let pass = 0;\n  let fail = 0;\n  let warn = 0;\n  let found = false;\n\n  for (const run of runs) {\n    const summary = run.metadata?.checkSummary;\n    if (!summary || typeof summary !== \"object\") continue;\n    const record = summary as Record<string, unknown>;\n    if (typeof record.pass === \"number\") {\n      pass += record.pass;\n      found = true;\n    }\n    if (typeof record.fail === \"number\") {\n      fail += record.fail;\n      found = true;\n    }\n    if (typeof record.warn === \"number\") {\n      warn += record.warn;\n      found = true;\n    }\n  }\n\n  return found ? { pass, fail, warn } : undefined;\n}\n\nfunction deriveObservationSummary(runs: readonly SessionRunRecord[]): string | undefined {\n  for (const run of [...runs].sort((a, b) => activityMs(b) - activityMs(a))) {\n    const value = run.metadata?.observationSummary;\n    if (typeof value === \"string\" && value.trim() !== \"\") {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\n/** Derives session status from run records per the v4.2 RFC (no timestamp-only causality). */\nexport function deriveSessionStatus(\n  runs: readonly SessionRunRecord[],\n  options: EnrichSessionSummaryOptions = {},\n): SessionStatus {\n  if (runs.length === 0) return \"unknown\";\n\n  if (runs.some((run) => run.status === \"running\")) return \"running\";\n\n  const explicit = pickExplicitStatus(runs);\n  if (explicit && explicit !== \"running\") return explicit;\n\n  if (runs.some((run) => run.status === \"error\")) return \"error\";\n\n  if (runs.every((run) => run.status === \"success\")) return \"completed\";\n\n  const nowMs = options.nowMs ?? Date.now();\n  const staleThresholdMs = options.staleThresholdMs ?? DEFAULT_STALE_THRESHOLD_MS;\n  const lastMs = latestActivityMs(runs);\n  if (lastMs > 0 && nowMs - lastMs > staleThresholdMs) return \"stale\";\n\n  return \"unknown\";\n}\n\n/**\n * Enriches a session summary with v4.2 derived fields (status, timing, errors).\n * Pure function; does not read trace files.\n */\nexport function enrichSessionSummary(\n  summary: Omit<\n    SessionSummary,\n    | \"status\"\n    | \"lastActivity\"\n    | \"retryCount\"\n    | \"startedAt\"\n    | \"endedAt\"\n    | \"durationMs\"\n    | \"correlationId\"\n    | \"jobId\"\n    | \"workflowId\"\n    | \"lastError\"\n    | \"observationSummary\"\n    | \"checkSummary\"\n  >,\n  runs: readonly SessionRunRecord[],\n  options: EnrichSessionSummaryOptions = {},\n): SessionSummary {\n  const sessionRuns = runs\n    .filter((run) => summary.runIds.includes(run.runId))\n    .sort((a, b) => a.runId.localeCompare(b.runId));\n\n  const startedAt = earliestStart(sessionRuns);\n  const endedAt = latestEndWhenAllEnded(sessionRuns);\n  const durationMs =\n    startedAt !== undefined && endedAt !== undefined ? endedAt - startedAt : undefined;\n\n  let correlationId: string | undefined;\n  let jobId: string | undefined;\n  let workflowId: string | undefined;\n  for (const run of sessionRuns) {\n    const meta = extractSessionWorkflowMetadata(run.metadata);\n    if (!correlationId && meta?.correlationId) correlationId = meta.correlationId;\n    if (!jobId && meta?.jobId) jobId = meta.jobId;\n    if (!workflowId && meta?.workflowName) workflowId = meta.workflowName;\n    else if (!workflowId && meta?.workflowStep) workflowId = meta.workflowStep;\n  }\n\n  const lastMs = latestActivityMs(sessionRuns);\n  const lastActivity =\n    lastMs > 0 ? new Date(lastMs).toISOString() : new Date(0).toISOString();\n\n  const retryCount = summary.retries.filter(\n    (retry) => retry.retryOf !== undefined || (retry.attempt ?? 0) > 1,\n  ).length;\n\n  return {\n    ...summary,\n    status: deriveSessionStatus(sessionRuns, options),\n    startedAt,\n    endedAt,\n    durationMs,\n    correlationId,\n    jobId,\n    workflowId,\n    lastError: deriveLastError(sessionRuns),\n    lastActivity,\n    retryCount,\n    observationSummary: deriveObservationSummary(sessionRuns),\n    checkSummary: deriveCheckSummary(sessionRuns),\n  };\n}\n","import type {\n  ActivityEntry,\n  ActivitySummary,\n  BuildActivitySummaryOptions,\n  SessionIndex,\n  SessionStatus,\n  SessionSummary,\n} from \"./types.js\";\n\nfunction statusLine(session: SessionSummary): string {\n  const name =\n    session.workflowId ??\n    session.correlationId ??\n    session.sessionId;\n  const status = session.status;\n  if (session.lastError) {\n    return `${name} session ${session.sessionId} failed at ${session.lastError.message}`;\n  }\n  if (session.observationSummary) {\n    return `${name} session ${session.sessionId} ${status} with observation warning`;\n  }\n  return `${name} session ${session.sessionId} ${status}`;\n}\n\nfunction parseSinceMs(since: string | undefined, nowMs: number): number {\n  if (!since || since.trim() === \"\") return nowMs - 7 * 86_400_000;\n  const trimmed = since.trim().toLowerCase();\n  const match = /^(\\d+)([smhd])$/.exec(trimmed);\n  if (!match) return nowMs - 7 * 86_400_000;\n  const amount = Number.parseInt(match[1]!, 10);\n  const unit = match[2];\n  const mult =\n    unit === \"s\" ? 1000 : unit === \"m\" ? 60_000 : unit === \"h\" ? 3_600_000 : 86_400_000;\n  return nowMs - amount * mult;\n}\n\nfunction isFailed(status: SessionStatus): boolean {\n  return status === \"error\";\n}\n\nfunction isStale(status: SessionStatus): boolean {\n  return status === \"stale\";\n}\n\nfunction guardrailWarnings(session: SessionSummary): number {\n  const summary = session.checkSummary;\n  if (!summary) return 0;\n  return summary.warn;\n}\n\n/**\n * Builds a deterministic activity summary from a session index (v4.2).\n * Read-only; does not mutate traces or invent relationships.\n */\nexport function buildActivitySummary(\n  index: SessionIndex,\n  options: BuildActivitySummaryOptions = {},\n): ActivitySummary {\n  const nowMs = options.nowMs ?? Date.now();\n  const sinceMs = parseSinceMs(options.since, nowMs);\n  const sinceIso = new Date(sinceMs).toISOString();\n  const limit =\n    Number.isInteger(options.limit) && options.limit! > 0 ? options.limit! : 20;\n\n  const inWindow = index.sessions.filter((session) => {\n    const activityMs = Date.parse(session.lastActivity);\n    return Number.isFinite(activityMs) && activityMs >= sinceMs;\n  });\n\n  const entries: ActivityEntry[] = [...inWindow]\n    .sort((a, b) => Date.parse(b.lastActivity) - Date.parse(a.lastActivity))\n    .slice(0, limit)\n    .map((session) => ({\n      sessionId: session.sessionId,\n      status: session.status,\n      summary: statusLine(session),\n      lastActivity: session.lastActivity,\n      runCount: session.runIds.length,\n    }));\n\n  let failed = 0;\n  let stale = 0;\n  let guardrailWarningTotal = 0;\n  for (const session of inWindow) {\n    if (isFailed(session.status)) failed += 1;\n    if (isStale(session.status)) stale += 1;\n    guardrailWarningTotal += guardrailWarnings(session);\n  }\n\n  return {\n    since: sinceIso,\n    sessions: inWindow.length,\n    failed,\n    stale,\n    guardrailWarnings: guardrailWarningTotal,\n    entries,\n  };\n}\n\n/** Renders a human activity summary for terminal output. */\nexport function renderActivitySummaryHuman(\n  summary: ActivitySummary,\n  options?: { nowMs?: number },\n): string {\n  const lines: string[] = [];\n  const nowMs = options?.nowMs ?? Date.now();\n  const todayStart = new Date(nowMs);\n  todayStart.setHours(0, 0, 0, 0);\n  const todayMs = todayStart.getTime();\n\n  const today = summary.entries.filter(\n    (entry) => Date.parse(entry.lastActivity) >= todayMs,\n  );\n  if (today.length > 0) {\n    lines.push(\"Today\");\n    for (const entry of today) {\n      lines.push(`  ${entry.summary}`);\n    }\n    lines.push(\"\");\n  }\n\n  lines.push(`Since ${summary.since}`);\n  lines.push(`  ${summary.sessions} sessions`);\n  lines.push(`  ${summary.failed} failed`);\n  lines.push(`  ${summary.stale} stale`);\n  lines.push(`  ${summary.guardrailWarnings} guardrail warnings`);\n\n  return lines.join(\"\\n\");\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\n/** Known session/workflow metadata keys (v2.4 RFC). */\nexport const SESSION_WORKFLOW_KEYS = [\n  \"sessionId\",\n  \"conversationId\",\n  \"groupId\",\n  \"parentGroupId\",\n  \"attempt\",\n  \"retryOf\",\n  \"retryReason\",\n  \"handoffFrom\",\n  \"handoffTo\",\n  \"subAgentId\",\n  \"subAgentName\",\n  \"jobId\",\n  \"queueName\",\n  \"workflowName\",\n  \"workflowStep\",\n  \"toolCallId\",\n  \"mcpToolCallId\",\n  \"linkedStepId\",\n  \"operationId\",\n  \"attemptId\",\n  \"attemptNumber\",\n  \"fallbackOf\",\n  \"idempotencyKey\",\n  \"correlationId\",\n  \"requestId\",\n  \"decisionId\",\n] as const;\n\nexport type SessionWorkflowKey = (typeof SESSION_WORKFLOW_KEYS)[number];\n\nexport type SessionConfidence = \"explicit\" | \"correlated\" | \"heuristic\" | \"unknown\";\n\nexport type SessionEdgeSource =\n  | \"manual\"\n  | \"adapter\"\n  | \"json-log\"\n  | \"log4js\"\n  | \"mcp-client\"\n  | \"inferred\";\n\nexport interface SessionWorkflowMetadata {\n  sessionId?: string;\n  conversationId?: string;\n  groupId?: string;\n  parentGroupId?: string;\n  attempt?: number;\n  retryOf?: string;\n  retryReason?: string;\n  handoffFrom?: string;\n  handoffTo?: string;\n  subAgentId?: string;\n  subAgentName?: string;\n  jobId?: string;\n  queueName?: string;\n  workflowName?: string;\n  workflowStep?: string;\n  toolCallId?: string;\n  mcpToolCallId?: string;\n  linkedStepId?: string;\n  operationId?: string;\n  attemptId?: string;\n  attemptNumber?: number;\n  fallbackOf?: string;\n  idempotencyKey?: string;\n  correlationId?: string;\n  requestId?: string;\n  decisionId?: string;\n}\n\nexport interface SessionRunRecord {\n  runId: string;\n  name?: string;\n  status?: TraceMetadataStatus;\n  startedAt?: number;\n  endedAt?: number;\n  durationMs?: number;\n  filePath?: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface SessionWarning {\n  code: string;\n  message: string;\n  runId?: string;\n  sessionId?: string;\n}\n\nexport interface HandoffEdge {\n  from: string;\n  to: string;\n  source: SessionEdgeSource;\n  confidence: SessionConfidence;\n}\n\nexport interface RetryLink {\n  runId: string;\n  retryOf?: string;\n  attempt?: number;\n  source: SessionEdgeSource;\n  confidence: SessionConfidence;\n}\n\nexport interface SessionGroup {\n  groupId: string;\n  parentGroupId?: string;\n  runIds: string[];\n}\n\nexport interface CriticalPathStep {\n  runId: string;\n  name?: string;\n  startedAt?: number;\n  durationMs?: number;\n  source: SessionEdgeSource;\n  confidence: SessionConfidence;\n}\n\n/** Session lifecycle status (v4.2 RFC). */\nexport type SessionStatus =\n  | \"running\"\n  | \"waiting_input\"\n  | \"idle\"\n  | \"completed\"\n  | \"error\"\n  | \"stale\"\n  | \"unknown\";\n\nexport interface SessionLastError {\n  runId: string;\n  message: string;\n  code?: string;\n}\n\nexport interface SessionCheckSummary {\n  pass: number;\n  fail: number;\n  warn: number;\n}\n\nexport interface EnrichSessionSummaryOptions {\n  /** Reference clock for staleness (default Date.now()). */\n  nowMs?: number;\n  /** Inactivity threshold before marking a session stale (default 24h). */\n  staleThresholdMs?: number;\n}\n\nexport interface ActivityEntry {\n  sessionId: string;\n  status: SessionStatus;\n  summary: string;\n  lastActivity: string;\n  runCount: number;\n}\n\nexport interface ActivitySummary {\n  since: string;\n  sessions: number;\n  failed: number;\n  stale: number;\n  guardrailWarnings: number;\n  entries: ActivityEntry[];\n}\n\nexport interface BuildActivitySummaryOptions {\n  /** Duration window (e.g. 7d, 24h). Default 7d. */\n  since?: string;\n  /** Reference clock (default Date.now()). */\n  nowMs?: number;\n  /** Max entries returned (default 20). */\n  limit?: number;\n}\n\nexport interface SessionSummary {\n  sessionId: string;\n  runIds: string[];\n  groups: SessionGroup[];\n  handoffs: HandoffEdge[];\n  retries: RetryLink[];\n  criticalPath: CriticalPathStep[];\n  /** Derived session status (v4.2+). */\n  status: SessionStatus;\n  /** Earliest run start time in the session. */\n  startedAt?: number;\n  /** Latest run end time when all runs have ended. */\n  endedAt?: number;\n  /** endedAt - startedAt when both are present. */\n  durationMs?: number;\n  correlationId?: string;\n  jobId?: string;\n  workflowId?: string;\n  lastError?: SessionLastError;\n  /** ISO-8601 timestamp of the most recent run activity. */\n  lastActivity: string;\n  retryCount: number;\n  observationSummary?: string;\n  checkSummary?: SessionCheckSummary;\n}\n\nexport interface SessionIndex {\n  runs: SessionRunRecord[];\n  sessions: SessionSummary[];\n  unscopedRunIds: string[];\n  warnings: SessionWarning[];\n}\n\nexport interface BuildSessionIndexOptions {\n  /** When true, group runs that share only `groupId` under a synthetic session key. */\n  correlateByGroupId?: boolean;\n  /** Reference clock for session staleness (v4.2+). */\n  nowMs?: number;\n  /** Inactivity threshold before marking a session stale (v4.2+, default 24h). */\n  staleThresholdMs?: number;\n}\n","import { readTraceEventsFromFile } from \"../storage.js\";\nimport type { TraceMetadata } from \"../types.js\";\nimport type { SessionRunRecord } from \"./types.js\";\n\n/** Enriches trace metadata with run_started metadata for session indexing. */\nexport async function enrichSessionRunRecord(\n  meta: TraceMetadata,\n): Promise<SessionRunRecord> {\n  let metadata: Record<string, unknown> | undefined;\n  try {\n    const events = await readTraceEventsFromFile(meta.filePath);\n    for (const event of events) {\n      if (event.event !== \"run_started\") continue;\n      if (event.metadata && typeof event.metadata === \"object\") {\n        metadata = event.metadata as Record<string, unknown>;\n      }\n      break;\n    }\n  } catch {\n    /* skip */\n  }\n\n  return {\n    runId: meta.runId,\n    name: meta.name,\n    status: meta.status,\n    startedAt: meta.startedAt,\n    endedAt: meta.endedAt,\n    durationMs: meta.durationMs,\n    filePath: meta.filePath,\n    metadata,\n  };\n}\n\n/** Builds session run records from extracted trace metadata rows. */\nexport async function loadSessionRunRecords(\n  metas: readonly TraceMetadata[],\n): Promise<SessionRunRecord[]> {\n  const out: SessionRunRecord[] = [];\n  for (const meta of metas) {\n    out.push(await enrichSessionRunRecord(meta));\n  }\n  return out;\n}\n","import type { TraceMetadata } from \"../types.js\";\nimport { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { SessionRunRecord, SessionWarning } from \"./types.js\";\n\nexport interface SessionScopeOptions {\n  sessionId?: string;\n  groupId?: string;\n  correlateByGroupId?: boolean;\n}\n\nexport interface SessionScopeResult {\n  metas: TraceMetadata[];\n  scopeLabel: string;\n  scopeKind: \"session\" | \"group\";\n  runIds: string[];\n  warnings: SessionWarning[];\n  notFound: boolean;\n}\n\nfunction metaToSessionRunRecord(meta: TraceMetadata): SessionRunRecord {\n  return {\n    runId: meta.runId,\n    name: meta.name,\n    status: meta.status,\n    startedAt: meta.startedAt,\n    endedAt: meta.endedAt,\n    durationMs: meta.durationMs,\n    filePath: meta.filePath,\n    metadata: undefined,\n  };\n}\n\n/** Filters trace metadata rows to runs in a session or group scope. */\nexport function filterMetasBySessionScope(\n  metas: readonly TraceMetadata[],\n  records: readonly SessionRunRecord[],\n  options: SessionScopeOptions,\n): SessionScopeResult {\n  const sessionId = options.sessionId?.trim();\n  const groupId = options.groupId?.trim();\n  const warnings: SessionWarning[] = [];\n\n  if (sessionId) {\n    const index = buildSessionIndex(records, {\n      correlateByGroupId: options.correlateByGroupId === true,\n    });\n    warnings.push(...index.warnings);\n    const session = index.sessions.find((item) => item.sessionId === sessionId);\n    if (!session) {\n      return {\n        metas: [],\n        scopeLabel: sessionId,\n        scopeKind: \"session\",\n        runIds: [],\n        warnings,\n        notFound: true,\n      };\n    }\n    const runIdSet = new Set(session.runIds);\n    const filtered = metas.filter((meta) => runIdSet.has(meta.runId));\n    return {\n      metas: filtered,\n      scopeLabel: sessionId,\n      scopeKind: \"session\",\n      runIds: session.runIds,\n      warnings,\n      notFound: false,\n    };\n  }\n\n  if (groupId) {\n    const runIds = records\n      .filter((run) => extractSessionWorkflowMetadata(run.metadata)?.groupId === groupId)\n      .map((run) => run.runId)\n      .sort();\n    if (runIds.length === 0) {\n      return {\n        metas: [],\n        scopeLabel: groupId,\n        scopeKind: \"group\",\n        runIds: [],\n        warnings,\n        notFound: true,\n      };\n    }\n    const runIdSet = new Set(runIds);\n    return {\n      metas: metas.filter((meta) => runIdSet.has(meta.runId)),\n      scopeLabel: groupId,\n      scopeKind: \"group\",\n      runIds,\n      warnings,\n      notFound: false,\n    };\n  }\n\n  return {\n    metas: [...metas],\n    scopeLabel: \"\",\n    scopeKind: \"session\",\n    runIds: [],\n    warnings,\n    notFound: false,\n  };\n}\n\n/** Lightweight metadata rows for scope resolution when run_started metadata is absent. */\nexport function traceMetasToSessionRunRecords(\n  metas: readonly TraceMetadata[],\n): SessionRunRecord[] {\n  return metas.map(metaToSessionRunRecord);\n}\n","import { buildSessionIndex } from \"./index.js\";\nimport { extractSessionWorkflowMetadata } from \"./metadata.js\";\nimport type { BuildSessionIndexOptions, SessionRunRecord } from \"./types.js\";\n\nexport type SessionCohortKind = \"session\" | \"group\";\n\nexport interface SessionCohort {\n  key: string;\n  kind: SessionCohortKind;\n  runIds: string[];\n}\n\nexport interface GroupSessionCohortsOptions extends BuildSessionIndexOptions {\n  groupBy?: \"session\" | \"group\";\n}\n\n/**\n * Groups runs into session or group cohort buckets for local search/check aggregation.\n * Deterministic; does not infer causality from timestamps.\n */\nexport function groupSessionCohorts(\n  runs: readonly SessionRunRecord[],\n  options: GroupSessionCohortsOptions = {},\n): SessionCohort[] {\n  const groupBy = options.groupBy ?? \"session\";\n  const cohorts: SessionCohort[] = [];\n\n  if (groupBy === \"session\") {\n    const index = buildSessionIndex(runs, options);\n    for (const session of index.sessions) {\n      cohorts.push({\n        key: session.sessionId,\n        kind: \"session\",\n        runIds: [...session.runIds],\n      });\n    }\n    if (index.unscopedRunIds.length > 0) {\n      cohorts.push({\n        key: \"__unscoped__\",\n        kind: \"session\",\n        runIds: [...index.unscopedRunIds],\n      });\n    }\n    return cohorts.sort((a, b) => a.key.localeCompare(b.key));\n  }\n\n  const byGroup = new Map<string, string[]>();\n  const unscoped: string[] = [];\n\n  for (const run of runs) {\n    const groupId = extractSessionWorkflowMetadata(run.metadata)?.groupId;\n    if (!groupId) {\n      unscoped.push(run.runId);\n      continue;\n    }\n    const bucket = byGroup.get(groupId) ?? [];\n    bucket.push(run.runId);\n    byGroup.set(groupId, bucket);\n  }\n\n  for (const [key, runIds] of [...byGroup.entries()].sort(([a], [b]) =>\n    a.localeCompare(b),\n  )) {\n    cohorts.push({\n      key,\n      kind: \"group\",\n      runIds: runIds.sort(),\n    });\n  }\n\n  if (unscoped.length > 0) {\n    cohorts.push({\n      key: \"__unscoped__\",\n      kind: \"group\",\n      runIds: unscoped.sort(),\n    });\n  }\n\n  return cohorts;\n}\n","import type {\n  TraceCheckDiagnostic,\n  TraceCheckFinding,\n  TraceCheckResult,\n  TraceCheckRuleExecution,\n  TraceCheckStatus,\n  TraceCheckSummary,\n} from \"../checks/index.js\";\nimport type { SessionWarning } from \"./types.js\";\n\nexport interface TraceSessionCheckResult extends TraceCheckResult {\n  scopeKind: \"session\" | \"group\";\n  scopeLabel: string;\n  runIds: string[];\n  runResults: Array<{ runId: string; status: TraceCheckStatus }>;\n  sessionWarnings?: SessionWarning[];\n}\n\nfunction emptySummary(): TraceCheckSummary {\n  return { passed: 0, failed: 0, warnings: 0, errors: 0, rulesEvaluated: 0 };\n}\n\nfunction mergeSummary(\n  target: TraceCheckSummary,\n  source: TraceCheckSummary,\n): TraceCheckSummary {\n  return {\n    passed: target.passed + source.passed,\n    failed: target.failed + source.failed,\n    warnings: target.warnings + source.warnings,\n    errors: target.errors + source.errors,\n    rulesEvaluated: target.rulesEvaluated + source.rulesEvaluated,\n  };\n}\n\nfunction sessionDiagnostic(\n  code: \"AI_CHECK_INVALID_ARGUMENTS\" | \"AI_CHECK_TRACE_UNREADABLE\",\n  message: string,\n): TraceCheckDiagnostic {\n  return { code, message, severity: \"error\" };\n}\n\n/** Aggregates per-run check results for a session or group scope. */\nexport function aggregateSessionCheckResults(\n  perRun: readonly TraceCheckResult[],\n  scope: {\n    scopeKind: \"session\" | \"group\";\n    scopeLabel: string;\n    runIds: string[];\n    sessionWarnings?: SessionWarning[];\n    notFound?: boolean;\n    empty?: boolean;\n  },\n): TraceSessionCheckResult {\n  if (scope.notFound) {\n    return {\n      ok: false,\n      status: \"error\",\n      format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n      scopeKind: scope.scopeKind,\n      scopeLabel: scope.scopeLabel,\n      runIds: [],\n      runResults: [],\n      summary: { ...emptySummary(), errors: 1 },\n      findings: [],\n      diagnostics: [\n        sessionDiagnostic(\n          \"AI_CHECK_INVALID_ARGUMENTS\",\n          `${scope.scopeKind} not found: ${scope.scopeLabel}`,\n        ),\n      ],\n      ruleExecutions: [],\n      ...(scope.sessionWarnings?.length\n        ? { sessionWarnings: [...scope.sessionWarnings] }\n        : {}),\n    };\n  }\n\n  if (scope.empty || perRun.length === 0) {\n    return {\n      ok: false,\n      status: \"error\",\n      format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n      scopeKind: scope.scopeKind,\n      scopeLabel: scope.scopeLabel,\n      runIds: scope.runIds,\n      runResults: [],\n      summary: { ...emptySummary(), errors: 1 },\n      findings: [],\n      diagnostics: [\n        sessionDiagnostic(\n          \"AI_CHECK_TRACE_UNREADABLE\",\n          `No readable traces in ${scope.scopeKind}: ${scope.scopeLabel}`,\n        ),\n      ],\n      ruleExecutions: [],\n      ...(scope.sessionWarnings?.length\n        ? { sessionWarnings: [...scope.sessionWarnings] }\n        : {}),\n    };\n  }\n\n  let summary = emptySummary();\n  const findings: TraceCheckFinding[] = [];\n  const diagnostics: TraceCheckDiagnostic[] = [];\n  const ruleExecutions: TraceCheckRuleExecution[] = [];\n  const runResults: Array<{ runId: string; status: TraceCheckStatus }> = [];\n\n  for (const result of perRun) {\n    summary = mergeSummary(summary, result.summary);\n    findings.push(...result.findings);\n    diagnostics.push(...result.diagnostics);\n    ruleExecutions.push(...(result.ruleExecutions ?? []));\n    if (result.runId) {\n      runResults.push({ runId: result.runId, status: result.status });\n    }\n  }\n\n  runResults.sort((a, b) => a.runId.localeCompare(b.runId));\n  findings.sort((a, b) => {\n    const runCmp = (a.evidence[0]?.runId ?? \"\").localeCompare(\n      b.evidence[0]?.runId ?? \"\",\n    );\n    if (runCmp !== 0) return runCmp;\n    return a.ruleId.localeCompare(b.ruleId);\n  });\n  ruleExecutions.sort((a, b) => {\n    const runCmp = (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n    if (runCmp !== 0) return runCmp;\n    return a.ruleId.localeCompare(b.ruleId);\n  });\n\n  const hasErrors = diagnostics.some((item) => item.severity === \"error\");\n  const status: TraceCheckStatus = hasErrors\n    ? \"error\"\n    : summary.failed > 0\n      ? \"fail\"\n      : \"pass\";\n\n  return {\n    ok: status === \"pass\",\n    status,\n    format: perRun[0]?.format ?? \"agent-inspect-jsonl\",\n    scopeKind: scope.scopeKind,\n    scopeLabel: scope.scopeLabel,\n    runIds: scope.runIds,\n    runResults,\n    summary,\n    findings,\n    diagnostics,\n    ruleExecutions,\n    ...(scope.sessionWarnings?.length\n      ? { sessionWarnings: [...scope.sessionWarnings] }\n      : {}),\n  };\n}\n","import {\n  extractSessionWorkflowMetadata,\n  sessionKeyForRun,\n} from \"./metadata.js\";\nimport { enrichSessionSummary } from \"./status.js\";\nimport type {\n  BuildSessionIndexOptions,\n  CriticalPathStep,\n  HandoffEdge,\n  RetryLink,\n  SessionGroup,\n  SessionIndex,\n  SessionRunRecord,\n  SessionSummary,\n  SessionWarning,\n  SessionWorkflowMetadata,\n} from \"./types.js\";\n\nfunction compareRuns(a: SessionRunRecord, b: SessionRunRecord): number {\n  const aStart = a.startedAt ?? 0;\n  const bStart = b.startedAt ?? 0;\n  if (aStart !== bStart) return aStart - bStart;\n  return a.runId.localeCompare(b.runId);\n}\n\nfunction buildGroups(\n  runIds: string[],\n  metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n): SessionGroup[] {\n  const byGroup = new Map<string, SessionGroup>();\n\n  for (const runId of runIds) {\n    const groupId = metaByRunId.get(runId)?.groupId;\n    if (!groupId) continue;\n    const existing = byGroup.get(groupId);\n    if (existing) {\n      existing.runIds.push(runId);\n    } else {\n      byGroup.set(groupId, {\n        groupId,\n        parentGroupId: metaByRunId.get(runId)?.parentGroupId,\n        runIds: [runId],\n      });\n    }\n  }\n\n  return [...byGroup.values()].map((group) => ({\n    ...group,\n    runIds: [...group.runIds].sort((a, b) => a.localeCompare(b)),\n  }));\n}\n\nfunction buildHandoffs(\n  runIds: string[],\n  metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n  warnings: SessionWarning[],\n  sessionId: string,\n): HandoffEdge[] {\n  const edges: HandoffEdge[] = [];\n  const seen = new Set<string>();\n\n  const pushEdge = (edge: HandoffEdge): void => {\n    const key = `${edge.from}->${edge.to}:${edge.confidence}`;\n    if (seen.has(key)) return;\n    seen.add(key);\n    edges.push(edge);\n  };\n\n  for (const runId of runIds) {\n    const meta = metaByRunId.get(runId);\n    if (!meta) continue;\n\n    if (meta.handoffFrom && meta.handoffTo) {\n      pushEdge({\n        from: meta.handoffFrom,\n        to: meta.handoffTo,\n        source: \"manual\",\n        confidence: \"explicit\",\n      });\n      continue;\n    }\n\n    if (meta.handoffFrom) {\n      pushEdge({\n        from: meta.handoffFrom,\n        to: runId,\n        source: \"manual\",\n        confidence: \"explicit\",\n      });\n    }\n\n    if (meta.handoffTo) {\n      pushEdge({\n        from: runId,\n        to: meta.handoffTo,\n        source: \"manual\",\n        confidence: \"explicit\",\n      });\n    }\n\n    if (\n      meta.subAgentId &&\n      meta.parentGroupId &&\n      !meta.handoffFrom &&\n      !meta.handoffTo\n    ) {\n      pushEdge({\n        from: meta.parentGroupId,\n        to: meta.subAgentId,\n        source: \"inferred\",\n        confidence: \"correlated\",\n      });\n      warnings.push({\n        code: \"ambiguous-handoff-endpoints\",\n        message:\n          \"Handoff inferred from parentGroupId and subAgentId without explicit handoffFrom/handoffTo.\",\n        runId,\n        sessionId,\n      });\n    }\n  }\n\n  return edges.sort((a, b) => {\n    const from = a.from.localeCompare(b.from);\n    if (from !== 0) return from;\n    return a.to.localeCompare(b.to);\n  });\n}\n\nfunction buildRetries(\n  runIds: string[],\n  metaByRunId: Map<string, SessionWorkflowMetadata | undefined>,\n  warnings: SessionWarning[],\n  sessionId: string,\n): RetryLink[] {\n  const retries: RetryLink[] = [];\n\n  for (const runId of runIds) {\n    const meta = metaByRunId.get(runId);\n    if (!meta) continue;\n\n    if (meta.retryOf) {\n      retries.push({\n        runId,\n        retryOf: meta.retryOf,\n        attempt: meta.attempt,\n        source: \"manual\",\n        confidence: \"explicit\",\n      });\n      continue;\n    }\n\n    if (meta.attempt !== undefined && meta.attempt > 1) {\n      retries.push({\n        runId,\n        attempt: meta.attempt,\n        source: \"inferred\",\n        confidence: \"correlated\",\n      });\n      warnings.push({\n        code: \"ambiguous-retry-link\",\n        message: \"attempt > 1 without retryOf; retry link is correlated only.\",\n        runId,\n        sessionId,\n      });\n    }\n  }\n\n  return retries.sort((a, b) => a.runId.localeCompare(b.runId));\n}\n\nfunction buildCriticalPath(\n  runs: SessionRunRecord[],\n  handoffs: HandoffEdge[],\n): CriticalPathStep[] {\n  const runById = new Map(runs.map((run) => [run.runId, run]));\n  const explicitTargets = new Set(\n    handoffs\n      .filter((edge) => edge.confidence === \"explicit\")\n      .map((edge) => edge.to),\n  );\n  const explicitSources = new Set(\n    handoffs\n      .filter((edge) => edge.confidence === \"explicit\")\n      .map((edge) => edge.from),\n  );\n\n  const ordered = [...runs].sort(compareRuns);\n  const path: CriticalPathStep[] = [];\n  const visited = new Set<string>();\n\n  const pushRun = (\n    run: SessionRunRecord,\n    confidence: CriticalPathStep[\"confidence\"],\n    source: CriticalPathStep[\"source\"],\n  ): void => {\n    if (visited.has(run.runId)) return;\n    visited.add(run.runId);\n    path.push({\n      runId: run.runId,\n      name: run.name,\n      startedAt: run.startedAt,\n      durationMs: run.durationMs,\n      confidence,\n      source,\n    });\n  };\n\n  for (const edge of handoffs) {\n    if (edge.confidence !== \"explicit\") continue;\n    const fromRun = [...runById.values()].find(\n      (run) =>\n        run.runId === edge.from ||\n        metaRunIdMatches(run, edge.from, runById),\n    );\n    const toRun = [...runById.values()].find(\n      (run) =>\n        run.runId === edge.to || metaRunIdMatches(run, edge.to, runById),\n    );\n    if (fromRun) pushRun(fromRun, \"explicit\", \"manual\");\n    if (toRun) pushRun(toRun, \"explicit\", \"manual\");\n  }\n\n  for (const run of ordered) {\n    if (visited.has(run.runId)) continue;\n    const confidence =\n      explicitTargets.has(run.runId) || explicitSources.has(run.runId)\n        ? \"explicit\"\n        : \"correlated\";\n    pushRun(run, confidence, confidence === \"explicit\" ? \"manual\" : \"inferred\");\n  }\n\n  return path;\n}\n\nfunction metaRunIdMatches(\n  run: SessionRunRecord,\n  token: string,\n  runById: Map<string, SessionRunRecord>,\n): boolean {\n  const meta = extractSessionWorkflowMetadata(run.metadata);\n  return (\n    meta?.subAgentId === token ||\n    meta?.groupId === token ||\n    runById.has(token)\n  );\n}\n\n/**\n * Builds a deterministic session index from local run records and metadata.\n * Does not read files or infer causality from timestamps alone.\n */\nexport function buildSessionIndex(\n  inputRuns: readonly SessionRunRecord[],\n  options: BuildSessionIndexOptions = {},\n): SessionIndex {\n  const warnings: SessionWarning[] = [];\n  const runs = [...inputRuns].sort(compareRuns);\n  const metaByRunId = new Map<string, SessionWorkflowMetadata | undefined>();\n\n  for (const run of runs) {\n    metaByRunId.set(run.runId, extractSessionWorkflowMetadata(run.metadata));\n  }\n\n  const sessionsByKey = new Map<string, SessionRunRecord[]>();\n  const unscopedRunIds: string[] = [];\n\n  for (const run of runs) {\n    const meta = metaByRunId.get(run.runId);\n    const key = sessionKeyForRun(meta, {\n      correlateByGroupId: options.correlateByGroupId === true,\n    });\n    if (!key) {\n      unscopedRunIds.push(run.runId);\n      continue;\n    }\n    const bucket = sessionsByKey.get(key) ?? [];\n    bucket.push(run);\n    sessionsByKey.set(key, bucket);\n  }\n\n  const sessions: SessionSummary[] = [...sessionsByKey.entries()]\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([sessionId, sessionRuns]) => {\n      const runIds = sessionRuns.map((run) => run.runId).sort();\n      const handoffs = buildHandoffs(runIds, metaByRunId, warnings, sessionId);\n      const retries = buildRetries(runIds, metaByRunId, warnings, sessionId);\n      const groups = buildGroups(runIds, metaByRunId);\n      const criticalPath = buildCriticalPath(sessionRuns, handoffs);\n\n      const confidences = new Set(handoffs.map((edge) => edge.confidence));\n      if (confidences.has(\"explicit\") && confidences.has(\"correlated\")) {\n        warnings.push({\n          code: \"mixed-confidence-group\",\n          message: \"Session aggregates explicit and correlated handoff edges.\",\n          sessionId,\n        });\n      }\n\n      return enrichSessionSummary(\n        {\n          sessionId,\n          runIds,\n          groups,\n          handoffs,\n          retries,\n          criticalPath,\n        },\n        runs,\n        {\n          nowMs: options.nowMs,\n          staleThresholdMs: options.staleThresholdMs,\n        },\n      );\n    });\n\n  if (sessions.length === 0 && runs.length > 0) {\n    warnings.push({\n      code: \"missing-session-id\",\n      message: \"No sessionId (or correlated groupId) found on input runs.\",\n    });\n  }\n\n  warnings.sort((a, b) => {\n    const code = a.code.localeCompare(b.code);\n    if (code !== 0) return code;\n    return (a.runId ?? \"\").localeCompare(b.runId ?? \"\");\n  });\n\n  return {\n    runs,\n    sessions,\n    unscopedRunIds: unscopedRunIds.sort(),\n    warnings,\n  };\n}\n\nexport { extractSessionWorkflowMetadata, sessionKeyForRun } from \"./metadata.js\";\nexport { deriveSessionStatus, enrichSessionSummary } from \"./status.js\";\nexport {\n  buildActivitySummary,\n  renderActivitySummaryHuman,\n} from \"./activity.js\";\nexport type {\n  ActivityEntry,\n  ActivitySummary,\n  BuildActivitySummaryOptions,\n  BuildSessionIndexOptions,\n  CriticalPathStep,\n  EnrichSessionSummaryOptions,\n  HandoffEdge,\n  RetryLink,\n  SessionCheckSummary,\n  SessionConfidence,\n  SessionEdgeSource,\n  SessionGroup,\n  SessionIndex,\n  SessionLastError,\n  SessionRunRecord,\n  SessionStatus,\n  SessionSummary,\n  SessionWarning,\n  SessionWorkflowMetadata,\n  SessionWorkflowKey,\n} from \"./types.js\";\nexport { SESSION_WORKFLOW_KEYS } from \"./types.js\";\nexport { enrichSessionRunRecord, loadSessionRunRecords } from \"./load.js\";\nexport {\n  filterMetasBySessionScope,\n  traceMetasToSessionRunRecords,\n  type SessionScopeOptions,\n  type SessionScopeResult,\n} from \"./scope.js\";\nexport {\n  groupSessionCohorts,\n  type GroupSessionCohortsOptions,\n  type SessionCohort,\n  type SessionCohortKind,\n} from \"./cohort.js\";\nexport {\n  aggregateSessionCheckResults,\n  type TraceSessionCheckResult,\n} from \"./checks.js\";\n","import { createReadStream } from \"node:fs\";\nimport { createInterface } from \"node:readline\";\n\nimport { isTraceEvent } from \"./types.js\";\n\nconst KNOWN_EVENTS = new Set([\n  \"run_started\",\n  \"run_completed\",\n  \"step_started\",\n  \"step_completed\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction safeParse(line: string): unknown | undefined {\n  try {\n    return JSON.parse(line) as unknown;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Safety check for cleanup workflows: returns true only when the file appears to be an AgentInspect trace.\n * This should be conservative: false positives are more dangerous than false negatives.\n */\nexport async function isAgentInspectTrace(filePath: string): Promise<boolean> {\n  try {\n    const rl = createInterface({\n      input: createReadStream(filePath, { encoding: \"utf8\" }),\n      crlfDelay: Infinity,\n    });\n\n    let checked = 0;\n    for await (const line of rl) {\n      const trimmed = line.trim();\n      if (trimmed === \"\") continue;\n      const parsed = safeParse(trimmed);\n      if (!parsed) continue;\n      if (!isRecord(parsed)) continue;\n\n      checked += 1;\n\n      // Strong signal: a valid TraceEvent (schemaVersion 0.1 + known shape).\n      if (isTraceEvent(parsed)) return true;\n\n      // Secondary signal: recognizable event name + runId.\n      const ev = parsed.event;\n      const runId = parsed.runId;\n      if (typeof ev === \"string\" && KNOWN_EVENTS.has(ev) && typeof runId === \"string\") {\n        return true;\n      }\n\n      // If we found valid JSON objects but none look like AgentInspect, keep scanning a bit.\n      if (checked >= 20) break;\n    }\n\n    return false;\n  } catch {\n    return false;\n  }\n}\n\n","import { parseDuration } from \"../utils/duration.js\";\nimport type { SessionIndex, SessionRunRecord } from \"../sessions/types.js\";\nimport type { BundleResolveOptions, BundleResolveResult } from \"./types.js\";\n\nfunction parseSinceCutoff(since: string): number {\n  const trimmed = since.trim();\n  if (trimmed === \"\") {\n    throw new Error(\"--since requires a non-empty duration (e.g. 24h, 7d).\");\n  }\n  return Date.now() - parseDuration(trimmed);\n}\n\nfunction runActivityMs(run: SessionRunRecord): number | undefined {\n  if (run.startedAt !== undefined && Number.isFinite(run.startedAt)) return run.startedAt;\n  if (run.endedAt !== undefined && Number.isFinite(run.endedAt)) return run.endedAt;\n  return undefined;\n}\n\nfunction runsInSinceWindow(\n  runs: readonly SessionRunRecord[],\n  since: string,\n): string[] {\n  const cutoff = parseSinceCutoff(since);\n  const ids: string[] = [];\n  for (const run of runs) {\n    const activity = runActivityMs(run);\n    if (activity !== undefined && activity >= cutoff) {\n      ids.push(run.runId);\n    }\n  }\n  return ids.sort((a, b) => a.localeCompare(b));\n}\n\nfunction findSession(index: SessionIndex, sessionId: string) {\n  return index.sessions.find((session) => session.sessionId === sessionId);\n}\n\n/**\n * Resolves which run ids belong in a bundle.\n *\n * @throws when target mode is missing, ambiguous, or yields zero runs.\n */\nexport function resolveBundleRunIds(\n  index: SessionIndex,\n  runs: readonly SessionRunRecord[],\n  options: BundleResolveOptions,\n): BundleResolveResult {\n  const runId = options.runId?.trim();\n  const sessionId = options.sessionId?.trim();\n  const since = options.since?.trim();\n\n  const modes = [runId ? 1 : 0, sessionId ? 1 : 0, since ? 1 : 0].reduce((a, b) => a + b, 0);\n  if (modes === 0) {\n    throw new Error(\n      \"bundle requires a run id, --session <sessionId>, or --since <duration>.\",\n    );\n  }\n  if (modes > 1) {\n    throw new Error(\n      \"bundle accepts only one target: a run id, --session, or --since (not combined).\",\n    );\n  }\n\n  if (runId) {\n    const known = runs.some((run) => run.runId === runId);\n    if (!known) {\n      throw new Error(`Run \"${runId}\" was not found in the trace directory.`);\n    }\n    return { runIds: [runId] };\n  }\n\n  if (sessionId) {\n    const session = findSession(index, sessionId);\n    if (!session) {\n      throw new Error(`Session \"${sessionId}\" was not found.`);\n    }\n    if (session.runIds.length === 0) {\n      throw new Error(`Session \"${sessionId}\" has no runs to bundle.`);\n    }\n    return {\n      runIds: [...session.runIds].sort((a, b) => a.localeCompare(b)),\n      sessionId,\n    };\n  }\n\n  const runIds = runsInSinceWindow(runs, since!);\n  if (runIds.length === 0) {\n    throw new Error(`No runs matched --since ${since}.`);\n  }\n  return { runIds, since };\n}\n","import type { BundleSafeStatus, BundleSafeStatusMetadata } from \"./types.js\";\n\nexport function aggregateBundleSafeStatus(statuses: readonly BundleSafeStatus[]): BundleSafeStatus {\n  if (statuses.length === 0) return \"UNKNOWN\";\n  if (statuses.some((status) => status === \"UNSAFE\")) return \"UNSAFE\";\n  if (statuses.some((status) => status === \"UNKNOWN\")) return \"UNKNOWN\";\n  if (statuses.some((status) => status === \"SAFE WITH WARNINGS\")) return \"SAFE WITH WARNINGS\";\n  return \"SAFE\";\n}\n\nexport function toMetadataSafeStatus(status: BundleSafeStatus): BundleSafeStatusMetadata {\n  if (status === \"SAFE WITH WARNINGS\") return \"SAFE_WITH_WARNINGS\";\n  return status;\n}\n\nexport function bundleFailsOnSafety(\n  status: BundleSafeStatus,\n  allowUnsafe: boolean,\n): boolean {\n  if (allowUnsafe) return false;\n  return status === \"UNSAFE\" || status === \"UNKNOWN\";\n}\n","import { aggregateBundleSafeStatus, toMetadataSafeStatus } from \"./safety-status.js\";\nimport type {\n  BundleCheckResults,\n  BundleMetadata,\n  BundlePlaceholderArtifact,\n  BundleRedactionProfile,\n  BundleResolveResult,\n} from \"./types.js\";\n\nconst BUNDLE_NOTE =\n  \"Generated locally by AgentInspect. Bundles are derived copies for review — not compliance or security certification. Review before sharing.\";\n\nconst PLACEHOLDER_NOTE =\n  \"No eval or performance artifacts were requested for this bundle.\";\n\nexport function buildBundleMetadata(parts: {\n  agentInspectVersion: string;\n  profile: BundleRedactionProfile;\n  resolve: BundleResolveResult;\n  checks: BundleCheckResults;\n  files: string[];\n  createdAt?: string;\n}): BundleMetadata {\n  const aggregate = aggregateBundleSafeStatus(\n    parts.checks.runs.map((run) => run.status),\n  );\n  return {\n    createdAt: parts.createdAt ?? new Date().toISOString(),\n    agentInspectVersion: parts.agentInspectVersion,\n    redactionProfile: parts.profile,\n    sourceTraceCount: parts.resolve.runIds.length,\n    runIds: [...parts.resolve.runIds],\n    safeStatus: toMetadataSafeStatus(aggregate),\n    files: [...parts.files].sort((a, b) => a.localeCompare(b)),\n    note: BUNDLE_NOTE,\n    ...(parts.resolve.sessionId !== undefined ? { sessionId: parts.resolve.sessionId } : {}),\n    ...(parts.resolve.since !== undefined ? { since: parts.resolve.since } : {}),\n  };\n}\n\nexport function buildPlaceholderArtifact(): BundlePlaceholderArtifact {\n  return {\n    status: \"not_requested\",\n    note: PLACEHOLDER_NOTE,\n  };\n}\n","import type { BundleCheckResults, BundleMetadata, BundleRedactionReport } from \"./types.js\";\n\nfunction markdownTable(rows: readonly [string, string | number | undefined][]): string {\n  const lines = [\"| Field | Value |\", \"| --- | --- |\"];\n  for (const [key, value] of rows) {\n    lines.push(`| ${key} | ${value ?? \"unknown\"} |`);\n  }\n  return lines.join(\"\\n\");\n}\n\n/**\n * Builds a human-readable bundle summary for `summary.md`.\n */\nexport function buildBundleSummaryMarkdown(parts: {\n  metadata: BundleMetadata;\n  checks: BundleCheckResults;\n  redaction: BundleRedactionReport;\n}): string {\n  const { metadata, checks, redaction } = parts;\n  const lines: string[] = [\n    \"# AgentInspect trace bundle\",\n    \"\",\n    metadata.note,\n    \"\",\n    \"## Overview\",\n    \"\",\n    markdownTable([\n      [\"Created\", metadata.createdAt],\n      [\"AgentInspect\", metadata.agentInspectVersion],\n      [\"Redaction profile\", metadata.redactionProfile],\n      [\"Safe status\", metadata.safeStatus],\n      [\"Source traces\", metadata.sourceTraceCount],\n      [\"Runs\", metadata.runIds.join(\", \")],\n      ...(metadata.sessionId ? [[\"Session\", metadata.sessionId] as [string, string]] : []),\n      ...(metadata.since ? [[\"Since\", metadata.since] as [string, string]] : []),\n    ]),\n    \"\",\n    \"## Safety checks\",\n    \"\",\n    `Aggregate: **${checks.aggregateStatus}**`,\n    \"\",\n  ];\n\n  for (const run of checks.runs) {\n    const source =\n      run.sourceStatus !== undefined && run.sourceStatus !== run.status\n        ? `; source ${run.sourceStatus}`\n        : \"\";\n    lines.push(\n      `- \\`${run.runId}\\`: artifact ${run.status}${source} (${run.findings} finding(s), ${run.errors} error(s), ${run.warnings} warning(s))`,\n    );\n  }\n\n  lines.push(\"\", \"## Redaction\", \"\", `Total findings: ${redaction.totalFindings}`, \"\");\n  for (const run of redaction.runs) {\n    const detectors = run.detectors.length > 0 ? run.detectors.join(\", \") : \"none\";\n    lines.push(`- \\`${run.runId}\\`: ${run.findings} finding(s); detectors: ${detectors}`);\n  }\n\n  lines.push(\n    \"\",\n    \"## Files\",\n    \"\",\n    ...metadata.files.map((file) => `- \\`${file}\\``),\n    \"\",\n    \"_Review every generated artifact before sharing outside your team._\",\n    \"\",\n  );\n\n  return lines.join(\"\\n\");\n}\n","import path from \"node:path\";\n\n/**\n * Sanitizes a run id for bundle directory and asset filenames.\n * Strips path segments and replaces unsafe characters.\n */\nexport function sanitizeBundleRunId(runId: string): string {\n  let safe =\n    typeof runId === \"string\" && runId.trim() !== \"\" ? runId.trim() : \"run_unknown\";\n  safe = path.basename(safe);\n  safe = safe.replace(/[^a-zA-Z0-9._-]+/g, \"_\");\n  if (safe === \"\" || safe === \".\" || safe === \"..\") {\n    safe = \"run_unknown\";\n  }\n  return safe;\n}\n\n/**\n * Relative POSIX path for a run asset inside a bundle directory.\n */\nexport function bundleRunAssetRelativePath(runId: string, extension: string): string {\n  const safe = sanitizeBundleRunId(runId);\n  const ext = extension.startsWith(\".\") ? extension : `.${extension}`;\n  return path.posix.join(\"assets\", \"runs\", `${safe}${ext}`);\n}\n\n/**\n * Ensures a relative bundle path resolves inside the output directory.\n */\nexport function assertBundlePathContained(\n  outputDir: string,\n  relativePath: string,\n): string {\n  const base = path.resolve(outputDir);\n  const resolved = path.resolve(base, relativePath);\n  if (resolved !== base && !resolved.startsWith(base + path.sep)) {\n    throw new Error(`Bundle path escapes output directory: ${relativePath}`);\n  }\n  return resolved;\n}\n\n/**\n * Normalizes bundle output path.\n * For directory/html modes, strips a trailing `.zip` suffix (folder-first).\n * Pass `preserveZipExtension: true` for `--format zip`.\n */\nexport function normalizeBundleOutputPath(\n  out: string,\n  options?: { preserveZipExtension?: boolean },\n): string {\n  const trimmed = out.trim();\n  if (trimmed === \"\") {\n    throw new Error(\"--out requires a non-empty path.\");\n  }\n  const resolved = path.resolve(trimmed);\n  if (\n    options?.preserveZipExtension !== true &&\n    resolved.toLowerCase().endsWith(\".zip\")\n  ) {\n    return resolved.slice(0, -4);\n  }\n  return resolved;\n}\n\n/**\n * Default bundle directory when --out is omitted.\n */\nexport function defaultBundleOutputPath(runIds: readonly string[]): string {\n  const label =\n    runIds.length === 1 ? sanitizeBundleRunId(runIds[0]!) : `multi-${runIds.length}`;\n  const stamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n  return path.resolve(`agent-inspect-bundle-${label}-${stamp}`);\n}\n","/** Portable Evidence v2 (`evidenceFormatVersion`) — independent of trace schema. */\n\nexport type EvidenceFormatVersion = \"1.0\";\n\nexport type EvidenceSafeStatus = \"SAFE\" | \"SAFE WITH WARNINGS\" | \"UNSAFE\" | \"UNKNOWN\";\n\nexport type EvidenceRedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport type EvidenceVerificationPolicy = \"development\" | \"local\" | \"share\" | \"strict\";\n\nexport type EvidenceFileRole =\n  | \"report\"\n  | \"redacted-trace\"\n  | \"checks\"\n  | \"contract\"\n  | \"redaction-report\"\n  | \"summary\"\n  | \"other\";\n\n/** How a packaged contract/preset was supplied (6.28+). */\nexport type EvidenceContractBindingSource =\n  | \"file\"\n  | \"inline\"\n  | \"preset\"\n  | \"cli-shorthand\"\n  | \"programmatic\";\n\n/** Reproducibility honesty for contract binding (6.28+). */\nexport type EvidenceContractBindingStatus = \"complete\" | \"partial\" | \"unavailable\";\n\n/**\n * Optional Evidence v2 contract binding (6.28+).\n * Additive; older readers ignore unknown fields. Not a signature or trusted-time claim.\n */\nexport interface EvidenceContractBinding {\n  status: EvidenceContractBindingStatus;\n  source: EvidenceContractBindingSource;\n  contractId?: string;\n  contractVersion?: string;\n  canonicalizationVersion: \"1\";\n  engineVersion: string;\n  /** Relative packaged path (typically `contract.resolved.json`). */\n  path?: string;\n  /** SHA-256 of the packaged resolved-contract bytes. */\n  sha256?: string;\n  ruleIds: string[];\n  unsupportedRuleIds?: string[];\n  note?: string;\n}\n\n/**\n * Optional fields embedded in `check-results.json` to bind results to a contract digest.\n */\nexport interface EvidenceCheckContractBinding {\n  contractDigest?: string;\n  canonicalizationVersion?: \"1\";\n  engineVersion?: string;\n  evaluatedRuleIds?: string[];\n  bindingStatus?: EvidenceContractBindingStatus;\n  unsupportedRuleIds?: string[];\n  origin?: {\n    source: EvidenceContractBindingSource;\n    preset?: string;\n    path?: string;\n  };\n  selectedScope?: Record<string, unknown>;\n  selectedAlternativeBranch?: string;\n}\n\nexport interface EvidenceSourceHash {\n  runId: string;\n  algorithm: \"sha256\";\n  hash: string;\n}\n\nexport interface EvidenceFileEntry {\n  path: string;\n  sha256: string;\n  role?: EvidenceFileRole;\n}\n\nexport interface EvidenceManifest {\n  evidenceFormatVersion: EvidenceFormatVersion;\n  generator: {\n    name: string;\n    version: string;\n  };\n  createdAt?: string;\n  source: {\n    runIds: string[];\n    traceSchemaVersions: string[];\n    sourceHashes: EvidenceSourceHash[];\n  };\n  policy: {\n    redactionProfile: EvidenceRedactionProfile;\n    verificationPolicy: EvidenceVerificationPolicy;\n  };\n  assessment: {\n    status: EvidenceSafeStatus;\n    sourceStatus?: EvidenceSafeStatus;\n    note?: string;\n  };\n  /**\n   * Optional TraceFacts / logical-projection summary (6.14+).\n   * Additive; older readers ignore unknown fields.\n   */\n  semantics?: EvidenceSemantics;\n  /**\n   * Optional resolved-contract binding (6.28+).\n   * Additive; older readers ignore unknown fields.\n   */\n  contract?: EvidenceContractBinding;\n  files: EvidenceFileEntry[];\n}\n\n/**\n * Bounded semantic summary embedded in Evidence v2 (mirrors check parity summary).\n * Does not embed raw events or prompts.\n */\nexport interface EvidenceSemantics {\n  projectionVersion?: string;\n  rawEventCount?: number;\n  logicalEventCount?: number;\n  runningLogicalCount?: number;\n  finishedToolCount?: number;\n  finishedToolNames?: string[];\n  pairedCount?: number;\n  parentRemapCount?: number;\n  contractStatus?: \"pass\" | \"fail\" | \"error\";\n  /**\n   * Bounded derived failure role counts (6.19+). IDs and error bodies omitted.\n   *\n   * @experimental\n   */\n  failureRoleCounts?: {\n    transient: number;\n    recovered: number;\n    terminal: number;\n    unknown: number;\n  };\n}\n\nexport interface EvidencePackagedFile {\n  /** Relative POSIX path inside the evidence/bundle directory. */\n  path: string;\n  /** Exact bytes that will be / were written. */\n  content: string | Uint8Array;\n  role?: EvidenceFileRole;\n}\n\nexport const EVIDENCE_FORMAT_VERSION: EvidenceFormatVersion = \"1.0\";\n\nexport const EVIDENCE_ASSESSMENT_NOTE =\n  \"Best-effort local safety verification only; not a compliance certification.\";\n\nexport const EVIDENCE_MANIFEST_FILENAME = \"evidence.json\";\n\n/** Packaged resolved TraceContract / check-preset snapshot (6.28+). */\nexport const EVIDENCE_RESOLVED_CONTRACT_FILENAME = \"contract.resolved.json\";\n","import { createHash } from \"node:crypto\";\n\nconst SHA256_RE = /^[a-f0-9]{64}$/i;\n\n/**\n * SHA-256 hex digest of exact bytes (UTF-8 when `data` is a string).\n */\nexport function sha256Hex(data: string | Uint8Array): string {\n  const hash = createHash(\"sha256\");\n  if (typeof data === \"string\") {\n    hash.update(data, \"utf8\");\n  } else {\n    hash.update(data);\n  }\n  return hash.digest(\"hex\");\n}\n\nexport function isSha256Hex(value: string): boolean {\n  return SHA256_RE.test(value);\n}\n\n/**\n * Constant-time-ish equality for hex digests (length-checked; not for secrets).\n */\nexport function sha256Equals(expected: string, actual: string): boolean {\n  if (!isSha256Hex(expected) || !isSha256Hex(actual)) {\n    return false;\n  }\n  const a = expected.toLowerCase();\n  const b = actual.toLowerCase();\n  if (a.length !== b.length) return false;\n  let mismatch = 0;\n  for (let i = 0; i < a.length; i += 1) {\n    mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n  }\n  return mismatch === 0;\n}\n","import path from \"node:path\";\n\n/**\n * Validates a relative evidence/bundle path: no absolute paths, no `..`, POSIX separators.\n * Returns the normalized POSIX relative path.\n */\nexport function assertEvidenceRelativePath(relativePath: string): string {\n  if (typeof relativePath !== \"string\" || relativePath.trim() === \"\") {\n    throw new Error(\"Evidence file path must be a non-empty relative path.\");\n  }\n  const trimmed = relativePath.trim().replaceAll(\"\\\\\", \"/\");\n  if (path.isAbsolute(trimmed) || trimmed.startsWith(\"/\")) {\n    throw new Error(`Evidence file path must be relative: ${relativePath}`);\n  }\n  const parts = trimmed.split(\"/\").filter((part) => part !== \"\");\n  if (parts.length === 0) {\n    throw new Error(`Evidence file path must be relative: ${relativePath}`);\n  }\n  for (const part of parts) {\n    if (part === \".\" || part === \"..\") {\n      throw new Error(`Evidence file path must not contain \".\" or \"..\": ${relativePath}`);\n    }\n  }\n  return parts.join(\"/\");\n}\n","import { sha256Hex } from \"./hash.js\";\nimport { assertEvidenceRelativePath } from \"./paths.js\";\nimport {\n  EVIDENCE_ASSESSMENT_NOTE,\n  EVIDENCE_FORMAT_VERSION,\n  EVIDENCE_MANIFEST_FILENAME,\n  type EvidenceFileEntry,\n  type EvidenceFileRole,\n  type EvidenceManifest,\n  type EvidencePackagedFile,\n  type EvidenceRedactionProfile,\n  type EvidenceSafeStatus,\n  type EvidenceSourceHash,\n  type EvidenceVerificationPolicy,\n} from \"./types.js\";\n\nfunction stable(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stable);\n  if (value === null || typeof value !== \"object\") return value;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stable(record[key])]),\n  );\n}\n\n/**\n * Deterministic JSON serialization used for evidence manifests (trailing newline).\n */\nexport function serializeEvidenceManifest(manifest: EvidenceManifest): string {\n  return `${JSON.stringify(stable(manifest), null, 2)}\\n`;\n}\n\nexport function inferEvidenceFileRole(relativePath: string): EvidenceFileRole {\n  const normalized = assertEvidenceRelativePath(relativePath);\n  const base = normalized.includes(\"/\")\n    ? normalized.slice(normalized.lastIndexOf(\"/\") + 1)\n    : normalized;\n  if (base === \"evidence.html\" || base === \"trace.html\" || base.endsWith(\".html\")) {\n    return \"report\";\n  }\n  if (base === \"trace.jsonl\" || base.endsWith(\".jsonl\")) {\n    return \"redacted-trace\";\n  }\n  if (base === \"check-results.json\") {\n    return \"checks\";\n  }\n  if (base === \"contract.resolved.json\") {\n    return \"contract\";\n  }\n  if (base === \"redaction-report.json\") {\n    return \"redaction-report\";\n  }\n  if (base === \"summary.md\") {\n    return \"summary\";\n  }\n  return \"other\";\n}\n\n/**\n * Hash packaged file bytes into Evidence `files[]` entries (sorted by path).\n * Rejects `evidence.json` itself (manifest is not self-hashed).\n */\nexport function buildEvidenceFileEntries(\n  files: readonly EvidencePackagedFile[],\n): EvidenceFileEntry[] {\n  const byPath = new Map<string, EvidenceFileEntry>();\n  for (const file of files) {\n    const relativePath = assertEvidenceRelativePath(file.path);\n    if (relativePath === EVIDENCE_MANIFEST_FILENAME) {\n      throw new Error(\n        `Do not include ${EVIDENCE_MANIFEST_FILENAME} in packaged file hashes (self-hash is undefined).`,\n      );\n    }\n    if (byPath.has(relativePath)) {\n      throw new Error(`Duplicate evidence file path: ${relativePath}`);\n    }\n    byPath.set(relativePath, {\n      path: relativePath,\n      sha256: sha256Hex(file.content),\n      role: file.role ?? inferEvidenceFileRole(relativePath),\n    });\n  }\n  return [...byPath.values()].sort((a, b) => a.path.localeCompare(b.path));\n}\n\nexport function buildEvidenceManifest(parts: {\n  generatorVersion: string;\n  generatorName?: string;\n  runIds: readonly string[];\n  traceSchemaVersions: readonly string[];\n  sourceHashes: readonly EvidenceSourceHash[];\n  redactionProfile: EvidenceRedactionProfile;\n  verificationPolicy?: EvidenceVerificationPolicy;\n  assessmentStatus: EvidenceSafeStatus;\n  sourceStatus?: EvidenceSafeStatus;\n  files: readonly EvidencePackagedFile[];\n  createdAt?: string;\n  note?: string;\n  semantics?: EvidenceManifest[\"semantics\"];\n  contract?: EvidenceManifest[\"contract\"];\n}): EvidenceManifest {\n  const runIds = [...parts.runIds];\n  if (runIds.length === 0) {\n    throw new Error(\"Evidence manifest requires at least one run id.\");\n  }\n  for (const item of parts.sourceHashes) {\n    if (!runIds.includes(item.runId)) {\n      throw new Error(`sourceHashes runId \"${item.runId}\" is not listed in source.runIds.`);\n    }\n    if (item.algorithm !== \"sha256\") {\n      throw new Error(`Unsupported source hash algorithm: ${item.algorithm}`);\n    }\n  }\n\n  const assessment: EvidenceManifest[\"assessment\"] = {\n    status: parts.assessmentStatus,\n    note: parts.note ?? EVIDENCE_ASSESSMENT_NOTE,\n  };\n  if (parts.sourceStatus !== undefined) {\n    assessment.sourceStatus = parts.sourceStatus;\n  }\n\n  return {\n    evidenceFormatVersion: EVIDENCE_FORMAT_VERSION,\n    generator: {\n      name: parts.generatorName ?? \"agent-inspect\",\n      version: parts.generatorVersion,\n    },\n    createdAt: parts.createdAt ?? new Date().toISOString(),\n    source: {\n      runIds,\n      traceSchemaVersions: [...parts.traceSchemaVersions].sort((a, b) => a.localeCompare(b)),\n      sourceHashes: [...parts.sourceHashes].sort((a, b) => a.runId.localeCompare(b.runId)),\n    },\n    policy: {\n      redactionProfile: parts.redactionProfile,\n      verificationPolicy: parts.verificationPolicy ?? parts.redactionProfile,\n    },\n    assessment,\n    ...(parts.semantics !== undefined ? { semantics: { ...parts.semantics } } : {}),\n    ...(parts.contract !== undefined ? { contract: { ...parts.contract } } : {}),\n    files: buildEvidenceFileEntries(parts.files),\n  };\n}\n\n/**\n * Minimal structural validation for a parsed evidence manifest object.\n * Unknown fields are preserved by returning the cast value after checks.\n */\nexport function validateEvidenceManifest(value: unknown): EvidenceManifest {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n    throw new Error(\"Evidence manifest must be a JSON object.\");\n  }\n  const record = value as Record<string, unknown>;\n  if (record.evidenceFormatVersion !== EVIDENCE_FORMAT_VERSION) {\n    throw new Error(\n      `Unsupported evidenceFormatVersion: ${String(record.evidenceFormatVersion)}`,\n    );\n  }\n  const generator = record.generator;\n  if (\n    generator === null ||\n    typeof generator !== \"object\" ||\n    Array.isArray(generator) ||\n    typeof (generator as { name?: unknown }).name !== \"string\" ||\n    typeof (generator as { version?: unknown }).version !== \"string\"\n  ) {\n    throw new Error(\"Evidence manifest requires generator.name and generator.version.\");\n  }\n  const source = record.source;\n  if (source === null || typeof source !== \"object\" || Array.isArray(source)) {\n    throw new Error(\"Evidence manifest requires source.\");\n  }\n  const sourceRecord = source as {\n    runIds?: unknown;\n    traceSchemaVersions?: unknown;\n    sourceHashes?: unknown;\n  };\n  if (!Array.isArray(sourceRecord.runIds) || sourceRecord.runIds.length === 0) {\n    throw new Error(\"Evidence manifest source.runIds must be a non-empty array.\");\n  }\n  if (!Array.isArray(sourceRecord.traceSchemaVersions)) {\n    throw new Error(\"Evidence manifest source.traceSchemaVersions must be an array.\");\n  }\n  if (!Array.isArray(sourceRecord.sourceHashes)) {\n    throw new Error(\"Evidence manifest source.sourceHashes must be an array.\");\n  }\n  const policy = record.policy;\n  if (policy === null || typeof policy !== \"object\" || Array.isArray(policy)) {\n    throw new Error(\"Evidence manifest requires policy.\");\n  }\n  const assessment = record.assessment;\n  if (\n    assessment === null ||\n    typeof assessment !== \"object\" ||\n    Array.isArray(assessment) ||\n    typeof (assessment as { status?: unknown }).status !== \"string\"\n  ) {\n    throw new Error(\"Evidence manifest requires assessment.status.\");\n  }\n  if (!Array.isArray(record.files) || record.files.length === 0) {\n    throw new Error(\"Evidence manifest files must be a non-empty array.\");\n  }\n  for (const file of record.files) {\n    if (file === null || typeof file !== \"object\" || Array.isArray(file)) {\n      throw new Error(\"Evidence manifest file entries must be objects.\");\n    }\n    const entry = file as { path?: unknown; sha256?: unknown };\n    if (typeof entry.path !== \"string\") {\n      throw new Error(\"Evidence file entry requires path.\");\n    }\n    assertEvidenceRelativePath(entry.path);\n    if (typeof entry.sha256 !== \"string\" || !/^[a-f0-9]{64}$/i.test(entry.sha256)) {\n      throw new Error(`Evidence file entry requires sha256 hex for ${entry.path}.`);\n    }\n  }\n  return value as EvidenceManifest;\n}\n\nexport function parseEvidenceManifestJson(text: string): EvidenceManifest {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(text) as unknown;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(`Evidence manifest is not valid JSON: ${message}`);\n  }\n  return validateEvidenceManifest(parsed);\n}\n\n/**\n * Collect unique `schemaVersion` values from agent-inspect JSONL text.\n */\nexport function collectTraceSchemaVersions(jsonl: string): string[] {\n  const versions = new Set<string>();\n  for (const line of jsonl.split(/\\r?\\n/)) {\n    const trimmed = line.trim();\n    if (trimmed === \"\") continue;\n    try {\n      const row = JSON.parse(trimmed) as { schemaVersion?: unknown };\n      if (typeof row.schemaVersion === \"string\" && row.schemaVersion.trim() !== \"\") {\n        versions.add(row.schemaVersion.trim());\n      }\n    } catch {\n      // skip malformed lines — hashing still covers the raw bytes separately\n    }\n  }\n  return [...versions].sort((a, b) => a.localeCompare(b));\n}\n","/**\n * Evidence v2 contract binding (6.28) — package a resolved serializable\n * TraceContract / check-preset snapshot and bind its digest to check results.\n *\n * Does not claim producer identity, trusted time, or semantic proof.\n */\n\nimport { defineTraceContract, type TraceContract, type TraceContractInput } from \"../checks/contract.js\";\nimport { stringContainsHighConfidenceCredential } from \"../safety/credential-value-patterns.js\";\nimport { sha256Equals, sha256Hex } from \"./hash.js\";\nimport {\n  EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n  type EvidenceContractBinding,\n  type EvidenceContractBindingSource,\n  type EvidenceContractBindingStatus,\n  type EvidenceCheckContractBinding,\n  type EvidencePackagedFile,\n} from \"./types.js\";\n\nexport const EVIDENCE_CONTRACT_CANONICALIZATION_VERSION = \"1\" as const;\n\nexport const EVIDENCE_CONTRACT_PARTIAL_NOTE =\n  \"Custom or programmatic rules are not serializable; Evidence records rule IDs only and does not claim complete reviewer replay.\";\n\nexport const EVIDENCE_CONTRACT_UNAVAILABLE_NOTE =\n  \"No resolved TraceContract or check preset was packaged with this Evidence artifact.\";\n\nexport const EVIDENCE_CONTRACT_ASSURANCE_NOTE =\n  \"Contract binding verifies packaged digest integrity only; it does not prove producer identity, trusted time, source completeness, semantic truth, or external acceptance.\";\n\nexport const EVIDENCE_CONTRACT_UNSAFE_NOTE =\n  \"Resolved TraceContract contains high-confidence credential-like expected values; Evidence refuses complete packaging rather than silently redacting evaluated expectations.\";\n\n/**\n * Walk JSON-like contract values looking for high-confidence credential strings\n * under `expected` / `oneOf` (and nested) fields only. Does not mutate input.\n */\nexport function contractContainsUnsafeExpectedValues(value: unknown): boolean {\n  return scanForExpectedFields(value, 0);\n}\n\n/** Recurse looking for `expected` / `oneOf` keys; do not treat other strings as secrets. */\nfunction scanForExpectedFields(value: unknown, depth: number): boolean {\n  if (depth > 32) return false;\n  if (Array.isArray(value)) {\n    return value.some((item) => scanForExpectedFields(item, depth + 1));\n  }\n  if (value === null || typeof value !== \"object\") return false;\n  const record = value as Record<string, unknown>;\n  for (const [key, child] of Object.entries(record)) {\n    if (key === \"expected\" || key === \"oneOf\") {\n      if (valueTreeContainsCredential(child, depth + 1)) return true;\n      continue;\n    }\n    if (scanForExpectedFields(child, depth + 1)) return true;\n  }\n  return false;\n}\n\nfunction valueTreeContainsCredential(value: unknown, depth: number): boolean {\n  if (depth > 32) return false;\n  if (typeof value === \"string\") {\n    return stringContainsHighConfidenceCredential(value);\n  }\n  if (Array.isArray(value)) {\n    return value.some((item) => valueTreeContainsCredential(item, depth + 1));\n  }\n  if (value === null || typeof value !== \"object\") return false;\n  return Object.values(value as Record<string, unknown>).some((child) =>\n    valueTreeContainsCredential(child, depth + 1),\n  );\n}\n\n/** Deterministic JSON (sorted keys) with trailing newline. */\nexport function serializeCanonicalJson(value: unknown): string {\n  return `${JSON.stringify(stableValue(value), null, 2)}\\n`;\n}\n\nfunction stableValue(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stableValue);\n  if (value === null || typeof value !== \"object\") return value;\n  if (typeof value === \"function\") return undefined;\n  const record = value as Record<string, unknown>;\n  return Object.fromEntries(\n    Object.keys(record)\n      .filter((key) => record[key] !== undefined && typeof record[key] !== \"function\")\n      .sort((a, b) => a.localeCompare(b))\n      .map((key) => [key, stableValue(record[key])]),\n  );\n}\n\nfunction sortedUniqueStrings(values: readonly string[]): string[] {\n  return [...new Set(values.map((item) => item.trim()).filter((item) => item !== \"\"))].sort((a, b) =>\n    a.localeCompare(b),\n  );\n}\n\n/**\n * Normalize TraceContract aliases and make common evaluator defaults explicit\n * for canonicalization version `\"1\"`.\n */\nexport function resolveSerializableTraceContract(\n  input: TraceContractInput | TraceContract,\n): TraceContract {\n  const defined = defineTraceContract(input);\n  const tools = defined.tools\n    ? {\n        ...defined.tools,\n        required: sortedUniqueStrings([\n          ...(defined.tools.required ?? []),\n          ...(defined.tools.requiredTools ?? []),\n        ]),\n        forbidden: sortedUniqueStrings([\n          ...(defined.tools.forbidden ?? []),\n          ...(defined.tools.forbiddenTools ?? []),\n        ]),\n        ...(defined.tools.allowed ? { allowed: sortedUniqueStrings(defined.tools.allowed) } : {}),\n        ...(defined.tools.requiredOrder\n          ? {\n              requiredOrder: [...defined.tools.requiredOrder],\n              requiredOrderMode: defined.tools.requiredOrderMode ?? \"first-occurrence\",\n            }\n          : {}),\n      }\n    : undefined;\n\n  // Drop alias-only fields from the resolved snapshot.\n  if (tools) {\n    delete (tools as { requiredTools?: unknown }).requiredTools;\n    delete (tools as { forbiddenTools?: unknown }).forbiddenTools;\n    if (tools.required?.length === 0) delete (tools as { required?: unknown }).required;\n    if (tools.forbidden?.length === 0) delete (tools as { forbidden?: unknown }).forbidden;\n  }\n\n  const run = defined.run\n    ? {\n        ...defined.run,\n        // Evaluator default: requireCompleted is true unless explicitly false.\n        requireCompleted: defined.run.requireCompleted !== false,\n      }\n    : undefined;\n\n  return {\n    ...defined,\n    ...(run ? { run } : {}),\n    ...(tools && Object.keys(tools).length > 0 ? { tools } : {}),\n  };\n}\n\n/**\n * Static rule-id inventory implied by a resolved TraceContract (no evaluation).\n */\nexport function collectResolvedContractRuleIds(contract: TraceContract): string[] {\n  const ids: string[] = [];\n  if (contract.run) {\n    if (contract.run.allowedStatuses?.length) ids.push(\"contract.run.allowedStatuses\");\n    if (contract.run.requireCompleted === true) ids.push(\"run.requireCompleted\");\n    if (contract.run.maxDurationMs !== undefined) ids.push(\"run.duration\");\n  }\n  if (contract.tools) {\n    if (\n      (contract.tools.required?.length ?? 0) > 0 ||\n      (contract.tools.forbidden?.length ?? 0) > 0 ||\n      contract.tools.allowed ||\n      contract.tools.maxCalls !== undefined\n    ) {\n      ids.push(\"tool.usage\");\n    }\n    if (contract.tools.requiredOrder?.length) {\n      for (let i = 0; i < contract.tools.requiredOrder.length - 1; i += 1) {\n        ids.push(`contract.tool.order.${i}`);\n      }\n    }\n    if (contract.tools.orderRules?.length) {\n      for (let index = 0; index < contract.tools.orderRules.length; index += 1) {\n        ids.push(`contract.tool.orderRule.${index}`);\n      }\n    }\n    if (contract.tools.arguments?.length) ids.push(\"contract.tool.arguments\");\n  }\n  if (contract.llm) ids.push(\"llm.usage\");\n  if (contract.observations?.required?.length) ids.push(\"contract.observation.required\");\n  if (contract.observations?.failOn?.length) ids.push(\"outcome.status\");\n  if (contract.observations?.requireProvenance) ids.push(\"contract.observation.provenance\");\n  if (contract.controls) ids.push(\"contract.controls\");\n  if (contract.retry) ids.push(\"contract.retry\");\n  if (contract.scope) ids.push(\"contract.scope.selected\");\n  if (contract.alternatives?.anyOf?.length) ids.push(\"contract.alternatives.anyOf\");\n  return sortedUniqueStrings(ids);\n}\n\nexport interface ResolvedContractDocument {\n  canonicalizationVersion: typeof EVIDENCE_CONTRACT_CANONICALIZATION_VERSION;\n  kind: \"trace-contract\" | \"check-preset\";\n  resolved: Record<string, unknown>;\n  origin: {\n    source: EvidenceContractBindingSource;\n    preset?: string;\n    path?: string;\n  };\n}\n\nexport interface BuildEvidenceContractPackageInput {\n  engineVersion: string;\n  source: EvidenceContractBindingSource;\n  /** Serializable TraceContract (preferred for `complete`). */\n  contract?: TraceContractInput | TraceContract;\n  /**\n   * Pre-resolved check preset / CLI shorthand snapshot (caller expands).\n   * Used when `contract` is omitted or as origin metadata beside a contract.\n   */\n  preset?: {\n    name: string;\n    resolved: Record<string, unknown>;\n  };\n  /** Original config path (omit or redact when sensitive). */\n  path?: string;\n  contractId?: string;\n  contractVersion?: string;\n  /**\n   * Stable IDs for programmatic / custom rules that cannot be serialized.\n   * Presence forces `status: \"partial\"`.\n   */\n  unsupportedRuleIds?: readonly string[];\n  /** Override rule ID list (defaults to static inventory from the contract / preset select). */\n  ruleIds?: readonly string[];\n  note?: string;\n}\n\nexport interface EvidenceContractPackage {\n  /** Packaged `contract.resolved.json` when a serializable snapshot exists. */\n  file?: EvidencePackagedFile;\n  binding: EvidenceContractBinding;\n  /** Fields to merge into `check-results.json`. */\n  checkBinding: EvidenceCheckContractBinding;\n  /** Canonical document bytes when packaged (same as `file.content`). */\n  resolvedJson?: string;\n}\n\nfunction buildUnavailablePackage(\n  engineVersion: string,\n  note?: string,\n): EvidenceContractPackage {\n  const binding: EvidenceContractBinding = {\n    status: \"unavailable\",\n    source: \"programmatic\",\n    canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n    engineVersion,\n    ruleIds: [],\n    note: note ?? EVIDENCE_CONTRACT_UNAVAILABLE_NOTE,\n  };\n  return {\n    binding,\n    checkBinding: {\n      canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n      engineVersion,\n      evaluatedRuleIds: [],\n      bindingStatus: \"unavailable\",\n    },\n  };\n}\n\n/**\n * Build a resolved contract artifact + Evidence binding for packaging.\n *\n * Pass no `contract` and no `preset` to record an honest `unavailable` binding\n * (missing-contract case). Pass `unsupportedRuleIds` to force `partial`.\n */\nexport function buildEvidenceContractPackage(\n  input: BuildEvidenceContractPackageInput,\n): EvidenceContractPackage {\n  const unsupported = sortedUniqueStrings(input.unsupportedRuleIds ?? []);\n  const hasContract = input.contract !== undefined;\n  const hasPreset = input.preset !== undefined;\n\n  if (!hasContract && !hasPreset) {\n    return buildUnavailablePackage(input.engineVersion, input.note);\n  }\n\n  let kind: ResolvedContractDocument[\"kind\"] = \"trace-contract\";\n  let resolved: Record<string, unknown>;\n  let ruleIds: string[];\n\n  if (hasContract) {\n    const normalized = resolveSerializableTraceContract(input.contract!);\n    resolved = stableValue(normalized) as Record<string, unknown>;\n    ruleIds = collectResolvedContractRuleIds(normalized);\n  } else {\n    kind = \"check-preset\";\n    resolved = stableValue(input.preset!.resolved) as Record<string, unknown>;\n    const select = Array.isArray(input.preset!.resolved.select)\n      ? (input.preset!.resolved.select as unknown[]).filter(\n          (item): item is string => typeof item === \"string\",\n        )\n      : [];\n    ruleIds = sortedUniqueStrings(select);\n  }\n\n  if (input.ruleIds !== undefined) {\n    ruleIds = sortedUniqueStrings(input.ruleIds);\n  }\n  if (unsupported.length > 0) {\n    ruleIds = sortedUniqueStrings([...ruleIds, ...unsupported]);\n  }\n\n  // Refuse unsafe expected literals — never mutate then claim complete.\n  if (contractContainsUnsafeExpectedValues(resolved)) {\n    return {\n      binding: {\n        status: \"unavailable\",\n        source: input.source,\n        ...(input.contractId !== undefined ? { contractId: input.contractId } : {}),\n        ...(input.contractVersion !== undefined\n          ? { contractVersion: input.contractVersion }\n          : {}),\n        canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n        engineVersion: input.engineVersion,\n        ruleIds,\n        ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n        note: input.note ?? EVIDENCE_CONTRACT_UNSAFE_NOTE,\n      },\n      checkBinding: {\n        canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n        engineVersion: input.engineVersion,\n        evaluatedRuleIds: ruleIds,\n        bindingStatus: \"unavailable\",\n        ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n        origin: {\n          source: input.source,\n          ...(input.preset?.name ? { preset: input.preset.name } : {}),\n        },\n      },\n    };\n  }\n\n  const document: ResolvedContractDocument = {\n    canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n    kind,\n    resolved,\n    origin: {\n      source: input.source,\n      ...(input.preset?.name ? { preset: input.preset.name } : {}),\n      ...(input.path !== undefined && input.path.trim() !== \"\"\n        ? { path: input.path.trim() }\n        : {}),\n    },\n  };\n\n  const resolvedJson = serializeCanonicalJson(document);\n  const digest = sha256Hex(resolvedJson);\n  const status: EvidenceContractBindingStatus =\n    unsupported.length > 0 ? \"partial\" : \"complete\";\n\n  const binding: EvidenceContractBinding = {\n    status,\n    source: input.source,\n    ...(input.contractId !== undefined ? { contractId: input.contractId } : {}),\n    ...(input.contractVersion !== undefined\n      ? { contractVersion: input.contractVersion }\n      : {}),\n    canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n    engineVersion: input.engineVersion,\n    path: EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n    sha256: digest,\n    ruleIds,\n    ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n    note:\n      input.note ??\n      (status === \"partial\"\n        ? EVIDENCE_CONTRACT_PARTIAL_NOTE\n        : EVIDENCE_CONTRACT_ASSURANCE_NOTE),\n  };\n\n  const checkBinding: EvidenceCheckContractBinding = {\n    contractDigest: digest,\n    canonicalizationVersion: EVIDENCE_CONTRACT_CANONICALIZATION_VERSION,\n    engineVersion: input.engineVersion,\n    evaluatedRuleIds: ruleIds,\n    bindingStatus: status,\n    ...(input.preset?.name\n      ? {\n          origin: {\n            source: input.source,\n            preset: input.preset.name,\n          },\n        }\n      : {\n          origin: {\n            source: input.source,\n          },\n        }),\n    ...(unsupported.length > 0 ? { unsupportedRuleIds: unsupported } : {}),\n  };\n\n  return {\n    file: {\n      path: EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n      content: resolvedJson,\n      role: \"contract\",\n    },\n    binding,\n    checkBinding,\n    resolvedJson,\n  };\n}\n\n/**\n * Merge contract-binding fields into a check-results JSON object (additive).\n */\nexport function bindCheckResultsToContract(\n  checkResults: Record<string, unknown>,\n  checkBinding: EvidenceCheckContractBinding,\n): Record<string, unknown> {\n  return {\n    ...checkResults,\n    contract: {\n      ...checkBinding,\n    },\n  };\n}\n\nexport function serializeCheckResultsJson(value: unknown): string {\n  return serializeCanonicalJson(value);\n}\n\n/**\n * Parse the optional `contract` object from check-results.json when present.\n */\nexport function readCheckResultsContractBinding(\n  checkResultsJson: string,\n): EvidenceCheckContractBinding | undefined {\n  try {\n    const parsed = JSON.parse(checkResultsJson) as { contract?: unknown };\n    if (parsed.contract === null || typeof parsed.contract !== \"object\" || Array.isArray(parsed.contract)) {\n      return undefined;\n    }\n    return parsed.contract as EvidenceCheckContractBinding;\n  } catch {\n    return undefined;\n  }\n}\n\nexport interface EvidenceContractVerifyIssue {\n  code:\n    | \"contract_file_missing\"\n    | \"contract_hash_mismatch\"\n    | \"contract_digest_mismatch\"\n    | \"contract_binding_invalid\";\n  severity: \"error\" | \"warning\";\n  message: string;\n  path?: string;\n}\n\n/**\n * Verify digest binding between manifest.contract, contract.resolved.json, and\n * check-results.json. Older Evidence without `manifest.contract` is a no-op.\n */\nexport function verifyEvidenceContractBinding(parts: {\n  binding?: EvidenceContractBinding;\n  resolvedContractBytes?: string | Uint8Array;\n  checkResultsJson?: string;\n}): EvidenceContractVerifyIssue[] {\n  const issues: EvidenceContractVerifyIssue[] = [];\n  const binding = parts.binding;\n  if (binding === undefined) return issues;\n\n  if (\n    binding.canonicalizationVersion !== EVIDENCE_CONTRACT_CANONICALIZATION_VERSION\n  ) {\n    issues.push({\n      code: \"contract_binding_invalid\",\n      severity: \"error\",\n      message: `Unsupported contract canonicalizationVersion: ${String(binding.canonicalizationVersion)}`,\n    });\n  }\n\n  if (binding.status === \"unavailable\") {\n    if (binding.path !== undefined || binding.sha256 !== undefined) {\n      issues.push({\n        code: \"contract_binding_invalid\",\n        severity: \"error\",\n        message: \"unavailable contract binding must not reference a packaged contract file.\",\n      });\n    }\n    return issues;\n  }\n\n  const expectedPath = binding.path ?? EVIDENCE_RESOLVED_CONTRACT_FILENAME;\n  if (parts.resolvedContractBytes === undefined) {\n    issues.push({\n      code: \"contract_file_missing\",\n      severity: \"error\",\n      message: `Referenced contract file missing: ${expectedPath}`,\n      path: expectedPath,\n    });\n    return issues;\n  }\n\n  const actual = sha256Hex(parts.resolvedContractBytes);\n  if (binding.sha256 !== undefined && !sha256Equals(binding.sha256, actual)) {\n    issues.push({\n      code: \"contract_hash_mismatch\",\n      severity: \"error\",\n      message: `SHA-256 mismatch for ${expectedPath}`,\n      path: expectedPath,\n    });\n  }\n\n  if (parts.checkResultsJson !== undefined) {\n    const checkBinding = readCheckResultsContractBinding(parts.checkResultsJson);\n    if (checkBinding?.contractDigest !== undefined && binding.sha256 !== undefined) {\n      if (!sha256Equals(checkBinding.contractDigest, binding.sha256)) {\n        issues.push({\n          code: \"contract_digest_mismatch\",\n          severity: \"error\",\n          message:\n            \"check-results.json contractDigest does not match evidence.json contract.sha256.\",\n          path: \"check-results.json\",\n        });\n      }\n    } else if (binding.status === \"complete\" || binding.status === \"partial\") {\n      issues.push({\n        code: \"contract_digest_mismatch\",\n        severity: \"error\",\n        message:\n          \"check-results.json is missing contract.contractDigest for a packaged contract binding.\",\n        path: \"check-results.json\",\n      });\n    }\n  }\n\n  return issues;\n}\n","import type { InspectNode, InspectRunTree } from \"../types/inspect-event.js\";\nimport { escapeHtml, flattenTree } from \"../exporters/helpers.js\";\n\nfunction renderTreeHtml(nodes: InspectNode[], ulClass = \"tree\"): string {\n  if (nodes.length === 0) return \"\";\n  const parts: string[] = [`<ul class=\"${ulClass}\">`];\n  for (const n of nodes) {\n    const ev = n.event;\n    const status = ev.status ?? \"?\";\n    const dur =\n      ev.durationMs !== undefined && Number.isFinite(ev.durationMs)\n        ? `${ev.durationMs}ms`\n        : \"-\";\n    const errClass = ev.status === \"error\" ? \" is-error\" : \"\";\n    parts.push(`<li class=\"tree-node${errClass}\">`);\n    parts.push(\n      `<span class=\"nm\">${escapeHtml(ev.name)}</span> <span class=\"meta\">[${escapeHtml(ev.kind)}] ${escapeHtml(status)} (${escapeHtml(dur)})</span>`,\n    );\n    if (n.children.length > 0) {\n      parts.push(renderTreeHtml(n.children, \"tree nested\"));\n    }\n    parts.push(\"</li>\");\n  }\n  parts.push(\"</ul>\");\n  return parts.join(\"\");\n}\n\n/**\n * Execution-tree HTML fragment for the Evidence Tree view (already escaped).\n */\nexport function buildEvidenceTreeViewHtml(trees: readonly InspectRunTree[]): string {\n  if (trees.length === 0) {\n    return `<p class=\"muted\">No execution trees available.</p>`;\n  }\n  const parts: string[] = [];\n  for (const tree of trees) {\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n    if (tree.name) {\n      parts.push(`<p class=\"muted\">Name: ${escapeHtml(tree.name)}</p>`);\n    }\n    parts.push(\n      `<p>Status: <strong>${escapeHtml(String(tree.status ?? \"unknown\"))}</strong>${\n        tree.durationMs !== undefined ? ` · ${escapeHtml(String(tree.durationMs))}ms` : \"\"\n      }</p>`,\n    );\n    parts.push(\n      tree.children.length > 0\n        ? renderTreeHtml(tree.children)\n        : `<p class=\"muted\">No steps recorded.</p>`,\n    );\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\nfunction timelineRows(tree: InspectRunTree): {\n  name: string;\n  kind: string;\n  status: string;\n  offsetMs: number;\n  durationMs: number;\n  isError: boolean;\n}[] {\n  const flat = flattenTree(tree);\n  const origin =\n    tree.startedAt ??\n    flat.reduce<number | undefined>((min, n) => {\n      const t = n.event.timestamp;\n      if (!Number.isFinite(t)) return min;\n      return min === undefined ? t : Math.min(min, t);\n    }, undefined) ??\n    0;\n  return flat\n    .filter((n) => n.event.kind !== \"RUN\")\n    .map((n) => {\n      const started = Number.isFinite(n.event.timestamp) ? n.event.timestamp : origin;\n      const durationMs =\n        n.event.durationMs !== undefined && Number.isFinite(n.event.durationMs)\n          ? Math.max(0, n.event.durationMs)\n          : 0;\n      return {\n        name: n.event.name,\n        kind: n.event.kind,\n        status: n.event.status ?? \"?\",\n        offsetMs: Math.max(0, started - origin),\n        durationMs,\n        isError: n.event.status === \"error\",\n      };\n    })\n    .sort((a, b) => a.offsetMs - b.offsetMs || a.name.localeCompare(b.name));\n}\n\n/**\n * Timeline / waterfall HTML fragment (escaped; no external assets).\n */\nexport function buildEvidenceTimelineViewHtml(trees: readonly InspectRunTree[]): string {\n  if (trees.length === 0) {\n    return `<p class=\"muted\">No timeline data available.</p>`;\n  }\n  const parts: string[] = [];\n  for (const tree of trees) {\n    const rows = timelineRows(tree);\n    const maxEnd = rows.reduce(\n      (max, row) => Math.max(max, row.offsetMs + Math.max(row.durationMs, 1)),\n      1,\n    );\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n    if (rows.length === 0) {\n      parts.push(`<p class=\"muted\">No step timings recorded.</p>`);\n    } else {\n      parts.push(`<div class=\"waterfall\" role=\"list\">`);\n      for (const row of rows) {\n        const left = (row.offsetMs / maxEnd) * 100;\n        const width = Math.max(0.8, (Math.max(row.durationMs, 1) / maxEnd) * 100);\n        const err = row.isError ? \" is-error\" : \"\";\n        parts.push(\n          `<div class=\"wf-row${err}\" role=\"listitem\"><div class=\"wf-label\"><span class=\"nm\">${escapeHtml(row.name)}</span> <span class=\"meta\">[${escapeHtml(row.kind)}] ${escapeHtml(row.status)} · ${escapeHtml(String(row.durationMs))}ms @+${escapeHtml(String(row.offsetMs))}ms</span></div><div class=\"wf-track\"><span class=\"wf-bar\" style=\"left:${left.toFixed(2)}%;width:${width.toFixed(2)}%\"></span></div></div>`,\n        );\n      }\n      parts.push(`</div>`);\n    }\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\nfunction findNodeByEventId(nodes: InspectNode[], eventId: string): InspectNode | undefined {\n  for (const node of nodes) {\n    if (node.event.eventId === eventId) return node;\n    const child = findNodeByEventId(node.children, eventId);\n    if (child) return child;\n  }\n  return undefined;\n}\n\nfunction buildAncestorChain(tree: InspectRunTree, failure: InspectNode): InspectNode[] {\n  const chain: InspectNode[] = [failure];\n  let parentId = failure.event.parentId;\n  const guard = new Set<string>([failure.event.eventId]);\n  while (parentId && !guard.has(parentId)) {\n    guard.add(parentId);\n    const parent = findNodeByEventId(tree.children, parentId);\n    if (!parent) break;\n    chain.unshift(parent);\n    parentId = parent.event.parentId;\n  }\n  return chain;\n}\n\n/**\n * First causal failure view: earliest error by timestamp, with parent chain.\n * Does not invent relationships; if no parentId chain exists, shows the error alone.\n */\nexport function buildEvidenceCausalFailureViewHtml(\n  trees: readonly InspectRunTree[],\n): string {\n  if (trees.length === 0) {\n    return `<p class=\"muted\">No runs available for causal analysis.</p>`;\n  }\n  const parts: string[] = [];\n  for (const tree of trees) {\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n    const errors = flattenTree(tree)\n      .filter((n) => n.event.status === \"error\" || n.event.kind === \"ERROR\")\n      .sort((a, b) => a.event.timestamp - b.event.timestamp);\n    if (errors.length === 0) {\n      parts.push(\n        `<p class=\"muted\">No error-status events found. Run status: <strong>${escapeHtml(String(tree.status ?? \"unknown\"))}</strong>.</p>`,\n      );\n      parts.push(`</article>`);\n      continue;\n    }\n    const first = errors[0]!;\n    const chain = buildAncestorChain(tree, first);\n    parts.push(`<p>First error by timestamp:</p>`);\n    parts.push(`<ol class=\"causal-chain\">`);\n    for (const node of chain) {\n      const isTip = node.event.eventId === first.event.eventId;\n      const msg =\n        typeof node.event.attributes?.message === \"string\"\n          ? node.event.attributes.message\n          : typeof node.event.attributes?.error === \"string\"\n            ? node.event.attributes.error\n            : undefined;\n      parts.push(\n        `<li class=\"${isTip ? \"causal-tip\" : \"\"}\"><span class=\"nm\">${escapeHtml(node.event.name)}</span> <span class=\"meta\">[${escapeHtml(node.event.kind)}] ${escapeHtml(node.event.status ?? \"?\")} · ${escapeHtml(node.event.eventId)}</span>${\n          msg ? `<div class=\"causal-msg\">${escapeHtml(msg.slice(0, 400))}</div>` : \"\"\n        }</li>`,\n      );\n    }\n    parts.push(`</ol>`);\n    if (errors.length > 1) {\n      parts.push(\n        `<p class=\"muted\">${escapeHtml(String(errors.length - 1))} additional error event(s) not shown in the primary chain.</p>`,\n      );\n    }\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\n/** Extra CSS for tree / timeline / causal panels (inlined into evidence shell). */\nexport const EVIDENCE_VIEW_CSS = `\nul.tree{list-style:none;padding-left:1rem;margin:.5rem 0}\nul.tree.nested{padding-left:1.25rem;border-left:1px solid var(--line);margin:.25rem 0}\n.tree-node.is-error .nm,.wf-row.is-error .nm,.causal-tip .nm{color:var(--unsafe)}\n.waterfall{display:flex;flex-direction:column;gap:.45rem;max-width:52rem}\n.wf-row{display:grid;grid-template-columns:minmax(10rem,18rem) 1fr;gap:.6rem;align-items:center}\n.wf-track{position:relative;height:.7rem;background:#e8e8e4;border-radius:.25rem;overflow:hidden}\n.wf-bar{position:absolute;top:0;bottom:0;background:var(--accent);border-radius:.25rem}\n.wf-row.is-error .wf-bar{background:var(--unsafe)}\n.causal-chain{max-width:44rem}\n.causal-msg{margin:.25rem 0 0;color:var(--muted);font-size:.92rem}\n.run-block{margin:0 0 1.25rem;padding-bottom:1rem;border-bottom:1px solid var(--line)}\n.run-block:last-child{border-bottom:0}\n@media (max-width:720px){\n  .wf-row{grid-template-columns:1fr}\n}\n`.trim();\n","import { escapeHtml } from \"../exporters/helpers.js\";\n\nimport { EVIDENCE_VIEW_CSS } from \"./views.js\";\nimport type { EvidenceManifest, EvidenceSafeStatus } from \"./types.js\";\n\nexport const EVIDENCE_HTML_FILENAME = \"evidence.html\";\n\nconst EVIDENCE_HTML_NOTE =\n  \"Generated locally by AgentInspect. Share-checked evidence for review — not a compliance or security certification.\";\n\n/** View ids reserved for later 6.10 chunks; shell renders stubs except summary. */\nexport const EVIDENCE_VIEW_IDS = [\n  \"summary\",\n  \"tree\",\n  \"timeline\",\n  \"causal\",\n  \"tools-llm\",\n  \"outcomes\",\n  \"contracts\",\n  \"circuit\",\n  \"diff\",\n  \"safety\",\n  \"provenance\",\n] as const;\n\nexport type EvidenceViewId = (typeof EVIDENCE_VIEW_IDS)[number];\n\nexport interface EvidenceHtmlShellInput {\n  title?: string;\n  runIds: readonly string[];\n  assessmentStatus: EvidenceSafeStatus;\n  sourceStatus?: EvidenceSafeStatus;\n  redactionProfile: string;\n  verificationPolicy: string;\n  generatorName: string;\n  generatorVersion: string;\n  createdAt?: string;\n  evidenceFormatVersion?: string;\n  /** Optional short summary markdown already safe for display (will be escaped). */\n  summaryText?: string;\n  /** Bounded check counts (no finding payloads / prompts). */\n  checkSummary?: {\n    aggregateStatus: EvidenceSafeStatus;\n    runs: readonly {\n      runId: string;\n      status: EvidenceSafeStatus;\n      sourceStatus?: EvidenceSafeStatus;\n      errors: number;\n      warnings: number;\n      findings: number;\n    }[];\n  };\n  /** Max chars for embedded JSON payload (default 64 KiB). */\n  maxEmbeddedJsonChars?: number;\n  /**\n   * Pre-escaped HTML bodies for views. Missing ids keep the stub panel.\n   * Callers must pass only trusted, escaped fragments (use evidence view builders).\n   */\n  viewBodies?: Partial<Record<EvidenceViewId, string>>;\n  /**\n   * Safe contract-binding metadata only (status / digest / note). Never embed\n   * expected-value payloads in HTML (6.29.3).\n   */\n  contractBinding?: {\n    status: string;\n    sha256?: string;\n    note?: string;\n    ruleCount?: number;\n  };\n}\n\nfunction statusClass(status: string): string {\n  if (status === \"SAFE\") return \"st-safe\";\n  if (status === \"SAFE WITH WARNINGS\") return \"st-warn\";\n  if (status === \"UNSAFE\") return \"st-unsafe\";\n  return \"st-unknown\";\n}\n\nfunction viewLabel(id: EvidenceViewId): string {\n  switch (id) {\n    case \"summary\":\n      return \"Summary\";\n    case \"tree\":\n      return \"Tree\";\n    case \"timeline\":\n      return \"Timeline\";\n    case \"causal\":\n      return \"Causal failure\";\n    case \"tools-llm\":\n      return \"Tools / LLM\";\n    case \"outcomes\":\n      return \"Outcomes\";\n    case \"contracts\":\n      return \"Contracts / checks\";\n    case \"circuit\":\n      return \"Circuit / guardrails\";\n    case \"diff\":\n      return \"Diff\";\n    case \"safety\":\n      return \"Safety / redaction\";\n    case \"provenance\":\n      return \"Provenance\";\n    default: {\n      const _exhaustive: never = id;\n      return _exhaustive;\n    }\n  }\n}\n\n/**\n * Encode JSON for embedding in HTML without breaking out of a script/pre context.\n * Escapes `<` so `</script>` cannot appear in payload text.\n */\nexport function encodeEmbeddedEvidenceJson(value: unknown): string {\n  return JSON.stringify(value).replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n}\n\nfunction buildEmbeddedPayload(input: EvidenceHtmlShellInput): Record<string, unknown> {\n  return {\n    evidenceFormatVersion: input.evidenceFormatVersion ?? \"1.0\",\n    generator: {\n      name: input.generatorName,\n      version: input.generatorVersion,\n    },\n    createdAt: input.createdAt,\n    runIds: [...input.runIds],\n    assessment: {\n      status: input.assessmentStatus,\n      ...(input.sourceStatus !== undefined ? { sourceStatus: input.sourceStatus } : {}),\n    },\n    policy: {\n      redactionProfile: input.redactionProfile,\n      verificationPolicy: input.verificationPolicy,\n    },\n    checkSummary: input.checkSummary,\n    ...(input.contractBinding !== undefined\n      ? {\n          contract: {\n            status: input.contractBinding.status,\n            ...(input.contractBinding.sha256 !== undefined\n              ? { sha256: input.contractBinding.sha256 }\n              : {}),\n            ...(input.contractBinding.ruleCount !== undefined\n              ? { ruleCount: input.contractBinding.ruleCount }\n              : {}),\n            ...(input.contractBinding.note !== undefined\n              ? { note: input.contractBinding.note }\n              : {}),\n          },\n        }\n      : {}),\n  };\n}\n\n/**\n * Build a self-contained offline `evidence.html` shell (no external assets/network).\n * View panels beyond Summary are stubs filled in later 6.10 chunks.\n */\nexport function buildEvidenceHtmlShell(input: EvidenceHtmlShellInput): string {\n  if (input.runIds.length === 0) {\n    throw new Error(\"Evidence HTML shell requires at least one run id.\");\n  }\n\n  const maxChars = input.maxEmbeddedJsonChars ?? 64 * 1024;\n  let embedded = encodeEmbeddedEvidenceJson(buildEmbeddedPayload(input));\n  if (embedded.length > maxChars) {\n    embedded = encodeEmbeddedEvidenceJson({\n      truncated: true,\n      evidenceFormatVersion: input.evidenceFormatVersion ?? \"1.0\",\n      runIds: [...input.runIds],\n      assessment: { status: input.assessmentStatus },\n      note: \"Embedded payload truncated to bound; open evidence.json / trace files for full detail.\",\n    });\n  }\n\n  const title = escapeHtml(input.title ?? \"AgentInspect evidence\");\n  const runList = input.runIds\n    .map((id) => `<li><code>${escapeHtml(id)}</code></li>`)\n    .join(\"\");\n  const summaryBody =\n    input.summaryText !== undefined && input.summaryText.trim() !== \"\"\n      ? `<pre class=\"summary-md\">${escapeHtml(input.summaryText)}</pre>`\n      : `<p class=\"muted\">Open <code>summary.md</code> in this bundle for the full text summary.</p>`;\n\n  const checkRows =\n    input.checkSummary?.runs\n      .map(\n        (run) =>\n          `<tr><td><code>${escapeHtml(run.runId)}</code></td><td class=\"${statusClass(run.status)}\">${escapeHtml(run.status)}</td><td>${run.errors}</td><td>${run.warnings}</td><td>${run.findings}</td></tr>`,\n      )\n      .join(\"\") ?? \"\";\n\n  const nav = EVIDENCE_VIEW_IDS.map(\n    (id) =>\n      `<a class=\"nav-link\" href=\"#view-${id}\" data-view=\"${id}\">${escapeHtml(viewLabel(id))}</a>`,\n  ).join(\"\\n\");\n\n  const stubPanels = EVIDENCE_VIEW_IDS.filter((id) => id !== \"summary\")\n    .map((id) => {\n      const body = input.viewBodies?.[id];\n      if (body !== undefined && body.trim() !== \"\") {\n        return `  <section id=\"view-${id}\" class=\"panel\" hidden>\n    <h2>${escapeHtml(viewLabel(id))}</h2>\n    ${body}\n  </section>`;\n      }\n      return `  <section id=\"view-${id}\" class=\"panel\" hidden>\n    <h2>${escapeHtml(viewLabel(id))}</h2>\n    <p class=\"muted\">This view will be filled in a later AgentInspect 6.10 release. The shell is offline-ready.</p>\n  </section>`;\n    })\n    .join(\"\\n\");\n\n  return `<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'none'; frame-ancestors 'none'\"/>\n<meta name=\"referrer\" content=\"no-referrer\"/>\n<title>${title}</title>\n<style>\n:root{--bg:#f7f7f5;--fg:#1a1a1a;--muted:#5c5c5c;--line:#d8d8d4;--accent:#0b5fff;--safe:#0a7a3e;--warn:#9a6700;--unsafe:#b42318;--unknown:#5c5c5c}\n*{box-sizing:border-box}\nbody{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;background:var(--bg);color:var(--fg);line-height:1.5}\na{color:var(--accent)}\nheader{padding:1.25rem 1.5rem;border-bottom:1px solid var(--line);background:#fff}\nheader h1{margin:0 0 .35rem;font-size:1.35rem}\n.note{margin:0;color:var(--muted);font-size:.92rem;max-width:52rem}\n.layout{display:grid;grid-template-columns:14rem 1fr;min-height:70vh}\nnav{padding:1rem;border-right:1px solid var(--line);background:#fff}\nnav .nav-link{display:block;padding:.4rem .55rem;margin:0 0 .2rem;border-radius:.35rem;text-decoration:none;color:inherit}\nnav .nav-link:hover,nav .nav-link:focus{background:#eef3ff;outline:2px solid var(--accent);outline-offset:1px}\nmain{padding:1.25rem 1.5rem}\n.panel[hidden]{display:none}\n.badge{display:inline-block;padding:.15rem .55rem;border-radius:.3rem;font-size:.85rem;font-weight:600}\n.st-safe{color:var(--safe)}.st-warn{color:var(--warn)}.st-unsafe{color:var(--unsafe)}.st-unknown{color:var(--unknown)}\ntable{border-collapse:collapse;width:100%;max-width:48rem;background:#fff}\nth,td{border:1px solid var(--line);padding:.4rem .55rem;text-align:left;vertical-align:top}\nth{background:#f0f0ec}\n.summary-md,pre.data{white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid var(--line);padding:.75rem;max-width:52rem}\n.muted{color:var(--muted)}\nul.runs{margin:.4rem 0 1rem;padding-left:1.2rem}\n@media print{\n  nav{display:none}\n  .layout{display:block}\n  .panel[hidden]{display:block!important;page-break-before:always}\n  header{border:0}\n}\n@media (max-width:720px){\n  .layout{grid-template-columns:1fr}\n  nav{border-right:0;border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:.25rem}\n}\n${EVIDENCE_VIEW_CSS}\n</style>\n</head>\n<body>\n<header>\n  <h1>${title}</h1>\n  <p class=\"note\">${escapeHtml(EVIDENCE_HTML_NOTE)}</p>\n</header>\n<div class=\"layout\">\n<nav aria-label=\"Evidence views\">\n${nav}\n</nav>\n<main id=\"main\">\n  <section id=\"view-summary\" class=\"panel\" tabindex=\"-1\">\n    <h2>Summary</h2>\n    <p>Artifact status: <span class=\"badge ${statusClass(input.assessmentStatus)}\">${escapeHtml(input.assessmentStatus)}</span>\n    ${\n      input.sourceStatus !== undefined\n        ? ` · Source status: <span class=\"badge ${statusClass(input.sourceStatus)}\">${escapeHtml(input.sourceStatus)}</span>`\n        : \"\"\n    }</p>\n    <p>Profile: <code>${escapeHtml(input.redactionProfile)}</code> · Verification: <code>${escapeHtml(input.verificationPolicy)}</code></p>\n${\n      input.contractBinding !== undefined\n        ? `    <p>Contract binding: <code>${escapeHtml(input.contractBinding.status)}</code>${\n            input.contractBinding.ruleCount !== undefined\n              ? ` · Rules: <code>${escapeHtml(String(input.contractBinding.ruleCount))}</code>`\n              : \"\"\n          }${\n            input.contractBinding.sha256 !== undefined\n              ? ` · Digest: <code>${escapeHtml(input.contractBinding.sha256.slice(0, 16))}…</code>`\n              : \"\"\n          }</p>${\n            input.contractBinding.note !== undefined && input.contractBinding.note.trim() !== \"\"\n              ? `\\n    <p class=\"muted\">${escapeHtml(input.contractBinding.note)}</p>`\n              : \"\"\n          }\\n`\n        : \"\"\n    }    <p>Generator: <code>${escapeHtml(input.generatorName)}@${escapeHtml(input.generatorVersion)}</code>\n    ${input.createdAt ? ` · Created: <code>${escapeHtml(input.createdAt)}</code>` : \"\"}</p>\n    <h3>Runs</h3>\n    <ul class=\"runs\">${runList}</ul>\n    ${\n      checkRows\n        ? `<h3>Check summary</h3>\n    <table>\n      <thead><tr><th>runId</th><th>artifact</th><th>errors</th><th>warnings</th><th>findings</th></tr></thead>\n      <tbody>${checkRows}</tbody>\n    </table>`\n        : \"\"\n    }\n    <h3>Text summary</h3>\n    ${summaryBody}\n  </section>\n${stubPanels}\n</main>\n</div>\n<script type=\"application/json\" id=\"ai-evidence-data\">${embedded}</script>\n<script>\n(function(){\n  var links=document.querySelectorAll(\"nav .nav-link\");\n  var panels=document.querySelectorAll(\"main .panel\");\n  function show(id){\n    for(var i=0;i<panels.length;i++){\n      var p=panels[i];\n      var on=p.id===\"view-\"+id;\n      if(on){p.removeAttribute(\"hidden\");}else{p.setAttribute(\"hidden\",\"\");}\n    }\n    for(var j=0;j<links.length;j++){\n      var a=links[j];\n      if(a.getAttribute(\"data-view\")===id){a.setAttribute(\"aria-current\",\"page\");}\n      else{a.removeAttribute(\"aria-current\");}\n    }\n  }\n  for(var k=0;k<links.length;k++){\n    links[k].addEventListener(\"click\",function(ev){\n      var id=ev.currentTarget.getAttribute(\"data-view\");\n      if(!id)return;\n      ev.preventDefault();\n      if(history.replaceState){history.replaceState(null,\"\",\"#view-\"+id);}\n      show(id);\n      var panel=document.getElementById(\"view-\"+id);\n      if(panel)panel.focus();\n    });\n  }\n  var hash=(location.hash||\"\").replace(/^#view-/,\"\");\n  var initial=\"summary\";\n  for(var n=0;n<links.length;n++){\n    if(links[n].getAttribute(\"data-view\")===hash){initial=hash;break;}\n  }\n  show(initial);\n})();\n</script>\n</body>\n</html>\n`;\n}\n\n/**\n * Convenience: build shell fields from an EvidenceManifest (views still stubbed).\n */\nexport function buildEvidenceHtmlShellFromManifest(\n  manifest: EvidenceManifest,\n  extras?: Partial<\n    Pick<EvidenceHtmlShellInput, \"summaryText\" | \"checkSummary\" | \"title\" | \"viewBodies\">\n  >,\n): string {\n  return buildEvidenceHtmlShell({\n    title: extras?.title,\n    runIds: manifest.source.runIds,\n    assessmentStatus: manifest.assessment.status,\n    sourceStatus: manifest.assessment.sourceStatus,\n    redactionProfile: manifest.policy.redactionProfile,\n    verificationPolicy: manifest.policy.verificationPolicy,\n    generatorName: manifest.generator.name,\n    generatorVersion: manifest.generator.version,\n    createdAt: manifest.createdAt,\n    evidenceFormatVersion: manifest.evidenceFormatVersion,\n    summaryText: extras?.summaryText,\n    checkSummary: extras?.checkSummary,\n    viewBodies: extras?.viewBodies,\n  });\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport {\n  extractOutcomesFromPersistedEvents,\n  renderObservedOutcomesHtml,\n  summarizeObservedOutcomes,\n} from \"../outcomes/index.js\";\nimport { persistedInspectEventsToTraceEvents } from \"../persisted/to-trace-event.js\";\nimport { diffTraceEvents, renderRunDiff } from \"../diff/index.js\";\nimport type { PersistedInspectEvent } from \"../types/persisted-inspect-event.js\";\n\nexport interface EvidenceCheckFindingSummary {\n  runId: string;\n  ruleId: string;\n  severity: string;\n  message: string;\n  category?: string;\n  detector?: string;\n  confidence?: string;\n  action?: string;\n}\n\nexport interface EvidenceContractsViewInput {\n  aggregateStatus: string;\n  runs: readonly {\n    runId: string;\n    status: string;\n    sourceStatus?: string;\n    errors: number;\n    warnings: number;\n    findings: number;\n  }[];\n  findingSummaries?: readonly EvidenceCheckFindingSummary[];\n}\n\nfunction boundMessage(message: string, max = 200): string {\n  const trimmed = message.trim();\n  if (trimmed.length <= max) return trimmed;\n  return `${trimmed.slice(0, max)}…`;\n}\n\n/**\n * Contracts / checks HTML: aggregate status + bounded finding taxonomy (no evidence payloads).\n */\nexport function buildEvidenceContractsViewHtml(input: EvidenceContractsViewInput): string {\n  const rows = input.runs\n    .map(\n      (run) =>\n        `<tr><td><code>${escapeHtml(run.runId)}</code></td><td>${escapeHtml(run.status)}</td><td>${escapeHtml(run.sourceStatus ?? \"—\")}</td><td>${run.errors}</td><td>${run.warnings}</td><td>${run.findings}</td></tr>`,\n    )\n    .join(\"\");\n\n  const findings = input.findingSummaries ?? [];\n  const findingRows =\n    findings.length === 0\n      ? `<p class=\"muted\">No structured check findings recorded for the redacted artifact.</p>`\n      : `<table>\n  <thead><tr><th>runId</th><th>severity</th><th>rule</th><th>category</th><th>detector</th><th>message</th></tr></thead>\n  <tbody>${findings\n    .map(\n      (f) =>\n        `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.severity)}</td><td><code>${escapeHtml(f.ruleId)}</code></td><td>${escapeHtml(f.category ?? \"—\")}</td><td>${escapeHtml(f.detector ?? \"—\")}</td><td>${escapeHtml(boundMessage(f.message))}</td></tr>`,\n    )\n    .join(\"\")}</tbody>\n</table>`;\n\n  return `<p>Aggregate artifact status: <strong>${escapeHtml(input.aggregateStatus)}</strong></p>\n<table>\n  <thead><tr><th>runId</th><th>artifact</th><th>source</th><th>errors</th><th>warnings</th><th>findings</th></tr></thead>\n  <tbody>${rows}</tbody>\n</table>\n<h3>Finding summaries</h3>\n${findingRows}\n<p class=\"muted\">TraceContract / check details are best-effort local results — not a compliance certification.</p>`;\n}\n\n/**\n * Observed outcomes view from persisted inspect events (redacted artifact).\n */\nexport function buildEvidenceOutcomesViewHtml(\n  runs: readonly { runId: string; events: readonly PersistedInspectEvent[] }[],\n): string {\n  if (runs.length === 0) {\n    return `<p class=\"muted\">No runs available for outcome extraction.</p>`;\n  }\n  const parts: string[] = [];\n  for (const run of runs) {\n    const forRun = run.events.filter((event) => event.runId === run.runId);\n    const summary = summarizeObservedOutcomes(extractOutcomesFromPersistedEvents(forRun));\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(run.runId)}</code></h3>`);\n    parts.push(renderObservedOutcomesHtml(summary));\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\n/**\n * Diff view: when two event sets are supplied, render a local run diff.\n * Otherwise show an empty-state explaining baseline/candidate is optional.\n */\nexport function buildEvidenceDiffViewHtml(parts?: {\n  leftRunId: string;\n  rightRunId: string;\n  leftEvents: readonly PersistedInspectEvent[];\n  rightEvents: readonly PersistedInspectEvent[];\n}): string {\n  if (\n    parts === undefined ||\n    parts.leftEvents.length === 0 ||\n    parts.rightEvents.length === 0\n  ) {\n    return `<p class=\"muted\">No baseline/candidate pair was supplied for this evidence bundle. Attach two runs (or a reporter baseline) to populate this view.</p>`;\n  }\n\n  try {\n    const left = persistedInspectEventsToTraceEvents(\n      parts.leftEvents.filter((e) => e.runId === parts.leftRunId),\n    );\n    const right = persistedInspectEventsToTraceEvents(\n      parts.rightEvents.filter((e) => e.runId === parts.rightRunId),\n    );\n    if (left.length === 0 || right.length === 0) {\n      return `<p class=\"muted\">Could not normalize both runs for diff (missing v0.1-compatible events).</p>`;\n    }\n    const result = diffTraceEvents(left, right);\n    const text = renderRunDiff(result, { color: false, verbose: false });\n    return `<p>Comparing <code>${escapeHtml(parts.leftRunId)}</code> → <code>${escapeHtml(parts.rightRunId)}</code></p>\n<pre class=\"summary-md\">${escapeHtml(text)}</pre>`;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return `<p class=\"muted\">Diff unavailable: ${escapeHtml(message)}</p>`;\n  }\n}\n","import { escapeHtml, flattenTree } from \"../exporters/helpers.js\";\nimport type { InspectRunTree } from \"../types/inspect-event.js\";\n\nimport type { EvidenceCheckFindingSummary } from \"./views-contract.js\";\nimport type { EvidenceSafeStatus, EvidenceSourceHash } from \"./types.js\";\n\nexport interface EvidenceSafetyViewInput {\n  artifactStatus: EvidenceSafeStatus | string;\n  sourceStatus?: EvidenceSafeStatus | string;\n  redactionProfile: string;\n  verificationPolicy: string;\n  redaction?: {\n    totalFindings: number;\n    runs: readonly { runId: string; findings: number; detectors: string[] }[];\n  };\n  findingSummaries?: readonly EvidenceCheckFindingSummary[];\n}\n\nexport interface EvidenceProvenanceViewInput {\n  generatorName: string;\n  generatorVersion: string;\n  evidenceFormatVersion: string;\n  createdAt?: string;\n  runIds: readonly string[];\n  traceSchemaVersions: readonly string[];\n  sourceHashes: readonly EvidenceSourceHash[];\n  packagedFiles: readonly { path: string; role?: string }[];\n  note?: string;\n}\n\n/**\n * Safety / redaction view: artifact vs source status + detector summary (no raw secrets).\n */\nexport function buildEvidenceSafetyViewHtml(input: EvidenceSafetyViewInput): string {\n  const findingRows =\n    (input.findingSummaries ?? []).length === 0\n      ? `<p class=\"muted\">No safety findings on the redacted artifact.</p>`\n      : `<table>\n  <thead><tr><th>runId</th><th>severity</th><th>category</th><th>detector</th><th>action</th><th>message</th></tr></thead>\n  <tbody>${(input.findingSummaries ?? [])\n    .map((f) => {\n      const msg =\n        f.message.length > 160 ? `${f.message.slice(0, 160)}…` : f.message;\n      return `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.severity)}</td><td>${escapeHtml(f.category ?? \"—\")}</td><td>${escapeHtml(f.detector ?? \"—\")}</td><td>${escapeHtml(f.action ?? \"—\")}</td><td>${escapeHtml(msg)}</td></tr>`;\n    })\n    .join(\"\")}</tbody>\n</table>`;\n\n  const redactionBlock =\n    input.redaction === undefined\n      ? `<p class=\"muted\">No redaction report attached.</p>`\n      : `<p>Total redaction findings: <strong>${input.redaction.totalFindings}</strong></p>\n<ul>${input.redaction.runs\n          .map(\n            (run) =>\n              `<li><code>${escapeHtml(run.runId)}</code>: ${run.findings} finding(s); detectors: ${escapeHtml(run.detectors.join(\", \") || \"none\")}</li>`,\n          )\n          .join(\"\")}</ul>`;\n\n  return `<p>Artifact status: <strong>${escapeHtml(String(input.artifactStatus))}</strong>\n  ${\n    input.sourceStatus !== undefined\n      ? ` · Source status: <strong>${escapeHtml(String(input.sourceStatus))}</strong>`\n      : \"\"\n  }</p>\n<p>Redaction profile: <code>${escapeHtml(input.redactionProfile)}</code> · Verification: <code>${escapeHtml(input.verificationPolicy)}</code></p>\n<h3>Redaction</h3>\n${redactionBlock}\n<h3>Safety findings (artifact)</h3>\n${findingRows}\n<p class=\"muted\">Best-effort local verification only — not a compliance certification. Gate sharing on artifact status.</p>`;\n}\n\n/**\n * Provenance / mapping view: generator, schema versions, source hashes, packaged roles.\n */\nexport function buildEvidenceProvenanceViewHtml(input: EvidenceProvenanceViewInput): string {\n  const hashes =\n    input.sourceHashes.length === 0\n      ? `<p class=\"muted\">No source hashes recorded.</p>`\n      : `<table>\n  <thead><tr><th>runId</th><th>algorithm</th><th>hash</th></tr></thead>\n  <tbody>${input.sourceHashes\n    .map(\n      (h) =>\n        `<tr><td><code>${escapeHtml(h.runId)}</code></td><td>${escapeHtml(h.algorithm)}</td><td><code>${escapeHtml(h.hash)}</code></td></tr>`,\n    )\n    .join(\"\")}</tbody>\n</table>`;\n\n  const files =\n    input.packagedFiles.length === 0\n      ? `<p class=\"muted\">No packaged files listed.</p>`\n      : `<ul>${input.packagedFiles\n          .map(\n            (f) =>\n              `<li><code>${escapeHtml(f.path)}</code>${f.role ? ` <span class=\"meta\">(${escapeHtml(f.role)})</span>` : \"\"}</li>`,\n          )\n          .join(\"\")}</ul>`;\n\n  return `<p>Generator: <code>${escapeHtml(input.generatorName)}@${escapeHtml(input.generatorVersion)}</code>\n  · Evidence format: <code>${escapeHtml(input.evidenceFormatVersion)}</code>\n  ${input.createdAt ? ` · Created: <code>${escapeHtml(input.createdAt)}</code>` : \"\"}</p>\n<p>Runs: ${input.runIds.map((id) => `<code>${escapeHtml(id)}</code>`).join(\", \")}</p>\n<p>Trace schema versions: ${\n    input.traceSchemaVersions.length > 0\n      ? input.traceSchemaVersions.map((v) => `<code>${escapeHtml(v)}</code>`).join(\", \")\n      : \"<span class=\\\"muted\\\">unknown</span>\"\n  }</p>\n<h3>Source hashes (pre-redaction input)</h3>\n${hashes}\n<h3>Packaged files</h3>\n${files}\n<p class=\"muted\">${escapeHtml(input.note ?? \"Reader/mapping losses are reported elsewhere when present; relationships are never invented without confidence policy.\")}</p>`;\n}\n\n/**\n * Tools / LLM metadata view: names, kinds, statuses, durations — no prompts/outputs.\n */\nexport function buildEvidenceToolsLlmViewHtml(trees: readonly InspectRunTree[]): string {\n  if (trees.length === 0) {\n    return `<p class=\"muted\">No runs available for tool/LLM metadata.</p>`;\n  }\n  const parts: string[] = [];\n  for (const tree of trees) {\n    const nodes = flattenTree(tree).filter(\n      (n) => n.event.kind === \"TOOL\" || n.event.kind === \"LLM\" || n.event.kind === \"AGENT\",\n    );\n    parts.push(`<article class=\"run-block\">`);\n    parts.push(`<h3><code>${escapeHtml(tree.runId)}</code></h3>`);\n    if (nodes.length === 0) {\n      parts.push(`<p class=\"muted\">No TOOL/LLM/AGENT events in this run.</p>`);\n    } else {\n      parts.push(`<table>\n  <thead><tr><th>name</th><th>kind</th><th>status</th><th>durationMs</th></tr></thead>\n  <tbody>${nodes\n    .map((n) => {\n      const dur =\n        n.event.durationMs !== undefined && Number.isFinite(n.event.durationMs)\n          ? String(n.event.durationMs)\n          : \"—\";\n      return `<tr><td>${escapeHtml(n.event.name)}</td><td>${escapeHtml(n.event.kind)}</td><td>${escapeHtml(n.event.status ?? \"?\")}</td><td>${escapeHtml(dur)}</td></tr>`;\n    })\n    .join(\"\")}</tbody>\n</table>`);\n    }\n    parts.push(`</article>`);\n  }\n  return parts.join(\"\\n\");\n}\n\n/**\n * Circuit / guardrails placeholder filled with conservative empty state unless findings supplied.\n */\nexport function buildEvidenceCircuitViewHtml(parts?: {\n  findings?: readonly { runId: string; name: string; status: string; detail?: string }[];\n}): string {\n  const findings = parts?.findings ?? [];\n  if (findings.length === 0) {\n    return `<p class=\"muted\">No circuit or guardrail findings were attached to this evidence bundle.</p>`;\n  }\n  return `<table>\n  <thead><tr><th>runId</th><th>name</th><th>status</th><th>detail</th></tr></thead>\n  <tbody>${findings\n    .map(\n      (f) =>\n        `<tr><td><code>${escapeHtml(f.runId)}</code></td><td>${escapeHtml(f.name)}</td><td>${escapeHtml(f.status)}</td><td>${escapeHtml(f.detail ?? \"—\")}</td></tr>`,\n    )\n    .join(\"\")}</tbody>\n</table>`;\n}\n","import { assertEvidenceRelativePath } from \"./paths.js\";\n\nexport interface ZipEntry {\n  path: string;\n  content: string | Uint8Array;\n}\n\nconst CRC_TABLE = (() => {\n  const table = new Uint32Array(256);\n  for (let n = 0; n < 256; n += 1) {\n    let c = n;\n    for (let k = 0; k < 8; k += 1) {\n      c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n    }\n    table[n] = c >>> 0;\n  }\n  return table;\n})();\n\nfunction crc32(data: Uint8Array): number {\n  let crc = 0xffffffff;\n  for (let i = 0; i < data.length; i += 1) {\n    crc = CRC_TABLE[(crc ^ data[i]!) & 0xff]! ^ (crc >>> 8);\n  }\n  return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction toBytes(content: string | Uint8Array): Uint8Array {\n  return typeof content === \"string\" ? Buffer.from(content, \"utf8\") : content;\n}\n\nfunction u16(value: number): Buffer {\n  const buf = Buffer.alloc(2);\n  buf.writeUInt16LE(value >>> 0, 0);\n  return buf;\n}\n\nfunction u32(value: number): Buffer {\n  const buf = Buffer.alloc(4);\n  buf.writeUInt32LE(value >>> 0, 0);\n  return buf;\n}\n\n/**\n * Build a minimal ZIP archive (STORE method) with traversal-safe relative paths.\n * No external dependencies — suitable for Evidence `--format zip`.\n */\nexport function buildZipArchive(entries: readonly ZipEntry[]): Buffer {\n  if (entries.length === 0) {\n    throw new Error(\"ZIP archive requires at least one entry.\");\n  }\n\n  const locals: Buffer[] = [];\n  const centrals: Buffer[] = [];\n  let offset = 0;\n\n  const seen = new Set<string>();\n  for (const entry of entries) {\n    const name = assertEvidenceRelativePath(entry.path);\n    if (seen.has(name)) {\n      throw new Error(`Duplicate ZIP entry path: ${name}`);\n    }\n    seen.add(name);\n\n    const nameBytes = Buffer.from(name, \"utf8\");\n    const data = toBytes(entry.content);\n    const checksum = crc32(data);\n    const size = data.byteLength;\n\n    const local = Buffer.concat([\n      u32(0x04034b50),\n      u16(20), // version needed\n      u16(0), // flags\n      u16(0), // method STORE\n      u16(0), // time\n      u16(0), // date\n      u32(checksum),\n      u32(size),\n      u32(size),\n      u16(nameBytes.length),\n      u16(0), // extra length\n      nameBytes,\n      Buffer.from(data),\n    ]);\n\n    const central = Buffer.concat([\n      u32(0x02014b50),\n      u16(20), // version made by\n      u16(20), // version needed\n      u16(0),\n      u16(0),\n      u16(0),\n      u16(0),\n      u32(checksum),\n      u32(size),\n      u32(size),\n      u16(nameBytes.length),\n      u16(0),\n      u16(0),\n      u16(0),\n      u16(0),\n      u32(0),\n      u32(offset),\n      nameBytes,\n    ]);\n\n    locals.push(local);\n    centrals.push(central);\n    offset += local.length;\n  }\n\n  const centralDir = Buffer.concat(centrals);\n  const end = Buffer.concat([\n    u32(0x06054b50),\n    u16(0),\n    u16(0),\n    u16(entries.length),\n    u16(entries.length),\n    u32(centralDir.length),\n    u32(offset),\n    u16(0),\n  ]);\n\n  return Buffer.concat([...locals, centralDir, end]);\n}\n","/**\n * Evidence integrity verification (bundle verify) — schema, presence, hashes.\n */\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { sha256Equals, sha256Hex } from \"./hash.js\";\nimport { parseEvidenceManifestJson } from \"./manifest.js\";\nimport { assertEvidenceRelativePath } from \"./paths.js\";\nimport {\n  EVIDENCE_MANIFEST_FILENAME,\n  EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n  type EvidenceManifest,\n} from \"./types.js\";\nimport { verifyEvidenceContractBinding } from \"./contract-binding.js\";\n\nexport type EvidenceVerifyStatus = \"pass\" | \"fail\";\n\nexport interface EvidenceVerifyIssue {\n  code:\n    | \"manifest_missing\"\n    | \"manifest_invalid\"\n    | \"file_missing\"\n    | \"file_unexpected\"\n    | \"hash_mismatch\"\n    | \"assessment_missing\"\n    | \"provenance_missing\"\n    | \"path_unsafe\"\n    | \"io_error\"\n    | \"contract_file_missing\"\n    | \"contract_hash_mismatch\"\n    | \"contract_digest_mismatch\"\n    | \"contract_binding_invalid\";\n  severity: \"error\" | \"warning\";\n  message: string;\n  path?: string;\n}\n\nexport interface EvidenceVerifyResult {\n  ok: boolean;\n  status: EvidenceVerifyStatus;\n  root: string;\n  manifest?: EvidenceManifest;\n  issues: EvidenceVerifyIssue[];\n  checkedFiles: number;\n}\n\nexport interface EvidenceVerifyOptions {\n  /** Unexpected files: default fail for share/strict-style verification. */\n  unexpectedFiles?: \"fail\" | \"warn\" | \"ignore\";\n}\n\nasync function listFilesRecursive(root: string): Promise<string[]> {\n  const out: string[] = [];\n  async function walk(dir: string): Promise<void> {\n    const entries = await readdir(dir, { withFileTypes: true });\n    for (const entry of entries) {\n      const abs = path.join(dir, entry.name);\n      if (entry.isDirectory()) {\n        await walk(abs);\n      } else if (entry.isFile()) {\n        const rel = path.relative(root, abs).split(path.sep).join(\"/\");\n        out.push(rel);\n      }\n    }\n  }\n  await walk(root);\n  return out.sort((a, b) => a.localeCompare(b));\n}\n\n/**\n * Verify an Evidence v2 directory (contains `evidence.json`).\n * Does not extract ZIP archives — callers should unpack first when needed.\n */\nexport async function verifyEvidenceDirectory(\n  rootPath: string,\n  options: EvidenceVerifyOptions = {},\n): Promise<EvidenceVerifyResult> {\n  const unexpectedMode = options.unexpectedFiles ?? \"fail\";\n  const root = path.resolve(rootPath);\n  const issues: EvidenceVerifyIssue[] = [];\n\n  let rootStat;\n  try {\n    rootStat = await stat(root);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return {\n      ok: false,\n      status: \"fail\",\n      root,\n      issues: [{ code: \"io_error\", severity: \"error\", message: `Cannot read path: ${message}` }],\n      checkedFiles: 0,\n    };\n  }\n  if (!rootStat.isDirectory()) {\n    return {\n      ok: false,\n      status: \"fail\",\n      root,\n      issues: [\n        {\n          code: \"io_error\",\n          severity: \"error\",\n          message: \"Evidence verify expects a directory containing evidence.json (unpack ZIP first).\",\n        },\n      ],\n      checkedFiles: 0,\n    };\n  }\n\n  const manifestPath = path.join(root, EVIDENCE_MANIFEST_FILENAME);\n  let manifestText: string;\n  try {\n    manifestText = await readFile(manifestPath, \"utf-8\");\n  } catch {\n    return {\n      ok: false,\n      status: \"fail\",\n      root,\n      issues: [\n        {\n          code: \"manifest_missing\",\n          severity: \"error\",\n          message: `Missing ${EVIDENCE_MANIFEST_FILENAME}`,\n          path: EVIDENCE_MANIFEST_FILENAME,\n        },\n      ],\n      checkedFiles: 0,\n    };\n  }\n\n  let manifest: EvidenceManifest;\n  try {\n    manifest = parseEvidenceManifestJson(manifestText);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return {\n      ok: false,\n      status: \"fail\",\n      root,\n      issues: [\n        {\n          code: \"manifest_invalid\",\n          severity: \"error\",\n          message,\n          path: EVIDENCE_MANIFEST_FILENAME,\n        },\n      ],\n      checkedFiles: 0,\n    };\n  }\n\n  if (!manifest.assessment?.status) {\n    issues.push({\n      code: \"assessment_missing\",\n      severity: \"error\",\n      message: \"Manifest assessment.status is required.\",\n    });\n  }\n  if (!manifest.generator?.name || !manifest.generator?.version) {\n    issues.push({\n      code: \"provenance_missing\",\n      severity: \"error\",\n      message: \"Manifest generator.name and generator.version are required.\",\n    });\n  }\n  if (!manifest.source?.runIds?.length) {\n    issues.push({\n      code: \"provenance_missing\",\n      severity: \"error\",\n      message: \"Manifest source.runIds must be non-empty.\",\n    });\n  }\n\n  const listed = new Set<string>();\n  for (const file of manifest.files) {\n    let rel: string;\n    try {\n      rel = assertEvidenceRelativePath(file.path);\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      issues.push({\n        code: \"path_unsafe\",\n        severity: \"error\",\n        message,\n        path: file.path,\n      });\n      continue;\n    }\n    if (rel === EVIDENCE_MANIFEST_FILENAME) {\n      issues.push({\n        code: \"manifest_invalid\",\n        severity: \"error\",\n        message: `${EVIDENCE_MANIFEST_FILENAME} must not list itself in files[].`,\n        path: rel,\n      });\n      continue;\n    }\n    listed.add(rel);\n    const abs = path.join(root, ...rel.split(\"/\"));\n    let bytes: Buffer;\n    try {\n      bytes = await readFile(abs);\n    } catch {\n      issues.push({\n        code: \"file_missing\",\n        severity: \"error\",\n        message: `Listed file missing: ${rel}`,\n        path: rel,\n      });\n      continue;\n    }\n    const actual = sha256Hex(bytes);\n    if (!sha256Equals(file.sha256, actual)) {\n      issues.push({\n        code: \"hash_mismatch\",\n        severity: \"error\",\n        message: `SHA-256 mismatch for ${rel}`,\n        path: rel,\n      });\n    }\n  }\n\n  let onDisk: string[] = [];\n  try {\n    onDisk = await listFilesRecursive(root);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    issues.push({ code: \"io_error\", severity: \"error\", message });\n  }\n\n  for (const rel of onDisk) {\n    if (rel === EVIDENCE_MANIFEST_FILENAME) continue;\n    if (listed.has(rel)) continue;\n    if (unexpectedMode === \"ignore\") continue;\n    issues.push({\n      code: \"file_unexpected\",\n      severity: unexpectedMode === \"warn\" ? \"warning\" : \"error\",\n      message: `Unexpected file not listed in manifest: ${rel}`,\n      path: rel,\n    });\n  }\n\n  if (manifest.contract !== undefined) {\n    const contractRel =\n      manifest.contract.path ?? EVIDENCE_RESOLVED_CONTRACT_FILENAME;\n    let resolvedBytes: string | undefined;\n    try {\n      resolvedBytes = await readFile(path.join(root, ...contractRel.split(\"/\")), \"utf-8\");\n    } catch {\n      resolvedBytes = undefined;\n    }\n    let checkResultsJson: string | undefined;\n    try {\n      checkResultsJson = await readFile(path.join(root, \"check-results.json\"), \"utf-8\");\n    } catch {\n      checkResultsJson = undefined;\n    }\n    for (const issue of verifyEvidenceContractBinding({\n      binding: manifest.contract,\n      ...(resolvedBytes !== undefined ? { resolvedContractBytes: resolvedBytes } : {}),\n      ...(checkResultsJson !== undefined ? { checkResultsJson } : {}),\n    })) {\n      issues.push(issue);\n    }\n  }\n\n  const hasError = issues.some((issue) => issue.severity === \"error\");\n  return {\n    ok: !hasError,\n    status: hasError ? \"fail\" : \"pass\",\n    root,\n    manifest,\n    issues,\n    checkedFiles: listed.size,\n  };\n}\n","/**\n * Helpers for CI Evidence v2 packages (same files as share-safe bundles).\n */\nimport { buildEvidenceHtmlShell } from \"./html-shell.js\";\nimport {\n  buildEvidenceManifest,\n  collectTraceSchemaVersions,\n  serializeEvidenceManifest,\n} from \"./manifest.js\";\nimport { sha256Hex } from \"./hash.js\";\nimport {\n  EVIDENCE_ASSESSMENT_NOTE,\n  EVIDENCE_FORMAT_VERSION,\n  EVIDENCE_MANIFEST_FILENAME,\n  EVIDENCE_RESOLVED_CONTRACT_FILENAME,\n  type EvidenceContractBinding,\n  type EvidenceManifest,\n  type EvidenceSafeStatus,\n} from \"./types.js\";\nimport { EVIDENCE_HTML_FILENAME } from \"./html-shell.js\";\nimport {\n  bindCheckResultsToContract,\n  buildEvidenceContractPackage,\n  serializeCheckResultsJson,\n  type BuildEvidenceContractPackageInput,\n} from \"./contract-binding.js\";\n\nexport interface EvidenceCiPackageInput {\n  generatorVersion: string;\n  runIds: readonly string[];\n  /** Pre-redaction source bytes keyed by run id (for sourceHashes). */\n  sourceContents: ReadonlyMap<string, string> | Record<string, string>;\n  /** Redacted combined JSONL written as trace.jsonl. */\n  redactedTraceJsonl: string;\n  redactionProfile: \"local\" | \"share\" | \"strict\";\n  assessmentStatus: EvidenceSafeStatus;\n  sourceStatus?: EvidenceSafeStatus;\n  checkResultsJson: string;\n  createdAt?: string;\n  summaryText?: string;\n  /** Optional TraceFacts/parity summary embedded in evidence.json (6.14+). */\n  semantics?: EvidenceManifest[\"semantics\"];\n  /**\n   * Optional TraceContract / preset binding (6.28+).\n   * When omitted, no contract section is written (older Evidence shape).\n   * Pass `{ engineVersion, source }` with neither contract nor preset to record `unavailable`.\n   */\n  contractPackage?: BuildEvidenceContractPackageInput;\n}\n\nexport interface EvidenceCiPackageFiles {\n  \"evidence.html\": string;\n  \"evidence.json\": string;\n  \"check-results.json\": string;\n  \"trace.jsonl\": string;\n  \"contract.resolved.json\"?: string;\n  manifest: EvidenceManifest;\n}\n\nfunction asMap(\n  value: ReadonlyMap<string, string> | Record<string, string>,\n): Map<string, string> {\n  if (value instanceof Map) return new Map(value);\n  return new Map(Object.entries(value));\n}\n\n/**\n * Build the standard CI evidence files (in memory) using Evidence v2 helpers.\n * Order (6.29.3): resolve → safety → bind → HTML → manifest last.\n * Optionally packages `contract.resolved.json` and binds digests (6.28+).\n */\nexport function buildEvidenceCiPackage(input: EvidenceCiPackageInput): EvidenceCiPackageFiles {\n  const sources = asMap(input.sourceContents);\n  const sourceHashes = input.runIds.map((runId) => ({\n    runId,\n    algorithm: \"sha256\" as const,\n    hash: sha256Hex(sources.get(runId) ?? \"\"),\n  }));\n  const schemaVersions = new Set<string>();\n  for (const content of sources.values()) {\n    for (const version of collectTraceSchemaVersions(content)) {\n      schemaVersions.add(version);\n    }\n  }\n  for (const version of collectTraceSchemaVersions(input.redactedTraceJsonl)) {\n    schemaVersions.add(version);\n  }\n\n  const createdAt = input.createdAt ?? new Date().toISOString();\n\n  let checkResultsJson = input.checkResultsJson;\n  let contractBinding: EvidenceContractBinding | undefined;\n  let contractFileContent: string | undefined;\n\n  if (input.contractPackage !== undefined) {\n    const packaged = buildEvidenceContractPackage({\n      ...input.contractPackage,\n      engineVersion: input.contractPackage.engineVersion || input.generatorVersion,\n    });\n    contractBinding = packaged.binding;\n    if (packaged.resolvedJson !== undefined) {\n      contractFileContent = packaged.resolvedJson;\n    }\n    let parsed: Record<string, unknown>;\n    try {\n      parsed = JSON.parse(checkResultsJson) as Record<string, unknown>;\n    } catch {\n      parsed = { raw: checkResultsJson };\n    }\n    checkResultsJson = serializeCheckResultsJson(\n      bindCheckResultsToContract(parsed, packaged.checkBinding),\n    );\n  }\n\n  const evidenceHtml = buildEvidenceHtmlShell({\n    title: \"AgentInspect evidence\",\n    runIds: input.runIds,\n    assessmentStatus: input.assessmentStatus,\n    sourceStatus: input.sourceStatus,\n    redactionProfile: input.redactionProfile,\n    verificationPolicy: input.redactionProfile,\n    generatorName: \"agent-inspect\",\n    generatorVersion: input.generatorVersion,\n    createdAt,\n    summaryText: input.summaryText,\n    checkSummary: {\n      aggregateStatus: input.assessmentStatus,\n      runs: input.runIds.map((runId) => ({\n        runId,\n        status: input.assessmentStatus,\n        sourceStatus: input.sourceStatus,\n        errors: input.assessmentStatus === \"UNSAFE\" || input.assessmentStatus === \"UNKNOWN\" ? 1 : 0,\n        warnings: input.assessmentStatus === \"SAFE WITH WARNINGS\" ? 1 : 0,\n        findings: 0,\n      })),\n    },\n    ...(contractBinding !== undefined\n      ? {\n          contractBinding: {\n            status: contractBinding.status,\n            ...(contractBinding.sha256 !== undefined\n              ? { sha256: contractBinding.sha256 }\n              : {}),\n            ...(contractBinding.note !== undefined ? { note: contractBinding.note } : {}),\n            ruleCount: contractBinding.ruleIds.length,\n          },\n        }\n      : {}),\n  });\n\n  const packaged = [\n    { path: EVIDENCE_HTML_FILENAME, content: evidenceHtml },\n    { path: \"check-results.json\", content: checkResultsJson },\n    { path: \"trace.jsonl\", content: input.redactedTraceJsonl },\n    ...(contractFileContent !== undefined\n      ? [{ path: EVIDENCE_RESOLVED_CONTRACT_FILENAME, content: contractFileContent }]\n      : []),\n  ];\n\n  const manifest = buildEvidenceManifest({\n    generatorVersion: input.generatorVersion,\n    runIds: input.runIds,\n    traceSchemaVersions: [...schemaVersions].sort((a, b) => a.localeCompare(b)),\n    sourceHashes,\n    redactionProfile: input.redactionProfile,\n    verificationPolicy: input.redactionProfile,\n    assessmentStatus: input.assessmentStatus,\n    sourceStatus: input.sourceStatus,\n    files: packaged,\n    createdAt,\n    note: EVIDENCE_ASSESSMENT_NOTE,\n    ...(input.semantics !== undefined ? { semantics: input.semantics } : {}),\n    ...(contractBinding !== undefined ? { contract: contractBinding } : {}),\n  });\n\n  return {\n    \"evidence.html\": evidenceHtml,\n    \"evidence.json\": serializeEvidenceManifest(manifest),\n    \"check-results.json\": checkResultsJson,\n    \"trace.jsonl\": input.redactedTraceJsonl,\n    ...(contractFileContent !== undefined\n      ? { [EVIDENCE_RESOLVED_CONTRACT_FILENAME]: contractFileContent }\n      : {}),\n    manifest,\n  };\n}\n\nexport { EVIDENCE_FORMAT_VERSION, EVIDENCE_HTML_FILENAME, EVIDENCE_MANIFEST_FILENAME };\n","import type { RedactionProfile } from \"../types.js\";\n\nexport type SuiteCaseStatus = \"pass\" | \"fail\" | \"error\" | \"skipped\";\n\nexport type SuiteDiagnosticCode =\n  | \"AI_SUITE_CONFIG_INVALID\"\n  | \"AI_SUITE_CONFIG_LOAD_FAILED\"\n  | \"AI_SUITE_CASE_TRACE_MISSING\"\n  | \"AI_SUITE_CASE_CHECK_FAILED\"\n  | \"AI_SUITE_CASE_EVAL_FAILED\"\n  | \"AI_SUITE_CASE_OBSERVATION_FAILED\"\n  | \"AI_SUITE_TRACE_UNREADABLE\";\n\nexport interface SuiteDiagnostic {\n  code: SuiteDiagnosticCode;\n  severity: \"error\" | \"warning\" | \"info\";\n  message: string;\n  caseId?: string;\n}\n\nexport interface SuiteCaseConfig {\n  id: string;\n  trace?: string;\n  runId?: string;\n  input?: string;\n  requireTools?: string[];\n  forbidTools?: string[];\n  maxDurationMs?: number;\n  expectedObservations?: string[];\n}\n\nexport interface SuiteChecksConfig {\n  select?: string[];\n  run?: {\n    maxDurationMs?: number;\n    maxDepth?: number;\n  };\n  tool?: {\n    required?: string[];\n    forbidden?: string[];\n  };\n  llm?: {\n    allowedModels?: string[];\n    maxTotalTokens?: number;\n  };\n}\n\nexport interface SuiteEvalConfig {\n  requireSuccess?: boolean;\n  requiredTools?: string[];\n  forbiddenTools?: string[];\n  maxDurationMs?: number;\n  maxDepth?: number;\n  maxRetries?: number;\n  maxTotalTokens?: number;\n}\n\nexport interface SuiteArtifactsConfig {\n  outputDir?: string;\n}\n\nexport interface SuiteConfig {\n  name: string;\n  traces: string;\n  cases: SuiteCaseConfig[];\n  checks?: SuiteChecksConfig;\n  eval?: SuiteEvalConfig;\n  redactionProfile?: RedactionProfile;\n  artifacts?: SuiteArtifactsConfig;\n  baseline?: string;\n  candidate?: string;\n}\n\nexport interface SuiteCaseResult {\n  id: string;\n  status: SuiteCaseStatus;\n  tracePath?: string;\n  runId?: string;\n  checkOk?: boolean;\n  evalOk?: boolean;\n  observationsOk?: boolean;\n  message?: string;\n  diagnostics: SuiteDiagnostic[];\n}\n\nexport interface SuiteRunSummary {\n  passed: number;\n  failed: number;\n  errors: number;\n  skipped: number;\n}\n\nexport interface SuiteRunResult {\n  ok: boolean;\n  status: \"pass\" | \"fail\" | \"error\";\n  suiteName: string;\n  configPath: string;\n  tracesDir: string;\n  startedAt: string;\n  finishedAt: string;\n  summary: SuiteRunSummary;\n  cases: SuiteCaseResult[];\n  diagnostics: SuiteDiagnostic[];\n}\n\nexport interface LoadSuiteConfigOptions {\n  configPath?: string;\n  cwd?: string;\n}\n\nexport interface ValidateSuiteConfigResult {\n  ok: boolean;\n  diagnostics: SuiteDiagnostic[];\n}\n\nexport interface RunSuiteOptions {\n  configPath?: string;\n  cwd?: string;\n  nowMs?: number;\n}\n\nexport interface RenderSuiteReportOptions {\n  format?: \"markdown\" | \"json\";\n}\n\nexport const DEFAULT_SUITE_CONFIG_NAMES = [\n  \"agent-inspect.suite.json\",\n  \"agent-inspect.suite.js\",\n  \"agent-inspect.suite.mjs\",\n  \"agent-inspect.suite.cjs\",\n] as const;\n\nexport const DEFAULT_SUITE_ARTIFACTS_DIR = \".agent-inspect/suite-runs\";\n","import { access } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type {\n  SuiteCaseConfig,\n  SuiteConfig,\n  SuiteDiagnostic,\n  ValidateSuiteConfigResult,\n} from \"./types.js\";\n\nfunction diagnostic(\n  code: SuiteDiagnostic[\"code\"],\n  message: string,\n  severity: SuiteDiagnostic[\"severity\"] = \"error\",\n  caseId?: string,\n): SuiteDiagnostic {\n  return { code, message, severity, ...(caseId !== undefined ? { caseId } : {}) };\n}\n\nfunction asString(value: unknown, label: string): string | undefined {\n  if (value === undefined) return undefined;\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    throw new Error(`${label} must be a non-empty string.`);\n  }\n  return value.trim();\n}\n\nfunction asStringArray(value: unknown, label: string): string[] | undefined {\n  if (value === undefined) return undefined;\n  if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n    throw new Error(`${label} must be an array of strings.`);\n  }\n  return value;\n}\n\nfunction asPositiveNumber(value: unknown, label: string): number | undefined {\n  if (value === undefined) return undefined;\n  if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n    throw new Error(`${label} must be a non-negative number.`);\n  }\n  return value;\n}\n\nfunction validateCaseConfig(\n  value: unknown,\n  index: number,\n): { caseConfig?: SuiteCaseConfig; diagnostics: SuiteDiagnostic[] } {\n  const diagnostics: SuiteDiagnostic[] = [];\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    diagnostics.push(\n      diagnostic(\"AI_SUITE_CONFIG_INVALID\", `cases[${index}] must be an object.`),\n    );\n    return { diagnostics };\n  }\n\n  const raw = value as Record<string, unknown>;\n  try {\n    const id = asString(raw.id, `cases[${index}].id`);\n    if (id === undefined) {\n      diagnostics.push(\n        diagnostic(\"AI_SUITE_CONFIG_INVALID\", `cases[${index}].id is required.`),\n      );\n      return { diagnostics };\n    }\n\n    const trace = asString(raw.trace, `cases[${index}].trace`);\n    const runId = asString(raw.runId, `cases[${index}].runId`);\n    const input = asString(raw.input, `cases[${index}].input`);\n\n    return {\n      caseConfig: {\n        id,\n        ...(trace !== undefined ? { trace } : {}),\n        ...(runId !== undefined ? { runId } : {}),\n        ...(input !== undefined ? { input } : {}),\n        ...(asStringArray(raw.requireTools, `cases[${index}].requireTools`) !== undefined\n          ? { requireTools: asStringArray(raw.requireTools, `cases[${index}].requireTools`) }\n          : {}),\n        ...(asStringArray(raw.forbidTools, `cases[${index}].forbidTools`) !== undefined\n          ? { forbidTools: asStringArray(raw.forbidTools, `cases[${index}].forbidTools`) }\n          : {}),\n        ...(asPositiveNumber(raw.maxDurationMs, `cases[${index}].maxDurationMs`) !== undefined\n          ? {\n              maxDurationMs: asPositiveNumber(\n                raw.maxDurationMs,\n                `cases[${index}].maxDurationMs`,\n              ),\n            }\n          : {}),\n        ...(asStringArray(\n          raw.expectedObservations,\n          `cases[${index}].expectedObservations`,\n        ) !== undefined\n          ? {\n              expectedObservations: asStringArray(\n                raw.expectedObservations,\n                `cases[${index}].expectedObservations`,\n              ),\n            }\n          : {}),\n      },\n      diagnostics,\n    };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    diagnostics.push(diagnostic(\"AI_SUITE_CONFIG_INVALID\", message));\n    return { diagnostics };\n  }\n}\n\nexport function normalizeSuiteConfig(value: unknown): SuiteConfig {\n  if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n    throw new Error(\"Suite config must export an object.\");\n  }\n  const raw = value as Record<string, unknown>;\n  const name = asString(raw.name, \"name\");\n  const traces = asString(raw.traces, \"traces\");\n  if (name === undefined) throw new Error(\"name is required.\");\n  if (traces === undefined) throw new Error(\"traces is required.\");\n\n  if (!Array.isArray(raw.cases) || raw.cases.length === 0) {\n    throw new Error(\"cases must be a non-empty array.\");\n  }\n\n  const cases: SuiteCaseConfig[] = [];\n  for (let index = 0; index < raw.cases.length; index += 1) {\n    const { caseConfig, diagnostics } = validateCaseConfig(raw.cases[index], index);\n    if (diagnostics.length > 0) {\n      throw new Error(diagnostics.map((item) => item.message).join(\"; \"));\n    }\n    if (caseConfig !== undefined) cases.push(caseConfig);\n  }\n\n  const ids = new Set<string>();\n  for (const suiteCase of cases) {\n    if (ids.has(suiteCase.id)) {\n      throw new Error(`Duplicate case id \"${suiteCase.id}\".`);\n    }\n    ids.add(suiteCase.id);\n  }\n\n  const redactionProfile =\n    raw.redactionProfile === \"local\" ||\n    raw.redactionProfile === \"share\" ||\n    raw.redactionProfile === \"strict\"\n      ? raw.redactionProfile\n      : undefined;\n  if (\n    raw.redactionProfile !== undefined &&\n    redactionProfile === undefined\n  ) {\n    throw new Error('redactionProfile must be \"local\", \"share\", or \"strict\".');\n  }\n\n  const config: SuiteConfig = { name, traces, cases };\n  if (raw.checks !== undefined) {\n    if (typeof raw.checks !== \"object\" || Array.isArray(raw.checks)) {\n      throw new Error(\"checks must be an object.\");\n    }\n    config.checks = raw.checks as SuiteConfig[\"checks\"];\n  }\n  if (raw.eval !== undefined) {\n    if (typeof raw.eval !== \"object\" || Array.isArray(raw.eval)) {\n      throw new Error(\"eval must be an object.\");\n    }\n    config.eval = raw.eval as SuiteConfig[\"eval\"];\n  }\n  if (raw.artifacts !== undefined) {\n    if (typeof raw.artifacts !== \"object\" || Array.isArray(raw.artifacts)) {\n      throw new Error(\"artifacts must be an object.\");\n    }\n    const outputDir = asString(\n      (raw.artifacts as Record<string, unknown>).outputDir,\n      \"artifacts.outputDir\",\n    );\n    config.artifacts = outputDir !== undefined ? { outputDir } : {};\n  }\n  if (raw.baseline !== undefined) {\n    const baseline = asString(raw.baseline, \"baseline\");\n    if (baseline !== undefined) config.baseline = baseline;\n  }\n  if (raw.candidate !== undefined) {\n    const candidate = asString(raw.candidate, \"candidate\");\n    if (candidate !== undefined) config.candidate = candidate;\n  }\n  if (redactionProfile !== undefined) config.redactionProfile = redactionProfile;\n  return config;\n}\n\nexport async function validateSuiteConfig(\n  config: SuiteConfig,\n  options: { configDir: string },\n): Promise<ValidateSuiteConfigResult> {\n  const diagnostics: SuiteDiagnostic[] = [];\n  const tracesDir = path.resolve(options.configDir, config.traces);\n  try {\n    await access(tracesDir);\n  } catch {\n    diagnostics.push(\n      diagnostic(\"AI_SUITE_CONFIG_INVALID\", `traces directory not found: ${tracesDir}`),\n    );\n  }\n\n  for (const suiteCase of config.cases) {\n    if (suiteCase.input !== undefined) {\n      const inputPath = path.resolve(options.configDir, suiteCase.input);\n      try {\n        await access(inputPath);\n      } catch {\n        diagnostics.push(\n          diagnostic(\n            \"AI_SUITE_CONFIG_INVALID\",\n            `input fixture not found: ${suiteCase.input}`,\n            \"warning\",\n            suiteCase.id,\n          ),\n        );\n      }\n    }\n  }\n\n  return { ok: diagnostics.every((item) => item.severity !== \"error\"), diagnostics };\n}\n","import { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n  DEFAULT_SUITE_CONFIG_NAMES,\n  type LoadSuiteConfigOptions,\n  type SuiteConfig,\n  type SuiteDiagnostic,\n} from \"./types.js\";\nimport { normalizeSuiteConfig } from \"./validate.js\";\n\nconst CONFIG_EXTENSIONS = new Set([\".json\", \".js\", \".mjs\", \".cjs\"]);\nconst TS_CONFIG_EXTENSIONS = new Set([\".ts\", \".mts\", \".cts\"]);\n\nfunction diagnostic(\n  code: SuiteDiagnostic[\"code\"],\n  message: string,\n): SuiteDiagnostic {\n  return { code, message, severity: \"error\" };\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n  try {\n    await access(filePath);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function resolveSuiteConfigPath(\n  options: LoadSuiteConfigOptions = {},\n): Promise<string> {\n  const cwd = path.resolve(options.cwd ?? process.cwd());\n  if (options.configPath !== undefined && options.configPath.trim() !== \"\") {\n    return path.resolve(cwd, options.configPath.trim());\n  }\n\n  for (const name of DEFAULT_SUITE_CONFIG_NAMES) {\n    const candidate = path.join(cwd, name);\n    if (await fileExists(candidate)) return candidate;\n  }\n\n  throw new Error(\n    `No suite config found. Create one with \\`agent-inspect suite init\\` or pass --config.`,\n  );\n}\n\nexport async function loadSuiteConfig(\n  options: LoadSuiteConfigOptions = {},\n): Promise<{ config: SuiteConfig; configPath: string; configDir: string }> {\n  let configPath: string;\n  try {\n    configPath = await resolveSuiteConfigPath(options);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw Object.assign(new Error(message), {\n      diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n    });\n  }\n\n  const extension = path.extname(configPath);\n  if (TS_CONFIG_EXTENSIONS.has(extension)) {\n    const message =\n      \"TypeScript suite configs require an explicit precompiled JavaScript config or future --config-loader support.\";\n    throw Object.assign(new Error(message), {\n      diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n    });\n  }\n  if (!CONFIG_EXTENSIONS.has(extension)) {\n    const message = \"Unsupported suite config extension. Use .json, .js, .mjs, or .cjs.\";\n    throw Object.assign(new Error(message), {\n      diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n    });\n  }\n\n  try {\n    let raw: unknown;\n    if (extension === \".json\") {\n      raw = JSON.parse(await readFile(configPath, \"utf-8\"));\n    } else {\n      const mod = await import(pathToFileURL(configPath).href);\n      raw = \"default\" in mod ? mod.default : mod;\n    }\n    const config = normalizeSuiteConfig(raw);\n    return {\n      config,\n      configPath,\n      configDir: path.dirname(configPath),\n    };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw Object.assign(new Error(message), {\n      diagnostics: [diagnostic(\"AI_SUITE_CONFIG_LOAD_FAILED\", message)],\n    });\n  }\n}\n\nexport function defaultSuiteConfigTemplate(): SuiteConfig {\n  return {\n    name: \"my-agent-suite\",\n    traces: \"./.agent-inspect\",\n    cases: [\n      {\n        id: \"example-case\",\n        runId: \"example-run\",\n        requireTools: [\"searchDocs\"],\n        maxDurationMs: 30_000,\n        expectedObservations: [\"answerReady\"],\n      },\n    ],\n    checks: {\n      select: [\"run.status\"],\n    },\n    redactionProfile: \"local\",\n    artifacts: {\n      outputDir: \".agent-inspect/suite-runs\",\n    },\n  };\n}\n","import { access } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { getTraceFilePath } from \"../utils.js\";\nimport type { SuiteCaseConfig } from \"./types.js\";\n\nexport interface ResolvedSuiteCase {\n  caseId: string;\n  tracePath?: string;\n  runId?: string;\n  missing: boolean;\n  reason?: string;\n}\n\nasync function exists(filePath: string): Promise<boolean> {\n  try {\n    await access(filePath);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function resolveSuiteCaseTrace(\n  suiteCase: SuiteCaseConfig,\n  options: { configDir: string; tracesDir: string },\n): Promise<ResolvedSuiteCase> {\n  if (suiteCase.trace !== undefined) {\n    const tracePath = path.resolve(options.configDir, suiteCase.trace);\n    if (await exists(tracePath)) {\n      return { caseId: suiteCase.id, tracePath, missing: false };\n    }\n    return {\n      caseId: suiteCase.id,\n      tracePath,\n      missing: true,\n      reason: `trace file not found: ${suiteCase.trace}`,\n    };\n  }\n\n  const runKey = suiteCase.runId ?? suiteCase.id;\n  const directPath = getTraceFilePath(runKey, options.tracesDir);\n  if (await exists(directPath)) {\n    return { caseId: suiteCase.id, tracePath: directPath, runId: runKey, missing: false };\n  }\n\n  const nestedPath = path.join(options.tracesDir, `${path.basename(runKey)}.jsonl`);\n  if (await exists(nestedPath)) {\n    return { caseId: suiteCase.id, tracePath: nestedPath, runId: runKey, missing: false };\n  }\n\n  return {\n    caseId: suiteCase.id,\n    runId: runKey,\n    missing: true,\n    reason: `no trace found for run id \"${runKey}\" under ${options.tracesDir}`,\n  };\n}\n","import path from \"node:path\";\n\nimport {\n  createLlmUsageRule,\n  createObservedOutcomeRule,\n  createRunDurationRule,\n  createRunStatusRule,\n  createToolUsageRule,\n  runTraceChecks,\n  type TraceCheckRule,\n} from \"../checks/index.js\";\nimport { extractOutcomesFromPersistedEvents, extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { openTrace, type TraceReadResult } from \"../readers/index.js\";\nimport type { TraceEvent } from \"../types.js\";\nimport { loadSuiteConfig } from \"./load.js\";\nimport { resolveSuiteCaseTrace } from \"./resolve.js\";\nimport type {\n  RunSuiteOptions,\n  SuiteCaseConfig,\n  SuiteCaseResult,\n  SuiteConfig,\n  SuiteDiagnostic,\n  SuiteRunResult,\n} from \"./types.js\";\n\nfunction diagnostic(\n  code: SuiteDiagnostic[\"code\"],\n  message: string,\n  severity: SuiteDiagnostic[\"severity\"] = \"error\",\n  caseId?: string,\n): SuiteDiagnostic {\n  return { code, message, severity, ...(caseId !== undefined ? { caseId } : {}) };\n}\n\nfunction buildCaseRules(\n  suiteCase: SuiteCaseConfig,\n  config: SuiteConfig,\n): { rules: TraceCheckRule[]; select: string[] } {\n  const rules: TraceCheckRule[] = [];\n  const select = new Set<string>(config.checks?.select ?? []);\n\n  if (select.has(\"run.status\")) {\n    rules.push(createRunStatusRule());\n  }\n\n  const requiredTools = [\n    ...(config.checks?.tool?.required ?? []),\n    ...(suiteCase.requireTools ?? []),\n  ];\n  const forbiddenTools = [\n    ...(config.checks?.tool?.forbidden ?? []),\n    ...(suiteCase.forbidTools ?? []),\n  ];\n  if (requiredTools.length > 0 || forbiddenTools.length > 0) {\n    rules.push(\n      createToolUsageRule({\n        required: requiredTools.length > 0 ? requiredTools : undefined,\n        forbidden: forbiddenTools.length > 0 ? forbiddenTools : undefined,\n      }),\n    );\n    select.add(\"tool.usage\");\n  }\n\n  const maxDurationMs =\n    suiteCase.maxDurationMs ??\n    config.checks?.run?.maxDurationMs ??\n    config.eval?.maxDurationMs;\n  if (maxDurationMs !== undefined) {\n    rules.push(createRunDurationRule({ maxDurationMs }));\n    select.add(\"run.duration\");\n  }\n\n  const llm = config.checks?.llm;\n  if (llm?.allowedModels !== undefined || llm?.maxTotalTokens !== undefined) {\n    rules.push(createLlmUsageRule(llm));\n    select.add(\"llm.usage\");\n  }\n\n  if (select.has(\"outcome.status\")) {\n    rules.push(createObservedOutcomeRule({ failOn: [\"failed\"] }));\n  }\n\n  return { rules, select: [...select] };\n}\n\nfunction outcomesFromRead(read: TraceReadResult) {\n  const persistedOutcomes = extractOutcomesFromPersistedEvents(\n    read.events.filter((event) => event.kind === \"OUTCOME\"),\n  );\n  if (persistedOutcomes.length > 0) return persistedOutcomes;\n\n  const traceEvents: TraceEvent[] = [];\n  for (const event of read.events) {\n    const legacy = event as unknown as TraceEvent;\n    if (\n      typeof legacy === \"object\" &&\n      legacy !== null &&\n      \"event\" in legacy &&\n      legacy.event === \"outcome_observed\"\n    ) {\n      traceEvents.push(legacy);\n    }\n  }\n  return traceEvents.length > 0 ? extractOutcomesFromTraceEvents(traceEvents) : [];\n}\n\nfunction validateExpectedObservations(\n  suiteCase: SuiteCaseConfig,\n  read: TraceReadResult,\n): { ok: boolean; diagnostics: SuiteDiagnostic[] } {\n  const expected = suiteCase.expectedObservations ?? [];\n  if (expected.length === 0) return { ok: true, diagnostics: [] };\n\n  const outcomes = outcomesFromRead(read);\n\n  const diagnostics: SuiteDiagnostic[] = [];\n  for (const name of expected) {\n    const match = outcomes.find((outcome) => outcome.name === name);\n    if (!match) {\n      diagnostics.push(\n        diagnostic(\n          \"AI_SUITE_CASE_OBSERVATION_FAILED\",\n          `Expected observation \"${name}\" was not recorded.`,\n          \"error\",\n          suiteCase.id,\n        ),\n      );\n      continue;\n    }\n    if (match.status !== \"passed\") {\n      diagnostics.push(\n        diagnostic(\n          \"AI_SUITE_CASE_OBSERVATION_FAILED\",\n          `Observation \"${name}\" has status \"${match.status}\", expected \"passed\".`,\n          \"error\",\n          suiteCase.id,\n        ),\n      );\n    }\n  }\n\n  return { ok: diagnostics.length === 0, diagnostics };\n}\n\nasync function runSuiteCase(\n  suiteCase: SuiteCaseConfig,\n  config: SuiteConfig,\n  options: { configDir: string; tracesDir: string },\n): Promise<SuiteCaseResult> {\n  const resolved = await resolveSuiteCaseTrace(suiteCase, options);\n  if (resolved.missing || resolved.tracePath === undefined) {\n    return {\n      id: suiteCase.id,\n      status: \"skipped\",\n      ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n      message: resolved.reason,\n      diagnostics: [\n        diagnostic(\n          \"AI_SUITE_CASE_TRACE_MISSING\",\n          resolved.reason ?? \"Trace not found.\",\n          \"warning\",\n          suiteCase.id,\n        ),\n      ],\n    };\n  }\n\n  let read: TraceReadResult;\n  try {\n    read = await openTrace({ type: \"file\", path: resolved.tracePath });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return {\n      id: suiteCase.id,\n      status: \"error\",\n      tracePath: resolved.tracePath,\n      ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n      message,\n      diagnostics: [\n        diagnostic(\"AI_SUITE_TRACE_UNREADABLE\", message, \"error\", suiteCase.id),\n      ],\n    };\n  }\n\n  const { rules, select } = buildCaseRules(suiteCase, config);\n  const checkResult =\n    rules.length > 0\n      ? runTraceChecks({ read }, { rules, select })\n      : {\n          ok: true,\n          status: \"pass\" as const,\n          format: read.format,\n          summary: { passed: 0, failed: 0, warnings: 0, errors: 0, rulesEvaluated: 0 },\n          findings: [],\n          diagnostics: [],\n          ruleExecutions: [],\n        };\n  const observationResult = validateExpectedObservations(suiteCase, read);\n\n  const diagnostics = [\n    ...checkResult.diagnostics.map((item) =>\n      diagnostic(\n        \"AI_SUITE_CASE_CHECK_FAILED\",\n        item.message,\n        item.severity,\n        suiteCase.id,\n      ),\n    ),\n    ...checkResult.findings\n      .filter((finding) => finding.status === \"fail\")\n      .map((finding) =>\n        diagnostic(\n          \"AI_SUITE_CASE_CHECK_FAILED\",\n          finding.message,\n          finding.severity,\n          suiteCase.id,\n        ),\n      ),\n    ...observationResult.diagnostics,\n  ];\n\n  const checkOk = checkResult.ok;\n  const observationsOk = observationResult.ok;\n  const ok = checkOk && observationsOk;\n  const status = ok ? \"pass\" : checkResult.status === \"error\" ? \"error\" : \"fail\";\n\n  return {\n    id: suiteCase.id,\n    status,\n    tracePath: resolved.tracePath,\n    ...(resolved.runId !== undefined ? { runId: resolved.runId } : {}),\n    checkOk,\n    observationsOk,\n    diagnostics,\n    ...(ok\n      ? {}\n      : {\n          message:\n            diagnostics.map((item) => item.message).join(\"; \") ||\n            checkResult.findings.map((item) => item.message).join(\"; \"),\n        }),\n  };\n}\n\nexport async function runSuite(options: RunSuiteOptions = {}): Promise<SuiteRunResult> {\n  const startedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n  const { config, configPath, configDir } = await loadSuiteConfig(options);\n  const tracesDir = path.resolve(configDir, config.traces);\n\n  const cases: SuiteCaseResult[] = [];\n  const diagnostics: SuiteDiagnostic[] = [];\n\n  for (const suiteCase of config.cases) {\n    cases.push(\n      await runSuiteCase(suiteCase, config, {\n        configDir,\n        tracesDir,\n      }),\n    );\n  }\n\n  const summary = {\n    passed: cases.filter((item) => item.status === \"pass\").length,\n    failed: cases.filter((item) => item.status === \"fail\").length,\n    errors: cases.filter((item) => item.status === \"error\").length,\n    skipped: cases.filter((item) => item.status === \"skipped\").length,\n  };\n\n  const finishedAt = new Date(options.nowMs ?? Date.now()).toISOString();\n  const allSkipped = cases.length > 0 && summary.skipped === cases.length;\n  const ok = summary.failed === 0 && summary.errors === 0 && !allSkipped;\n  const status =\n    summary.errors > 0\n      ? \"error\"\n      : allSkipped\n        ? \"fail\"\n        : summary.failed > 0 || !ok\n          ? \"fail\"\n          : \"pass\";\n\n  return {\n    ok,\n    status,\n    suiteName: config.name,\n    configPath,\n    tracesDir,\n    startedAt,\n    finishedAt,\n    summary,\n    cases,\n    diagnostics,\n  };\n}\n","import type { RenderSuiteReportOptions, SuiteRunResult } from \"./types.js\";\n\nfunction statusLabel(status: string): string {\n  return status.toUpperCase();\n}\n\nexport function renderSuiteReportMarkdown(result: SuiteRunResult): string {\n  const lines: string[] = [];\n  lines.push(`# Suite: ${result.suiteName}`);\n  lines.push(\"\");\n  lines.push(`Status: **${statusLabel(result.status)}**`);\n  lines.push(`Config: \\`${result.configPath}\\``);\n  lines.push(`Traces: \\`${result.tracesDir}\\``);\n  lines.push(`Started: ${result.startedAt}`);\n  lines.push(`Finished: ${result.finishedAt}`);\n  lines.push(\"\");\n  lines.push(\"## Summary\");\n  lines.push(`- Passed: ${result.summary.passed}`);\n  lines.push(`- Failed: ${result.summary.failed}`);\n  lines.push(`- Errors: ${result.summary.errors}`);\n  lines.push(`- Skipped: ${result.summary.skipped}`);\n  lines.push(\"\");\n  lines.push(\"## Cases\");\n  for (const suiteCase of result.cases) {\n    lines.push(`### ${suiteCase.id} — ${statusLabel(suiteCase.status)}`);\n    if (suiteCase.tracePath !== undefined) {\n      lines.push(`- Trace: \\`${suiteCase.tracePath}\\``);\n    }\n    if (suiteCase.runId !== undefined) {\n      lines.push(`- Run: \\`${suiteCase.runId}\\``);\n    }\n    if (suiteCase.message !== undefined && suiteCase.message.trim() !== \"\") {\n      lines.push(`- ${suiteCase.message}`);\n    }\n    if (suiteCase.diagnostics.length > 0) {\n      for (const item of suiteCase.diagnostics) {\n        lines.push(`- [${item.severity}] ${item.message}`);\n      }\n    }\n    lines.push(\"\");\n  }\n  return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderSuiteReport(\n  result: SuiteRunResult,\n  options: RenderSuiteReportOptions = {},\n): string {\n  const format = options.format ?? \"markdown\";\n  if (format === \"json\") {\n    return JSON.stringify(result, null, 2);\n  }\n  return renderSuiteReportMarkdown(result);\n}\n","import type { SuiteConfig } from \"./types.js\";\n\nexport const SUITE_TEMPLATE_IDS = [\n  \"customer-support-agent\",\n  \"refund-agent\",\n  \"sales-assistant\",\n  \"browser-task-agent\",\n  \"mcp-tool-agent\",\n  \"workflow-agent\",\n  \"rag-answer-agent\",\n  \"human-approval-agent\",\n] as const;\n\nexport type SuiteTemplateId = (typeof SUITE_TEMPLATE_IDS)[number];\n\nfunction baseTemplate(name: string, cases: SuiteConfig[\"cases\"]): SuiteConfig {\n  return {\n    name,\n    traces: \"./.agent-inspect\",\n    cases,\n    checks: {\n      select: [\"run.status\", \"outcome.status\"],\n      run: { maxDurationMs: 60_000 },\n    },\n    redactionProfile: \"local\",\n    artifacts: { outputDir: \".agent-inspect/suite-runs\" },\n  };\n}\n\nconst TEMPLATES: Record<SuiteTemplateId, SuiteConfig> = {\n  \"customer-support-agent\": baseTemplate(\"customer-support-agent\", [\n    {\n      id: \"support-ticket\",\n      runId: \"support-ticket\",\n      requireTools: [\"searchDocs\"],\n      forbidTools: [\"deleteAccount\"],\n      expectedObservations: [\"answerReady\"],\n      maxDurationMs: 45_000,\n    },\n  ]),\n  \"refund-agent\": baseTemplate(\"refund-agent\", [\n    {\n      id: \"refund-flow\",\n      runId: \"refund-flow\",\n      requireTools: [\"searchDocs\"],\n      forbidTools: [\"deleteAccount\"],\n      expectedObservations: [\"policyShown\"],\n      maxDurationMs: 30_000,\n    },\n  ]),\n  \"sales-assistant\": baseTemplate(\"sales-assistant\", [\n    {\n      id: \"quote-request\",\n      runId: \"quote-request\",\n      requireTools: [\"lookupPricing\"],\n      maxDurationMs: 30_000,\n    },\n  ]),\n  \"browser-task-agent\": baseTemplate(\"browser-task-agent\", [\n    {\n      id: \"browser-nav\",\n      runId: \"browser-nav\",\n      requireTools: [\"browserNavigate\"],\n      maxDurationMs: 120_000,\n    },\n  ]),\n  \"mcp-tool-agent\": baseTemplate(\"mcp-tool-agent\", [\n    {\n      id: \"mcp-call\",\n      runId: \"mcp-call\",\n      requireTools: [\"mcp:tools/list\"],\n      maxDurationMs: 30_000,\n    },\n  ]),\n  \"workflow-agent\": baseTemplate(\"workflow-agent\", [\n    {\n      id: \"workflow-handoff\",\n      runId: \"workflow-handoff\",\n      requireTools: [\"handoff\"],\n      maxDurationMs: 60_000,\n    },\n  ]),\n  \"rag-answer-agent\": baseTemplate(\"rag-answer-agent\", [\n    {\n      id: \"rag-answer\",\n      runId: \"rag-answer\",\n      requireTools: [\"retrieve\", \"answer\"],\n      expectedObservations: [\"citationShown\"],\n      maxDurationMs: 45_000,\n    },\n  ]),\n  \"human-approval-agent\": baseTemplate(\"human-approval-agent\", [\n    {\n      id: \"approval-gate\",\n      runId: \"approval-gate\",\n      expectedObservations: [\"approvalRequested\", \"approvalGranted\"],\n      maxDurationMs: 60_000,\n    },\n  ]),\n};\n\nexport function listSuiteTemplates(): SuiteTemplateId[] {\n  return [...SUITE_TEMPLATE_IDS];\n}\n\nexport function getSuiteTemplate(id: string): SuiteConfig | undefined {\n  if (!(SUITE_TEMPLATE_IDS as readonly string[]).includes(id)) return undefined;\n  return structuredClone(TEMPLATES[id as SuiteTemplateId]);\n}\n\nexport function resolveSuiteTemplate(id: string): SuiteConfig {\n  const template = getSuiteTemplate(id);\n  if (template === undefined) {\n    throw new Error(\n      `Unknown suite template \"${id}\". Available: ${SUITE_TEMPLATE_IDS.join(\", \")}`,\n    );\n  }\n  return template;\n}\n","import type { TraceMetadataStatus } from \"../types.js\";\n\nexport type CohortMetricId =\n  | \"errorRate\"\n  | \"duration\"\n  | \"toolChoice\"\n  | \"toolOrdering\"\n  | \"llmCallCount\"\n  | \"tokenUsage\"\n  | \"retryCount\"\n  | \"observationFailure\"\n  | \"guardrailFailure\"\n  | \"circuitViolation\"\n  | \"redactionWarning\";\n\nexport const COHORT_METRIC_IDS: readonly CohortMetricId[] = [\n  \"errorRate\",\n  \"duration\",\n  \"toolChoice\",\n  \"toolOrdering\",\n  \"llmCallCount\",\n  \"tokenUsage\",\n  \"retryCount\",\n  \"observationFailure\",\n  \"guardrailFailure\",\n  \"circuitViolation\",\n  \"redactionWarning\",\n];\n\nexport interface CohortRunMetrics {\n  runId: string;\n  cohortLabel?: string;\n  groupKey: string;\n  status: TraceMetadataStatus;\n  error: boolean;\n  durationMs?: number;\n  llmCallCount: number;\n  tokenUsageTotal?: number;\n  retryCount: number;\n  observationFailures: number;\n  guardrailFailures: number;\n  circuitViolations: number;\n  redactionWarnings: number;\n  toolChoices: string[];\n  toolOrdering: string[];\n}\n\nexport interface CohortAggregateMetrics {\n  groupKey: string;\n  cohortLabel?: string;\n  runCount: number;\n  errorRate: number;\n  avgDurationMs?: number;\n  p95DurationMs?: number;\n  avgLlmCallCount: number;\n  avgTokenUsage?: number;\n  avgRetryCount: number;\n  observationFailureRate: number;\n  avgGuardrailFailures: number;\n  avgCircuitViolations: number;\n  avgRedactionWarnings: number;\n  dominantToolChoice?: string;\n  toolOrderingSignature?: string;\n}\n\nexport interface CohortMetricComparison {\n  metric: CohortMetricId;\n  baseline?: number | string;\n  candidate?: number | string;\n  delta?: number | string;\n  regression: boolean;\n  message: string;\n}\n\nexport interface CohortAnalysisResult {\n  ok: boolean;\n  traceDir: string;\n  baseline?: string;\n  candidate?: string;\n  cohortKey: string;\n  groupBy: string;\n  metrics: CohortMetricId[];\n  groups: CohortAggregateMetrics[];\n  comparisons: CohortMetricComparison[];\n  runs: CohortRunMetrics[];\n  warnings: string[];\n}\n\nexport interface CohortToleranceOptions {\n  /** Minimum runs per cohort label before comparisons are considered valid. */\n  minSampleSize?: number;\n  /** Allowed relative delta (0–1) before a metric comparison is a regression. */\n  maxRelativeDelta?: number;\n}\n\nexport interface AnalyzeCohortOptions {\n  traceDir: string;\n  baseline?: string;\n  candidate?: string;\n  cohortKey?: string;\n  groupBy?: string;\n  metrics?: CohortMetricId[];\n  tolerance?: CohortToleranceOptions;\n}\n\nexport interface RenderCohortReportOptions {\n  format?: \"markdown\" | \"json\" | \"html\";\n}\n","import type {\n  CohortAggregateMetrics,\n  CohortMetricComparison,\n  CohortMetricId,\n} from \"./types.js\";\n\nfunction compareNumber(\n  metric: CohortMetricId,\n  label: string,\n  baseline?: number,\n  candidate?: number,\n  higherIsWorse = true,\n  maxRelativeDelta?: number,\n): CohortMetricComparison | undefined {\n  if (baseline === undefined && candidate === undefined) return undefined;\n  const delta =\n    baseline !== undefined && candidate !== undefined\n      ? candidate - baseline\n      : undefined;\n  let regression =\n    delta !== undefined &&\n    ((higherIsWorse && delta > 0) || (!higherIsWorse && delta < 0));\n  if (\n    regression &&\n    maxRelativeDelta !== undefined &&\n    baseline !== undefined &&\n    baseline !== 0 &&\n    delta !== undefined\n  ) {\n    const relative = Math.abs(delta / baseline);\n    if (relative <= maxRelativeDelta) regression = false;\n  }\n  return {\n    metric,\n    baseline,\n    candidate,\n    delta,\n    regression,\n    message: `${label}: baseline=${baseline ?? \"n/a\"} candidate=${candidate ?? \"n/a\"}${\n      delta !== undefined ? ` (delta ${delta})` : \"\"\n    }`,\n  };\n}\n\nfunction pickAggregate(\n  groups: readonly CohortAggregateMetrics[],\n  cohortLabel: string,\n  groupKey?: string,\n): CohortAggregateMetrics | undefined {\n  return groups.find(\n    (group) =>\n      group.cohortLabel === cohortLabel &&\n      (groupKey === undefined || group.groupKey === groupKey),\n  );\n}\n\nexport function compareCohortAggregates(\n  groups: readonly CohortAggregateMetrics[],\n  options: {\n    baseline: string;\n    candidate: string;\n    metrics: readonly CohortMetricId[];\n    groupKey?: string;\n    maxRelativeDelta?: number;\n  },\n): CohortMetricComparison[] {\n  const baselineAgg = pickAggregate(groups, options.baseline, options.groupKey);\n  const candidateAgg = pickAggregate(groups, options.candidate, options.groupKey);\n  const comparisons: CohortMetricComparison[] = [];\n  const tolerance = options.maxRelativeDelta;\n\n  for (const metric of options.metrics) {\n    switch (metric) {\n      case \"errorRate\": {\n        const item = compareNumber(\n          metric,\n          \"Error rate\",\n          baselineAgg?.errorRate,\n          candidateAgg?.errorRate,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"duration\": {\n        const item = compareNumber(\n          metric,\n          \"Average duration (ms)\",\n          baselineAgg?.avgDurationMs,\n          candidateAgg?.avgDurationMs,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"llmCallCount\": {\n        const item = compareNumber(\n          metric,\n          \"Average LLM calls\",\n          baselineAgg?.avgLlmCallCount,\n          candidateAgg?.avgLlmCallCount,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"tokenUsage\": {\n        const item = compareNumber(\n          metric,\n          \"Average token usage\",\n          baselineAgg?.avgTokenUsage,\n          candidateAgg?.avgTokenUsage,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"retryCount\": {\n        const item = compareNumber(\n          metric,\n          \"Average retries\",\n          baselineAgg?.avgRetryCount,\n          candidateAgg?.avgRetryCount,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"observationFailure\": {\n        const item = compareNumber(\n          metric,\n          \"Observation failure rate\",\n          baselineAgg?.observationFailureRate,\n          candidateAgg?.observationFailureRate,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"toolChoice\": {\n        const baselineValue = baselineAgg?.dominantToolChoice;\n        const candidateValue = candidateAgg?.dominantToolChoice;\n        comparisons.push({\n          metric,\n          baseline: baselineValue,\n          candidate: candidateValue,\n          delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n          regression: baselineValue !== candidateValue,\n          message: `Tool choice: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n        });\n        break;\n      }\n      case \"toolOrdering\": {\n        const baselineValue = baselineAgg?.toolOrderingSignature;\n        const candidateValue = candidateAgg?.toolOrderingSignature;\n        comparisons.push({\n          metric,\n          baseline: baselineValue,\n          candidate: candidateValue,\n          delta: baselineValue === candidateValue ? \"same\" : \"changed\",\n          regression: baselineValue !== candidateValue,\n          message: `Tool ordering: baseline=${baselineValue ?? \"n/a\"} candidate=${candidateValue ?? \"n/a\"}`,\n        });\n        break;\n      }\n      case \"guardrailFailure\": {\n        const item = compareNumber(\n          metric,\n          \"Guardrail failures\",\n          baselineAgg?.avgGuardrailFailures,\n          candidateAgg?.avgGuardrailFailures,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"circuitViolation\": {\n        const item = compareNumber(\n          metric,\n          \"Circuit violations\",\n          baselineAgg?.avgCircuitViolations,\n          candidateAgg?.avgCircuitViolations,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      case \"redactionWarning\": {\n        const item = compareNumber(\n          metric,\n          \"Redaction warnings\",\n          baselineAgg?.avgRedactionWarnings,\n          candidateAgg?.avgRedactionWarnings,\n          true,\n          tolerance,\n        );\n        if (item) comparisons.push(item);\n        break;\n      }\n      default:\n        break;\n    }\n  }\n\n  return comparisons;\n}\n","import { extractSessionWorkflowMetadata } from \"../sessions/metadata.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\n\nexport function parseCohortMetricList(value: string | undefined): string[] {\n  if (value === undefined || value.trim() === \"\") return [];\n  return value\n    .split(\",\")\n    .map((item) => item.trim())\n    .filter((item) => item.length > 0);\n}\n\nexport function parseGroupBySpec(groupBy: string | undefined): {\n  kind: \"model\" | \"session\" | \"group\" | \"metadata\";\n  metadataKey?: string;\n} {\n  const raw = (groupBy ?? \"model\").trim();\n  if (raw === \"model\") return { kind: \"model\" };\n  if (raw === \"session\") return { kind: \"session\" };\n  if (raw === \"group\") return { kind: \"group\" };\n  if (raw.startsWith(\"metadata.\")) {\n    const metadataKey = raw.slice(\"metadata.\".length).trim();\n    if (metadataKey === \"\") throw new Error(\"metadata group-by requires a key.\");\n    return { kind: \"metadata\", metadataKey };\n  }\n  throw new Error(`Unsupported --group-by value: ${raw}`);\n}\n\nfunction metadataString(\n  metadata: Record<string, unknown> | undefined,\n  key: string,\n): string | undefined {\n  const value = metadata?.[key];\n  return typeof value === \"string\" && value.trim() !== \"\" ? value.trim() : undefined;\n}\n\nexport function resolveRunGroupKey(\n  run: SessionRunRecord,\n  groupBy: ReturnType<typeof parseGroupBySpec>,\n): string {\n  const metadata = run.metadata ?? {};\n  switch (groupBy.kind) {\n    case \"model\":\n      return metadataString(metadata, \"model\") ?? \"unknown\";\n    case \"session\":\n      return (\n        extractSessionWorkflowMetadata(metadata)?.sessionId ??\n        metadataString(metadata, \"sessionId\") ??\n        \"__unscoped__\"\n      );\n    case \"group\":\n      return (\n        extractSessionWorkflowMetadata(metadata)?.groupId ??\n        metadataString(metadata, \"groupId\") ??\n        \"__unscoped__\"\n      );\n    case \"metadata\":\n      return metadataString(metadata, groupBy.metadataKey!) ?? \"__missing__\";\n    default:\n      return \"unknown\";\n  }\n}\n\nexport function resolveCohortLabel(\n  run: SessionRunRecord,\n  cohortKey: string,\n  baseline?: string,\n  candidate?: string,\n): string | undefined {\n  const label = metadataString(run.metadata, cohortKey);\n  if (label === undefined) return undefined;\n  if (baseline !== undefined && label === baseline) return baseline;\n  if (candidate !== undefined && label === candidate) return candidate;\n  if (baseline === undefined && candidate === undefined) return label;\n  return undefined;\n}\n\nexport function filterRunsForCohort(\n  runs: readonly SessionRunRecord[],\n  options: {\n    cohortKey: string;\n    baseline?: string;\n    candidate?: string;\n  },\n): { runs: SessionRunRecord[]; warnings: string[] } {\n  const warnings: string[] = [];\n  if (options.baseline === undefined && options.candidate === undefined) {\n    return { runs: [...runs], warnings };\n  }\n\n  const selected: SessionRunRecord[] = [];\n  for (const run of runs) {\n    const label = resolveCohortLabel(\n      run,\n      options.cohortKey,\n      options.baseline,\n      options.candidate,\n    );\n    if (label !== undefined) selected.push(run);\n  }\n\n  if (selected.length === 0) {\n    warnings.push(\n      `No runs matched baseline/candidate labels on metadata.${options.cohortKey}.`,\n    );\n  }\n\n  return { runs: selected, warnings };\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { buildRunSummary } from \"../trace-metadata.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport type { StepStartedEvent, TraceEvent } from \"../types.js\";\nimport type { CohortRunMetrics } from \"./types.js\";\n\nfunction asNumber(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction toolSteps(events: readonly TraceEvent[]): { choices: string[]; ordering: string[] } {\n  const ordering: string[] = [];\n  const choices = new Set<string>();\n  const sorted = [...events]\n    .filter((event) => event.event === \"step_started\")\n    .sort((a, b) => a.timestamp - b.timestamp);\n  for (const event of sorted) {\n    const step = event as StepStartedEvent;\n    if (step.type !== \"tool\") continue;\n    const name =\n      typeof step.metadata?.toolName === \"string\"\n        ? step.metadata.toolName\n        : step.name;\n    ordering.push(name);\n    choices.add(name);\n  }\n  return { choices: [...choices].sort(), ordering };\n}\n\nexport async function computeCohortRunMetrics(input: {\n  runId: string;\n  filePath: string;\n  metadata?: Record<string, unknown>;\n  status?: CohortRunMetrics[\"status\"];\n  durationMs?: number;\n  groupKey: string;\n  cohortLabel?: string;\n}): Promise<CohortRunMetrics> {\n  const events = await readTraceEventsFromFile(input.filePath);\n  const summary = buildRunSummary(events);\n  const tools = toolSteps(events);\n  const outcomes = extractOutcomesFromTraceEvents(events);\n  const observationFailures = outcomes.filter((item) => item.status === \"failed\").length;\n\n  const metadata = input.metadata ?? {};\n  const retryCount =\n    asNumber(metadata.attempt) !== undefined && asNumber(metadata.attempt)! > 1\n      ? asNumber(metadata.attempt)! - 1\n      : typeof metadata.retryOf === \"string\"\n        ? 1\n        : 0;\n\n  return {\n    runId: input.runId,\n    ...(input.cohortLabel !== undefined ? { cohortLabel: input.cohortLabel } : {}),\n    groupKey: input.groupKey,\n    status: summary.status,\n    error: summary.status === \"error\",\n    durationMs: summary.durationMs ?? input.durationMs,\n    llmCallCount: summary.llmSteps,\n    tokenUsageTotal: summary.totalTokens?.total,\n    retryCount,\n    observationFailures,\n    guardrailFailures: asNumber(metadata.guardrailFailures) ?? 0,\n    circuitViolations: asNumber(metadata.circuitViolations) ?? 0,\n    redactionWarnings: asNumber(metadata.redactionWarnings) ?? 0,\n    toolChoices: tools.choices,\n    toolOrdering: tools.ordering,\n  };\n}\n\nfunction percentile(values: number[], p: number): number | undefined {\n  if (values.length === 0) return undefined;\n  const sorted = [...values].sort((a, b) => a - b);\n  const idx = Math.min(\n    sorted.length - 1,\n    Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n  );\n  return sorted[idx];\n}\n\nfunction dominantToolChoice(runs: readonly CohortRunMetrics[]): string | undefined {\n  const counts = new Map<string, number>();\n  for (const run of runs) {\n    const signature = run.toolChoices.join(\",\");\n    if (signature === \"\") continue;\n    counts.set(signature, (counts.get(signature) ?? 0) + 1);\n  }\n  let best: string | undefined;\n  let bestCount = 0;\n  for (const [key, count] of counts) {\n    if (count > bestCount) {\n      best = key;\n      bestCount = count;\n    }\n  }\n  return best;\n}\n\nfunction orderingSignature(runs: readonly CohortRunMetrics[]): string | undefined {\n  const counts = new Map<string, number>();\n  for (const run of runs) {\n    const signature = run.toolOrdering.join(\">\");\n    if (signature === \"\") continue;\n    counts.set(signature, (counts.get(signature) ?? 0) + 1);\n  }\n  let best: string | undefined;\n  let bestCount = 0;\n  for (const [key, count] of counts) {\n    if (count > bestCount) {\n      best = key;\n      bestCount = count;\n    }\n  }\n  return best;\n}\n\nexport function aggregateCohortMetrics(\n  runs: readonly CohortRunMetrics[],\n  groupKey: string,\n  cohortLabel?: string,\n) {\n  const durations = runs\n    .map((run) => run.durationMs)\n    .filter((value): value is number => typeof value === \"number\");\n  const tokenValues = runs\n    .map((run) => run.tokenUsageTotal)\n    .filter((value): value is number => typeof value === \"number\");\n  const errors = runs.filter((run) => run.error).length;\n  const observationFailures = runs.reduce((sum, run) => sum + run.observationFailures, 0);\n\n  return {\n    groupKey,\n    ...(cohortLabel !== undefined ? { cohortLabel } : {}),\n    runCount: runs.length,\n    errorRate: runs.length > 0 ? errors / runs.length : 0,\n    avgDurationMs:\n      durations.length > 0\n        ? durations.reduce((sum, value) => sum + value, 0) / durations.length\n        : undefined,\n    p95DurationMs: percentile(durations, 95),\n    avgLlmCallCount:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.llmCallCount, 0) / runs.length\n        : 0,\n    avgTokenUsage:\n      tokenValues.length > 0\n        ? tokenValues.reduce((sum, value) => sum + value, 0) / tokenValues.length\n        : undefined,\n    avgRetryCount:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.retryCount, 0) / runs.length\n        : 0,\n    observationFailureRate:\n      runs.length > 0 ? observationFailures / runs.length : 0,\n    avgGuardrailFailures:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.guardrailFailures, 0) / runs.length\n        : 0,\n    avgCircuitViolations:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.circuitViolations, 0) / runs.length\n        : 0,\n    avgRedactionWarnings:\n      runs.length > 0\n        ? runs.reduce((sum, run) => sum + run.redactionWarnings, 0) / runs.length\n        : 0,\n    dominantToolChoice: dominantToolChoice(runs),\n    toolOrderingSignature: orderingSignature(runs),\n  };\n}\n","import type { SessionRunRecord } from \"../sessions/types.js\";\nimport { compareCohortAggregates } from \"./compare.js\";\nimport {\n  filterRunsForCohort,\n  parseGroupBySpec,\n  resolveCohortLabel,\n  resolveRunGroupKey,\n} from \"./grouping.js\";\nimport { aggregateCohortMetrics, computeCohortRunMetrics } from \"./metrics.js\";\nimport {\n  COHORT_METRIC_IDS,\n  type AnalyzeCohortOptions,\n  type CohortAnalysisResult,\n  type CohortMetricComparison,\n  type CohortMetricId,\n} from \"./types.js\";\n\nconst DEFAULT_METRICS: CohortMetricId[] = [\n  \"errorRate\",\n  \"duration\",\n  \"toolChoice\",\n  \"observationFailure\",\n];\n\nfunction normalizeMetrics(metrics: CohortMetricId[] | undefined): CohortMetricId[] {\n  if (metrics === undefined || metrics.length === 0) return [...DEFAULT_METRICS];\n  const allowed = new Set(COHORT_METRIC_IDS);\n  return metrics.filter((metric) => allowed.has(metric));\n}\n\nexport async function analyzeCohort(\n  runsInput: readonly SessionRunRecord[],\n  options: AnalyzeCohortOptions,\n): Promise<CohortAnalysisResult> {\n  const cohortKey = options.cohortKey ?? \"cohort\";\n  const groupBySpec = parseGroupBySpec(options.groupBy);\n  const metrics = normalizeMetrics(options.metrics);\n  const { runs: filteredRuns, warnings } = filterRunsForCohort(runsInput, {\n    cohortKey,\n    baseline: options.baseline,\n    candidate: options.candidate,\n  });\n\n  const runMetrics = [];\n  for (const run of filteredRuns) {\n    if (run.filePath === undefined) continue;\n    const cohortLabel = resolveCohortLabel(\n      run,\n      cohortKey,\n      options.baseline,\n      options.candidate,\n    );\n    runMetrics.push(\n      await computeCohortRunMetrics({\n        runId: run.runId,\n        filePath: run.filePath,\n        metadata: run.metadata,\n        status: run.status,\n        durationMs: run.durationMs,\n        groupKey: resolveRunGroupKey(run, groupBySpec),\n        cohortLabel,\n      }),\n    );\n  }\n\n  const groupMap = new Map<string, typeof runMetrics>();\n  for (const run of runMetrics) {\n    const key = `${run.cohortLabel ?? \"*\"}::${run.groupKey}`;\n    const bucket = groupMap.get(key) ?? [];\n    bucket.push(run);\n    groupMap.set(key, bucket);\n  }\n\n  const groups = [...groupMap.entries()]\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([, bucket]) =>\n      aggregateCohortMetrics(\n        bucket,\n        bucket[0]!.groupKey,\n        bucket[0]?.cohortLabel,\n      ),\n    );\n\n  const comparisons =\n    options.baseline !== undefined && options.candidate !== undefined\n      ? (() => {\n          const groupKeys = [\n            ...new Set(groups.map((group) => group.groupKey)),\n          ].sort((a, b) => a.localeCompare(b));\n          const items: CohortMetricComparison[] = [];\n          const minSample = options.tolerance?.minSampleSize ?? 1;\n          for (const groupKey of groupKeys) {\n            const baselineGroup = groups.find(\n              (group) => group.groupKey === groupKey && group.cohortLabel === options.baseline,\n            );\n            const candidateGroup = groups.find(\n              (group) => group.groupKey === groupKey && group.cohortLabel === options.candidate,\n            );\n            if (\n              (baselineGroup && baselineGroup.runCount < minSample) ||\n              (candidateGroup && candidateGroup.runCount < minSample)\n            ) {\n              warnings.push(\n                `Insufficient sample for group ${groupKey}: need at least ${minSample} run(s) per cohort.`,\n              );\n              continue;\n            }\n            items.push(\n              ...compareCohortAggregates(groups, {\n                baseline: options.baseline,\n                candidate: options.candidate,\n                metrics,\n                groupKey,\n                maxRelativeDelta: options.tolerance?.maxRelativeDelta,\n              }),\n            );\n          }\n          return items;\n        })()\n      : [];\n\n  const regression = comparisons.some((item) => item.regression);\n\n  return {\n    ok: !regression,\n    traceDir: options.traceDir,\n    ...(options.baseline !== undefined ? { baseline: options.baseline } : {}),\n    ...(options.candidate !== undefined ? { candidate: options.candidate } : {}),\n    cohortKey,\n    groupBy: options.groupBy ?? \"model\",\n    metrics,\n    groups,\n    comparisons,\n    runs: runMetrics,\n    warnings,\n  };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { CohortAnalysisResult, RenderCohortReportOptions } from \"./types.js\";\n\nfunction formatRate(value: number | undefined): string {\n  if (value === undefined) return \"n/a\";\n  return `${(value * 100).toFixed(1)}%`;\n}\n\nexport function renderCohortSummaryMarkdown(result: CohortAnalysisResult): string {\n  const lines: string[] = [];\n  lines.push(\"# Cohort analysis\");\n  lines.push(\"\");\n  lines.push(`Trace directory: \\`${result.traceDir}\\``);\n  lines.push(`Group by: \\`${result.groupBy}\\``);\n  if (result.baseline !== undefined && result.candidate !== undefined) {\n    lines.push(\n      `Baseline/Candidate key: \\`${result.cohortKey}\\` (${result.baseline} vs ${result.candidate})`,\n    );\n  }\n  lines.push(`Status: **${result.ok ? \"PASS\" : \"REGRESSION\"}**`);\n  lines.push(\"\");\n\n  if (result.warnings.length > 0) {\n    lines.push(\"## Warnings\");\n    for (const warning of result.warnings) lines.push(`- ${warning}`);\n    lines.push(\"\");\n  }\n\n  lines.push(\"## Groups\");\n  for (const group of result.groups) {\n    lines.push(\n      `### ${group.cohortLabel ?? \"all\"} / ${group.groupKey} (${group.runCount} runs)`,\n    );\n    lines.push(`- Error rate: ${formatRate(group.errorRate)}`);\n    if (group.avgDurationMs !== undefined) {\n      lines.push(`- Avg duration: ${Math.round(group.avgDurationMs)} ms`);\n    }\n    if (group.dominantToolChoice !== undefined) {\n      lines.push(`- Dominant tools: ${group.dominantToolChoice}`);\n    }\n    lines.push(\n      `- Observation failure rate: ${formatRate(group.observationFailureRate)}`,\n    );\n    lines.push(\"\");\n  }\n\n  if (result.comparisons.length > 0) {\n    lines.push(\"## Comparisons\");\n    for (const comparison of result.comparisons) {\n      const flag = comparison.regression ? \" **REGRESSION**\" : \"\";\n      lines.push(`- ${comparison.message}${flag}`);\n    }\n    lines.push(\"\");\n  }\n\n  return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderCohortReportHtml(result: CohortAnalysisResult): string {\n  const rows = result.groups\n    .map(\n      (group) =>\n        `<tr><td>${escapeHtml(group.cohortLabel ?? \"all\")}</td><td>${escapeHtml(group.groupKey)}</td><td>${group.runCount}</td><td>${escapeHtml(formatRate(group.errorRate))}</td><td>${group.avgDurationMs !== undefined ? Math.round(group.avgDurationMs) : \"n/a\"}</td></tr>`,\n    )\n    .join(\"\");\n\n  const comparisons = result.comparisons\n    .map(\n      (item) =>\n        `<li>${escapeHtml(item.message)}${item.regression ? \" <strong>REGRESSION</strong>\" : \"\"}</li>`,\n    )\n    .join(\"\");\n\n  return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\" />\n  <title>Cohort report</title>\n  <style>\n    body { font-family: system-ui, sans-serif; margin: 2rem; }\n    table { border-collapse: collapse; width: 100%; }\n    th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n    th { background: #f6f6f6; }\n  </style>\n</head>\n<body>\n  <h1>Cohort analysis</h1>\n  <p>Status: <strong>${result.ok ? \"PASS\" : \"REGRESSION\"}</strong></p>\n  <p>Trace directory: <code>${escapeHtml(result.traceDir)}</code></p>\n  <h2>Groups</h2>\n  <table>\n    <thead><tr><th>Cohort</th><th>Group</th><th>Runs</th><th>Error rate</th><th>Avg duration (ms)</th></tr></thead>\n    <tbody>${rows}</tbody>\n  </table>\n  ${result.comparisons.length > 0 ? `<h2>Comparisons</h2><ul>${comparisons}</ul>` : \"\"}\n</body>\n</html>`;\n}\n\nexport function renderCohortReport(\n  result: CohortAnalysisResult,\n  options: RenderCohortReportOptions = {},\n): string {\n  const format = options.format ?? \"markdown\";\n  if (format === \"json\") return JSON.stringify(result, null, 2);\n  if (format === \"html\") return renderCohortReportHtml(result);\n  return renderCohortSummaryMarkdown(result);\n}\n","export function parseGateList(value: string | undefined): string[] {\n  if (value === undefined || value.trim() === \"\") return [];\n  return value\n    .split(\",\")\n    .map((item) => item.trim())\n    .filter((item) => item.length > 0);\n}\n\nexport function parseGateNumber(\n  value: string | undefined,\n  label: string,\n  options: { min?: number; max?: number } = {},\n): number | undefined {\n  if (value === undefined || value.trim() === \"\") return undefined;\n  const parsed = Number(value);\n  if (!Number.isFinite(parsed)) {\n    throw new Error(`Invalid ${label}: ${value}`);\n  }\n  if (options.min !== undefined && parsed < options.min) {\n    throw new Error(`${label} must be at least ${options.min}.`);\n  }\n  if (options.max !== undefined && parsed > options.max) {\n    throw new Error(`${label} must be at most ${options.max}.`);\n  }\n  return parsed;\n}\n","import { extractOutcomesFromTraceEvents } from \"../outcomes/extract.js\";\nimport { readTraceEventsFromFile } from \"../storage.js\";\nimport { computeCohortRunMetrics } from \"../cohort/metrics.js\";\nimport type { SessionRunRecord } from \"../sessions/types.js\";\nimport type { GateCheckResult, RunGateOptions } from \"./types.js\";\n\nfunction percentile(values: number[], p: number): number | undefined {\n  if (values.length === 0) return undefined;\n  const sorted = [...values].sort((a, b) => a - b);\n  const idx = Math.min(\n    sorted.length - 1,\n    Math.max(0, Math.ceil((p / 100) * sorted.length) - 1),\n  );\n  return sorted[idx];\n}\n\nfunction hasThresholds(options: RunGateOptions): boolean {\n  return (\n    options.maxErrorRate !== undefined ||\n    options.maxP95DurationMs !== undefined ||\n    (options.forbidTools?.length ?? 0) > 0 ||\n    (options.requireObservations?.length ?? 0) > 0\n  );\n}\n\nexport function gateHasThresholds(options: RunGateOptions): boolean {\n  return hasThresholds(options);\n}\n\nasync function loadRunMetrics(runs: readonly SessionRunRecord[]) {\n  const metrics = [];\n  for (const run of runs) {\n    if (run.filePath === undefined) continue;\n    metrics.push(\n      await computeCohortRunMetrics({\n        runId: run.runId,\n        filePath: run.filePath,\n        metadata: run.metadata,\n        status: run.status,\n        durationMs: run.durationMs,\n        groupKey: \"all\",\n      }),\n    );\n  }\n  return metrics;\n}\n\nasync function observationStatus(\n  filePath: string,\n  name: string,\n): Promise<\"passed\" | \"failed\" | \"missing\"> {\n  const events = await readTraceEventsFromFile(filePath);\n  const outcomes = extractOutcomesFromTraceEvents(events);\n  const match = outcomes.find((item) => item.name === name);\n  if (!match) return \"missing\";\n  return match.status === \"passed\" ? \"passed\" : \"failed\";\n}\n\nexport async function evaluateGateThresholds(\n  runs: readonly SessionRunRecord[],\n  options: RunGateOptions,\n): Promise<{ checks: GateCheckResult[]; readErrors: string[] }> {\n  const checks: GateCheckResult[] = [];\n  const readErrors: string[] = [];\n\n  if (!hasThresholds(options)) {\n    return { checks, readErrors };\n  }\n\n  if (runs.length === 0) {\n    readErrors.push(\"No trace runs found in the gate directory.\");\n    return { checks, readErrors };\n  }\n\n  let runMetrics;\n  try {\n    runMetrics = await loadRunMetrics(runs);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    readErrors.push(message);\n    return { checks, readErrors };\n  }\n\n  if (options.maxErrorRate !== undefined) {\n    const errors = runMetrics.filter((run) => run.error).length;\n    const actual = runMetrics.length > 0 ? (errors / runMetrics.length) * 100 : 0;\n    const ok = actual <= options.maxErrorRate;\n    checks.push({\n      id: \"maxErrorRate\",\n      name: \"Max error rate\",\n      ok,\n      expected: options.maxErrorRate,\n      actual: Math.round(actual * 10) / 10,\n      message: ok\n        ? `Error rate ${actual.toFixed(1)}% within limit ${options.maxErrorRate}%`\n        : `Error rate ${actual.toFixed(1)}% exceeds limit ${options.maxErrorRate}%`,\n    });\n  }\n\n  if (options.maxP95DurationMs !== undefined) {\n    const durations = runMetrics\n      .map((run) => run.durationMs)\n      .filter((value): value is number => typeof value === \"number\");\n    const actual = percentile(durations, 95);\n    const ok = actual !== undefined && actual <= options.maxP95DurationMs;\n    checks.push({\n      id: \"maxP95Duration\",\n      name: \"Max p95 duration (ms)\",\n      ok,\n      expected: options.maxP95DurationMs,\n      actual: actual ?? \"n/a\",\n      message:\n        actual === undefined\n          ? \"No duration samples available for p95 check.\"\n          : ok\n            ? `P95 duration ${Math.round(actual)} ms within limit ${options.maxP95DurationMs} ms`\n            : `P95 duration ${Math.round(actual)} ms exceeds limit ${options.maxP95DurationMs} ms`,\n    });\n  }\n\n  for (const tool of options.forbidTools ?? []) {\n    let violated = false;\n    for (const run of runMetrics) {\n      const used =\n        run.toolChoices.includes(tool) || run.toolOrdering.includes(tool);\n      if (used) {\n        violated = true;\n        checks.push({\n          id: \"forbidTool\",\n          name: `Forbid tool: ${tool}`,\n          ok: false,\n          expected: `not used`,\n          actual: \"used\",\n          runId: run.runId,\n          message: `Forbidden tool \"${tool}\" used in run ${run.runId}`,\n        });\n      }\n    }\n    if (!violated) {\n      checks.push({\n        id: \"forbidTool\",\n        name: `Forbid tool: ${tool}`,\n        ok: true,\n        message: `Forbidden tool \"${tool}\" not used`,\n      });\n    }\n  }\n\n  for (const observation of options.requireObservations ?? []) {\n    for (const run of runs) {\n      if (run.filePath === undefined) continue;\n      try {\n        const status = await observationStatus(run.filePath, observation);\n        const ok = status === \"passed\";\n        checks.push({\n          id: \"requireObservation\",\n          name: `Require observation: ${observation}`,\n          ok,\n          expected: \"passed\",\n          actual: status,\n          runId: run.runId,\n          message: ok\n            ? `Observation \"${observation}\" passed in run ${run.runId}`\n            : status === \"missing\"\n              ? `Observation \"${observation}\" missing in run ${run.runId}`\n              : `Observation \"${observation}\" failed in run ${run.runId}`,\n        });\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        readErrors.push(`Run ${run.runId}: ${message}`);\n      }\n    }\n  }\n\n  return { checks, readErrors };\n}\n\nexport function checksFromSuiteResult(\n  suiteResult: import(\"../suite/types.js\").SuiteRunResult,\n): GateCheckResult[] {\n  const checks: GateCheckResult[] = [\n    {\n      id: \"suite\",\n      name: `Suite: ${suiteResult.suiteName}`,\n      ok: suiteResult.ok,\n      message: suiteResult.ok\n        ? `Suite passed (${suiteResult.summary.passed} cases)`\n        : `Suite failed (${suiteResult.summary.failed} failed, ${suiteResult.summary.errors} errors)`,\n    },\n  ];\n\n  for (const suiteCase of suiteResult.cases) {\n    if (suiteCase.status === \"pass\") continue;\n    checks.push({\n      id: \"suite\",\n      name: `Case: ${suiteCase.id}`,\n      ok: false,\n      message: suiteCase.message ?? `Case status: ${suiteCase.status}`,\n    });\n  }\n\n  return checks;\n}\n","import path from \"node:path\";\n\nimport { runSuite } from \"../suite/run.js\";\nimport type { GateCheckResult, GateExitCode, GateResult, RunGateOptions } from \"./types.js\";\nimport { checksFromSuiteResult, evaluateGateThresholds, gateHasThresholds } from \"./evaluate.js\";\n\nfunction resolveExitCode(input: {\n  ok: boolean;\n  configError: boolean;\n  readError: boolean;\n}): GateExitCode {\n  if (input.configError) return 2;\n  if (input.readError) return 3;\n  if (!input.ok) return 1;\n  return 0;\n}\n\nfunction validateOptions(options: RunGateOptions): string[] {\n  const errors: string[] = [];\n  const hasSuite = options.suitePath !== undefined && options.suitePath.trim() !== \"\";\n  const hasThresholds = gateHasThresholds(options);\n\n  if (!hasSuite && !hasThresholds) {\n    errors.push(\n      \"No gate rules specified. Pass --suite or at least one threshold flag.\",\n    );\n  }\n\n  if (hasThresholds && (options.traceDir === undefined || options.traceDir.trim() === \"\")) {\n    if (!hasSuite) {\n      errors.push(\"Threshold flags require --dir <trace-directory>.\");\n    }\n  }\n\n  if (options.maxErrorRate !== undefined && options.maxErrorRate < 0) {\n    errors.push(\"--max-error-rate must be a non-negative percentage.\");\n  }\n  if (options.maxErrorRate !== undefined && options.maxErrorRate > 100) {\n    errors.push(\"--max-error-rate must be at most 100.\");\n  }\n\n  if (options.maxP95DurationMs !== undefined && options.maxP95DurationMs < 0) {\n    errors.push(\"--max-p95-duration must be a non-negative millisecond value.\");\n  }\n\n  return errors;\n}\n\nfunction isConfigLoadError(error: unknown): boolean {\n  if (!(error instanceof Error)) return false;\n  const ext = path.extname(error.message);\n  if (error.message.includes(\"Unsupported suite config extension\")) return true;\n  if (error.message.includes(\"TypeScript suite configs require\")) return true;\n  if (error.message.includes(\"No suite config found\")) return true;\n  if (error.message.includes(\"AI_SUITE_CONFIG\")) return true;\n  if (ext === \".ts\" || ext === \".mts\" || ext === \".cts\") return true;\n  return \"diagnostics\" in error;\n}\n\nexport async function runGate(\n  runs: readonly import(\"../sessions/types.js\").SessionRunRecord[],\n  options: RunGateOptions,\n): Promise<GateResult> {\n  const diagnostics: string[] = [];\n  const checks: GateCheckResult[] = [];\n\n  const validationErrors = validateOptions(options);\n  if (validationErrors.length > 0) {\n    return {\n      ok: false,\n      exitCode: 2,\n      runCount: 0,\n      checks,\n      diagnostics: validationErrors,\n    };\n  }\n\n  let traceDir = options.traceDir?.trim();\n  let suiteResult: GateResult[\"suiteResult\"];\n\n  if (options.suitePath !== undefined && options.suitePath.trim() !== \"\") {\n    try {\n      suiteResult = await runSuite({\n        configPath: options.suitePath,\n        cwd: options.cwd,\n      });\n      traceDir = traceDir ?? suiteResult.tracesDir;\n      checks.push(...checksFromSuiteResult(suiteResult));\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      diagnostics.push(message);\n      return {\n        ok: false,\n        exitCode: isConfigLoadError(error) ? 2 : 3,\n        traceDir,\n        suitePath: options.suitePath,\n        runCount: 0,\n        checks,\n        diagnostics,\n      };\n    }\n  }\n\n  if (gateHasThresholds(options)) {\n    const thresholdDir = traceDir;\n    if (thresholdDir === undefined || thresholdDir.trim() === \"\") {\n      return {\n        ok: false,\n        exitCode: 2,\n        traceDir,\n        suitePath: options.suitePath,\n        runCount: runs.length,\n        checks,\n        diagnostics: [\"Threshold evaluation requires a trace directory.\"],\n        ...(suiteResult !== undefined ? { suiteResult } : {}),\n      };\n    }\n\n    const thresholdRuns = runs.length > 0 ? runs : [];\n    const { checks: thresholdChecks, readErrors } = await evaluateGateThresholds(\n      thresholdRuns,\n      options,\n    );\n    checks.push(...thresholdChecks);\n    diagnostics.push(...readErrors);\n\n    if (readErrors.length > 0) {\n      const ok = checks.length > 0 && checks.every((item) => item.ok);\n      return {\n        ok,\n        exitCode: resolveExitCode({\n          ok,\n          configError: false,\n          readError: true,\n        }),\n        traceDir: thresholdDir,\n        suitePath: options.suitePath,\n        runCount: thresholdRuns.length,\n        checks,\n        diagnostics,\n        ...(suiteResult !== undefined ? { suiteResult } : {}),\n      };\n    }\n  }\n\n  const ok = checks.length > 0 && checks.every((item) => item.ok);\n  return {\n    ok,\n    exitCode: resolveExitCode({ ok, configError: false, readError: false }),\n    traceDir,\n    suitePath: options.suitePath,\n    runCount: runs.length,\n    checks,\n    diagnostics,\n    ...(suiteResult !== undefined ? { suiteResult } : {}),\n  };\n}\n","import { escapeHtml } from \"../exporters/helpers.js\";\nimport type { GateResult, RenderGateReportOptions } from \"./types.js\";\n\nfunction escapeXml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n\nexport function renderGateSummaryMarkdown(result: GateResult): string {\n  const lines: string[] = [];\n  lines.push(\"# AgentInspect gate\");\n  lines.push(\"\");\n  lines.push(`Status: **${result.ok ? \"PASS\" : \"FAIL\"}** (exit ${result.exitCode})`);\n  if (result.traceDir !== undefined) {\n    lines.push(`Trace directory: \\`${result.traceDir}\\``);\n  }\n  if (result.suitePath !== undefined) {\n    lines.push(`Suite config: \\`${result.suitePath}\\``);\n  }\n  lines.push(`Runs evaluated: ${result.runCount}`);\n  lines.push(\"\");\n\n  if (result.diagnostics.length > 0) {\n    lines.push(\"## Diagnostics\");\n    for (const item of result.diagnostics) lines.push(`- ${item}`);\n    lines.push(\"\");\n  }\n\n  lines.push(\"## Checks\");\n  for (const check of result.checks) {\n    const flag = check.ok ? \"PASS\" : \"FAIL\";\n    lines.push(`- [${flag}] ${check.name}: ${check.message}`);\n  }\n  lines.push(\"\");\n\n  return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateGithubStepSummary(result: GateResult): string {\n  const lines: string[] = [];\n  lines.push(`## AgentInspect gate: ${result.ok ? \"PASS\" : \"FAIL\"}`);\n  lines.push(\"\");\n  lines.push(\"| Check | Status | Details |\");\n  lines.push(\"| --- | --- | --- |\");\n  for (const check of result.checks) {\n    lines.push(\n      `| ${check.name} | ${check.ok ? \"pass\" : \"fail\"} | ${check.message.replace(/\\|/g, \"/\")} |`,\n    );\n  }\n  if (result.diagnostics.length > 0) {\n    lines.push(\"\");\n    lines.push(\"**Diagnostics**\");\n    for (const item of result.diagnostics) lines.push(`- ${item}`);\n  }\n  return lines.join(\"\\n\").trimEnd();\n}\n\nexport function renderGateReportHtml(result: GateResult): string {\n  const rows = result.checks\n    .map(\n      (check) =>\n        `<tr><td>${escapeHtml(check.name)}</td><td>${check.ok ? \"PASS\" : \"FAIL\"}</td><td>${escapeHtml(check.message)}</td></tr>`,\n    )\n    .join(\"\");\n\n  return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\" />\n  <title>Gate report</title>\n  <style>\n    body { font-family: system-ui, sans-serif; margin: 2rem; }\n    table { border-collapse: collapse; width: 100%; }\n    th, td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }\n    th { background: #f6f6f6; }\n  </style>\n</head>\n<body>\n  <h1>AgentInspect gate</h1>\n  <p>Status: <strong>${result.ok ? \"PASS\" : \"FAIL\"}</strong> (exit ${result.exitCode})</p>\n  <h2>Checks</h2>\n  <table>\n    <thead><tr><th>Check</th><th>Status</th><th>Details</th></tr></thead>\n    <tbody>${rows}</tbody>\n  </table>\n</body>\n</html>`;\n}\n\nexport function renderGateJUnit(result: GateResult): string {\n  const failures = result.checks.filter((check) => !check.ok).length;\n  const tests = result.checks.length;\n  const cases = result.checks\n    .map((check) => {\n      if (check.ok) {\n        return `    <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\" />`;\n      }\n      return `    <testcase name=\"${escapeXml(check.name)}\" classname=\"gate\">\n      <failure message=\"${escapeXml(check.message)}\">${escapeXml(check.message)}</failure>\n    </testcase>`;\n    })\n    .join(\"\\n\");\n\n  return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n  <testsuite name=\"agent-inspect-gate\" tests=\"${tests}\" failures=\"${failures}\" errors=\"0\" time=\"0\">\n${cases}\n  </testsuite>\n</testsuites>`;\n}\n\n/**\n * Compact GitHub Actions workflow-command annotations for failed checks.\n * File/line are omitted when the gate has no source locations (typical for\n * trajectory thresholds).\n */\nexport function renderGateGithubAnnotations(result: GateResult): string {\n  return result.checks\n    .filter((check) => !check.ok)\n    .map((check) => {\n      const message = check.message.replace(/\\r?\\n/g, \" \").replace(/%/g, \"%25\");\n      return `::error title=${check.name}::${message}`;\n    })\n    .join(\"\\n\");\n}\n\nexport function renderGateReport(\n  result: GateResult,\n  options: RenderGateReportOptions = {},\n): string {\n  const format = options.format ?? \"markdown\";\n  if (format === \"json\") return JSON.stringify(result, null, 2);\n  if (format === \"json-compact\") {\n    return JSON.stringify({\n      ok: result.ok,\n      exitCode: result.exitCode,\n      failed: result.checks.filter((check) => !check.ok).map((check) => check.name),\n      checks: result.checks.map((check) => ({\n        name: check.name,\n        ok: check.ok,\n        message: check.message,\n      })),\n    });\n  }\n  if (format === \"html\") return renderGateReportHtml(result);\n  if (format === \"junit\") return renderGateJUnit(result);\n  if (format === \"github\") return renderGateGithubStepSummary(result);\n  if (format === \"github-annotations\") return renderGateGithubAnnotations(result);\n  return renderGateSummaryMarkdown(result);\n}\n","/**\n * Optional omitted-payload digest commitment helpers (6.22; preflight bound in 6.25.1).\n *\n * A digest proves bytes were observed/omitted; it is not redaction, authorization,\n * or a secret-management feature. AgentInspect does not hold HMAC keys.\n *\n * @experimental Available through `agent-inspect/advanced`.\n */\n\nimport { createHash } from \"node:crypto\";\n\nexport type OmittedPayloadAlgorithm = \"sha256\";\n\n/**\n * Bounded commitment recorded when payload bytes are intentionally omitted.\n *\n * @experimental\n */\nexport interface OmittedPayloadCommitment {\n  algorithm: OmittedPayloadAlgorithm;\n  digest: string;\n  byteLength: number;\n  contentType?: string;\n  shape?: string;\n  capturePolicy: \"omitted\" | \"preview-only\" | \"digest-only\";\n}\n\n/** Maximum input size accepted for digest commitment (1 MiB). */\nexport const OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES = 1024 * 1024;\n\n/**\n * Preflight byte length without allocating a full Buffer copy for oversized input.\n */\nexport function omittedPayloadByteLength(payload: string | Uint8Array): number {\n  if (typeof payload === \"string\") {\n    return Buffer.byteLength(payload, \"utf8\");\n  }\n  return payload.byteLength;\n}\n\n/**\n * Build a SHA-256 digest commitment for omitted payload bytes.\n * Throws if input exceeds the 1 MiB bound (checked before copying oversized strings).\n */\nexport function createOmittedPayloadCommitment(\n  payload: string | Uint8Array,\n  options: {\n    contentType?: string;\n    shape?: string;\n    capturePolicy?: OmittedPayloadCommitment[\"capturePolicy\"];\n  } = {},\n): OmittedPayloadCommitment {\n  const byteLength = omittedPayloadByteLength(payload);\n  if (byteLength > OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES) {\n    throw new RangeError(\n      `Omitted payload exceeds ${OMITTED_PAYLOAD_MAX_DIGEST_INPUT_BYTES} byte digest bound.`,\n    );\n  }\n  // Strings: only allocate after preflight. Uint8Array: hash without Buffer.from copy.\n  const digest =\n    typeof payload === \"string\"\n      ? createHash(\"sha256\").update(Buffer.from(payload, \"utf8\")).digest(\"hex\")\n      : createHash(\"sha256\").update(payload).digest(\"hex\");\n  return {\n    algorithm: \"sha256\",\n    digest,\n    byteLength,\n    ...(options.contentType !== undefined ? { contentType: options.contentType } : {}),\n    ...(options.shape !== undefined ? { shape: options.shape } : {}),\n    capturePolicy: options.capturePolicy ?? \"digest-only\",\n  };\n}\n"]}